* E Posta Adresiniz:
* Kodu Girin:

İleti Yazar
27.03.2009 15:17
47734    
yazgunesi

[70] Editör

Online Durumu

578 ileti
Teknik Ressam
Çanakkale

Aşağıda gözüken programlar bazı komutların Autolisp ile kullanımına yönelik yapılan örneklerdir. Burda yayınlanan içerikte hazır örnekler olduğu için ''uygulamalı eğitim'' diyebiliriz.

( Not : Bu sayfanın güncellenmesine devam edilmektedir, yeni olarak ders numarası ve yapılan programın açıklamalarına yer verilmiştir.. )


Ders no : 01

Kod:

; Çizgi çizme lispi
; Ekrana tıklanılan yerde çizgi çizer

(defun c:czg1 (/ yr1 yr2)

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
(command "line"  yr1 yr2 "") ; yr1 noktasından yr2 noktasına çizgi çizdik
(princ)
)

(Princ "Lisp'i çalıştırmak için >> czg1 << yazınız! [https://cizimokulu.com] ")


Yukarıdaki örnek programda Autocad ekrandakiki iki noktaya tıklayarak çizgi çizdirdik. yr1 birinci yerleşim noktası ifadesinin kısaltılmış şeklidir, yr1 bizim setq komutuyla tanımladığımız bir değişkendir.
Programımızın ilk satırında yer alan czg1 ifadesi komut ismidir.

