fangmin723 发表于 2025-1-17 07:38:12

圆心、半径、起始角度和终止角度画弧

本帖最后由 fangmin723 于 2025-1-17 13:15 编辑

特别提醒:终止角度没有捕捉和输入指定角度的功能


;;;圆心、半径、起始角度和终止角度画弧 2023.4.23
;;;2024.6.21 动态显示

(defun c:acr(/ *error* arcdata carc cen dxf50 dxf51 ea gr olderr pt r sa)
(setq olderr *error*)
(defun *error*(msg) (entdel carc) (princ "\n程序强制已退出!") (setq *error* olderr) (princ))
(while (/= (type (setq cen (getpoint "\n指定圆弧的圆心:"))) 'LIST))
(while (/= (type (setq r (getdist cen "\n指定圆弧的半径: "))) 'REAL))
(while (/= (type (setq sa (getangle cen "\n指定圆弧起始角度:"))) 'REAL))
(setq carc (entmakex (list '(0 . "ARC") (cons 10 cen) (cons 40 r) (cons 50 sa) (cons 51 sa))) arcdata (entget carc))
(prompt "\n指定圆弧终止角度:")
(while (or (and (setq gr (grread T 15 0)) (= (car gr) 5)) (or (= (car gr) 2) (= (car gr) 11) (= (car gr) 12) (= (car gr) 25)))
    (if (= (car gr) 5)
      (progn
      (setq ea (angle cen (cadr gr)))
      (setq arcdata (subst (cons 51 ea) (assoc 51 arcdata) arcdata))
      (entmod arcdata)
      )
    )
)
(prompt "\n请使用【空格】改变圆弧方向,左键单击完成!")
(while (or (and (setq gr (grread T 15 0)) (= (car gr) 5)) (or (= (car gr) 2) (= (car gr) 11) (= (car gr) 12) (= (car gr) 25)))
    (if (equal gr '(2 32))
      (progn
      (setq dxf50 (cons 50 (cdr (assoc 51 arcdata))) dxf51 (cons 51 (cdr (assoc 50 arcdata))))
      (setq arcdata (subst dxf50 (assoc 50 arcdata) arcdata))
      (setq arcdata (subst dxf51 (assoc 51 arcdata) arcdata))
      (entmod arcdata)
      )
    )
)
(setq *error* olderr)
(prin1)
)

具体用归何处,参考:https://www.bilibili.com/video/BV1Xa4y1P75d

还是CAD.Net给力,不影响捕捉和角度值的输入


自贡黄明儒 发表于 2025-1-17 07:57:54

getdist不是initget控制的吗?

fangmin723 发表于 2025-1-17 08:03:57

本帖最后由 fangmin723 于 2025-1-17 08:05 编辑

自贡黄明儒 发表于 2025-1-17 07:57
getdist不是initget控制的吗?
可以用initget来控制程序功能走向,当时没有考虑那么多,就着当时的情况以及想要的效果写的

xyp1964 发表于 2025-1-18 10:35:23

;;加个动态角度显示可能更直观


页: [1]
查看完整版本: 圆心、半径、起始角度和终止角度画弧