วันอาทิตย์ที่ 6 กุมภาพันธ์ พ.ศ. 2554

AutoCAD Tips : Visual LISP / AutoLISP ถามมา-ตอบไป เส้นบอกระยะ ...

มีท่านหนึ่งอีเมลมาถาม โดยสรุปได้ใจความว่า

"เรื่องของเลเยอร์ (Layer) มีทูล Make object's Layer Current หรือคำสั่ง LAYMCUR ที่คลิกบนรูปวาดแล้ว
ให้ผลกำหนดเลเยอร์ปัจจุบัน (Current Layer) ตามรูปนั้นได้เลย แต่กับเรื่องของเส้นบอกระยะ (Dimension) กลับไม่เห็นมีคำสั่งทำนองนี้เลย ..."

"พอแก้ไขแบบเพิ่มเติม จะเขียนเส้นบอกระยะใหม่เข้าไป ที่ใช้สไตล์เดิมที่มีอยู่แล้ว ตามแบบเส้นบอกระยะที่มีอยู่ ต้องหาก่อนทุกครั้ง ว่าที่มีอยู่เดิมใช้สไตล์ชื่ออะไรก่อน แล้วค่อยไปกำหนดให้เป็นตัวปัจจุบัน (Current Dimension Style) แล้วค่อยเลือกทูลสำหรับเขียนเส้นบอกระยะตามที่ต้องการ"

ดูวิธีหาสไตล์ของเส้นบอกระยะจากรูปนี้


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

ทางออกหนึ่งที่ทำได้และได้ผลดี คือเขียนคำสั่งขึ้นใหม่เองเลย ในตัวอย่างนี้เขียนด้วย Visual LISP มีโค้ดดังนี้

;; Set the current dimension style same as the selected entity.
(defun c:dd (/ e obj dimensions *error*)
(defun *error* (msg)
(if (not (member msg (list "Function cancelled")))
(princ (strcat "DIMMC Error: " msg))
)
(setvar "cmdecho" 1)
(princ)
)
(if (setq e (entsel "Select a dimension: "))
(progn
(setq obj (vlax-ename->vla-object (car e)))
(if (wcmatch (vla-get-ObjectName obj) "*Dimension")
(progn
(setvar "cmdecho" 0)
(command ".-dimstyle"
"r"
(setq dimensions (vla-get-StyleName obj))
)
(setvar "cmdecho" 1)
(foreach msg (list "\nSet the current dimension style to "
(strcase dimensions)
"."
)
(princ msg)
)
)
(princ "\n!!!Not Dimension!!!")
)
)
(princ "\nNo object found!!!")
)
(princ)
)

การนำไปโค้ดไปใช้ให้ศึกษาเพิ่มเติมจากหนังสือ AutoCAD ในบ้านเราที่มีเป็นจำนวนไม่น้อยเลย ที่กล่าวถึงวิธีเหล่านี้ และอาจพัฒนาไปถึงการสร้างไว้เป็นทูล (Tool) ใหม่ขึ้น เพื่อเรียกถึงคำสั่ง DD นี้

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

Windows 7 ออก Service Pack 1 RTM แล้ว


Windows 7 ออก Service Pack 1 RTM แล้ว หลังอัปเดตแล้ว ดูรายละเอียดโดยกดคีย์ Win พิมพ์ Winver กด Enter จะเห็นรายการแจ้งเป็น Microsoft Windows Version 6.1 (Build 7601: Service Pack 1)

มีข้อควรระวังตอน Update อยู่บ้าง พบว่าในบางกรณีทำให้เครื่อง Start ไม่ได้ ต้องใช้แผ่นติดตั้ง เพื่อทำการแก้ไขหรือ Repair และก็ผ่านเข้าไปใช้ได้ตามปกติ

สำหรับ Build number ดูจาก Registry Editor ได้ตามรูปนี้

วันพุธที่ 15 ธันวาคม พ.ศ. 2553

