文章目录

  • (一) 使用Skin命令抽中面。
  • (二) 使用Casting抽中面。

  ANSA是一款非常强大和快捷的前处理软件,用过的人都知道,ANSA在几何清理、模型简化功能方面尤为突出。不仅如此,ANSA还提供了基于python语言的二次开发接口,大大满足了用户的需求。脚本语言背后的基本思想是用最小的用户交互自动化许多重复和繁琐的程序,那么ANSA提供的接口正满足了这一需求。抽中面这个功能相信画过壳网格的用户都已经用得烂熟于心了,然而它也是一项手动的重复性的工作,下面我们就介绍两种使用ANSA二次开发来进行抽中面的方法。

(一) 使用Skin命令抽中面。

首先介绍一下需要用到的API(下面的API都基于ansa.base库):

  1. CollectEntities这个方法是用来收集实体,它返回一个收集到实体的列表。

  2. GetEntityCardValues这个方法是用来从下图所示的“Card”上获取pid、mid等参数的值。

  它的返回值是一个字典。

  1. CollectNewModelEntities收集新创建或导入的模型实体。它返回一个对象,必须使用report()方法返回一个列表来收集实体。示例代码如下:

  示例代码如下:

import ansafrom ansa importbasedef main():collector = base.CollectNewModelEntities()n = base.CreateEntity(ansa.constants.ABAQUS, 'NODE')new_entities = collector.report()del collectorprint(len(new_entities))

注意: 此处一定要有del collector.

  1. SetEntityCardValues设置或者改变”Card”中参数的值。

  2. CheckAndFixGeometry检查并且自动清理几何,他返回一个包含了错误信息的字典或者None。

  3. 此外还有Or(),All(),ZoomAll(),Compress(‘’)等辅助方法。

  下面介绍一下程序逻辑:

  我们这个程序是对于一个装配件而言的,所以会有很多个Part,因此肯定要用到循环来依次取出每一个Part进行操作。首先收集所有的实体,然后使用For循环依次对每个Part进行操作。先使用Or()与ZoomAll()显示单个实体,然后使用CheckAndFixGeometry进行自动几何清理,如果没有错误,则进行下一步(如果有错误说明无法自动清理,需要手动清理)。接下来需要收集实体‘FACE’,如果收集的实体不为空,那么我们将收集到的’FACE’进行Skin抽中面。接下来根据“PSHELL”来收集新的实体对象。“PSHELL”也就是如下图所示的‘Card’

  然后执行report()方法获取新的实体列表。如果这个列表长度不为零,那么通过GetEntityCardValues方法获取新的PID信息,然后再通过SetEntityCardValues方法设置属性信息。最后使用All()和ZoomAll()显示所有实体,再使用Compress()压缩即可。

  完整代码如下:

import ansafrom ansa importbasefrom ansa importconstantsdef Test():all_parts =base.CollectEntities(constants.NASTRAN, None, "ANSAPART")print(len(all_parts))i=0for part in all_parts:base.Or(part)n=base.ZoomAll()vals_1 = ('Name', 'PID')part_info =base.GetEntityCardValues(constants.NASTRAN, part, vals_1)options=['CRACKS','OVERLAPS','NEEDLEFACES','COLLAPSED CONS', 'UNCHECKED FACES']fix=[1,1,1,1,1]ret=base.CheckAndFixGeometry(part,options,fix,True,True)if ret==None:faces=base.CollectEntities(constants.NASTRAN,part,'FACE')if len(faces) != 0:collector =base.CollectNewModelEntities(constants.NASTRAN, 'PSHELL')num_shell_deions=base.Skin(apply_thickness=True,new_pid=True,offset_type=2,ok_to_offset=True,max_thickness=5.0,delete=True,entities= faces)new_entities =collector.report()print(len(new_entities))if len(new_entities) != 0:vals_2 =('Name', 'PID' ,'T')new_pid_info=base.GetEntityCardValues(constants.NASTRAN,new_entities[0], vals_2)vals_3={'Name':"S"+part_info[vals_1[0]]+"_"+str(new_pid_info[vals_2[2]]),}base.SetEntityCardValues(constants.NASTRAN,new_entities[0], vals_3)del collectorprint("num . "+str(i)+" :"+new_entities[0]._name)i += 1base.All()m=base.ZoomAll()base.Compress('')

(二) 使用Casting抽中面。

  这里就不多讲了,方法逻辑基本没多大区别,有不懂得API可以查看帮助文档。直接上代码。

import ansafrom ansa import basefrom ansa import constantsdef mid_Casting():all_pshell =base.CollectEntities(constants.NASTRAN, None, "PSHELL")print(len(all_pshell))i = 0for pshell inall_pshell:print("pshell_name: "+pshell._name)if pshell._name[0] != "S":collectorPshell = base.CollectNewModelEntities(constants.NASTRAN,'PSHELL')collectorShell = base.CollectNewModelEntities(constants.NASTRAN,"SHELL")all_faces = base.CollectEntities(constants.NASTRAN,pshell,"FACE")result = base.MidSurfAuto(faces = all_faces,thick=5.,length=1,elem_type=3,join_distance=0.5,paste_triple_len=0.5,exact_middle=True,handle_as_single_solid=False,part="use_current")base.DeleteEntity(pshell, True)new_Pshell = collectorPshell.report()print("The new pshell's length is : ", len(new_Pshell))print("The new Pshell's name is :",new_Pshell[0]._name)new_Shell = collectorShell.report()print("The new Shell's number is :", len(new_Shell))AnsaPartReference = base.GetEntity(constants.NASTRAN,"SHELL",new_Shell[0]._id )print("The AnsaPartReference's id is :", AnsaPartReference)CurrentPart = base.GetEntityPart(AnsaPartReference)CurrentPartName = base.GetEntityCardValues(constants.NASTRAN, CurrentPart,("Name",))print("The CurrentPartName is :",CurrentPartName["Name"])base.SetEntityCardValues(constants.NASTRAN, new_Pshell[0],{"Name": "C"+CurrentPartName["Name"]})del collectorPshelldel collectorShell
i+=1

