一个画两管相接相贯线的程序
原来就职的公司是搞燃气设备的,经常需要把两个管子垂直相接焊起来。相接之前需要根据相贯线把所谓的雌管和雄管(PS:我们工人阶级还是很有幽默感的 ^_^)气割成一个形状,然后拼起来焊在一起。根据一定的算法把雌管和雄管的曲线画出来,1:1的用打印机打印出来,然后工人把图纸敷在钢管上,用粉笔把曲线描出来,然后就可以割了。程序分为等径管相接和异径管相接。有兴趣的朋友来看看吧! 能不能修正皮厚,年代久远的帖子不知道作者还能看到吗 看看,谢谢! 下面的程序也可以画管子的相贯线,输入的参数D为大管直径,d为小管直径(可以等于D),B为两管的夹角,插入点为小管中心线与大管外壁的交点。该程序在R14上调试通过。(DEFUN C:XGX ()<BR>(SETQ OLDOS (GETVAR "OSMODE"))<BR>(SETVAR "OSMODE" 0)<BR>(SETVAR "CMDECHO" 0)<BR>(SETQ D (GETDIST "\nDiamter of D= ")<BR> DS (GETDIST "\nDiamter of d= "))<BR>(WHILE (> DS D)<BR>(PROMPT "\nThe d must less than D! ")<BR>(SETQ DS (GETDIST "\nReinter Diamter of d= "))<BR>)<BR>(SETQ B (GETREAL "\nAngle of the pipe (DEG) B= <90> "))<BR>(WHILE (= B 0)<BR> (PROMPT "\nThe angle B must begger than 0")<BR> (SETQ B (GETREAL "\nAngle of the pipe (DEG) B= <90> "))<BR>)<BR>(SETQ B (/ (* (IF (= B nil) 90 0) PI) 180)<BR> ANG (- B PI)<BR> A 0 TA (/ (* 5 PI) 180)<BR> RS (* DS 0.5) R (* D 0.5)<BR> PT (GETPOINT "\nPipe Conect Point : ")<BR> PT1 (POLAR PT 0 (/ RS (SIN B))))<BR>(IF (EQUAL D DS 1E-5) (PROGN<BR> (SETQ PT2 (POLAR PT ANG (/ RS (SIN B))) PT3 (POLAR PT PI (/ RS (SIN B))))<BR> (COMMAND "PLINE" PT1 PT2 PT3 "")<BR>) (PROGN<BR> (SETQ A (+ A TA) RA (* (SIN A) RS) RB (* (COS A) RS))<BR> (COMMAND "PLINE" PT1 "A")<BR> (SETQ PT2 (POLAR (POLAR PT 0 (/ RB (SIN B))) ANG (/ (- R (SQRT (- (* R R) (* RA RA)))) (SIN B))))<BR> (COMMAND "S" PT2)<BR> (REPEAT 35<BR> (SETQ A (+ A TA) RA (* (SIN A) RS) RB (/ (* (COS A) RS) (SIN B))<BR> PT2 (POLAR (POLAR PT 0 RB) ANG (/ (- R (SQRT (- (* R R) (* RA RA)))) (SIN B))))<BR> (COMMAND PT2)<BR> )<BR> (COMMAND "")<BR>))<BR>(SETVAR "OSMODE" OLDOS)<BR>(SETVAR "CMDECHO" 1)<BR>(PRINC)<BR>)
(DEFUN C:XGX2 ()<BR>(SETQ OLDOS (GETVAR "OSMODE"))<BR>(SETVAR "OSMODE" 0)<BR>(SETVAR "CMDECHO" 0)<BR>(SETQ D (GETDIST "\nDiamter of D= ")<BR> DS (GETDIST "\nDiamter of d= "))<BR>(WHILE (> DS D)<BR>(PROMPT "\nThe d must less than D! ")<BR>(SETQ DS (GETDIST "\nReinter Diamter of d= "))<BR>)<BR>(SETQ B (GETREAL "\nAngle of the pipe (DEG) B= <90> "))<BR>(WHILE (= B 0)<BR> (PROMPT "\nThe angle B must begger than 0")<BR> (SETQ B (GETREAL "\nAngle of the pipe (DEG) B= <90> "))<BR>)<BR>(PROMPT "\nEnter Length of small pipe L= <")<BR>(PRINC (* 3 DS))<BR>(SETQ L (GETDIST "> "))<BR>(SETQ L (IF (= L nil) (* 3 DS) L))<BR>(SETQ B (/ (* (IF (= B nil) 90 B) PI) 180)<BR> ANG (- B PI) AL1 (/ PI 2) AL2 (- AL1)<BR> A 0 TA (/ (* 5 PI) 180)<BR> RS (* DS 0.5) R (* D 0.5)<BR> LSTEP (* TA RS)<BR> PT (GETPOINT "\nInsert Point : ")<BR> PT1 (POLAR PT PI (* RS PI))<BR> PT2 (POLAR PT1 AL1 L))<BR>(SETQ A (+ A TA) RA (* (SIN A) RS))<BR>(COMMAND "PLINE" PT2 "A")<BR> (SETQ PT3 (POLAR PT2 0 LSTEP)<BR> PT2 (POLAR PT3 AL1 (/ (- R (SQRT (- (* R R) (* RA RA)))) (SIN B))))<BR> (COMMAND "S" PT2)<BR> (REPEAT 71<BR> (SETQ A (+ A TA) RA (* (SIN A) RS))<BR> PT3 (POLAR PT3 0 LSTEP)<BR> PT2 (POLAR PT3 AL1 (/ (- R (SQRT (- (* R R) (* RA RA)))) (SIN B))))<BR> (COMMAND PT2)<BR> )<BR> (SETQ PT3 (POLAR PT3 AL2 L))<BR> (COMMAND "L" PT3 PT1 "C")<BR>(SETVAR "OSMODE" OLDOS)<BR>(SETVAR "CMDECHO" 1)<BR>(PRINC)<BR>)<BR> 谢谢 本帖最后由 作者 于 2006-11-28 10:30:58 编辑 <br /><br /> <P>太好了终于找到了,两个程序都好用,谢谢各位大侠!!</P>
<P><A name=48356><FONT color=#0000ff><B>ZZXXQQ</B></FONT></A>的程序当输入夹角时提示:<FONT color=#000000>Pipe Conect Point : ; 错误: 除数为零,</FONT></P>
<P>在90度时好用!!</P> tandy发表于2006-11-28 9:54:00static/image/common/back.gif太好了终于找到了,两个程序都好用,谢谢各位大侠!!ZZXXQQ的程序当输入夹角时提示...两程序都有错误,下面是改过的。
(DEFUN C:XGX ()
(SETQ OLDOS (GETVAR "OSMODE"))
(SETVAR "OSMODE" 0)
(SETVAR "CMDECHO" 0)
(SETQ D (GETDIST "\nDiamter of D = ")
DS (GETDIST "\nDiamter of d = "))
(WHILE (> DS D)
(PROMPT "\nThe d must less than D! ")
(SETQ DS (GETDIST "\nDiamter of d= "))
)
(SETQ B (GETREAL "\nAngle of the pipe (DEG) B= <90> "))
(WHILE (= B 0)
(PROMPT "\nThe angle B must begger than 0")
(SETQ B (GETREAL "\nAngle of the pipe (DEG) B= <90> "))
)
(SETQ B (/ (* (IF (= B nil) 90 B) PI) 180)
ANG (- B PI)
A 0 TA (/ (* 5 PI) 180)
RS (* DS 0.5) R (* D 0.5)
PT (GETPOINT "\nPipe Conect Point : ")
PT1 (POLAR PT 0 (/ RS (SIN B))))
(IF (EQUAL D DS 1E-5) (PROGN
(SETQ PT2 (POLAR PT ANG (/ RS (SIN B))) PT3 (POLAR PT PI (/ RS (SIN B))))
(COMMAND "PLINE" PT1 PT2 PT3 "")
) (PROGN
(SETQ A (+ A TA) RA (* (SIN A) RS) RB (* (COS A) RS))
(COMMAND "PLINE" PT1 "A")
(SETQ PT2 (POLAR (POLAR PT 0 (/ RB (SIN B))) ANG (/ (- R (SQRT (- (* R R) (* RA RA)))) (SIN B))))
(COMMAND "S" PT2)
(REPEAT 35
(SETQ A (+ A TA) RA (* (SIN A) RS) RB (/ (* (COS A) RS) (SIN B))
PT2 (POLAR (POLAR PT 0 RB) ANG (/ (- R (SQRT (- (* R R) (* RA RA)))) (SIN B))))
(COMMAND PT2)
)
(COMMAND "")
))
(SETVAR "OSMODE" OLDOS)
(SETVAR "CMDECHO" 1)
(PRINC)
)
(DEFUN C:XGX2 ()
(SETQ OLDOS (GETVAR "OSMODE"))
(SETVAR "OSMODE" 0)
(SETVAR "CMDECHO" 0)
(SETQ D (GETDIST "\nDiamter of D= ")
DS (GETDIST "\nDiamter of d= "))
(WHILE (> DS D)
(PROMPT "\nThe d must less than D! ")
(SETQ DS (GETDIST "\nReinter Diamter of d= "))
)
(SETQ B (GETREAL "\nAngle of the pipe (DEG) B= <90> "))
(WHILE (= B 0)
(PROMPT "\nThe angle B must begger than 0")
(SETQ B (GETREAL "\nAngle of the pipe (DEG) B= <90> "))
)
(PROMPT "\nEnter Length of small pipe L= <")
(PRINC (* 3 DS))
(SETQ L (GETDIST "> "))
(SETQ L (IF (= L nil) (* 3 DS) L))
(SETQ B (/ (* (IF (= B nil) 90 B) PI) 180)
ANG (- B PI) AL1 (/ PI 2) AL2 (- AL1)
A 0 TA (/ (* 5 PI) 180)
RS (* DS 0.5) R (* D 0.5)
LSTEP (* TA RS)
TB (/ (SIN (- AL1 B)) (COS (- AL1 B)))
R2 (* R R)
PT (GETPOINT "\nInsert Point : ")
PT1 (POLAR PT PI (* RS PI))
PT2 (POLAR PT1 AL1 L))
(SETQ A (+ A TA) RA (* (SIN A) RS) RB (* (- 1 (COS A)) RS))
(COMMAND "PLINE" PT2 "A")
(SETQ PT3 (POLAR PT2 0 LSTEP)
PT2 (POLAR PT3 AL1 (+ (/ (- R (SQRT (- R2 (* RA RA)))) (SIN B)) (* TB RB))))
(COMMAND "S" PT2)
(REPEAT 71
(SETQ A (+ A TA) RA (* (SIN A) RS) RB (* (- 1 (COS A)) RS)
PT3 (POLAR PT3 0 LSTEP)
PT2 (POLAR PT3 AL1(+ (/ (- R (SQRT (- R2 (* RA RA)))) (SIN B)) (* TB RB))))
(COMMAND PT2)
)
(SETQ PT3 (POLAR PT3 AL2 L))
(COMMAND "L" PT3 PT1 "C")
(SETVAR "OSMODE" OLDOS)
(SETVAR "CMDECHO" 1)
(PRINC)
)
谢谢<A name=48356><FONT color=#0000ff><B>ZZXXQQ</B></FONT></A>提供的修正版,已能正确运行,衷心感谢! 本帖最后由 作者 于 2010-9-27 21:05:42 编辑 <br /><br /> <p>我见同事使用钢构cad插件,是画相贯线最简单的了。</p>
<p>我在网上下载了一个,集中在我的工具中了,供你参考。只要三点就可以画相贯线了</p> 下了试一试,希望绘图效率能提高 不错,好用
页:
[1]
2