30.05.2012 11:35    

prgkolik
Öncelikle verdiğiniz bilgi için çok teşekkür ederim, çokta işimi gördü fakat gördüğüm kadarıyla patlamamış bloklarla kesişen tarafını silmiyor buna da bir yol bulabilir miyiz?

Teşekkürler

ProhibiT (30.05.2012 14:52 GMT)

04.06.2012 07:04    

ProhibiT
Fonksiyonun paylaşıldığı başlık altında da bu konudan bahsedildi, uzunca tartışıldı. BLock'lar explode edilmeden alt objeleri trim ya da break edilemeyeceğinden, explode edilmesi halinde başlangıçta düşünülmeyen pek çok probleme sebep olacağından, yazdığımız fonksiyonlarda kullanıcı block'larını işleme almıyoruz.

05.06.2012 15:21    

kadirsoyuk
Hazırladığım paftada başta kullandığım birçok multileaderların text tip ve boyutlarını değiştirmek istiyorum.Araştırdığım zaman bunun yalnızca lisple yapılabildiğini gördüm.Bu konu ile ilgili bildiğiniz hazır lisp veya yöntem var mıdır?
Cevaplar için teşekkür ederim.

06.06.2012 13:57    

waytooraider
Benim çok uçuk bir lisp isteğim olacak.Olup olmayacağı hakkında üstadlarımızın yorumları için şimdiden çok teşekkür ettiğimi belirtmek istiyorum.

Projenin içinde polyline ile kapalı bir şekil çizdiğimde sadece o polyline ile çizilmiş alanın içindeki hertürlü text objesinde arama yapıp gerektiği zaman replace komutunu find ' daki gibi kullanmak istiyorum. Find komutunda select object istediğim alanı seçimi için baya uğraşmama neden oluyor.

Saygılarımla.

06.06.2012 14:45    

ehya
waytooraider

uçuk bir lisp değil. Ancak hadi deyince yazılabilecek bir lisp değil... Vakit gerekir.

14.06.2012 13:21    

chnabr
Bloc Alt Obje Layer Bilgisini içerisine girmeden değiştirme

Block alt objelerinin layer özelliklerini içerisine girmeden değiştirmek için bir lisp araştırdım fakat herhangi bir yerde bulamadım bulduğum lispler ya çalışmadı yada sadece objenin dış katman bilgisini değiştirebildi. Forumdaki lisp' lere bakarken Sy. M. Şahin Güvercin abimizin vermiş olduğu block rengini değiştirme ve block linewigt değiştirme lisplerini gördüm.Bunun üzerine abimizden isteyebileceğimi düşündüm ve mesaj attım sağolsun abimiz beni kırmadı ve aşağıdaki kodu yazıp geliştirdi. Bu lisp block' ların içerisine girmeden referans olarak seçeceğiniz bir objenin(line, poliline, block vs.) layer özelliklerini seçeceğiniz block' lara aktarmaktadır.(bloc içerisinde başka bir block daha varsa onunda değişmektedir)
Lisp yüklendikten sonra "BLSOL" komutu ile çalıştırılır.
-Sizden Referans layer ismini isteyecektir girmek istiyorsanız girebilirsiniz yaksa Enter ile geçilir.
-Layer adı girmediğiniz için bu kez referans objeyi ister. Referans olacak objeyi seçerek enter ile devam edilir.
-Son olarak layer' larını değiştirmek istediğiniz block'ları seçersiniz . seçme işlemi block' lara tek tek tıklayarak yapılıyor.
Kod:

