超然A 发表于 2006-3-12 22:59:00

下午在QQ群里见到的一个标注程式(对两圆上的最近点进行标注),这是我修改过后的

;对两圆上的最近点进行标注(未考虑两圆同心的情况)<BR>;当两圆相交时不适用<BR>(defun c:biaozhu ()<BR>&nbsp; (setq c1 (entsel "\n选取第一个圆:"))<BR>&nbsp; (setq c2 (entsel "\n选取第二个圆:"))<BR>&nbsp; (setq&nbsp;shuxing_c1 (entget (car c1))&nbsp;;图元信息列表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;shuxing_c2 (entget (car c2))<BR>&nbsp; )<BR>&nbsp; (setq&nbsp;leixing_c1 (cdr (assoc 0 shuxing_c1)) ;图元类型<BR>&nbsp;leixing_c2 (cdr (assoc 0 shuxing_c2))<BR>&nbsp; )<BR>&nbsp; (if<BR>&nbsp;&nbsp;&nbsp; (and<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (or (= leixing_c1 "CIRCLE") (= leixing_c2 "CIRCLE"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;判断图元类型是否是圆<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn (setq r_c1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cdr (assoc 40 shuxing_c1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;得到圆的半径<BR>&nbsp;&nbsp;&nbsp;&nbsp; r_c2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cdr (assoc 40 shuxing_c2))<BR>&nbsp;&nbsp;&nbsp;&nbsp; center_c1&nbsp;&nbsp; (cdr (assoc 10 shuxing_c1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;得到圆的圆心<BR>&nbsp;&nbsp;&nbsp;&nbsp; center_c2&nbsp;&nbsp; (cdr (assoc 10 shuxing_c2))<BR>&nbsp;&nbsp;&nbsp;&nbsp; ang_1to2&nbsp;&nbsp;&nbsp; (angle center_c1 center_c2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;得到圆心1到圆心2的角度<BR>&nbsp;&nbsp;&nbsp;&nbsp; ang_2to1&nbsp;&nbsp;&nbsp; (angle center_c2 center_c1)<BR>&nbsp;&nbsp;&nbsp;&nbsp; neapoint_c1 (polar center_c1 ang_1to2 r_c1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;得到圆1上到圆2的最近点<BR>&nbsp;&nbsp;&nbsp;&nbsp; neapoint_c2 (polar center_c2 ang_2to1 r_c2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "dimaligned" neapoint_c1 neapoint_c2 neapoint_c2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;标注<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp; (princ)<BR>&nbsp; )<BR>)

超然A 发表于 2006-3-12 23:15:00

<P></P>
<P>如图所示</P>

ljpnb 发表于 2006-3-13 07:51:00

<P>在两个物体都为圆的前提下,先判断两圆的中心距是否大于两半径之和,再进行标注。</P>

别晨 发表于 2006-3-13 12:21:00

缺少两园相切相交的判断!

ljpnb 发表于 2006-3-13 12:39:00

修改了一下

(defun c:biaozhu ()
(if (setq dxf1 (entget (car (entsel "\n选取第一个圆:"))))
    (if (setq dxf2 (entget (car (entsel "\n选取第二个圆:"))))
      (progn
(setq leixing_c1 (cdr (assoc 0 dxf1)) ;_图元类型
       leixing_c2 (cdr (assoc 0 dxf2))
)
(if (and (or (= leixing_c1 "CIRCLE") (= leixing_c2 "CIRCLE"))) ;_判断图元类型是否是圆
   (progn
   (setq r_c1   (cdr (assoc 40 dxf1)) ;_得到圆的半径
    r_c2   (cdr (assoc 40 dxf2))
    center_c1 (cdr (assoc 10 dxf1)) ;_得到圆的圆心
    center_c2 (cdr (assoc 10 dxf2))
    ang_1to2(angle center_c1 center_c2) ;_得到圆心1到圆心2的角度
    ang_2to1(angle center_c2 center_c1)
   )
   (if
       (> (distance center_c1 center_c2) (+ r_c1 r_c2))
      (progn
   (setq neapoint_c1 (polar center_c1 ang_1to2 r_c1) ;_得到圆1上到圆2的最近点
         neapoint_c2 (polar center_c2 ang_2to1 r_c2)
   )
   (command "dimaligned""none"neapoint_c1
   "none"neapoint_c2 "none"
   neapoint_c2
    )
   ;标注
      )
      (princ "\n两圆相交,重新选择!")
   )
   )
   (princ "\n所选物体不是圆,重新选择!")
)
      )
    )
)
(princ)
)

别晨 发表于 2006-3-13 13:15:00

这几种情况<br><br>

别晨 发表于 2006-3-13 13:18:00

相交,内切,外切,包含,同心 ,相离<br>

xyp1964 发表于 2006-3-13 13:45:00

mlb850602 发表于 2010-9-20 00:01:00

<p>赞个!哈哈~</p>

mlb850602 发表于 2010-9-20 00:19:00

哎~~怎么用丫!?加载了,试了命令,不知道怎么用!提示说是否垂直      Y或者N
页: [1] 2
查看完整版本: 下午在QQ群里见到的一个标注程式(对两圆上的最近点进行标注),这是我修改过后的