仿真在线:有限元分析咨询与培训中心——Ansys|Fluent|Abaqus|HFSS|SolidWorks|课程培训

利用Python和API函數創建幾何模型實例【轉發】

2017-07-03  by:CAE仿真在線  來源:互聯網

利用Python、Workbench的API函數以及xml進行Workbench二次開發的一個比較完整的例子,文中代碼來自于ANSYS幫助文檔,筆者對代碼做了一些細致的解釋。


正文


以下是Workbench的DM中一個extension的Python代碼,代碼的主要功能是針對一個已經存在的模型,在此基礎上畫圓、拉伸、做add體操作,以及一些顯示。

#導入unitsmath模塊

import units

import math

#定義函數createMyFeature,創建用戶對象geometry,名稱顯示在Tree Outline

def createMyFeature(feature):

#利用CreateFeature函數創建用戶對象;

#函數CreateFeature的變量是字符串,返回用戶對象;

#函數CreateFeature入口是ExtAPI.

ExtAPI.CreateFeature("MyFeature")

#定義函數vectorProduct,創建矢量

def vectorProduct(v1, v2):

#返回[y1*z2-z1*y2,-x1*z2+z1*x2,x1*y2-y1*x2]

return [v1[1]*v2[2]-v1[2]*v2[1], -v1[0]*v2[2]+v1[2]*v2[0], v1[0]*v2[1]-v1[1]*v2[0]]

#定義標量函數scalarProduct,創建標量

def scalarProduct(v1, v2):

#返回 x1*x2+y1*y2+z1*z2

return v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2]

#定義函數,求平方根

def norm(v):

#利用math模塊的sqrt函數

return math.sqrt(scalarProduct(v,v))

#定義函數生成模型

def generateMyFeature(feature,function):

#定義變量,賦值為對象的長度,這個長度值是在xml里面定義的;

#xml定義好界面,會有"Length“項,取值即可。

length = feature.Properties["Length"].Value

#單位轉換

length = units.ConvertUnit(length, ExtAPI.DataModel.CurrentUnitFromQuantityName("Length"), "m")

#界面所選擇的面作為faces的取值,這個也是xml定義的。

faces = feature.Properties["Face"].Value.Entities

#定義空列表

bodies = []

#獲取GeometryBuilder入口

builder = ExtAPI.DataModel.GeometryBuilder

#通過循環面

for face in faces:

#獲取面的中心,是三個數(x,y,z)組成的數組

centroid = face.Centroid

#由于需要自動判別某個面的法向等,所以計算過程看起來比較復雜

#定義uv數組,含有兩個量,可以理解為針對某個面自動確定的xy坐標,再結合面的中心點;

#可以在這個面的中心建立一個局部坐標系,利用函數ParamAtPoint

uv = face.ParamAtPoint(centroid)

#獲取面的法向向量,應該是通過面的中心點一級uv數組三個數一起算出來的。

normal = face.NormalAtParam(uv[0], uv[1])

#定義半徑

radius = math.sqrt(face.Area/(math.pi*2))

#初始化向量xdir

xdir = [1., 0., 0.]

#調用函數vectorProduct計算

vector = vectorProduct(xdir, normal)

if norm(vector)<1.e-12:

xdir = [0., 1., 1.]

s = scalarProduct(xdir, normal)

xdir = [xdir[0]-s*normal[0],xdir[1]-s*normal[1],xdir[2]-s*normal[2]]

n = norm(xdir)

xdir[0] /= n

xdir[1] /= n

xdir[2] /= n

#中間這一段代碼確實晦澀難懂,其用途就是計算圓弧的主向量。

#之后通過CreateArc函數創建一段圓弧

arc_generator = builder.Primitives.Wire.CreateArc(radius, centroid, xdir, normal)

#利用Generate()函數生成圓弧

arc_generated = arc_generator.Generate()

#利用WireToSheetBody函數將圓弧轉換成面

disc_generator = builder.Operations.Tools.WireToSheetBody(arc_generated)

#單位化向量

normal[0] *= -1

normal[1] *= -1

normal[2] *= -1

#利用CreateExtrudeOperation函數進行拉伸操作

extrude = builder.Operations.CreateExtrudeOperation(normal,length)

#拉伸的對象是創建的面【第一個對象】

cylinder_generator = extrude.ApplyTo(disc_generator)[0]

#存放在列表中

bodies.Add(cylinder_generator)

#返回值

feature.Bodies = bodies

#類型為Add

feature.MaterialType = MaterialTypeEnum.Add

return True

#定義函數afterGenerateMyFeature,當<ongenerate>完成后自動執行該函數

#該函數主要完成兩個功能,一是顯示出最小body的體積

#二是將所用的edge放在一個集合里面

def afterGenerateMyFeature(feature):

edges = []

#定義一個系統內的最大值,用于后續的比較

