多条带XDATA的多线段,如何查找属性,缩放至对象
本帖最后由 niqiu8 于 2013-1-22 15:06 编辑如题 ,在作图的时候要用到这个功能,
大概思路是这样的,一个命令后,打开一个面板,列出所有多线段(沟渠或河流,通过属性区分),从属性中读取编号。
然后在面板中双击某编号,自动缩放到此多线段,可缩放平移等操作,查看周边情况,再点击面板列表中其它编号,缩放至另一编号多线段,如此循环,
因为平时需要查找某一条多线段,查看相关情况,操作比较麻烦,想到这个思路,请高手提供点编程思路,谢谢。
本帖最后由 llsheng_73 于 2013-11-29 20:59 编辑
(setq ent(car(entsel)))(vla-getboundingbox (vlax-ename->vla-object ent) 'Minpoint 'Maxpoint)
(vla-zoomwindow (vlax-get-acad-object) minpoint maxpoint) 可以参照南方属性检查面板那样来做 运算不是太难。关键是面板问题,在用户在作查看等操作时,它要保持在显示状态,普通的对话框无法实现。简单点的办法是,自动缩放平移完毕后自动关闭对话框,用户查看完毕(例如右键)重新回到对话框。 liu_kunlun 发表于 2013-1-23 10:33 static/image/common/back.gif
运算不是太难。关键是面板问题,在用户在作查看等操作时,它要保持在显示状态,普通的对话框无法实现。简单 ...
或者可以用odcl实现 liu_kunlun 发表于 2013-1-23 10:33 static/image/common/back.gif
运算不是太难。关键是面板问题,在用户在作查看等操作时,它要保持在显示状态,普通的对话框无法实现。简单 ...
嗯,这个可以接受,LISP里面缩放至对象怎么实现,有相关函数么? 本帖最后由 liu_kunlun 于 2013-1-26 01:26 编辑
用GetBoundingBox方法获得最大坐标点及最小坐标点,
(vla-getboundingbox (vlax-ename->vla-object ent) 'Minpoint 'Maxpoint)
(setq Ptmin (vlax-safearray->list Minpoint))
(setq Ptmax (vlax-safearray->list Maxpoint))
这样可推算出实体的中心点ptc及长和高,用(getvar "screensize")得到屏幕的长和高,根据实体的长和高以及屏幕的长和高求出完全显示该实体时需要屏幕显示的高度尺寸h,再用(command "zoom" "c" ptc h)即可。如果UCS与WCS不一致,或DCS与UCS不平行或有转角,均需采取措施才能得到预期效果。
非常感谢楼上两 位的热心回答,明天去单 位试一下 为什么我不转换数组也报错,转换数组还是报错?
命令: (vla-zoomwindow minpoint maxpoint)
; 错误: 参数类型错误: VLA-OBJECT #<safearray...>
命令: (setq Ptmax (vlax-safearray->list Maxpoint))
(432.267 -2525.78 0.0)
命令: (vla-zoomwindow Ptmin Ptmax)
; 错误: 参数类型错误: VLA-OBJECT (367.359 -2573.92 0.0) liu_kunlun 发表于 2013-1-26 01:00 static/image/common/back.gif
用GetBoundingBox方法获得最大坐标点及最小坐标点,
(vla-getboundingbox (vlax-ename->vla-object ent) ' ...
感谢分享思路,学习了
页:
[1]