12 Eylül 2007 Çarşamba

entmake fonksiyonu

;entmake ile line cizen fonksiyon..
(defun line_ciz (_bas _son _layer)
(entmake (list (cons 0 "LINE")
(cons 8 _layer)
(cons 10 _bas)
(cons 11 _son)))
)
Kullanımı :
(setq p1 (list 10.0 20.0 0.0)
p2 (list 30.0 40.0 0.0)
)
(line_ciz p1 p2 "deneme")

Yukaridaki kod, line_ciz() fonksiyonunu kullanarak (10,20,0) noktasindan (30,40,0) noktasina 'deneme' isimli layer'de bir çizgi çizer. Eger çizimde 'deneme' isimli bir layer yoksa otomatik olarak oluşturulur. Bu fonksiyon asagidaki kodla ayni isi yapar.
(command "LAYER" "M" "deneme" "")
(command "LINE" p1 p2 "")
Goruldugu gibi entmake fonksiyonunu kullanan line_ciz fonksiyonu cok daha kullanisli। Ayni zamanda entmake ile cizim yaparken layer degistirmeye gerek kalmiyor। Yani mesela "0" layer'indayken "deneme" layer'ina bir cizgi ekleyebiliyoruz. Cizgi cizmek icin "deneme" layer'ina gecip cizgiyi cizip tekrar "0" layer'ina donmemize gerek kalmiyor ve (command) fonksiyonundan daha hizli calisan bir kod elde etmis oluyoruz. Entmake ile yapilabilecekler line cizmekten ibaret degil elbette, bu fonksiyonla autocad'deki herhangi bir objeyi olusturabiliriz (layer, block, text, point , polyline vs.)

; entmake ile POINT çizen fonksiyon..
(defun point_ciz (_n _lyr)
(entmake (list (cons 0 "POINT")
(cons 10 _n)
(cons 8 _lyr)
)
)
)
Kullanimi :
(point_ciz (list 10,20,30) "deneme")
Sonuc : (10,20,30) noktasina "deneme" layr'inda bir POINT çizer।
;entmake ile ARC fonksiyon..

(defun arc_ciz(_merkez _ycap _to _tf _lyr)
(entmake (list (cons 0 "ARC")
(cons 8 _lyr)
(cons 10 _merkez)
(cons 40 _ycap)
(cons 50 (angle _merkez _tf))
(cons 51 (angle _merkez _to))
) )
);_arc_ciz
;Kullanımı :
(setq m (list 10 20 0) ;merkez noktasi
r 14.14 ; yaricap
bas (list 20 30) ;başlangıç noktası
son (list 24.14 20) ; bitiş noktası
)
(arc_ciz m r bas son "deneme")
;Sonuc :
;merkezi (10,20) baslangici (20,30) bitisi (24।14,20) noktalari olan 14.14 yaricapinda bir ARC'ı "deneme" isimli layer'da çizer.

;Fonksiyon Tanımı
(defun circle_ciz(_cm _cr _clyr)
(entmake (list (cons 0 "CIRCLE")
(cons 8 _clyr)
(cons 10 _cm)
(cons 40 _cr)
)
)
)
;Kullanımı :
(setq merkez (list 10 20)
ycap 5
)
(circle_ciz merkez ycap "deneme")
;Açıklama :
;Yukarıdaki kod, merkezi (10,20) noktası olan, 5 birim yarıçapında bir 'CIRCLE' nesnesini 'deneme' isimli layer'da olusturur.
;Not : nesneleri entmake fonksiyonunu kullanarak oluşturmak programa kolaylık ve hız katttğı gibi, örneğin 'OSMODE', 'CLAYER' 'CMDECHO' gibi sistem değişkenlerinden etkilenmediginden, nesneyi cizmeden once bunları ayarlayıp nesneyi çizdikten sonra tekrar eski haline getirmek gibi angaryaları ortadan kaldırır।

