ObjectARX používá k přístupu k příkazům AutoCADu několik funkcí. Hlavní (nejvíce používané) funkce jsou:
Obě výše uvedené funkce pracují obdobným způsobem jako příkaz AutoLISPu (command). Funkce pošlou příkazy nebo vstupy přímo do příkazového řádku AutoCADu.
Funkce acedCommand() má argumenty uspořádané do párů. První argument značí typ výsledku druhého argumentu. Poslední argument funkce bývá rovný 0 nebo RTNONE. Prvním argumentem bývá typicky RTSTR a příslušná data - jméno (řetězec) příkazu.
int kresl() { ads_point bod1; ads_point bod2; if (acedCommand(RTSTR, "circle", RTSTR, "5,5", RTSTR, "6,6", 0) != RTNORM) return CHYBA; bod1[X]=1.0; bod1[Y]=1.0; bod1[Z]=1.0; bod2[X]=5.0; bod2[Y]=3.0; bod2[Z]=2.0; if (acedCommand(RTSTR, "circle", RT3DPOINT, bod1, RT3DPOINT, bod2, 0) != RTNORM) return CHYBA; return VPORADKU; }
Ve funkci deklarujeme dva 3D body. Vykreslíme první kružnici. Pokud nebude kružnice vykreslena v pořádku (po vykreslení AutoCAD signalizuje vrácením hodnoty RTNORM) je vrácena hodnota v konstantě CHYBA. V opačném případě jsou zadány souřadnice bodů. Po jejich zadání vykreslíme druhou kružnici. Opět kontrolujeme jak byla zadána. Pokud vše proběhlo v pořádku je vrácena hodnota v konstantě VPORADKU.
acedCmd() je ekvivalentní funkci acedCommand(). Rozdíl spočívá v odlišném zadání parametrů funkce. Funkce acedCmd() posílá AutoCADu hodnoty formou result-buffer seznamu. Příkaz je výhodné používat v řípadě, že používáme komplexní logiku při budování seznamu příkazů AutoCADu. pro tvorbu seznamu příkazů se využívá funkce:
acutBuildList()
Funkce acedCmd() umožňuje snažší změnu hodnot poslaných AutoCADu. Nevýhodou funkce je o něco pomalejší zpracování proti funkci acedCommand().
int kresl() { ads_point bod1; struct resbuf *cmdSeznam; cmdSezam = acutBuildList(RTSTR, "circle", RTSTR, "5,5", RTSTR, "6,6", 0); if (cmdSeznam != NULL) { if (acedCmd(cmdSeznam) != RTNORM) return CHYBA; bod1[X]=1.0; bod1[Y]=1.0; bod1[Z]=1.0; } else { acdbFail("Nemohu vytvořit seznam\n"); } return VPORADKU; }
Ve funkci deklarujeme 3D bod a seznam pro uložení hodnot poslaných příkazu AutoCADu. Vytvoříme seznam. Zkontrolujeme jestli vytvořený seznam obsahuje hodnoty, v případě, že ano vykreslíme kružnici, v opačném případě se zobrazí chybové hlášení. V příkladě je ošetřen stav kdy vykreslení kružnice v AutoCADu selže. Pokud vše proběhlo v pořádku je vrácena hodnota v konstantě VPORADKU.
ObjectARX umožňuje při volání příkazu AutoCADu přerušit zadávání, aby uživatel mohl vybrat některé parametry. Např. při zadávání kružnice je zadán pouze střed a poloměr doplní uživatel sám (viz příklad). Přerušení se uskuteční příkazem PAUSE.
vysledek = acedCommand(RTSTR, "circle", RTSTR, "5,5", RTSTR, PAUSE, 0);
Aby mohl uživatel zadat poslední hodnotu, přerušíme zadávání kružnice po zadání středu příkazem PAUSE. AutoCAD umožní zadat poloměr kružnice uživateli.
V ObjectARX je implementováno několik funkcí umožňujících získání hodnot od uživatele. Funkce mají prefix acedGetxxx(). Po zavolání, funkce čeká na vstup od uživatele (než uživatel zadá data) indikovaného typu a pak hodnoty předá jako návratovou hodnotu. Aplikace může nastavit před voláním funkce libovolný zobrazený dotaz.
Tabulka funkcí vstupu hodnot od uživatele
Jméno funkce
|
Popis
|
acedGetInt
|
Získání celého čísla. |
acedGetReal
|
Získání reálného čísla. |
acedGetDist
|
Získání vzdálenosti. |
acedGetAngle
|
Získání úhlu. |
acedGetOrient
|
Získání orientace. |
acedGetPoint
|
Získání bodu. |
acedGetCorner
|
Získání rohu obdelníku. |
acedGetKword
|
Ziskání klíčového slova. |
acedGetString
|
Získání řetězce. |
Návratové hodnoty informující o průněhu funkce vstupu hodnoty od uživatele
Jméno kódu
|
Popis
|
RTNORM | Uživatel zadal platnou hodnotu. |
RTERROR | Volání funkce selhalo. |
RTCAN | Uživatel zmáčkl Ctrl+C. |
RTNONE | Uživatel zadal prázdný vstup (zmáčkl pouze ENTER). |
RTREJ | AutoCAD vrátil požadavek jako neplatný. |
RTKWORD | Uživatel zadal klíčové slovo nebo libovolný text. |
V aplikaci můžeme pomocí funkce acedInitget() nastavit typy hodnot, které může uživatel zadat. Funkce acedInitget je obdoba funkce initget() AutoLISPu. Funkce platí pouze pro následující uživatelský vstup.
acedInitGet(argumenty_specifikující_povolené_hodnoty, klíčová_slova)
argumenty_specifikující_povolené_hodnoty | |||
Hodnota, která povoluje nebo zamítá jisté druhy uživatelského vstupu. Tabulka možných hodnot: | |||
Kód
|
Bitová hodnota
|
Popis
|
|
RSG_NONULL
|
1
|
Zakáže prázdný vstup. | |
RSG_NOZERO
|
2
|
Zakáže zadání nuly. | |
RSG_NONEG
|
4
|
Zakáže zadání záporné hodnoty. | |
RSG_NOLIM
|
8
|
Nekontroluje výkresové limity, i když je aktivován LIMCHECK. | |
RSG_DASH
|
32
|
Použije přerušovanou čáru při kreslení gumovací čáry nebo obdelníku | |
RSG_2D
|
64
|
Ignoruje z-ovou souřadnici ze zadání 3D bodu (funkcí acedGetDist()). | |
RSG_OTHER
|
128
|
Povolí libovolný vstup, který uživatel zadá. | |
klíčová_slova | |||
Řetězec reprezentující serii klíčových slov |
Použití příkazu acedInitGet() pro definování klíčových slov, z kterých si uživatel může vybírat při zadání hodnot.
int stat; ads_real x, pi = 3.1415; char klic[20]; //zakázání prázdného vstupu acedInitGet(RSG_NONULL, "Pi Dvě-pi"); if ((stat = acedGetReal("Pi/Dvě-pi/<číslo>: ", &x)) < 0) { if (stat == RTKWORD && acedGetInput(klic) == RTNORM) { if (strcmp(klic, "Pi") == 0) { x = pi; stat = RTNORM; } else if (strcmp(klic, "Dvě-pi") == 0) { x = 2*pi; stat = RTNORM; } } } if (stat != RTNORM) acutPrintf("Chyba ve funkci acedGetReal().\n"); else acutPrintf("Zadali jste %f.\n", x);
Na začátku příkladu nastavíme pomocné proměnné pro vrácení informace o průběhu funkce (proměnná stat), zadání realných čísel a parametrů. Pomocí funkce acedInitGet() zakážeme zadání prázdné hodnoty a definujeme dvě klíčová slovat Pi a Dvě-pi. Zavoláme funkci pro získání hodnoty od uživatele. Pokud je hodnota zadána vpořádku provedeme testy jaká hodnota byla zadaná. Výsledek, pokud nedošlo k chybě (signalizuje hodnota v proměnné stat), je zobrazen a správa se zadanou hodnotou.