明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1099|回复: 11

[源码] 蛇形敷设长度系数计算

  [复制链接]
发表于 2025-3-12 19:50:32 | 显示全部楼层 |阅读模式
社区内建筑、水工、机械的比较多,咱们变电这个赛道比较冷门,蛇形敷设长度系数的计算虽然简单,但肯定没人写过这个代码。
电缆路径一般比较长,这个系数虽然不大,但还是不能拍脑袋的。之前是用EXCEL表格来算的。


代码中多段线绘制的command分多次书写,至少我感觉有些稀奇。获取多段线长度的这一句刚从本社区学会。
  1. (defun c:y_sinx  (/ L1 B1 x y list1 p1 curve tlen)
  2.   ;绘制正弦函数曲线的蛇形弧
  3.   (vl-load-com)
  4.   (setq v1(getvar "osmode"))
  5.   (setq v2(getvar "cmdecho"))
  6.   (setq v3(getvar "blipmode"))
  7.   (setvar "osmode" 0)
  8.   (setvar "cmdecho" 0)
  9.   (setvar "blipmode" 0)
  10.   (setq L1 (getint "\n请输入半个蛇形长度(mm):"))
  11.   (setq B1 (getint "\n请输入蛇形弧幅宽(mm):"))
  12.   (setq x 0.0) ;设置x初始值
  13.   (setq list1 '()) ;设置空列表
  14.   (while (<= x 360) ;x坐标从0°~360°
  15.     (setq y (* (sin (* x (/ pi 180))) (* B1 0.5)))
  16.     (setq p1 (list (/ (* x L1) 180) y))                    
  17.     (setq list1 (cons p1 list1)) ;将p1点加入到列表中
  18.     (setq x (1+ x)) ;x加1
  19.   ) ;结束while
  20.   (command "pline") ;绘制多段线
  21.   (foreach point list1 ;从列表中逐个获取的点坐标赋值给point
  22.     (command point) ;延续pline命令,将point作为直线的下一个端点添加
  23.   ) ;结束foreach
  24.   (command "") ;结束当前的AutoCAD命令
  25.   (setq curve (vlax-ename->vla-object (entlast)))
  26.   (setq tlen (vlax-curve-getdistatparam
  27.      curve
  28.      (vlax-curve-getendparam curve)
  29.        )
  30.   )
  31.   (princ "\n蛇形敷设系数为:")
  32.   (princ (/ tlen L1 2))
  33.   (setvar "osmode" v1)
  34.   (setvar "cmdecho" v2)
  35.   (setvar "blipmode" v3)
  36.   (princ)
  37. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 3明经币 +3 金钱 +5 收起 理由
xyp1964 + 1 赞一个!
bssurvey + 1 赞一个!
tigcat + 1 + 5 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2025-3-14 20:00:22 | 显示全部楼层
练习二 拾取电缆回路编号 适用变电二次专业
框选拾取电缆回路编号,自动排序、自动复制到系统剪贴板,只需要粘贴到电缆清册的单元格中即可。
  1. (defun c:sqbh (/ textList textString ss n i)

  2.   (setq textList '())
  3.   (setq textString "")
  4. ;--------------框选拾取文本的方式-------------------
  5.   (setq ss (ssget '((0 . "TEXT"))))
  6.   (setq n (sslength ss))
  7.   (setq i 0)
  8.   (while (< i n)
  9.   (setq obj (ssname ss i))
  10.   (setq textVal (cdr (assoc 1 (entget obj))))
  11.   (setq textList (cons textVal textList))
  12.   (setq i (1+ i))
  13.   )
  14.   (setq textList (acad_strlsort textList))
  15.   (foreach item  textList
  16.     (if  (not (= textString ""))
  17.       (setq textString (strcat textString ";" item))
  18.       (setq textString item)
  19.     )
  20.   )
  21.   (princ textString)
  22.   (set-clip-string textString)
  23.   (princ)
  24. )
  25. ;;;=================================================================*
  26. ;;;功能:向系统剪贴板写入文字 ;下面这段代码在本社区复制而来                                     *
  27. (defun set-clip-string (str / html result)
  28.     (and (= (type str) 'str)
  29.    (setq html (vlax-create-object "htmlfile"))
  30.    (setq result (vlax-invoke
  31.         (vlax-get (vlax-get html 'parentwindow)
  32.             'clipboarddata
  33.         )
  34.         'setdata
  35.         "text"
  36.         str
  37.           )
  38.    )
  39.    (vlax-release-object html)
  40.     )
  41. )
  42. ;;;=================================================================*

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

数字排序也是对的啊,刚试了:101;102;103;105;107;133  发表于 2025-3-18 19:04
自动排序并不适合数字类文本  发表于 2025-3-18 17:03
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-3-16 20:41:13 | 显示全部楼层
练习三 接头最小接触面积计算 变电一次

  1. tou_area:dialog{
  2.   label="接头最小接触面积计算";
  3.   :column{
  4.     :edit_box{
  5.     label="工作电流(A)";
  6.     key="Ieg";
  7.   }
  8.   :row{
  9.     :text{label="无镀层接头材质";}
  10.     :popup_list{key="pop_mat";edit_width=8;
  11.       list="铜-铜\n铝-铝";}
  12.   }
  13.   :concatenation{
  14.     :text_part{label="电流密度【";}
  15.     :text{width=6;key="txt_den";}
  16.     :text_part{label="】(A/mm2)";}
  17.   }
  18.   :concatenation{
  19.     :text_part{label="最小接触面积【";}
  20.     :text{width=6;key="txt_area";}
  21.     :text_part{label="】(mm2)";}
  22.   }
  23.   spacer_1;
  24.   :text{label="注:铜-铝接头按铝-铝接头计算。";}
  25.   }
  26.   spacer_1;
  27.   :row{
  28.     alignment="centered";
  29.     :button{label="计算";key="but_cal";
  30.     width=6;fixed_width=true;
  31.   }
  32.   cancel_button;
  33.   }
  34. }

  1. (defun c:tou_area ()
  2.   (setq k1 1.0 k2 0.12)
  3.   (dcl_tou_area)
  4.   (prin1)
  5. )
  6. (defun dcl_tou_area ()
  7.   (setq dcl_id (load_dialog "我的lisp\\tou_area"))
  8.   (new_dialog "tou_area" dcl_id)
  9.   (action_tile "pop_mat" "(sub_pop $value)")
  10.   (action_tile "but_cal" "(area_cal)")
  11.   (action_tile "cancel" "(done_dialog 0)")
  12.   (setq dd (start_dialog))
  13. )
  14. (defun area_cal  ()
  15.   (ini_1)
  16.   (setq i1 (atof (get_tile "Ieg")))
  17.   (cond ((< i1 200) (setq k2 0.31))
  18.     ((<= i1 2000)
  19.       (setq k2 (- 0.31 (* (- i1 200) 1.05 0.0001))))
  20.     ((> i1 2000) (setq k2 0.12))
  21.   )
  22.   (setq k (* k1 k2))
  23.   (setq area1 (/ i1 k))
  24.   (setq str1 (rtos area1 2 0))
  25.   (set_tile "txt_den" (rtos k 2 2))
  26.   (set_tile "txt_area" str1)
  27.   (princ)
  28. )
  29. (defun sub_pop (vvs)
  30.   (ini_1)
  31.   (cond ((= vvs "0") (setq k1 1.0))
  32.       ((= vvs "1") (setq k1 0.78))
  33.   )
  34. )
  35. (defun ini_1()
  36.   (set_tile "txt_den" "")
  37.   (set_tile "txt_area" "")
  38. )
  39.   (princ)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 5 天前 | 显示全部楼层
练习4 绘制灯具的配光曲线图

  1. ;绘制配光曲线
  2. (defun c:tt()
  3.   (setq v1(getvar "osmode"))
  4.   (setq v2(getvar "cmdecho"))
  5.   (setq v3(getvar "blipmode"))
  6.   (setvar "osmode" 0)
  7.   (setvar "cmdecho" 0)
  8.   (setvar "blipmode" 0)
  9.   (setq d1 (/ pi 36))
  10.   (setq list1 '(278 280 290 306 323 339 344 328 288 214
  11.     131 57 23 10 5 2 1 0 0))
  12.   (setq list2 '(278 277 269 259 248 234 218 200 181 160
  13.     138 114 90 66 44 28 16 7 1))
  14.   (setq p1 '(0 0))
  15.   (setq i 0)
  16.   (command "pline")
  17.   (while (< i (length list2))
  18.     (if (= (nth i list2) 0)
  19.       (setq p2 '(0 0))
  20.       (setq p2 (polar p1 (+ (* pi -0.5) (* d1 i)) (nth i list2)))
  21.     )
  22.     (command p2)
  23.     (setq i (1+ i))
  24.   )
  25.   (command "")
  26.   (command "mirror" (entlast) "" '(0 0) '(0 100) "N")
  27.   (setvar "osmode" v1)
  28.   (setvar "cmdecho" v2)
  29.   (setvar "blipmode" v3)
  30.   (princ)
  31. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
我现在也在做变电一次设计,之前做配电、输电线路
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
楼主 同电力设计行业,能群探讨下,变配电这块如何二次开发吗
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
这是按一次手册做的等高避雷,按50064不知道怎么通过查表来,我看天正是按50064来的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 4 天前 | 显示全部楼层
lea丶丶 发表于 2025-4-16 17:21
我现在也在做变电一次设计,之前做配电、输电线路

我之前做变电二次,现在做变电一次,另外电缆设计也做。幸会
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 09:20 | 显示全部楼层
双针等高,绘制防雷保护范围
  1. ;根据双针距离D、实际计算出的bx、rx,绘制等高避雷针保护范围
  2. (defun c:EE17()  ;szdg即双针等高
  3.   (setq p1 (getpoint "\n指定1#避雷针的位置:"))
  4.   (setq p2 (getpoint "\n指定2#避雷针的位置:"))
  5.   (setq D1 (distance p1 p2))
  6.   (setq p3 (polar p1 (angle p1 p2) (/ D1 2)))
  7.   (setq bx (getdist p3 "\n输入双针保护最小宽度bx:"))
  8.   (setq rx (getdist p1 "\n输入单针保护半径rx:"))
  9.   (setq p4 (polar p3 (+ (angle p3 p1) (/ pi 2)) bx))
  10.   (setq p5 (polar p3 (+ (angle p3 p2) (/ pi 2)) bx))
  11.   (if (< rx (distance p1 p4))
  12.   (progn
  13.     (setq p6 (polar p1 (- (angle p1 p4) (acos (/ rx (distance p1 p4)))) rx))
  14.     (setq p7 (polar p1 (+ (angle p1 p5) (acos (/ rx (distance p1 p5)))) rx))
  15.     (command "pline" p5 p7 "a" p6 "l" p4 "")
  16.     (command "mirror" (ssget "L") "" p5 p4 "n")
  17.   )
  18.   (princ "\n双针不能联合,请检查输入数据是否有误!")
  19.   )
  20.   (princ)
  21. )
  22. ;定义反余弦函数,返回角度的弧度值
  23. ;反余弦函数的定义域为[-1, 1],值域为[0, π]
  24. (defun acos(x)
  25.   (cond
  26.   ((= x 0.0) (* pi 0.5))
  27.   ((and (> x 0.0) (<= x 1.0))
  28.     (atan (/ (sqrt (- 1 (* x x))) x)))
  29.   ((and (>= x -1.0) (< x 0.0))
  30.     (+ (atan (/ (sqrt (- 1 (* x x))) x)) pi)
  31.     )
  32.   (T (progn
  33.      (princ "输入值超出反余弦函数的定义域。")
  34.      nil))
  35.   )
  36. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 09:22 | 显示全部楼层
只会艾迪西 发表于 2025-4-17 09:18
楼主 同电力设计行业,能群探讨下,变配电这块如何二次开发吗

我也只是业余爱好lsp,做设计的都很忙,按需学习才是现实的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-4-21 17:53 , Processed in 0.198558 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表