28.02.2019 19:33    

fftech
Merhaba,

İşim gereği autocad ile çalışma yürütmekteyim aslında Jr.Developer'ım fakat bu lisp konusunda henüz çok çok yeniyim ve yardımınıza ihtiyaç duymaktayım.

Çalıştığım firmada Enerji modelleme yapılıyor ve bu modelleme kısmına ben el attım kendi bildiğim dil olan C# ile verileri otomatik olarak programa girdirebiliyorum. Problemim neredeyse herşeyi otomatik yaptırmak. Bu işi yaparken en çok vakit kaybettiğimiz nokta ise autocad içerisinden Mahal No, Mahal İsmi, Mahal Metre Karesi, Mahal Yüksekliği,Mahaldeki Kişi Sayısı,Mahal Aydınlık Seviyesi, Mahal Cam Boyutu, Mahal Cephesi... gibi bilgileri almak.
Bu durumu da aşmak amaçlı internette fazlası ile araştırma yaptım fakat kodlarınıza henüz alışamadım bunun en büyük sebebi Lisp yazan arkadaşlar nedendir bilmiyorum YORUM satırına karşılar sanırım :). Şu an yazılım alanında çıkartmış olduğu kitaplarla bilinen bir yayım evinin kitabını aldım öğrenip bir şeyler yapmak için maalesef ki onu alırken çok fazla umutlu değildim ki umutlarımı diğer aldığım kitapları gibi yıktı. Sadede gelmem gerekirse sizden ricam bana bu lisp konusunda yardımcı olmanız. Bir çok makale buldum sizlerin yazdıkları da dahil fakat bu şekilde olanı yoktu ve istediğim şekilde yapmaya çalıştığımda ise hüsrana uğruyorum. Bu şekilde bir lispi yazmama yardımcı olabilir misiniz? Genelde Ehya Bey çoğunlukla kişilere yardımcı olmuş durumda ben sizden hazır olarak yapıp bana vermeniz taraftarı değilim çünkü bu durumda tekrar kendim yapmak istediğim zaman yapamayacağım. Eğer ki sana bunu maalesef yaparak gösterebiliriz derseniz de lütfen kodların yanlarına/altına/üstüne yorum satırı olarak orada ne işlem yaptırdığınızı belirtiniz .

Saygılarımla.

01.03.2019 05:41    

mttlp
c# ilede istediğinin veriyi autocad yazabilirsin de okuyabilirsinde bende c# kullanıyorum istediğim herşeyi yaptırıyorum.

01.03.2019 08:17    

ehya
Lisp yazanlar, yorum kısmına karşımıdır?
Evet. Çünkü kodlama yapan kişi o an ki duruma göre yazar. Yorumlar oldukça sürekli değişiklik talebi oluyor. Bu da maalesef kodlama yapan kişinin hoşuna gitmiyor. (Şahsen ben :) )

Yıllardan beri bu forumda birçok kişinin mantıklı lisp isteklerini (ücretli-ücretsiz) yerine getirmeye çalıştık.
Ancak istek sahiplerinin %99'u öğrenme talebinde bulunmadı. Bulunanlara da elimizden geldiğince her satırın ne anlama geldiğini yazdığımız da oldu. Böyle bir istek olmadığı sürece kodların yanlarına açıklamalarını yazmak bizim için bir külfet.

Kodların anlamlarından ziyade, tüm lisp kalıbının anlamını sormak yerine,
Örneğin; "bir çizginin koordinatlarını öğrenmek, layer'ını, uzunluğunu öğrenmek" gibi gelişime açık sorular sormak soran kişiyle birlikte lisp diline merak salanların da hoşuna gidecektir.

Madem, AutoLisp dilini öğenmek istiyorsunuz, öncelikle ne bildiğinizi söyleyin.
Parça parça öğrenmek istediğiniz işlemleri sorun. Temel seviye de bu sorularınızı cevaplamaya çalışalım.

01.03.2019 10:18    

fftech
Merhabalar,

Sayın MTTLP ve EYHA dönüşleriniz için çok teşekkür ederim.
C# ile yapmak konusunda üzerine eğileceğim, düşüncem kendi içerisinde daha basit olacağı yönündeydi hemde farklı bir dil kültürü edinmiş olacağım düşüncesi ile Lisp'e odaklandım fikriniz için teşekkür ediyorum.

