16.10.2010 18:54    

acheron
Autocad'te seçilen 5 adet çizgi'nin uzunluklarını excel'de alt alta yazan autolisp yazabilir miyiz?
Şimdiden teşekkür ederim.

16.10.2010 20:31    

ProhibiT
Merhaba,
Genelde sorular taksit taksit soruluyor :) Eminim bundan ibaret değil sorunuz...
Bu fonksiyonla istediğiniz işlemi yapabilirsiniz;
Kod:

(defun c:L2Ex ()
  (princ "\nUzunluklarını Excel dosyasına yazmak istediğiniz Line objelerini seçiniz...")
  (setq LLer (ssget (list (cons 0 "LINE"))) L (sslength LLer) n -1
        fo (open (getfiled "Çıkış Kütüğü" "" "csv" 9) "w"))
  (while (< (setq n (1+ n)) L)
    (setq Ln (entget (ssname LLer n)) Le (distance (cdr (assoc 10 Ln)) (cdr (assoc 11 Ln))))
    (write-line (rtos Le) fo))
  (close fo) (prin1)
)

Daha komplike bir şey yapacaksanız,
Bir tablo oluşturun, İstediğiniz Çizgilerin Length değerlerini bu tablonun hücrelerine Field ile bağlayın.


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


linkinde paylaştığım AutoLisp fonksiyon ile bu tabloyu Excel'e gönderin...
Üstelik Field'ları bir kere oluşturduktan sonra,
çizgilerinizi edit ettiğinizde Length değerleri otomatik değişecektir.

Kolay gelsin...

17.10.2010 06:40    

aozanp
s.a emeginize sağlık bende bir isteğim olacaktı zahmet olmazsa autocad deki noktalarımın x y ve z degerlerını exele döken bir lısp varmı yoksa yazabılırmısınız.Allah razı olsun.selametle

17.10.2010 06:58    

ProhibiT
Bahsettiğinize benzer koordinat listeleyen pek çok program paylaşıldı, araştırma yaparsanız işinize yarayan bir şeyler bulabilirsiniz diye tahmin ediyorum.

Gene eksik, taksitli soru :) Nokta'dan kastınız nedir? Point objeleri mi? AutoCAD objelerinin bellirli noktaları mı? Yani mesela PolyLine objelerinin Vertex'leri mi? yoksa fonksiyon çalıştırıldığında kullancının seçeceği noktalar mı?Bu konuları netleştirirseniz, sitede paylaşılan bir fonksiyonu bulup tavsiye edebiliriz belki. olmazsa basit bir fonksiyon yazılır...

17.10.2010 07:01    

acheron
çok teşekkür ederim

17.10.2010 07:24    

aozanp
tamam hocam yukardakı verdıgın lınkten buldum Allah razı olsun saygılarımla.

04.11.2010 13:49    

acheron
örneğin uzunluk 11.8
nokta yerine excel de virgül yazmasını istiyorum ( 11,8 ) çünkü sayıyı tarihe çeviriyor

04.11.2010 13:57    

ehya
Alıntı
acheron :
örneğin uzunluk 11.8
nokta yerine excel de virgül yazmasını istiyorum ( 11,8 ) çünkü sayıyı tarihe çeviriyor




hücredeki değeri sil.
o hücreyi seçip sağ tuş yap. açılan menüden "hücreleri biçimlendir" seçeneğini seç.
açılan tablodan "sayı" sekmesinde bulunan "kategori" bölümünden hücrenin özelliğini sayı olarak değiştir.
değerini şimdi yaz. istediğin olacaktır.

04.11.2010 14:55    

ProhibiT
ehya hocam, bu problem daha önce forumda tartıştığımız bir konu. Arkadaşlarımıza anlaşıp mutabık kaldığımızı düşünerek, fonksiyonlarımızda Excel formatındaki çıktıları da dahil, Ondalık Ayıracı olarak Nokta kullanıyoruz.