;|===========================================================================|;
;| bLsoL: Change bLock and Sub Object's Layer                                |;
;|        Seçilen Insert objelerinin ve referans bLock'unun Alt Objelerinin  |;
;|        (Sub Objects) Layer'ını belirlenen (seçilen) Layer'a değiştirir,   |;
;|        renklerini byLayer yapar.                                          |;
;|        Hazırlayan: M. Şahin Güvercin  www.autocadokulu.com  15.06.2012    |;
;|---------------------------------------------------------------------------|;
(defun c:bLsoL (/ LyR bLn m n bLs PvT bLk SoB)
  (setvar "cmdecho" 0) (command "_.undo" "group") (vl-load-com)
  (setq LyR (getstring "\nLayer Name [Enter to Select]: "))
  (if (= "" LyR) (setq LyR (cdr (assoc 8 (entget (car (entsel)))))))
  (princ "\nSelect Reference bLock(s): ")
  (setq bLn (ssget (list (cons 0 "Insert"))) m -1 n -1)
  (while (< (setq m (1+ m)) (sslength bLn))
    (setq bLs (append bLs (list (cdr (assoc 2 (entget (ssname bLn m))))))))
  (while (< (setq n (1+ n)) (length bLs))
    (setq PvT (tblobjname "bLock" (nth n bLs)))
    (while (setq PvT (entnext PvT))
      (if (= (cdr (assoc 0 (entget PvT))) "INSERT")
        (setq bLs (append bLs (list (cdr (assoc 2 (entget PvT)))))))))
  (while (> (setq n (1- n)) -1)
    (setq bLs (append (vl-remove (nth n bLs) bLs) (list (nth n bLs)))))
  (while (< (setq n (1+ n)) (length bLs))
    (setq PvT (tblobjname "bLock" (nth n bLs))
          bLk (ssget "x" (list (cons 0 "Insert") (cons 2 (nth n bLs))))
          m   (sslength bLk))
    (while (> (setq m (1- m)) -1)
      (setq SoB (vlax-ename->vla-object (ssname bLk m)))
      (vlax-put-property SoB 'Layer LyR) (vlax-put-property SoB 'CoLor 256)
      (entupd (ssname bLk m)))
    (while (setq PvT (entnext PvT))
      (setq SoB (vlax-ename->vla-object PvT))
      (vlax-put-property SoB 'Layer LyR) (vlax-put-property SoB 'Color 256)
      (entupd PvT))) (command "_.undo" "e") (prin1))


- Çok yüzsüzlük olacak ama Sn. M. Şahin abimizden eğer mümkünse bu lisp için 2 özellik daha eklemesini isteyeceğim.

1.Block seçimi tıklama yöntemiyle yapılıyor bunun sağdan sola yada soldan sağa seçme yöntemleriyle yapılması.
2.Block alt objelerinin layerleri istediğimiz layer oluyor fakat block' un kendisi aynı layer' da kalıyor. Alt objelerle birlikte objenin kendi layer' ı da değişmesi.

Çalışmalarından dolayı M. Şahin abiye tekrar teşekkür ediyorum çok işime yarayacak bir lisp oldu.

İyi günler...

ProhibiT (15.06.2012 00:31 GMT)

15.06.2012 00:52    

ProhibiT
İstediğiniz 2 özelliği de ekleyip, aynı fonksiyon forumda tekrar yer alıp kargaşa yaratmasın düşüncesiyle mesajınızdaki kod'u güncelledim. Düzenlenmiş son halini kendi mesajınızdan alıp kullanabilirsiniz.

1. BLock'lar (Insert objeleri) seçilirken özgürce seçim yapabilirsiniz. AutoCAD genel seçim mantığı geçerli olmak üzere, crossing window, fence,... gibi yöntemler kullanabileceğiniz gibi, tek tek objeleri tıklayarak ta seçim yapabilirsiniz. Seçim setini oluştururken, enter girip seçim işlemini sonlandırıncaya kadar, add/remove özelliklerini de kullanabilirsiniz.

2. İşleme alınan Insert (bLock reference) objelerinin de Layer'ı seçilen Layer'a, set edilir, CoLor'ları da ByLayer yapılır. Bahsettiğimiz işlem tüm çizim için uygulanacaktır.

- Önceki versiyondaki tüm çizimi regen etme işlemini kaldırdım. Bunun yerine yalnızca edit edilen objeleri update ederek performansı artırmaya çalıştım.

