"Lisp içinden başka komut çalıştırmak" olarak ifade etmeyin ve düşüncenizi böyle sınırlamayın. "Bir Lisp fonksiyon (main function diyelim) içinden, başka bir Lisp fonksiyonu (Subroutine Function diyelim) çalıştırmak" şeklinde düşünürseniz çözümü daha iyi kavrama şansınız olur.
Bahsettiğimiz Ana fonksiyon ve Çağırılan fonksiyonu aynı Kod iiçinde (aynı Lisp dosyasında) fakat biribirinden ayrı olarak tanımlamalısınız. Basitçe örneklemek gerekirse;
Kod:
;;; Ana Fonksiyon
(defun c:olk ()
(princ "\nOluğu Seçiniz..")
(setq nt1 (getpoint "\nÜst köşe?"))
****
(gt Arguman1 Arguman2) ;;; İstenen argümanlarla gt fonksiyonunu çalıştırma.
****
(get Arg01 Arg02) ;;; Başka argümanlarla gt fonksiyonunu tekrar çalıştırma.
****
(princ)
) ;;; ... end of defun
;;;
;;; Çağırılan Fonksiyon
(defun gt (ArgX ArgY /)
****
) ;;; ... end of defun
Çağırılan fonksiyon için (defun c:gt () ... değil doğrudan (defun gt () ... kullandığıma yani çağırılan fonksiyonu Global Function yapmadığıma dikkat ediniz.
aynı lisp dosyasında tanımlanması gerekiyor.. tamam. Ben ayrı olarak çağırmak istemiştim bu olmuyor,. demekki..
peki hocam; seçilen bu line ın uzunluğunu veren kodu ne şekilde yazmalıyım.. seçimi yaptırıyorum ve lisp sonlanıyor. buna ek olarak seçilenin uzunluğunu veren satırlar nasıl olmalı..?
Seçilen line nesnelerinin uzunluğunu iki şekilde hesaplayabilirsin.
Ya autolisp yada visuallisp.
Ancak dikkat edilecek bir nokta var. O da, tek nesne mi, yoksa çoklu nesne mi?
Seçim işleminden sonra uzunluk hesaplamalarını bir girdi içerisinde saklıyorsan hiçbir sıkıntı olmaz. Bu değeri istediğin yerde kullanabilirsin. İşlem sonucunda bu değeri istesen kullanıcıının görmesini sağlayabilirsin.
Bununla ilgili basit bir kod:
Kod:
(vl-load-com)
(setq ent (entsel "\nNesne seç:"))
(setq data (vlax-ename->vla-object (car ent)))
(setq uzunluk (vla-get-length data))
(princ uzunluk)