25.12.2011 18:51
volder
|
Arkadaşlar merhabalar.
Autocad çiziminde verilen ölçüleri excell de hücrelere yazacak bir lisp ihtiyacım vardır.
Örneğin bir tank çiziminde kullanılan ölçümlendirmeleri excele aktaracak.sıralama önemli değil excele yazması yeterlidir.
Forumda baya araştırdım ama bu tarzda bir lisp bulamadım.
Yardımlarınız için şimdiden teşekkürler.
|
26.12.2011 06:33
ProhibiT
|
"Çizimde kullanılan ölçümlendirmeleri excel'e aktaracak" ifadeniz tanımsız kalmış. İstenen, belli objelerin ölçüleri (mesela Line objelerinin uzunlukları) mi? Yoksa oluşturulmuş ölçü (dimension) objelerinin değerlerinin mi? Excel ortamına aktarılması. Bu tür sorularda yapmak istediğinizi net ifade ederseniz, yardım alma şansınızı artırırsınız.
|
31.12.2011 15:42
volder
|
Belli bir layerda bulunan line olabilir.
Veya sadece dimesion olabilir.
Dimension olması daha iyi olur.
Olabilirse yapılan ölçümleme sırasına göre olması çok daha iyi olur.
Şantiyede olduğumdan her zaman internet erişimim olmuyor.
Bu yüzden cevap veremedim .
Kusura bakmayın.
Yeni yılın herkese SAĞLIK MUTLULUK ve BEREKET getirmesi dileği ile.
|
31.12.2011 16:50
ProhibiT
|
Kod:
(defun c:d2E (/ obj n dsy PvT oLc)
(setvar "cmdecho" 0) (command "undo" "group")
(setq obj (ssget "x" (list (cons 0 "DIMENSION") (cons 8 (cdr (assoc 8 (entget
(car (entsel "\nSelect Dimension to the desired Layer"))))))))
n (sslength obj) dsy (open (getfiled "Çıkış Kütüğü" "" "xls" 1) "w"))
(while (> (setq n (1- n)) -1)
(setq PvT (entget (ssname obj n)))
(if (= (cdr (assoc 1 PvT)) "")
(setq oLc (rtos (cdr (assoc 42 PvT)))) (setq oLc (cdr (assoc 1 PvT))))
(write-line oLc dsy))
(close dsy) (command "undo" "e") (prin1)
)
|
01.01.2012 20:07
volder
|
Sayın Hocam
Yardımlarınız için çok çok teşekkür ederim.
İlk fırsatta uygulamasını yapacağım.
Tekrar tekrar teşekkürler.
|
09.03.2012 12:55
BERNAYZ
|
Sayın Hocam,
bu lisp'i denedim. Süper bişey... Ancak şöyle bir sorunu var eğer ölçüde virgül sonrası varsa excel'e atarken virgül koymuyor. Yani ölçü 215,52 ise excel'e atarken 21552 olarak yazıyor... Bunu düzeltme şansınız var mıdır acaba?
Teşekkürler..
|
09.03.2012 14:37
ProhibiT
|
Bu konuda epeyce polemikler oldu forumda. "Ondalık Ayracı" olarak virgül kullanılması standart dışı bir uygulamadır. Bütün dünyada bir Almanlar yapıyor bunu inat ve sabırla, bir de onlardan esinlenip biz Türkler kullanıyoruz. Daha doğrusu sayılarla uğraşmalarına rağmen matematiği hiç bilmeyen bazı meslek erbabı kullanıyor. Ondalık ayracının virgül olmasının bir tek Ozalit mantığında gerekçesi olabilir, bunun dışında elle etutulur bir gerekçe yok. AutoLisp ve diğer tüm programlama dillerinde 12,5 string olarak algılanır, 12.5 ise real :)
Linkleri görebilmek için ÜYE olmalısınız. bu konunun sistematik çözümünü yazmıştım. Siz virgül diye bahsetmişsiniz ama, o virgül AutoCAD'den mi geliyor yoksa Bölge ve Dil Seçenekleri dolayısıyle Excel'mi virgül bekliyor anlaşılmıyor. Ama her durumda ondalık ayracınızı, AutoCAD ve Windows için nokta olarak tanımlamanızı tavsiye ederim.
Decimal Seperator'ün detaylarıyla uğraşmadan kullanabileceğiniz fonksiyon, fazladan 5 satır yazmak gerekti ama n'apalım :) Kod:
(defun c:d2E (/ obj n dsy OnA PvT oLc)
(setvar "cmdecho" 0) (command "undo" "group")
(setq obj (ssget "x" (list (cons 0 "DIMENSION") (cons 8 (cdr (assoc 8 (entget
(car (entsel "\nSelect Dimension to the desired Layer"))))))))
n (sslength obj) dsy (open (getfiled "Çıkış Kütüğü" "" "xls" 1) "w")
OnA (ascii (substr (getstring "\nKullanılacak ondalık ayracı: ") 1 1)))
(while (not (minusp (setq n (1- n))))
(setq PvT (entget (ssname obj n)))
(if (= (cdr (assoc 1 PvT)) "")
(setq oLc (rtos (cdr (assoc 42 PvT))))
(setq oLc (cdr (assoc 1 PvT))))
(cond ((and (= OnA 44) (not (vl-string-position OnA oLc)))
(setq oLc (vl-string-subst (chr OnA) (chr 46) oLc)))
((and (= OnA 46) (not (vl-string-position OnA oLc)))
(setq oLc (vl-string-subst (chr OnA) (chr 44) oLc))))
(write-line oLc dsy))
(close dsy) (command "undo" "e") (prin1)
)
ProhibiT (09.03.2012 15:29 GMT)
|
03.05.2012 23:29
huseyinarc
|
ben daha çok yeniyi, hatta bu akşam öğrenmeye başladım lispin olduğunu. bu kodu kullanmaya çalıştım aşşağıdaki hatayı verdi, yardımcı olablirmisiniz.
Select Dimension to the desired Layer; error: An error has occurred inside the
*error* functionAutoCAD variable setting rejected: "dimzin" nil
|
04.05.2012 06:55
ProhibiT
|
Başka bir fonksiyonla birlikte yüklenen *error* fonksiyonu içinde hata oluşuyor. Bu fonksiyonla bir ilgisi yok.
|
04.05.2012 11:07
huseyinarc
|
üstad şimdide bu hatayı veriyo, ama benim yaptığım bişey yok :)
Select Dimension to the desired Layerbad argument type: lselsetp nil
|
04.05.2012 12:17
ProhibiT
|
Benim de yaptığım bir şey yok. Neden bende ve başkalarında çalışıyor anlamak mümkün değil. Demek ki; Verilen AutoLisp kodlarının buradan nasıl alınıp kullanılacağı konusunda sitemizde araştırma yapmak, öğrenmek ve doğru uygulamak gerekiyor.
|
04.05.2012 18:30
huseyinarc
|
diğer lisp kodlarında ne yaptıysam aynısını yaptım ama şimdi silip yeniden deneyecem.
|
19.12.2012 18:41
atrmn
|
virgül veya nokta olmasının önemini kaldıran yukarıdaki kodu ayrı bir lisp olarak mı autocade yüklemeliyim
|
20.12.2012 03:36
ProhibiT
|
Bu foksiyon nokta virgül probleminizi çözmez, yalnızca bu fonksiyon için ondalık ayracını seçmenizi sağlar.
|
sadik07
|
excel i acıyor fakat nasıl aktaracağımı anlamadım yardımcı olurmusunuz ??
|