AutoCAD TIPS : AutoLISP Visual LISP ถามมา-ตอบไป วางดวงโคมรอบแนวเส้นโค้ง

มีอีเมลจากท่านหนึ่งถามมาถึงเรื่องการวางดวงโคมฟลูออเรสเซนต์แบบหลอดยาว ไม่ใช่หลอด Compact โดยวางให้มีส่วนซ้อนกันบริเวณขั้วหลอด เพื่อใช้ฝังซ่อนบนฝ้าในฝ้าหลุม หรือกล่องที่มีแผ่นกระจกฝ้ากรุอีกที แต่เพื่อไม่ให้เห็นเงาดำของขั้วหลอด แทนที่จะวางเรียงไปแบบปลายชนกัน จึงต้องเอียงเล็กน้อย ให้ส่วนขั้วหลอดเกยกัน

ขอนำมาตอบรวมไว้ในบล็อก เพื่อเป็นประโยชน์กับท่านอื่นด้วย

ขั้นตอนมีดังนี้

1. วาดแนวเส้นตามที่ต้องการ จะเป็นเส้นตรง หรือเส้นโค้งแบบเต็มวงกลม วงรี ส่วนของเส้นโค้งจากคำสั่ง ARC ก็ได้

2. สร้างบล็อก (Block definition) ของดวงโคม ให้วางแนวยาวที่มุม 0 องศา หรือขนานแกน X เช่นใช้คำสั่ง Rectang ป้อนจุดที่ 0,0 และ 1.2,0.06 สำหรับหลอดฟลูออเรสเซนต์ 36 วัตต์ หรือตามแบบที่ต้องการ ทั้งนี้ให้กำหนดจุดวาง (Insertion Point) ไว้ที่ จุดกึ่งกลางของด้านทางซ้าย ดูรูปประกอบ

3. ใช้คำสั่ง MEASURE ตามพรอมต์ดังนี้

Command: measure
Select object to measure: [คลิกเลือกรูปวาดเส้นตรงหรือเส้นโค้ง]
Specify length of segment or [Block]: [พิมพ์ B กด ENTER]
Enter name of block to insert: [ใส่ชื่อบล็อกที่ต้องการ เช่น FL36W]
Align block with object? [Yes/No] : [กด ENTER รับตัวเลือก Y]
Specify length of segment: [ใส่ระยะ กรณีเกย 10 ซม. สำหรับหลอดยาวนี้ให้ป้อนด้วยค่าที่หักระยะเกยกันแล้ว เช่น 1.1 สำหรับหลอด 36 วัตต์]

*** เคล็ดลับของเรื่องนี้ อยู่ที่ระยะในพรอมต์ ให้ป้อนด้วยค่าระยะความยาวของดวงโคมที่หักลบด้วยระยะที่จะให้ซ้อนกันแล้ว ในส่วนที่จะไม่ให้เกิดเงาดำของขั้วหลอด ***


บางกรณีอาจยังมีช่องว่าง เติมช่องว่างที่ยังเหลือ ที่คำสั่งยังไม่ใส่ไว้ให้ เนื่องจากระยะที่เหลือสั้นกว่าค่าที่ป้อนไว้ หากเติมด้วยอีกหลอดไม่ได้ ก็อาจเติมด้วยหลอดไฟแบบที่สั้นลง เช่น 18 วัตต์ จำนวนตามเหมาะสม

วันอาทิตย์ที่ 28 พฤศจิกายน พ.ศ. 2553

AutoCAD: Visual LISP, AutoLISP การนำ ID point ไปใช้

จากบทความที่แล้วที่เขียนและเผยแพร่คำสั่ง IDP ได้มีท่านหนึ่งนำไปใช้ในงานจริง และเสนอแนะสิ่งที่ควรปรับปรุง โดยนำไปใช้ในงาน CNC (Computer Numerical Control) แทนการใช้โปรแกรมเฉพาะสร้าง G-code เห็นว่าเป็นตัวอย่างประยุกต์ที่น่าสนใจดี และเจ้าของไฟล์ตัวอย่างได้อนุญาตแล้ว จึงนำภาพบางส่วนมาแสดงเอาไว้ในที่นี้


