利用Python在Workbench的DM中參數建模【轉發(fā)】
2017-07-03 by:CAE仿真在線 來源:互聯網
就Workbench的二次開發(fā)進行一些展開,文中所用到的代碼來自ANSYS的幫助手冊。
正文
Workbench的幾何建模程序DesignModeler(DM)雖不支持APDL參數化建模,但是卻支持Python和C#,大量的API函數也是基于IronPython的。靈活運用Python和DM中的API函數接口,可實現模型的參數化。
本次簡單闡釋一下利用Python和API函數進行派生幾何模型的建立,也即是基本圖元(Primitive)。
DM中的派生圖元如下圖所示。
圖1
包括片體、線體和實體。
創(chuàng)建派生幾何的API函數入口是:
ExtAPI.DataModel.GeometryBuilder.Primitives
下面分別創(chuàng)建片體、線體和實體。
(1)片體
以創(chuàng)建一個圓柱面為例,其Python代碼如下所示:
def Ongenerate(feature,function):
width = 0.015
height = 0.3
sheetBodies = []
primitive = ExtAPI.DataModel.GeometryBuilder.Primitives
cylinder = primitive.Sheet.CreateCylinder([0.,0.,0.],[0.,0.,height],width)
cylinder_generated = cylinder.Generate()
sheetBodies.Add(cylinder_generated)
feature.Bodies = sheetBodies
feature.MaterialType = MaterialTypeEnum.Freeze
return True
該段代碼將創(chuàng)建圓柱面的命令放在函數Ongenerate()中,該函數聲明的變量feature用于存儲所生成的模型。
函數開頭定義了兩個變量并賦值,width和height。
sheetBodies為空的列表。
通過ExtAPI.DataModel.GeometryBuilder.Primitives入口下屬的sheet. CreateCylinder函數創(chuàng)建一個圓柱面,其中CreateCylinder函數的使用格式為:
CreateCylinder(self: Sheet, center: IEnumerable[float], direction: IEnumerable[float], radius: float) -> IsheetCylinder。
需要通過坐標指定圓心位置,通過坐標向量指定方向和圓柱面的高度,還需要通過float數據類型指定半徑。
生成圓柱面之后將新生成的圓柱面添加到sheetbodies列表中,最后返回feature的Bodies,指定類型為Freeze。
這段代碼用到了API函數Generate、CreateCylinder、MaterialTypeEnum、Freeze,feature.Bodies與feature.MaterialType中的Bodies與MaterialType為對象的屬性。
最終創(chuàng)建的模型如下:
圖2
(2)創(chuàng)建線體
以創(chuàng)建一個多段線體為例,其Python代碼如下所示:
def Ongenerate(feature,function):
points_list = [0.,0.,0., 1.,0.,0., 1.,1.,0., 1.,1.,1.]
wireBodies = []
primitive = ExtAPI.DataModel.GeometryBuilder.Primitives
polyline = primitive.Wire.CreatePolyline(points_list)
polyline_generated = polyline.Generate()
wireBodies.Add(polyline_generated)
feature.Bodies = wireBodies
feature.MaterialType = MaterialTypeEnum.Add
return True
函數定義了用于生成多段線體的四個點列表points_list,創(chuàng)建多段線的函數入口也在ExtAPI.DataModel.GeometryBuilder.Primitives下的Wire.CreatePolyline,CreatePolyline函數的使用格式為:
CreatePolyline(self: Wire, points: IEnumerable[float]) -> IWirePolyline
只需要指定所有的點即可。
最終生成的模型為如下:
圖3
(3)實體
以創(chuàng)建一個矩形塊為例,其Python代碼如下所示:
def Ongenerate(feature,function):
point1 = [0.,0.,0.]
point2 = [1.,2.,2.]
solidBodies = []
primitive = ExtAPI.DataModel.GeometryBuilder.Primitives
box1 = primitive.Solid.CreateBox(point1, point2)
box1_generated = box1.Generate()
solidBodies.Add(box1_generated)
feature.Bodies = solidBodies
feature.MaterialType = MaterialTypeEnum.Freeze
return True
生成矩形塊只需要指定兩個角點,用到的函數是CreateBox,在ExtAPI.DataModel.GeometryBuilder.Primitives下的Solid.CreateBox,CreateBox的使用格式為:
CreateBox(self: Solid, pt1: IEnumerable[float], pt2: IEnumerable[float]) -> ISolidBox
指定兩個點即可。最終生成的模型如下。
圖4
轉自公眾號:CAE技術分享
相關標簽搜索:利用Python在Workbench的DM中參數建?!巨D發(fā)】 Ansys有限元培訓 Ansys workbench培訓 ansys視頻教程 ansys workbench教程 ansys APDL經典教程 ansys資料下載 ansys技術咨詢 ansys基礎知識 ansys代做 Fluent、CFX流體分析 HFSS電磁分析 Abaqus培訓