วันศุกร์ที่ 22 สิงหาคม พ.ศ. 2568

Slope Calculations 2

 

Slope Calculations 2

ตัวนี้เป็นแบบเลือกเส้นเอาเลย ทั้ง line หรือ Polyline โดยการหาตำแหน่ง start และ end ของเส้น

(defun c:slope2 (/ pt1 pt2 ptL ptT ang slp slple)
(vl-load-com)
(setq old_cmdecho (getvar "cmdecho")) ; cmdecho
(setvar "cmdecho" 0) ;;echo off
(if(and
(setq sel (entsel "\nSelect Slope line: "))
(setq ename (car sel))
(setq elist (entget ename))
)
(cond
((eq (cdr (assoc '0 elist)) "LINE")
(setq pt1 (cdr (assoc '10 elist))
pt2 (cdr (assoc '11 elist))
)
)
((eq (cdr (assoc '0 elist)) "LWPOLYLINE")
(setq pt_lst(mapcar 'cdr (vl-remove-if-not '(lambda (x) ( = (car x) 10)) elist))
pt1 (car pt_lst)
pt2 (last pt_lst)
)
)
); progn
); if
;;--------Test points Low or Height-----------------+
(if(and(>(car pt1)(car pt2))(>(cadr pt1)(cadr pt2)))
(setq ptL pt2
ptT pt1
)
(setq ptL pt1
ptT pt2
)
)
(setq ris (-(cadr ptT)(cadr ptL))) ;;Rise Vertical
(setq run (-(car ptT)(car ptL))) ;;Run Horizontal
(setq ang (/ (* (atan (/ ris run)) 180) pi)) ;;Angle of Degree
(setq angra (* ang (/ pi 180))) ;;Angle of Radial
(setq slp (*(/ ris run) 100.0)) ;;Slope %
(setq slple (/ ris (sin angra))) ;;Slope Length
(alert
(strcat "\nSlope = "(rtos slp 2 0) "%"
"\nSlope Length = "(rtos slple 2 3) "m."
"\nAngle = "(rtos ang 2 3) "\U+00B0"
)
)
(setvar "cmdecho" old_cmdecho)
(princ)
)

Slope Calculations 1

 Slope Calculations 1 

อันนี้ใช้ตัว getpoint เลือก 2 จุด แล้วตรวจสอบว่าจุดใดอยู่บนหรือล่างให้ด้วย

(defun c:slope1 (/ pt1 pt2 ptL ptT ang slp slple)
(setq old_cmdecho (getvar "cmdecho")) ; cmdecho
(setq old_osmode (getvar "osmode")) ; osnap
(setvar "cmdecho" 0) ;;echo off
(setvar "osmode" 1) ;;osnap end point
(setq pt1 (getpoint (strcat "\nPick Frist Point : ")))
(setq pt2 (getpoint (strcat "\nPick Second Point : ")))
;;--------Test points Low or Height-----------------+
(if(and(>(car pt1)(car pt2))(>(cadr pt1)(cadr pt2)))
(setq ptL pt2
ptT pt1
)
(setq ptL pt1
ptT pt2
)
)
(setq ris (-(cadr ptT)(cadr ptL))) ;;Rise Vertical
(setq run (-(car ptT)(car ptL))) ;;Run Horizontal
(setq ang (/ (* (atan (/ ris run)) 180) pi)) ;;Angle of Degree
(setq angra (* ang (/ pi 180))) ;;Angle of Radial
(setq slp (*(/ ris run) 100.0)) ;;Slope %
(setq slple (/ ris (sin angra))) ;;Slope Length
(alert
(strcat "\nSlope = "(rtos slp 2 0) "%"
"\nSlope Length = "(rtos slple 2 3) "m."
"\nAngle = "(rtos ang 2 3) "\U+00B0"
)
)
(setvar "osmode" old_osmode)
(setvar "cmdecho" old_cmdecho)
(princ)
)

วันศุกร์ที่ 17 มกราคม พ.ศ. 2568

Section Text Value

Section Text Value


ตัวนี้เป็นการหาจุดตัดบนเส้น Vertical Grid Line โดยเส้นระดับกำหนดไว้สูงสุด 3 เส้นด้วยกันคือ

    1. เส้น Fianl 2. เส้น Orignal 3. เส้น Formation

        และเส้นแนวตั้ง Vertical Grid line

โดยกำหนดชื่อ Layer ของแต่ละเส้นให้ตรงใน Dialog และค่าระยะห่างของค่าที่จะแสดง Vertical Gap จากนั้นก็เริ่มโปรแกรมโดย

    - เลือกค่าระดับ Datum (ตัวเลข) ซึ่งค่าความสูงของตัวอักษรจะนำมาจากค่าของตัวเลขระดับนี้

    - เลือกตำแหน่ง Datum Center Line ตำแหน่งกึ่งกลางของหน้าตัดนี้

    - เลือกเส้นทั้งหมดตาม Layer ที่กำหนดไว้
 

วันเสาร์ที่ 30 พฤศจิกายน พ.ศ. 2567

การสร้าง Dynamic Blockแบบปรับขนาดได้ใน AutoCAD

 

การสร้าง Dynamic Blockแบบปรับขนาดได้ใน AutoCAD

Dynamic Block แบบหลายๆ เวอร์ชันใน AutoCAD นั้นมีประโยชน์ เป็นอย่างมาก เนื่องจาก เราสามารถสร้าง บล็อคเพียง ชิ้นเดียว แต่มีหลายขนาด หรือ หลายรูปแบบหรือ หลายสถานะ ให้เลือกใช้งาน โดยเราไม่ต้อง สร้างบล็อค ขึ้นมาจำนวนมาก เพราะจะทำให้ เกิดความยุ่งยาก และเสียเวลา ในการค้นหาและ สิ้นเปลือง เนื้อที่ในการจัดเก็บ หากนำ Dynamic Block เข้ามาใช้งาน จะช่วยให้เรา สามารถค้นหา สอดแทรก ปรับตำแหน่ง ขนาดและทิศทางของ Dynamic Block ให้เหมาะสม กับชิ้นงานอื่นๆ ให้อย่างรวดเร็ว โดยไม่ต้อง เกรงว่าบล็อค ที่จะนำมาสอดแทรกนั้น จะมีขนาด ไม่ฟิตพอดี กับชิ้นงานอื่นๆ ในแบบแปลน เพราะเรา สามารถสร้าง Dynamic Block ที่สามารถปรับขนาด หรือเปลี่ยนรูปร่าง หรืออาจจะมี หลายๆ รูปแบบใน บล็อคเดียวก็ได้ การสร้างDynamic Block แบบหลายเวอร์ชันนั้น นิยมใช้ Visibility Parameter หรือ Lookup Parameter เป็นตัวควบคุม การปรับเปลี่ยนรูปแบบ อย่างไรก็ตาม ในการสร้างบล็อคแบบ หลายเวอร์ชัน ก็จะมีพารามิเตอร์และ แอกชั่นอื่นๆ เป็นส่วนที่กำหนด ขนาดและการใช้คำสั่งกระทำกับบล็อคเช่นเดียวกัน ดังนั้น เราจะศึกษาการ ใช้พารามิเตอร์และ แอกชั่นแบบง่ายๆ เสียก่อน จึงจะศึกษาการใช้ Visibility Parameter หรือ Lookup Parameter ในโอกาสต่อไป โดยในที่นี้ เราจะมาลองสร้าง บล็อคหน้าต่าง ที่สามารถ ปรับขนาดความกว้าง ได้หลายขนาดพร้อม ทั้งสามารถ พลิกกลับด้าน ได้โดยที่หน้าต่าง จะอยู่ในตำแหน่งเดิมไม่มีการ เคลื่อนที่ไม่ว่าจะขนาดความกว้างจะเปลี่ยน เป็นเท่าใดก็ตาม โดยมีขั้นตอนดังต่อไปนี้


รูปที่ 1

รูปที่ 2

ดาวน์โหลดไฟล์ dynamicblock.zip แล้ว Unzip และเปิดไฟล์ dynamicblock.dwg ซึ่งมีบล็อค ธรรมดา รูปบาน หน้าต่างชื่อ Window ออกมาใช้งานใน AutoCAD 2006 (บล็อคนี้สร้างจากคำสั่ง Draw/Block/Make เหมือนกับ การสร้างบล็อค ธรรมดาโดยทั่วไป)จะปรากฏดังรูปที่ 1

ใช้คำสั่ง Tools/Block Editor เมื่อปรากฏ ใดอรอค Edit Block Definition คลิกบล็อค Window ดังรูปที่ 2 คลิกบนปุ่ม OK จะปรากฏดังรูปที่ 3

หมายเหตุ การสร้างบล็อคเพื่อให้ ปรับความกว้างได้ เราจะใช้ Linear Parameter คู่กับ Stretch Action เพื่อบังคับให้บล็อคยืดออกในแนวนอน พารามิเตอร์ Linear Parameter ใช้เป็นตัวกำหนดระยะในการยืดหรือหด ส่วนแอคชัน Stretch Action เป็นคำสั่งในการยืดบล็อคตามที่กำหนดใน Linear Parameter เราสามารถเลือกที่จะใช้ปุ่มไอคอน Linear Parameter บนแถบ Parameters และปุ่มไอคอน Stretch Action บนแถบ Actions บนหน้าต่าง Block Authoring Palettes หรือจะเลือกใช้ปุ่มไอคอน Linear Stretch บนแถบ Parameter Sets เนื่องจากปุ่มไอคอน Linear Stretch นั้นมีการรวบรวม Linear Parameter และ Stretch Action ไว้ให้เราเรียบร้อยแล้ว

รูปที่ 3

จากรูปที่ 3 คลิกแถบ Parameter Sets คลิกปุ่มไอคอน Linear Stretch เมื่อปรากฏข้อความ Specify start point... คลิกจุดที่ 1 เมื่อปรากฏข้อความ Specify endpoint: คลิกจุดที่ 2 เมื่อปรากฏข้อความ Specify label location: คลิกจุดที่ 3 จะปรากฏดังรูปที่ 4

รูปที่ 4

จากรูปที่ 4 ดับเบิลคลิกบนไอคอน Stretch จะปรากฏข้อความ Specify first corner of stretch frame ให้กำหนดขอบเขตของส่วนที่จะยืดโดยคลิกจุดที่ 1 เมื่อปรากฏข้อความ Specify opposite corner: คลิกจุดที่ 2 เมื่อปรากฏข้อความ Specify objects to stretch ให้เลือกวัตถุที่ต้องการยืดแบบ Crossing โดยคลิกจุดที่ 3 เมื่อปรากฏข้อความ Specify opposite corner: คลิกจุดที่ 4 เมื่อปรากฏข้อความ Select objects: ให้คลิกขวา

ทดสอบบล็อคในเบื้องต้นว่าสามารถยืดหรือหดได้หรือไม่ โดยคลิกบนปุ่ม Close Block Editor แล้วคลิกบนบล็อคให้ปรากฏจุดลูกศรดังรูปที่ 5 (ซ้าย) คลิกบนจุดลูกศรตรงจุดที่ 1 แล้วคลิกประมาณจุดที่ 2 บล็อคจะถูกยืดออกได้ ดังรูปที่ 5 (ขวา) แต่สังเกตุว่าขอบบานหน้าต่างที่อยู่ตรงกลาง ไม่อยู่ตรงกลางแล้ว เราสามารถแก้ไขได้ดังนี้

รูปที่ 5

ย้อนกลับไปทำซ้ำข้อ 2 จะปรากฏดังรูปที่ 6

รูปที่ 6

จากรูปที่ 6 คลิกบนแถบ Actions แล้วคลิกปุ่มไอคอน 1 Stretch Action เมื่อปรากฏข้อความ Select parameter: คลิกพารามิเตอร์จุดที่ 2 เมื่อปรากฏข้อความ Specify parameter point to associate with ให้กดปุ่ม Enter เมื่อปรากฏข้อความ Specify first corner of stretch frame ปิด OSNAP แล้วคลิกจุดที่ 3 เมื่อปรากฏข้อความ Specify opposite corner: คลิกจุดที่ 4 เมื่อปรากฏข้อความ Specify objects to stretch ให้เลือกวัตถุที่ต้องการยืดแบบ Crossing โดยคลิกจุดที่ 5 เมื่อปรากฏข้อความ Specify opposite corner: คลิกจุดที่ 6 เมื่อปรากฏข้อความ Select objects: ให้คลิกขวา เมื่อปรากฏข้อความ Specify action location คลิกตรงจุดที่ 7 เพื่อกำหนดตำแหน่งไอคอน Stretch จะปรากฏดังรูปที่ 7 (ซ้าย)

รูปที่ 7

จากรูปที่ 7 (ซ้าย) ใช้คำสั่ง Modify/Properties 1 คลิกไอคอน Stretch ตรงจุดที่ 2 แก้ไขค่า Distance Multiplierเป็น 0.5 ดังรูปที่ 7 (ขวา)

ทดสอบบล็อคต่อไปว่าขอบหน้าต่างอยู่ตรงกลางทุกๆ จุดที่เรายืดหรือหดบานหน้าต่างหรือไม่ โดยคลิกบนปุ่ม Close Block Editor แล้วคลิกบนบล็อคให้ปรากฏจุดลูกศรดังรูปที่ 8 (ซ้าย) 1 คลิกบนจุดลูกศร แล้ว 2 คลิกตำแหน่งใหม่ ขอบหน้าต่างจะปรากฏอยู่ตรงกลาง ไม่ว่าเราจะยืดหรือหดบล็อคไปเท่าใดก็ตาม ดังรูปที่ 8 (กลาง) และ (ขวา)

รูปที่ 8

หมายเหตุ จากตัวอย่างที่ผ่านมานี้ เมื่อเราปรับความกว้าง ของบานหน้าต่าง เราจะได้ขนาดที่เป็น ตัวเลขที่ไม่ลงตัว หากต้องการกำหนดขนาด ความกว้างของบาน หน้าต่าง ให้สามารถ ปรับขนาด ได้เฉพาะที่ต้องการ อาทิ เช่น 0.5, 1.00, 1.50, 2.00, 2.20, 2.50, 3.00 เราสามารถทำได้ดังนี้

รูปที่ 9

ย้อนกลับไปทำซ้ำข้อ 2 เพื่อเข้าสู่ Block Editor แล้วคลิกบนพารามิเตอร์ Distance แล้วใช้คำสั่ง Modify/Properties เลือก List ในแถบรายการ Dist type ในหมวด Value Set คลิกบนอิดิทบอกซ์ Dist Value List แล้วคลิกบนปุ่มจุด 3 จุด (ตรงจุดที่ 1 ของรูปที่ 9) จะปรากฏใดอรอค Add Distance Value แล้วเพิ่ม 0.5, 1.5, 2, 2.2, 2.5, 3 เข้าไปในใดอรอคดังรูปที่ 10 แล้วคลิกบนปุ่ม OK

รูปที่ 10

ทดสอบบล็อคต่อไปว่าระยะที่เรายืดหรือหดบานหน้าต่างตามที่เรากำหนดหรือไม่ โดยคลิกบนปุ่ม Close Block Editor โดยจะแสดงขีดระยะ 0.5, 1.5, 2, 2.2, 2.5, 3 ตามที่เรากำหนด ดังรูปที่ 11

รูปที่ 11

The END.