17.06.2008 16:45    

meteyus
projelerde geldiğinde sadeleştirme yapılarak ornegin masa sandalye , duvar ve kolon içindeki hatch lerin silinmesi gerekmektedir. bunun nedeni hem projenin kalabalıklasmasını engelemek hemde cıktı aldıgımızda fazla toner harcamasın diye cogu kez hatch lerin temizlenmesi uzun surmekte bu nedenle obje türü (örnek hatch) secilerek bu objeturundeki diğer objeleri secmesini saglayan lisp ihtiyacım var. yardımcı olursanız sevinirim.

17.06.2008 19:39    

ehya
Komut ismi SIL
Komutu çalıştır. Referans bir nesne türü seç. Ardından bu nesne türünü silmek istediğin çizimini seç.


Kod:

(defun c:sil ()
  (setvar "errno" 0)
  (setq nnn nil)
  (while (= nnn nil)
    (setq sil_ref (entsel "\nReferans nesne türünü seçin:"))
    (if (= sil_ref nil)
      (progn
(if (= (getvar "errno") 7)
  (progn
    (setvar "errno" 0)
    (setq nnn nil)
  )
)
(if (= (getvar "errno") 52)
  (progn
    (setvar "errno" 0)
    (setq nnn t)
  )
)
      )
      (progn
(setq sil_tanim (cdr (assoc 0 (entget (car sil_ref)))))
(alert (strcat "\nSilinecek nesne türü  --> " sil_tanim " <--"))
(setq sil_nesne (ssget (list (cons 0 sil_tanim))))
(if (= sil_nesne nil)
  (progn
  )
  (progn
    (command "erase" sil_nesne "")
  )
)
      )
    )
    (setq nnn t)
  )
  (princ)
)

ehya (05.03.2013 21:25 GMT)

23.06.2008 07:24    

infiniyt
lisp mimari projeyi temizlemek için dieal gel gelelim gözlemlediğim bir sorun var; layer olarak değilde line,circle,polyline,insert vs olarak görüyor objeleri ve silinmesi istenmeyen bir çok objede silinmiş oluyor

23.06.2008 07:40    

ehya
Seçim, nesne türüne göre yapıldığı için silme işlemi nesnelere göre yapılıyor.
İsteyen bunu katman olarak değiştirebilir.
Bunu yapmak için


(setq sil_tanim (cdr (assoc 0 (entget (car sil_ref)))))
(alert (strcat "\nSilinecek nesne türü --> " sil_tanim " <--"))
(setq sil_nesne (ssget (list (cons 0 sil_tanim))))


satırlarını


(setq sil_tanim (cdr (assoc 8 (entget (car sil_ref)))))
(alert (strcat "\nSilinecek nesnelerin katman adı --> " sil_tanim " <--"))
(setq sil_nesne (ssget (list (cons 8 sil_tanim))))


olarak değiştirin.

23.06.2008 09:01    

meteyus
tesekkürler eline sağlık

05.03.2013 20:03    

kerem1453
sayın ehya bu seçime göre silme lispini katmana göre değiştirdim fakat lispi yükleyip bi kereye mahsuben çalıştırabiliyorum.ikinci defa secim yapmasını istedigimizde lisp çalışmıyo sorun ne olabilir? dwg dosyamızı açıp kapattıgımızda düzeliyor yine bir defa çalışıyor.

05.03.2013 21:25    

ehya
kerem1453




Haklısınız. Lispte küçük bir sorun oluşmuş. Düzelttim. Tekrar alabilirsiniz.

06.03.2013 12:42    

waytooraider
Hocam elinize sağlık çok güzel bir lisp olmuş.

Seçse move,copy yada silmeyi de seçimden sonra yapsak çok hoş olurdu. Neden böyle bir şey istediğimi açıklayacak olursam ; projelerde bazı blocklar patlamış oluyor.Bu şekilde patlamış olanları silmeden görmüş oluruz.

Yada seçim yapıldığında bulut çizilsin gibi bir lisp genel kullanıcılar için harika olurdu.Projedeki tüm insert edilmiş blockları blulut içine alınması.Çok şey istemiş olabilirmiyim:)

Saygılarımla Hocam.

06.03.2013 13:08    

ehya
waytooraider




lispte bulunan

(command "erase" sil_nesne "")

satırı silin ve yerine

(sssetfirst nil sil_nesne)

satırını yazın.
Bu işlemden sonra nesneler seçili durumda olacaktır. Daha sonra hangi komutu çalıştırırsanız o komutun seçim setine dahil olacaktır.

06.03.2013 13:20    

waytooraider
Çok Teşekkürler.

Peki seçilenlerin üstüne hatch'li daire getirtebilirmiyiz :)

Ama olursa müteşşekür olurum.

Saygılarımla Ehya Hocam.

06.03.2013 13:43    

ehya
"Seçilenlerin üzerine hatch'li daire getirmek" ne demek??

06.03.2013 14:10    

waytooraider
Öcelikle sonsuz saygılarımı ileterek başlamak istiyorum.Yıllardır Siz'in ve Şahin Hocamızın yazılarını bıkmadan sıkılmadan hergün takip ediyorum.

