วันพุธที่ 29 มกราคม พ.ศ. 2563

AUTOCAD Make SLIDE LIBRARY


AUTOCAD Make SLIDE LIBRARY By AutoLispTH
ขั้นตอนในการทา SLIDE LIBRARY เราต้องมี BLOCKS ที่เราต้องการรวบไว้ใน FLODER ที่เราสร้างไว้อย่างเช่น BOLT แล้วก็แยกออกเป็น HEXAGON กับ SOCKET



ใน FOLDER ย่อยเช่น HEXAGON ก็มี BLOCKS FILES (.DWG) กับ SLIDE FILES (.SLD) แล้ว TEXT FILE (.TXT) แล้วก็ตัวโปรแกรม สร้าง SLIDE FILE ชื่อ SLIDELIB.EXE ตามรูป

สำหรับ TEXT FILE (.TXT) เราก็สร้างด้วย NOTEPAD ใส่ชื่อ SLIDE ลงไปให้ครบเท่าที่มี



ต่อไปเราก็มาสร้างตัว SLIDE LIBRARY กัน โดยเข้าไปที่ DOS MODE พอดีผมใช้ WIN10 ก็กดปุ่ม เครื่องหมาย ค้นหา (แว่นขยาย) พิมพ์ cmd แล้วก็เลือกCOMMAND PROMPT เข้าไปใน DOS MODE


หน้าตาของเจ้า DOS MODE ให้เรากด CD\ เพื่อออกจาก SUB FOLDER ของวินโดร์มาอยู่ที่ C:\> แล้วก็เข้าไปที่ FOLDER BOLT ของเราด้วย CD BOLT แล้วก็เข้าไปที่ HEXAGON ด้วย CD HEXAGON จากนั้นก็สร้างเจ้า SLIDE LIBRARY ด้วยคำสั่งนี้



SLIDELIB HEXAGON < HEXAGON.TXT

(ชื่อคาสั่ง) (ชื่อสไลด์ไฟล์) (TEXT FILE ที่เราใส่ชื่อสไลด์ลงไป)



เมื่อเราสร้างเสร็จแล้วก็จะได้ไฟล์ HEXAGON.SLB เป็นตัว SLIDES FILE ถ้าเป็น เวอร์ชั่น เก่าเมื่อก่อนต้องเข้าไปเขียนเมนูเพิ่มเอาในไฟล์ ACAD.MNU แต่ว่าตัวใหม่นี้เราใช้ MENULOAD แทน ดังนั้นเราต้องสร้าง MENU FILE ขึ้นมาใหม่เลย ตัวออย่างที่ผมทำ เช่น MYMENU.MNU
โดยใช้ NOTEPAD เขียนตามรูปตัวอย่างแล้วเซฟเป็น ไฟล์ MyMenu.MNU บันทึกไว้ใน BOLT FOLDER เลยนะครับ ต่อไปเราก็ไป LOADMENU กัน การสร้างเมนู Creating Menu


เข้า CAD เลย พิมพ์ MENULOAD แล้ว ENTER
1.    Browse เข้าไปใน BOLT FOLDER เลือกไฟล์เมนูที่เราสร้างไว้ MyMenu.mnu
2.    กด Load เมนูของเราจะปรากฏขึ้นมาต่อท้ายเมนูบาร์ด้านบน My Menu
3.    กด Close ปิดหน้าต่าง
4.    สำหรับเมื่อเราต้องการยกเลิกการใช้งานก็เลือก MyMenu แล้วกด Unload เมนูบาร์ก็จะหายไป

จากนั้นตัว CAD เพิ่มเมนูใหม่ของเราเข้าไปท้ายสุดของเมนูบาร์


ถ้ารูป SLIDE ไม่โชว์แสดงว่าเรายังไม่ได้เซ็ท SUPPORT FILE SEARCH PAHT เข้าไปเซ็ทด้วยนะครับ



TRICK การสร้างรูปสไลด์ให้พอดีกับช่อง



