10.01.2012 16:47    

mayyaq61
(defun c:a ()
(setq pt1 '(0 0 ))
(setq pt2 '(210 0 ))
(setq pt3 '(0 297 ))
(setq pt4 '(210 297 ))
(setq pt5 '(20 7 ))
(setq pt6 '(203 7 ))
(setq pt7 '(20 290 ))
(setq pt8 '(203 290 ))
(setq pt9 '(20 42 ))
(setq pt10 '(203 42 ))
(setq pt11 '(120 42 ))
(setq pt12 '(120 22 ))
(setq pt13 '(148 7 ))
(setq pt14 '(148 22 ))
(setq pt15 '(105 42 ))
(setq pt16 '(105 22 ))
(setq pt17 '(85 42 ))
(setq pt18 '(85 22 ))
(setq pt19 '(55 42 ))
(setq pt20 '(55 22 ))
(setq pt21 '(40 42 ))
(setq pt22 '(40 7 ))
(setq pt23 '(20 22 ))
(setq pt24 '(203 22 ))
(setq pt25 '(20 37 ))
(setq pt26 '(120 37 ))
(setq pt27 '(20 32 ))
(setq pt28 '(105 32 ))
(setq pt29 '(20 27 ))
(setq pt30 '(105 27 ))
(setq pt31 '(20 17 ))
(setq pt32 '(40 17 ))
(setq pt33 '(148 17 ))
(setq pt34 '(203 17 ))

(command "._line" pt1 pt2 "")
(command "._line" pt1 pt3 "")
(command "._line" pt2 pt4 "")
(command "._line" pt4 pt3 "")
(command "._line" pt5 pt6 "")
(command "._line" pt5 pt7 "")
(command "._line" pt7 pt8 "")
(command "._line" pt8 pt6 "")
(command "._line" pt9 pt10 "")
(command "._line" pt11 pt12 "")
(command "._line" pt13 pt14 "")
(command "._line" pt15 pt16 "")
(command "._line" pt17 pt18 "")
(command "._line" pt19 pt20 "")
(command "._line" pt21 pt22 "")
(command "._line" pt23 pt24 "")
(command "._line" pt25 pt26 "")
(command "._line" pt27 pt28 "")
(command "._line" pt29 pt30 "")
(command "._line" pt31 pt32 "")
(command "._line" pt33 pt34 "")
)

Lisp antet çiziyor kordinatlara göre de.Ben istediğim tam anlamıyla 1.0 kordinadinda olan çizginin ucuna ve ya sonuna ve ya ortasına 10 20 30 birim çizgi çizdirebilir miyim?

10.01.2012 19:06    

ProhibiT
"Lisp antet çiziyor" demişsiniz. Buna Lisp denmez, olsa olsa script olur. Böyle bir şey yazmak yerine bir kere çizdiğiniz Antet'i block yapın veya dxfout ile bir dosyaya yazdırın, istediğiniz yere insert edin veya dxfin ile alıp istediğiniz noktaya yerleştirin.

İlle de AutoLisp kullanmak istiyorsanız, ya da bahsettiğiniz detayları öğrenmek istiyorsanız, yanlış bir örnekten yola çıkıp boşuna çaba harcamayın, şu fonksiyonu bir deneyin ve inceleyin derim.
Kod:

(write-line "\nPrepared by: M. Şahin Güvercin - www.autocadokulu.com")
(defun c:TitLe (/ b DrgOb onK nnK)
  (setvar "cmdecho" 0) (command "_.undo" "group") (vl-load-com)
  (setq b (entlast) DrgOb (ssadd) onK '(210 0 0))
  (mapcar '(lambda (p1) (entmake p1)) (list
            (list '(0 . "LwPoLyLine") '(100 . "AcDbEntity") '(67 . 0)
                  '(100 . "AcDbPolyline") '(90 . 4) '(70 . 1)
                  '(10 0 0) '(40 . 0) '(41 . 0) '(42 . 0) '(91 . 0)
                  '(10 210 0) '(40 . 0) '(41 . 0) '(42 . 0) '(91 . 0)
                  '(10 210 297) '(40 . 0) '(41 . 0) '(42 . 0) '(91 . 0)
                  '(10 0 297) '(40 . 0) '(41 . 0) '(42 . 0) '(91 . 0))
            (list '(0 . "LwPoLyLine") '(100 . "AcDbEntity") '(67 . 0)
                  '(100 . "AcDbPolyline") '(90 . 4) '(70 . 1)
                  '(10 20 7) '(40 . 0) '(41 . 0) '(42 . 0) '(91 . 0)
                  '(10 203 7) '(40 . 0) '(41 . 0) '(42 . 0) '(91 . 0)
                  '(10 203 290) '(40 . 0) '(41 . 0) '(42 . 0) '(91 . 0)
                  '(10 20 290) '(40 . 0) '(41 . 0) '(42 . 0) '(91 . 0))
            (list '(0 . "Line") '(10 20 42) '(11 203 42))
            (list '(0 . "Line") '(10 120 42) '(11 120 22))
            (list '(0 . "Line") '(10 148 7) '(11 148 22))
            (list '(0 . "Line") '(10 105 42) '(11 105 22))
            (list '(0 . "Line") '(10 85 42) '(11 85 22))
            (list '(0 . "Line") '(10 55 42) '(11 55 22))
            (list '(0 . "Line") '(10 40 42) '(11 40 7))
            (list '(0 . "Line") '(10 20 22) '(11 203 22))
            (list '(0 . "Line") '(10 20 37) '(11 120 37))
            (list '(0 . "Line") '(10 20 32) '(11 105 32))
            (list '(0 . "Line") '(10 20 27) '(11 105 27))
            (list '(0 . "Line") '(10 20 17) '(11 40 17))
            (list '(0 . "Line") '(10 148 17) '(11 203 17))))
  (while (if b (setq b (entnext b)) (setq b (entnext))) (ssadd b DrgOb))
  (while (/= 3 (car (setq nnK (grread T 4 0))))
    (setq nnK (cadr nnK) n (sslength DrgOb))
    (while (> (setq n (1- n)) -1)
      (vla-transformby (vlax-ename->vla-object (ssname DrgOb n)) (vlax-tmatrix
          (list (list 1 0 0 (- (car nnK) (car onK)))
            (list 0 1 0 (- (cadr nnK) (cadr onK)))
            (list 0 0 1 (- (caddr nnK) (caddr onK))) (list 0 0 0 1)))))
    (setq onK nnK))
  (command "_.undo" "e") (prin1)
)

11.01.2012 14:45    

Travaci
Sorum anlaşılmadı sanırım

(defun c: A()(command "DIMALIGNED")(princ))

(defun c: C()(command "DIMCONTINUE")(princ)) .....

Gibi kendime kısa yolların oluştuğu bir lisp hazırladım fakat acad.pgp dosyasında mevcut olmayan komutlar mesela breakline ı

(defun c: BB()(command "BREAKLINE")(princ)) yaptığımda olmuyor illa breakline komutunu acad.pgp yede eklemem gerekiyor.?

Eklemeden yapmamın bir yolu varmı ?

11.01.2012 14:59    

mayyaq61
Ben anlatamadım herhalde :S

1:) Amaçım lisp yapmak değil . Sadece demek istediğim verdiğim kordinatlara göre antet çiziyor diy mi .. Evet Ben İlk bir çizgi çizdigimde

onun ucuna ve ya sonuna 50 20 30 verdiğim birim çizgi cizsin..

2:) (defun c:a()
(setq m (getpoint "MEtrik ?:"))
(setq l (getreal "Vida boyu ?:"))
(setq a1 '(0 0 ))
(command "._line" a1 m"")
(setq bu (ssget '(1 0)))
(setq f (ssname bu 0))
(entget f)
(setq na(cdr (assoc 10 (entget f))))
(setq ılk (polar na (angtof "90.0") l))
(command "._line" na ılk "")
(princ)
)
yukarıda Sorunum yokta ( 2 çizgiyi ciziyor. (Enget ılk) diyorum dfx kodlarını çekmiyor hata veriyor :S 2.cizdirdiğim çizginin dfx kodunu nasıl cekebilirim?...

11.01.2012 15:07    

ehya
entget ile dxf kodlarını çekebilmeniz için "ilk" dediğinizin nesne olması gerekir. Koordinat değil...!!!

sondaki command satırından sonrasına aşağıdaki kodları ekleyin.

(setq nesne (entlast))
(setq data (entget nesne))



bu kod son çizilen çizginin dxf kodlarına erişmenizi sağlar.

11.01.2012 19:54    

Harbi65
(defun c:dss (/ )
(if
(setq blk:sec (entsel "\nDinamik Blok seçin:"))
(progn
(setq blk:enm (vlax-ename->vla-object (car blk:sec)))
(if (eq :vlax-true (vla-get-isdynamicblock blk:enm))
(progn
(setq zzz (vla-getdynamicblockproperties blk:enm))
(setq xx (variant-value zzz))
(setq Propt (vlax-safearray->list xx))
)
)
)
)
(princ)
)

Burada ki örnek kodla dinamik blokda kullanılan özelliklerine ulaşabiliyoruz. normal şartlarda sorun yok...
Burada ki sorun şu;
Dinamik bloklarda, Alignment ya da Basepoint gibi parametreler kullanımında gerek olmadığı için Action özellikler kullanılmadığı zaman yukarıda gösterdiğim variant-value değeri nil dönüyor ve fonksiyon tıkanıyor. Bu nedenle value değerini çekemediğim için kontrol edemedim.
Değerin nil olup olmadığını nasıl kontrol edebilirim?

12.01.2012 04:36    

ProhibiT
(vlax-safearray-get-u-bound var dim) kullanarak safe array'in son elemanının (0'dan başlayan) sıra numarasını bulabiliriz.
(vlax-safearray-get-u-bound xx 1) < 0 ise safearray boştur, herhangi bir elemanı yoktur, yani nil'dir. safearray'in tek boyutlu dizi olduğunu varsaydım. Bunun için örnekte 1 değerini kullandım. Array'in boyutlarına göre bu değer değişebilir.

12.01.2012 07:59    

drosolifa
ProhibiT verdıgın lıp lerden dolayı cok mutesekkırım
lısp kullanmaya e yenı baslayan bırı olarak "Seçilen Polyline'ların köşe koordinatları, ara mesafeleri, alan ve çevrelerini tablo halinde yazan AutoLisp fonksiyonu" bu vermıs oldugun lısp ı calıstaramadım hata verıyor komut olarak plgn gırıyorum ama bu hatayı alıyorum

Command: _appload PLgn.LSP successfully loaded.
Command:
Command:
Command: plgn
pLgn:dialog{
label=" Poligon Koordinat Tablosu Hazırlama";
: boxed_column{
: edit_box{label=" Ondalık Basamak Sayısı:";key="dpL";edit_width=6;}
: edit_box{label=" Yazı
Yüksekliği:";key="txh";edit_width=6;}
spacer;spacer;}
: boxed_row{: text{key="CpR";value=
" Hazırlayan:M.Şahin Güvercin - www.autocadokulu.com"
;}}ok_cancel;}
; error: bad argument type: streamp nil
Command: *Cancel*

yardımcı olursan sevınırım

12.01.2012 12:04    

ProhibiT


Linkleri görebilmek için ÜYE olmalısınız.

linkinde, yani download bölümünde, probleminizle ilgili açıklama var. "Fonksiyonun çalışabilmesi için, kullanıcının AutoCAD klasörlerine yeterli erişim yetki seviyesine sahip olması gerekir."



Linkleri görebilmek için ÜYE olmalısınız.

linkinde de, problemi nasıl çözeceğiniz anlatmıştım.

12.01.2012 14:59    

drosolifa
tesekkur ederım hocam verdıgınız bılgılerı ınceldım ama ,gozum den kacmıs bu bılgı. yenıden paylastıgınız tesekkuler

12.01.2012 16:22    

mayyaq61
(defun c:a()
(setq m (getreal "MEtrik :"))
(setq l (getreal "Cıvata boyu :"))
(setq s (getreal "Anaktar ağızı :"))
(setq len_salt (- m s ))
(setq len_salt0 (abs len_salt))
(setq len_salt1 (/ len_salt0 2))
(setq m0 '(0 0 ))
(setq m1 (polar m0 (angtof "0.0") m))
(command "._line" m0 m1"")
(setq mc1 (entlast))
(setq mcb0 (cdr (assoc 10 (entget mc1))))
(setq mcs1 (cdr (assoc 11 (entget mc1))))
(setq ls1 (polar mcb0 (angtof "90.0") l))
(setq lb0 (polar mcs1 (angtof "90.0") l))
(command "._line" mcb0 ls1 "")
(command "._line" mcs1 lb0 "")
(command "._line" ls1 lb0 "")
(setq salt (entlast))
(command "._lengthen" salt "" (len_salt1))
)
ehya hocam çok teşekürler..Şimdiki sıkıntım ise len_salt1 saklattığım değer kadar son çizginin sağ ve sol tarafa uzaması istiyorum lenget komutuyla yaptım olmadi :S Lenget komutunu nasıl kullanırım burda?

12.01.2012 19:16    

ehya
mayyaq61




Kod:

(defun c:a()
(setq m (getreal "MEtrik :"))
(setq l (getreal "Cıvata boyu :"))
(setq s (getreal "Anaktar ağızı :"))
(setq len_salt (- m s ))
(setq len_salt0 (abs len_salt))
(setq len_salt1 (/ len_salt0 2))
(setq m0 '(0 0 ))
(setq m1 (polar m0 (angtof "0.0") m))
(command "._line" m0 m1"")
(setq mc1 (entlast))
(setq mcb0 (cdr (assoc 10 (entget mc1))))
(setq mcs1 (cdr (assoc 11 (entget mc1))))
(setq ls1 (polar mcb0 (angtof "90.0") l))
(setq lb0 (polar mcs1 (angtof "90.0") l))
(command "._line" mcb0 ls1 "")
(command "._line" mcs1 lb0 "")
(command "._line" ls1 lb0 "")
(setq salt (entlast))
  (setq salt10 (cdr (assoc 10 (entget salt)))
salt11 (cdr (assoc 11 (entget salt))))
  (command "._lengthen" "_de" len_salt1 salt10 salt11 "")
(princ)
)

15.01.2012 22:40    

susam06
selamlar, lisp lerle çalışma konusunda yeniyim ama şunu gördüm defun c: den sonraki harfler lispin kısayolunu oluşturuyor, onda bi sorun yok ama şöyle başlayan bir lisp gördüm çalıştıramadım acaba kısayolu nedir ?

(defun texts ( / _AddSta)

(defun _AddSta (str pos / prefix)
(vl-load-com)
(vl-string-subst
(strcat (setq prefix (substr str 1 pos)) "+")
prefix
str))
---------------------------------------

birde şöyle başlayana rastladım;

(defun div-error (msg)
(if
(vl-position
msg
'("console break"
"Function cancelled"
"quit / exit abort"
)
)
böylece 3 çeşit başlangıç gözlemledim defun c: ler sorunsuz ama diğerlerinin kullanımı farklı mı oluyor merak ettim, saygılar.

15.01.2012 23:08    

ProhibiT
(defun c:... ile başlayan fonksiyonlar AutoCAD command olarak tanımlanırlar, komut satırından doğrudan çağrılabilirler.

Başında c: bulunmayan (defun ... şeklinde olan fonksiyonlar ise command olarak tanımlanmamışlardır. AutoCAD komut satırından doğrudan çağırılamazlar. Başka fonksiyonlar tarafından çağırılmak üzere tanımlanmışlardır. Test etmek amaçlı komut satırından (fonksiyonadı) şeklinde fonksiyon adını parantez içinde yazarak çağırabilirsiniz)

AutoLisp'te fonksiyon tanımı
(defun [c:] FunctionName ([Parameter List] [/] [Local Variables])
formatında yapılır. [] içindeki bölümler seçimliktir, illede yazılmaları gerekmez.

(defun div-error (msg) örneğinizde, div-error isimli fonksiyon msg isimli parametreyi bekler.

Çok basitçe örneği genellemek gerekirse;

(defun Test (Parameter / LocalVar)
(setq boLen 2.0
LocalVar (/ parameter 2.0)
(princ (rtos LocalVar))
)

Bu fonksiyonu, (Test 125) şeklinde fonksiyon adı ve parametre ile kullanmak zorundasınız.
Bu şekilde çağırılırsa ekrana 62.5 yazacaktır.

Başka fonksiyondan,
(setq a 125)
(test a)
şeklinde çağırabilirsiniz, Test fonksiyonunun Parameter değişkenine a değişkeninin değeri olan 125'i gönderir.
ekrana gene 62.5 yazılır.

Local variable olarak tanımlanan LocalVar değişkeninin değerine Test fonksiyonu dışından ulaşamazsınız.
Fonksiyon çalışıp bittikten sonra (list LocalVar) girerseniz nil döner.

Local Variables listesinde yer almayan boLen değişkenine her yerden ulaşılabilir, global değişkendir.
fonksiyon çalıştırılıp sonlandıktan sonra (list boLen) girerseniz 2.0 döner.

Kolay gelsin.

16.01.2012 00:33    

susam06
Çok minnettarım sayın prohibit, üstünde biraz çalışmam gerekicek ancak. Özellikle "defun div-error" tip fonksiyonu çalıştırabilirsem güzel olucak, bu arada, kendisi yol hattındaki km taşlarına mesafe yazabilme yeteneğine sahip, tekrar saygılar.

16.01.2012 06:26    

ProhibiT
(defun div-error (msg)... fonksiyonu başka bir fonksiyon içindeki hataları yakalamak üzere yazılmış. Söz konusu ana fonksiyonda oluşan hata mesajı parametre olarak msg değişkenine alınıyor, hata mesajının "console break", "Function cancelled", "quit / exit abort" olup olmadığı kontrol ediliyor.

16.01.2012 15:11    

mayyaq61
(defun c:duz()

(setq m (getreal "MODÜL GİRİNİZ : " ))
(setq z (getreal "DİŞ SAYISINI GİRİİNİZ: "))
(setq i (getreal "iletme oranı: "))
(setq d (* m z))
(setq da (+ d (* 2 m )))
(setq df (- d (* 2.332 m)))
(setq p (* 3.14 m))
(setq h (* 2.166 m))
(setq hf (* 1.166 m))
(setq s (/ p 2.0 ))
(setq d2 (* m (* i z)))
(setq da2 (+ d2 (* 2.0 m)))
(setq df2 (- d2 (* 2.332 m)))
(setq b (* m 10))

(princ "Bölüm dairesi: ")(princ d)(princ)
(princ "\nDiş üstü çapı: ")(princ da)(princ)
(princ "\nDiş dibi çapı: ")(princ df)(princ)
(princ "\nAdım: ")(princ p)(princ)
(princ "\nDiş yüksekliği: ")(princ h)(princ)
(princ "\nDiş başı yüksekliği: ")(princ m)(princ)
(princ "\nDiş dibi yüksekliği: ")(princ hf)(princ)
(princ "\nDiş dolusu: ")(princ s)(princ)
(princ "\nDiş boşluğu: ")(princ s)(princ)
(princ "\n2_Bölüm dairesi: ")(princ d2)(princ)
(princ "\n2_Diş üstü yüksekliği: ")(princ da2)(princ)
(princ "\n2_Diş dibi yüksekliği: ")(princ df2)(princ)
(princ "\nKalınlık: ")(princ b)(princ)

(setq b0 '(0 0 ))
(setq b1 (polar m0 (angtof "0.0") b))
(command "._line" b0 b1"")
(setq da_oF (entlast)))

Ehya hocam teşekür ederim öncelikle.da_oF adında son çizdirdiğim cizgiyi sakladım.Bu çizgiyi Ofset kullanarak Da Değişkenindeki değerinin yarısı kadar yukarı yarısı kadar aşagıya nasıl yapabilirim acaba.

16.01.2012 15:56    

ehya
Kod:

(vl-load-com)
(setq data (vlax-ename->vla-object da_oF))
(vlax-method-applicable-p data 'offset)
(vla-offset data (/ da 2.00))
(vla-offset data (- 0 (/ da 2.00)))
(entdel da_oF)



ilk satırı en üstteki boş olan bölüme yaz.
diğerlerini son nesne seçiminden sonraki bölüme yaz.

17.01.2012 09:16    

Travaci
Arkadaşlar merhaba, bir autolisp kitabı aldım ve bundan öğrenmeye çalışıyorum,bir yerde takıldım diğer konularda buna bağlı olduğundan es geçemiyorum yardımcı olursanız sevinirim.
Takıldığım kısım car ve cdr kullanımıyla ilgili.

Car Fonksiyonu; Listenin ilk elemanını alarak gerekli yerlerde kullanımı sağlar
(car '(a b c))
a


Cdr Foksiyonu; Mevcut olan listeden ilk elemanı çıkararak kalan elemanlar ile yeni bir liste oluşturur.
(cdr '((defg) g i))
(g i)


Bu örneklerle fonksiyonun ne yapmak istediği açıkça belirtilmiş. Fakat bir lisp içinde kullanımını anlıyamadım.

Listeleme Fonksiyonlarını Kullanarak Sembolik Dişli Çark Çizimi Yapan Bir Program

(defun c:cizim ()
(setq Da (getreal "\n Da Diş üstü çapını giriniz"))
(setq B (getreal "\n B genişliğini giriniz"))
(setq h (getreal "\n h Yüksekliğini giriniz))
(setq n1 (getpoint "\n Başlangıç noktasını giriniz"))
(setq n2 (list (+(car n1) b) (cadr n1)))
(setq n3 (list (car n1) (+ (cadr n1) (/ Da 2))))
(setq n4 (list (car n2) (+ (cadr n2) (/ Da 2))))
(setq n5 (list (car n1) (- (cadr n2) (/ Da 2))))
(setq n6 (list (car n2) (- (cadr n2) (/ Da 2))))
(setq n7 (list (Car n1) (- (cadr n3) h)))
(setq n8 (list (car n2) (- (Cadr n4) h)))
(setq n9 (list (car n1) (+ (cadr n5) h)))
(setq n10 (list (car n2) (+ (cadr n6) h )))
(command "line" n1 n2 n3 n4 n5 n6 n10 n9 n7 n8 n10 "")
)


Lispte görüldüğü üzre car ve cadr kullanımı örnekte anlatılğı gibi değil, yada anlamadığımdan dolayı bana öyle geliyor.
Mesela (setq n3 (list (car n1) (+ (cadr n1) (/ Da 2)))) bu satırda (car n1) derken birden fazla eleman göremiyorum ki içinden ayıklayıp ilk elemanını alsın ? Bununla ilgili bilgi verirseniz sevinirim.

17.01.2012 09:31    

ProhibiT
Örneğinizdeki n1, getpoint ile oluşturulan, noktanın X, Y ve Z koordinatlarından oluşan 3 elemanlı bir List'tir.

Örnek olarak 3D nokta koordinatı ele alalım.

(setq Point (list 12.50 20.00 125.60))
Bu listeden

X koordinatını almak için (car Point) -> 12.50

Y koordinatını almak için
önce ilk eleman dışında diğer iki elemanı alalım (setq Gecici (cdr Point))-> (20.00 125.60)
daha sonra elde ettiğimiz listenin ilk elemanını alalım (car Gecici)-> 20.00
Bu iki adımı birleştirirsek, (car (cdr Point)-> 20.00
ve sonuç olarak (cadr Point)-> 20.00

Z koordinatını almak için
(setq Gecici (cdr Point))-> (20.00 125.60)
(setq Gecici (cdr Gecici))-> (125.60)
(tek elemanı kalan listeden (car Gecici)-> 125.60
Bu üç adımı birleştirirsek, (car (cdr (cdr Point)))-> 125.60
ve sonuç olarak (caddr Point)-> 125.60

Önceki Sayfa [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] > 14 < [15] [20] [25] [30] [35] [40] [42] Sonraki Sayfa
Copyright © 2004-2022 SQL: 1.863 saniye - Sorgu: 103 - Ortalama: 0.01809 saniye