刘炎华 发表于 2021-4-2 07:35:26

相同的实体,如果旋转了,就选不上了……

请高手帮忙看下,这个可以修改吗?
相同的实体,如果旋转了,就选不上了……
原贴出自: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-2 07:35:27

本帖最后由 xvjiex 于 2021-4-27 09:05 编辑

请测试。目前支持图元包含:点、直线、多义线、圆、圆弧、椭圆、填充、图块、文字。
已调整镜像识别,还增加了“标注”。增加“属性块”(最外层所有属性)。已更新,新增样条线、射线、构造线、面域的支持。

start4444 发表于 2021-4-2 10:21:11

      啥意思?

刘炎华 发表于 2021-4-2 11:03:27

start4444 发表于 2021-4-2 10:21
啥意思?

您好!
是这样的:
一个图元被复制到其它多个地方,如果选择其中一个,其它的都能选中。
现在的问题是:如果图元旋转了一定角度,就选不上了

gaics 发表于 2021-4-2 13:24:56

他是把对象组码10的点坐标移动到原点再比较其他各个组码,角度不同肯定就认为是不同的对象。

690994 发表于 2021-4-2 13:33:36

根据图元类型长度面积过滤一下就可以了

print1985 发表于 2021-4-2 21:46:36

不同角度选择可能有些难。。。
关于角度,不同类型的图元没有固定组码;
比如直线根本没有组码表示角度,只能根据起点和终点计算
又比如矩形、椭圆等,角度又该怎么判断?

guosheyang 发表于 2021-4-3 21:41:37

attach://112774.gif加上角度判断也是可以实现的

print1985 发表于 2021-4-4 12:33:09

guosheyang 发表于 2021-4-3 21:41
attach://112774.gif加上角度判断也是可以实现的

看起来很棒!如果这个图片中的所有图元都适用的话就很6了

lrd1861 发表于 2021-4-4 14:31:15

print1985 发表于 2021-4-4 12:33
看起来很棒!如果这个图片中的所有图元都适用的话就很6了

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=91905&highlight=%D1%A1%D4%F1
页: [1] 2 3
查看完整版本: 相同的实体,如果旋转了,就选不上了……