Lisp konusunda ise özür dileyerek sizden akşama kadar musade isteyeceğim yoğun bir gün geçirmekteyim. Bu gün içerisinde küçük bir örnek kodlama üzerinde anlayabildiğim kısımları yazarak sizlerden anlayamadigim kısımlara acılık getirmenizi rica edeceğim.

Saygılarımla

01.03.2019 14:51    

fftech
Tekrar Merhaba,

Elimden geldiğince bir şeyler yapmaya çalıştım .
Yazdığım kodların son aşaması olan Excel'e atma kısmını şimdiye kadar hiç başaramadım hep hata almaktayım bu nedenle yazmadım.
Bu verilerin son aşamasında aldığım her bir veriyi, alınma sırası ile Exceldeki A sütunundan başlayarak yan yana atmam gerekiyor.
Komut her çalıştırılma durumunda tekrar tekrar dosyayı açıp içine veri yazması gerekmekte. Dolayısı ile en son hangi satırda kaldıysa oradan devam etmesini sağlamam gerekiyor.

Yazmış olduğum kodlar aşağıdadır;

(defun c:ww ()
(setq mahalNumara (entsel "Mahal Numarasını Seçiniz"));Kullanıcının çizim üzerinde seçtiği nesnenin DFX bilgileri mahalNumara değişkenine atanıyor.
(terpri);Komut satırına yazdırılan veri sonrasında bir alt satıra inilmesi için yazılan komut.
(setq mahalAd (entsel "Mahal Adını Seçiniz"))
(terpri)
(setq mahalMetreKare (entsel "Mahal Metre Karesini Seçiniz"))
(terpri)
(setq mahalYukseklik "Veri el ile işlem sırasında veya öncesinde girilecek");Veri herhangi bir yerden alınmaksızın çalışma öncesinde " " işaretleri arasına yazılarak değişkene atanıp işleme dahil edilecektir.
(terpri)
(setq mahalKisiSayi (getstring "Mahal KisiSayisi Giriniz"));Kullanıcının ekranda belirecek olan text giriş alanına gireceği bilgi mahalKisiSayi değişkenine atanıyor.
(terpri)
(setq mahalAydinlikSeviye "Veri el ile işlem sırasında veya öncesinde girilecek")
(terpri)
(setq mahalCamBoyut (entsel "Mahal Cam Tipini Seçiniz"))
(terpri)
(setq mahalCephe (getstring "Mahal Cephesini Giriniz"))
(terpri)

(setq mahalNumarasi(cdr(assoc 1(entget(car mahalNumara)))));mahalNumara değişkenindeki DFX bilgileri arasından 1 numaralı bilgi olan seçilen nesnenin Metni mahalNumarasi değişkenine atanıyor.
(setq mahalAdi(cdr(assoc 1(entget(car mahalAd)))))
(setq mahalMetreKaresi(cdr(assoc 1(entget(car mahalMetreKare)))))
(setq mahalCamBoyutu(cdr(assoc 1(entget(car mahalCamBoyut)))))

(princ mahalAdi);Deneme amaçlı bilgi komut satırına yazdırılıyor
(terpri)
(princ mahalNumarasi)
(terpri)
(princ mahalMetreKaresi)
(terpri)
(princ mahalYukseklik)
(terpri)
(princ mahalKisiSayi)
(terpri)
(princ mahalAydinlikSeviye)
(terpri)
(princ mahalCamBoyutu)
(terpri)
(princ mahalCephe)

)

Kodlarım ve bilgim bu kadar diyebilirim.
Beklettiğim için özür dilerim.

Saygılarımla

01.03.2019 15:06    

Travaci
Aslında sitede bununla ilgili onlarca örnek bulabilirdin.

(setq ex (open (strcat (getvar "dwgprefix") (vl-filename-base (getvar "dwgname")) ".xls") "a"))
;; Dwg dosyasının yanına aynı isimde exel dosyası açıyoruz. Sondaki "a" add "w" write "r" okuma yapar. "w" yaparsan hep üzerine yazar a dan farkı bu.

(write-line (strcat mahalNumarasi "\t" mahalMetreKaresi "\t") ex)
;; Açtığımız dosyaya yazdırcağımız verileri giriyoruruz ... "\t" bir satır yana "\n" bir satır aşağıya gider.

(close ex)
;; açtığımız dosyayı kapatıyoruz.

01.03.2019 15:09    

