09.08.2012 12:10    

ziytan
arkadaşlar kanalizasyon projesinde kullanmak için profil programı arıyorum. Yağmur ve kanalın çakışmalarını yapabileceğim bir lisp varsa o da olur teşekkür şimdiden

28.08.2012 09:02    

Travaci
Kod:

(while (=  ent nil)
(if (null (setq ent (entsel "\nDeğiştirilicek donatıyı seçiniz.")))
(alert "\nSeçim yapılamadı, tekrar deneyin.")))

Burdaki uyarı ve seçim yapılmadığında tekrar sorduması iin yazılan kodu
Kod:

(setq dnt1 (entget (car (entsel "\r1.Donatiyi secin..."))))

Bunun için yaptığımda olmamasının sebebi nedir, nasıl olmalıdır ? Teşekkürler.

29.08.2012 09:48    

ehya
Travaci




Öncelikle şahin hocam bu mesajını görseydi Türkçe'yi yanlış kullanmandan ve bozuk cümle kurulumundan dolayı güzel bir fırça çekerdi.

Sorunun cevabına gelince, yazdığından birşey anlamadığım için birşey diyemiyorum.
Alttaki kodu yukarıdaki bölüme mi uyarlamak istiyorsun? Öyle ise, neden kodunu yukarıdaki gibi düzenlemiyorsun?

29.08.2012 10:15    

Travaci
Evet aynen öyle fakat yaptığımda çalışmıyor.

29.08.2012 15:23    

Travaci
Kod:

(defun c:Sec (/)
   (setq see (ssget "x" (list (cons -4 "<or")(cons 1 "10.9")
   (cons 1 "10,9")(cons -4 "or>")))) (princ)
   (if (= see nil) (progn (princ "Böyle bir yazı bulunamadı.")))
   (sssetfirst nil see) (princ)
)

Çizimde 10.9 ve 10,9'un dışında 10 ve 9 olan rakamlarıda seçiyor ? Sebebi nedir ? Sadece seçim setindekilerini seçtirmek için ne yapmalıyım.
Teşekkürler

03.09.2012 08:24    

tugrulsahin
Merhaba arakadaslar ben yeni üye oldum.Sitede arastırdım ama bulamadım,ihtayaçım olan bir lips var. Şu an bir alt yapı projesinde çalışıyorum ve proje çok büyük.İstedigim lips'in yapmasını istedigim şey ise şu; tüm projeyi bir kerede seçicem ve tum line'ların kırık yerlerine birer isim verip (numara yada harf) onları excelle aktarmak.Fakat verdigi numaralar bir birini takip eden line'da olurlarsa hesaplaması daha kolay olucak.Yapıcagım işlem ise baca aralarını excelle yada bir text dosyasına aktarıp ne kadar iş yapılmış ne kadar yapılacak iş var ve nerelerde onları gormek excell uzerinden. Bir baca kör degilse eğer en az 2,en fazlada 4 kere kullanılıyor.
Buna uygun bir lips göremedim sitede,eğer varsa beni yölendirebilirmisiniz,yoksada yazmanız mümkünmüdür?

03.09.2012 08:34    

ehya
tugrulsahin


Bu konu, autolisp ile ilgili soruların sorulduğu bölümdür. Lisp isteklerinin olduğu bölüm değildir.



travaci


Müsait olduğumda soruna bakacağım.

03.09.2012 08:47    

tugrulsahin
Pardon. İlginiz içinde teşekkür ederim

03.09.2012 22:03    

Travaci
Bir sorum daha olucak, ikisini birden aradan çıkartırsanız sevinirim : )

Kod:

(defun c:XXX (/)
(entmake (list
(cons 0 "Layer")(cons 100 "AcDbSymbolTableRecord")(cons 100 "AcDbLayerTableRecord")
(cons 2 "YARDIMCI")(cons 6 "Continuous")(cons 62 11)                                                 
(cons 70 0)(cons 290 1)(cons 370 0)                                                 
)                                                           
)             
(setvar "cmdecho" 0) (command "undo" "group") (setq olayer (getvar "clayer")) (setvar "clayer" "YARDIMCI")
(defun *error* (er) (setvar "clayer" olayer) (command "undo" "e") (princ er))
(command "XLINE" "H")
(setvar "clayer" olayer) (command "_.undo" "e") (prin1)
)


