Lisp ingilizce versiyonda sorunsuz çalışıyor. Daha sağlıklı bir kod için aşağıdaki değişikliklere bir göz atmanızı tavsiye ederiz.
Eski Hali[code](defun c:zt() (setvar "cmdecho" 0) (setq C1 (getpoint "\nFirst corner ")) (setq C2 (getcorner C1 "\nSecond corner ")) (command "zoom" "w" C1 C2) (command "trim" "c" C1 C2 "") (while (setq P (entsel "\nSelect object to trim ")) (command P) ) (command "" "zoom" "p") (setvar "cmdecho" 1) (princ) ) [/code]
Yeni Hali:[code](defun c:zt (<font color="red">/ C1 C2 P</font id="red">) <b>;(1)</b> (setvar "cmdecho" 0) (setq C1 (getpoint "\nFirst corner<font color="red">:</font id="red"> ")) <b>;(2)</b> (setq C2 (getcorner C1 "\nSecond corner<font color="red">:</font id="red"> ")) (command "<font color="red">_.</font id="red">zoom" "<font color="red">_</font id="red">w" C1 C2) <b>;(3)(4)</b> (command "<font color="red">_.</font id="red">trim" "<font color="red">_</font id="red">c" C1 C2 "") (while (setq P (entsel "\nSelect object to trim<font color="red">:</font id="red"> ")) (command P) ) (command "" "<font color="red">_.</font id="red">zoom" "<font color="red">_</font id="red">p") (setvar "cmdecho" 1) (princ) ) [/code]
Değişiklikler:
<b>(1)</b> Fonksiyon içinde kullanılan yerel değişkenlerin başta belirtilmesi işlem bittiğinde bu değişkenleri otomatik olarak hafızadan sileceğinden daha doğrudur. Fonksiyon başlangıcında belirtilmiyen değişkenler hafızada sürekli yer işgal ederler.
<b>(2)</b> Kullancıların şaşırmaması açısından IntelliCAD'in genel iletişim alışkanlıklarının devam ettirilmesi yararlıdır. Kullanıcı, iki nokta üstüste ":" gördüğünde programın kendisinden bir girdi beklediğini bilir.
<b>(3)</b> Yazılan lisplerin tüm dillerde çalışmasını garanti etmek için komut ve altkomut adlarının başına altçizgi "_" koymak gerekir.
Yani <b>"ZOOM" "P"</b> yerine <b>"_ZOOM" "_P"</b> yazdığınızda bu komut hangi dilde olursa olsun tüm IntelliCAD (ve dahi AutoCAD)'lerde çalışır.
<b>(4)</b> <b>UNDEFINE</b> (Tanımsız Yap) komutu kullanılarak bir komutun işlem yapması engellenmiş olabilir.
Örneğin: <b>UNDEFINE INSERT</b> diyerek insert komutunu işlevsiz kılabilir ve eğer istiyorsanız <b>(defun C:INSERT ...</b> diyerek aynı isimde kendinize ait bir işlev tanımlayabilirsiniz.
Orjinal komutun çalıştığından emin olmak için komut adının başına nokta koyun: <b>.INSERT</b> gibi.
Eski haline dönmek için <b>REDEFINE INSERT</b> demeniz yeterlidir.
Hülasa:
İyi (=paranoyak) bir programcı her olasılığı düşünmelidir. Yani aşağıdaki kod her ahval ve şeraitte çalışır:
<b>(command "_.ZOOM" "_P")</b>
Düzenleyen - Destek/Support - 18/10/2002 11:13:03
|