Copyright © 2004-2022 SQL: 1.009 saniye - Sorgu: 102 - Ortalama: 0.00989 saniye
31.12.2009 06:02
chico1907 |
merhaba prohibt
ilginiz için saolun tesekkürler.
|
31.12.2009 19:37
berferan68 |
Sayın ProhibiT
Örnek lisp süper oldu yalnız sorun şu ki bazı autocad dosyalarında (ki ben icad isimli bir program kullanıyorum) exceldeki koordinatlardan ilk şeklin koordinatlarını (arada virgüllü ve başında _pline komutu ile) kopyalayıp autocad komut satırına yapıştırıyorum yapıştırıyorum auotocadde çizdirdikten sonra gerekli değişiklikleri yapıyorum. Burada iki sorunla karşılaşıyorum. Birincisi _pline ile çizdirdiğim ilk koordinatları hafızasından silmiyor. İkincisi ise daha önce bahsettiğim gibi orijin noktasını ben belirlediğim halde koordinatları oradan almıyor. 0,5-12,3 vs gibi koordinat alması gerekirken -4444698,-658325 gibi saçma sapan koordinatlar yazıyor. Ayrıca ben boş bir sayfaya ilk şekli çizip lispi çalıştırınca koordinatları hala yukarıdaki gibi alıyor. Bu durumda ne önerirsiniz.
|
31.12.2009 23:11
ProhibiT |
Merhaba berferan68 :)
"...orijin noktasını ben belirlediğim halde..." demişsiniz. ucs ile orijin belirleyeceğinizi hiç düşünememiştim. Fonksiyonun aşağıdaki hali bütün problemlerinizi çözecektir umarım. Kod: (defun c:NokLs () (setvar "cmdecho" 0) (setq cikut (open (getfiled "Nokta Listesi" "" "txt" 1) "w") plln (entget (car (entsel "\nPolyline seciniz.")))) (while (setq nokta (cdr (assoc 10 plln))) (setq nokta (list (car nokta) (cadr nokta) (getvar "elevation")) nokta (trans nokta (cdr (assoc -1 plln)) 1) xko (car nokta) yko (cadr nokta) plln (subst (list 11 (cdr (assoc 10 plln))) (assoc 10 plln) plln)) (write-Line (strcat (rtos xko 2 2) (chr 9) (rtos yko 2 2)) cikut) ) (close cikut) (princ) ) Olayın Lisp ve programlama mantığıyla ilgilenen arkadaşlar için kısa bir açıklama vermek istiyorum. Polyline hangi UCS'de (User Coordinate System) çizilirse çizilsin AutoCAD vertex noktalarını WCS'de (World Coordinate System) tutuyor. Biz programımızda, entget ve assoc 10'larla bu noktaları yakalıyoruz. Bu durumda bulduğumuz noktalar daima WCS de tanımlı oluyorlar. Bu koordinatları o anki aktif UCS'ye çevirmek için trans komutunu kullanmak gerekiyor. Bu seferde başka bir problemle karşılaşıyoruz. trans komutu x, y ve z den oluşan 3 koordinat alıp gene 3'lü koordinattan oluşan bir nokta üretiyor. Halbuki, Polyline objesi 2 boyutlu bir objedir (3Dpolyline değil) ve vertex noktaları x ve y den oluşan 2'li koordinata sahipler. trans komutuna parametre olarak girilince hata veriyor. Bunun için o an geçerli elevation değerini bu koordinatlara z değeri olarak ilave ettim. Koordinatları aktif UCS'ye çevirdikten sonra gene ilk iki değeri x ve y olarak aldım. trans komutunun güzel bir özelliği var; genel formatı (trans point from to ...) burada from parametresi olarak object name kullandım, to parametresi olarak ta 1 (active UCS) kullandım. Polyline hangi koordinat sisteminde çizilirse çizilsin dosyaya yazılırken o anda aktif olan koordinat sitemine göre yazılıyor... İlginç bir deneyimdi benim için, epeyce yeni şeyler öğrendim :) Selamlar, Sevgiler, Herkese Kolay Gelsin... ProhibiT (31.12.2009 23:18 GMT) |
01.01.2010 20:35
berferan68 |
Çok teşekkür ederim süpersiniz
|
06.01.2010 13:18
adsari |
Merhaba arakadaşlar.
Benim çok açil bir sorunum var. Çözerseniz memnun olacağım. Katı bir cismin hacmi, ağırlık merkezi gibi sorularıma cevap verecek bir komut vardı bulamıyorum. Hatırlayan varsa lütfen yardımcı olurmusunuz.
|
06.01.2010 13:36
ProhibiT |
massprop
|
08.01.2010 14:28
cngzklc |
Selam Arkadaşlar,
Sizden bir lisp isteğim olacak. Autocad içerisindeki malzeme listesini ( yada seçili yazıları) yazı olarak başka bir dosyaya (excell,txt veya world dosyası) atabileceğim bir lispe ihiyacım var. Yardımcı olursanız sevinirim. Şimdiden yardımcı olan ve olamayan herkese teşekkur ederim. :)
|
08.01.2010 15:24
aslanv |
bunun için lispe ihtiyacın olmaması gerek. Kullandığın versiyon ne bilmiyorum ama EATTEXT ile textleri de excel listesine atabilirsin.
|
08.01.2010 16:05
cngzklc |
AutoCAD 2008'i kullanıyorum.
Çok teşekkur ederim Aslanv. Oldu. Fakat burada malzemeleri hep alt alta atıyor. Yani Poz Miktar Kesit En Boy Kalite P/1 2 Ad 25 450 800 S355J0 .... gibi devam ediyor. Resimde malzeme listesi aşağıdaki gibi gösteriyor ve bu şekilde de atabilirmiyiz. Poz Miktar Kesit En Boy Kalite P/1 2 Ad 25 450 800 S355J0 Yardımın için çok teşekkur ederim. İşime yaradı. :)
|
11.01.2010 06:54
ec |
Bir lispe ihtiyacım var. Eğer yardımcı olabilirseniz çok sevinirim.
Proje içinde çeşitli layerlarda bol miktarda blok mevcut. Bloklar doğru layerlarda değil. Ancak projenin içinde tüm bloklardan doğru layerda bulunan 1’er blok topluca bulunmakta. Bu doğru layerlarda bulunan bloklar baz alınarak proje içindeki tüm blokları layerlarına alan bir lisp. İlgilenen ve emek veren arkadaşlara şimdiden teşekkürler.
|
11.01.2010 09:40
Harbi65 |
Alıntı Bu işlemi QSELECT komutuyla yapabilirsiniz... Aynı isimde ki blok grubunu QSELECT ile seçtirip istediğiniz layera atayabilirsiniz...
|
11.01.2010 10:01
miyatu |
referans olarak gosterdigin block ile ayni isimdeki blocklari referans block un layer ina atan lisp
Kod: (defun c:bld () (setq ref_blok (entsel "\n referans blogu sec:")) (setq ref_layer (cdr (assoc 8 (entget (car ref_blok))))) (setq ref_ad (cdr (assoc 2 (entget (car ref_blok))))) (terpri) (prompt "tum bloklari sec:") (setq sset (ssget '((0 . "INSERT")))) (setq ns (sslength sset)) (setq ent1 (ssname sset 0)) (setq ds 0) (while (/= ent1 nil) (setq liste (entget ent1)) (setq ad (cdr (assoc 2 liste))) (if (= ref_ad ad) (progn (setq liste (subst (cons 8 ref_layer) (assoc 10 liste) liste )) (entmod liste))) (setq ds (+ ds 1)) (setq ent1 (ssname sset ds)))) ins. isinize yarar kolay gelsin
|
11.01.2010 10:42
kemalizmir3535 |
iyi günler. yardımınızı istediğim konu, excell.den aktardığım noktaların numara adlarının görünmemesi, excellden noktaları atıyorum ama, sadece noktalar olarak, bunların numaralarının da görünmesini rica edecektim. bu konuda lsp.niz varsa yardımcı olursanız sevinirim
|
11.01.2010 10:48
cngzklc |
Alıntı Öncelikle paylaştığınız bilgi için teşekkur ederim. "txt" komutunu çalıştırdığımda "; error: bad argument type: streamp nil" hatasını veriyor ve herhangi bir dosya oluşturmuyor. Ayrıca text'leri tek tek seçerek işlem ilerliyor. Ben yapacağım işlem malzeme listesini txt veya excel dosyasına atmak. ASLANV arkadaşım sağolsun EATTEXT komutunu önermişti fakat onda da her kelimeyi alt alta atıyor. Aşağıdaki gibi yapabileceğimiz bir lisp varmı yada komut. Poz Miktar Kesit En Boy Kalite P/1 2 Ad 25 450 800 S355J0 P/2 2 Ad 30 350 700 S355J0 P/3 2 Ad 10 250 500 S355J0
|
11.01.2010 13:14
ProhibiT |
ec arkadaşımızın sorduğu sorunun en sade ve güzel çözümü Harbi65 hocamın verdiği yol bence.
miyatu arkadşımızın verdiği Lisp fonksiyonla da çözülür elbette. Söz konusu Lisp; Kod: (defun c:bld () şeklinde daha kısa da yazılabilir...(setq ref_blok (entget (car (entsel " referans blogu sec:"))) ref_layer (cdr (assoc 8 ref_blok)) ref_ad (cdr (assoc 2 ref_blok)) sset (ssget "X" (list (cons 0 "INSERT") (cons 2 ref_ad)))) (command "change" sset "" "p" "la" ref_layer "") (prin1) ) cngzklc sizin sorunuza gelince; aslanv arkadaşımızın size önerdiği komut her attribute objesini ayrı bir satır olarak extract eden bir komut. miyatu arkadaşımız tarafından hazırlanmış lisp fonksiyon ise, text objeler için hazırlanmış. Anladığım kadar sizin objeleriniz Attribute, bu nedenle bad argument hatası veriyor. Fonksiyon text beklerken attribute gösterince hata veriyor yani... Probleminizi çözebileceğiniz basit bir program yazılabilir elbette. Biraz daha detaylı bilgiye ihtiyaç var yalnız. Eğer çok acele değilse, ve bana çalıştığınız dosyayı (hiç olmazsa ilgili metraj tablosunu) mail olarak gönderebilirseniz... İlk fırsatta yazmaya çalışırım. Aslında bu konunun kesin ve net çözümü, C:\Program Files\AutoCAD XXXX\Sample\ActiveX\ExtAttr\ klasöründe bir örnekte verildiği gibi AutoCAD ActiveX özelliğini kullanarak Visual Basic ile Excel altında yazılacak bir program. Daha önce benzer şeyler yazdım ama, duruma özel Visual Basic programlar olarak kaldılar... Kolay gelsin... ProhibiT (11.01.2010 13:20 GMT) |
11.01.2010 19:01
miyatu |
Alıntı hocam onerınızı bende dusundum ama lısp yazarken ozellıkle block ve textlerde command fonksıyonunu kullanmamaya kararverdım cunku bu nesneler ıcın sıstem ayarlarına gore kullanılan komut farklılık gosterebılıyor bır dıger konu ıse lıspe yenı baslayan arkadaslar ıcın yazdıgım lısplerın yol gosterıcı olmasını ıstıyorum... herkese kolay gelsın...
|
11.01.2010 19:32
ec |
Emeğiniz için teşekkürler.
Bu lispi çoklu seçimle de kullanabilecek duruma getirebilir miyiz. Her blok için ayrı ayrı bu lispi kullanmak yerine tek seferde bu işlemi yapabilir miyiz. Çalıştığım dosyalarda doğru layerda bulunan bloklar birarada bulunuyor. Dolayısıyla daha pratik olacağını düşünüyorum.
|
12.01.2010 08:47
chico1907 |
PROHİBT;
HOCAM BENİM GÖNDRMİŞ OLDUGUM EGZANTRİK REDÜKSİYONLA İLGİLİ RESİMİ İNCELEME ŞANSINIZ OLDUMU ACABA?İYİ ÇALIŞMALAR KOLAY GELSİN...
|
12.01.2010 09:43
miyatu |
Alıntı Kod: (defun c:bld() (prompt "referans bloklari sec:") (setq ref_blok_set (ssget '((0 . "INSERT")))) (setq ns (sslength ref_blok_set)) (while (< 0 ns) (setq ref_ad (cdr (assoc 2 (entget (ssname ref_blok_set ns))))) (setq ref_layer (cdr (assoc 8 (entget (ssname ref_blok_set ns))))) (setq sset (ssget "X" (list (cons 0 "INSERT") (cons 2 ref_ad)))) (setq ns1 (sslength sset)) (setq ent1 (ssname sset 0)) (while (< 0 ns1) (setq liste (entget ent1)) (setq liste (subst (cons 8 ref_layer) (assoc 10 liste) liste )) (entmod liste) (setq ns1 (- ns1 1)) (setq ent1 (ssname sset ns1))) (setq ns (- ns 1)))) sanirim bu isini gorur test etmedim herhangi bir hata ile karsilasirsan tekrar denerim...
|
ec |
miyatu teşekkür ederim.
ama çalıştıramadım. sanırım bir hata var. şu şekilde; Command: BLD referans bloklari sec: Select objects: Specify opposite corner: 6 found Select objects: error: bad argument type: lentityp nil
|