模拟电缆裕度弯拉伸效果动画
突发奇想,用lisp模拟电缆裕度曲拉伸效果,弯曲半径1900mm,直径86mm。一直按回车键则一直拉伸,直到完全平直。再回车则再次循环该动画。代码如下
(defun c:tt(/ R L1 Lt H a1 p1 p2 p3 p4 p6 p7 p8 p9 p10 Lx)
(setq R 1900) ;设置弯曲半径(mm)
(setq L1 1000) ;设置直线段初始长度(mm)
(setq Lt (+ (* 2 L1) (* 2 pi R)))
(setqp1 '(0 0)
p2 '(1000 0)
p3 '(1000 1900)
)
(setq H 3800)
(while (>= H 0)
(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) 1000))
(setq p10 (polar p9 0 Lx))
(command "PLINE" p1"W"86 86p2 "A" "CE"p3 p4p7 "CE"p8 p9"L"
p10 "")
(if(tt2)
(progn
(entdel (entlast))
(setq H (- H 50))
)
(exit)
)
)
(princ)
)
(defun tt2 (/ s)
(setq s (getstring t "\n按Enter键拉伸"))
(cond
((= s "") T)
(T nil)
)
)
;; 大概这个意思
代码已经完善,按主键盘1-拱高减少10;2-增加10;3减少100;4增加100,
其余按键则退出运行,并实时显示相关信息。
(defun c:tt(/ R L1Lt H a1p1 p2p3 p4p6 p7p8 p9p10Lx L0L2 key evt)
(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主键盘调整拱高 1小减,2小增 ,3大减 ,4大增:")
(setq key T)
(while key
(grtext -1 "按 1(-10) 2(+10) 3(-100) 4(+100)")
(setq evt (grread T 5 2))
(cond
((= (car evt) 2) ; 键盘输入
(cond
((= (cadr evt) 49) (progn (setq H (max 0 (- H 10)) key T)
(entdel (entlast)) (tt2))); 1
((= (cadr evt) 50) (progn (setq H (min 3800 (+ H 10)) key T)
(entdel (entlast))(tt2))); 2
((= (cadr evt) 51) (progn (setq H (max 0 (- H 100)) key T)
(entdel (entlast)) (tt2))) ; 3
((= (cadr evt) 52) (progn (setq H (min 3800 (+ H 100)) key T)
(entdel (entlast)) (tt2))); 4
(T (setq key nil))
)
)
)
)
(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的点评:中间状态应尽可能用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"))
)
本帖最后由 yjwht 于 2025-12-25 08:36 编辑
1)补充一张示意图,便于理解。另外,说一下裕度弯拉伸的实际意义。
2)一般10kV、35kV电缆均在户外设置电缆盘井,用不到这个Ω形裕度弯。
3)但110kV电缆在电缆夹层内可设置这个裕度弯,用于GIS电缆终端损坏时重做电缆头。一般考虑做两次电缆头的预留长度。
以110kV 1*500mm2电缆为例,外径约95mm(上面86mm是10kV 3*300mm2的铠装电缆,需修改),弯曲半径1900mm。
我们需要计算采用多大弯曲半径、多高的拱形才能满足这个预留长度(该型号暂按2米做一次电缆头)。
还需考虑三种情况(最大拱高,放出一次或二次电缆头的量)下电缆路径与夹层内10kV支架(顶天立地式)不冲突。
以前是采用WPS表格做简单计算,现在可以动态调整得到实际弯曲多段线,直接定点粘贴到实际位置。
4)下一步需改为左方向键小幅减少拱高,右方向小幅增加;上方向键大幅增加,下方向大幅减少。
另外将每次调整后的拱高、拉伸量、还剩余的预留量显示出来。
专业人士干专业 以前想做一个绳子的拉伸渐变效果,这个提供了一个好的思路 zgs378530220 发表于 2025-12-26 00:29
以前想做一个绳子的拉伸渐变效果,这个提供了一个好的思路
是的,我就是想做一个这样的动画效果,但一直没有好的方法。 专业人士干专业
加个90度的,模拟放电缆:lol advksf 发表于 2025-12-29 10:24
加个90度的,模拟放电缆
90度,想不出长啥样,是这样
yjwht 发表于 2025-12-29 13:35
90度,想不出长啥样,是这样
第二个哈:handshake
页:
[1]
2