chpmould 发表于 2011-6-2 18:37:26

获取同心圆中最大圆直径

如何实现,用框选的方式,获取同心圆中最大圆直径和中心点...想过逐个判断但是速度慢,不知是否有更快的方法...

祥子 发表于 2011-6-2 19:39:14

那只有逐个判断了加减少选择集数量了,一般时间应该很快的吧,不知你有多少个同心圆要计算的

LLXXZZ 发表于 2011-6-2 22:27:57

怕不快,多虑了,我用cad读取7M的记事本的内容,才用2秒.

LLXXZZ 发表于 2011-6-2 22:29:35

怕不快,多虑了,我用cad读取7M的记事本的内容,才用2秒.

chpmould 发表于 2011-6-2 23:16:58

本帖最后由 chpmould 于 2011-6-2 23:18 编辑

祥子 发表于 2011-6-2 19:39 http://space.mjtd.com/static/image/common/back.gif
那只有逐个判断了加减少选择集数量了,一般时间应该很快的吧,不知你有多少个同心圆要计算的

       因为选择时还有不是同心的混合在一起,是同心圆的,有的是5~8个同心不等...比喻选择1000个那循环的次数将是多少,可想而知...

chpmould 发表于 2011-6-2 23:28:56

LLXXZZ 发表于 2011-6-2 22:29 static/image/common/back.gif
怕不快,多虑了,我用cad读取7M的记事本的内容,才用2秒.

不知你有什么好的方法

祥子 发表于 2011-6-3 22:28:17

(defun c:test(/ S SS I LI CEN RED EN D)
(defun dxf(n ename)
(cdr(assoc n (entget ename)))
)
(princ "\n请选取一个圆")
(setq s(ssget ":S" '((0 . "CIRCLE"))))
(if (and s
           (setq ss
                  (ssget
                  (list (cons 0 "CIRCLE") (setq cen(assoc 10 (entget (ssname s 0)))))
                  )
           )
      )
    (progn
      (setq i 0 li (list ( dxf 40(ssname s 0))))
      (repeat (sslength ss )
      (setq en        (ssname ss i)
          red(dxf 40 en)
          li (cons red li )
          )
        )
      (setq d(* 2.0 (apply 'max li)))
      (princ "在中心点 ")
      (princ (cdr cen ))
      (princ " , 最大的同心圆半径= ")
      (princ d)
      
      )
   
    )
(princ)
)

chpmould 发表于 2011-6-4 12:36:52

祥子 发表于 2011-6-3 22:28 static/image/common/back.gif
(defun c:test(/ S SS I LI CEN RED EN D)
(defun dxf(n ename)
(cdr(assoc n (entget ename)))


谢谢了,不过这种方式只能选择一组,不能实现多组,例如成百上千组...

690994 发表于 2011-6-4 12:59:01

时间不是问题,我的标注一块模板很快,取出保圆之圆心和直径成表再操作。

chpmould 发表于 2011-6-4 14:13:18

690994 发表于 2011-6-4 12:59 static/image/common/back.gif
时间不是问题,我的标注一块模板很快,取出保圆之圆心和直径成表再操作。

圆心和直径成表再操作,能否稍详细一点...
页: [1] 2 3
查看完整版本: 获取同心圆中最大圆直径