minimum_volume = System.Double.MaxValue

#通過循環找出最小體積

for body in feature.Bodies:

body_volume = 0

if str(body.BodyType) == "GeoBodySolid":

body_volume = body.Volume

if body_volume <= minimum_volume:

minimum_volume = body_volume

#將所用的edge放在edges列表里面

for edge in body.Edges:

edges.Add(edge)

else:

ExtAPI.Log.WriteMessage("Part: "+body.Name)

#feature的顯示值

feature.Properties["Minimum Volume"].Value = minimum_volume

#創建集合

ExtAPI.SelectionManager.NewSelection(edges)

named_selection = ExtAPI.DataModel.FeatureManager.CreateNamedSelection()

ExtAPI.SelectionManager.ClearSelection()


該Python代碼并不能直接在DM中使用,還需要接觸XML編寫界面程序,界面程序可以將上面Python代碼中的函數進行有效綁定。

最后能夠生成的模型以及在Workbench的DM中存在的形式分別如下圖所示。

利用Python和API函數創建幾何模型實例【轉發】ansys仿真分析圖片1

圖1


利用Python和API函數創建幾何模型實例【轉發】ansys仿真分析圖片2

圖2

對應的xml代碼為:

<! 定義extension的版本號為1,名稱為GeometryFeature>

<extension version="1" name="GeometryFeature">

<! 指定該extension所執行的python代碼名稱為main.py>

<script src="main.py" />

<! 說明該extension應用在DesignModeler模塊>

<interface context="DesignModeler">

<! 定義該extension的背景,文件名稱為image>

<images>images</images>

<! 定義一個工具條,名稱為ACTtoolbar,顯示名稱為ACTtoolbar>

<! 定義入口名稱為MyFeature,使用的標志為construction>

<! 調用的函數為createMyFeature>

<toolbar name="ACTtoolbar" caption="ACTtoolbar">

<entry name="MyFeature" icon="construction">

<callbacks>

<onclick>createMyFeature</onclick>

</callbacks>

</entry>

</toolbar>

</interface>

<! simdata標簽下定義對模型的定義>

<! 調用函數generateMyFeature和afterGenerateMyFeature>

<simdata context="DesignModeler">

<geometry name="MyFeature" caption="MyFeature" icon="construction" version="1">

<callbacks>

<ongenerate>generateMyFeature</ongenerate>

<onaftergenerate>afterGenerateMyFeature</onaftergenerate>

</callbacks>

<! 定義屬性,有一個叫做“Face”欄目,顯示名稱為“Face”,采用滾動條控制>

<property name="Face" caption="Face" control="scoping">

<! 定義選擇類型為面>

<attibutes selection_filter="face"/>

</property>

<! 定義屬性,名稱為length,顯示Length,數據類型為float,單位為長度單位,默認值為1.2>

<property name="Length" caption="Length" control="float" unit="Length" default="1.2 [m]"></property>

<! 定義屬性,最小體積Minimum Volume,數據類型為float,單位為體積單位>

<property name="Minimum Volume" caption="Minimum Volume" control="float" unit="Volume" >

<attributes readonlyaftergenerate="true" />

</property>

</geometry>

</simdata>

</extension>


Xml文件與py文件相互之間實現數據傳遞,完成整個extension的建立。


轉自公眾號:CAE技術分享

開放分享:優質有限元技術文章,助你自學成才

相關標簽搜索:利用Python和API函數創建幾何模型實例【轉發】 Ansys有限元培訓 Ansys workbench培訓 ansys視頻教程 ansys workbench教程 ansys APDL經典教程 ansys資料下載 ansys技術咨詢 ansys基礎知識 ansys代做 Fluent、CFX流體分析 HFSS電磁分析 Abaqus培訓 

編輯
在線報名:
  • 客服在線請直接聯系我們的客服,您也可以通過下面的方式進行在線報名,我們會及時給您回復電話,謝謝!
驗證碼

全國服務熱線

1358-032-9919

廣州公司:
廣州市環市中路306號金鷹大廈3800
電話:13580329919
          135-8032-9919
培訓QQ咨詢:點擊咨詢 點擊咨詢
項目QQ咨詢:點擊咨詢
email:kf@1cae.com




