Zobrazit plnou verzi příspěvku: Správná poloha atributů po výměně bloku

Kubíček
06.06.2007, 11:05
Výměna bloku je možná různými způsoby:
    1a. Ručně s pomocí příkazu: -vlož    RAZEGE=D:/Library/bloky/vykresy/VymenaRaz/RzEGE-CZ-POS
    1b. Pomocí lispovské funce
 
   (DEFUN C:TEK ( / TEK e1 e3 e4)  (command "-vlož" "RAZEGE=D:/Library/bloky/vykresy/VymenaRaz/RzEGE-CZ-POS" "A" "" pause))
 
    Při těchto změnách zústává název původního bloku a pokud ho chcete změnit na požadovaný dá se to příkazem -přejmen    blok  ...
 
    I když jsou použity u obou bloků stejné atributy jejich poloha po výměně neodpovídá požadované poloze jak jsou definované v nahrazovaném bloku.
 
    2. Další možností je využitím operací s daty entit
 
(DEFUN C:TEK-EGE ( / TEK e1 e3 pa nbrv sa na nb)
 
(setq e3 (entget (SETQ e1 (car (entsel "Vyberte blok starého razítka: " )))))  ; data entity
  (setq pa (assoc 2 e3))                  ; seznam s klíčem 2  (setq nbrv (cdr pa))    ; název razítka na výkresu
  (setq sa "RazEGECZ")    ; staré razítko    (setq na "RzEGE-CZ")    ; nové razítko  (setq nb "RzEGE-CZ-POS")   ; nové razítko
 ((= nbrv nb) (prompt (strcat "/n Výkres má správné razítko:  " nbrv))) ((= nbrv sa) (vlož-rz))    )  )
(DEFUN vlož-rz ( / bl sa sac)
  (setq sac "D:/Library/bloky/vykresy/VymenaRaz/RzEGE-CZ-POS.dwg" )  (setq bl (STRCAT  sa "=" sac))  (command "-vlož" bl "A" "" pauze) )
 
    Ani při druhém pokusu jsem nedosáhl ispokojivé polohy textu atributů v rohovém razítku.
 
    Chtěl bych se zeptat, zda jste někdo řešil podobný problém s výměnou podobných bloků s atributy. Jedním ze zůsobu je vytvoření náhradního bloku, který by dával uspokojivé výsledky.

Sedláček
06.06.2007, 11:40
Obávám se že ikdyž předefinujete blok, tak proměnné atributy zůstanou původní - viz help:
 
Opětovná definice atributů bloku
Atributy lze připojit k bloku při definici nebo opětovné definici bloku. Při výzvě AutoCADu LT pro vybrání objektů, které se vloží do definice bloku, vložte požadované atributy do výběrové množiny. Opětovná definice atributů v definici bloku má následující vliv na reference dříve vložených bloků:

Konstantní atributy, které mají neměnnou hodnotu, jsou ztraceny a nahrazeny libovolnými novými konstantními atributy.

Proměnné atributy zůstávají nezměněny i přesto, že nová definice bloku nemá žádné atributy.

Nové atributy se nezobrazí v existujících referencích bloku.
To je z A2002LT, možná je to v novějších verzích jinak.
 
 

Kubíček
06.06.2007, 13:55
Jedná se o případ, rohového razítka, kdy jsou použity stejné atributy. Referenční bod 1 bloku je posunut o 5,5 mm vůči bloku druhému nebo v případě, že jedno z razítek blo vloženo v nějakém jiném měřítku než druhé. I dyž rámeček rohového razítka odpovídá, tak poloha atributu neodpovídá požadované.

pavelstyl
07.06.2007, 08:53
Já bych to řešil lispem, který musí udělat následující:- uložit si polohu, měřítko, natočení, hladinu ... bloku- uložit si hodnoty atrubutů- smazat blok- vložit nový (poloha, měřítko, hladina, ...)- vyplní atributy
Pavel Štyl

Pajas
07.06.2007, 11:02
existuje příkaz pro synchronizaci atributů _ATTSYNC

Kubíček
11.06.2007, 10:00
V mnoha případech rozhoduje, co je rychlejší a zda nebude jednodušší daná razítka jednoduše přepsat. Výhodou způsobi s použitím příkazu
"-vlož" je, že se zachová hodnota atributů. Při mých pokusech s daty entit s využitím následného příkazu
(setq e3 (entget (SETQ e1 (car (entsel "Vyberte blok starého razítka: " )))))
(setq pa (assoc 10 e3))    ; výstup (10 41550.0 500.0 0.0)
(setq nbrv (cdr pa))          ; výstup souřadnic razítka (41550.0 500.0 0.0)
 
se mi do proměné "e1" zapíše jméno entity a do "e3" data týkající se bloku a né atributů. Jedině se nějak dostat dovnitř bloku a řídit tak polohu atributů podobným způsobem, jakým by šlo upravovat polohu celého bloku.
Hodnota atributů se dá též i vyexportovat a potom zase nějak načít, možná že i této skutečnosti by se možná dalo využít .... zatím nevím jak ...