yjwht 发表于 2025-5-21 19:08:10

电缆水平偏移弯曲线绘制

按规范,电缆有最大允许弯曲半径要求,电缆水平偏移时弯曲段投影长度公式为L≥(4RX-X^2)^0.5。
要反复多次使用该要求绘制电缆弯曲线,不胜其扰,因此采用lisp编写了一段程序来自动绘制。该

程序以测试在浩辰CAD2019、AutoCAD2021上没有问题。
;指定电缆允许弯曲半径及水平偏移起止点,自动绘制电缆弯曲线
(defun c:tt()
(setq v1 (getvar "osmode"))
(setq v2 (getvar "cmdecho"))
(setq v3 (getvar "blipmode"))
(setq R (getreal "\n请输入电缆允许弯曲半径(mm):"))
(setq p1 (getpoint "\n请指定水平弯曲起点:"))
(setq p2 (getpoint "\n请指定水平弯曲止点:"))
(if (> (car p1) (car p2))
    (progn (setq p0 p1) (setq p1 p2) (setq p2 p0)))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq p3 (list (/ (+ (car p1) (car p2)) 2) (/ (+ (cadr p1) (cadr p2)) 2)))
(setq X (abs (- (cadr p1) (cadr p2)))) ;计算偏移距离
(if (> X (* 4 R))
    (progn
      (princ "\n偏移距离过大!")
      (exit)
    )
    (setq L (sqrt (- (* 4 R X) (* X X)))) ;计算弯曲段投影长度
)
(setq p4 (list (- (car p3) (* L 0.5)) (cadr p1))) ;圆弧1起点
(setq p5 (list (+ (car p3) (* L 0.5)) (cadr p2))) ;圆弧2起点
(if (> (cadr p2) (cadr p1))
    (progn
      (setq p6 (polar p4 (* pi 0.5) R)) ;圆弧圆心1
      (setq p7 (polar p5 (* pi -0.5) R)) ;圆弧圆心2
      (command "arc" "c" p6 p4 p3)
      (command "arc" "c" p7 p5 p3)
      (if (< L (- (car p2) (car p1)))
(progn
    (command "line" p1 p4 "")
    (command "line" p2 p5 "")
      )
      )
    )
    (progn
      (setq p6 (polar p4 (* pi -0.5) R)) ;圆弧圆心1
      (setq p7 (polar p5 (* pi 0.5) R)) ;圆弧圆心2
      (command "arc" "c" p6 p3 p4)
      (command "arc" "c" p7 p3 p5)
      (if (< L (- (car p2) (car p1)))
(progn
    (command "line" p4 p1 "")
    (command "line" p5 p2 "")
      )
      )
    )
)
(setvar "osmode" v1)
(setvar "cmdecho" v2)
(setvar "blipmode" v3)
)

tiancao100 发表于 2025-5-21 22:48:17

CAD 命令:BLEND 一样的效果

yjwht 发表于 2025-6-4 08:19:02

