;h为弓高(即弦中心至相对应弧之中心的距离)
;它用来描述以弦代弧的光滑程度,一般化取0.005mm(图上距离)即可
(defun arc->pline(ent h / xtblm xtblz db r po a0 h n)
   (setq xtblm '("cmdecho" "osmode")
  xtblz (mapcar 'getvar xtblm)
  db (entget ent)  r (cdr (assoc 40 db))
  po (cdr (assoc 10 db))  
  a0 (cdr (assoc 50 db))
  db (- (cdr (assoc 51 db)) a0)
  db (cond ((< db 0) (+ (* 2.0 pi) db))
    (t               db)
     )
  n  (fix (/ db (atan (/ (sqrt (- (* 2.0 r h) (* h h))) (- r h)))))
  db (/ db n)
   )
   (mapcar 'setvar xtblm '(0 0))
   (command "_pline" (polar po a0 r))
   (repeat n (command (polar po (setq a0 (+ a0 db)) r)))
   (command "" "_matchprop" ent (entlast) "" "_erase" ent "" "redraw")
   (mapcar 'setvar xtblm xtblz)(princ)
)
;测试程序
(defun c:cc()
   (setq t0 (getvar "cdate"))
   (arc->pline (car (entsel "\n请选取要转化多段线的圆弧:")) 0.005)
   (princ (strcat "\n耗时:" (rtos (* 1000000 (- (getvar "cdate") t0) 2 3)) "秒"))
   (princ)
)
TAG: 测量
发表评论
【声明】 路桥吾爱刊载的资讯及其他内容均由网友提供分享 并且纯属作者个人观点,不表示路桥吾爱同意其说法或描述,仅为提供更多信息,也不构成任何建议。网友转载请注明原作者姓名及出处。如有侵犯到您的版权,请与我们联系,我们会马上进行重新整理!