电缆水平偏移弯曲线绘制
按规范,电缆有最大允许弯曲半径要求,电缆水平偏移时弯曲段投影长度公式为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)
)
CAD 命令:BLEND 一样的效果 昨天遇到电缆夹层内设裕度曲,需要按给定预留量来绘制比较困难,因此用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)
) 感谢分享
tiancao100 发表于 2025-5-21 22:48
CAD 命令:BLEND 一样的效果
浩辰没有BLEND这个命令。AutoCAD有BLEND,但不能确保弯曲半径为指定值。不过这个BLEND在不需指定弯曲半径时很有用{:1_1:} 赞,感谢分享 再补充一个电缆垂直偏移曲线绘制程序;指定电缆允许弯曲半径及垂直偏移起止点,自动绘制电缆弯曲线
(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)
)
yjwht 发表于 2025-5-22 06:47
浩辰没有BLEND这个命令。AutoCAD有BLEND,但不能确保弯曲半径为指定值。不过这个BLEND在不需指定弯曲半径 ...
这么命令还有个缺点,就是不能继承连接线的特性,比如图层,线宽等。 收藏,用在50mm以上的电缆时,有机会用到! yjwht 发表于 2025-5-22 09:16
再补充一个电缆垂直偏移曲线绘制程序
改成代码来判断横竖
页:
[1]
2