วันพฤหัสบดีที่ 17 มิถุนายน พ.ศ. 2553

AutoCAD Tips: Visual LISP อ่านความยาวรูปวาดแบบทันที



หากต้องการทราบค่าความยาวของรูปวาดหนึ่ง ๆ ใน AutoCAD วิธีการหนึ่งที่ทำกันคือ คลิกเลือก แล้วกดคีย์ Ctrl+1 เพื่อดูค่าคุณสมบัติจาก Properties palette ที่รายการ Length (ความยาว), Circumference (เส้นรอบวง) เป็นต้น

ในหัวข้อนี้ขอนำเสนอคำสั่งที่พัฒนาขึ้นใหม่คือ RLL ที่เป็นรูทีน AutoLISP เพียงแต่วางตัวชี้ไว้เหนือรูปวาด ไม่ต้องคลิกเลือกรูปวาดเลย จะให้ผลแจ้งชนิดรูปวาดและความยาวให้ทราบในวินโดว์ Command ตามรูปถัดไปนี้ ข้อดีคือใช้เช็คความยาวหลายรูปวาดได้อย่างรวดเร็ว ระหว่างอยู่ในคำสั่งนี้เพียงแต่เลื่อนตัวชี้ไปวางยังรูปวาดต่าง ๆ ที่ต้องการก็จะได้ค่าความยาวทันที



ผู้สนใจสามารถอีเมลมาขอไปใช้กันได้ครับ

AutoCAD Tips: Visual LISP เขียน ARC จากค่าความยาว



คำสั่ง Arc ใน AutoCAD เอง มีตัวเลือกหนึ่งที่ใช้กำหนดความยาวในการเขียนเส้นโค้ง ที่เป็นส่วนของวงกลม แต่ไม่ใช่ความยาวของส่วนโค้ง ความยาวในตัวเลือกนี้คือ Chord ที่เป็นเส้นตรงที่โยงระหว่างจุดปลายของส่วนโค้ง

ในหัวข้อนี้ได้สร้างคำสั่งขึ้นใหม่คือ AL (Arc Length) ใช้วาดเส้นโค้งของวงกลม โดยให้กำหนดความยาวส่วนโค้งได้ มีพรอมต์ดังรูปนี้



มีจุดสังเกตดังนี้

1. ใช้กับ UCS หมุนมุมได้
2. ป้อนความยาวด้วยค่าบวก เส้นโค้งถูกเขียนในทิศทวนเข็มนาฬิกา
ส่วนค่าลบ เขียนในทิศตามเข็มนาฬิกา

ผู้สนใจอีเมลมาขอไปลองใช้กันได้ครับ

วันพุธที่ 9 มิถุนายน พ.ศ. 2553

Visual LISP: AutoCAD Tips เพิ่มเติม วิธีใช้ Diva แบ่งพื้นที่จัดสรร

มีหลายท่านสอบถามมาถึง วิธีใช้ Diva แบบที่ละเอียดขึ้น
จึงขอนำมาโพสต์รวมไว้ตรงนี้แล้วกัน











ดู Screencast แบบวิดีโอ ที่นี่

Diva - DIViding Area

วันอาทิตย์ที่ 6 มิถุนายน พ.ศ. 2553

Visual LISP: AutoCAD Tips แบ่งพื้นที่จัดสรร




สัปดาห์ที่ผ่านมามีอีเมลจากสองท่านมาถามไถ่ถึง LISP สำหรับแบ่งพื้นที่จัดสรร ที่ปกติมักเป็น Irregular shape หรือรูปทรงอิสระ และต้องการจะแบ่งออกเป็นแปลงย่อยที่ขนาดหนึ่งๆ เช่น 2 ไร่ ซึ่งเท่ากับ 2x1,600=3,200 ตารางเมตร เป็นต้น

แนวคิดคือเราต้องสร้างขอบเขต (boundary) รูปปิด (Closed) ขึ้น และใช้ LISP หาพื้นที่ของรูปปิดนี้ และเพื่อให้ได้ขนาดตรงกับที่ต้องการจะแบ่งให้แต่ละแปลง จึงต้องมีการสุ่มค่าวาดเส้นและค่อยเลื่อนตำแหน่งจนกว่าจะได้ตามที่ต้องการ

