;;两段圆弧组成的一条多段线替换成圆 By carrot1983 (vl-load-com) (defun C:CBC (/ A B CPT E I PT1 PT2 RAD SS) (princ "\n两段圆弧组成的一条多段线替换成圆 作者:蔡建伟 QQ:95818608 2009年04月10日" ) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object) ) ) ;;选择多段线-两个顶点|闭合|带弧 (if (setq SS (ssget '((0 . "LWPOLYLINE") (90 . 2) (70 . 1) (42 . 1.0)))) (repeat (setq I (sslength SS)) ;;(setq E (car (entsel))) (setq E (ssname SS (setq I (1- I)))) ;;多段线起点 (setq PT1 (vlax-curve-getpointatparam E 0)) ;;多段线终点 (setq PT2 (vlax-curve-getpointatparam E 1)) ;;圆心 (setq CPT (mapcar '(lambda (A B) (* (+ A B) 0.5)) PT1 PT2 ) ) ;;圆半径 (setq RAD (* 0.5 (distance PT1 PT2))) ;;生成圆 (if (entmake (list (cons 0 "CIRCLE") (cons 100 "AcDbEntity") (cons 100 "AcDbCircle") (cons 8 (cdr (assoc 8 (entget E)))) ;图层 (cons 10 (trans CPT 1 0)) ;圆心 (cons 40 RAD) ;半径 ) ) (entdel E) ;删除多段线 ) ) ) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object) ) ) (princ) )