Programımızın ilk satırı (defun c:czg1 () şeklinde de olurdu, ama işin doğrusu program içinde kullanılan değişkenler ilk satırda yazılmış olmalıdır.

Yani ilk satır (defun c:czg1 (/ yr1 yr2) bu şekilde olsa daha iyi olur.

Birde dikkate alınmaması gereken başka değişkenler olabilir, başka bir autolisp programdan veri, bilgi alınması gerekebilir. İlk satır o zaman aşağıdaki gibi olur:

(defun c:czg1 (dikkate_alma_1 dikkate_alma_2 / yr1 yr2)

(command "line" yr1 yr2 "") satırında cizgi komutunu çalıştırdık.

(princ) bu satırda, princ komutunu program bitmeden önce mutlaka yazmamız gerekir, programımızın sağlıklı çalışması için.

Not: Eğer oluşturduğumuz Autolisp programı her hangi bir hata veriyorsa, ilk önce kullanılan parantez sayılarını kontrol etmemiz gerekir. Açık parantez sayısı kadar kapalı parantez sayısı olmalıdır.
Yani şu renkli parentez simgesi -----> (((( )))))


Ders no : 02

Bu dersimizde birden fazla çizgi çizeceğiz. Özet olarak, bir önceki programı biraz daha geliştireceğiz, daha çok çizgi çizebilmek için..

Kod:

; Birden fazla çizgi çizme lispi
; Ekrana tıklanılan yerde çizgi çizer

(defun c:czg2 (/ yr1 yr2 yr3 )

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
(setq  yr3 (getpoint "\n Üçüncü nokta için ekrana TıKLa ?! :"))

(command "line"  yr1 yr2 yr3 "") ; yr1 den yr2 ye ve yr3 noktasına çizgi çizdik

(princ)
)

(Princ "Lisp'i çalıştırmak için >> czg2 << yazınız! [https://cizimokulu.com] ")


Bu oluşturulan yeni programda farklı olarak yeni bir satır ekledik ;
(setq yr3 (getpoint "\n Üçüncü nokta için ekrana TıKLa ?! :"))
Böylece üçüncü bir tokta için Autocad ekranına tıkladık.

(command "line" yr1 yr2 yr3 "") çizgi çizdirme komut satırına da yr3 değişkenini eklememiz şart.

2. Ders olarak belli bir ilerleme kaydettik ama bu aşamada birden fazla çizim objesi çizdirmek istediğimizde Autocad tabiri caizse biraz düzensiz çalışmaya başlayacak, oluşturulan programlar olması gerektiği gibi çalışmazlar, hata verebilirler..

Bu soruna çözüm olarak, Autocad için bazı sistem değişkenlerini sıfırlama, açma kapama işlemleri yapmamız gerekiyor. Örneğin osmode, cmdecho gibi..

Ders no : 03

Birden fazla çizim objesi içeren program yazmamız gerektiğinde osmode kullanacağız. En son yazılan programı tekrardan düzenliyoruz osmode kullanarak. Yani osmode program başında kapatılacak, program sonunda da tekrardan açılacak, eski haline getirilecek...

Kod:

; Birden fazla çizgi çizme lispi
; Ekrana tıklanılan yerde çizgi çizer

(defun c:czg3 (/ yr1 yr2 yr3 )

(setq oldsnap (getvar "osmode"))   ;; osmode'yi değişkene kaydettik
(setvar "osmode" 0)    ;; osmode'yi sıfırladık

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
(setq  yr3 (getpoint "\n Üçüncü nokta için ekrana TıKLa ?! :"))

(command "line"  yr1 yr2 yr3 "") ; yr1 den yr2 ye ve yr3 noktasına çizgi çizdik

(setvar "osmode" oldsnap) ;; osmodeyi ilk haline geri döndürdük
;; osmode'yi sıfırlama yapılmadan önceki haline geri çevirdik..

(princ)
)

(Princ "Lisp'i çalıştırmak için >> czg3 << yazınız! [https://cizimokulu.com] ")


Bazı Autolisp programlarda aşağıdaki satırları görebilirsiniz osmode kullanmak ile ilgili :

(setvar "osmode" 0) Osmode kapatma
(setvar "osmode" 1) Osmode açma

Bu uygulama doğrudur, fakat bir değişkene kaydedip daha sonra eski haline getirmek daha mantıklıdır. Yani şu şekilde kullanmak :

(setq oldsnap (getvar "osmode")) osmode'yi değişkene kaydettik
(setvar "osmode" 0) osmode'yi sıfırladık

Osmode sadece sıfır ve bir rakamı olarak kullanılmaz.
Osmode değeri bu şekilde de kullanılabilir --> (setvar "osmode" 33)

Osmode örneğin entpoint, mintpoint açık veya kapalı olma durumuna göre deişebilir rakam ifadesi olarak. İşte mühim olan önemli bir detay bu açıklamada sizlere anlatmaya çalıştım.


Ders no : 04

Bu dersimizde de daha fazla çizgiyi çizmiş olalım.

Kod:

; Birden fazla çizgi çizme lispi
; Ekrana tıklanılan yerde çizgi çizer

(defun c:czg4 (/ yr1 yr2 yr3 )

(setq oldsnap (getvar "osmode"))   ;; osmode'yi değişkene kaydettik
(setvar "osmode" 0)    ;; osmode'yi sıfırladık

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
(setq  yr3 (getpoint "\n Üçüncü nokta için ekrana TıKLa ?! :"))

(command "line"  yr1 yr2 "")   ;; ayrı bir satır komut olarak çizgi çizdiriyoruz
(command "line"  yr2 yr3 "")
(command "line"  yr1 yr3 "")

(setvar "osmode" oldsnap) ;; osmodeyi ilk haline geri döndürdük
;; osmode'yi sıfırlama yapılmadan önceki haline geri çevirdik..

(princ)
)

(Princ "Lisp'i çalıştırmak için >> czg4 << yazınız! [https://cizimokulu.com] ")




Kod:

; Renkli çizgi çizme lispi
; Ekrana tıklanılan yerde çizgi çizer

(defun c:czg1 (/ yr1 yr2)

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
 
(command "color" "2") ; obje rengini tanımladık..
(command "line"  yr1 yr2 "") ; yr1 noktasından yr2 noktasına çizgi çizdik

(command "-color" "Bylayer")  ; bylayer rengine geri dön ...
(princ)
)

(Princ "Lisp'i çalıştırmak için >> czg1 << yazınız! [www.autocadokulu.com] ")


Aşağıdaki lisp yukarıda gözüken lisp ile aynıdır, fakat kodlaması farklıdır..

Kod:

; Renkli çizgi çizme lispi
; Ekrana tıklanılan yerde çizgi çizer

(defun c:czg1a (/ yr1 yr2 )

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :")
       yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :")
  )
 
(command "color" "2"
         "line"  yr1 yr2 ""
)

(command "-color" "Bylayer")  ; bylayer rengine geri dön ...
(princ)
)
(Princ "Lisp'i çalıştırmak için >> czg1a << yazınız! [www.autocadokulu.com] ")


Rengini değiştirmek istediğimiz objeden önce rengi tanımlamammız gerekiyor.
(command "color" "2") >> satırı ile rengin sarı olacağını bellirtik..

Kullanılabilecek renk kodları :

1 = kırmızı
2 = sarı
3 = yeşil
4 = açık mavi
5 = mavi
6 = pembe
7 = beyaz
8 = color8 (koyu kahverengi)
9 = color9 (açık kahverengi)

Kod:

; Renkli çizgi çizme lispi
; Ekrana tıklanılan yerde çizgi çizer

(defun c:czg2 (/ yr1 r2 yr3 )

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
(setq  yr3 (getpoint "\n Üçüncü nokta için ekrana TıKLa ?! :")) 
 
(command "color" "2")
(command "line"  yr1 yr2 yr3 "")

(command "-color" "Bylayer")  ; bylayer rengine geri dön ...
(princ)
)
(Princ "Lisp'i çalıştırmak için >> czg2 << yazınız! [www.autocadokulu.com] ")


Kod:

; Renkli çizgi çizme lispi
; Ekrana tıklanılan yerde çizgi çizer

(defun c:czg3 (/ yr1 yr2 yr3)

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
(setq  yr3 (getpoint "\n Üçüncü nokta için ekrana TıKLa ?! :")) 
 
(command "color" "2")
(command "line"  yr1 yr2 yr3 "c" "") ;  >> "c"  close (kapat) demektir..

(command "-color" "Bylayer")  ; bylayer rengine geri dön ...
(princ)
)
(Princ "Lisp'i çalıştırmak için >> czg3 << yazınız! [www.autocadokulu.com] ")



Kod:

; Renkli çizgi çizme lispi
; Ekrana tıklanılan yerde çizgi çizer

(defun c:czg4 (/ yr1 yr2 yr3)

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
(setq  yr3 (getpoint "\n Üçüncü nokta için ekrana TıKLa ?! :")) 
 
(command "color" "2")        ; sarı renk
(command "line"  yr1 yr2 "") ; ilk çizgi
(command "color" "1")        ; kırmızı renk
(command "line"  yr2 yr3 "") ; ikinci çizgi
(command "color" "3")        ; yeşil renk
(command "line"  yr3 yr1 "") ; üçüncü çizgi
 
(command "-color" "Bylayer") ; bylayer rengine geri dön ...
(princ)
)
(Princ "Lisp'i çalıştırmak için >> czg4 << yazınız! [www.autocadokulu.com] ")



Kod:

; Eksen çizgisi çizme lispi (renkli)
; Ekrana tıklanılan yerde çizgi çizer

(defun c:czg5 (/ yr1 yr2)

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
 
(command  "._line" yr1 yr2 "" ) ; çizgiyi çizdik
(command  "change" "l" "" "p" "lt" "center" "c" "3" "") ; change değiştirmek demektir..
; change ile yeşil renkli eksen çizgisine dönüştürdük ..  burada >> "3" <<  olan yer bizim renk kodumuz..

(command "-color" "Bylayer")  ; bylayer rengine geri dön ...
(princ)
)
(Princ "Lisp'i çalıştırmak için >> czg5 << yazınız! [www.autocadokulu.com] ")



Kod:

; Görünmez çizgi çizme lispi (renkli)
; Ekrana tıklanılan yerde çizgi çizer

(defun c:czg6 ()

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
 
(command  "._line" yr1 yr2 "" ) ; çizgiyi çizdik
(command  "change" "l" "" "p" "lt" "hidden" "c" "2" "") ; change değiştirmek demektir..
; change ile sarı renkli hidden çizgisine (görünmez çizgi) dönüştürdük ..

(command "-color" "Bylayer")  ; bylayer rengine geri dön ...
(princ)
)
(Princ "Lisp'i çalıştırmak için >> czg6 << yazınız! [www.autocadokulu.com] ")



Kod:

; Çizgi & daire çizme lispi
; Ekrana tıklanılan yerde çizgi ve daire çizer

(defun c:czdr (/ yr1 yr2 )

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
 
(command "line"  yr1 yr2 "")
(command "circle" yr1 yr2 "")  ; yr1 = daire merkezi ; yr1 ve yr2 arası mesafe = dairenin radüs değeri

(command "-color" "Bylayer")  ; bylayer rengine geri dön ...
(princ)
)
(Princ "Lisp'i çalıştırmak için >> czdr << yazınız! [www.autocadokulu.com] ")



Kod:

; Çizgi & daire çizme lispi
; Ekrana tıklanılan yerde çizgi ve daire çizer

(defun c:czdr1 (/ yr1 yr2 )

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
 
(command "line"  yr1 yr2 "")  ; iki nokta arasına çizdik
(command "circle" yr1 yr2 "") ; dairemizi çizdik

(princ)
)
(Princ "Lisp'i çalıştırmak için >> czdr1 << yazınız! [www.autocadokulu.com] ")



Daire çizim için açıklama :

(command "circle" yr1 yr2 "") demek aslında
(command "circle" daire_merkezi çap değeri "") demektir.

Şimdi de ölçü sorarak çizim yapalım ..

Kod:

; daire çizme lispi radüse göre
; Ekrana tıklanılan yerde daire çizer

(defun c:dr2 (/ yr1 cap_degeri)

(setq  yr1 (getpoint "\n Daire merkezi için TıKLa ?! :"))
(setq  cap_degeri (getreal "\n Radüs ne kadar ? :"))
 
(command "circle" yr1 cap_degeri "")   
(princ)
)
(Princ "Lisp'i çalıştırmak için >> dr2 << yazınız! [www.autocadokulu.com] ")


Radüs ve çap değeri bazen birbirine karışabilir.. Çap değerini çap olarak çizdirmek için aşağıdaki lisp kodlama olarak daha uygundur..

Kod:

; Daire çizme lispi çapa göre
; Ekrana tıklanılan yerde daire çizer

(defun c:dr3 (/ yr1 cap1)

(setq  yr1 (getpoint "\n Daire merkezi için TıKLa ?! :"))
(setq  cap1 (getreal "\n Diameter nedir ? :"))
 
(command "circle" yr1 "d" cap1 "")
;  yukarıdaki satırda "d" ifadesi diameter diye çap olduğunu belirttim lispte..
(princ)
)
(Princ "Lisp'i çalıştırmak için >> dr3 << yazınız! [www.autocadokulu.com] ")


Kod:

; Daire ve çizgi çizme lispi
; Ekrana tıklanılan yerde çizgi ve daireler çizer

(defun c:sekil1 (/ yr1 yr2 )

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
 
(command "line"  yr1 yr2 "")  ; yr1 noktasından yr2 noktasına çizgiyi çizdik
(command "circle" yr1 yr2 "") ; daireyi merkez + radüs olarak çizdik
; dairenin radüsü = çizgi boyu
(princ)
)
(Princ "Lisp'i çalıştırmak için >> sekil1 << yazınız! [www.autocadokulu.com] ")


Kod:

; Daire ve çizgi çizme lispi
; Ekrana tıklanılan yerde çizgi ve daireler çizer

(defun c:sekil2 (/ yr1 yr2 )

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
 
(command "line"  yr1 yr2 "")  ; çizgiyi çizdik
(command "circle" yr1 yr2 "") ; daireyi merkez + radüs olarak çizdik
(command "circle" yr2 yr1 "") ; daireyi merkez + radüs olarak çizdik
 
(princ)
)
(Princ "Lisp'i çalıştırmak için >> sekil2 << yazınız! [www.autocadokulu.com] ")



Kod:

; Daire ve çizgi çizme lispi
; Ekrana tıklanılan yerde çizgi ve daireler çizer

(defun c:sekil3 ()

(setq  yr1 (getpoint "\n İlk nokta için ekrana TıKLa ?! :"))
(setq  yr2 (getpoint "\n İkinci nokta için ekrana TıKLa ?! :"))
(setq  yr3 (getpoint "\n Üçüncü nokta için ekrana TıKLa ?! :"))
 
(command "line"  yr1 yr2 "")  ; ilk çizgiyi çizdik
(command "line"  yr2 yr3 "")  ; ikinci çizgiyi çizdik
(command "line"  yr3 yr1 "")  ; üçüncü çizgiyi çizdik
 
(command "circle" yr1 yr2 "") ; daireyi merkez + radüs olarak çizdik
(command "circle" yr2 yr3 "") ; daireyi merkez + radüs olarak çizdik
(command "circle" yr3 yr1 "") ; daireyi merkez + radüs olarak çizdik
(princ)
)
(Princ "Lisp'i çalıştırmak için >> sekil3 << yazınız! [www.autocadokulu.com] ")


Kod:

; Yay çizim lispi

(defun c:yayciz ()

  (setq yr1 (getpoint "\nYay başlıngıç için Tıkla ?! : "))
  (setq yr2 (getpoint "\nYay orta nokta için Tıkla ?! : "))
  (setq yr3 (getpoint "\nYay bitiş için Tıkla ?! : "))

  (command  "arc" yr1 yr2 yr3 "") ; yayı çizdirdik
  (princ)
)
(Princ "Lisp'i çalıştırmak için >> yayciz << yazınız! [www.autocadokulu.com] ")



Kod:

; Line yerine pline kullanalım..
; Çizgi çizelim

(defun c:plciz ()

  (setq yr1 (getpoint "\n İlk nokta için Tıkla ?! : "))
  (setq yr2 (getpoint "\n İkinci nokta için Tıkla ?! : "))
  (setq yr3 (getpoint "\n Üçüncü nokta için Tıkla ?! : "))

  (command  "pline"  yr1 yr2 yr3 "")
  (princ)
)
(Princ "Lisp'i çalıştırmak için >> plciz << yazınız!")



Kod:

; 3 köşeli ücgenin çizip içini tarama lispi

(defun c:ucg2 () 
  (setq yr1 (getpoint "\nBirinci Nokta ?! : "))
  (setq yr2 (getpoint "\nİkinci Nokta ?! : "))
  (setq yr3 (getpoint "\nSon Nokta ?! : ")) 

  (command "color"  "3" "" ; çizgimizin rengini belirttik..
           "pline" yr1 yr2 yr3 "c" "" ; pline ile kapalı alan oluşturduk
   "color"  "2" "" ; taramama için renk bellirtik    
           "hatch" "u" "45" "28" "n" "l" "" ; tarama yaptık
           "redraw" "" ) ; çizimi redraw yaptırdık..
 
  (command "-color" "bylayer")  ; bylayer rengine geri dön ...
  (princ)
)
(Princ "Lisp'i çalıştırmak için >> ucg2 << yazınız!")


Yukarıda yer alan bir satırı ele alalım;

(command "line" yr1 yr2 "") çalışır bir kod olmasına karşın , tüm Autocad versiyonlarında çalışması için line komutu öncesi bazı kodlamalar yapmak gerekiiyor.
(command "._line" yr1 yr2 "") << Bu tip bir kodlama sistemi tüm Autocad versiyonları için uygundur.

yazgunesi (24.11.2016 12:34 GMT)

----------------------------------
www.cizimokulu.com

04.07.2019 14:02
87476    
yalp

[2] Girişimci

Online Durumu

10 ileti
mühendis
ankara

ÇOK GÜZEL ÖĞRETİCİ. TEŞEKKÜRLER.
DEVAMI GELİRSE ÇOK SÜPER OLUR

> 1 <
Copyright © 2004-2019 | Tüm Hakları Saklıdır | 2116 | Site haritası | İstatistikler | Hakkımızda | Kadromuz | Gizlilik | Reklam | İletişim