Zobrazit plnou verzi příspěvku: Zaobli s R=0

honzic
05.05.2009, 08:35
Dobry den,
 
     chtel jsem si vytvorit prikaz Zaobli s radiusem zaobleni 0.
 
;Zaobli R=0(defun C:ZR()     (command "_fillet" "r" "0")     (princ))
 
Ovsem nefunguje to zcela korektne. Po spusteni prikazu to vypada nasledovne:
- - -
Příkaz: zr _filletAktuální nastavení: Režim = OŘEŽ, Rádius = 300.0000Vyberte první objekt nebo [Zpět/křiVka/Rádius/Ořež/NKrát]: r
*Neplatný výběr*Očekává se bod nebo OKno/posLední/Křížení/KVádr/Napříč/OPolygon/KPolygon/Zpět/křiVka/Rádius/Ořež
Error: Funkce zrušena; chyba: Nastala chyba uvnitř funkce *error*Nastavení AutoCAD proměnné odmítnuto: "filletrad" nil
Vyberte první objekt nebo [Zpět/křiVka/Rádius/Ořež/NKrát]:Vyberte druhý objekt nebo Shift-výběr pro použití rohu:
- - -
 
Zaobli to s posledne zadanym radiusem, ne s radiusem 0.
Vedel byste nekdo prosim co stim?
 

Pepa
05.05.2009, 08:43
zkuste dát podtržítko i před r (command "_fillet" "_r" "0")nevím, jakou používáte verzi, ale po přechodu na 2009 jsem musel tento příkaz také upravit, "zlobilo" to úplně stejně

Mantlík
05.05.2009, 08:53
Bez problémů funguje i např. tohle makro (bez lispu)
 
^C^C_fillet;_R;0;;
 
PS. Kdysi jsem někde stáhl lispík, který zaoblí s poloměrem 0, ale přitom pro "normální" příkaz zaobli zachová naposledy nastavený poloměr

chlebovsky
05.05.2009, 09:00
Zdravím, já osobně bych radši použil né zaoblení ale zkosení, je to takové lepší, přeci jen zaoblení s poloměrem nula :-) ale v podstatě je to samé.
Pokus chcete aby si ponechal předchozí nastavení, musíte ho napřed někam uložit např :
(setq old_filletrad (getvar "filletrad"))
pak provedete samotné zaoblení a pak zase nastavíte ten starý poloměr
(setvar old_filletrad)
jde to ošetřit i proti tomu kdyby jste funkci zaoblení stornoval, aby se to vrátilo zpět, ale to je už trošku náročnější, je k tomu třeba undo.atd...

Radim Cech
05.05.2009, 09:08
Nemohu s Vámi souhlasit, zkosení neumožňuje obloukové prvky! Takže Zaobli s R=0 je univerzálnější.

honzic
05.05.2009, 12:52
Pouzivam Autocad Architecture 2009. S tim podtrzitkem pred r mi to ale nefunguje.

honzic
05.05.2009, 13:02
Lze makru "^C^C_fillet;_R;0;;" nejak priradit klavesovy alias (ZR)? Nemam na mysli klavesovou zkratku typu CTRL+neco, ale alias. Aby to fungovalo jako ten lisp kde si definuji klavesove zkratky napr. (ZR).

johny
05.05.2009, 13:04

Pokud nepoužíváte nějakou úplně starou verzi AutoCadu, tak nejlepší je při výběru druhé ze zaoblovaných entit v příkazu [CMD]ZAOBLI[/CMD] (_FILLET) držet Shift a zaoblí vám to s R=0 a přitom nechá původní poloměr netknutý.Jinak se mě mnohem víc osvědčil Lisp, který vám umožní přímo po spuštění zadávat hodnotu poloměru. Je to mnohem přirozenější...(defun C:R () ;Zaobli ----- R ?  (command "_fillet" "_r" pause)  (command "_fillet")  (princ))Btw Pro neupravený příkaz [CMD]ZAOBLI[/CMD] (_FILLET) bych si v acad.pgp dal např. písmeno A  - a tímto zaobuji s R=0 (s tím shiftem) a s příkazem R se spouští normání zaokrouhlování. Je to velice rychlé...
johny2009-05-05 13:05:00

Vladimír Michl
05.05.2009, 13:06
"Klávesový alias" - neboli příkazová zkratka - jde přiřazovat jen jednotlivým příkazům. Můžete si ale nadefinovat vlastní příkazy (viz váš úvodní příspěvek). Případné potíže s kompatibilitou maker řeší tip 6337.

johny
05.05.2009, 13:12
Podle mě je určo lepší mít Lisp, než alias pro makro. Makro totiž nemůžete snadno zopakovat pravým tlačítkem (nebo Enterem)... pokud to používate. 

johny
05.05.2009, 13:16
A zkoušel jste místo toho "R" dát "Rádius"nebo anglicky "_Radius" ... syntaxe asi bude ok. (To co jsem vám poslal mi funguje 100pro pod 2008.)

Ferdinand
05.05.2009, 16:42
To johny: ALe lze - zkratka fce (tj. to co je v lispu za defun c: ) se musí zapsat do acad.pgp a kromě toho ještě lisp má být automaticky načítán při startu (každého) výkresu.
ED: Já bych to dělal také tak:
- schovat původní hodnotu filletrad (já ho mám implicitně =0 ... )
- nastavit filletrad=0
- provést fillet
- načíst zpátky pův. hodn. filletradFerdinand2009-05-05 16:49:33

