Pomoc pro ztracené programátory - použití příkazů AutoCADu v programu ObjectARX

Přehled informací

Přípravné práce na projektu

Při vytvoření aplikace budeme využívat služby pomocníka ObjectARX 2000 AppWizard. Zadávané informace budou:

Otevřeme si okno s kódem souboru aplikace (testovaci1.cpp).

Dále je výhodné zjistit a zaznamenat tvar příkazů AutoCADu pro kreslení kružnic, obdelníků a n-úhelníků. V programech je výhodnější používat anglický tvar příkazu s podtržítkem (aplikace má pak lepší přenositelnost mezi různojazyčnými verzemi AutoCADu).

Postup přidání nové kružnice do výkresu:

_circle enter
Střed (x y z) enter - souřadnice středu
Rádius/diametr

R enter - výběr poloměru

číslo enter - zadání poloměru

Postup přidání nového obdelníku do výkresu:

_rectangle enter
Bod1 (x y z) enter - souřadnice prvního rohu
Bod2 (x y z) enter - souřadnice protilehlého rohu

Postup přidání nového n-úhelníku do výkresu:

_polygon enter
Počet vrcholů 6 enter - zadání počtu vrcholů
Střed (x y z) enter - souřadnice středu
Vepsaná/opsaná kružnice

_I enter - výběr typu konstrukce n-úhelníku

Poloměr

(x y z) enter - výběr druhého bodu, pomocí kterého se určí orientace a poloměr nn-úhelníku

Tím jsme dokončili přípravné práce na projektu a můžeme začít psát kód programu.

Doplnění kódu jednotlivých funkcí programu

V programu musíme nejprve dopsat hlavičky funkcí, které budeme používat v programu. V projektu budeme používat tři funkce:

Deklaraci hlaviček dopíšeme za deklarace funkcí InitAplication a UnloadApplication (vygenerované pomocníkem):

  void InitApplication();
  void UnloadApplication();
  void kresliKruh();
  void kresliObdelnik();
  void kresliPolygon();

Doplnění kódu funkce InitApplikation()

Dále musíme zajistit, aby aplikace zaregistrovala nové příkazy v AutoCADu. Registrace příkazů musí být umístěna ve funkci InitApplication, která je vyvolána při inicializaci aplikace. Postup dopsání kódu funkce InitApplication:

  // inicializace aplikace, zaregistrování
  void InitApplication()
  {
    // registrace nového příkazu, který vyvolá 
    // funkci pro kreslení kružnice
    acedRegCmds->addCommand("nove_prikazy", 
        "_newCircle", 
        "novaKruznice", 
        ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, 
        kresliKruh);
    
    // registrace nového příkazu, který vyvolá
    // funkci pro kreslení obdelníku	
    acedRegCmds->addCommand("nove_prikazy", 
        "_newRectangle", 
        "novyObdelnik", 
        ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, 
        kresliObdelnik);

    // registrace nového příkazu, který vyvolá funkci
    // pro kreslení n-úhelníku
    acedRegCmds->addCommand("nove_prikazy", 
        "_newPolygon", 
        "novyPolygon", 
        ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, 
        kresliPolygon);	
	
    // vypsání informaci jak spustit aplikaci
    ads_printf( "\nAplikaci spustíte příkazem\"novaKruznice\",
                \"novyObdelnik\" nebo \"novyPolygon\".\n" );
  }

Doplnění kódu funkce UnloadApplikation()

Každá aplikace nahraná do AutoCADu musí obsahovat funkci, která ošetří případné odstanění aplikace z AutoCADu. V našem příkladě stačí při odstranění aplikace odstranit skupinu nových příkazů:

  // uvolnění aplikace, odregistrování
  void UnloadApplication()
  {
    // odstranění skupiny příkazů
    acedRegCmds->removeGroup("nove_prikazy");  
  }

Funkce kresliKruh()

Funkce je vyvolána, zadá-li uživatel do příkazového řádku AutoCADu příkaz novaKruznice nebo _newCircle. Ve funkci nejprve voláme příkaz pro zadání bodu, který uložíme do proměnné Bod1. Následně je vyvolán příkaz acedCommand, který umožňuje vyvolání příkazu AutoCADu. AutoCADu jsou poslány potřebné hodnoty pro vykreslení kružnice, kromě poloměru, který musí zadat uživatel.

  void kresliKruh()
  {
    // zadání středu kružnice
    ads_point Bod1;
    //zadání prvního bodu od uživatele
    acedGetPoint(NULL, "\nVyber první bod:  ", Bod1);
    acedCommand(RTSTR, "_circle", RTPOINT, Bod1, RTSTR, PAUSE, 0);
  }

Funkce kresliObdelník()

Funkce je vyvolána, zadá-li uživatel do příkazového řádku AutoCADu příkaz novyObdelnik nebo _newRectangle. Ve funkci nejprve zjistíme souřadnice protějších rohů obdelníku. Následně je vyvolán příkaz acedCommand, který umožní vyvolání příkazu AutoCADu. AutoCADu jsou poslány potřebné hodnoty pro vykreslení obdelníku.

  void kresliObdelnik()
  {
    // deklarace proměnných bodů obdelníku
    ads_point Bod1;
    ads_point Bod2;
    //zadání rohů obdelníku uživatelem
    acedGetPoint(NULL, "\nVyber první roh:  ", Bod1);
    acedGetPoint(NULL, "\nVyber druhý roh:  ", Bod2);
    acedCommand(RTSTR, "_rectangle", RTPOINT, Bod1,
                RTPOINT, Bod2, 0);
  }

Funkce kresliPolygon()

Funkce je vyvolána, zadá-li uživatel do příkazového řádku AutoCADu příkaz novyPolygon nebo _newPolygon. Ve funkci nejprve zjistíme souřadnici středu n-úhelníku. Následně je vyvolán příkaz acedCommand, který umožní vyvolání příkazu AutoCADu. AutoCADu jsou poslány potřebné hodnoty pro vykreslení n-úhelníku, kromě poloměru opsané kružnice, který zadá uživatel.

  void kresliPolygon()
  {
    // deklarace proměnné středu n_úhelníku
    ads_point Bod1;
    //zadání prvního bodu od uživatele
    acedGetPoint(NULL, "\nZadej střed:  ", Bod1);
    acedCommand(RTSTR, "_polygon", RTSHORT, 6,  RTPOINT, 
                Bod1, RTSTR, "_I", RTSTR, PAUSE, 0);
  }

Zdrojový kód projektu

Zdrojový kód projektu je možné nahrát v zabaleném souboru testovaci1.zip. Nahraný kód musíte rozbalit a ve vývojovém prostředí Visual C++ otevřít soubor pracovního prostoru nebo projektu (testovaci1.dsw nebo testovaci1.dsp). Visual C++ poté načte celý projekt.

Doporučujeme Vám alespoň si vyzkoušet tvorbu projektu pomocí pomocníka a napsání několika řádek kódu, abyste poznali vývojové pomůcky prostředí Visual C++.