yjwht 发表于 4 天前

看了xyp1964的点评:中间状态应尽可能用grread函数点集模拟曲线状态,避免不停的生成和删除多段线
代码修改成这样了,我也只会这一点了,避免不停的生成和删除多段线却是做不到:
(defun c:tt(/ R L1Lt H a1p1 p2p3 p4p6 p7
             p8 p9p10 Lx L0L2 n keylist)
(setq R 1900)                        ;设置弯曲半径(mm)
(setq L1 1000)                        ;设置直线段初始长度(mm)
(setq Lt (+ (* 2 L1) (* 2 pi R)))
(setqp1 '(0 0)
      p2 (list L1 0)
      p3 (list 1000 R)
)
(setq H (* R 2))
(tt2)
(princ "\n调整拱高 a小减,d小增 ,s大减 ,w大增:")
(terpri)
(setq keylist '(119 115 97 100))
(setq n (cadr (grread)))

(while (/= n 13)
    (grtext -1 "按 a(-10) d(+10) s(-100) w(+100)")
    (while (not (member n keylist))
      (setq n (cadr (grread)))
    )
    (cond
         ((equal n 97) (setq H (max 0 (- H 10)))); a
         ((equal n 100) (setq H (min 3800 (+ H 10)))); d
         ((equal n 115) (setq H (max 0 (- H 100)))) ; s
         ((equal n 119) (setq H (min 3800 (+ H 100)))); w
    )
    (entdel (entlast))
    (tt2)
    (setq n (cadr (grread)))
)
(princ)
)

(defun tt2 ()
(setq a1 (atan (- (* R 2) H) (sqrt (- (* R H 4) (* H H)))))
(setq p4 (polar p3 (* a1 -1) R))
(setq p6 (polar p3 (* a1 -1) (* R 2)))
(setq p7 (polar p6 a1 R))
(setq p8 (polar p6 a1 (* R 2)))
(setq p9 (polar p8 (* pi -0.5) R))
(setq Lx (- Lt (* pi R 2) (* a1 R -4) L1))
(setq p10 (polar p9 0 Lx))
(command "PLINE" p1"W"95 95p2 "A" "CE"p3 p4p7 "CE"p8 p9"L"p10
         "")
(setq L0 (- (* pi R 2) (* a1 R 4) (distance p2 p9))) ;剩余预留长度
(setq L2 (- (* pi R 2) (* R 4) L0))
(princ (strcat "\n拱高" (rtos H 2 0) "mm    "))
(princ (strcat "剩余预留长度" (rtos L0 2 0) "mm    "))
(princ (strcat "已拉伸长度" (rtos L2 2 0) "mm"))
)

xyp1964 发表于 3 天前

;; 大概这个意思


页: 1 [2]
查看完整版本: 模拟电缆裕度弯拉伸效果动画