圆弧转多段线(LISP代码)

;圆弧转多段线
;h为弓高(即弦中心至相对应弧之中心的距离)
;它用来描述以弦代弧的光滑程度,一般化取0.005mm(图上距离)即可
(defun&nbsparc->pline(ent&nbsph&nbsp/&nbspxtblm&nbspxtblz&nbspdb&nbspr&nbsppo&nbspa0&nbsph&nbspn)
&nbsp&nbsp&nbsp(setq&nbspxtblm&nbsp'("cmdecho"&nbsp"osmode")
&nbsp&nbspxtblz&nbsp(mapcar&nbsp'getvar&nbspxtblm)
&nbsp&nbspdb&nbsp(entget&nbspent)&nbsp&nbspr&nbsp(cdr&nbsp(assoc&nbsp40&nbspdb))
&nbsp&nbsppo&nbsp(cdr&nbsp(assoc&nbsp10&nbspdb))&nbsp&nbsp
&nbsp&nbspa0&nbsp(cdr&nbsp(assoc&nbsp50&nbspdb))
&nbsp&nbspdb&nbsp(-&nbsp(cdr&nbsp(assoc&nbsp51&nbspdb))&nbspa0)
&nbsp&nbspdb&nbsp(cond&nbsp((<&nbspdb&nbsp0)&nbsp(+&nbsp(*&nbsp2.0&nbsppi)&nbspdb))
&nbsp&nbsp&nbsp&nbsp(t&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdb)
&nbsp&nbsp&nbsp&nbsp&nbsp)
&nbsp&nbspn&nbsp&nbsp(fix&nbsp(/&nbspdb&nbsp(atan&nbsp(/&nbsp(sqrt&nbsp(-&nbsp(*&nbsp2.0&nbspr&nbsph)&nbsp(*&nbsph&nbsph)))&nbsp(-&nbspr&nbsph)))))
&nbsp&nbspdb&nbsp(/&nbspdb&nbspn)
&nbsp&nbsp&nbsp)
&nbsp&nbsp&nbsp(mapcar&nbsp'setvar&nbspxtblm&nbsp'(0&nbsp0))
&nbsp&nbsp&nbsp(command&nbsp"_pline"&nbsp(polar&nbsppo&nbspa0&nbspr))
&nbsp&nbsp&nbsp(repeat&nbspn&nbsp(command&nbsp(polar&nbsppo&nbsp(setq&nbspa0&nbsp(+&nbspa0&nbspdb))&nbspr)))
&nbsp&nbsp&nbsp(command&nbsp""&nbsp"_matchprop"&nbspent&nbsp(entlast)&nbsp""&nbsp"_erase"&nbspent&nbsp""&nbsp"redraw")
&nbsp&nbsp&nbsp(mapcar&nbsp'setvar&nbspxtblm&nbspxtblz)(princ)
)
;测试程序
(defun&nbspc:cc()
&nbsp&nbsp&nbsp(setq&nbspt0&nbsp(getvar&nbsp"cdate"))
&nbsp&nbsp&nbsp(arc->pline&nbsp(car&nbsp(entsel&nbsp"\n请选取要转化多段线的圆弧:"))&nbsp0.005)
&nbsp&nbsp&nbsp(princ&nbsp(strcat&nbsp"\n耗时:"&nbsp(rtos&nbsp(*&nbsp1000000&nbsp(-&nbsp(getvar&nbsp"cdate")&nbspt0)&nbsp2&nbsp3))&nbsp""))
&nbsp&nbsp&nbsp(princ)
)

发表评论

您的邮箱不会被公开。* 为必填项