![]()
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.
![]()