码迷,mamicode.com
首页 > 其他好文 > 详细

在OpenCASCAD脚本中拾取定位

时间:2017-12-05 11:57:38      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:and   div   启用   mode   问题   引用类型   shape   reac   exp   

DRAWEXE系OpenCASCADE中的脚本支撑项目,通过对TCL脚本语言的扩展可以便捷使用OpenCASCADE。

脚本显示方面的命令分两种:一种在组名DRAW Graphic Commands内,启用DRAWEXE之后立即加载可用,只能显示线框,不能渲染面;另外一种在组名ZeViewer内,是对AIS Viewer的扩展,可以线框或Shaded渲染。前一种太简单,这里主要讨论后一种,在窗口之内按Ctrl+鼠标左键,缩放,Ctrl+鼠标中键,平移,Ctrl+鼠标右键,旋转,这样对于交互显示来说就很重要了。

问题来源

在浏览OpenCASCADE脚本命令实现的时候,可以发现除explode之外,还有nexplode命令。看注释相比explode,nexplode命令可以稳定命名爆炸出来的对象,该命令实现内部在计算质心之类的东西,然后通过质心的排序依次命名访问TopoDS_Shape下边的面、边、顶点之类的对象,而explode仅仅是按按遍历次序来的。

我感觉这种模式也不好用,能一下子就明白面、边、顶点质心之类的属性排序出来是怎样的吗,不能吧。比对ACIS里对Scheme语言的扩展,采用拾取定位清晰很多,不过如果还依靠真实地在窗口里边鼠标点击选择,有点失去脚本便捷的优势,如果能够实际鼠标点击,拾取到所需要的,那就更好了,这个在OCCT里边也可以做到吗?

如何不通过实际鼠标点击,拾取到给定边缘

例举以下语句:

box b1 0 0 -20 8 40 40
vselmode b1 2 1
set str1 [vconvert 8 40 0 window]
scan $str1 "Window Xp,Yp: %d %d" a b
vselect $a $b
vnbselected
vpickselected e2

上面vselmode语句是定义拾取边缘,vselect则是模拟鼠标点击拾取的过程,vconvert则是将三维点转换成为当前窗口像素点,这样才知道在哪个位置发起拾取,vnbselected返回拾取的数量,vpickselected会捆绑拾取的对象至名字e2。

TCL脚本使用感受

最后说的自己使用TCL脚本的感受,TCL脚本对变量类型的扩充性不强,至少在OCCT里是这样,变量就是数量型,数组型,字符串型,列表型,字典型;后面的列表和字典也挺字符串的,OCCT是通过捆绑命名与Draw_Drawable3D派生类实例来对类型进行扩展,比如pi对应的是Draw_Number,赋值,所以得通过命令dval pi才能得到pi的值,并不能直接赋予pi。

再一个就是Tcl只支持参数的传值调用,不支持指针和引用类型,看教材的介绍要通过进行多一轮的替换,来模拟出引用的行为。有个专门的命令upvar命令。

然后,在实际使用中,我曾经想将explode爆炸出来的对象,搞成一个列表,再编写一个find_edge之类的过程,通过查询边缘的顶点与给定值比较精确定位边缘,搞一个通用的过程函数方便使用,但是传过去的边缘数组,在foreach循环里无法依据名字返回捆绑的边缘,无法使用,百丝不得其解呀,后面再去翻TCL脚本语言教程,看到传值,估计是这个原因吧,但是还是得不到理想的结果呀,而且不知道为什么whatis $edge可以得到边缘,再explode $edge v就不行了。

相比之下,ACIS的Scheme语言就好得多,(entity:edges s1)返回一个列表,存储s1里边的所有边缘,真的是边缘类型,OpenCASCADE的TCL里边用set elist [list {*}[explode b1 e]]语句也可以将b1里边的边缘打包成为列表,但是要注意的是elist列表里边的东西全是字符串的名字哦,它们不是边缘,只是在OCCT里边该名字捆绑了一个Draw_Drawable3D派生类实例,你可以对应过来用。

除此之外,Scheme语言对命令命名还支持‘:‘、‘?‘这些,可以较好对命令明确地分组,也容易理解些(比如edge?就是查询是否为边缘类型)。了解到这个我当时觉得开了眼界,只可惜ACIS是不开源的。

在OpenCASCAD脚本中拾取定位

标签:and   div   启用   mode   问题   引用类型   shape   reac   exp   

原文地址:http://www.cnblogs.com/zale_lzj/p/7985453.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!