Abuk subuk bi cümle kurduysam özürdilerim.

Derdimi şu şekilde anlatmak istiyorum.

SIL lispini blocklar için kulanmış olayım.
Az önce ayarladığınız SIL lispi ile tüm blokları seçtikten sonra;
Seçilen blokların üzerine cloud yada içi hatch'li çember çizilsin.
Bunu istememin sebebi o bloklardan hangisi patlamış hangisi patlamamış onu görmüş olacağım.
Bu sayede bcount ile sayımı yapılmayan blocklar rahatlıkla görülecektir.

Sabrınızı zorladıysam çok özür dilerim Saygıdeğer Hocam.

06.03.2013 15:50    

ehya
Seçilen paftadaki blokların ortasına işaretlemek için Hatch yapar.

Hatch'in boyutunu değiştirmek için aşağıdaki kod'da bulunan
(command "_.circle" ortasi 20)
satırdaki 20 sayısını isteğinize göre değiştirin.
Komut adı BLSS

Kod:

(defun c:blss ()
  (vl-load-com)
(setq sec_bl (ssget (list (cons 0 "INSERT"))))
  (if (= sec_bl nil)
    (progn)
    (progn
      (setq say_ (sslength sec_bl)  c 0)
      (while (< c say_)
(setq tek (ssname sec_bl c))
(vla-getboundingbox (vlax-ename->vla-object tek) 'MinP 'MaxP)
(setq    MinP (vlax-safearray->list MinP)
        MaxP (vlax-safearray->list MaxP))
(setq ortasi (polar minP (angle MinP MaxP)(/ (distance MinP MaxP) 2.0)))
  (command "_.circle" ortasi 20)
  (setq ent (entlast))
(command "_.hatch" "p" "solid" "s" ent "")
(entdel ent)
(setq c (+ c 1)))))(princ))

06.03.2013 16:14    

kerem1453
mehmet bey sizden bu lisp için yazma-ekleme imkanınız varsa objenin türüne göre seçim yaptırdıgımızda mesala text secersek yükseklik circle secersek çap sorma şeklinde ekleme imkanı olurmu ?vaktinizi ayırıp ilgilendiginiz için tşk ederim.

06.03.2013 16:50    

ehya
Arkadaşlar bu lisp işi uzadıkça uzar. Herkes böyle bir şeklini değiştirmek istese, o zaman ben burada iş yapamam.
İsteklerinizin gelişmiş hali FILTER komutunda zaten mevcut. Buradan istediğiniz gibi seçim seti oluşturabilirsiniz.

07.03.2013 06:59    

waytooraider
Select smilar komutu ile harika bir ikili oldu.

Select smilar ile blokları seçip bu lisp ile blokları boyadığımız zaman,patlamış blokları göreceğiz. onları saymakta çok kısa bir zaman alacak farzı misal yangın tesisatında sprinkleri sayarken bcount ve bu lisp ile hatasız sprinkler saymış olacağız.

Elinize sağlık çok güzel olmuş.

10.03.2013 21:50    

waytooraider
Hocam ne kadar kızarsanız haklısınız,ama dediğiniz circle'ın çapını autocadin için de iken değiştirebilme imkanımız varmı. aşırı yoğunlukta kullandığım bir lisp olduda. Herdefasında masa üstunde lispi bulup o değeri değiştirip tekrar yüklüyorum.Lutfen son bir kez yardımcı olun.

Saygılarımla Ehya Hocam.

10.03.2013 22:04    

Travaci
Kod:

(defun c:bLs ()
   (vl-load-com)
   (if (not eby) (setq eby 20))
   (if (setq by (getint (strcat "\nCircle çapını giriniz:
                         <" (rtos eby) ">: ")))
   (setq eby by) (setq by eby))
   (setq sec_bl (ssget (list (cons 0 "INSERT"))))
   (if (= sec_bl nil)
   (progn)
      (progn
         (setq say_ (sslength sec_bl)  c 0)
         (while (< c say_)
            (setq tek (ssname sec_bl c))
            (vla-getboundingbox (vlax-ename->vla-object tek) 'MinP 'MaxP)
            (setq MinP (vlax-safearray->list MinP)
                  MaxP (vlax-safearray->list MaxP))
            (setq ortasi (polar minP (angle MinP MaxP)(/ (distance MinP MaxP)
                                2.0)))
            (command "_.circle" ortasi by)
            (setq ent (entlast))
            (command "_.hatch" "p" "SOLID" "s" ent "")
            (entdel ent)
            (setq c (+ c 1))
         )
      )
   ) (princ)
)

Travaci (10.03.2013 22:29 GMT)

11.03.2013 06:47    

waytooraider
Hocam çok teşekkürler. :)

26.05.2013 21:25    

waytooraider
Hocam bu konuda son bir iyilik istiyorum.Gecenin buçuğu ve hani belki olur.Hatchi blok şeklinde oluşturabilirmi.

> 1 <
Copyright © 2004-2022 SQL: 1.66 saniye - Sorgu: 99 - Ortalama: 0.01677 saniye