利用Python在Workbench的DM中参数建模【转发】
2017-07-03 by:CAE仿真在线 来源:互联网
就Workbench的二次开发进行一些展开,文中所用到的代码来自ANSYS的帮助手册。
正文
Workbench的几何建模程序DesignModeler(DM)虽不支持APDL参数化建模,但是却支持Python和C#,大量的API函数也是基于IronPython的。灵活运用Python和DM中的API函数接口,可实现模型的参数化。
本次简单阐释一下利用Python和API函数进行派生几何模型的建立,也即是基本图元(Primitive)。
DM中的派生图元如下图所示。
图1
包括片体、线体和实体。
创建派生几何的API函数入口是:
ExtAPI.DataModel.GeometryBuilder.Primitives
下面分别创建片体、线体和实体。
(1)片体
以创建一个圆柱面为例,其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
该段代码将创建圆柱面的命令放在函数Ongenerate()中,该函数声明的变量feature用于存储所生成的模型。
函数开头定义了两个变量并赋值,width和height。
sheetBodies为空的列表。
通过ExtAPI.DataModel.GeometryBuilder.Primitives入口下属的sheet. CreateCylinder函数创建一个圆柱面,其中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为对象的属性。
最终创建的模型如下:
图2
(2)创建线体
以创建一个多段线体为例,其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,创建多段线的函数入口也在ExtAPI.DataModel.GeometryBuilder.Primitives下的Wire.CreatePolyline,CreatePolyline函数的使用格式为:
CreatePolyline(self: Wire, points: IEnumerable[float]) -> IWirePolyline
只需要指定所有的点即可。
最终生成的模型为如下:
图3
(3)实体
以创建一个矩形块为例,其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中参数建模【转发】 Ansys有限元培训 Ansys workbench培训 ansys视频教程 ansys workbench教程 ansys APDL经典教程 ansys资料下载 ansys技术咨询 ansys基础知识 ansys代做 Fluent、CFX流体分析 HFSS电磁分析 Abaqus培训