Zobrazit plnou verzi příspěvku: Vkládání bloku s atributem
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
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).
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ží.
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.
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
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?
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
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.
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 "")
Jak prosté, dear Whatson!
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
Proč 2x Enter? Stačí jeden (pravé myšítko) a ukončí se korektně.
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 ...
Děkuji, nějak jsem to přehlédl...