[求助] python调用第三方工具库的小project(有偿)

TerryloveTracy 2018-11-26 09:06:28
正在作一个小项目,本人学得流体机械,现在需要用python来完成一个自动化循环过程。
主要是对编程无力。
项目目的很简单的,对于专业编程人员来说。
现在求助大家,并且因为事件紧迫,需要在3周内完成,所以我打算有偿寻找帮助,具体多少可以私聊。
我已经写了一部分代码,需要高手帮我完善和优化一下~

下面简单说一下项目
input:
对已有的几何文件 (*.brep/step/iges/stl)或 需要一个GUI窗口来输入几何数据(点,线,面,体积)结构如下:
vertex1=[id, x, y, z]
line1 = [id, vertex1, vertex2]
face1 = [id, line1, line2, line3, line4]
solid1 = [id, face1,face2,face3,face4,face5,face6] (六面体结构)

这些数据我已经保存在一个叫 geometry_elements 类里了。
这步骤已经完成80%,优点小问题,需要改进。

下一步是重点。我需要调用第三方工具SALOME中的python模块来调用和处理上面geometry_elements类里的数据。
通过第三方工具 SALOME 来读取 input
然后经过一些列操作会输出文件(*.unv/cgns)

现在我的问题,主要是这里。
Salome第三方工具可以读取python文件。我的目的是,写一个脚本,来通过这个脚本调用salome的模块,然后对数据进行操作。这个操作过程需要我在python console里输入一些命令来完成。现在我调用了第三方工具,但是不能输入命令。
问题还是在调用第三方工具这里,所以需要大牛来帮忙。

output:
对文件(*.unv/cgns)进行读取并且按照要求进行转化成其他文件(*.stl/ASCII格式 等等)
...全文
841 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
七月漠南 2018-12-06
  • 打赏
  • 举报
回复
用ctypes工具把salome库封装成模块,使用的时候就可以直接import
TerryloveTracy 2018-12-04
  • 打赏
  • 举报
回复
引用 10 楼 csbinchina 的回复:
調用dll動態庫的方法:

import clr

clr.FindAssembly('dllname' + '.dll') # 加载dll文件
from dllname import * # 导入命名空间

instance = modulename()
para1 = instance.functionname(para1, para2)


以上方法在python 3.5 + C# 2015環境中可用。


https://sourceforge.net/projects/salomegeometry/ 上面链接是我需要的库。
如何和 Python进行链接,当作 Import module 中的 module 用呢。


我下载后,里面都死c++代码和文件夹,还有一个readme文件,如下:
For compilation on a Linux system, please

- get the latest revision using svn, e.g.
svn co https://salomegeometry.svn.sourceforge.net/svnroot/salomegeometry salomegeometry
- cd to salomegeometry/adm/lin
- run autoreconf --install
- run ./configure
- run make

or

- use the "download tarball" feature of "Browse SVN" in the trunk project folder
- unpack the tarball
- cd to adm/lin in the unpacked project folder
- remove the files src, inc and resources in this folder
- create symbolic links named inc, src and resources pointing to ../../inc, ../../src and ../../resources
- run autoreconf --install
- run ./configure
- run make



我不清楚这个能不能当作 module 用。





csbinchina 2018-12-01
  • 打赏
  • 举报
回复
調用dll動態庫的方法:

import clr

clr.FindAssembly('dllname' + '.dll') # 加载dll文件
from dllname import * # 导入命名空间

instance = modulename()
para1 = instance.functionname(para1, para2)


以上方法在python 3.5 + C# 2015環境中可用。
TerryloveTracy 2018-11-30
  • 打赏
  • 举报
回复

from PyIOMeshingController.Reader.tFlow_geom_parser_reader import *

import os
import sys


class salomeInput(object):
def __init__(self,geomElements):
# initialisation
import salome
self.salome = salome
self.salome.salome_init()

#import geometry python module
import GEOM
import SALOMEDS
from salome.geom import geomBuilder
self.geomBuilder = geomBuilder


