/*! \page agds AGDS Format

  \section agdsPres Presentation
  The <b>Ascii Graphic Database System (AGDS)</b> format is an ascii (text) version of the wellknown and industry standard GDS II binary format. This format hierarchicaly represents geometric shapes, labels and other layout informations (see http://en.wikipedia.org/wiki/GDSII for more informations). \n
  The ascii format has several advantages versus binary format:
  - human readable,
  - easy to edit manually or with dedicated tools,
  - easy to search or grep  into,
  - easy to compare and understand differences between two files,
  - easy to convert.

  The conversion from Ascii GDS to binary GDS and vice versa can be done with <b>OwlVision GDSII Viewer</b> available at http://owlvision.org\n
  Since it has been developped in java, it can be run on all platforms.

  \subsection agdsAutrhos Author
  Damien Dupuis: damien.dupuis(at)lip6(.)fr

  \subsection agdsLimits Limitations
  Currently the only supported shape in this driver is the rectangle.

  \section agdsDB Stand alone database structure
  The database conists in for simple objects :
  - AGDS::Library contains  all AGDS library informations such as the name, the units used (user and physical) and the list of all Structures.
  - AGDS::Structure describes a GDS Structure with a name and a list of Elements.
  - AGDS::Element is an abstract class from which derived the AGDS::Rectangle.
  - AGDS::Rectangle describes a rectangle element of a structure.

  \subsection agdsDriver Using the driver
  To drive an AGDS file, user has to create one AGDS::Library and add AGDS::Structure objects to it with the AGDS::Library::addStructure() method. Each AGDS::Structure contains at least one AGDS::Element added with AGDS::Structure::addElement() method.\n
  All objects can be independently created as far as they are correctly added to their parent. \n
  Once the library is completely specified, simply call the AGDS::Library::writeToFile() method to drive the database to file.

  \section agdsExamples Examples
  As said is the global presentation, VLSI SAPD project provides C++ libraries and Python modules for each supported format. In this section we present two simple code examples to drive a AGDS file using C++ or Python. These two examples drive the same file \c transistor.agds:
  \include transistor.agds

  \image html  transistorCif.png AGDS example layout
  \image latex transistorCif.pdf AGDS example layout width=.25\linewidth

  \subsection agdsC C++
  Here is the C++ code (\c driveAgds.cpp) used to generate the transistor.agds file. (Source is available in examples directory).
  \include driveAgds.cpp

  \note In order to compile this code, a CMakeLists.txt file is provided. User must set the $VLSISAPD_TOP variable before running these commands in the directory containing the CMakeLists.txt file:
  \code
  %> mkdir build; cd build
  %> cmake ..
  %> make
  \endcode

  \subsection agdsPython Python
  Here is the Python code (\c driveAgds.py) used to generate the transistor.agds file. (Source is available in examples directory).
  \include driveAgds.py

  \note In order to run the \c driveAgds.py script, user must ensure that $PYTHONPATH variable points to the directory containing AGDS.so module.
*/