ท่านที่สนใจจะรับ IDP.VLX นี้ไปใช้งานบ้าง ส่งอีเมลมารับไปใช้กันได้ครับ ด้วยความยินดี

ข้อมูลเพิ่มเติม: สำหรับท่านที่ไม่ทราบถึงเรื่องของ CNC และ G-code อ่านตามลิงก์ข้างล่างนี้ได้
http://en.wikipedia.org/wiki/G-code
http://en.wikipedia.org/wiki/Numerical_control

วันอังคารที่ 16 พฤศจิกายน พ.ศ. 2553

AutoCAD TIPS : AutoLISP Visual LISP ถามมา-ตอบไป เขียนข้อความแสดงจุดยอดหรือพิกัด





อีเมลอีกฉบับถามถึงคำสั่งเขียนข้อความ (TEXT) ที่แสดงถึงจุดยอด (vertices) หรือพิกัด (Coordinate) ของรูปวาดเส้นตรงและเส้นโค้งต่างๆแบบอัตโนมัติ

จึงพัฒนาคำสั่ง IDP ขึ้น มีพรอมต์ดังนี้

Command: idp
Developed by S.Chatchawal, schatchawal@gmail.com
Text Height: <10> พิมพ์ค่าความสูงตัวอักษรที่ต้องการ เช่น .3 แล้วกด ENTER
Select objects: เลือกรูปวาดตามวิธีมาตรฐานใน AutoCAD
เช่น พิมพ์ ALL กด ENTER สำหรับรูปวาดทั้งหมด หรือคลิกเลือกทีละเส้น หรือลากกรอบครอบ หรือ
ลากกรอบตัด เป็นต้น

Select objects: เลือกครบแล้วกด ENTER เพื่อจบคำสั่ง

คำสั่ง IDP นี้จะเขียนข้อความในรูป X,Y ให้ตามตำแหน่งจุดยอดของรูปวาดที่เลือก จำนวนตำแหน่งทศนิยมที่แสดงถูกใช้ตามค่ากำหนด UNITS หรือตัวแปรระบบ LUPREC ที่ควบคุมความละเอียดของค่าบันทึกระยะเชิงเส้น (Linear Length) ของพื้นที่วาดรูป

ท่านที่สนใจสามารถอีเมลมารับไฟล์นี้ไปใช้กันได้ครับ

AutoCAD TIPS : AutoLISP Visual LISP ถามมา-ตอบไป Profile extrude



อีเมลฉบับหนึ่งถามหา LISP ขึ้นรูป โดยดันขึ้นรูปหรือ Extrude ไปตาม Path ที่สร้างไว้ก่อนแล้ว เช่น 2D Polyline จากคำสั่ง Pline และ 3D Polyline จากคำสั่ง 3DPoly

ขอนำมาตอบตรงนี้เพื่อเป็นประโยชน์กับอีกหลายท่านด้วยแล้วกัน

โดย Profile เป็นหน้าตัดรูปสี่เหลี่ยมผืนผ้า ให้กำหนดขนาดด้านกว้างและยาวได้

จึงได้พัฒนาคำสั่ง RRR ขึ้น มีพรอมต์ดังนี้

Command: RRR
Developed by S.Chatchawal, schatchawal@gmail.com
Rectangular x size: <1> ใส่ขนาดแนว x ที่เป็น Profile หรือหน้าตัดของรูปสี่เหลี่ยม
Rectangular y size: <1> ใส่ขนาดแนว y ที่เป็น Profile หรือหน้าตัดของรูปสี่เหลี่ยม
Select path near the end side: คลิกบน path ที่มาจากคำสั่ง Pline หรือ 3DPoly ที่สร้างไว้ก่อนแล้ว
Select path near the end side: คลิก path ได้อีกเรื่อยๆ
Select path near the end side: จบคำสั่งให้กด ENTER

