品茗新秀 发表于 2013-1-4 23:46:10

求将符合条件的圆半径变成一半,不符合条件的圆变红色

本帖最后由 品茗新秀 于 2013-1-6 17:45 编辑

求将符合条件的圆半径变成一半,不符合条件的圆变红色
这个条件就是当两圆相交或重合是条件

夏生生 发表于 2013-1-4 23:46:11

这个条件图也太让人看不懂了,以自己的理解写了一个
圆内圆的时候可能会将内圆变红(defun x_ssn (ss / n lst)
(repeat (setq N (sslength ss))
    (setq LST (cons (ssname SS (setq N (1- N))) LST))
)
)
(defun circle_lst (en n / ent pt ptc dist ang lst tmp)
(setq        ent(entget en)
        pt   (cdr (assoc 10 ent))
        dist (cdr (assoc 40 ent))
        tmp0
        ang(/ pi n 0.5)
        lstnil
)
(repeat n
    (setq ptc (polar pt tmp dist)
          tmp (+ tmp ang)
          lst (cons ptc lst)
    )
)
lst
)
(defun c:test1 (/ ss lst en)
(setq ss (ssget '((0 . "circle"))))
(setq lst (x_ssn ss))
(while lst
    (setq en (car lst))
    (setq
      ss (ssdel en (ssget "cp" (circle_lst en 64) '((0 . "circle"))))
    )
    (if        (> (sslength ss) 0)
      (progn
        (mapcar        '(lambda (cir)
                   (vla-put-Diameter
                     (vlax-ename->vla-object cir)
                     (cdr (assoc 40 (entget cir)))
                   )
               )
                (x_ssn ss)
        )
        (vla-put-Diameter
          (vlax-ename->vla-object en)
          (cdr (assoc 40 (entget en)))
        )
        (setq
          lst (foreach n (x_ssn ss) (vl-remove n (vl-remove en lst)))
        )
      )
      (progn
        (vla-put-color (vlax-ename->vla-object en) 1)
        (setq lst (cdr lst))
      )
    )
)
(princ)
)

天意今天 发表于 2013-1-5 14:54:45

用arx 调用intersectWith接口就解决问题了

zyhandw 发表于 2013-1-6 08:24:31

请提供dwg测试图,并详细说明通过什么操作达到什么结果
页: [1]
查看完整版本: 求将符合条件的圆半径变成一半,不符合条件的圆变红色