acheron arkadaşımızın bahsettiği problem, Ondalık ayıracının nokta veya virgül olarak farklı kullanılmasından kaynaklanıyor. Yukarıda paylaştığım basit fonksiyon, Excel'in okuyabileceği -.csv uzantılı dosyalar oluşturuyor ve bu dosyalarda ondalık ayıracı olarak ta Nokta kullanıyor.

- AutoCAD ve AutoLisp ortamında ondalık ayıracı (decimal separator) Ülke ve dil seçeneklerinden bağımsız olarak daima noktadır. Hatta, hemen bütün Programlama dillerinde bu bir standarttır.
- Windows ve Office ortamlarında ise, Ülke ve dil özelliklerine göre nokta veya virgül kullanılıyor.

Rakamlarla ve sayılarla uğraşmalarına rağmen Matematik ve Bilimle ilgisi olmayan bazı meslek guruplarının baskın çıkmalarıyla yerleşen bir kötü alışkanlık. Bizler, teknik elemanlar olarak "Galat-ı meşhur, Lugat-ı fasihten evladır" diyip ses çıkarma gereği görmeyince böyle bir anarşi doğmuş oldu :)
592.318,74 gibi bir gösterim bizim dışımızda ülkelerde pek kullanımayan bir yöntem. Bunun yerine 592,318.74 şeklinde kullanılması hem daha yaygın hemde mantıklı :)

AutoLisp ile yazdığımız fonksiyonlarda, nokta yerine virgül yazdırmak programa fazladan eklemeler yapmak anlamına geliyor. Üstüne üstlük Fonksiyonlarımızı genel yazmak zorundayız. Yukarıda yazdığım fonksiyonda ondalık ayıracı olarak virgül kullansaydım. Bu seferde nokta kullanan arkdaşlarımız problem yaşayacaklardı. Bunun için bu konuda AutoCAD'in ondalık ayracını esas alıp ilave bir işlem yapmamayı tercih ediyoruz.

acheron arkadaşımız için de çözüm çok sade, basit ve problemsiz aslına bakarsanız.
İşletim sisteminizde (Windows olduğunu varsayıyorum) Ülke ve Dil seçenekleri bölüne girerek, Ondalık ayıracını nokta olarak değiştirirseniz hiç bir probleminiz kalmaz. Mevcut ve yeni oluşturacağınız Excel dosyalarında hiç bir problem yaşamazsanız, kendiliğinden uyum sağlarlar. Klavyenizin sağ tarafındaki bölümde (Numeric Keypad) yer alan Virgül de kendilinden Nokta olarak değişir. Üstüne üstlük evrensel anlamda daha geçerli bir nümerik gösterim kullanmış olursunuz.

Kolay gelsin...

06.11.2010 14:34    

acheron
Ülke ve Dil seçenekleri bölüMÜNÜ kullanmak istemiyorum.
excel deki ondalık ayıracımın , olarak kalmasını istiyorum
Autolispin içine noktayı virgül yapacak bir fonksiyon eklenebilir düşüncesindeyim.

06.11.2010 15:05    

ProhibiT
O düşüncede olmanızın benim için bir sakıncası yok... :satisfied
Fonksiyon belli Kodu açık,ekleyiverin o zaman.
Program kodunu kısa ve küçük görüp karamürsel sepeti zannediyorsanız yanılırsınız.
İllede odunumun parası diye tutturacağınıza, notpad ile -.csv dosyasını açıp, find/replace ile noktaları virgül yapıvermeyi neden akıl etmiyorsunuz.
Sizin formatınıza uygun fonksyion yazmayı ihaleyle almadık ki, mesajınızdaki ifade hiç hoş değil!
Böyle dahiyane fikirleri sayıyla verdilerse varsın bir eksik olsun.

Sözlüklerdeki mutlak anlamıyla size kolay gelsin...

06.11.2010 17:57    