vbehun
05.05.2009, 21:24

Lisp je zajisté mnohem přirozenější než klávesové makro, avšak uživatelé AutoCadu LT si s ním příliš nevyhrají ...[QUOTE=johny]
...Jinak se mě mnohem víc osvědčil Lisp, který vám umožní přímo po spuštění zadávat hodnotu poloměru. Je to mnohem přirozenější...[/QUOTE]

Radim Cech
05.05.2009, 23:17
Já mám několik verzí tlačítka pro nejfrekventovanější poloměry v silničařině a docela jsem si s tím vystačil, tzn. že jsem použil Váše první makro a natvrdo mám udaný poloměr. Můžete si jich nadefinovat, kolik je Vám libo.
LISP, který se zeptá na poloměr je téměř totéž, jako příkaz ZAOBLI, akorát když ten poloměr chci změnit, musím ještě dát R a pak hodnotu. Pokud se mně LISP pokaždé zeptá a musím ho entrem posunout dále, jaký ma vlastně přínos?

honzic
06.05.2009, 07:54
A vam tento lisp
;Zaobli R=0(defun C:ZR()     (command "_fillet" "r" "0")     (princ))
 
s takto natvrdo zadanym polomerem funguje? Me stale ne. Zkousel jsem to pod Architecture 2009 i pod ADT 2005 a ani v jednom mi to nechodi. Hlasi to chybu a pak to provede zaobleni s posdledne nastavenym polomerem.

Seiner
06.05.2009, 08:20
Ani mně to na AutoCADu 2009 nefunguje. Nechtěl jsem tomu věřit - měl by to být naprosto standardní postup. Důvod neznám, ale ani bych ho nehledal a obešel to pomocí (SETVAR "FILLETRAD" "0").
A má ti i tu výhodu, že si můžete uložit původní poloměr.

johny
06.05.2009, 08:24
No nefunguje... on totiž [CMD]ZAOBLI[/CMD] (_FILLET) je jednou z několika výjimek, které fungujují jinak v listu a jinak v příkazovém řádku (asi to bude souviset s těmi verzemi).Mě to funguje tak, že to nastaví aktuální poloměr na 0 a příkaz skončí. Aby mě to fungovalo korektně, tak to musím dát takhle...(defun C:ZR()     (command "_fillet" "r" "0") ;lépe dávejte _r     (command "_fillet")     (princ));kdyby pořád nic, tak zkuste...(defun C:ZR( / frold)     (setq frold (getvar "FILLETRAD"))     (setvar "FILLETRAD" 0.0)     (command "_fillet" pause pause)     (setvar "FILLETRAD" frold)     (princ)); pokud vám to bude fungovat, tak by chtělo dopsat i errorovou funkci, která vám při nekorektním ukončení vrátí původní FILLETRAD.

honzic
06.05.2009, 08:39
Dekuji vsem za pomoc a za rady. Nakonec jsem to vyresil postupem jak pise pan Seiner. Takze vysledek vypada nasledovne:
 
;Zaobli R=0(defun C:ZR()     (setvar "filletrad" 0)     (command "_fillet")     (princ))
 
Funguje je to k me plne spokojenosti.
Jeste jednou dekuji a tesim se zas u dalsiho problemu

honzic
06.05.2009, 08:47
Tak jeste jsem vyzkousel zapis od Johnyho. Ten prvni
 
(defun C:ZR()     (command "_fillet" "r" "0") ;lépe dávejte _r     (command "_fillet")     (princ))
 
me nefunguje (Architecture 2009).
 
Ten druhy
 
(defun C:ZR( / frold)     (setq frold (getvar "FILLETRAD"))     (setvar "FILLETRAD" 0.0)     (command "_fillet" pause pause)     (setvar "FILLETRAD" frold)     (princ))
funguje spolehlive i s pamatovanim puvodni hodnoty filletrad.
Diky moc
 

pavelstyl
06.05.2009, 09:59
Když jsme přecházeli z AutoCADu Mech 2006 na AutoCAD Mech 2009, tak jsem musel ve svých lispech před určité příkazy dát [CODE](initcommandversion 2)[/CODE] Potom ten příkaz pracuje stejně jako v předchozích verzích.
Takže např:[CODE](initcommandversion 2)(command "_fillet" "_r" "0" pause pause)[/CODE]
Pavel Štyl

Seiner
06.05.2009, 10:20
jj máte recht - tady se o tom taky píše
http://usa.autodesk.com/adsk/servlet/ps/item?siteID=123112&id=12638396&linkID=9240617
a je tam i řešení pro makro (LT)  ^R

honzic
06.05.2009, 10:41
Tak jsem vyzkousel radu od pavelstyl. Aplikoval jsem to na ten uplne prvni zapis lispu a funguje to.
Takze ten puvodni zapis vypada takto:
 
;Zaobli R=0(defun C:ZR()     (initcommandversion 2)     (command "_fillet" "_r" "0")     (princ))
 
Zase jsem o neco chytrejsi.
Diky

Vladimír Michl
06.05.2009, 15:32
Je to popsané (i s bližšími detaily a příkaldy) v tipech:
http://www.cadforum.cz/cadforum/qaID.asp?tip=6337
http://www.cadforum.cz/cadforum/qaID.asp?tip=6655