yyi 发表于 2004-8-31 14:11:00

一个画两管相接相贯线的程序

原来就职的公司是搞燃气设备的,经常需要把两个管子垂直相接焊起来。相接之前需要根据相贯线把所谓的雌管和雄管(PS:我们工人阶级还是很有幽默感的 ^_^)气割成一个形状,然后拼起来焊在一起。根据一定的算法把雌管和雄管的曲线画出来,1:1的用打印机打印出来,然后工人把图纸敷在钢管上,用粉笔把曲线描出来,然后就可以割了。程序分为等径管相接和异径管相接。有兴趣的朋友来看看吧!

hushiyong11 发表于 2021-10-2 07:34:37

能不能修正皮厚,年代久远的帖子不知道作者还能看到吗

Michael527 发表于 2004-9-5 21:30:00

看看,谢谢!

ZZXXQQ 发表于 2004-9-5 23:54:00

下面的程序也可以画管子的相贯线,输入的参数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 (&gt; 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= &lt;90&gt; "))<BR>(WHILE (= B 0)<BR>        (PROMPT "\nThe angle B must begger than 0")<BR>        (SETQ B (GETREAL "\nAngle of the pipe (DEG) B= &lt;90&gt; "))<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 (&gt; 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= &lt;90&gt; "))<BR>(WHILE (= B 0)<BR>        (PROMPT "\nThe angle B must begger than 0")<BR>        (SETQ B (GETREAL "\nAngle of the pipe (DEG) B= &lt;90&gt; "))<BR>)<BR>(PROMPT "\nEnter Length of small pipe L= &lt;")<BR>(PRINC (* 3 DS))<BR>(SETQ L (GETDIST "&gt; "))<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>

zgd898 发表于 2004-9-23 12:02:00

谢谢

tandy 发表于 2006-11-28 09:54:00

本帖最后由 作者 于 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>

ZZXXQQ 发表于 2006-11-28 13:58:00

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)
)


tandy 发表于 2006-11-30 08:34:00

谢谢<A name=48356><FONT color=#0000ff><B>ZZXXQQ</B></FONT></A>提供的修正版,已能正确运行,衷心感谢!

自贡黄明儒 发表于 2010-9-22 09:26:00

本帖最后由 作者 于 2010-9-27 21:05:42 编辑 <br /><br /> <p>我见同事使用钢构cad插件,是画相贯线最简单的了。</p>
<p>我在网上下载了一个,集中在我的工具中了,供你参考。只要三点就可以画相贯线了</p>

zh74 发表于 2010-9-24 10:42:00

下了试一试,希望绘图效率能提高

小神仙 发表于 2010-9-24 19:47:00

不错,好用
页: [1] 2
查看完整版本: 一个画两管相接相贯线的程序