29.02.2012 13:46    

Travaci
Abi desteğin için teşekkürler. Buarada lispte önceden nasıl yaptığımı bilemediğim bi özellik : )
ilk ve son donatıyı seçtiğimde çizim yapıyordu artık yapmıyor, çünkü herzaman ara donatılara line çizmiyoruz.
Birde çizim kuralları hakkında yazdıkların doğru ama maalesef çalıştığın yerde bu böyle deil doğrusu bu artık böyle çalışalım diemiyoruz.

Travaci (03.03.2012 13:23 GMT)

14.03.2012 19:53    

Travaci
Merdiven çizimi için bi program yazdım fakat çizim yapacağım yere uzaktan baktığımda saçma sapan şeyler çiziyor yakından baktığım da ise gayet duzgun çalışıyor sorun nedir acaba ?

15.03.2012 07:15    

ehya
"Travacı"

osnap seçeneklerini kapatıp dene...

15.03.2012 07:55    

Travaci
Alıntı
ehya :
"Travacı"

osnap seçeneklerini kapatıp dene...



Oldu ama alakasını çözemedim.

15.03.2012 08:00    

ehya
Çizilecek yerlerin koordinatlarını hesapladığınızda bu noktalardan çizim yapmaya başlarken eğer o bölgede yada yakınında nesne var ise osnap seçeneklerinden dolayı otomatik nesnenin referans noktaları tutulur. Lisp ile bir çizim yapılacağı zaman osnap seçeneklerinin kapatılması gerekir.

25.03.2012 09:53    

Travaci
Ya abiler ben buna hala çözüm bulamadım bi el altın lütfen
Aşağıda progamdaki dimension style ların hepsi .dwg içinde mevcut fakat dwg içinde mesela sadece 1-100 İÇ_M style ı ile çizim yaptım diğerlerini kullanmadım kullanmadıklarım için
Unknown command "OLA". Press F1 for help.
Unknown command "P". Press F1 for help.
Unknown command "LA". Press F1 for help.
Unknown command "DIŞ ÖLÇÜ_MAVİ". Press F1 for help.
Unknown command "OLA". Press F1 for help.
Unknown command "OLA". Press F1 for help.
Unknown command "P". Press F1 for help.
Unknown command "LA". Press F1 for help.
Unknown command "ETKİ ALANI_MAVİ". Press F1 for help.
Unknown command "OLA". Press F1 for help.
Unknown command "OLA". Press F1 for help.
Unknown command "P". Press F1 for help.
Unknown command "LA". Press F1 for help.
Unknown command "OK_MAVİ". Press F1 for help.
Unknown command "OLA". Press F1 for help.
Hatalarını alıyorum ama kullandığım style ı layerına geçiriyor yani çalışıyor her style ı kullanıyım çizim içinde hata vermiyor, bu hatalardan nasıl kurtulabilirim.

Kod:

;***** Ölçüleri ve Lader'ı İlgili Layer ına Geçiren Program *****;               
(defun c:Ola (/)
(setvar "cmdecho" 0)
(command "_.undo" "group")
(command "change" (ssget "x" '( (-4 . "<OR")
(3 . "1-100 İÇ_M")
(3 . "1-100 DE 50 İÇ_M")
(3 . "1-50 İÇ_M")
(3 . "1-50 DE 25 İÇ_M")
(3 . "1-25 İÇ_M")
(-4 . "OR>")
)
) "" "p" "La" "İÇ ÖLÇÜ_MAVİ" "")
(command "change" (ssget "x" '( (-4 . "<OR")
(3 . "1-100 DIŞ_M")
(3 . "1-100 DE 50 DIŞ_M")
(3 . "1-50 DIŞ_M")
(3 . "1-50 DE 25 DIŞ_M")
(3 . "1-25 DIŞ_M")
(-4 . "OR>")
)
) "" "p" "La" "DIŞ ÖLÇÜ_MAVİ" "")
(command "change" (ssget "x" '( (-4 . "<OR")
(3 . "1-100 OK_M")
(3 . "1-50 OK_M")
(3 . "1-25 OK_M")
(-4 . "OR>")
)
) "" "p" "La" "ETKİ ALANI_MAVİ" "")
(command "change" (ssget "x" '( (0 . "LEADER")
)
) "" "p" "La" "OK_MAVİ" "")
(command "_.undo" "e")
(princ)
)


TEŞEKKÜRLER

26.03.2012 08:20    