Kod oldukça kısa olmasına rağmen komplike bir fonksiyon oldu. Bu tür durumlarda ben olsam, fonksiyonun aklına ip ölçmek için, aynı bLock'u kendinin alt bLock'u olarak tanımlayıp sonsuz döngüye (infinite loop) sokmaya çalışırdım. Kullanıcı genelde benden daha kurnaz ve acımasızıdır biliyorum :) Bunlara da tedbir alarak yazmaya çalışıyoruz.

15.06.2012 05:26    

chnabr
Alıntı
ProhibiT :
İstediğiniz 2 özelliği de ekleyip, aynı fonksiyon forumda tekrar yer alıp kargaşa yaratmasın düşüncesiyle mesajınızdaki kod'u güncelledim. Düzenlenmiş son halini kendi mesajınızdan alıp kullanabilirsiniz.

1. BLock'lar (Insert objeleri) seçilirken özgürce seçim yapabilirsiniz. AutoCAD genel seçim mantığı geçerli olmak üzere, crossing window, fence,... gibi yöntemler kullanabileceğiniz gibi, tek tek objeleri tıklayarak ta seçim yapabilirsiniz. Seçim setini oluştururken, enter girip seçim işlemini sonlandırıncaya kadar, add/remove özelliklerini de kullanabilirsiniz.

2. İşleme alınan Insert (bLock reference) objelerinin de Layer'ı seçilen Layer'a, set edilir, CoLor'ları da ByLayer yapılır. Bahsettiğimiz işlem tüm çizim için uygulanacaktır.

- Önceki versiyondaki tüm çizimi regen etme işlemini kaldırdım. Bunun yerine yalnızca edit edilen objeleri update ederek performansı artırmaya çalıştım.

Kod oldukça kısa olmasına rağmen komplike bir fonksiyon oldu. Bu tür durumlarda ben olsam, fonksiyonun aklına ip ölçmek için, aynı bLock'u kendinin alt bLock'u olarak tanımlayıp sonsuz döngüye (infinite loop) sokmaya çalışırdım. Kullanıcı genelde benden daha kurnaz ve acımasızıdır biliyorum :) Bunlara da tedbir alarak yazmaya çalışıyoruz.



Teşekkür ederim lisp sorunsuz ve istediğim gibi çalışıyor bir sorun yok. Başka arkadaşlarında çok işine yarayacağını düşünüyorum. Emeğinize sağlık...

18.06.2012 08:25    

pulp fiction
herkese merhaba;

şöyle bir şey isticem mümkün müdür acaba...

kiriş isimlerini sol dan sağa x yönü, aşağıdan yukarı y yönü olarak numara veren lisp olabilir mi?

biz kiriş isimlerini seçicez (mesela hepsi K101) o isimleri vericek x ve y yönüne göre. bence herkesin işini çok kolaylaştırır...

25.06.2012 09:59    

Travaci
Arkadaşlar acil attributleri blokları hizzalayan bir lisp lazım, elinde olan varsa paylaşırsanız sevinirim.

26.06.2012 06:03    

map
Merhaba Şahin Hocam bir süre önce LnSpc komut adı ile yazmış olduğunuz bir list var idi.Bu lisp satrı aralıklarının aralarını düşey olarak değer girerek eşit mesafede olmasını sağlıyor.Buna bir ekleme yamamız mümkünmüdür acaba satır aralık değerini 1 - 1,5 yada 2 , artık ne girersek bir defa girdiğimizde komuttan çıkıncaya kadar aynı değer aktif olsun , çıkınca sıfırlansın tekrar daha sonra kullandığımızda yeniden değer girerek yeni işte kullanabilelim. her aralık ayarlayacağımızda tekrar değer giriyoruz.Buna da bi çözüm bulursanız çok seviniriz. Teşekkür ederiz .İyi Çalışmalar.


Kod:

