蛇形敷设长度系数计算
社区内建筑、水工、机械的比较多,咱们变电这个赛道比较冷门,蛇形敷设长度系数的计算虽然简单,但肯定没人写过这个代码。电缆路径一般比较长,这个系数虽然不大,但还是不能拍脑袋的。之前是用EXCEL表格来算的。
代码中多段线绘制的command分多次书写,至少我感觉有些稀奇。获取多段线长度的这一句刚从本社区学会。(defun c:y_sinx(/ L1 B1 x y list1 p1 curve tlen)
;绘制正弦函数曲线的蛇形弧
(vl-load-com)
(setq v1(getvar "osmode"))
(setq v2(getvar "cmdecho"))
(setq v3(getvar "blipmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq L1 (getint "\n请输入半个蛇形长度(mm):"))
(setq B1 (getint "\n请输入蛇形弧幅宽(mm):"))
(setq x 0.0) ;设置x初始值
(setq list1 '()) ;设置空列表
(while (<= x 360) ;x坐标从0°~360°
(setq y (* (sin (* x (/ pi 180))) (* B1 0.5)))
(setq p1 (list (/ (* x L1) 180) y))
(setq list1 (cons p1 list1)) ;将p1点加入到列表中
(setq x (1+ x)) ;x加1
) ;结束while
(command "pline") ;绘制多段线
(foreach point list1 ;从列表中逐个获取的点坐标赋值给point
(command point) ;延续pline命令,将point作为直线的下一个端点添加
) ;结束foreach
(command "") ;结束当前的AutoCAD命令
(setq curve (vlax-ename->vla-object (entlast)))
(setq tlen (vlax-curve-getdistatparam
curve
(vlax-curve-getendparam curve)
)
)
(princ "\n蛇形敷设系数为:")
(princ (/ tlen L1 2))
(setvar "osmode" v1)
(setvar "cmdecho" v2)
(setvar "blipmode" v3)
(princ)
)
练习二 拾取电缆回路编号 适用变电二次专业
框选拾取电缆回路编号,自动排序、自动复制到系统剪贴板,只需要粘贴到电缆清册的单元格中即可。(defun c:sqbh (/ textList textString ss n i)
(setq textList '())
(setq textString "")
;--------------框选拾取文本的方式-------------------
(setq ss (ssget '((0 . "TEXT"))))
(setq n (sslength ss))
(setq i 0)
(while (< i n)
(setq obj (ssname ss i))
(setq textVal (cdr (assoc 1 (entget obj))))
(setq textList (cons textVal textList))
(setq i (1+ i))
)
(setq textList (acad_strlsort textList))
(foreach itemtextList
(if(not (= textString ""))
(setq textString (strcat textString ";" item))
(setq textString item)
)
)
(princ textString)
(set-clip-string textString)
(princ)
)
;;;=================================================================*
;;;功能:向系统剪贴板写入文字 ;下面这段代码在本社区复制而来 *
(defun set-clip-string (str / html result)
(and (= (type str) 'str)
(setq html (vlax-create-object "htmlfile"))
(setq result (vlax-invoke
(vlax-get (vlax-get html 'parentwindow)
'clipboarddata
)
'setdata
"text"
str
)
)
(vlax-release-object html)
)
)
;;;=================================================================*
练习三 接头最小接触面积计算 变电一次
tou_area:dialog{
label="接头最小接触面积计算";
:column{
:edit_box{
label="工作电流(A)";
key="Ieg";
}
:row{
:text{label="无镀层接头材质";}
:popup_list{key="pop_mat";edit_width=8;
list="铜-铜\n铝-铝";}
}
:concatenation{
:text_part{label="电流密度【";}
:text{width=6;key="txt_den";}
:text_part{label="】(A/mm2)";}
}
:concatenation{
:text_part{label="最小接触面积【";}
:text{width=6;key="txt_area";}
:text_part{label="】(mm2)";}
}
spacer_1;
:text{label="注:铜-铝接头按铝-铝接头计算。";}
}
spacer_1;
:row{
alignment="centered";
:button{label="计算";key="but_cal";
width=6;fixed_width=true;
}
cancel_button;
}
}
(defun c:tou_area ()
(setq k1 1.0 k2 0.12)
(dcl_tou_area)
(prin1)
)
(defun dcl_tou_area ()
(setq dcl_id (load_dialog "我的lisp\\tou_area"))
(new_dialog "tou_area" dcl_id)
(action_tile "pop_mat" "(sub_pop $value)")
(action_tile "but_cal" "(area_cal)")
(action_tile "cancel" "(done_dialog 0)")
(setq dd (start_dialog))
)
(defun area_cal()
(ini_1)
(setq i1 (atof (get_tile "Ieg")))
(cond ((< i1 200) (setq k2 0.31))
((<= i1 2000)
(setq k2 (- 0.31 (* (- i1 200) 1.05 0.0001))))
((> i1 2000) (setq k2 0.12))
)
(setq k (* k1 k2))
(setq area1 (/ i1 k))
(setq str1 (rtos area1 2 0))
(set_tile "txt_den" (rtos k 2 2))
(set_tile "txt_area" str1)
(princ)
)
(defun sub_pop (vvs)
(ini_1)
(cond ((= vvs "0") (setq k1 1.0))
((= vvs "1") (setq k1 0.78))
)
)
(defun ini_1()
(set_tile "txt_den" "")
(set_tile "txt_area" "")
)
(princ)
练习4 绘制灯具的配光曲线图
;绘制配光曲线
(defun c:tt()
(setq v1(getvar "osmode"))
(setq v2(getvar "cmdecho"))
(setq v3(getvar "blipmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq d1 (/ pi 36))
(setq list1 '(278 280 290 306 323 339 344 328 288 214
131 57 23 10 5 2 1 0 0))
(setq list2 '(278 277 269 259 248 234 218 200 181 160
138 114 90 66 44 28 16 7 1))
(setq p1 '(0 0))
(setq i 0)
(command "pline")
(while (< i (length list2))
(if (= (nth i list2) 0)
(setq p2 '(0 0))
(setq p2 (polar p1 (+ (* pi -0.5) (* d1 i)) (nth i list2)))
)
(command p2)
(setq i (1+ i))
)
(command "")
(command "mirror" (entlast) "" '(0 0) '(0 100) "N")
(setvar "osmode" v1)
(setvar "cmdecho" v2)
(setvar "blipmode" v3)
(princ)
)
我现在也在做变电一次设计,之前做配电、输电线路 楼主 同电力设计行业,能群探讨下,变配电这块如何二次开发吗 这是按一次手册做的等高避雷,按50064不知道怎么通过查表来,我看天正是按50064来的。 lea丶丶 发表于 2025-4-16 17:21
我现在也在做变电一次设计,之前做配电、输电线路
我之前做变电二次,现在做变电一次,另外电缆设计也做。幸会 双针等高,绘制防雷保护范围;根据双针距离D、实际计算出的bx、rx,绘制等高避雷针保护范围
(defun c:EE17();szdg即双针等高
(setq p1 (getpoint "\n指定1#避雷针的位置:"))
(setq p2 (getpoint "\n指定2#避雷针的位置:"))
(setq D1 (distance p1 p2))
(setq p3 (polar p1 (angle p1 p2) (/ D1 2)))
(setq bx (getdist p3 "\n输入双针保护最小宽度bx:"))
(setq rx (getdist p1 "\n输入单针保护半径rx:"))
(setq p4 (polar p3 (+ (angle p3 p1) (/ pi 2)) bx))
(setq p5 (polar p3 (+ (angle p3 p2) (/ pi 2)) bx))
(if (< rx (distance p1 p4))
(progn
(setq p6 (polar p1 (- (angle p1 p4) (acos (/ rx (distance p1 p4)))) rx))
(setq p7 (polar p1 (+ (angle p1 p5) (acos (/ rx (distance p1 p5)))) rx))
(command "pline" p5 p7 "a" p6 "l" p4 "")
(command "mirror" (ssget "L") "" p5 p4 "n")
)
(princ "\n双针不能联合,请检查输入数据是否有误!")
)
(princ)
)
;定义反余弦函数,返回角度的弧度值
;反余弦函数的定义域为[-1, 1],值域为
(defun acos(x)
(cond
((= x 0.0) (* pi 0.5))
((and (> x 0.0) (<= x 1.0))
(atan (/ (sqrt (- 1 (* x x))) x)))
((and (>= x -1.0) (< x 0.0))
(+ (atan (/ (sqrt (- 1 (* x x))) x)) pi)
)
(T (progn
(princ "输入值超出反余弦函数的定义域。")
nil))
)
)
只会艾迪西 发表于 2025-4-17 09:18
楼主 同电力设计行业,能群探讨下,变配电这块如何二次开发吗
我也只是业余爱好lsp,做设计的都很忙,按需学习才是现实的
页:
[1]