วันจันทร์ที่ 16 กรกฎาคม พ.ศ. 2561

Piping 2D and 3D



(defun pipe3D ()
; กำหนดตัวแปรต่างๆ ในฟังชั่น input
            (setq dia (getdist "\n ขนาดเส้นผ่าศูนย์กลางท่อ  : <20> ")) ; กำหนด dia (Diameter) เป็นขนาดเส้นผ่าศูนย์กลางท่อ
            (if (not dia) (setq dia 20.0)) ; กำหนดค่าเริ่มต้นของ dia เป็น 20.0 mm. หรือ  1/2"
            (setq tk (getint "\n ความหนาท่อ  <4> : ")); กำหนด tk เป็นความหนาท่อ (getint เลขจำนวนเต็ม)
            (if (not tk) (setq tk 4)) ; กำหนดค่าเริ่มต้นของ tk  เป็น 4 mm.             
            (setq p1 (getpoint "\n จุดเริ่มต้น Pick Frist Point: ")); กำหนดจุดเริ่มต้นของท่อ
            (setq p2 (getpoint p1 "\n จุดสุดท้าย Pick Second Point: ")); กำหนดจุดสุดท้ายของท่อ
            (command "_LINE" p1 p2 "") ; ใช้คำสั่ง line วาดเส้นแนวท่อ
            (setq ssline (ssget "L")) ; กำหนดให้เส้นที่เราวาดเป็นตัวเลือก ssline ด้วย (ssget "L")
            (command "_CIRCLE" p1 (/ dia 2)) ;  วาดวงกลมขนาดเส้นผ่าศูนย์กลางท่อ dia
            (setq ssdiax (ssget "L")) ; กำหนดให้วงกลมขนาดเส้นผ่าศูนย์กลางท่อ dia เป็นตัวเลือก ssdiax ด้วย (ssget "L")
            (command "_CIRCLE"  p1 (- (/ dia 2) tk)) ; วาดวงกลมขนาดเส้นผ่าศูนย์กลางท่อ dia-tk
            (setq ssdian (ssget "L")) ; กำหนดให้วงกลมขนาดเส้นผ่าศูนย์กลางท่อ dia-tk เป็นตัวเลือก ssdian ด้วย (ssget "L")
            (command "_SWEEP" ssdiax "" ssline) ; ใช้คำสั่ง SWEEP ของ 3D ใช้ตัวเลือก ssdiax ("" = Enter) ใช้ตัวเลือก ssline แนวท่อ
            (setq ss3dx (ssget "L")) ; กำหนดให้ท่อ dia 3D เราวาดเป็นตัวเลือก ss3dx ด้วย (ssget "L")
            (command "_SWEEP" ssdian "" ssline)  ; ใช้คำสั่ง SWEEP ของ 3D ใช้ตัวเลือก ssdian ("" = Enter) ใช้ตัวเลือก ssline แนวท่อ
            (setq ss3dn (ssget "L")) ; กำหนดให้ท่อ dia-tk 3D เราวาดเป็นตัวเลือก ss3dn ด้วย (ssget "L")
            (command "_SUBTRACT" ss3dx "" ss3dn "")  ; ใช้คำสั่ง SUBTRACT ตัดออกของ 3D ใช้ตัวเลือก ss3dx ("" = Enter)
                       
(princ) ; ลบechoสิ้นสุดคำสั่ง
)           ; สิ้นสุดฟังก์ชัน
;;--------------------------------------------------------------------