ในการนี้จึงได้สรุปและพัฒนาขึ้นเป็นชุดคำสั่งขึ้น คือ

1. Diva - สำหรับตีเส้นแบ่ง
2. Txx - สำหรับตัดเส้นที่เลยออกนอกขอบเขต
3. AA - เขียนพื้นที่จากที่วาดไว้ในหน่วยเมตร เป็นข้อความในหน่วย ไร่-งาน-ตารางวา

โดยรวมอยู่ในไฟล์ Diva.VLX
การทำงานของคำสั่ง Diva

Command: diva
Developed by schatchawal@gmail.com
Specify Desired area:< 24000.0> พิมพ์ขนาดพื้นที่ที่ต้องการในหน่วยตารางเมตร
Specify first point of boundary: กำหนดแนวของเส้นแบ่งเริ่มต้น ที่จุดแรก
Specify second point of boundary: กำหนดแนวของเส้นแบ่งเริ่มต้น ที่จุดสอง
Specify point in Desired boundary: คลิกจุดด้านที่จะหาพื้นที่

Different: Desired(24000.0) - Current area(27867.8) = -3867.83

Specify New boundary? [Yes/No]
ถ้าต้องการวาดเส้นเริ่มต้นใหม่ ให้ใช้ตัวเลือก Yes
แต่ถ้าจะให้คำสั่งเริ่มทำงานค้นหาตำแหน่งที่ถูกต้องของเส้นแบ่งให้เลย ให้คลิก No
แล้วคำสั่งจะเริ่มทำงาน โดยแสดงเป็นรายการดังนี้

1.Inc=0.4 Diff: Desired(24000.0) - Current Area(27768.0) = -3767.98
2.Inc=0.4 Diff: Desired(24000.0) - Current Area(27668.0) = -3668.0
3.Inc=0.4 Diff: Desired(24000.0) - Current Area(27567.9) = -3567.92

..................................................................

66.Inc=0.00015625 Diff: Desired(24000.0) - Current Area(24000.0) = -0.0104122
67.Inc=7.8125e-005 Diff: Desired(24000.0) - Current Area(24000.0) = 0.0099243

คำสั่งจะดำเนินการจนค้นพบตำแหน่งที่ให้ค่าพื้นที่ตรงตามค่ากำหนด
จำนวนครั้งสูงสุดที่ตั้งไว้คือ มากที่สุดที่ 500 ครั้ง
และให้ค่าละเอียดถึง 0.01 ตารางเมตร ตามนัยสำคัญของการวาดแปลนในหน่วยเมตร

เส้นเริ่มต้นจะถูกวาดบนเลเยอร์ชื่อ NewBoundary ด้วยเส้น XLine สีแดง

การทำงานของคำสั่ง TXX
เพื่อที่จะขลิบหรือตัดเส้นที่เลยออกนอกขอบเขต ปกติจะใช้คำสั่ง Trim ใน AutoCAD
แต่ในที่นี้เพิ่มให้อีกคำสั่งหนึ่งคือ TXX ให้คลิกที่ขอบเขตพื้นที่
จะให้ผลตัดเส้นที่เลยนอกขอบเขตนี้ออกไปทั้งหมด
หากยังหลงเหลือเส้นอื่นอีก ให้ใช้คำสั่ง Trim หรือ Erase ตัดเส้นที่ไม่เหลือออกไป

การทำงานของคำสั่ง AA
ก่อนใช้เราจะต้องสร้าง Text Style ที่ใช้ฟอนต์ภาษาไทยเอาไว้ก่อน
และกำหนดเป็นตัวปัจจุบัน (Current style) เอาไว้ก่อนแล้ว

Command: aa
Specify Text Height: <5.0> กำหนดขนาดความสูงอักษร
Specify Text Rotation: <45.0> กำหนดมุมหมุนในหน่วยองศา
Specify point in closed boundary: คลิกหนึ่งจุดในแปลงที่จะเขียนขนาด

Area=15 ไร่ 0 งาน 0 ตารางวา ผลลัพธ์ขนาดในหน่วน ไร่ งาน ตารางวา ที่คำนวณได้

Specify point in closed boundary: เลือกจุดในแปลงอื่นได้อีก จนครบแล้วกด Enter เพื่อจบคำสั่ง