;|===========================================================================|
| Komut adı: LnSpc                                                          |
| Belirlenen seçim setindeki tüm Text objelerinin                           |
| satır aralıklarını istenen şekilde düzenler.                              |
| Hazırlayan: M. Şahin Güvercin - www.autocadokulu.com                      |
|===========================================================================|;
(write-line "\nM. Şahin Güvercin - www.autocadokulu.com")
(defun c:LnScb (/ *error* TxTs L n ips sTxT PvT m Bi TxH dsvc)
  (setvar "cmdecho" 0) (command "undo" "group") (defun *error* (er) (princ er))
  (princ "\nSatır aralıkları düzenlenecek Text'leri seçiniz...")
  (setq TxTs (ssget (list (cons 0 "Text"))) L (sslength TxTs) n -1) (initget 7)
  (setq Lspc (getreal "\nSatır aralığı: ") ips nil sTxT (ssadd))
  (while (< (setq n (1+ n)) L) (setq PvT (ssname TxTs n))
    (if ips (setq ips (append ips (list (caddr (assoc 10 (entget PvT))))))
      (setq ips (list (caddr (assoc 10 (entget PvT)))))))
  (setq ips (vl-sort ips '>) n -1)
  (while (< (setq n (1+ n)) L) (setq m -1) (while (< (setq m (1+ m)) L)
      (if (= (caddr (assoc 10 (entget (ssname TxTs m)))) (nth n ips))
        (ssadd (ssname TxTs m) sTxT))))
  (setq Bi (caddr (assoc 10 (entget (ssname sTxT 0))))
        TxH (cdr (assoc 40 (entget (ssname sTxT 0)))) n 0)
  (while (< (setq n (1+ n)) L) (setq PvT (entget (ssname sTxT n)))
    (if (not (eq (cdr (assoc 11 PvT)) '(0.0 0.0 0.0)))
      (setq dsvc (mapcar '(lambda (p1 p2) (- p1 p2))
                         (cdr (assoc 11 pvt)) (cdr (assoc 10 PvT)))))
    (setq Pvt (subst (cons 10 (list (cadr (assoc 10 Pvt)) (- Bi (* n TxH Lspc))
                                    (cadddr (assoc 10 PvT)))) (assoc 10 PvT)
                     PvT))
    (if (not (eq (cdr (assoc 11 PvT)) '(0.0 0.0 0.0)))
      (setq PvT (subst (cons 11 (mapcar '(lambda (p1 p2) (+ p1 p2))
                                     (cdr (assoc 10 PvT)) dsvc)) (assoc 11 PvT)
                       PvT))) (entmod Pvt) (entupd (cdr (assoc -1 PvT))))
  (setq *error* nil) (command "_.undo" "e") (prin1))

ProhibiT (30.06.2012 17:58 GMT)

29.06.2012 13:53    

eesm
Merhabalar,
Lisp ile çizim alanındaki ölçülerin yazı yüksekliğini nasıl değiştirebilirim. (dim text offset)

Yardımıcı olursanız sevinirim.

30.06.2012 15:55    

hcellchuk
merhabalar bu autolisp programlama işine yeni başladım bu sitedende birazda ilerledim sayılır.Fakat benim ihtiyacım olan şeyi hala yapıcak şeyler bulamadım.Benim yapmak istediğim; sürekli kullandığım bir çizim var.onu sürekli çizimlerime ekliyorum. ve bunu bir komutla kayıtlı olduğu dosyadan alıp benim istediğim bir yere yeni çizimime eklemek istiyorum.Bunu yapmak mümkünmüdür? Nasıl?.Bunu açıklayıcı olarak kodlayacak biri bana yardımcı olabilir mi???

30.06.2012 16:18    

Travaci
Örneğin
(defun c:cZm (/)
(setq nKt (getpoint "\nÇizimin yerleştirileceği nokta")) ;çizim yerleştirileceği noktayı sordurttuk
(command "-insert" "C:/Lisps/KOT.dwg" nKt 1 "" "" 0) ;daha önceden yolunu belirlediğimiz .dwg ve sırasıyla insert sorularının cevabını giriyoruz.Çizimi base point ine göre insert eder.
(princ)
)

30.06.2012 17:26    

hcellchuk
Alıntı
Travaci :
Örneğin
(defun c:cZm (/)
(setq nKt (getpoint "\nÇizimin yerleştirileceği nokta")) ;çizim yerleştirileceği noktayı sordurttuk
(command "-insert" "C:/Lisps/KOT.dwg" nKt 1 "" "" 0) ;daha önceden yolunu belirlediğimiz .dwg ve sırasıyla insert sorularının cevabını giriyoruz.Çizimi base point ine göre insert eder.
(princ)
)



teşekkürler travaci bunu yeni öğrenmiş oldum sayende :)
peki bu sırasıyla dediğin nedir onu anlamadım.autocad te normal yolla insert ederken menüde bir çok değişken çıkıyor onları neye göre sıralıyosun 1 ve 0 yazman(tırnaklar arasına ??) ondan mı mesala ???

30.06.2012 22:08    

Travaci
Bir şeyi insert ettıgınde tıpkı yukarıdakı sırada oldugu gıbı ılk once dosya yolunu sorduruyor daha sonra yerlestırecegın noktayı daha sonra scale ini daha sonra açısını...bakarsan zaten nedemek istediğini anlıyacaksın. 1 ve 0 ordaki soruların yanıtıdır tırnakların arasının bos bırakılması ıse enter girdisidir.

02.07.2012 08:44    

piratees
Benim şöyle bir lisp e ihtiyacım var , çizgiler ayrı line ve polyline olarak farklı renklerde ve isimlerde çizilmiş ve ben toplam yeri seçip bunları ayrı ayrı ölçüp her layer adına gore ayrıı bir tabloda göstermesini istiyorum. Her layer ismine ait ayrı toplam uzunluklar yani aradım ama forumda bulamadım yardımcı olursanız sevinirim:))

03.07.2012 07:27    

waytooraider
Quick select ile ilgili bir isteğim olacak.Projedeki tüm blokları seçerken quick selecti kullanıyorum ama arda arda bir sürü blokları seçip yerindemi değilmi diye kontrol etmem gerekiyor.Quick select komutunu çalıştırdığımda block ismine gidene kadar baya uğraşıyorum.Acaba qblock şeklinde bi komut olsa ardından block ismini yazsam birden o blokları seçse :)

03.07.2012 07:58    

ProhibiT


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

linkinde paylaştığım bsay fonksiyonu işinize yarayacaktır. Aynı mantıkla çalışan,
Kod:

(defun c:qbLck  (/)
  (if (= (setq bN (getstring "\nBlock adı: ")) "")
    (setq bN (cdr (assoc 2 (entget
                (ssname (ssget ":s" (list (cons 0 "insert"))) 0))))))
  (ssget (list (cons 0 "insert") (cons 2 bN))))
fonksiyonunu kullanabilirsiniz.
Her ikisinde de, bLock adını klavyeden girebileceğiniz gibi, Enter ile geçerseniz, obje seçerek bLock adını belirleyebilirsiniz. BLock adını belirledikten sonra, seçim yapmak istediğiniz bölgeyi window ya da crossing ile seçebilirsiniz. Söz konusu bLock'u tüm çizim içinde seçmek için ALL girmeniz yeterlidir. Fonksiyon sonlandığında, kriterlerinize uygun seçim Previous Selection set'e alınmış olacaktır. Uygulayacağınız Komutun Select objet(s) mesajına "P" girerek kullanılması gerekiyor.

13.07.2012 12:45    

CAN123
Arkadaşlar merhaba,

Çok şeymi istiyorum bilmiyorum ama seçilen katmanı kapatan bir lisp vardı. ona benzer bir lispe ihtiyacım var. Şöyleki kapalı olan tüm katmanları açacak bir lisp.

şimdiden teşekkurler.

Önceki Sayfa [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] [25] > 27 < [30] [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [85] [90] [95] [100] Sonraki Sayfa
Copyright © 2004-2022 SQL: 1.383 saniye - Sorgu: 99 - Ortalama: 0.01397 saniye