Zadávání příkazů AutoCADu

Přehled informací

Přístup k příkazům AutoCADu

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()

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.

Přiklad vykreslení kružnice pomocí funkce acedCommand()

  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.

Funkce acedCmd()

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().

Přiklad vykreslení kružnice pomoci funkce acedCmd()

  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.

Čekání na vstup od uživatele

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.

Příklad vykreslení kružnice se středem v bodě (5.0, 5.0, 0.0), poloměr zadá uživatel

  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.

Funkce vstupu od uživatele

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.

Nastavení vstupu uživatele

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.

Syntaxe

  acedInitGet(argumenty_specifikující_povolené_hodnoty, klíčová_slova)

Argumenty

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

Příklad použití příkazu acedInitGet()

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.