แสดงบทความที่มีป้ายกำกับ LISP แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ LISP แสดงบทความทั้งหมด

AreaText ถามมา-ตอบไป

จากเมล์ครับ ขอสอบถามเกี่ยวกับ area text ครับ

     จะแก้โค้ด อย่างให้ให้ตัวหนังสือบอกมาแค่ตัวเลข
ผมไม่ต้องการ ในโค้ดที่ให้มา มีหน่วยเป็น ตร.ฟุต
ยกตัวอย่างเช่น ผมวาดรูปสี่เหลี่ยม 1 x 1 หน่วย
พอใช้คำสั่ง at แล้วกดเลือกพื้นที่นั่น มันบอกเป็น 0.01 ตร.ฟุต 
(ผมไม่ต้องการรูปแบบนี้ครับ)
อยากให้ออกมาเท่ากับ 1 (ตร.หน่วย) แค่นั้นเอง
ต้องแก้ code อย่างไรบ้างครับ

;;; AreaText.LSP ver 2.0
;;; Select a polyline and where to place the text
;;; Sample result: 2888.89 SQ. FT.

;;; By Jimmy Bergmark
;;; Copyright (C) 2007-2009 JTB World, All Rights Reserved
;;; Website: www.jtbworld.com
;;; E-mail: info@jtbworld.com
;;; 2007-09-05 - First release
;;; 2009-08-02 - Updated to work in both modelspace and paperspace

;;; Uses TEXTSIZE for the text height
(defun c:AT (/ entObject entObjectID InsertionPoint ad)
(vl-load-com)
(setq entObject (vlax-ename->vla-object(car (entsel)))
entObjectID (vla-get-objectid entObject)
InsertionPoint (vlax-3D-Point (getpoint "Select point: "))
ad (vla-get-ActiveDocument (vlax-get-acad-object))
)
(vla-addMText (if (= 1 (vla-get-activespace ad))
(vla-get-modelspace ad)
(if (= (vla-get-mspace ad) :vlax-true)
(vla-get-modelspace ad)
(vla-get-paperspace ad)
)
)
InsertionPoint 0.0 (strcat
"%<\\AcObjProp Object(%<\\_ObjId " (rtos entObjectID 2 0) ">%).Area \\f \"%pr2%lu2%ct4%qf1 SQ. FT.\">%"
))
)
โดยส่วนตัวแล้วผมยังอ่อนต่อ Visual Lisp อย่างมากครับ แต่เข้าใจว่าการปรับแก้ไข Code ก็ปรับที่ strcat ครับ โดยเอาหน่วย(สีแดงออกไป) การปรับแก้มากกว่านี้คงต้องให้ผู้รู้ที่เก่งกว่ามาช่วยตอบครับ
แต่ผมขอเสนอ AutoLISP ของผมที่เขียนแบบง่ายๆแต่ก็สามารถใช้ได้เช่นเดียวกันครับ
(defun sel_ob()
   (while (not en)
   (setq en (car (entsel "\nSelect Entities: ")))
   (if (not en)
   (prompt "\nNo entity selected --- Please Try Again : "))
   )
 )

(defun c:at1 (/ en ar aw th an pt)
 (sel_ob)  (Command "area" "entity" en)
 (setq ar  (getvar "area"))
 (setq atext (strcat "Area= " (rtos ar) " sq.m."))
 (setq pt (getpoint "\nText point :"))
 (setq th "0.2")
 (setq an "0")
 (command "text" pt th an atext)
(princ)
)

คิดว่าน่าจะพอแก้ขัดแก้ไขได้บ้างนะครับ
ขอขอบคุณ คุณณัฐวุฒิ ที่ถามมาครับ

ลบจุด Point บน Drawing

AutoLisp erasnode.lsp อันนี้ได้มานานมาแล้วครับ จำไม่ได้แล้วว่าไปเอามาจากไหน เอามาให้ลองใช้กันดูครับ เพราะจุด Point ที่เรามองไม่เห็นมักจะซ่อนอยู่ในงาน Drawing ของเรา หากมีมากก็จะไปกินพื้นที่ไฟล์งานของเรามากครับ Download ที่นี่ครับลองใช้กัน (ผมยังไม่ได้ลองใช้เลย เก็บไว้นานจนลืม อิอิ )

AutoLISP Setup Paper


Setup Paper



