Seçilmiş bloklar için lisp işlevi uygulayın

psluca91

Guest
İyi öğleden sonra her şeye,

Konu zaten diğer konularda ve konunun yasaklanması için ele alındıysa önceden özür dilerim, ancak arama işlevi aracılığıyla bana yardımcı olan bir rehber veya tartışma bulamadım.

Aşağıdaki lisp'i, net üzerinde bulunan diğer lisp'ten kod alarak yazdım:
Kod:
; İlgili renkte ve katmanda renk değiştirmek "0"
(defun c:ccb (/ b_name col)
(setq b_name (cdr (assoc 2 (entget (car))))))
(command "-bedit" b_name)
(setq listobj (sget "x"))

(setq nobj (slong listobj)

(setq kontrolü 0)

(O zaman (< nobj control)




(setq obj (entget (sname listobj kontrolü) )
(setq renkli (assoc '62 obj)

(= color nil)
(progn)
(setq objlay (assoc '8 objlay)
(setq stacol (cdr (assoc '62 (tblsearch "layer"))))
(command "_change" (cdar obj) "_prop" "_color" "
);
);

(setq kontrolü (+ kontrol 1))

)
(command "_chprop" "_all" 0 "_bclose")
); defunct kapanış
lisp çalışır ama blokları bir tane ile seçmek zorundayım. Bir zamanlar birden fazla blokta lisp nasıl performans gösterebilirim?

Önceden teşekkürler!
 
Bloku değişken b_name'ye değiştirmek için adlandırıyorsunuz(setq b_name (cdr (assoc 2 (entget (car))))))Bir bloktan daha fazla seçim yapmak istiyorsanız, ilk önce seçmelisiniz (bir şey anlamına gelir) İKİ)
Bir blok listesi ve onları değişkene tayin ediyoruz, diyoruz blklist.
lisp yanlış gitmemek için, sadece blokları almasını öneririm. (sget(0. "block")Daha sonra kaç blok seçtiğinizi sayın (uzunlukta blklist) ve değişken bir kontrol - söyle Bir biriBir karşı koyacağız count count count 0 (Bir 0)Gizli count count count 0)

Ve sonra tüm lispinizi listede sahip olduğunuz birçok öğenin tekrarına ekleyin. blklist

; İlgili renkte ve katmanda renk değiştirmek "0"
(defun c:ccb (/ b_name col)

Birden fazla seçim ve nesne sayısını hesaplama(
Tekrar tekrar tekrar tekrar tekrar tekrarlayın Bir biri(Gizli b_name Ad blklist sayı)
(
Gizli Sayı (+ sayı) 1 1 1)
...

)

); defunct kapanış
 
Kristal, hızlı cevap için size teşekkür ederken!

Kodu önerinizden olarak yaratmaya çalıştım, ancak hataları buldum:

- Eğer (setq blklist (sget '(0 . "block")))) bana seçimden (bloklar dahil) dışlanır ve bu nedenle aşağıdaki hataya izin veren lisp'e başlayabilirim: "nesneleri seçin: hata: kötü tartışma türü: lselsetp nil".

- "block" filtresini kaldırırsam ve blokları manuel olarak seçersem, bana her zaman aynı hatayı verir...

kodu benden geri alacağım.
Kod:
;;cambia renkli bloko e tabaka 0
(defun c:ccb4 (/ b_name col)
(setq blklist (sget))

(setq num (slong listaobj))

(setq count 0)

(repeat)
(setq b_name ssname blklist sayı)
(setq count (+ count 1))
(command "-bedit" b_name)
(setq listaobj (sget "x"))

(setq nobj (slong listaobj)

(setq controllo 0)

(O zaman (< controllo nobj)




(setq obj (entget (sname listaobj controllo))
(setq renkli (assoc '62 obj)

(= color nil)
(progn
(setq objlay (assoc '8 objlay)
(setq stacol (cdr (assoc '62 (tblsearch "layer" (cdr objlay))))
(command "_change" (cdar obj) "_prop" "_color" (İngilizce).
); chiusura prognn
); chiusura eğer renkli nil

(setq controllo (+ controllo 1))

)
(command "_chprop" "_all" "" "_kat" 0 "" "_bclose" "")
); chiusura tekrar
);chiusura defun
Nerede yanlışım?
 
Burada bir hata buldum:

Setq blklist (sget)

(setq num (slong listobj)

Doğru:

Setq blklist (sget)

(setq)

Şimdi komut başlar, ama blokun açılmasında durur, blok “değişim” adı ve blok içinde hiçbir şey yok. Komut barında, bu kelime bana görünür:
"command: ccb4
nesneleri seçin: ters köşe: 2 bulundu
nesneleri seçin: - What?
Blok adı veya [?]: :
Invalid blok adı.
Blok adı girin veya [?]: _change regeneating model.
komut: <bad entity="" ffa818b0="" name:="">" " ""</bad>
 
(0) "Block" Olmak gerekir (0 . "insert") - Bu filtreleme için

(setq) listeaobj) - var olmayan bir listeye ait varlıkların sayısını sayın. Onu değiştirmekle test edin (setq num (ssuzun uzun blklist)
 
ho apportato le modifiche come da te suggerito, bir blokcarsi all'interno del editör blokchi di un blockco inesistente...

Göreve le righe di comando che mi escono...

komut: _appload ccb5.lsp başarıyla yüklendi.
komut: hata: girişteki kötü liste
komut:
komut: ccb5
nesneleri seçin: ters köşeyi belirtin: 2 tane bulundu
nesneleri seçin: -bedit
Blok adı veya [?]: :
Invalid blok adı.
Blok adı girin veya [?]: _change regeneating model.
komut: <bad a468a920="" entity="" name:=""></bad>
 
Sorun, yatak emrinin kullanımında yatıyor.

Sahip olduğunuz varlığın adı değişkende b_name Bunun iç adı da budur Ve sadece bu varlık.
Blokun 5 örneği varsa poplar5 değere sahip olacaksınız b_name Farklı, açık olsaydım bilmiyorum

Yatağın emrine blok adını geçmelisiniz, örneğinden değil, aksi takdirde yataklı olarak adlandırılan bir blok düzenlemek istediğinize inanıyor. <entity 7ff75520dc10="" name:=""></entity> e poplar Bunu düzenlemek istiyorsun

Nasıl çözülür? Hızlı bir şekilde, blok adını (örneğin) yeni bir değişkene atamak, söylüyoruz Name_blsi fa?
(setq) Adı_bl (cdr (assoc '2) b_name)

Grup 2'nin geri kalan kısmı (cdr) isminin tam listeden (entget) aldığını söylüyorsunuz.

Yatakta bu noktada daha fazla b_name geçmek zorunda değilsiniz, ama adı_bl
(command "-bedit" Adı_bl)

Ancak, aynı blokun daha fazla örneği olacağı bir dizi farklı blok seçtiğinizden beri, aynı bloğu zaten birkaç kez düzenlemenizi ve bunun daha fazla program kazaları oluşturabileceğini bilmiyorum.
Aynı zamanda dinamik bloklarda da sorunlar olabilir, çünkü bu son olanları "base" ile karşılaştırdığınızda yeni bir isim, anonim tip (terisk için başlangıç)

Daha fazla uygulama hızına sahip olmak, tblsearch komutunu derinleştirmek ve tasarımdaki mevcut blokların isimlerini almaya çalışmanız gerekir, böylece kaynak blokunu bir kez düzenlemek için, örneklerini oluşturmamalısınız.
 

Forum İstatistikleri

Konular
58,521
Mesajlar
499,056
Kullanıcılar
104,110
Son Üye
ChristianR

Çevrimiçi Üyeler

Şu anda çevrimiçi üye yok.
Geri
Üst