主站蜘蛛池模板: 欧艺宝盾科技(北京)有限责任公司_北京旋转门厂家_转门维修_高端商务门控定制 - | 企业资质认证-上海翼弘企业咨询管理有限公司 | 噪声治理,消声器,隔声屏障,隔声罩,噪声控制,降噪,空调降噪,水泵噪声治理,冷却塔噪声治理-北京华清恒业环保设备有限公司 | 铸造厂_铸造厂家_硅溶胶熔模铸造-盐城市春秋精密机械有限公司 | 液压升降货梯_导轨式升降机_往复式提升机_济南宇轩机械厂家 | 企业旺旺-qy55.com | 游戏加速器-极迅互联加速器-更快更稳的网游手游免费加速器 | 秦皇岛图成玻璃_横切机,琴键落板,堆垛机械手,玻璃钢化设备,掰边机,铺纸机,水平堆垛机+超大板堆垛机,纵掰纵分,下片机,冷端优化切割 | 石英砂过滤器_砂滤器_石家庄工泉水处理科技有限公司 | 提供技术支持-TXC晶振-晶振厂家-32.768K,石英晶体振荡器厂家销售-NDK振荡器正规代理商 | 数控机床市场网-专业的数控机床网站| 吸污车|吸粪车|冷藏车|消防车|清障车|环卫垃圾车价格|湖北程力汽车集团厂家销售公司 | 郑州腾飞建设工程集团有限公司| 上海叶拓科技有限公司 | 嘉兴中诚环保科技股份有限公司_PVC_润滑剂_抗氧剂_辅助热稳定剂 嘉兴市南湖斋食品股份有限公司_南湖斋 | 取样冷却器-射水抽气器-锅炉炉水取样冷却器-连灵动 | 徐州电动垃圾车|三轮快速保洁车|电动高压冲洗车|江苏大卫王环保科技有限公司 | 消防安装_消防安装施工_消防施工_北京消防安装公司-亿杰(北京)消防工程有限公司 | 托盘缠绕机|全自动缠绕机|悬臂缠绕机-上海晏陵智能设备有限公司 托辊|滚筒|聚氨酯托辊|缓冲托辊|尼龙托琨|衡水良龙输送机械有限公司 | 上海希喆机械有限公司-Schunk雄克,雄克卡盘, 雄克机械手, B+R贝加莱, ELCIS编码器,艾西斯编码器, TWK编码器,Nexen,Joyce dayton升降机,Thomson汤姆森,TPG减速机,INA导轨。 | 软文营销推广-新闻稿发布-软文撰写-百科词条编辑-品牌全案策划推广网络营销传播-喜尚传媒 | 离子交换树脂_阴离子交换树脂_阳离子交换树脂-中国树脂网 | 云梯车|云梯搬家车|工程高空上料车|云梯登高车价格|视频|图片-专汽之家 | 水硬度在线分析仪-氟离子|悬浮固体浓度分析仪-ldo分析仪-上海植茂 | 监控工程,安防监控公司,北京监控安装,北京安装监控,安装摄像头,北京监控维保,监控施工,北京监控维修,监控弱电工程,监控器安装,监控维护保养,监控工程设计,北京监控设备维修,监控报警安装,北京北方合力科技有限公司 | 中国焊接协会网站—中国焊接信息网;焊接行业最权威访问量最大的专业网站:焊接信息、焊接材料,焊接机器,焊接设备,焊机,焊材,辅助设备,焊机配件,仪器仪表,电动工具,钎焊,送丝机,表面处理,自动化专机,焊锡丝,助焊剂 | 上海垃圾房,简易成品环保垃圾房,小区室外垃圾房,上海翼亭智能垃圾房厂家 | 智慧环保大数据云平台_车载走航式扬尘/恶臭/噪声污染源在线监测管控信息系统平台_环保土壤/环境监测系统云平台-奥斯恩智能科技 | 台式氙灯老化箱-光伏组件-真空老化试验箱|中科万通仪器官网 | 升降炉|推板炉|创卓炉业| 蒸汽流量计_涡轮流量计_涡街流量计_雷达液位计_污水流量计_分体式_大口径工业流量计-江苏长顺仪表 | 模型公司|沙盘公司|优选杭州景文模型设计有限公司 | 汽油发电机,柴油发电机,小型汽油发电机,小型柴油发电机,家用发电机生产厂家——上海东明动力设备有限公司 | 润滑油展会 沈阳 南京 润滑油 展会 西安 润滑脂 中国国际润滑油 全国润滑油 汽配_中国国际润滑油、脂、养护用品及技术设备展览会 | 济南东唐包装制品有限公司| 真石漆生产厂家|外墙水包水|水包砂-新佳官网 | 监控工程,安防监控公司,北京监控安装,北京安装监控,安装摄像头,北京监控维保,监控施工,北京监控维修,监控弱电工程,监控器安装,监控维护保养,监控工程设计,北京监控设备维修,监控报警安装,北京北方合力科技有限公司 | 搅拌摩擦焊-搅拌摩擦焊接机床-搅拌摩擦焊设备厂家-精科大恒 | 武汉印刷厂_为企业提供宣传单页彩页印刷_武汉折页印刷_海报设计印刷与制作 - 武汉泽雅印刷公司 | 昆明纸箱厂-礼盒定制-包装盒定做-纸箱厂-云南包掌柜包装有限公司 | 南宁清洁公司|外墙清洗|开荒清洁|洒水车|管道疏通|园林绿化_广西优而美环境工程有限公司 |