จากที่คลุกคลีในแวดวงก่อสร้างมาเกือบยี่สิบปี ได้พบกับแนวคิดสำคัญขณะอยู่หน้างาน (on the site) ไม่น้อยเลย
เริ่มต้นจากปีแรกที่ต้องเป็นวิศวกรภาคสนามในส่วนงานติดตั้งระบบไฟฟ้า จากที่เคยเรียนแต่บนโต๊ะ ทำงานคำนวณ จะเขียนแบบในรุ่นที่เรียนตอนนั้น ยังมีก็เพียงไม้สเกล ไม้ฉาก เป็นเครื่องมือวัดเท่านั้น และก็ยังไม่ได้ใช้คอมพิวเตอร์เขียนแบบเลยด้วยซ้ำ
เมื่อมาสัมผัสภาคปฏิบัติของช่าง ตั้งแต่ระดับหัวหน้าช่างประสบการณ์กว่า 20 ปี ไปจนถึงช่างแรงงาน ถึงได้พบกับวิธีที่ใช้กันในหน้างานก่อสร้าง
เครื่องมือวัดในงานก่อสร้างเป็นอย่างไรกัน?
ในแง่มุมของงานติดตั้งท่อร้อยสายไฟ เขาหาแนวระดับกันอย่างไร
เริ่มต้นจากมีช่าง survey มายิงเส้นแนวระดับที่เรียกกันง่ายๆว่าเส้นเมตรให้ ใครจะวัดอะไรจะต้องอ้างอิงไปจากจุดนี้ จากนั้นใครจะเอาไปใช้ที่ระดับเท่าใด ที่ตำแหน่งใด ก็อาศัยการถ่ายระดับไป
เรื่องนี้อาจกลายเป็นนำมะพร้าวห้าวไปขายสวน สำหรับคนอยู่หน้างานมาประจำ แต่สำหรับนักศึกษาที่เพิ่งจบใหม่ อาจสนใจและได้ประโยชน์จากเรื่องเล่านี้อยู่บ้าง
คำตอบคือใช้สายยางใส ใส่น้ำเข้าไป ปลายแรกอิงกับเส้นเมตรที่่ช่างสำรวจทำเครื่องหมายให้ไว้ อีกปลายก็ไปถือไว้ใกล้จุดที่ต้องการ จากนั้น ก็ค่อยเอาตลับเมตรวัดออกไป
ส่วนระยะในระนาบ เช่นเดียวกันเริ่มต้น มีเส้นอ้างอิงจากช่าง survery ตีเส้นอ้างอิงไว้ให้ แต่คราวนี้สะดวกขึ้นเพราะวัดจากในระนาบ จึงดึงแนวจากตลับเมตรวัดได้สะดวก ไม่ต้องมีสายยางระดับน้ำให้ระเกะระกะอีก
แน่นอนว่าแล้วถ้าเป็นแนวยาวๆ เขาจะตีเส้นไว้อ้างอิงอย่างไร?
คำตอบคือบักเต้า
ชื่อแสนพิลึกนี้ อุปกรณ์น่าจะมาจากชาวจีนเป็นแน่แท้!!!
อันนี้ผมก็ไม่กล้ายืนยันว่าเท็จจริงเป็นอย่างไร แต่มีโฟร์แมนรุ่นปู่เล่าให้ฟังว่า เพี้ยนมาจากช่างจีนใส่หมึกไว้ในลูกน้ำเต้า และมีเส้นเชือกบางจุ่มหมึกในน้ำเต้านี้อยู่
มาดูวิธีใช้กัน บางแบบก็เป็นผงสี บางแบบก็เป็นเหมือนหมึก เวลาจะใช้ก็ลากเชือกออกมา ดึงขึงตึงไว้ที่สองจุดอ้างอิงจากที่วัดไว้ แล้วก็ดีดเส้นเชือกนี้ ให้ผงสีหรือหมึกแปะเป็นแนวเส้นบนพื้นที่ตามที่ต้องการ
ส่วนการอ้างอิงระหว่างแนวบนพื้นและฝ้าเพดานก็จะมีอีกสิ่งที่นำมาใช้คือลูกดิ่ง เป็นตุ้มเหล็กผูกเชือก ทิ้งดิ่งไว้อ้างอิงแนวทั้งสองระหว่างกันได้ ที่ทันสมัยหน่อย ก็จะเป็นเครื่องยิงแสงเลเซอร์ถ่ายแนวออกไป
เสียดายที่หาภาพถ่ายพวกนี้ไม่เจอแล้ว จึงไม่มีโอกาสสแกนภาพประกอบมาให้ดู (ย้อนหลังไปถึงตอนยังไม่มีกล้องดิจิตอลกันเลย มีแต่กล้องฟิล์มในตอนโน้น)
มาถึงอีกเหตุการณ์จริง ที่เริ่มใกล้ AutoCAD ขึ้นมาอีกหน่อย?
ผู้เขียนทำงานอยู่ฝ่ายก่อสร้างที่มีผู้คุมงานของเจ้าของโครงการอีกที วันนึงมีเสียงบ่นจากช่างเขียนแบบว่า
ฝ่ายคุมงานที่มักเรียกว่าคอนซัลต์นี้แหละ ตีแบบก่อสร้าง (shop drawing) กลับคืนมา บอกว่าเขียนมาได้ ยังไงระยะบันได ใส่เส้นบอกระยะ (dimension) มาไม่ถูกต้อง ทำไมไปปัดทศนิยมอย่างนั้น หารแบ่งได้เท่าไรก็ใส่มาให้ตรง ให้ละเอียดถึงทศนิยม 4 ตำแหน่ง!!!
หากใครอ่านตั้งแต่ต้นมาถึงตรงจุดนี้ คงพอสรุปได้ว่าใครกันที่น่าจะทำถูกดีแล้ว?
เป้าหมายของแบบ Shop Drawing เอาไปให้ใครใช้ คนที่จะใช้คือช่างที่หน้างาน เครื่องมือวัดของเขามีอะไรบ้าง ลำพังตลับเมตรข้างเอวที่เขาพกอยู่นั้นจะวัดยังไงให้ได้ทศนิยม 4 ตำแหน่ง ที่แบบหน่วยเมตร ก็กลายเป็นถึงระดับหนึ่งในสิบของมิลลิเมตรเลยทีเดียว
ถึงย่อหน้าสุดท้าย แล้ววันนี้คุณเขียนแบบงานก่อสร้างในหน่วยเมตร ด้วยทศนิยมกี่ตำแหน่งกัน? และก็หวนคิดไปถึงภาพเลือนๆ ถึงชั่วโมงแรกของการเรียนแล็บฟิสิกส์ในรั้วมหาวิทยาลัย ทำไมถึงได้ต้องทนฟังวิดีโอเรื่องเลขนัยสำคัญ (Significant number) อยู่เกือบทุกรุ่น ตั้งแต่มีคณะวิศวกรรมศาสตร์กันมา ...
วันจันทร์ที่ 23 สิงหาคม พ.ศ. 2553
วันอังคารที่ 17 สิงหาคม พ.ศ. 2553
AutoCAD Tips: BACK To BASICS - ALIAS
หลังจากเขียนบทความตอนสั้นๆเกี่ยวกับ LISP ไปหลายตอน เมื่อไปเยือน 2 - 3 หน่วยงานก็ยังพบว่า มีหลายท่านยังชื่นชอบการกดคีย์บอร์ดด้วยตัวอักษรสักหนึ่งตัว หรือ 2 - 3 ตัว เพื่อใช้เรียกคำสั่งหนึ่งๆใน AutoCAD แทนการคลิกทูล (tools) หรือปุ่มรูปเครื่องมือ ซึ่งความสามารถนี้มีชื่อเป็นทางการคือ ALIAS (คำสั่งย่อ) เคยเห็น Draftsman ที่ใช้ได้อย่างคล่องแคล่ว ทำได้เร็วไม่แพ้การเข้าใช้จากการคลิกของเมาส์เลยทีเดียว
ยกตัวอย่างคำสั่งย่อ เช่น
พิมพ์ L กด Enter เพื่อเรียกใช้คำสั่ง Line
พิมพ์ DLI กด Enter เพื่อเรียกใช้คำสั่ง DimLinear
ฯลฯ
ตอนเริ่มต้นใช้ AutoCAD ผู้เขียนเองก็ใช้ ALIAS อยู่ด้วย จน AutoCAD ก้าวจากยุคสุดท้ายบน DOS ที่ Release 13 มาที่ 14 และกระโดดเปลี่ยนไปใช้เลขรุ่นด้วยเลขปีเป็น AutoCAD 2000 ก็ลดการกดคีย์บอร์ดเหล่านี้ลง ใช้เฉพาะจาก LISP ที่พัฒนาขึ้น แต่คำสั่งดั้งเดิมใน AutoCAD เอง เรียกใช้งานจาก Tool ซึ่งแรกๆนี้ก็อยู่บน Toolbar ต่างๆ จนเป็น 2009 ที่ย้ายเป็นแผง (panel) บน Ribbon menu แบบ Microsoft Office 2007/2010
เลยคิดว่าน่าจะเป็นการดีที่ให้รายละเอียดของเครื่องมือนี้สักหน่อย
จุดที่ใช้นิยาม (define) หรือกำหนดอักษรย่อที่จะใช้กับคำสั่งนี้อยู่ที่ไฟล์ ACAD.PGP
แน่นอนปัญหาที่ตามมาคือ
1.แล้วไฟล์นี้อยู่ที่ใด?
2.แก้ไขเองได้ไหม?
คำตอบของปัญหานี้จะนำเสนอ 2 วิธีดังนี้
วิธีแรกใช้คำสั่ง ALIASEDIT ที่จะใช้ได้ก็ต่อเมื่อเราได้ติดตั้งส่วน Express Tools ของ AutoCAD ด้วย
จากไดอะล็อกของคำสั่งนี้เราสามารถใช้ปุ่ม Add, Remove และ Edit เพื่อเพิ่ม ลบ และแก้ไขสิ่งที่กำหนดหรือตัวย่อที่นิยามไปแล้วได้
วิธีที่สอง คือเปิดแก้ไขโดยตรง จะเพิ่ม ลด หรือแก้ไขของเดิมจากโปรแกรม Notepad ต่อไฟล์ ACAD.PGP
ที่จริงๆแล้วก็เป็นเพียงไฟล์เท็กซ์เท่านั้น
แต่ก็จะมาติดตรงที่แล้วไฟล์ ACAD.PGP อยู่ตรงไหน คำตอบคือ จะอยู่ใน Profile ผู้ใช้ส่วน roaming ของโปรแกรม AutoCAD ที่ติดตั้งไว้ เช่น
C:\\Users\\<<ชื่อบัญชีผู้ใช้>>\\appdata\\roaming\\autodesk\\autocad
2011\\r18.1\\enu\\support\\acad.pgp
อย่างไรก็ตาม มีวิธีเข้าถึงง่ายกว่านี้ไม่ต้องเสียเวลาดับเบิลคลิกเข้าในหลายโฟลเดอร์กว่าจะถึงไฟล์นี้ นั่นคือบนบรรทัด Command: พิมพ์ด้วยนิพจน์ต่อไปนี้แล้ว กด Enter
(command "notepad" (findfile "acad.pgp"))
เพียงเท่านี้ก็จะทำให้เปิดโปรแกรม Notepad ที่ไฟล์ acad.pgp นี้แล้ว
มีจุดสำคัญอีกเรื่องคือการแก้ไขไฟล์นี้ด้วย Notepad จะต้องเรียกใช้คำสั่ง REINIT เพื่อให้ AutoCAD อ่าน ACAD.PGP ใหม่อีกครั้งก่อน จึงจะใช้งานได้
แต่อย่าลืมว่า คำสั่งย่อใน ACAD.PGP จะกำหนดตัวเลือก (Options) ไม่ได้
ถ้าจะสร้างคำสั่งย่อแบบรวมตัวเลือกย่อยในคำสั่งต้องใช้รูทีน AutoLISP เข้าช่วย
หากสนใจเพิ่มเติมจะให้เขียนในจุดนี้อีก อีเมลมาถามไถ่กันได้ครับ
ยกตัวอย่างคำสั่งย่อ เช่น
พิมพ์ L กด Enter เพื่อเรียกใช้คำสั่ง Line
พิมพ์ DLI กด Enter เพื่อเรียกใช้คำสั่ง DimLinear
ฯลฯ
ตอนเริ่มต้นใช้ AutoCAD ผู้เขียนเองก็ใช้ ALIAS อยู่ด้วย จน AutoCAD ก้าวจากยุคสุดท้ายบน DOS ที่ Release 13 มาที่ 14 และกระโดดเปลี่ยนไปใช้เลขรุ่นด้วยเลขปีเป็น AutoCAD 2000 ก็ลดการกดคีย์บอร์ดเหล่านี้ลง ใช้เฉพาะจาก LISP ที่พัฒนาขึ้น แต่คำสั่งดั้งเดิมใน AutoCAD เอง เรียกใช้งานจาก Tool ซึ่งแรกๆนี้ก็อยู่บน Toolbar ต่างๆ จนเป็น 2009 ที่ย้ายเป็นแผง (panel) บน Ribbon menu แบบ Microsoft Office 2007/2010
เลยคิดว่าน่าจะเป็นการดีที่ให้รายละเอียดของเครื่องมือนี้สักหน่อย
จุดที่ใช้นิยาม (define) หรือกำหนดอักษรย่อที่จะใช้กับคำสั่งนี้อยู่ที่ไฟล์ ACAD.PGP
แน่นอนปัญหาที่ตามมาคือ
1.แล้วไฟล์นี้อยู่ที่ใด?
2.แก้ไขเองได้ไหม?
คำตอบของปัญหานี้จะนำเสนอ 2 วิธีดังนี้
วิธีแรกใช้คำสั่ง ALIASEDIT ที่จะใช้ได้ก็ต่อเมื่อเราได้ติดตั้งส่วน Express Tools ของ AutoCAD ด้วย
จากไดอะล็อกของคำสั่งนี้เราสามารถใช้ปุ่ม Add, Remove และ Edit เพื่อเพิ่ม ลบ และแก้ไขสิ่งที่กำหนดหรือตัวย่อที่นิยามไปแล้วได้
วิธีที่สอง คือเปิดแก้ไขโดยตรง จะเพิ่ม ลด หรือแก้ไขของเดิมจากโปรแกรม Notepad ต่อไฟล์ ACAD.PGP
ที่จริงๆแล้วก็เป็นเพียงไฟล์เท็กซ์เท่านั้น
แต่ก็จะมาติดตรงที่แล้วไฟล์ ACAD.PGP อยู่ตรงไหน คำตอบคือ จะอยู่ใน Profile ผู้ใช้ส่วน roaming ของโปรแกรม AutoCAD ที่ติดตั้งไว้ เช่น
C:\\Users\\<<ชื่อบัญชีผู้ใช้>>\\appdata\\roaming\\autodesk\\autocad
2011\\r18.1\\enu\\support\\acad.pgp
อย่างไรก็ตาม มีวิธีเข้าถึงง่ายกว่านี้ไม่ต้องเสียเวลาดับเบิลคลิกเข้าในหลายโฟลเดอร์กว่าจะถึงไฟล์นี้ นั่นคือบนบรรทัด Command: พิมพ์ด้วยนิพจน์ต่อไปนี้แล้ว กด Enter
(command "notepad" (findfile "acad.pgp"))
เพียงเท่านี้ก็จะทำให้เปิดโปรแกรม Notepad ที่ไฟล์ acad.pgp นี้แล้ว
มีจุดสำคัญอีกเรื่องคือการแก้ไขไฟล์นี้ด้วย Notepad จะต้องเรียกใช้คำสั่ง REINIT เพื่อให้ AutoCAD อ่าน ACAD.PGP ใหม่อีกครั้งก่อน จึงจะใช้งานได้
แต่อย่าลืมว่า คำสั่งย่อใน ACAD.PGP จะกำหนดตัวเลือก (Options) ไม่ได้
ถ้าจะสร้างคำสั่งย่อแบบรวมตัวเลือกย่อยในคำสั่งต้องใช้รูทีน AutoLISP เข้าช่วย
หากสนใจเพิ่มเติมจะให้เขียนในจุดนี้อีก อีเมลมาถามไถ่กันได้ครับ
วันพฤหัสบดีที่ 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
จึงขอนำมาโพสต์รวมไว้ตรงนี้แล้วกัน





