柱体(管子)相贯线展开lisp程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(command )
(setq qdk pdik)
(command );少一次此命令就是单步循环,必须用鼠标在绘图区单击,单击一次走一循环步
)
)
)
;***
(defun xz ()
(command "text" "100,80" "10" "0"
"先以较大步距画一条线,查看最小曲率区,再以1/2步距画另一条,根据需要确定是取数还是用线,详细说明见 BJZKL.TXT 一文。"
(command )
(setq qd pdi)
)
(setq fhw (if (<= Rdli 0) -1 1));fhw符号位
(setq Rdzk (* (* Rd Rdji) fhw)
kkci (/ aRx0 (sin j));小管马蹄长在大管开孔的斜长
kkcfji (/ Rdcsi htan);伸进大管的交点比弯头马蹄长附加部分
(princ "小管子展开长度= " f)
(prin1 zkc f)
(princ " mm\n" f)
(close f);关闭文件,只有将文件关闭才能将加入到文件中的内容真正写入文件
(princ )
)
;***
(defun C:ztxgx ( )
(srcs)
(js)
(ht)
(xz)
)
x0k (+ x0 zkc Rdzc 130);大管开孔图与小管位于同一水平线上
y0k y0;大管开孔图与小管位于同一水平线上
qdk (list x0k y0k);画大管开孔起点
)
)
;***
(defun ht ( )
(setq xi x0
yi y0
; xik x0k
yik y0k
qd (list x0 yi)
; mtcmax (/ dx htan);对应小管最大马蹄长度
; kcmax (/ dx (sin j));大管开孔最大长
Rd (/ dm 2);大管半径
Rdzc (/ (* Rd pi) 2);大管展开长的1/4,作为开孔中心
Rx (/ dx 2);小管半径
x0 100
y0 100
qdmt (list x0 y0);画小管马蹄图起点
(setq zkc (* pi dx);管子展开长度。
bjc (/ zkc zkbs);管子展开分步的一步长度
J1 (* (/ pi zkbs) 2);每一循环步占圆周弧度数
j (* (/ pi 180) xgj) ;中心线交角换成弧度
htan (/ (sin j) (cos j));用htan =sin j/ cos j代tan (j),因AutoLISP无tan,
这是在R14那个年代写的一个程序,用以解决手工划线之苦,今天已有各种管子切割机可用,但当在简陋条件下还会用的上,故拿出供需用者一试。注解详尽,可供初学者参考。
;AutoLISP编程的柱体相贯线展开料程序,小管穿大管时的小管交线展开,用于运行在AutoCAD14环境下
;此程序有小管端的展开和大管开孔的展开。
(setq dx (getdist "\n 请输入小管外径mm:"))
(setq xgj (getdist "\n 请输入中心线交角(<=90度):"))
(setq zkbs (getdist "\n 请输入小管展开步数(4的倍数,20,24,28...):"))
)
;***
;计算
(defun js ( )
(princ "小管外径= " f);princ它输出不换行写
(prin1 dx f)
(princ " mm\n" f)
(princ "中心线交角= " f)
(prin1 xgj f)
(princ " 度\n" f)
(princ "小管展开步数= " f)
(prin1 zkbs f)
(princ " 步\n" f)
"text" "100,20" "10" "0"
"右图大柱孔展开图中心处线高度=小柱直径/sin(相贯交角)。"
"text" "100,0" "10" "0" "其它参数请用‘windows的资源管理器’,在c:\Temp中将ztxgx.txt拖入此处。"
command;调一次空命令结束写字
)
(setq f (open "c:\\Temp\\ztxgx.txt" "w");定义f为打开的文件"c:\Temp\ztxgx.txt",r读,a追加,w写操。
Rdcsi (- Rd Rdli);第i步小管在大管上插进的深度
Rdli (+ Rdli 0.00001);避开下一步的分母=0
Rdji (atan (/ aRxl Rdli));小管步长对应大管的角弧度,大管开孔展开弧长时用
mtci (/ aRx0 htan);形如弯头展开料的马蹄长
mtcfji (/ Rdcsi (sin j));与大管交点比弯头马蹄长附加部分
(write-line "本次柱体相贯线的绘制参数是:" f);写入文件内容。
(princ "大管外径= " f);princ输出字符串到文件不含引号,输出到绘图区必须用cad的text。
(prin1 dm f);将变量写在了文件 f 中,但下一行写在了此行的后面,不换行!
(princ " mm\n" f);字符串mm后的\n是换行符,princ命令识别换行符
;角度换弧度小程序
(defun jd-hd (a);defun是lisp定义函数,定义jd-hd函数,a是jd-hd函数的变元
(* pi (/ a 180.0))
)
;***
;用户输入参数
(defun srcs ( );定义srcs函数,它是空变元,请求用户输入参数
(setq dm (getdist "\n 请输入大管外径mm:"));getdist是lisp函数,是程序请求输入一个距离。
xi (+ xi bjc)
pdi (list xi (+ yi mtci mtcfji))
)
(command "line" ;调line画线命令
(setq p qd)
(setq p pdi)
(setq p (polar p (* pi 1.5) (+ mtci mtcfji)))
(setq p (polar p pi bjc))
xik (- x0k Rdzk)
pdik (list xik (+ yi kkci kkcfji))
)
(command "line" ;调line画线命令
(setq p qdk)
(setq p pdik)
(setq p (polar p (* pi 1.5) (+ kkci kkcfji)))
(setq p (polar p 0 Rdzk))
"text" "100,60" "10" "0"
"两条曲线的步距差是2的倍数。允许误差是按下料方法定,对线切割下料,取割口的1/4足亦。若是作样板或是模具,其误差由相关规范定。"
"text" "100,40" "10" "0"
"左图下部两尖点间的距离是小柱展开长=小柱直径*pi,左图小柱展开图中心处线高度=小柱直径/tan(相贯交角)。"
qd0 qd
n 0
ji 0
)
(while (< n zkbs)
(setq zd (list xi yi))
(setq n (+ n 1)
ji (+ ji j1)
aRx0 (- Rx (* Rx (cos ji)))
aRxl (* Rx (sin ji))
Rdli (sqrt (- (* Rd Rd) (* aRxl aRxl)))
(setq qdk pdik)
(command );少一次此命令就是单步循环,必须用鼠标在绘图区单击,单击一次走一循环步
)
)
)
;***
(defun xz ()
(command "text" "100,80" "10" "0"
"先以较大步距画一条线,查看最小曲率区,再以1/2步距画另一条,根据需要确定是取数还是用线,详细说明见 BJZKL.TXT 一文。"
(command )
(setq qd pdi)
)
(setq fhw (if (<= Rdli 0) -1 1));fhw符号位
(setq Rdzk (* (* Rd Rdji) fhw)
kkci (/ aRx0 (sin j));小管马蹄长在大管开孔的斜长
kkcfji (/ Rdcsi htan);伸进大管的交点比弯头马蹄长附加部分
(princ "小管子展开长度= " f)
(prin1 zkc f)
(princ " mm\n" f)
(close f);关闭文件,只有将文件关闭才能将加入到文件中的内容真正写入文件
(princ )
)
;***
(defun C:ztxgx ( )
(srcs)
(js)
(ht)
(xz)
)
x0k (+ x0 zkc Rdzc 130);大管开孔图与小管位于同一水平线上
y0k y0;大管开孔图与小管位于同一水平线上
qdk (list x0k y0k);画大管开孔起点
)
)
;***
(defun ht ( )
(setq xi x0
yi y0
; xik x0k
yik y0k
qd (list x0 yi)
; mtcmax (/ dx htan);对应小管最大马蹄长度
; kcmax (/ dx (sin j));大管开孔最大长
Rd (/ dm 2);大管半径
Rdzc (/ (* Rd pi) 2);大管展开长的1/4,作为开孔中心
Rx (/ dx 2);小管半径
x0 100
y0 100
qdmt (list x0 y0);画小管马蹄图起点
(setq zkc (* pi dx);管子展开长度。
bjc (/ zkc zkbs);管子展开分步的一步长度
J1 (* (/ pi zkbs) 2);每一循环步占圆周弧度数
j (* (/ pi 180) xgj) ;中心线交角换成弧度
htan (/ (sin j) (cos j));用htan =sin j/ cos j代tan (j),因AutoLISP无tan,
这是在R14那个年代写的一个程序,用以解决手工划线之苦,今天已有各种管子切割机可用,但当在简陋条件下还会用的上,故拿出供需用者一试。注解详尽,可供初学者参考。
;AutoLISP编程的柱体相贯线展开料程序,小管穿大管时的小管交线展开,用于运行在AutoCAD14环境下
;此程序有小管端的展开和大管开孔的展开。
(setq dx (getdist "\n 请输入小管外径mm:"))
(setq xgj (getdist "\n 请输入中心线交角(<=90度):"))
(setq zkbs (getdist "\n 请输入小管展开步数(4的倍数,20,24,28...):"))
)
;***
;计算
(defun js ( )
(princ "小管外径= " f);princ它输出不换行写
(prin1 dx f)
(princ " mm\n" f)
(princ "中心线交角= " f)
(prin1 xgj f)
(princ " 度\n" f)
(princ "小管展开步数= " f)
(prin1 zkbs f)
(princ " 步\n" f)
"text" "100,20" "10" "0"
"右图大柱孔展开图中心处线高度=小柱直径/sin(相贯交角)。"
"text" "100,0" "10" "0" "其它参数请用‘windows的资源管理器’,在c:\Temp中将ztxgx.txt拖入此处。"
command;调一次空命令结束写字
)
(setq f (open "c:\\Temp\\ztxgx.txt" "w");定义f为打开的文件"c:\Temp\ztxgx.txt",r读,a追加,w写操。
Rdcsi (- Rd Rdli);第i步小管在大管上插进的深度
Rdli (+ Rdli 0.00001);避开下一步的分母=0
Rdji (atan (/ aRxl Rdli));小管步长对应大管的角弧度,大管开孔展开弧长时用
mtci (/ aRx0 htan);形如弯头展开料的马蹄长
mtcfji (/ Rdcsi (sin j));与大管交点比弯头马蹄长附加部分
(write-line "本次柱体相贯线的绘制参数是:" f);写入文件内容。
(princ "大管外径= " f);princ输出字符串到文件不含引号,输出到绘图区必须用cad的text。
(prin1 dm f);将变量写在了文件 f 中,但下一行写在了此行的后面,不换行!
(princ " mm\n" f);字符串mm后的\n是换行符,princ命令识别换行符
;角度换弧度小程序
(defun jd-hd (a);defun是lisp定义函数,定义jd-hd函数,a是jd-hd函数的变元
(* pi (/ a 180.0))
)
;***
;用户输入参数
(defun srcs ( );定义srcs函数,它是空变元,请求用户输入参数
(setq dm (getdist "\n 请输入大管外径mm:"));getdist是lisp函数,是程序请求输入一个距离。
xi (+ xi bjc)
pdi (list xi (+ yi mtci mtcfji))
)
(command "line" ;调line画线命令
(setq p qd)
(setq p pdi)
(setq p (polar p (* pi 1.5) (+ mtci mtcfji)))
(setq p (polar p pi bjc))
xik (- x0k Rdzk)
pdik (list xik (+ yi kkci kkcfji))
)
(command "line" ;调line画线命令
(setq p qdk)
(setq p pdik)
(setq p (polar p (* pi 1.5) (+ kkci kkcfji)))
(setq p (polar p 0 Rdzk))
"text" "100,60" "10" "0"
"两条曲线的步距差是2的倍数。允许误差是按下料方法定,对线切割下料,取割口的1/4足亦。若是作样板或是模具,其误差由相关规范定。"
"text" "100,40" "10" "0"
"左图下部两尖点间的距离是小柱展开长=小柱直径*pi,左图小柱展开图中心处线高度=小柱直径/tan(相贯交角)。"
qd0 qd
n 0
ji 0
)
(while (< n zkbs)
(setq zd (list xi yi))
(setq n (+ n 1)
ji (+ ji j1)
aRx0 (- Rx (* Rx (cos ji)))
aRxl (* Rx (sin ji))
Rdli (sqrt (- (* Rd Rd) (* aRxl aRxl)))