Zobrazit plnou verzi příspěvku: Vkládání bloku s atributem

PepaR
09.08.2005, 07:04
Dobrý den, potřeboval jsme si definovat příkaz, který bi mi vložil do určité hladiny blok a pak se vrátil zpět do hladiny aktuální. Bloka má 3 atributy, které jserm poté chtěl editovat (ne vška ještě úpři vkládání, ale až později). Chtěl jsem to obejít anstavením proměnné attdia a attreq na 0, ovšem při pokusu abych mohl zadávat hodnoty a nastavením attreq na 0 se mi namísto dotazu na hodnoty atributu vyplnily textové řetězce... Vyřešil jsme to použitím pause na konci příkazu _insert, avšak tentokráte se mi při snaze o opakovaní příkazu objeví hláška: Příkaz: POPISDUrčete bod vložení popisu dveří :POPISD Neznámý příkaz "POPISD".  Stiskněte F1 pro nápovědu.
 
2005-08-09_070255_Rozmer_Dvere.dwg
2005-08-09_070428_VlozBlok.lsp
 
Nemohl by mi někdo podat pomocnou ruku? Předem díky....
PepaR 

Seiner
09.08.2005, 07:17
Jestli tomu dobře rozumím, pak by mělo stačit dát místo pause jen nějaké dočasné hodnoty atributů (mezery, nebo lépe jejich názvy - to pokud blok neobsahuje kromě atributů nic jiného).

PepaR
09.08.2005, 07:29
Ne blok, kromě atributů neobsahuje nic jiného. Nicméně Ty názvy jsou dobrý tip, děkuji, avšak při kombinaci attreq = 1, attdia = 0, se blok vůbec nevloží.

Seiner
09.08.2005, 07:39
ATTDIA je podle mne vůbec zbytečné v programu řídit. Použil bych _-Insert.Jste si jist, že se opravdu nevloží? Jestliže neobsahuje nic, kromě atributů a do atributů dáte prázdné řetězce, neuvidíte samozřejmě nic.

Seiner
09.08.2005, 08:02
Funguje to, ale buď musíte mít attreq 1 a vkládat nějaké řetězce, nebo si nastavit attreq na 0 a pak nesmíte vkládat nic. jinak se vám vloží řetězce následujících příkazů lispu a program přirozeně havaruje.2005-08-09_080241_x.lsp

PepaR
09.08.2005, 08:04
Jsem si jit, že se blok při nastavení attreq = 1 nevloží vůbec, čekal jsem že mě to alespoň vyzve pro zadání hodnot atributů na příkazové řádce, ale ono nic. PS: U atributů mám nastaveny výchozí hodnoty, takže když už mě to nevyzve, tak by to mělo vložit blok alespoň s těmito hodnotami, nebo se mýlím?

PepaR
09.08.2005, 08:41
Již to funguje, měl jsem napsany za pause názvy parametrů, dle první, proto ta chyba... Díky moc a pokdu Vás mohu ještě obtěžovat, tak bych měl sand už poslední dotaz: Nadefinoval jsem si funkci, která mi kreslí tepelnou a zvukovou izolaci, tím že začne kreslit křivku o daném typu čáry v určité hladině. Nejsme žádný programátor a tak jsem byl nucen řešit zadávání bodů pomocí pause, což je jaksi nedostačující. Rád bych to vyřešil pomocí getpoint aby se následné vykreslení provedlo podle zadaných bodů, ovšem potřeboval bych nějaký názorný příklad kde by bylo ukázáno jak getpoint zakomponovat do příkazu pro křivku, nemohl bych Vás tedy ještě jednou požádat o pomoc?
Děkuji

Seiner
09.08.2005, 09:08
Pokud by se jednalo o předem známý počet bodů, pak to není problém:
(command "_PLINE" (Getpoint "První bod: ") (Getpoint "Druhý bod: ") (Getpoint "Třetí bod: ") "")
Jenže Vy určitě chcete předem neznámý počet bodů. Momentálně mne nenapadá řešení v lispu. Budu dumat.

Seiner
09.08.2005, 10:14
Tak kreslení křivky (pouze z přímkových úseků) bych asi dělal asi takhle:
(setq skup (ssadd))(setq a (getpoint "Začátek: "))
(While (/= a nil)  (Command "_Pline" a (setq a (getpoint a "\nDalší bod :")) (if (/= a nil) '""))  (setq skup (ssadd  (entlast) skup)))
(Command "_Pedit" (entlast) "_J" skup "" "")

Jan Pajerchin
09.08.2005, 10:34
A čo tak zmeniť atribúty na typ - prednastavený ?
Potom pri vkladaní Vás vôbec nebude otravovať - ale hodnotu môžete dodatočne zmeniť.
Len škoda že treba všetky bloky predefinovať.

pavelstyl
09.08.2005, 11:15
Co třeba takle (psáno z hlavy bez zkoušení).
(setq point (getpoint "\nPrvni bod: "))
(command "_pline")
(while point
 (command point)
 (setq point (getpoint point "\nDalsi bod: "))
)
(command "")
 

Seiner
09.08.2005, 11:51
Jak prosté, dear Whatson!

PepaR
10.08.2005, 06:47
Funguje to skvěle až na jednu vadu, nelze ukončit funkci 2x potvrzením (Enter) jako tomu bývá u křivky. Tím pádem je fce přerušena a neprovede se sled příkazů za ní ještě následující.... Nevíte jak tomu prosím Vás předejít?

pavelstyl
10.08.2005, 07:26
Mám AutoCAD 2004 Mechanical, příkaz křivka se ukončí pouze 1x ENTER.Pošlete na styl.pavel@siemens.com kousek kódu, podívám se na to.
Pavel Štyl

Seiner
10.08.2005, 07:28
Proč 2x Enter? Stačí jeden (pravé myšítko) a ukončí se korektně.

PepaR
10.08.2005, 08:12
Stačil by jeden Enter (nebo potvrzení), ale při stisku úpravého tlačítka mi vypíše AutoCAD chybu:
 
Příkaz: IZOLACETPrvní bod:Další bod:Další bod:Další bod:Další bod:
 
Vyžadován 2D bod nebo klíčové slovo.
 
"Funkce přerušena"Určete další bod nebo [Oblouk/Uzavři/Polotloušťka/Délka/Zpět/Tloušťka]: *Storno*
Funkce:
(defun C:IZOLACET ()  (izol_tep-start)  (setq point (getpoint "\nPrvní bod: "))    (command "_PLINE")    (while point    (command point)  (setq point (getpoint point "\nDalší bod: "))  )  (izol_tep-end)  (princ "\n         &nb sp;  Izolace je kreslena osou         &n bsp;      \nTloušťka izolace 150mm -> Měřítko typu čáry = 1.5"))
 

pavelstyl
10.08.2005, 08:20
Chybí tam před (izol_top-end) řádek (command ""). Jestli ovšem ten ENTER není v té procedurce ...

PepaR
10.08.2005, 09:24
Děkuji, nějak jsem to přehlédl...