-THE END-


วันอาทิตย์ที่ 26 มกราคม พ.ศ. 2563

Walls


Walls
Wall ผนัง หลังจากได้ แบบแปลน ประตู หน้าต่าง แล้วเรามาออกแบบผนังกันต่อเลยเลยดีกว่า โดยเราจะเลือกจุดอ้างอิงของผนังเป็นสามจุดเป็นผนังด้านซ้าย ผนังกลาง และผนังด้านขวา เพื่อความสะดวกเวลาวางผนังลงในแบบแปลน โดยจะใช้ Osnap เป็นตัวช่วยในการวางต่อจากมุมเสาในแบบแปลน โดยผนังด้านซ้ายและขวาให้ Osnap เป็น End point ส่วนผนังกลางเป็น Middle point โดยที่เราต้องใส่ความหนาของผนัง tw (thickness wall) และตั้งค่าความหนาผนังฉาบไว้ที่ 0.015 ส่วนผนังจริงก็แสดงลายตัดเป็นลาย "ANSI31" ตามรูปด้านล่างเลย
ตัวอย่างที่ 30 แบบร่างตำแหน่งผนัง
(defun c:wall () ; ตั้งชื่อ wall
(defun rtod (x) (/ (* x 180) pi) ) ; แปลงเรเดียนเป็นองศา
(defun dtor (x) (* x (/ pi 180))) ; แปลงองศาเป็นเรเดียน
; หัวโปรแกรมกำหนดค่าตัวแปรต่างๆ ของสภาพแวดล้อม System Variables
(setq old_cmdecho (getvar "cmdecho")) ; เซทค่า cmdecho (คอมมานเอคโค่)
(setq old_osnap (getvar "osmode")) ; เซทค่า osnap (ออบเจ็คสแนพ)
(setq old_snap (getvar "snapmode")) ; เซทค่า snap
(setq old_ortho (getvar "orthomode")) ; เซทค่า ortho
(setq old_layer (getvar "clayer")) ; เซทค่า layer
; หัวโปรแกรมทำการกำหนดค่าสภาพแวดล้อม System Variables ที่ต้องการ
(setvar "cmdecho" 0) ; ปิด (off) cmdecho (คอมมานเอคโค่)
(setvar "osmode" 0) ; ปิด (off) osnap (ออบเจ็คสแนพ)
(setvar "snapmode" 0) ; ปิด (off) snap
(setvar "orthomode" 0) ; ปิด (off) ortho
; ส่วนรับค่า input ต่างๆ
(setq tw (getdist "\n ความหนาของผนัง <0.1>: ")) ; ตั้งค่า tw ความหนาของผนัง
(if (not tw) (setq tw 0.1)) ; ตั้งค่าเริ่มต้น tw ความหนาของผนังเท่ากับ 0.1
(setq tc (getdist "\n ความหนาของปูนฉาบ <0.015>: ")) ; ตั้งค่า tc ความหนาของปูนฉาบ
(if (not tc) (setq tc 0.015)) ; ตั้งค่าเริ่มต้น tc ความหนาของผนังเท่ากับ 0.015
(initget "Left Middle Right") ; ตั้งค่า keyword จุดของผนัง
(setq Pp (getkword "\n เลือกจุดของผนัง : [Left/Middle/Right] <Left>: ")) ; เลือกจุดของผนังตามค่า keyword
(if (= pp "")(setq pp "Left")) ; ตั้งค่าจุดเริ่มต้นของผนังเป็น left
; control Osmode for Pick point p1 p2 ตั้งค่าตัวช่วยในการเลือกจุด
(if (= Pp "Left")(setvar "Osmode" 1)); Osnap Endpoint
(if (= Pp "Middle")(setvar "Osmode" 2)) ; Osnap Middlepoint
(if (= Pp "Right")(setvar "Osmode" 1)) ; Osnap Endpoint
(initget 1) ; กำหนดให้ทำการเลือกจุดหรือตำแหน่ง
(setq p1 (getpoint "\n ตำแหน่งเริ่มต้นผนัง :")) ; กำหนดให้ p1 เป็นจุดหรือตำแหน่งเริ่มต้นผนัง
(initget 1) ; กำหนดให้ทำการเลือกจุดหรือตำแหน่ง
(setq p1 (getpoint P1 "\n ตำแหน่งสุดท้ายของผนัง :")) ; กำหนดให้ p2 เป็นจุดหรือตำแหน่งสุดท้ายของผนัง
(setvar "Osmode" 0) ; Osnap off ปิดตัวช่วยเลือกจุดหรือตำแหน่ง
(setq Ang (angle p1 p2)) ; หาค่ามุมจากจุด p1 ไป p2
(setq ang1 (+ ang (dtor 90.0))) ; ตั้งค่ามุมที่ 1 มีค่า 90 องศาและแปลงเป็นเรเดียน
(setq ang2 (+ ang (dtor 180.0))) ; ตั้งค่ามุมที่ 2 มีค่า 180 องศาและแปลงเป็นเรเดียน
(setq ang3 (+ ang (dtor 270.0))) ; ตั้งค่ามุมที่ 3 มีค่า 270 องศาและแปลงเป็นเรเดียน
; กำหนดจุดหรือตำแหน่งต่างๆ จากการเลือกจุดหลักของผนัง
(if (= Pp "Left") ; ทดสอบว่าถ้าเลือกจุดอ้างอิงของผนังที่ Left ให้ใช้ชุดตำแหน่งหรือจุดต่างๆ ที่กำหนดในชุดนี้ ด้วยการรวมกลุ่มคำสั่ง จากฟังชั่น Polar ที่ได้เคยใช้งานผ่านมาแล้ว
(progn ; รวมกลุ่มคำสั่ง
(setq p3 p1)
(setq p4 p2)
(setq p5 (Polar p2 Ang3 tw))
(setq p6 (Polar p1 Ang3 tw))
(setq p1a (Polar p3 Ang3 tc))
(setq p2a (Polar p4 Ang3 tc))
(setq p3a (Polar p5 Ang1 tc))
(setq p4a (Polar p6 Ang1 tc))
); สิ้นสุดการรวมกลุ่ม
); สิ้นสุดการทดสอบ
(if (= Pp "Middle") ; ทดสอบว่าถ้าเลือกจุดอ้างอิงของผนังที่ Middle ให้ใช้ชุดตำแหน่งหรือจุดต่างๆ ที่กำหนดในชุดนี้ ด้วยการรวมกลุ่มคำสั่ง จากฟังชั่น Polar ที่ได้เคยใช้งานผ่านมาแล้ว
(progn ; รวมกลุ่มคำสั่ง
(setq p3 (Polar p1 Ang1 (/ tw 2)))
(setq p4 (Polar p2 Ang1 (/ tw 2)))
(setq p5 (Polar p4 Ang3 tw))
(setq p6 (Polar p3 Ang3 tw))
(setq p1a (Polar p3 Ang3 tc))
(setq p2a (Polar p4 Ang3 tc))
(setq p3a (Polar p5 Ang1 tc))
(setq p4a (Polar p6 Ang1 tc))
); สิ้นสุดการรวมกลุ่ม
); สิ้นสุดการทดสอบ
(if (= Pp "Right") ; ทดสอบว่าถ้าเลือกจุดอ้างอิงของผนังที่ Right ให้ใช้ชุดตำแหน่งหรือจุดต่างๆ ที่กำหนดในชุดนี้ ด้วยการรวมกลุ่มคำสั่ง จากฟังชั่น Polar ที่ได้เคยใช้งานผ่านมาแล้ว
(progn ; รวมกลุ่มคำสั่ง
(setq p3 p1)
(setq p4 p2)
(setq p5 (Polar p4 Ang1 tw))
(setq p6 (Polar p3 Ang1 tw))
(setq p1a (Polar p3 Ang1 tc))
(setq p2a (Polar p4 Ang1 tc))
(setq p3a (Polar p5 Ang3 tc))
(setq p4a (Polar p6 Ang3 tc))
); สิ้นสุดการรวมกลุ่ม
); สิ้นสุดการทดสอบ
(command "_.line" p3 p4 "" "_.line" p5 p6 "") ; วาดเส้นผนังทั้งสองด้าน
(command "_.pline" p1a p2a p3a p4a "c") ; วาดผนังด้านในด้วยเส้นต่อเนื่อง
(command "_.bhatch" "S" "last" "" "P" "ANSI31" tw 0 "") ; ใส่ลายตัดในผนังด้านในเลือกลายตัดด้วย P (Pattern) เป็น "ANSI31" เราสามารถเปลี่ยนเป็นลายอื่นได้โดยใส่ชื่อที่ต้องการลงไป กำหนดสเกลที่เหมาะสมเราให้เท่ากับความกว้างเสา tw กำหนดองศา 0 แล้วจบคำสั่งด้วย "" Enter
; คืนค่า System Variables
(setvar "osmode" old_osnap)
(setvar "cmdecho" old_cmdecho)
(setvar "snapmode" old_snap)
(setvar "orthomode" old_ortho)
(princ) ; ลบechoสิ้นสุดคำสั่ง
) ; สิ้นสุดฟังก์ชัน
ตัวอย่างที่ 31 a
ในตัวอย่างที่ 31 a เป็นการเลือกจุดเริ่มต้นของผนังเป็น left ด้านซ้ายมือ และมีตัวช่วยเลือกจุด osnap End point ช่วยเลือกที่มุมเสาด้านซ้าย ที่จุด p1 และเลือกจุด p2 ที่มุมเสาเป็นความยาวของผนัง และทำการวาดเส้นผนังซ้ายและขวาและวาดผนังด้านในพร้อมกับแสดงลายตัด
ตัวอย่างที่ 31 b
ในตัวอย่างที่ 31 b เป็นการเลือกจุดเริ่มต้นของผนังเป็น middle ด้านซ้ายมือ และมีตัวช่วยเลือกจุด osnap Midpoint ช่วยเลือกที่กึ่งกลางเสา ที่จุด p1 และเลือกจุด p2 ที่กึ่งกลางเสา ด้านบนเป็นความยาวของผนัง และทำการวาดเส้นผนังซ้ายและขวาและวาดผนังด้านในพร้อมกับแสดงลายตัด
ตัวอย่างที่ 31 c
ในตัวอย่างที่ 31 c เป็นการเลือกจุดเริ่มต้นของผนังเป็น right ด้านซ้ายมือ และมีตัวช่วยเลือกจุด osnap End point ช่วยเลือกที่มุมเสาด้านขวา ที่จุด p1 และเลือกจุด p2 ที่มุมเสาเป็นความยาวของผนัง และทำการวาดเส้นผนังซ้ายและขวาและวาดผนังด้านในพร้อมกับแสดงลายตัดเช่นกัน
จากคำสั่ง Door Window Wall เราได้ใช้คำสั่ง Polar ช่วยในการกำหนดตำแหน่งซึ่งง่ายต่อการใช้งานมากกว่าการใช้ car cadr แต่ก็มีข้อแม้ว่าเราต้องรู้ค่ามุมด้วย แต่ว่าการใช้ car cadr เราก็ต้องรู้ระยะห่างของแกน x y ด้วยเหมือนกันแล้วแต่ความถนัดหรือสะดวกของแต่ละคนละกัน ในส่วนนี้ผมไม่ได้สร้าง layer ไว้ให้นะครับถ้าต้องการก็เพิ่มเอาได้เลยตามตัวอย่าง gline เอาคำสั่งสร้างยกมาใส่เลยแล้วก็เปลี่ยนชื่อ layer เป็นชื่อที่เราต้องการ เลือกสีและชนิดของเส้นเอาเลยครับตามที่อธิบายไว้แล้ว