วันพุธที่ 28 มกราคม พ.ศ. 2552

Visual LISP Tips เคล็ดลับ เขียนข้อความที่เป็นชุดเลขเรียง

คำสั่งเขียนข้อความภายใน AutoCAD ทั้ง Text และ Mtext ผู้ใช้จะต้องกรอกข้อความเข้าไปเองทั้งหมด ในงานเขียนแบบมีไม่น้อยที่บางครั้งจะใช้ชุดตัวเลขเรียง ที่อาจมีข้อความบางอย่างนำหน้าอยู่ด้วยเช่น A01-001, A01-002, A01-003, ... เป็นต้น

คำสั่ง txtinc นี้จะช่วยจัดการงานเช่นนี้ได้เป็นอย่างดี


;;; Increment Text with Prefix.
;;; Developed by S.Chatchawal , schatchawal@gmail.com

(vl-load-com)
(defun c:txtinc (/ p tmp j txt *acaddoc* *model-space*)
(if (not #prefix)
(setq #prefix "A01-")
)
(if (not #digits)
(setq #digits 3)
)
(if (not #start)
(setq #start 1)
)
(if (not #texth)
(setq #texth 100.0)
)
(setq tmp (getstring T (strcat "\nPrefix : <" #prefix "> ")))
(if (not (= "" tmp))
(setq #prefix tmp)
)
(princ "\nHow many digits? <")
(princ #digits)
(princ "> ")
(initget 6)
(setq tmp (getint))
(if tmp
(setq #digits tmp)
)
(princ "\nStart number: <")
(princ #start)
(princ "> ")
(initget 6)
(setq tmp (getint))
(if tmp
(setq #start tmp)
)
(princ "\nText height: <")
(princ #texth)
(princ "> ")
(setq tmp (getdist))
(if tmp
(setq #texth tmp)
)
(setq *acaddoc* (vla-get-activedocument
(vlax-get-Acad-Object)
)
*model-space*
(vla-get-modelspace
*acaddoc*
)
)
(if (fixdigit #start #digits)
(progn
(setq j 0)
(vla-startundomark *acaddoc*)
(while (setq p (getpoint "\nSpecify point: "))
(setq txt (strcat #prefix (fixdigit #start #digits)))
(vla-addText *model-space* txt (vlax-3D-point p) #texth)
(setq #start (1+ #start))
)
(vla-endundomark *acaddoc*)
)
(princ
"\nCannot Create this text!!! \nCheck Digit and Start number again!!!"
)
)
(princ)
)
;; Return: String
(defun fixdigit (int digit / result)
(setq result (itoa int))
(if (<= (strlen result) digit)
(progn
(while (< (strlen result) digit)
(setq result (strcat "0" result))
)
result
)
nil
)
)

ไม่มีความคิดเห็น:

แสดงความคิดเห็น