明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 刘炎华

[源码] CAD中快速查找图元

[复制链接]
发表于 2019-12-26 13:13 来自手机 | 显示全部楼层
选择易,了解一下
回复

使用道具 举报

发表于 2019-12-26 13:15 | 显示全部楼层
本帖最后由 taoyi0727 于 2019-12-26 13:17 编辑
刘炎华 发表于 2019-12-26 12:15
您好!如果图档太大查找会卡死,可以设条件查找对象为相同图层吗?

可以的
看你要怎么改  是同选择对象一样的图层吗?还是手动自己输入图层
回复

使用道具 举报

 楼主| 发表于 2019-12-26 13:44 来自手机 | 显示全部楼层
同选择对象同图层,谢谢!
回复

使用道具 举报

 楼主| 发表于 2019-12-26 13:56 来自手机 | 显示全部楼层
补充下,査找对象可以与目标对象类型相同吗,谢谢!比如,多义线只对应多义线
回复

使用道具 举报

发表于 2019-12-26 14:14 | 显示全部楼层
刘炎华 发表于 2019-12-26 13:56
补充下,査找对象可以与目标对象类型相同吗,谢谢!比如,多义线只对应多义线

可以的  晚上嘛  在上班呢
回复

使用道具 举报

 楼主| 发表于 2019-12-26 14:46 来自手机 | 显示全部楼层
好的,谢谢!
回复

使用道具 举报

发表于 2019-12-26 19:13 | 显示全部楼层

(defun c:tt (/ judge l lst-name name obj ss t-get-length t-layer t-length t-type)
        (defun T-get-Length (obj / t-length)
                (cond
                        ((or
                                 (= (vla-get-ObjectName obj) "AcDbPolyline")
                                 (= (vla-get-ObjectName obj) "AcDbLine")
                         )
                                (setq T-Length (vla-get-Length obj))
                        )
                        ((= (vla-get-ObjectName obj) "AcDbArc")
                                (setq T-Length (vla-get-ArcLength obj))
                        )
                        ((= (vla-get-ObjectName obj) "AcDbCircle")
                                (setq T-Length (* pi (vla-get-Radius obj) 2))
                        )
                        ((= (vla-get-ObjectName obj) "AcDbSpline")
                                (setq endpar (vlax-curve-getEndParam obj))
                                (setq T-Length (vlax-curve-getDistAtParam obj endpar))
                        )
                )
                T-Length
        )
        (setq judge t)
        (while (and
                                         judge
                                         (setq ss (ssget ":E:S"))
                                 )
                (setq obj (vlax-ename->vla-object (setq name (ssname ss 0))))
                (setq T-type (cdr (assoc 0 (entget name))));图元类型
                (setq T-Layer (vla-get-Layer obj));图元图层
                (setq T-Length (T-get-Length obj));图元长度
                (if T-Length
                        (progn
                                (setq ss (ssget "x" (list
                                                                                                                        '(-4 . "<and")
                                                                                                                        (cons 0 T-type);图元类型
                                                                                                                        (cons 8 T-Layer);图元图层
                                                                                                                        '(-4 . "and>")
                                                                                                                )
                                                                 )
                                )
                                (while (setq name (ssname ss 0))
                                        (setq l (T-get-Length (vlax-ename->vla-object name)))
                                        (if (equal T-Length l 0.1);容差0.1,这个自己根据需要来改
                                                (setq lst-name (append lst-name (list name)))
                                        )
                                        (ssdel name ss)
                                )
                                (setq judge nil)
                        )
                )
        )
        (if lst-name
                (progn
                        (setq ss (ssadd))
                        (foreach x lst-name
                                (ssadd x ss)
                        )
                        (sssetfirst nil ss)
                        (princ (strcat "\n找到 " (itoa (sslength ss)) " 个对象\n"))
                        (princ)
                )
        )
)
看下是不是这样的
回复

使用道具 举报

 楼主| 发表于 2019-12-27 10:05 来自手机 | 显示全部楼层
可以了,非常感谢!
回复

使用道具 举报

 楼主| 发表于 2019-12-28 18:07 | 显示全部楼层
taoyi0727 发表于 2019-12-26 19:13
(defun c:tt (/ judge l lst-name name obj ss t-get-length t-layer t-length t-type)
        (defun T-get-L ...

您好!可以帮我指点下这个吗?
希望复制后的对象可以成为下个命令的选择集P,就弄了下面这个:
(defun C:CX()
(command "COPY" ss "" "0,0" "0,0")
(command "move" ss "")
(princ))

但是命令中“ESC”,或命令完成后“UNDO”,会在原来的位置有多出1个图元,怎么弄啊?
不好意思啊,打扰了...
希望有空的话能指点一下,谢谢!
回复

使用道具 举报

发表于 2019-12-28 18:32 | 显示全部楼层
你说的我没有看明白,水平也不高。
你就说要你完成什么功能,看我能不能写出来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 09:14 , Processed in 0.208154 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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