Burda yapmak istediğim layer açtıktan sonra, açılan layer a geçip daha sonra xline veya xline larımı attıktan sonra, yanlışlıkla çıkması durumunda veya komutu bitirdiğimde eski layer a tekrar dönmesiydi. Fakat ilk line ımı attıktan sonra layer ilk haline dönüyor.
Teşekkürler

04.09.2012 18:15    

ProhibiT
XLine komutu recursively caling yani kendi kendini çağıran komuttur. İlk XLine çizildikten sonra sizin Lisp fonksiyonunuz sonlanır ve dolayısıyle current Layer eski haline döndükten sonra, Xline kendi kendini çağırarak, fonksiyonun dışında AutoCAD komut satırında devam eder. Command XLINE' diretifini loop içinde tekrarlatmak ve her tekrarda sonlandırmak gerek. Aşağıdaki örnekte YARDIMCI Layer'ının mevcut olup olmadığına bakıp, yoksa oluşturulacak şekilde düzenledim. Mevcut bir Layer'ı entmake ile create etmek fonksiyonun akışkanlığı açısından ciddi sakıncalar çıkarır. Error Trap fonksiyonunu başlangıçta tanımlamak daha doğrudur, hatta öyle olması şarttır. Gene error trap (*error*) fonksiyonunu ya her kullanımda ve çıkışta undefine etmek (nil atamak) gerekir ya da, ana fonksiyonun Global Variables listesine yazarsanız normal veya hatalı çıkışta kendiliğinden undefine edilir.

Kod:

(defun c:XXX (/ *error* oLayer PnT)
  (defun *error* (er) (setvar "clayer" oLayer) (command "undo" "e") (princ er))
  (setvar "cmdecho" 0) (command "undo" "group")
  (setq oLayer (getvar "clayer"))
  (if (not (tblsearch "Layer" "YARDIMCI"))
    (entmake
      (list (cons 0 "Layer") (cons 100 "AcDbSymbolTableRecord")
            (cons 100 "AcDbLayerTableRecord") (cons 2 "YARDIMCI")
            (cons 6 "Continuous") (cons 62 11) (cons 70 0)
            (cons 290 1) (cons 370 0))))
  (setvar "clayer" "YARDIMCI")
  (while (setq PnT (getpoint)) (command "XLINE" "H" PnT ""))
  (setvar "clayer" oLayer) (command "_.undo" "e") (prin1)
)


Bunun yerine, Current Layer'ı tekrar tekrar değiştirmektense, Nokta girildiği sürece entmake kullanarak istenen Layerda XLine oluşturmak çok daha sade ve garantili bir yol olmaz mı? Nokta seçildiği sürece Horizontal XLine oluşturulur nokta seçimi nil döndüğünde, Layer'larla cebelleşmeden işlem sonlanır.

04.09.2012 18:41    

Travaci
Hocam teşekkürler, bu şekilde yapmadım değil, fakat böyle olduğunda xline'ı çağırdığını göremiyorum, tıkladıktan sonra direk yerleştiriyor. Daha orjinal bişi olsun istedim olmadı : )

09.09.2012 15:18    

Travaci
Kitapta entnext kullanımıyla ilgili, tanımında; bu fonksiyon ilk silinmemiş nesneyi verir. İstenirse bu nesne bir değişkene atanabilir demiş. Bir Attributun içinden dxf kodunu çekmeye çalışıyorum,
Örneğin;
Kod:

(setq pozno (car (entsel "\nDemir boyunun yazılacağı pozu seçin. ")))
            (if pozno (progn
                  (setq es-boy (assoc 1(entget(entnext(entnext(entnext(entnext(entnext pozno))))))))
                  (setq es-ibuk (assoc 1(entget(entnext(entnext(entnext(entnext(entnext(entnext pozno)))))))))
          (setq es-sbuk (assoc 1(entget(entnext(entnext(entnext(entnext(entnext(entnext(entnext pozno))))))))))
            )
        )