self.the_Study = None
self.geompy = None
self.geom_elements = geomElements
# self.geom_elements = geometryStructure_tFlow()

self.origin = {}
self.num_vertex = 0
self.vertex_dict = {}
self.num_edge = 0
self.edge_dict = {}
self.num_face = 0
self.face_dict = {}
self.num_block = 0
self.block_dict = {}

print('\ngeometrical elements from tFlow input file are building...............................................')

self.createNewStudy()
self.createGEOM()
self.getInfo()
self.addToStudy()

self.importVertex()
self.importEdge()
self.importFace()
self.importBlock()

self.trailer()



def createNewStudy(self):
self.the_Study = self.salome.myStudy
print('\nnew study is already created....................................')
return self.the_Study


def createGEOM(self):
self.geompy = self.geomBuilder.New(self.the_Study)
print('\ngeometry components are creating................................')
return self.geompy


def getInfo(self):
self.num_vertex = self.geom_elements.number_vertices
# print(self.num_vertex)
self.num_edge = self.geom_elements.number_edges
# print(self.num_edge)
self.num_face = self.geom_elements.number_faces
# print(self.num_face)
self.num_block = self.geom_elements.number_solids
# print(self.num_block)

return self.num_vertex, self.num_edge, self.num_face, self.num_block


def importVertex(self):
print('{} vertices are creating...........................................'.format(self.num_vertex))
for vertex in self.geom_elements.vertices:
locals()['vertex_{}'.format(vertex.id)] = self.geompy.MakeVertex(vertex.x, vertex.y, vertex.z)
self.vertex_dict[vertex.id] = locals()['vertex_{}'.format(vertex.id)]

self.geompy.addToStudy(locals()['vertex_{}'.format(vertex.id)],'vertex_{}'.format(vertex.id))

# print(self.vertex_dic)
return self.vertex_dict


def importEdge(self):
print('{} edges are creating...........................................'.format(self.num_edge))
for edge in self.geom_elements.edges:
# print(edge.connective_vertices)
if len(edge.connective_vertices) == 2:
start = self.vertex_dict[edge.start_punkt]
# print(start)
end = self.vertex_dict[edge.end_punkt]
# print(end)
locals()['edge_{}'.format(edge.id)] = self.geompy.MakeLineTwoPnt(start,end)
self.edge_dict[edge.id] = locals()['edge_{}'.format(edge.id)]

self.geompy.addToStudy(locals()['edge_{}'.format(edge.id)], 'edge_{}'.format(edge.id))

else:
# FIXME: later add # create an arc from a center point, a start point and end point geompy.MakeArcCenter(p0, p1, p2, 1)
start = self.vertex_dict[edge.start_punkt]
end = self.vertex_dict[edge.end_punkt]
center = self.vertex_dict[edge.center_punkt]
locals()['arc_{}'.format(edge.id)] = self.geompy.MakeArcCenter(center, start, end)
self.edge_dict[edge.id] = locals()['arc_{}'.format(edge.id)]

self.geompy.addToStudy(locals()['arc_{}'.format(edge.id)], 'arc_{}'.format(edge.id))

return self.edge_dict


def importFace(self):
print('{} faces are creating...........................................'.format(self.num_face))
for face in self.geom_elements.faces:
edge1 = self.edge_dict[face.connective_edges[0]]
edge2 = self.edge_dict[face.connective_edges[1]]
edge3 = self.edge_dict[face.connective_edges[2]]
edge4 = self.edge_dict[face.connective_edges[3]]

locals()['face_{}'.format(face.id)] = self.geompy.MakeQuad(edge1, edge2, edge3, edge4)
self.face_dict[face.id] = locals()['face_{}'.format(face.id)]

self.geompy.addToStudy(locals()['face_{}'.format(face.id)], 'face_{}'.format(face.id))

return self.face_dict


def importBlock(self):
print('{} blocks are creating...........................................'.format(self.num_block))
for block in self.geom_elements.solids:
face1 = self.face_dict[block.connective_faces[0]]
face2 = self.face_dict[block.connective_faces[1]]
face3 = self.face_dict[block.connective_faces[2]]
face4 = self.face_dict[block.connective_faces[3]]
face5 = self.face_dict[block.connective_faces[4]]
face6 = self.face_dict[block.connective_faces[5]]