ท่านที่สนใจอีเมลมารับไฟล์นี้ไปลองใช้กันได้ครับ

วันจันทร์ที่ 8 พฤศจิกายน พ.ศ. 2553

AutoCAD Tips: AutoLISP / Visual LISP: HOOK LINE เส้นตะขอ


วันนี้เปิดอีเมลมา มีท่านหนึ่งโพสต์มาถามเรื่องการเขียนเส้นตะขอหรือ Hook Line เห็นว่าน่าจะมีประโยชน์กับอีกหลายท่าน จึงขอนำมาโพสต์ตอบตรงนี้แล้วกัน

Hook Line ใช้กันทั่วไปในงานเขียนแบบแปลนไฟฟ้าหรือตามแต่ที่จะนำไปประยุกต์ใช้งาน มีรูปเป็นเส้นตรงพร้อมปลายงอทำมุมทั้งสองด้าน ตามรูปข้างต้น ใช้กับกรณีแนวดวงโคมเป็นแถวตรงยาว นอกจากการโยงด้วยแนวเส้นโค้งแบบรูปวาด ARC ใน AutoCAD

กรณีไม่ใช้การเขียนโปรแกรมเข้าช่วย อาจต้องเริ่มต้นจากสร้างเส้นร่างเป็นแนวคู่ขนานเอาไว้ เพื่อให้ได้ระยะที่สม่ำเสมอตลอดแนว กำหนดจุดโดย

จุดที่ 1 คลิกเลือก
จุดที่ 2 ตามด้วยพิมพ์ค่า @ระยะ<มุม
จุดที่ 3 อาจใช้ความสามารถ Object snap: Parallel จับแนวที่ร่างไว้ แล้วลากแนวออกไป พิมพ์ค่าระยะที่ต้องการ
จุดที่ 4 พิมพ์ค่า @ระยะ<มุม โดยค่ามุมตอนนี้เป็นค่าลบของมุมในจุดที่ 2

สังเกตว่าการกำหนดจุดที่ 3 จะมีปัญหาเรื่องการกำหนดระยะพอสมควร อาจต้องทำระยะเป็นเส้นร่างเอาไว้ก่อน

ในบทความนี้จึงขอเสนอคำสั่ง HL ที่ใช้วาดเส้นตะขอนี้ โดยกำหนดค่าตามพรอมต์ดังนี้

Command: พิมพ์ HL กด ENTER
Developed by S.Chatchawal, schatchawal@gmail.com.
Hook angle: <45.00> พิมพ์ค่ามุม (จะถูกใช้สร้างเส้นทำมุมกับจุดเริ่มและจุดสิ้นสุด)
Hook length: <0.50> พิมพ์ค่าระยะของตะขอหรือเส้นหักมุม
Hook fillet radius: <0.15> พิมพ์ค่ารัศมีมนมุมที่จุดหักงอ
Specify first point: คลิกจุดเริ่มต้น
Specify next point: คลิกจุดถัดไป
Specify next point or [Undo]: คลิกจุดไป ได้อีกเรื่อยๆ จบด้วยการกด ENTER

กรณีต้องการยกเลิกเส้นที่เพิ่งวาดไป โดยยังค้างอยู่ในคำสั่ง HL ให้กด U ตามด้วย ENTER ได้

ด้วยการใช้คำสั่ง HL นี้แทนการเขียนด้วยคำสั่งปกติใน AutoCAD จะช่วยลดเวลาได้เป็นอย่างมาก และยังได้เส้นที่มีระยะห่างสม่ำเสมอเป็นอย่างดี โดยไม่ต้องมีเส้นร่างใดๆกำกับไว้ก่อนเลย

ภาพขยายแสดงส่วนที่ถูกมนมุม (Fillet) ที่จุดหักมุม

ท่านที่สนใจสามารถอีเมลมารับไฟล์ HOOKLINE.VLX นี้ไปใช้กันได้