Zobrazit plnou verzi příspěvku: Docasne uchopy na cely prikaz KRIVKA

johny
04.01.2009, 10:27
Zdravim, když šrafuju nějakou oblast, tak ji nejprve oklikavam krivkou... To se nejlip dela jen s uchopy kon a pol. Mam na to jednoduchou lispovou zkratku.(defun C:uzavři()  (command "'-uchop"       "kon,pol"       "_pline")  (princ))Nastavi uchopy, spusti přikaz krivka a předá autocadu... Co řeším je, jak docílit toho, aby ta změna uchopu byla docasna-abych to pak nemusel nejaky jinym tlacitek sam obnovovat. Tj. po skončení křivky se zas nastavily původní úchopy.Dík za radu.

Kackac
04.01.2009, 10:43
Před příkaz command vložte řádku
(setq osold (getvar "OSMODE")) ;ta vám uloží aktuální nastavení úchopůpřed princ vložte řádku(setvar "OSMODE" osold) ;nastaví úchopy podle uloženého stavuosold je libovolný název proměnné, můžete zvolit něco vlastního

johny
04.01.2009, 11:05
No toto znam, ale nefunguje... Proste to není kam napsat. Já bych potřeboval, aby mohl uživatel zadavat kolik bodu chce v ramci prikazu Krivka (něco jako n krát pause - což asi nejde, nebo ano?) No a pak by se dalo využít to co píšete vy, tj. dát to před (princ). ...ale tak jak to je teď, tak to se to proste provede sice po spuštění křivky, ale před zadáním prvního bodu, ukončí se lisp a zbytek příkazu křivka už je jen na Autocadu bez možnosti návratu do lispu... Alepon tak to chapu ja.

alfred
04.01.2009, 13:07
Nemuzu to vyzkouset, ale mozna je to tim jednim prikazem command, kde je jak uchopeni tak _plineZkuste uchopeni nastavit pomoci (setvar "OSMODE" hodnota)kde hodnota je bitový součet hodnot úchopů, které chcete nastavit. Na hodnoty jednotlivých úchopů se koukněte do nápovědy. Když by například byl (hodnoty si vymýšlím):koncový = 1průsečík = 2tak bitový součet je 3 a tedy (setvar "OSMODE" 3)a pak zavolat teprve příkaz na kreslení křivky.hodnotaJinak, pokud nepoužijete funkci *error* , tak pokud skončíte funkci předčasně (například máčknutím ESC při kreslení křivky), tak se příkaz na zpětné nastavení úchopu neprovede. Příkaz (setvar "OSMODE" osold)napíšete i do funkce *error*.

johny
05.01.2009, 15:13
Obavam se, že ani toho nefunguje. Pořád je problém s tím neukončeným příkazem křivka, ktery je tam proto, že neumím dát vícenásobnou pause. A co jsem si to tak zkousel, tak myslím, že když uprostřed kříkazu křivka dám ESC tak to neprojde přes *error*.