昨天遇到电缆夹层内设裕度曲,需要按给定预留量来绘制比较困难,因此用WPS表格做了两种情况的计算。
意犹未尽,又用lisp编写了一段自动计算的代码。(defun c:tt()

(setq v1(getvar "osmode"))
(setq v2(getvar "cmdecho"))
(setq v3(getvar "blipmode"))
(setq H1 (getint "\n请输入裕度弯偏移距离(mm):"))
(setq R1 (getint "\n请输入电缆转弯半径(mm):"))
(setq A (getpoint "\n指定直线段端点1:"))
(setq B (getpoint "\n指定直线段端点2:"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq K (polar A 0 (/ (distance A B) 2)))
(setq C (polar K (/ pi 2) H1))
(setq D (polar C (/ pi -2) R1))
(setq L1 (sqrt (- (* 4 R1 H1) (expt H1 2))))
(setq F (polar K pi L1))
(setq E (polar F (/ pi 2) R1))
(setq I (polar E (angle E D) (/ (distance E D) 2)))
(setq H (polar K 0 L1))
(setq G (polar H (/ pi 2) R1))
(setq J (polar G (angle G D) (/ (distance G D) 2)))
(command "arc" "c" E F I)
(command "arc" I C J)
(command "arc" "c" G J H)
(setvar "osmode" v1)
(setvar "cmdecho" v2)
(setvar "blipmode" v3)
(princ)
)

iszc 发表于 2025-5-22 07:50:55

感谢分享            

yjwht 发表于 2025-5-22 06:47:25

tiancao100 发表于 2025-5-21 22:48
CAD 命令:BLEND 一样的效果

浩辰没有BLEND这个命令。AutoCAD有BLEND,但不能确保弯曲半径为指定值。不过这个BLEND在不需指定弯曲半径时很有用{:1_1:}

tranque 发表于 2025-5-21 19:16:59

赞,感谢分享

yjwht 发表于 2025-5-22 09:16:30

再补充一个电缆垂直偏移曲线绘制程序;指定电缆允许弯曲半径及垂直偏移起止点,自动绘制电缆弯曲线
(defun c:tt()
(setq v1 (getvar "osmode"))
(setq v2 (getvar "cmdecho"))
(setq v3 (getvar "blipmode"))
(setq R (getreal "\n请输入电缆允许弯曲半径(mm):"))
(setq p1 (getpoint "\n请指定垂直弯曲起点:"))
(setq p2 (getpoint "\n请指定垂直弯曲止点:"))
(if (< (cadr p1) (cadr p2))
    (progn (setq p0 p1) (setq p1 p2) (setq p2 p0)))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq p3 (list (/ (+ (car p1) (car p2)) 2) (/ (+ (cadr p1) (cadr p2)) 2)))
(setq X (abs (- (car p1) (car p2)))) ;计算偏移距离
(if (> X (* 4 R))
    (progn
      (princ "\n偏移距离过大!")
      (exit)
    )
    (setq L (sqrt (- (* 4 R X) (* X X)))) ;计算弯曲段投影长度
)
(setq p4 (list (car p1) (+ (cadr p3) (* L 0.5)))) ;圆弧1起点
(setq p5 (list (car p2) (- (cadr p3) (* L 0.5)))) ;圆弧2起点
(if (> (car p2) (car p1))
    (progn
      (setq p6 (polar p4 0 R)) ;圆弧圆心1
      (setq p7 (polar p5 pi R)) ;圆弧圆心2
      (command "arc" "c" p6 p4 p3)
      (command "arc" "c" p7 p5 p3)
      (if (< L (- (cadr p1) (cadr p2)))
(progn
    (command "line" p1 p4 "")
    (command "line" p2 p5 "")
      )
      )
    )
    (progn
      (setq p6 (polar p4 pi R)) ;圆弧圆心1
      (setq p7 (polar p5 0 R)) ;圆弧圆心2
      (command "arc" "c" p6 p3 p4)
      (command "arc" "c" p7 p3 p5)
      (if (< L (- (cadr p1) (cadr p2)))
(progn
    (command "line" p4 p1 "")
    (command "line" p5 p2 "")
      )
      )
    )
)
(setvar "osmode" v1)
(setvar "cmdecho" v2)
(setvar "blipmode" v3)
)

tiancao100 发表于 2025-5-22 10:01:52

yjwht 发表于 2025-5-22 06:47
浩辰没有BLEND这个命令。AutoCAD有BLEND,但不能确保弯曲半径为指定值。不过这个BLEND在不需指定弯曲半径 ...

这么命令还有个缺点,就是不能继承连接线的特性,比如图层,线宽等。

jkop 发表于 2025-5-23 18:21:26

收藏,用在50mm以上的电缆时,有机会用到!

xtjd 发表于 2025-6-4 09:17:58

yjwht 发表于 2025-5-22 09:16
再补充一个电缆垂直偏移曲线绘制程序

改成代码来判断横竖
页: [1] 2
查看完整版本: 电缆水平偏移弯曲线绘制