Zobrazit plnou verzi příspěvku: Zamena Bloku

Peter M.
02.03.2007, 12:18
Zdravim panove, opet se vracim k otazce BLOKY - mam vykres s 250ti stejnymi bloky a 100 z nich potrebuju vymenit za jiny blok. Nechcesemi rucne kazdy obklikavat - chci udelat jeden vyber a tyto vybrane hromadne zamenit za jiny blok. Je na to nekde funcke, nebo jak na to?

pavelstyl
02.03.2007, 12:45
Jestli tomu rozumím, tak chcete:
 - oknem vybrat některé bloky ve výkrese
 - a tyto bloky vyměnit za nějaký jiný blok (již existující ve výkrese)
 - a aby zachoval vkládací bod, měřítka, otočení, ...
 
Pokud tomu dobře rozumím, tak je to lisp na 10 řádků.
Chcete ho napsat ?
 
Pavel Štyl

Ferdinand
02.03.2007, 14:02

Z těch 250-ti se těch 100 jmenuje jak? Je to např. BL0051, BL0052, BL0053, ... anebo je to např SKL1, BAT15, PRO92, ... anebo je to jediný stejný název pro všechny např. VYTBOD, anebo je to úplně jinak? Ty bloky jsou všechny úplně identické (tj. každý obsahuje ty stejné entity se stejnými vlastnostmi)?
Ferdinand2007-03-02 14:03:14

Peter M.
02.03.2007, 14:03
No to by bylo uzasne.   Nemusi se vybirat oknem, staci jednotlive - kliknutim - protoze nejsou vedle sebe, ale ruzne rozmistneny. Takze to co vyberu at se zameni za jiny blok.

Peter M.
02.03.2007, 14:05

[QUOTE=Ferdinand]
Z těch 250-ti se těch 100 jmenuje jak? Je to např. BL0051, BL0052, BL0053, ... 
[/QUOTE]Je to 250 stejnych bloku (stejny nazev) a jen ty, co vyberu at se zameni za jiny blok.

Ferdinand
02.03.2007, 14:20
Tak na to je někde zde už hotový lispík pro záměnu bloku jiným blokem...jakpak se to jmenovalo?...už nevím, zkuste pohledat.

Mantlík
02.03.2007, 14:20
Třeba pomůže tahle stará rutinka (autor neznámý). Jednoduchá, ale funguje. Zachová vztažný bod, měřítko i natočení
 
uploads/20070302_141739_REBLOK.LSP

 
Omezení - musíte mít nový blok načtený ve výkresu
               - musíte jeho název vypsat ručně (aspoň poprvé, pokud si ho při vícenásobných nahrazováních uložíte do schránky, je to rychlejší)
               - můžete najednou nahradit jen jeden blok
 
A možná někoho napadne i úprava (třeba že místo názvu bloku se ukáže na už použitý blok) .......
 
 
 

Peter M.
02.03.2007, 14:42
Vyzkousim - snad mi to nezmeni i ty ostatni bloky. Zkousel jsem z ET Replace BL. w. an. BL, ale to menilo vsechny bloky se stejnym nazvem ....

pavelstyl
02.03.2007, 14:49
Narychlo zplácnuté, ale myslím, že to dělá co potřebujete. Je to "ukazovací", takže se nic nepíše ručně.
První výzva je výběr bloku, který chci vyměnit. Když něco vyberu budou se potom vybírat pouze bloky toho jména. Když dám ENTER, vyberu jakýkoliv blok.
Druhá výzva je blok, kterým budu nahrazovat a musí již být vložen ve výkrese
No a potom vyberu bloky, které chci vyměnit.
 
(defun C:VYBLOK (/ bl1 bl2 name2 i eg)
 (setq bl1 (entsel "\nVyber blok, který budeme nahrazovat (nebo stiskni ENTER): ")) (setq bl2 (entsel "\nVyber blok, kterým budeme nahrazovat: ")) (setq name2 (cdr (assoc 2 (entget (car bl2))))) (if bl1  (setq vyber (ssget (list (cons  -4 "<AND") (cons 0 "INSERT") (assoc 2 (entget (car bl1))) (cons -4 "AND>") )))  (setq vyber (ssget (list (cons 0 "INSERT")))) ) (if (null vyber)  (progn   (alert "\nNic nebylo vybrano.")   (exit)  ) ) (setq i 0) (while (< i (sslength vyber))  (setq eg (entget (ssname vyber i)))  (setq eg (subst (cons 2 name2) (assoc 2 eg) eg))  (entmod eg)  (setq i (1+ i)) ) (princ))
 
 
Pavel Štyl

PepaR
03.03.2007, 14:08
Něco podobného se tu již řešilo, viz nástroj BLKREDEF.LSP. PepaR2007-03-03 14:17:40