;Fonksiyon Tanımı:
;;;**********************************************
(defun layer-ekle(_ad _renk _cizgitipi _cizgikalinligi)
(if (null _renk) (setq _renk 7))
(if (null _cizgitipi) (setq _cizgitipi "Continuous"))
(if (null _cizgikalinligi) (setq _cizgikalinligi -3))
(if (not (tblobjname "LAYER" _ad))
(entmake (list (cons 0 "LAYER")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbLayerTableRecord")
(cons 2 _ad)
(cons 6 _cizgitipi)
(cons 62 _renk)
(cons 70 0) ;_ layer state
(cons 290 1) ;_ plot flag
(cons 370 _cizgikalinligi) ;_ (enum) -3: Default, 0: 0.00 5: 0.05, 9:0.09,...
) )
);_if
);_layer-ekle
;;;**********************************************
;Kullanımı :
;;;**********************************************
(layer-ekle "deneme" 1 nil nil)
;;;**********************************************
;Açıklama :
; Yukarıdaki kod "deneme" isimli kırmızı renkli bir layer oluşturur. Oluşan layer'in çizgitipi default yani 'continuous', çizgi kalınlığı da default'tur.
; (cons 70 0) satırındaki değer oluşacak layer'in durumunu belirler (ON/OFF, FREEZE/THAW). bu değer ayarlanabilir hale getirilebilir. Ancak layer-ekle fonksiyonunda bu deger default, yani 0 olarak alınmıştır.
;Aynı şekilde (cons 290 1) satırı da Layer'in plot işlemine girip girmeyecegini belirler. Bu fonksiyonda bu deger de default olarak 1 alınmıştır. Yani Layer 'çizilecek'.
;çizgi kalınlığı parametresi de 'nil' olarak verilirse fonksiyon içinde default dğere ayarlanır (-3). 0.00 için 0, 0.05 için 5, 0.09 için 9,... verilir.
;Oluşturulmak istenen layer'in zaten mevcut olup olmadığı fonksiyon içinde kontrol edilir। Varsa bir işlem yapılmaz, yoksa oluşturulur.

entmake ile text yazdırmak
;;;Fonksiyon tanımı:
(defun text_ekle (_yazi _nokta _yuk _aci _yaslama _layer / _g72 _g73)
(setq CTEXTSTYLE (getvar "TEXTSTYLE"))
(cond ((= _yaslama "MR") (setq _g73 2 _g72 2))
((= _yaslama "ML") (setq _g73 2 _g72 0))
((= _yaslama "BC") (setq _g73 1 _g72 1))
((= _yaslama "TC") (setq _g73 3 _g72 1))
((= _yaslama "MC") (setq _g73 2 _g72 1))
((= _yaslama "C") (setq _g73 0 _g72 1))
((= _yaslama "BR") (setq _g73 1 _g72 2))
((= _yaslama "BL") (setq _g73 1 _g72 0))
((= _yaslama "TL") (setq _g73 3 _g72 0))
((= _yaslama "TR") (setq _g73 3 _g72 2))
(T (setq _g73 0 _g72 0))
) ;_ end of cond
(entmake (list (cons 0 "TEXT")
(cons 1 _yazi)
(cons 7 CTEXTSTYLE)
(cons 8 _layer)
(cons 10 _nokta)
(cons 11 _nokta)
(cons 40 _yuk)
(cons 50 (/ (* _aci PI) 180.0))
(cons 72 _g72)
(cons 73 _g73)
)
)
) ;_text_ekle
;;; Kullanımı :
(text_ekle "tolga" (list 10 20) 2.5 45.0 "BC" "deneme")
;;; Açıklama :
Yukarıdaki komut ; (10,20) noktasına, yuksekligi 2.5, açısı 45 birim olan 'Bottom Center' noktasına yaslamalı (Justified), 'deneme' layer'inda, 'tolga' yazısını yazar.

entmake ile LWPOLYLINE çizmek
;;;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
;;; Fonksiyon Tanımı:
(defun lwpolyline_ciz(_noklist _kalinlik _acikkapali _lyr / _nvert _opts _ele)
(setq _nvert (length _noklist)
_opts (list (cons 0 "LWPOLYLINE")
(cons 8 _lyr)
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 _nvert)
(cons 70 _acikkapali)
(cons 43 _kalinlik))
)
(foreach _ele _noklist (setq _opts (append _opts (list (cons 10 _ele)))))
(entmake _opts)
);_lwpolyline_ciz
;;;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
;;; Kullanım :
(setq plist (list (list 10 20) (list 30 40) (list 50 60)))
(lwpolyline_ciz plist 0.0 T "deneme")
;;; Sonuç :
ekrana (10,20) (30,40) ve (50,60) noktalarından geçen 0.0 kalınlıklı, kapalı ve "deneme" isimli layer'da bir lwpolyline çizer.

Hiç yorum yok: