Hypermesh二次开发系列003
1 *createmark 应用案例
1.1 需求描述
一个面被划分过网格了,需要在某一个指定位置,扩个孔出来,但现在面的几何信息已经被删除了。如图1所示
图1 功能描述
1.2 问题分析
这类问题暂且线定义为网格编辑。没有几何信息,只能直接操作和编辑单元与节点。使用界面操作的思路:
- 在指定位置创建临时节点:Geom>>nodes
- 据此为圆心做圆(创建几何元素:线):Geom>>lines
- 删除完全在圆内的单元,可能会留下锯齿状单元。
- 使用project功能把上一步生成的锯齿状单元的节点投影到圆周上:Tool>>Project>>to line
上述是操作步骤,过程效果如图2。
图2 过程效果示意图 是的,此过程GUI操作过程繁琐,而且容易出错。最好的办法就是不要遇到这样的需求,如果不可以的话,退而求次按照上述步骤细心操作,实在没办法就学习下hypermesh的二次开发吧,至少能做出如图3的效果,只要源码跑起来,指哪里就可以扩哪里,想扩多大就扩多大。
图3 TCL批量操作效果图
1.3代码剖析
指定圆心位置和半径的功能块。
*clearmark elem 1
*clearmark node 1
#x0 y0 z0 为圆心坐标,rad为孔半径
set y0 0.0
set z0 0.0
set rad 20.0
set h 50
set elemSize 0
set r1 [expr $rad+$elemSize]
*nodemodify 1 0 0 0
选出半径范围内的所有节点,然后同节点选出单元,并获取单元编号。
*createmark node 1 "by cylinder" $x0 $y0 $z0 0 0 1 [expr $rad+$elemSize] $h "inside" 1 1 0
*isolateentitybymark 1
*findmark nodes 1 257 1 elements 0 1
set elemList [hm_getvalue elems mark=1 dataname=id]
然后是一顿猛如虎的操作:删除单元,投影节点。代码如下:
foreach elemId $elemList {set count 0set ndId [hm_getvalue elems id=$elemId dataname=nodes]foreach i $ndId {foreach { dis x y z } [hm_getdistance nodes 1 $i 0] {}if {[expr $dis-$rad] <= 0.000001} {incr count } } if {$count ==4} {*createmark elements 1 $elemId*deletemark elements 1} elseif {$count ==3} {foreach i $ndId {foreach { dis x y z } [hm_getdistance nodes 1 $i 0] {}if {[expr $dis-$rad] >= 0.000001} {*nodemodify $i [expr $rad/$dis*($x)+$x0] [expr $rad/$dis*($y)+$y0] [expr $rad/$dis*($z)+$z0] } }*createmark elements 1 $elemId*deletemark elements 1} elseif {$count ==1} {foreach i $ndId {foreach { dis x y z } [hm_getdistance nodes 1 $i 0] {}if {[expr $dis-$rad] <= 0.000001} {*nodemodify $i [expr $rad/$dis*($x)+$x0] [expr $rad/$dis*($y)+$y0] [expr $rad/$dis*($z)+$z0] }}} else { set distList []foreach i $ndId {foreach { dis x y z } [hm_getdistance nodes 1 $i 0] {}set t1 [expr abs($dis-$rad)]lappend distList [list $i $t1]}set distListSorted [lsort -real -index 1 $distList]set nd1 [lindex $distListSorted 0 0] set nd2 [lindex $distListSorted 1 0] foreach { dis x y z } [hm_getdistance nodes 1 $nd1 0] {}*nodemodify $nd1 [expr $rad/$dis*($x)+$x0] [expr $rad/$dis*($y)+$y0] [expr $rad/$dis*($z)+$z0] foreach { dis x y z } [hm_getdistance nodes 1 $nd2 0] {}*nodemodify $nd2 [expr $rad/$dis*($x)+$x0] [expr $rad/$dis*($y)+$y0] [expr $rad/$dis*($z)+$z0]}
}
一波操作后效果如图4,然鹅并不是很满意。
图4 一波操作后图 再简单粗暴的继续上一轮操作,效果如图3所示,其中精髓只有自己亲自码一遍才会拍着大腿想明白。
1.4结论
两波操作组合起来看似完美,但是不能满足工程需要。原因有三:
- 这里仅仅是“挖”了个孔,但是没有扩一层单元孔出来。(干过白车身的都知道)
- 有pillow单元的存在,单元质量不符合要求。
- 以上代码没进行异常处理、用户交互输入等,且代码有冗余(其实是没认真写)。
关于第二点pillow单元处理,有专门的处理和优化算法和数据结构,二维、三维情况都适应。
以上代码仅用来交流和学习,不能代表博主撸码实力。
Hypermesh二次开发系列003相关推荐
- Scratch3 二次开发系列
Scratch3.0来啦!!! Scratch做为图像化编程的首选语言,拖过积木块搭建实现动画游戏的制作.Scratch3添加了音乐.画笔.视频侦测.文字朗读.翻译等选择性下载扩展积木,可实现积 ...
- Excel 二次开发系列(3): 创建Excel二次开发环境
Excel 二次开发系列 前面我们讲到了 Excel编程模型及Excel 常用操作方法,在这一节,我说一下基础的怎么创建一个Excel应用级的二次开发程序. 在微软的这个基础网站里面可以找到很多的有用 ...
- HyperMesh二次开发教程 - 前言
HyperMesh二次开发教程 前言 笔者从事HyperMesh开发有近5年时间,最初由于兴趣和工作需要自学HyperMesh二次开发,也完成了从仿真工程师到商业CAE仿真软件二次开发工程师的职位 ...
- SolidEdge C#.NET 二次开发系列教程(一) 安装部署插件
SE二次开发国内的教程简直太少了,为了学习这块,废了不少功夫,走了不少弯路. 特此开贴写教程以示后人. se插件开发完成后就是如何部署,安装和部署和其他的.net插件类似. 1.走到这步你基本离成功很 ...
- Solidworks二次开发系列入门1
Solidworks二次开发系列入门1 基本介绍 基本介绍 SolidWorks二次开发其实就是使用API函数对SolidWorks设计中一些重复繁琐的工作让计算机代替完成,起到辅助设计的作用. So ...
- TFS二次开发系列:七、TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)
在TFS二次开发中,我们可能会根据某一些情况对各个项目的PBI.BUG等工作项进行统计.在本文中将大略讲解如果进行这些数据统计. 一:连接TFS服务器,并且得到之后需要使用到的类方法. /// < ...
- SolidEdge C#.NET 二次开发系列教程(二) AdvancedInstaller打包安装SolidEdge addin插件
建议看本教程前先看下 SolidEdge二次开发(一)安装部署插件 这里主要介绍添加注册表的部分,不介绍AdvancedInstaller的具体使用 下保存下面注册表的信息为xxx.reg格式到桌面. ...
- TFS二次开发系列:八、TFS二次开发的数据统计以PBI、Bug、Sprint等为例(二)
上一篇文章我们编写了此例的DTO层,本文将数据访问层封装为逻辑层,提供给界面使用. 1.获取TFS Dto实例,并且可以获取项目集合,以及单独获取某个项目实体 public static TFSSer ...
- 涂鸦 Wi-Fi SDK开发系列教程——5.对模组二次开发
上期精彩回顾:Wi-Fi模组二次开发课程--4.烧录授权 本章节旨在通过一个简单Demo,使开发者能够了解涂鸦SDK的启动流程,带领开发者基于涂鸦提供的SDK对模组进行二次开发. Demo功能介绍:硬 ...
- VSTO Office二次开发对PPT自定义任务窗格测试
上篇文章对VSTO Office二次开发操作PPT功能做了简单测试,主要是如何创建一个外接程序并在新建PPT幻灯片时添加自定义文本信息.如何简单自定义任务窗格.如何添加可视化功能区的简单介绍,应该对于 ...
最新文章
- HiveSQL中复杂数据类型操作
- idea左右切换页面 返回上一次鼠标位置
- 一次性清退125名硕博研究生!又一高校发公告
- jQuery如何在线导入js包
- python实现二叉树的镜像
- Kafka的架构设计
- 双屏鼠标经常跑到副屏_这个电脑的双屏幕,让我重新找回了修图的乐趣
- nginx源码分析:打开监听套接字的流程
- 药品研发的项目化管理
- 手势解锁java后端设计_Android进阶 - 手势解锁
- 系统设计之路:如何设计一个URL短链服务
- NOI 1818:红与黑(C++)
- c语言 乘法运算符,C 乘法运算符
- qq邮箱隐藏代码html,QQ邮箱原来这么好用,4个隐藏设置格调满满
- matlab常用的设置,坐标系、线条颜色、线型,字体、属性
- fat32位的U盘单个文件最大只能传输4G,应该怎么办呢?可以使用cmd转换成NTFS格式
- python操作networkx
- 【UEFI基础】UEFI变量基础
- 平面设计中的网格系统pdf_中文排版网格系统的五大迷思
- 计算机及应用考试重点,计算机工程应用考试重点