Burda attribut ün içindeki 5. 6. & 7.sıradaki tag lerin kodları çekilmiş. Bir yukarıdaki tanıma bakıyorum birde buradaki kullanımına hiçbi benzerlik göremiyorum bunu bi açıklayabilirmisiniz.

10.09.2012 17:38    

ProhibiT
Okurken dikkatli okuyunuz, ya da sağlam kaynaklara başvurunuz.

Entnext: Returns the name of the next object (entity) in the drawing
(entnext [ename])
Arguments: ename (The name of an existing entity.)
Return Values : If entnext is called with no arguments, it returns the entity name of the first nondeleted entity in the database. If an ename argument is supplied to entnext, the function returns the entity name of the first nondeleted entity following ename in the database. If there is no next entity in the database, it returns nil. The entnext function returns both main entities and subentities.

Bahsedilen hangi kitaptır bilemiyorum ama, AutoCAD Help'ten yaptığım alıntının koyu yazdığım bölümünde açıkça, "entnext komutu argümansız olarak kullanıldığında, drawing database içindeki ilk silinmemiş obje döner." şeklinde açıklanmış. Bilindiği gibi AutoCAD ve AutoLSIP help dosyalarında köşeli parantez içindeki argümanların kullanımı, duruma ve isteğe bağlıdır, mecburi değildir, ihtiyaca göre kullanırız ya da kullanmayabiliriz. ename verirseniz, ondan bir sonraki obje döner. ename vermezseniz, çizim içindeki ilk silinmemiş obje döner.

11.09.2012 05:50    

Travaci
Evet aynı yazdığım gibi, bir profösörün kitabı Türkçe bir kaynak.

11.09.2012 19:05    

ProhibiT
Kimin yazdığı ve yazarın titri hiç önemli değil, kitap yazmak ciddi bir iştir. Bunca emek verip bir ürün ortaya koyan insanın bu tür bir hata yapacağını sanmıyorum. Bir önceki, bir sonraki paragraflarda mutlaka açıklanmıştır. Bu problem çözüldüğüne göre, yazdıklarımın ve eleştirilerimin doğru anlaşılıp değerlendirileceğini umarak, soru içindeki kod için başka bir eleştirim daha var.

Pek çok defalar yazdığım gibi, yazılan kod genel olmalıdır. Bu tür uyarılara genelde aldığımız cevap, "ben böyle de işimi görüyorum" oluyor. Çok zor olmayan bir disiplini edinmek yerine, yan yollara kaçmanın hiç bir gereği yok ki.

(setq es-sbuk (assoc 1 (entget (entnext (entnext (entnext (entnext (entnext (entnext (entnext pozno))))))))))
şeklinde askeri kıta gibi entnext dizmek eninde sonunda hataya sebep olacaktır. BLock tanımı (BLock definition) içinde yer alan attribute'lerin her zaman aynı sırada olacağını varsayamayız. Söz konusu bLock'u explode eder objelerini edit edip bLock'umuzu yeniden tanımlarsak (redefine edersek) Attribute'lerin sırası ters dönecektir (reverse order). Veya yeni bir çizime bLock'umuzu dışarıdan insert edersek Attribute'lerin sıralaması gene değişecektir. Böyle olunca da yazdığımız fonksiyon doğru çalışmayacaktır.

Bu noktada size bir ipucu daha vermem gerek. AutoCAD Database'indeki objeler hiyerarşik açıdan iki gurupta incelenir. Ana objeler (main Objects) ve alt objeler (sub objects).

entnext komutuna parametre olarak bir main object verirsek, o objeden sonra varsa sub object, yoksa bir sonraki main object döner. parametre olarak verdiğimiz main object çizimin son objesi ise nil döner.