ehya
haklısınız prohibit hocam.
Son mesajınızdaki serzenişlerde sonuna kadar size destek veriyorum.
Bir fonksiyon yazılır ve biter. Her kişiye ve isteğe göre düzenlense onlarca fonksiyon olur. Eee yapan da bir kişi olunca geriye sadece isteyenler kalıyor.
Birçok arkadaş istemenin ne olduğunu bildiği için nazik bir dille istemekte, ancak bazı arkadaşlar sağolsun sanki memuruymuşuz gibi istemekte ve bu konuda günümüzde artık unutulmaya yüz tutmaya başlayan "rica" kelimesini lügatlarından çıkarma aşamasına gelmişler. Sadece üzülüyorum.

acheron adlı arkadaşı şahsım adına kınıyorum. Emr-i vaki bir dille istek olmaz. Prohibit hocamız vaktini daha farklı şeylere yönlendirebilecek iken sağolsun sitemizde soruları olabildiğince cevaplamaya çalışıyor. Bunun değerini bilmek gerekir diyorum.

07.11.2010 15:15    

acheron
pardon beyler amacım kabalık etmek değildi. Sizin sayenizde çok kullanışlı lipsler kullanıyorum.
Sorumun amacı sonuca makro içine noktayı virgül yapacak bir kod eklenebilir mi?

(defun c:ak ()
(princ "\nUzunluklarını Excel dosyasına yazmak istediğiniz Line objelerini seçiniz...")
(setq LLer (ssget (list (cons 0 "LINE"))) L (sslength LLer) n -1
fo (open (getfiled "Çıkış Kütüğü" "" "csv" 9) "w"))
(while (< (setq n (1+ n)) L)
(setq Ln (entget (ssname LLer n)) Le (distance (cdr (assoc 10 Ln)) (cdr (assoc 11 Ln))))
(write-line (rtos Le) fo))
(close fo) (prin1)
)

Bu kodun içinde nokta yok, bende aynı şeyi düşündüm ama fonksiyon yazmayı bilmiyorum.

07.11.2010 17:19    

ProhibiT
Daha önceki mesajlarımı da dikkatli okumadığınız, hele bu son mesajı hiç okumadığınız belli.

Yanlış hatırlamıyorsam Zonguldak'ta idi, ninenin biri 70'inden sonra okuma yazma öğrenir. Hızını alamaz kütüphaneler devirir, o kadar çok okur ki, herkesin dikkatini çeker. Bir gazeteci röportaj yapmaya gider. Sorar nineye;
- Bu yaştan sonra, nasıl bu kadar çok okuyabiliyorsunuz? Nine cevap verir;
- Onca akıllı adam yazmaya üşenmemiş ben okumaya neden üşeneyim ki? der...

İki önceki mesajımda da, neden fonksiyon içinde noktaları virgül olarak yazdırılmadığımı, üşenmeden uzun uzun anlatmıştım. Böyle bir şeyle vakit kaybetmemizin hiç bir gereği, anlamı va sanat değeri yok! Okumaya üşenmişsiniz. Size yardımcı olmaya çalışan insanların, noktasından virgülüne gramerinden cümle kurgusuna, kavramları ve kelimeleri seçerken ne kadar özenle kullandıklarının farkında olun. Yazarken de, kafanızın şimalinden aklınıza geldiği gibi, günlük konuşma dilinin bile çok altında garip bir dille yazmayın. Kaybeden siz oluyorsunuz...

Bir önceki mesajımda da;
Alıntı
ProhibiT :
notpad ile -.csv dosyasını açıp, find/replace ile noktaları virgül yapıvermeyi

demişim. Dikkatli okursanız, Program kodundan bahsetmiyorum!
Fonksiyonun ürettiği -.csv uzantılı Excel dosyasını (Birlikte aç seçeneğini kullanarak) Notpad ile açıp, buradaki Noktaları Virgül olarak değiştirmekten bahsediyorum...


ehya hocam anlayışınız ve yaklaşımızn için teşekkür ediyorum. Aslında kızmamak lazım, Tıbbın Nöroşiruji alanına giriyor bu problem, Aleksitimia deniyor buna. Psikolojik değil Fizyolojik bir durum, Aleksitimik'ler için bizim yapabileceğimiz bir şey yok...