ProhibiT
Her şeyden önce bazı konularda uyarmak zorundayım.
- Filters ile seçim yapıp Properties değiştirerek kolayca yapılabilecek bir iş için neden fonksiyon yazılır?
- Böyle hiç bir mantık (Logic) işlemi olmayan fonksiyon olmaz!
- Çizimlerinizde, AutoCAD Tables bölümünde yer alan (LayerName, LinetypeName, BLockName,..,.) Tables Object isimlerde Türkçe karakterler ve/veya boşluk karakteri kullanırsanız, eninde sonunda size problem olarak döneceğinden hiç şüpheniz olmasın.
- AutoLisp fonksiyonlar içinde mecbur kalınmadıkça (command ... kullanılmaz. İllede kulanacağım derseniz, en iyimser ihtimalle AutoCAD sürüm farkından gene problem yaşarsınız. (command ... kullanacaksanız, neden Lisp yazıyorsunuz ki, DIESEL yazın gitsin. Ya da Macro Recorder ile asker gibi Macro kaydedin bitsin. Yukarıda listesini verdiğiniz hataların tümü, AutoCAD Command'in beklediği Parametre Listesine uymayan parametreler girilmesinden kaynaklanıyor.

Yazmaya çalıştığınız fonksiyonu,
Kod:

(defun ChgLy (SseT LyR / PvT)
  (if SseT (setq n (sslength SseT)) (setq n 0))
  (while (not (minusp (setq n (1- n))))
    (setq PvT (entget (ssname SseT n))
          PvT (subst (cons 8 LyR) (assoc 8 PvT) PvT)
          PvT (entmod PvT) PvT (entupd (cdr (assoc -1 PvT))))))
(defun c:OLa (/)
  (setvar "cmdecho" 0) (command "_.undo" "group")
  (ChgLy (ssget "x" (list '(-4 . "<OR") '(3 . "1-100 İÇ_M")
          '(3 . "1-100 DE 50 İÇ_M") '(3 . "1-50 İÇ_M") '(3 . "1-50 DE 25 İÇ_M")
          '(3 . "1-25 İÇ_M") '(-4 . "OR>"))) "İÇ ÖLÇÜ_MAVİ")
  (ChgLy (ssget "x" (list '(-4 . "<OR") '(3 . "1-100 DIŞ_M")
       '(3 . "1-100 DE 50 DIŞ_M") '(3 . "1-50 DIŞ_M") '(3 . "1-50 DE 25 DIŞ_M")
       '(3 . "1-25 DIŞ_M") '(-4 . "OR>"))) "DIŞ ÖLÇÜ_MAVİ")
  (ChgLy (ssget "x" (list '(-4 . "<OR") '(3 . "1-100 OK_M")
       '(3 . "1-50 OK_M") '(3 . "1-25 OK_M") '(-4 . "OR>"))) "ETKİ ALANI_MAVİ")
  (ChgLy (ssget "x" (list '(0 . "LEADER"))) "OK_MAVİ")
  (command "_.undo" "end") (prin1))
şeklinde yazmak daha doğrudur. Hoş böyle bir fonksiyon yazmak başlı başına anlamsız da. Bu fonksiyon ActiveX kullanarak,
Kod:

(defun ChgLy (SseT LyR /)
  (if SseT (setq n (sslength SseT)) (setq n 0))
  (while (not (minusp (setq n (1- n))))
    (vlax-put-property (vlax-ename->vla-object (ssname SseT n)) 'Layer LyR)))
(defun c:OLa (/)
  (setvar "cmdecho" 0) (command "_.undo" "group") (vl-load-com)
  (ChgLy (ssget "x" (list '(-4 . "<OR") '(3 . "1-100 İÇ_M")
          '(3 . "1-100 DE 50 İÇ_M") '(3 . "1-50 İÇ_M") '(3 . "1-50 DE 25 İÇ_M")
          '(3 . "1-25 İÇ_M") '(-4 . "OR>"))) "İÇ ÖLÇÜ_MAVİ")
  (ChgLy (ssget "x" (list '(-4 . "<OR") '(3 . "1-100 DIŞ_M")
       '(3 . "1-100 DE 50 DIŞ_M") '(3 . "1-50 DIŞ_M") '(3 . "1-50 DE 25 DIŞ_M")
       '(3 . "1-25 DIŞ_M") '(-4 . "OR>"))) "DIŞ ÖLÇÜ_MAVİ")
  (ChgLy (ssget "x" (list '(-4 . "<OR") '(3 . "1-100 OK_M")
       '(3 . "1-50 OK_M") '(3 . "1-25 OK_M") '(-4 . "OR>"))) "ETKİ ALANI_MAVİ")
  (ChgLy (ssget "x" (list '(0 . "LEADER"))) "OK_MAVİ")
  (command "_.undo" "end") (prin1))
daha sade yazmak mümkün...
Burada verdiğim fonksiyonları nev-i şahsına münhasır Layer düzeninizi kurarak test etmedim elbette. Amacım yukarıda yazdığım uyarıları örneklemek, mantığını açıklamakla sınırlıdır.

Herkese kolay gelsin.

26.03.2012 13:20    

exedesign
Sorun çözüldü !

"Copy with base point" komutu gibi "cut base komutu" yapmak istiyorum.
Copy with base point komutunun lisp'i yandaki gibi ^C^C_copybase
mantık olarak önce copy with base point'in çalışması sonra seon seçimin silimesini istiyorum. kullanmam gereken komutlar şöyle;
^C^C_copybase | _erase _p komutları.
bunu lisp olarak yazacak bir arkadaş varmı defalarca denedim bir türlü beceremedim işte uğraştığım kodlar.

^C^C(command "_copybase" bp ob "")(command "_erase" ob "")

^C^C(command "_copybase"),(command "_erase" ob "")

^C^C(command _erase p (^C^C_copybase ""))

bilen arkadaşlar komik bulacaktır ama bu işte pek profesyonel sayılmam şimdiden teşekkür ederim.

Birkaç saatlik çabadan sonra basitçe kodu üretebildim aşağıdaki lisp işe yarıyor

^C^C_copybase \\_e p;;

exedesign (26.03.2012 14:15 GMT)

01.04.2012 08:03    

Travaci
Hala bilmiyorum
(setq osmode_old (getvar "osmode" ))
(setvar "osmode" 0)
Dedipmizde programı çalıştırdıktan sonra escape dediğimizde "setq osmode_old" ayarlarına döndürebiliyormuyuz.

Travaci (01.04.2012 08:10 GMT)

01.04.2012 15:32    

ProhibiT
Bu tür durumlarda fonksiyon içinde error trap (hata kapanı diye tercüme etmenin alemi yok!) kurmalısınız.

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

linkinde ve burada paylaştığım fonksiyonların hemen hepsinde bu error trap fonksiyonunu görebilirsiniz. Verdiğim örneklerde olduğu gibi *error* error trap fonksiyonunu ana fonksiyon içinde tanımlar ve ana fonksiyonun Parameter List'i içinde *error* symbol name'ini Local Variable olarak tanımlarsanız, başka fonksiyonların error trap fonksiyonlarıyla karışıp kargaşaya sebep olmaz.
Kod:

(defun c:ett2 (/ *error* oL dnt1 tanim dnt2 obje yc1 bn1 yc2 bn2 yc3 bn3)
  (command "_.undo" "group") (setq oosm (getvar "osmode")) (setvar "osmode" 0)
;;; Undo group başlattık ve osmode değişkeninin eski değerini saklayıp sıfırladık.
  (defun *error* (msg) (princ msg) (command "_.undo" "e") (setvar "osmode" oosm))
;;; Fonksiyonun anormal çıkışında undo group'u sonlandırdık ve
;;; osmode değişkenini eski değerine set etmek için error trap kurduk.
  (if (not (tblsearch "Layer" "Ok_Mavi"))
    (entmake (list '(0 . "Layer") '(2 . "Ok_Mavi") '(62 . 11) '(6 . "Continuous"))))
  .
  .
  .
  (command "_.undo" "e") (setvar "osmode" oosm) (prin1)
;;; Fonksiyonun normal çıkışında undo group'u sonlandırdık ve
;;; osmode değişkenine eski değerini set ettik
)

01.04.2012 16:08    

as1986
slm kolay gelsin
arkadaşlar ben bir lisp yazmaya çalışıyorum da yalnız ufak bir problemim war
lispteki değişken sayısı başka bir değişken tarafından kontrol edilecek
yani ilk değişken için değer istendiğinde eğer cevap 10 gelirse
10 adet değişken yaratıp mesela bunlar a1, a2, a3 .... a10 diye isimler verip sonra bunların her biri için değer girilmesini isteyecek
nasıl bir döngü veya komut ile bunu sağlayabilirim

01.04.2012 18:20    

Travaci
Alıntı
ProhibiT :
Bu tür durumlarda fonksiyon içinde error trap (hata kapanı diye tercüme etmenin alemi yok!) kurmalısınız.

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

linkinde ve burada paylaştığım fonksiyonların hemen hepsinde bu error trap fonksiyonunu görebilirsiniz. Verdiğim örneklerde olduğu gibi *error* error trap fonksiyonunu ana fonksiyon içinde tanımlar ve ana fonksiyonun Parameter List'i içinde *error* symbol name'ini Local Variable olarak tanımlarsanız, başka fonksiyonların error trap fonksiyonlarıyla karışıp kargaşaya sebep olmaz.

Hocam nekadar teşekkür etsem az hayat kurtarıcı bi kod du bu benim için : )
Bunu uygulayacağım okadar lisp varki elime .... Çok teşekkürler eline sağlık.

03.04.2012 20:20    

Travaci
(setq dgr (getreal "\nBir değer giriniz: )
Dediğimizde birdahaki sefere bu değeri aklında tutması için gerekli kod nedir ? Bi kaç lispten buldum ama birşey anlamadım kopyalıyıp yapıştırmak istemiyorum
Birde
(defun c:komut (/) ---> Burdaki parantez kullanımını hala bılmıyorum slash ın sagına yazınca ne oluyor soluna yazınca ne oluyor yada yazınca ne oluyor yazmayınca ne oluyor ? Birşeyler ters gittiğinde burdaya koşuyorum kesin diorum sorun burada : ) deneme yanılma yöntemi sağına yaz soluna yaz boş bırak..... anlıcağınız rezillik : )

04.04.2012 03:27    

ProhibiT
öncelikle (defun c:komut (/) şeklinde düşünmek yanlış. Genel ifade;
(defun [c:]Symbol ([Argument List] [/] [Local Variables]) şeklindedir.
Köşeli parantez içinde yazdıklarım seçimliktir, ihtiyaca göre yazılabilir ya da yazılmayabilirler.

- ilk seçimlik bölüm yani c: kullanılırsa, tanımlanan fonksiyon AutoCAD komut satırından adıyla (Symbol) çağırılıp çalıştırılabilir. Yani sizin düşündüğünüz gibi fonksiyon komut haline gelir. c: kullanılmazsa, fonksiyon AutoCAD komut satırından yazılarak çalıştırılamaz. Başka fonksiyonlar içinden çağırılabilir. Ya da komut satırından (Symbol) şeklinde parantez içinde yazılarak çalıştırılabilir.
- Argument List, adından da anlaşılacağı gibi fonksiyonun beklediği argümanlardır.
- Local Variables bu değişkenlere yalnızca, tanımladıkları fonksiyon içinden ulaşılabilir, başka yerden (Visual Lisp Editor, AutoCAD komut satırı veya başka bir Fonksiyon) ulaşılamaz.
Kod:

(defun Test-1 (Argument-1 Argument-2 / Local-1 Local-2)
  (setq Local-1 (+ Local-3 Local-4) ;;; yazamazsınız Local-3 ve Loca-4 Test-2'nin Yerel Değişkeleri'dir burada tanımsızdırlar.
  (setq Local-2 (+ Argument-1 Argument-2) ;;; Test-2'nin Yerel değişkenleri Local-3 ve Local-4 Test-1'de böyle kullanılabilirler.
)

(defun c:Test-1 (/ Local-3 Local-4)
  (Test-1 Local-1 Local-2) ;;; şeklinde Test-2'yi çağıramazsınız, bunlar Test-1'in yerel değişkenleridir ve burada tanımsızdırlar.
  (Test-1 Local-3 Local-4) ;;; yazarak Test-1'i çağırırken Local-3 ve Local-4 yerel değişkenlerini Argument-1 ve Argument-2 olarak göndermiş olursunuz.
)

Buradan önemli bir sonuç çıkarmalısınız; c: kullanılan fonksiyon yani, AutoCAD komut satırından doğrudan çağırılacak komut tanımında /'dan önce Argument List kullanılamaz. Nedenini çözmeye çalışın. AutoCAD komut satırından nasıl Argüman göndereceksiniz?

Burada paylaştığım pek çok fonksiyonda kullandığım bazı değerlerin hatırlanması için kullandığım yöntem;
Kod:

(defun Fnctn (/ Deger)
  (if (setq Deger (getreal (strcat "\n Değer giriniz <" (if EskiDeger (rtos EskiDeger)) ">:")))
    (setq EskiDeger Deger) (setq Deger EskiDeger)
  )
)

Dikkat edilmesi gereken nokta, EskiDeger değişkeni Local Variable List'te yer almamalıdır. Aksi halde fonksiyondan çıkılınca tanımsız kalır, unutulur.

14.04.2012 21:16    

Travaci
.fas ile .vlx in birbirinden farkı nedir ?

Travaci (14.04.2012 21:46 GMT)

16.04.2012 07:58    

ProhibiT
- AutoLisp veya VisualLisp kaynak kodları AutoCAD ortamında yüklendiklerinde, her satır ve komut anında makine diline çevrilerek uygulanırlar (interpretitive form). Bu tür dosyalar Ascii Text formatından olduklarından kullanıcı tüm içeriği görebilir ve değiştirebilir.

-.fas: AutoLisp veya Visualisp Source Code dosyalarının compile edilmiş (makine dili için derlenmiş) executable (çalıştırılabilir) şeklidir. Değişkenleri kullanışı ve -.dcl gibi harici dosyaları kullanışı Lisp Source Code (Lisp Kaynak Kod) dosyaları ile aynıdır. Kaynak kod'lardan daha hızlı yüklenir ve zaten makine diline çevrilmiş olduklarından daha hızlı çalışırlar. Bu formattaki dosyalar derlenmiş (compiled) olduklarından kullanıcı tarafından görülemez ve değiştirilemez.

-.vLx: AutoLisp veya VisualLisp Source Code dosyalarının compile edilmiş halidir. -.fas dosyalarından farklı olarak, değişkenler farklı bir NameSpace'de tutulduklarından, birden fazla drawing dosyasında çalışma imkanı sağlarlar. Lisp Source Code yanında -.vba, -.dvb ve -.dcl gibi dosya türleri Lisp Kaynak Kod ile birlikte compile edildiklerinde tek bir dosya halinde içinde barındırırlar. -.vlx dosya formatı, -.fas formatının daha komplex ve gelişmiş halidir.

20.04.2012 20:16    

Travaci
Herkeze merabalar, buarada Mehmet Abi herzaman ki desteklerin için teşekkür ederim.
Bugünki sorum şu, yazıdığım lisplerde beş altı tane değer isteyen komutlar var, geçen değerleri hafızada tutması için istediğim kod pek yararlı olmuyor, her nekadar hafızada tutsada beş altı kere space e basmak zorunda kalıyorum. İstediğim şu bu soruları başka bir komuta bağlamak, oda o değerleri sanırım bir text dosyasına yazdırcak, lispte ordan okuyacak yada başka nasıl olursa. Böyle birşey nasıl yapılabilir ? Çokmu detaylı birşey sordum bilmiyorum, hali hazırda bir örnek varmı ? Onunda yardımı dokunabilir.Teşekkürler.

Travaci (20.04.2012 21:53 GMT)

20.04.2012 21:39    

Travaci
Kod:

(defun c:calismalar (/)
    (setq n1 (getpoint "\nBirinci nokta.")
            n2 (getpoint n1 "\nİkinci nokta.")
            di (distance n1 n2)
            os (rtos di 2 0 ))
    (prompt os)
)

Os nin yanına mesela mm yazıdrmak istiyorum nasıl yapabilirim ? Birde yukarıdaki haliyle yaptğımda verdiği ölçünün hemen yanında nil yazıyor "1453nil" gibi sebebi nedir ? Teşekkürler.

Travaci (20.04.2012 21:52 GMT)

21.04.2012 06:16    

ehya
Travaci


strcat komutu ile iki string olan değeri birleştirebilirsin.
os değerin sayısal ancak tırnak içinde. yani bir string olduğuna göre

(prompt (strcat os " mm"))

şeklinde bir komut ile sorunu çözebilirsin.

Sondaki nil uyarısı için ise en sondaki kapatma parantezinden önce (princ) ifadesini yazarsan nil uyarısı vermez.

ehya (21.04.2012 06:53 GMT)

21.04.2012 06:51    

Travaci
Kod:

(defun c:zzz (/)
     (setq n1 (getpoint "\nBirinci nokta.")
             n2 (getpoint n1 "\nİkinci nokta.")
             di (distance n1 n2)
             os (rtos di 2 0 ))
     (prompt (strcat "os" " mm"))
)


Yanlış anlamadıysam bu şekil yaptım olmadı yine

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