16.01.2021 19:26    

akcan
Kod:

(vl-load-com)
(setq acadDocument (vla-get-activedocument (vlax-get-acad-object)))
(setq mspace (vla-get-modelspace acadDocument))
(setq apt (getpoint "Specify First Point: "))
(setq pt (getpoint "Specify next point: " apt))
(setq myline (vla-addline mspace (vlax-3d-point apt)
(vlax-3d-point pt)))
(setq oldlayer (vla-get-layer myline))
;Katmanı değiştir
(vla-put-layer myline "4")
;çizginin ofsetini al
(setq offLine (vla-offset myline 15.5))
;Çizginin rengini değiştir
(vla-put-color myline 3) ;3 yeşil
(vla-put-color offLine 4)

bu kodlarda
(vla-put-color offLine 4)
satırı
; error: bad argument type: VLA-OBJECT #<variant 8201 ...>
hatası veriyor.
myline rengi değişirken offLine neden hata veriyor?
lisp'de acemiyim

16.01.2021 19:52    

alumina
Alıntı
akcan :

Kod:

(vla-put-color (vlax-ename->vla-object (entlast)) 4)

16.01.2021 20:29    

akcan
Çözüm için teşekkürler ama offLine nesnesi üzerinden neden değiştirilmiyor?
aynı özelliklerde değil mi? mantığı çözemedim.
acemice
Kod:

(vla-put-color (vlax-ename->vla-object offLine) 4)

denedim ama olmadı.

18.01.2021 06:45    

Travaci
myline: #<VLA-OBJECT IAcadLine 000001c324972b08>
offline : #<variant 8201 ...>

18.01.2021 08:05    

ehya
Alıntı
akcan :
Çözüm için teşekkürler ama offLine nesnesi üzerinden neden değiştirilmiyor?
aynı özelliklerde değil mi? mantığı çözemedim.
acemice
Kod:

(vla-put-color (vlax-ename->vla-object offLine) 4)

denedim ama olmadı.




vla-offset ile yapılan işlemin sonucu variant'tır. Bu variant değerini ya açmak yada bir önceki mesajda belirtildiği gibi (entlast) ile çözmektir.

Variant değerine işlem yaptırmak için;
öncelikle
(vlax-safearray->list(vlax-variant-value offline))
komutu ile seçimi liste haline getirmelisiniz.

Bu tür variant listede birden fazla eleman olabileceğini düşünerek
ilk elemanı açığa çıkarmalıyız.
(setq offline (nth 0 (vlax-safearray->list(vlax-variant-value offline))))

İstenilen değer elde edildiğine göre şimdi istediğiniz işleme tabi tutulabilir.
(vla-put-color offLine 4)

ehya (18.01.2021 11:35 GMT)

18.01.2021 10:17    

ProhibiT
Merhaba,

Keşke bu kodları aldığınız yere sorsaydınız, diyeceğim... ama sormuş olduğunuzu tahmin ediyorum. Her neyse doğru adrestesiniz. alumina arkadaşımız aslında ayrıntıya girmemiş ama teşhis doğru. Travacı kısa ve öz problemin kaynağını vermiş, geçmiş. ehya hocam da detayıyla dört başı mamur açıklamış. Çözüm yöntemine ekleyecek bir şey olmamakla birlikte, hazır konu açılmışken başka detaylardan söz etmek gerekiyor.

AutoCAD'in ve AutoLisp'in (Visual Lisp) her sürümde yayınladıkları listeler vardır: "obsolete command and system variables" diye. Yani orada deniyor ki, bu listesi verilen komutlar veya sistem değişkenleri eskimiş ve bundan sonra kullanılmayacaktır, geçersizdir. Yeni sürümlerde AutoCAD bununla ilgili sorumluluk kabul etmez. Bununla birlikte AutoDesk nezaketinden ve kullanıcı dostu olmasından kaynaklı olarak yeni sürümlerde bu komut ve sistem değişkenlerini desteklemeye devam eder. Ne zamana kadar devam edeceğinin bir garantisi de yoktur.



2014 yılında yayınlanan kitabımızdan gene bir ekran görüntüsü paylaşıyorum. Sarı ile işaretlenmiş bölümde ne demişiz;
"Önceki AutoLISP sürümlerinde kullanılan vlax-put işlevinin yeni şeklidir. İşlev geriye doğru uyumludur,
vlax-put-property yerine vlax-put kullanılabilir olmakla birlikte gelecek sürümlerde işlev kaldırılabileceğinden kullanılmaması daha doğrudur." 6-7 yıl önce söylenen bu durumla ilgili köprülerin altından ne sular aktı gitti siz tahmin edin. Gerçi köprüler hala yerinde ama sular kim bilir nerelerde?