Herkese selamlar, sevgiler...

ProhibiT (18.01.2011 15:14 GMT)

18.01.2011 14:54    

cngzklc
Prohibit hocam ellerinize sağlık güzel bir çalışma olmuş.Bu konu da bir ricam olacak yardımcı olabilirseniz sevinirim.

Bu kodlar ile sadece line'ları atabiliyoruz. Line ile birlikte polyline'ların uzunluklarını da atabilir miyiz?
Yani seçili tüm line ve polyline'ların uzunluklarını atacak.

İyi çalışmalar.

18.01.2011 15:30    

ProhibiT
cngzklc kardeşim seni kırmak ne mümkün :)
Kod:

(defun c:LpL2Ex ()
  (princ "\nUzunluklarını Excel dosyasına yazmak istediğiniz Line PoLyLive ve LwPoLyLine objelerini seçiniz...")
  (setq LLer (ssget (list (cons 0 "LINE,*POLYLINE"))) L (sslength LLer) n -1
        fo (open (getfiled "Çıkış Kütüğü" "" "csv" 9) "w"))
  (while (< (setq n (1+ n)) L)
    (setq obtip (cdr (assoc 0 (entget (ssname LLer n)))))
    (if (= obtip "LINE")
      (setq Ln (entget (ssname LLer n)) Le (distance (cdr (assoc 10 Ln)) (cdr (assoc 11 Ln))))
      (progn
        (command "_area" "object" (ssname LLer n))
        (setq Le (getvar "perimeter"))))
    (write-line (strcat obtip ";" (rtos Le)) fo))
  (close fo) (prin1)
)

Bu durumda excel dosyasına, LINE, POLYLINE ve LWPOLYLINE şeklinde obje türünü de yazdırıyoruz.

Kolay gelsin...

18.01.2011 15:53    

cngzklc
Kırmadığınız için teşekkür ederim abiciğim. :)
Ellerinize sağlık tekrar.

İyi çalışmalar.

18.01.2011 17:56    

ProhibiT
Bu fonksiyonu unutmuştum. Ama bir arkadaşımız beni fena germişti onu unutmuyorum :)

24.09.2013 11:51    

gcolak
Merhaba

Autocad'ten exel'e aktarım esnasında autocad'te gerekli lisp(TEXL) yüklü olmasına rağmen "exc" komutu autocad tarafından tanınmıyor.Sebebi ne olabilir?

15.12.2016 11:10    

savasnas
Merhabalar uzunluğun yanına layer adının da yazılması mümkün müdür?





Alıntı
ProhibiT :
cngzklc kardeşim seni kırmak ne mümkün :)
Kod:

(defun c:LpL2Ex ()
  (princ "\nUzunluklarını Excel dosyasına yazmak istediğiniz Line PoLyLive ve LwPoLyLine objelerini seçiniz...")
  (setq LLer (ssget (list (cons 0 "LINE,*POLYLINE"))) L (sslength LLer) n -1
        fo (open (getfiled "Çıkış Kütüğü" "" "csv" 9) "w"))
  (while (< (setq n (1+ n)) L)
    (setq obtip (cdr (assoc 0 (entget (ssname LLer n)))))
    (if (= obtip "LINE")
      (setq Ln (entget (ssname LLer n)) Le (distance (cdr (assoc 10 Ln)) (cdr (assoc 11 Ln))))
      (progn
        (command "_area" "object" (ssname LLer n))
        (setq Le (getvar "perimeter"))))
    (write-line (strcat obtip ";" (rtos Le)) fo))
  (close fo) (prin1)
)

Bu durumda excel dosyasına, LINE, POLYLINE ve LWPOLYLINE şeklinde obje türünü de yazdırıyoruz.

Kolay gelsin...

Copyright © 2004-2022 SQL: 1.628 saniye - Sorgu: 101 - Ortalama: 0.01612 saniye