(defun pipe2D (/ p1 p2)
(setq old_osnap (getvar "osmode"))

(setvar "osmode" 0)
            (defun rtd (x)                           ;radial to degee
                           (/ (* x 180) pi))
            (defun dtr (x)                           ;degee to radial
                          (* x (/ pi 180)))         
; กำหนดตัวแปรต่างๆ ในฟังชั่น input
            (setq dia (getdist "\n ขนาดเส้นผ่าศูนย์กลางท่อ  : <20> ")) ; กำหนด dia (Diameter) เป็นขนาดเส้นผ่าศูนย์กลางท่อ
            (if (not dia) (setq dia 20.0)) ; กำหนดค่าเริ่มต้นของ dia เป็น 20.0 mm. หรือ  1/2"
            (setq tk (getint "\n ความหนาท่อ  <4> : ")); กำหนด tk เป็นความหนาท่อ (getint เลขจำนวนเต็ม)
            (if (not tk) (setq tk 4)) ; กำหนดค่าเริ่มต้นของ tk  เป็น 4 mm.             
            (setq p1 (getpoint "\n จุดเริ่มต้น Pick Frist Point: ")); กำหนดจุดเริ่มต้นของท่อ
            (setq p2 (getpoint p1 "\n จุดสุดท้าย Pick Second Point: ")); กำหนดจุดสุดท้ายของท่อ
            (setq ang0 (angle p1 p2))                   ;;angle 0.0
            (setq ang1 (+ ang0 (DTR 90.0)))  ;;angle 90.0
            (setq ang2 (+ ang0 (DTR 180.0))) ;;angle 180.0
            (setq ang3 (+ ang0 (DTR 270.0)))       ;;angle 270.0  
            (setq p3 (Polar p1 ang1 (/ dia 2.0))
                          p4 (Polar p3 ang0 (distance p1 p2))
                          p5 (Polar p4 ang3 dia)
                          p6 (Polar p5 ang2 (distance p1 p2))
                          p7 (Polar p1 ang1 (-(/ dia 2.0) tk))
                          p8 (Polar p7 ang0 (distance p1 p2))
                          p9 (Polar p1 ang3 (-(/ dia 2.0) tk))
                          p10 (Polar p9 ang0 (distance p1 p2))
            )

                (command "_line" p1 p2 ""); วาดเส้นตรงที่จะทำเป็นเส้นศูนย์กลาง center line
            (setq sscen (ssget "L")) ; กำหนดให้เส้นที่เราวาดเป็นตัวเลือก sscen ด้วย (ssget "L")
            (command "_pline" p3 p4 p5 p6 "c"); วาดเส้นต่อเนื่องเป็นท่อ
            (command "_line" p7 p8 ""); วาดเส้นตรงที่จะทำเป็นเส้นประ hidden line                   
            (setq sshid1 (ssget "L")) ; กำหนดให้เส้นที่เราวาดเป็นตัวเลือก sshid1 ด้วย (ssget "L")
            (command "_line" p9 p10 ""); วาดเส้นตรงที่จะทำเป็นเส้นประ hidden line                             
            (setq sshid2 (ssget "L")) ; กำหนดให้เส้นที่เราวาดเป็นตัวเลือก sshid2 ด้วย (ssget "L")
            (if (null (tblsearch "LType" "center")); ตรวจสอบเส้นศูนย์กลาง center line ว่ามีอยู่หรือไม่
                        (command "_linetype" "load" "center" "acad.lin" "" ""); ถ้าไม่มีอยู่ให้ทำการเรียกใช้งานเส้นศูนย์กลาง center line
            );if null center line
            (if (null (tblsearch "LType" "HIDDEN")); ตรวจสอบเส้นประ hidden line ว่ามีอยู่หรือไม่
                        (command "_linetype" "load" "hidden" "acad.lin" "" ""); ถ้าไม่มีอยู่ให้ทำการเรียกใช้งานเส้นประ hidden line
            );if null hidden line
            (command "_chprop" sscen "" "_ltype" "center" ""   ; เปลี่ยนเส้นตรง Line ให้เป็นเส้นศูนยกลาง  center line
                                     "_chprop" sshid1 sshid2 "" "_ltype" "hidden" ""   ; เปลี่ยนเส้นตรง Line ให้เป็นเส้นประ  hidden line
                                     "_chprop" sscen sshid1 sshid2 "" "_ltScale" "1" "" ;แก้สเกลเส้นศูนย์กลางกับเส้นประเป็นสเกล 1
                                     "_chprop" sscen sshid1 sshid2 "" "Color" "Yellow" "";เปลี่ยนสีเส้นศูนย์กลางกับเส้นประเป็นสเกล เป็นสีเหลือง
            )                                  
 (setvar "osmode" old_osnap)
(princ) ; ลบechoสิ้นสุดคำสั่ง
)           ; สิ้นสุดฟังก์ชัน


 (defun c:p23d (); ชื่อโปรแกรมที่จะเรียกใช้งาน
            (initget "2D 3D");ข้อความตัวเลือก
                        (setq view (getkword "Select View [2D/3D] <2D>: "));Popup เมนูให้เลือก
            (if (not view)(setq view "2D")) ; กำหนกค่าเริ่มต้นให้เป็น 2D
            (cond  
                        ((= view "2D")(pipe2D)) ; ใช้ cond เป็นตัวเลือกถ้าค่า view = “2D” ให้เรียกใช้งาน pipe2D
                        ((= view "3D")(pipe3D)) ; ใช้ cond เป็นตัวเลือกถ้าค่า view = “3D” ให้เรียกใช้งาน pipe3D
            ) 
  (princ)
)
(prompt "\nEnter P23D to start.")