明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2579|回复: 9

多条带XDATA的多线段,如何查找属性,缩放至对象

[复制链接]
发表于 2013-1-22 15:03:10 | 显示全部楼层 |阅读模式
本帖最后由 niqiu8 于 2013-1-22 15:06 编辑

如题 ,在作图的时候要用到这个功能,
大概思路是这样的,一个命令后,打开一个面板,列出所有多线段(沟渠或河流,通过属性区分),从属性中读取编号。
然后在面板中双击某编号,自动缩放到此多线段,可缩放平移等操作,查看周边情况,再点击面板列表中其它编号,缩放至另一编号多线段,如此循环,
因为平时需要查找某一条多线段,查看相关情况,操作比较麻烦,想到这个思路,请高手提供点编程思路,谢谢。
发表于 2013-11-29 20:57:46 | 显示全部楼层
本帖最后由 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)
回复 支持 1 反对 0

使用道具 举报

发表于 2013-1-23 07:45:10 来自手机 | 显示全部楼层
可以参照南方属性检查面板那样来做
发表于 2013-1-23 10:33:27 | 显示全部楼层
运算不是太难。关键是面板问题,在用户在作查看等操作时,它要保持在显示状态,普通的对话框无法实现。简单点的办法是,自动缩放平移完毕后自动关闭对话框,用户查看完毕(例如右键)重新回到对话框。
发表于 2013-1-24 09:26:04 | 显示全部楼层
liu_kunlun 发表于 2013-1-23 10:33
运算不是太难。关键是面板问题,在用户在作查看等操作时,它要保持在显示状态,普通的对话框无法实现。简单 ...

或者可以用odcl实现
 楼主| 发表于 2013-1-25 14:09:02 | 显示全部楼层
liu_kunlun 发表于 2013-1-23 10:33
运算不是太难。关键是面板问题,在用户在作查看等操作时,它要保持在显示状态,普通的对话框无法实现。简单 ...

嗯,这个可以接受,LISP里面缩放至对象怎么实现,有相关函数么?
发表于 2013-1-26 01:00:55 | 显示全部楼层
本帖最后由 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-getboundingbox (vlax-ename->vla-object ent) 'Minpoint 'Maxpoint) (vla-zoomwindow minpoint maxpoint)  发表于 2013-1-26 10:21
 楼主| 发表于 2013-2-28 22:17:54 | 显示全部楼层
非常感谢楼上两 位的热心回答,明天去单 位试一下
 楼主| 发表于 2013-3-1 10:34:34 | 显示全部楼层
为什么我不转换数组也报错,转换数组还是报错?
命令: (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)
发表于 2013-11-29 13:02:58 | 显示全部楼层
liu_kunlun 发表于 2013-1-26 01:00
用GetBoundingBox方法获得最大坐标点及最小坐标点,
(vla-getboundingbox (vlax-ename->vla-object ent) ' ...

感谢分享思路,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-26 01:00 , Processed in 0.209911 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表