ehya
Öncelikle Autolisp kavramından biraz bahsedeyim.
Autolisp'de ilk haliyle program yazmaya başladığımızda standard autolisp kodları ile yazar nesneler ile ilgili dxf kodlarından bilgi alır ve buna göre yazdırma işlemi yapardık. Nesne oluşturma işleminde ise dxf ile nesne oluşturma komutu entmake ile devam ederdik.
Dilin ilk haliyle kodlama yaparken xls dosyasına birşey yazdırmak mümkün değil. Excel şart olursa dosya formatı CSV ile yapılması gerekirdi. Bu dosya türüne müdahale notepad mantığı ile olduğundan tamamen ilkel bir yoldu.
Zamanla visuallisp ile birlikte Activex desteği geldi. Bu dil ile birlikte nesneler hakkında bilgi ve değiştirme işlemi dxf'e göre daha kolaylaştı. Ancak karmaşık kod yapısı ile kod yazımı daha zorlaştı. Activex ile XLS dosyasına direkt ekleme ve müdahale yapılabiliyor ve excel'i kullanmadan hücreler ile ilgili istediğimiz değişiklikleri yapabiliyoruz.

Sizin sorunuza gelince, işin içinde excel olunca temel sevideki bir kullanıcı için biraz meşakkatli olacaktır. Bu seviyedeki bir programı yazmadan önce elzem olan autolisp'i iyi derecede bilmektir.



Resimde görülen kod, excel uygulaması ile ilgili başlangıç kodu. Bir uygulama başlatılırken sorgulaması da yapılmalı.
Bu sorgulama işlemi nesne seçimi, kullanıcı girdileri v.s. gibi işlemlerde de sorgulanmalı
Örneğin, Yaptığınız kodlamada "Mahal No seçin" bölümünde kullanıcı yazı yerine çizgi seçerse ne olacak?

Madem Autolisp öğrenmeye karar verdiniz. Bu işi üstünkörü öğrenmekten ziyade, parça parça ama doğru yöntem ile öğrenin. Temelden başlayıp kodlamanın mantığını anlayın.

ehya (02.03.2019 10:34 GMT)

01.03.2019 15:52    

fftech
Sayın Travaci ve Ehya vermiş olduğunuz bilgiler için teşekkür ediyorum.

Travaci, sitede araştırdım fakat cidden anlayamadım bu şekilde yapılabileceğini. Kodlar çok karışık geldiği için belkide. Yardımınız için teşekkür ediyorum.

Ehya Bey, paylaşmış olduğunuz bilgiler doğrultusunda ilerleyeceğimi bilmenizi isterim. Bazı şeyleri aceleye getirerek kontrol mekanizmalarını öğrenmeden yolda yürümeye çalışmam ileride çok zorluk çıkaracaktır eminim. Elimdeki kitap olsun internette olan bilgiler olsun komutların işlevlerini öğrenerek daha iyi olacağımı düşünüyorum. Activex bana çok daha karmaşık geldiği için giriş yapmaktan çekindim. Anlıyorum ki yanlış yapıyorum bu nedenle başlangıç lispini biraz daha pekiştirip devamında Activex ile daha sağlam kodlar yazabilirim sanırım.

Bana zamanınızı ayırıp bilgi ve birikimlerinizi benimle paylaştığınız için konuya dahil olan herkese ayrı ayrı teşekkür ediyorum.

Kodlarımı " Kendi kendime evet bu paylaşılabilir oldu" dediğimde buradan da son halini paylaşacağım.

Saygılarımla.

01.03.2019 16:21    

alumina
Alıntı
fftech :

Kodlarımı " Kendi kendime evet bu paylaşılabilir oldu" dediğimde buradan da son halini paylaşacağım.

Ogrenmek icin bu paylasimlari bir an once yapin derim. Paylastiginiz kodlara yapilan yorumlarla cok daha iyi ogreneceksiniz ve cogu zamanda dogru ogrendiginizi sandiginiz seylerin aslinda yanlis yada eksik oldugunu goreceksiniz. Ama su her satirin sonuna illa aciklama yazacagim diye zorlamayin kendinizi. Bu ogrenmenizide zorlastirir. Zaman icinde ilerledikce zaten yazdiginiz kodlari duz yazi okur gibi okuyup nerde ne yaptiginizi anlayacaksiniz. Birde ogrenirken bu kadari benim isimi gorur derseniz, ogrenemezsiniz. Kolay gelsin.

01.03.2019 19:09    

fftech
Sayın ALUMİNA tavsiyenizi dikkate alacağım teşekkür ediyorum.

Saygılarımla.

> 1 <
Copyright © 2004-2022 SQL: 1.484 saniye - Sorgu: 70 - Ortalama: 0.02121 saniye