相同的实体,如果旋转了,就选不上了……
请高手帮忙看下,这个可以修改吗?相同的实体,如果旋转了,就选不上了……
原贴出自:http://bbs.mjtd.com/thread-90258-1-1.html
;;;函数功能:选择除了位置不一样,其他都完全一样的的实体
(defun c:tt(/ en enl filter ss)
(setq en (car (entsel "\n 选择图元: ")))
(if en
(progn
(setq enl (entget en))
(setq filter
(vl-remove-if-not
'(lambda (X)
(or
(= 0 (car x))
(= 8 (car x))
(= 62 (car x))
(= 6 (car x))
(= 370 (car x))
(= 48 (car x))
(= 100 (car x))
(= 67 (car x))
(= 60 (car x))
)
)
enl
)
)
(setq ss (ssget "x" filter))
(setq ss (GXL-SEL-SS->LIST ss)
ss (mapcar '(lambda (X) (list x (gxl-dxf x 10))) ss)
)
(mapcar '(lambda (x)
(vla-move (vlax-ename->vla-object (car x))
(vlax-3d-point (cadr x))
(vlax-3d-point '(0 0 0))))
ss)
(setq filter
(vl-remove-if
'(lambda (X)
(or
(= -1 (car x))
(= 5 (car x))
(= 330 (car x))
(= 360 (car x))
(= 370 (car x))
(= 347 (car x))
(= 390 (car x))
)
)
(entget en)
)
)
(setq el (entget (caar ss)))
(setq ss1 (ssget "x" filter))
(mapcar '(lambda (x)
(vla-move (vlax-ename->vla-object (car x))
(vlax-3d-point '(0 0 0))
(vlax-3d-point (cadr x))))
ss)
(princ)
(SSSETFIRST nil ss1)
)
)
(princ)
)
(defun gxl-Sel-SS->List (ss / i s)
(if ss
(repeat (setq i (sslength ss))
(setq s (cons (ssname ss (setq i (1- i))) s))
)
)
)
(defun gxl-dxf (ent i)
(cond ((= (type ent) 'ename)
(cdr (assoc i (entget ent)))
)
((= (type ent) 'list)
(cdr (assoc i ent))
)
) ;_ if
)
本帖最后由 xvjiex 于 2021-4-27 09:05 编辑
请测试。目前支持图元包含:点、直线、多义线、圆、圆弧、椭圆、填充、图块、文字。
已调整镜像识别,还增加了“标注”。增加“属性块”(最外层所有属性)。已更新,新增样条线、射线、构造线、面域的支持。
啥意思? start4444 发表于 2021-4-2 10:21
啥意思?
您好!
是这样的:
一个图元被复制到其它多个地方,如果选择其中一个,其它的都能选中。
现在的问题是:如果图元旋转了一定角度,就选不上了 他是把对象组码10的点坐标移动到原点再比较其他各个组码,角度不同肯定就认为是不同的对象。 根据图元类型长度面积过滤一下就可以了 不同角度选择可能有些难。。。
关于角度,不同类型的图元没有固定组码;
比如直线根本没有组码表示角度,只能根据起点和终点计算
又比如矩形、椭圆等,角度又该怎么判断? attach://112774.gif加上角度判断也是可以实现的
guosheyang 发表于 2021-4-3 21:41
attach://112774.gif加上角度判断也是可以实现的
看起来很棒!如果这个图片中的所有图元都适用的话就很6了
print1985 发表于 2021-4-4 12:33
看起来很棒!如果这个图片中的所有图元都适用的话就很6了
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=91905&highlight=%D1%A1%D4%F1