Burada sözünü ettiğimiz bazı (desteklemeyeceği açıklanan eski, geçersiz) komutları zaman zaman uygulamaya yönelik bizim de kullandığımız oluyor doğrusu. Biz bunun sorumluluğunu alarak kullanıyoruz. Ama, öğretmek ve eğitim amaçlı hiç bir paylaşımınızda kullanmamaya çalışıyoruz. Yerli veya yabancı pek çok sitede ise, gerek eski paylaşımlar olduğundan gerekse yeteri özen gösterilmediğinden pek çok aksaklık çıkması kaçınılmaz bir durum oluyor. İşin bir başka kötü yanı da, bu eski (geçersiz veya desteklenmeyen) komutlarla ilgili AutoCAD'in güncel dokümantasyonunda herhangi bir açıklama da bulamazsınız, obsolote olarak duyurdukları andan itibaren o kavramı yok sayarlar.

Eski komutlarla yerlerine getirilen yeni komutlar arasındaki (genelde) en önemli fark ise, eskilerin giriş ve dönüş argümanlarında Entity Name ve Association List kullanılırken, yenilerinde Object Name, Variant ve Safe Array kullanılmasıdır. En çok sıkıntıya düşülen konu ise, eski ve yenilerin birlikte kullanıldığı durumlardır. Burada özenli dikkatli ve bundan da önce konuya hakimiyet gerekiyor. Gene önemli bir nokta da, obsolote command yerine getirilen yeni komut (genelde) geriye doğru uyumludur (backward compatibility).

AutoCAD ve özellikle de Lisp ile çalışırken bu ve benzeri konulara dikkat edilmesi doğru olur inancındayım. Aksi halde emek ve çabaların boşa gitmesinden başka bir şey elde edilemez. "Ama adam yazmış, çalışıyor. Denedim bende de çalışıyor." dememek gerek. Böyle bir konuda önünde sonunda ayağınızın taşa takılacağından emin olabilirsiniz. Yeni öğrenmeye başlayanlar için ise tavsiyem, internette gördükleri her şeye sorgusuz sualsiz kapılmamaları, güvenilir, kendini ispatlamış ve yazdığının (paylaştığının) arkasında duran, güncel kaynakları araştırmalarıdır.

Selam ve saygılarımla herkese kolaylıklar dilerim.

20.01.2021 14:06    

akcan
detaylı açıklamalar için teşekkür ederim.
lisp'i yeni öğrenmeye çalışıyorum.
kodları https://www.afralisp.net/visual-lisp/tutorials/properties-methods-part-2.php sayfasından almıştım.
orada verilen kodlar çalıştı ama kendimi geliştirmek için kodlarla üretilen offset çizginin rengini de değiştirmek istemiştim.
bilmediğim çok şey olduğu için benim düz mantıkla eklediğim kod çalışmadı.
normaldir.
ne de olsa en zor öğrenme yöntemini deniyorum. deneme-yanılma

20.01.2021 16:34    

alumina
Alıntı
akcan :

Ortasindan ogrenmeye baslayinca deneme yanilma degil sadece yanilma olur. Yukardaki kod kazara calismis olsaydi ogrenmis olmayacaktiniz. Gelin siz basindan baslayin.

21.01.2021 07:05    

akcan
Baştan başladım zaten.
AutoLisp VisualLisp kitabını aldım. İlk sayfadan başladım.
Afralispdeki eğitimleri başından başlayarak devam ediyorum.

Hata yapmadan öğrenme olmaz. Esasında hata yapınca öğreniyorsun.
Hataya neden olan durumu araştırıp çözüm buluyorsun. Yanlışlarının farkına varıyorsun.
Bu bulduğun çözüm ve bilgiler daha kalıcı oluyor.

Dediğiniz gibi kod çalışmış olsaydı üzerinde durmayacak ve sonraki aşamalara geçecektim.

21.01.2021 09:39    

ProhibiT
Alıntı
akcan :
Baştan başladım zaten.
AutoLisp VisualLisp kitabını aldım. İlk sayfadan başladım.

Hata yapmadan öğrenme olmaz. Esasında hata yapınca öğreniyorsun.
Hataya neden olan durumu araştırıp çözüm buluyorsun. Yanlışlarının farkına varıyorsun.
Bu bulduğun çözüm ve bilgiler daha kalıcı oluyor.

Dediğiniz gibi kod çalışmış olsaydı üzerinde durmayacak ve sonraki aşamalara geçecektim.



Takdire değer bir çaba.
Gönderdiğim özel mesaj(lar)a bakarsanız, işinize yarayabilecek bir şeyler olabilir.

21.01.2021 12:50    

akcan
ilginiz için teşekkür ederim. mesajlar sayfası şu an açılmıyor, ana sayfaya yönlendiriyor.
sayfa açıldığında bakacağım.

> 1 <
Copyright © 2004-2022 SQL: 1.915 saniye - Sorgu: 74 - Ortalama: 0.02588 saniye