Zobrazit plnou verzi příspěvku: Zaobli s R=0
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?
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ě
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ší.
Pouzivam Autocad Architecture 2009. S tim podtrzitkem pred r mi to ale nefunguje.
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).
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.
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.
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
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?
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.
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.
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.
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
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
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
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