entnext komutuna parametre olarak bir sub object verirsek, varsa bir sonraki sub object döner, sırada bir sub object yoksa nil döner, bir sonraki main object dönmez. Yani entnext komutu açısından sub object'lerin sonu çıkmaz sokaktır (dead end).

Bu durumda, bir Block objesi ele alınarak nil dönmediği sürece şartına bağlı bir döngü (loop) kurarsak, bLock main Object'inin altındaki tüm sub objects (örneğimizde attribute'ler) taranmış elden geçirilmiş olur.

Daha elle tutulur örneklersek; POZ isimli bir bLock'umuz ve be bLock altında da CAP, BOY ve ADET Tag'lı 3 tane attribute'ümüz olsun. Bu Attribute'lerin değerlerini Cap, Boy ve Adt değişkenlerine alalım.
Kod:

(setq pZ (ssname (ssget ":s" (list (cons 0 "insert") (cons 2 "POZ"))) 0))
(while (setq Pz (entnext pZ))
  (setq Pivot (entget pZ))
  (if (= "ATTRIB" (cdr (assoc 0 Pivot)))
    (cond ((= "CAP" (cdr (assoc 2 Pivot))) (setq Cap (cdr (assoc 1 Pivot))))
          ((= "BOY" (cdr (assoc 2 Pivot))) (setq Boy (cdr (assoc 1 Pivot))))
          ((= "ADET" (cdr (assoc 2 Pivot))) (setq Adt (cdr (assoc 1 Pivot))))))
)
Biz inatla yazdıkça sabırla okuyanlara kolay gelsin. :)

11.09.2012 19:29    

Travaci
Teşekkürler hocam, asıl öğrenmek istediğim buydu. Tekrar baktım ama maalesef dediğim gibi açıklama yapılmış, onunu dışında birşey yazılmamış, ne öncesinde ne sonrasında.

13.09.2012 13:04    

yfkyusuf
Appload yardımı
Merhaba arkadaşlar,
Yardımlarınız için şimdiden herkese teşekkür ederim.
Benim sorum lisplerin autocade yüklendikten sonra tekrar çalışması hakkında. Lispleri appload yaptıktan bir müddet sonra çalıştıramıyorum. Tekrar appload yapmam gerekiyor. Bunun sebebi ne olabilir acaba. Yardımcı olabilirseniz sevinirim.
Saygılarımla yfkyusuf

13.09.2012 14:20    

Travaci
Appload dedikten sonra contents butonuna basıp ilgili lisplerin yolunu göstereceksiniz.

14.09.2012 09:19    

Harbi65
Content ile lispleri yüklediğimizde Regedite yüklenen lispleri kaydediyor..
Ben bunu lisp ile kaydetmesini istiyorum... Aşağıda ki şekilde de Regedite yazdırıyorum... Regedit açınca yazdığı görünüyo ancak regedit de ki NumStartup değeri de değişmiyo ve Appload / Content gibi de Autocade yüklenmiyor...
Bu dosyalar ayrıca başka biyere de kayıt yapılıyo mu? Başka şekilde bunları nasıl yükleriz?

Kod:

(vl-registry-write Reg:Path (strcat (itoa (setq i (1+ i))) "Startup") (strcat Dosya:Path Dosya))

14.09.2012 11:18    

yfkyusuf
Appload lisp
Appload dedikten sonra contents yapıyorum zaten. Ama buna rağmen bir kullanımlık olarak lispleri çalışır hale getiriyor. Bazı lisplerde değil ama bir çoğunu devre dışı bırakıyor. Bunun olmaması ve autocadi her açtığımda yükleme işlemini otomatik yapmasını istiyorum. Daha önceleri böyle bir sorunla hiç karşılaşmadım. Autocadi açtığımda bütün lispleri otomatik yüklerdi. Bu konuda yardımcı olabilirmisin.

Saygılarımla
YfkyusufAppload lisp

Önceki Sayfa [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] > 24 < [25] [30] [35] [40] [42] Sonraki Sayfa
Copyright © 2004-2022 SQL: 1.204 saniye - Sorgu: 100 - Ortalama: 0.01204 saniye