alfred
05.01.2009, 21:52
Ta křivka byla trochu oříšek, ale na google se to dalo najít během minuty.... Zkopírujte si to do souboru. Pozor, funkce se spouští "UZAVRI" - bez diakritiky.(defun *error_uzavri* (msg)  (princ "error: ")  (setq *error* *old_error*)  (setvar "OSMODE" osold)  (princ msg)  (print)); defun error(defun C:uzavri ()  (setq osold (getvar "OSMODE"))  (setq *old_error* *error*)(setq *error* *error_uzavri*)  ;koncový = 1  ;průsečík = 16  (setvar "OSMODE" 17)  (command "_pline")  (while (> (getvar 'cmdactive) 0) (command pause))  (setvar "OSMODE" osold)  (setq *error* *old_error*)  (princ))

Ferdinand
06.01.2009, 10:58
Takhle ale nevytvoří uzavřenou polyline. To chce tam nějak (?) napašovat na konec (po ukončení zadávání bodů) _C (close). Taky jsem se podíval na tu hodnotu osmode - pro <_endp&_mid> je 16387.

pavelstyl
06.01.2009, 11:34
A nestačilo by toto?
Přikaz KRIVKA1. A když se ukončí ENTERem, tak se i uzavře.
 
[CODE]
(defun C:KRIVKA1 (/ p1 osm) (setq osm (getvar "OSMODE")) (setvar "OSMODE" 33)
 (setq p1 (getpoint "\nZ bodu: ")) (command "_pline" p1) (setq p1 (getpoint p1 "\nDo bodu: ")) (while p1  (command p1)  (setq p1 (getpoint p1 "\nDo bodu: ")) ) (command "_c") (setvar "OSMODE" osm) (princ))[/CODE]
 
Pavel Štyl

alfred
06.01.2009, 11:44
[QUOTE=Ferdinand] Takhle ale nevytvoří uzavřenou polyline. To chce tam nějak (?) napašovat na konec (po ukončení zadávání bodů).[/QUOTE]

A proč by nevytvořilo? Prostě až budu chtít ukončit a uzavřít pline, tak místo bodu napíšu "U" enter a hotovo, ne?

Úchop jsem nastavoval koncový a průsečík, zdálo se mi to lepší. Polovina a koncový se mi zdálo nepraktické. Ale hodnota se změní snadno.

alfred
06.01.2009, 11:52
[QUOTE=pavelstyl] A nestačilo by toto?
[/QUOTE]

Mát několik nevýhod:
-nelze ukončit příkaz - chybí funkce *error*
-nelze využít možností kreslení křivky - kreslení obloukových částí, tloušťky, vracení se zpět, tloušťka...

Ale jinak to tak jde. :-D


Ferdinand
07.01.2009, 12:45
Anebo
(defun C:KRIVKA2 (/ B1 OSM)(setq OSM (getvar "osmode"))(setvar "osmode" 33)(command "_pline" Pause ^C^C)(setq B1 (getvar "lastpoint"))(command "_pline" B1)(setq B1 (getpoint B1))(while B1(command B1 Pause)(setq B1 (getpoint B1)))(command "_C")(setvar "osmode" OSM)(princ))
...ale tahání provádí z předpředešlého bodu...(?)
Dle mého názoru je to ale zbytečná frajeřina - je lepší kreslit prostě normálně polyline a na konci dát _C - je to jen 1 klávesa...Ferdinand2009-01-07 13:25:20

Ferdinand
07.01.2009, 12:51
[QUOTE=alfred] ...až budu chtít ukončit a uzavřít pline, tak místo bodu napíšu "U" enter a hotovo, ne? [/QUOTE]
To je ale úplně stejné, jako při běžném kreslení polyline...Ferdinand2009-01-07 13:23:30

alfred
07.01.2009, 13:16
Samozrejme.

U puvodniho dotazu slo o to, ze pri
(command "_pline")

se hned provadely dalsi prikazy a tedy nefungovala docasna zmena uchopu po celou dobu bezneho nakresleni krivky a navrat uchopu zpet po dokonceni krivky.
To je myslim vyreseno radkou
(while (> (getvar 'cmdactive) 0) (command pause))

V automatickem uzavreni krivky namisto rucniho nevidim zadnou vyhodu.

johny
08.01.2009, 18:05
Zdravim,děkuji moc za návrhy, omlouvám se ze jsem chvíli pro pracovní vytízení nezasahoval (a bohužel ani nesledoval)... A taky se me podařilo vymyslet nějaké řešení (myslím, že zajímavou fintou-popisu nize)Nicméně děkuji za řádek   (while (> (getvar 'cmdactive) 0) (command pause))   tohle se dá určitě výhodně využít nejen v tomto případě :)Předně popíšu motivaci (resp. už to takle pouzívam dlouho a je to velmi velmi rychlé - ted jsem se rozhodl to jeste vylepsit).V dopravnich situacich se stale vybarvuji plochy - uz jsem zkousel hodne metod, a prestoze autodesk casto ty funkce vylepsuje (srafa bodem, hromande slucovani usecek a oblouku do krivek... však stale trvaji zname problemy - male mezery (nekdy nebere ani kdyz mam mereza s jistotou neni), nebo navazujici oblouky)    Proste me z toho porad vychazi, ze nejlepsi je to proste oklikat krivkou a pak vybarvit. No a toto oklikavani-hlavne caste stridani usecka-oblouku, resp. oblouky vubec - je dost narocne rekneme na "prstoklad" :)Cil: Zmenit prstoklad pri zadavani krivky na jinak zridka vyuzivane klavesy F9-F11, F12. Takle mam makra v _cui pro Klaveskove zkratky F9-F12F9, která spusti prikaz krivka se spravnymi uchopy a stejnym tlacitkem se na konci uzavre (proto C:Uzavři, ktery tu řešíme)'-uchop kon,pol,prů,nej Ečka Uzavři;  - lisp Uzavři je pořád stejny (zatim) (defun C:uzavři() (command "'uchop" "kon,pol") (command "_pline") (princ))  - jinak je tu ta finta - uchopy se znovu nastavuji při uzavřeni (ano, musim vsechny zavrit, jinak se to nenastavi)F10, nastavuje usečkove useky e (mezera "e" mezera)F11, nastavuje obloukove useky (rovnou druhy bod)o d (zas mezera nakonci)F12 - zde je lisp, ktery vybrane krivky vyšrafuje solidem dle hladiny krivky a obe hodi uplne dospod (v pripadě zájmu mohu lisp poskytnout - reps. chci ho jeste doladit, aby pokud nejsou vybrane zadne krivky, tak vzal posledni objekt, pokud je to krivka)Jeste detaily k uchopumpri podrzeni F10 - uzije se uchop kolmopri podrzeni F11 - uzije se uchop nejblToť vše. Snad to nekomu pomuze k rychlejsimu srafovani :)K návrhum- vyuziti cadovkeho _pline nechava otevreny i dalsi moznosti uprav křivky (zpět)- nutne potrebuji oblouky (prave k kvuli tomu potrebuji uchop pol; prů se moc nevyuzije, vetsinou stejny s kon.PS Omlouvam se pokud nejsem ve spravne diskusni skupine, pac rekl bych, ze toto nema s programovanim moc spolecneho, je to spis "vyuzivani" moznosti autocadu :)

Ferdinand
08.01.2009, 18:57
Neznám české zkratky - proto (jen ze zvědavosti) se zeptám:
pol = polovina anebo poloměr? (_mid OR _Radius)
prů = průsečík anebo průměr? (_int OR _Diameter)
kon = koncový bod? (_endp)

Kackac
08.01.2009, 19:39
To Ferdinand: všechno je to nastavení úchopů, takžepol = polovina (úchop na poloměr není, pouze na kvadrant, ten je česky kva)prů = průsečík (ta diakritika mi v cadu furt nějak nevoní)kon = koncový