ดู 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 เพื่อจบคำสั่ง
วันศุกร์ที่ 19 มีนาคม พ.ศ. 2553
AutoCAD Tips : Visual LISP Tips หาผลรวมระยะเชิงเส้นจากเส้นบอกระยะและข้อความ

ในงานเขียนแบบบางครั้งเราต้องการหาผลรวมของระยะที่กำหนดไว้ในแบบ ซึ่งอาจถูกเขียนไว้ด้วยรูปวาดแบบ Dimension, Text หรือ Multiline Text
ในหัวข้อนี้เสนอคำสั่ง Sum ที่ใช้หาผลรวมของค่าในรูปวาดเหล่านี้ มีโค้ดดังนี้
;;; Sum Length from Text, Mtext and Dimension.
;;; Developed by S.Chatchawal.
(vl-load-com)
(defun c:sum (/ s j obj result *error*)
(defun *error* (msg)
(if (not (member msg (list "Function cancelled")))
(princ (strcat "\nSUM Error: " msg))
)
(princ)
)
(if (setq s (ssget (list (cons 0 "TEXT,MTEXT,DIMENSION"))))
(progn
(setq result 0.0
j -1
)
(repeat (sslength s)
(setq obj (vlax-ename->vla-object (ssname s (setq j (1+ j)))))
(cond
((member (vla-get-ObjectName obj)
(list "AcDbText" "AcDbMText")
)
(setq result (+ result (atof (vla-get-TextString obj))))
)
(T
(setq result (+ result
(vla-get-Measurement obj)
)
)
)
)
)
(princ " Sum of Length: ")
(princ result)
)
(princ "\nNo object found!!!")
)
(princ)
)
สมัครสมาชิก:
บทความ (Atom)