AutoLISP Setup Paper อันนี้เป็นอันที่ผมเขียนขึ้นมาใช้งานนานมากแล้วครับ ลองใช้คำสั่งแบบง่ายๆก่อน แล้วก็ค่อยๆปรับให้รับค่าตัวแปรที่เรากำหนดให้ เมื่อใช้งานได้ก็ตัดขั้นตอนกำหนดโดยกำหนดให้เป็นตัวแปรที่คงที่ แล้วใช้ scale เป็นการปรับแต่ง สุดท้ายก็นำเอา Dcl มาใช้ประกอบเพื่อสะดวกในการใช้งาน อธิบายมายาวเดี๋ยวไม่เข้าใจกัน ลองโหลด ไปดูกันเองดีกว่า Download SetupPaper ที่นี้ครับ 


โหลดแล้วมาดูกันครับจะได้เข้าใจมากขึ้น โดยผมกำหนดค่า pp ให้เป็นเงื่อนไขให้เลือก เป็น A4,A3,A2,A1 โดยเลือกตัวใดตัวหนึ่ง แล้วให้ไปใช้ฟังก์ชั่นของตัวที่ได้เลือก (ฟังก์ชั่น get_A*) ในฟังก์ชั่นจะกำหนดจุดเป็นค่าตัวเลข โดยใช้ เครื่องหมาย ' แล้วระบุค่าในแกน XY ทั้ง 4 จุด เราก็เขียนเส้นปิดสี่เหลี่ยมได้แล้ว ในฟังก์ชั่น draw จะกำหนดจุด pt1,pt2.pt3 และ pt4 โดยใช้ฟังก์ชั่น list แล้วกรองเอาค่าตัวแรกหรือตัวที่สอง โดยใช้ car และ cadr แล้วใช้คำสั่ง Pline เขียนเส้นปิด โดยผมจะกำหนด scale เป็นการรับค่าจาก ratio ที่ Dialog box แล้วให้เก็บค่าในตัวแปร sc ซึ่งจะต้องแปลงค่าตัวอักษร String เป็น ตัวเลขก่อนโดยใช้ฟังก์ชั่น rtos เมื่อเขียนกรอบกระดาษแล้ว ผมก็ให้ใช้คำสั่ง zoom all เพื่อให้เห็นภาพทั้งหมด เป็นการจบคำสั่งครับ ลองนำไปใช้งานดูนะครับ


คำสั่งชุดนี้โดยส่วนตัวแล้วผมจะใช้ในเวลาที่จะกำหนดกระดาษและมาตราส่วนของงานที่จะเขียนโดยให้มีกรอบขึ้นมาเป็นตัวกำหนดก่อน เพื่อจะคิดคร่าวๆว่าผมจะใช้ขนาด Dimension และ text ขนาดประมาณไหนได้ แต่หลังๆมานี้ไม่ค่อยได้ใช้เท่าไหร่นักครับ เพราะไม่ได้แปะไว้ใน Pulldown menu ไว้วันหลังจะมาบอกว่าการนำ AutoLISP ไปแปะไว้ต้องทำยังไง จะได้ไม่ต้องพิมพ์คำสั่งที่ command lineครับ

AutoLISP Setup Paper




AutoLISP คือ

หลายๆคนที่เคยใช้โปรแกรม AutoCad คงพอที่จะรู้จัก ว่า LISP คืออะไร แต่สำหรับบางคนที่ไม่รู้ นี่เลยครับ
Lisp Programming Language เป็นภาษาคอมพิวเตอร์ขั้นสูง นอกจากนำไปใช้ในการเขียนโปรแกรมทั่วไปแล้วยังสามารถใช้ได้ดีในการประมวลผลสัญลักษณ์ ดังนั้นจึงถูกใช้อย่างแพร่หลายทางด้านปัญญาประดิษฐ์ นอกจากนี้ ในภาษาลิสป์ ไม่จำเป็นต้องประกาศชนิดตัวแปรที่ใช้ในโปรแกรม ดังนั้นจึงง่ายในการเขียนและเรียนรู้
AutoLISP นี้ส่วนมากจะใช้ประกอบหรือเป็นโปรแกรมเสริมชุดคำสั่งให้กับโปรแกรม AutoCAD ในส่วนที่จะต้องใช้คำสั่งเดิมๆอยู่บ่อยครั้ง หลายครั้ง จนเสียเวลา AutoLISP นี้แหล่ะ ที่ทำให้ประหยัดระยะเวลาโดยการรวมชุดคำสั่งต่างๆที่ต้องการเข้าไว้ด้วยกัน เพื่อความสะดวกในการใช้งานและมีความรวดเร็วในการทำงาน

คำสั่ง AutoLISP เพื่อใช้เขียนเสา

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

จนสุดท้ายได้ไปเจอที่มีคนอื่นได้เขียนเป็น Dialog box ไว้เพื่อให้ใช้งานได้สะดวกยิ่งขึ้น



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

คลังบทความของบล็อก