转载自 :https://www.sohu.com/a/157864134_744423
原文作者: 有限元在线
发表日期: 2017-07-17


  扫描下方二维码关注我的微信公众号 - CAE软件二次开发Lab,精彩内容!

CAE软件二次开发Lab

ANSA二次开发 - 抽中面的两种方法相关推荐

  1. UG\NX二次开发 获取相切面的三种方法

    文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: UG\NX二次开发 获取相切面的三种方法 方法1: 使用NX Open C++ 的面 ...

  2. html5保存到桌面,win8.1将IE浏览器网页内容保存到电脑桌面的两种方法

    win8.1系统使用IE浏览器浏览网页的时候,看到有用的网页内容,想要保存下来,这样即使在没有联网的情况下也能够打开该网页查看.那么win8.1将IE浏览器网页内容保存到电脑桌面呢?下面小编介绍两种方 ...

  3. MATLAB 保存imshow绘制图片到指定文件夹中的两种方法

    MATLAB 保存imshow绘制图片到指定文件夹中的两种方法 imwrite函数 imwrite(image,filename) imwrite(image,filename)是将图像数据image ...

  4. 水平集方法引入主动轮廓模型算法中的两种方法

    水平集方法引入主动轮廓模型算法中的两种方法 1.传统的基于主动轮廓模型和水平集理论的方法 2.变分水平集方法 在讲解水平集理论在主动轮廓模型中的应用前,我们先用流程图说明一下常见的处理主动轮廓模型的流 ...

  5. 创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 编程利用Rectangle输出一个矩形的周长和面积

    创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 编程利用Rectangle输出一个矩形的周长和面积 publi ...

  6. 90页第三题,创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 ,编程利用Rectangle输出一个矩形的

    //90页第三题,创建一个 Rectangle类,添加width和lenght两个成员变量 //在 Rectangle类中添加两种方法分别计算矩形的周长和面积 //编程利用Rectangle输出一个矩 ...

  7. Android项目开发:指南针(两种方法实现)

    Android项目开发:指南针应用的实现 1.基于方向传感器 activity_main.xml MainActivity.java 2.基于加速度传感器和地磁传感器 在Android中可以使用内置传 ...

  8. mysql数据库导入到excel表格数据_[转载]将EXCEL表格中的数据导入mysql数据库表中(两种方法)...

    今天项目上遇到需要将excel中的数据导入到数据库的classify表中,于是乎拼命上网查阅方法,发现以下两种方法比较可行: 在此之前先说说按照网上的说法我没有试验成功的方法,将excel文件xls保 ...

  9. 把EXCEL表格导入到MYSQL中_将EXCEL表格中的数据导入mysql数据库表中(两种方法)...

    今天项目上遇到需要将excel中的数据导入到数据库的classify表中,于是乎拼命上网查阅方法,发现以下两种方法比较可行: 在此之前先说说按照网上的说法我没有试验成功的方法,将excel文件xls保 ...

最新文章

  1. 如何使用 OpenCV 开发虚拟键盘
  2. 蓝牙 socket 建立不了_蓝牙电话之PBAP同步电话簿的安卓实现
  3. 【运筹学】线性规划数学模型 ( 单纯形法 | 最优解判定原则 | 线性规划求解示例 )
  4. jmeter常用插件介绍
  5. List的方法和属性 方法或属性 作用
  6. 如何将SAP Spartacus的默认home页面替换成login页面 - ProtectedRoutesService
  7. 浅谈微信小程序对于房地产行业的影响
  8. jboss fuse 教程_IDC关于使用JBoss Fuse的商业价值的报告(与Apache Camel一起使用)
  9. 最近,我在Spring的BeanUtils踩了不少坑
  10. 工作记录--------unbuntu20搭建微信和Foxmail
  11. css+html投票系统,网上在线投票系统的设计与实现.doc
  12. Sketch快捷键大全 Sketch如何自定义快捷键?
  13. [ZJOI2009]狼和羊的故事 题解
  14. 计算机设备信息检测,硬件信息检测软件(HiBit System Information)
  15. 电商库存系统设计mysql_详解:电商系统库存逻辑的设计
  16. pytest执行用例报“Skipped: no variables file“跳过执行case问题解决
  17. Unity多人游戏简单实例(一)快速入门
  18. 输入半径计算圆的周长和面积
  19. linux下使用Navicat连接MySQL
  20. linux 7z压缩、解压命令

热门文章

  1. olm指示灯ch2闪烁_olm灯状态全文
  2. MySQL优化系列4-MySQL压力测试
  3. 物业管理引入君子签区块链电子签约,实现降本增效,智慧升级
  4. 如何理解软件的测试覆盖率?
  5. .Net core基于xUnit的单元测试查看测试覆盖率
  6. 反反复复的植物神经紊乱 到底如何调节才是对的
  7. 【C语言】Wave文件处理
  8. Android studio 提示‘adb‘ 不是内部或外部命令,也不是可运行的程序的解决方法
  9. 单片机应用系统设计技术——单一外中断的应用
  10. 每日一课——Linux命令——删除文件与文件夹