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

Visual LISP นับจำนวน block และเขียนออกไฟล์ .txt

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

หรือพวกวาล์วในงานเครื่องกลหรือประปา ก็เช่นเดียวกัน

;;; Block count
;;; Developed by S.Chatchawal, schatchawal@gmail.com
(defun c:bn (/ bk1 bkl bkj bknl L fd)
(if (setq bk1 (cdadr (tblnext "block" T)))
(progn
(setq bkl (list bk1))
(while (setq bkj (tblnext "block"))
(setq bkl (append bkl (list (cdadr bkj))))
)
(setq bknl nil)
(foreach L bkl
(setq bknl
(append
bknl
(list (cons L (sslength (ssget "x" (list (cons 2 L)))))
)
)
)
)
(if bknl
(progn
(setq fd (open "C:\\BlockCount.txt" "a"))
(princ (strcat "\n" (getvar "dwgprefix") (getvar "dwgname"))
fd
)
(foreach L bknl
(princ (strcat "\n" (car L) "," (itoa (cdr L))) fd)
)
(close fd)
(princ
"\nFinished Count. Write the result to C:\\BlockCount.txt file."
)
)
)
)
(princ "\nNo block found!!!")
)
(princ)
)

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

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