locals()['block_{}'.format(block.id)] = self.geompy.MakeHexa(face1, face2, face3, face4, face5, face6)
self.block_dict[block.id] = locals()['block_{}'.format(block.id)]

self.geompy.addToStudy(locals()['block_{}'.format(block.id)], 'block_{}'.format(block.id))

return self.block_dict


def addToStudy(self):
print('origin punkt and coordinates are creating...........................................................')
# add origin coordinates
O = self.geompy.MakeVertex(0, 0, 0)
self.origin['O'] = O
OX = self.geompy.MakeVectorDXDYDZ(1, 0, 0)
self.origin['OX'] = OX
OY = self.geompy.MakeVectorDXDYDZ(0, 1, 0)
self.origin['OY'] = OY
OZ = self.geompy.MakeVectorDXDYDZ(0, 0, 1)
self.origin['OZ'] = OZ

self.geompy.addToStudy(O, 'O')
self.geompy.addToStudy(OX, 'OX')
self.geompy.addToStudy(OY, 'OY')
self.geompy.addToStudy(OZ, 'OZ')

return self.origin


def trailer(self):
# Update Object Browser
if self.salome.sg.hasDesktop():
self.salome.sg.updateObjBrowser(True)

print('\ngeometrical elements from tFlow input are already created..........................................')



if __name__=='__main__':
geom_file_path = r'F:\Masterarbeit\Python_Programm\Python3_neu\iomeshing\docs\tFlow_channel.geom'
geomElements = geometryStructure_tFlow()
geomReader(geom_file_path,geomElements,'mesh_set_up', 'vertex', 'polyline', 'block')
sInput = salomeInput(geomElements)




我想在开头就有

import salome
self.salome = salome
self.salome.salome_init()

#import geometry python module
import GEOM
import SALOMEDS
from salome.geom import geomBuilder
self.geomBuilder = geomBuilder


而不是先运行第三方工具salome。

TerryloveTracy 2018-11-30
  • 打赏
  • 举报
回复
引用 6 楼 码农丁丁 的回复:
可以参考这个网站看看:http://blog.sciencenet.cn/blog-531760-993759.html


我的问题和这个博客中的完全不同的。我的python脚本最好是要pycharm中能运行,而不是在第三方工具salome。
TerryloveTracy 2018-11-30
  • 打赏
  • 举报
回复
问题的本质就是我想在自己写的 python 脚本中,Import module。这个module是在第三方工具salome的python module里。我想import这个模块到自己的python脚本中,但是前提是必须运行了第三方工具后,才能不会出现 no module erro。

我觉得问题也是在API上,但是我对这个方面不是很懂。

我还在网上找到了我需要的模块,是c++写成的。我现在的问题是如何将这个c++包添加到我的python项目中,当作一个模块用。
TerryloveTracy 2018-11-29
  • 打赏
  • 举报
回复
还在寻找大牛中~~~~
码农丁丁 2018-11-29
  • 打赏
  • 举报
回复
可以参考这个网站看看:http://blog.sciencenet.cn/blog-531760-993759.html
码农丁丁 2018-11-29
  • 打赏
  • 举报
回复
问题不太清楚,你的问题是不是 命令行的东西 要转化为代码自己执行? 一般的问题解决思路:你命令行输入的内容或参数来源,要么某一段程序的输出或你根据前面的结果得到的东西 剩下的就是api接口的调用 希望对你有帮助,或者把你自己调用的code贴出来,这样的问题一般都是小问题
khq溪风 2018-11-27
  • 打赏
  • 举报
回复
自己可以多多探讨一下。
TerryloveTracy 2018-11-27
  • 打赏
  • 举报
回复
主要是着急~没有慢慢来的条件啊
需要帮助~
TerryloveTracy 2018-11-27
  • 打赏
  • 举报
回复
没有人么?

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