Files
create/src/App/core-app.dox
Pieter Hijma cf1a5c5c18 [Doc] Make naming groups consistent in App
The identifier for groups/topics such as "Document" that have a class
with the samen name are suffixed with "Group", so the identifier becomes
"DocumentGroup".  For groups/topics with no ambiguity the identifier
matches the topic name closely, for example "ExpressionFramework" for
topic "Expression Framework".
2025-03-29 15:11:01 -05:00

118 lines
3.8 KiB
Plaintext

/**
* @defgroup APP App
* @ingroup CORE
* @brief The part of FreeCAD that works without GUI (console or server mode)
* @details It contains the App namespace and defines core concepts such as
* @ref DocumentGroup "Document", @ref DocumentObjectGroup "Document Object",
* the @ref ExpressionFramework "Expression Framework", and the @ref
* PropertyFramework "Property Framework".
*/
/**
* @defgroup DocumentGroup Document
* @ingroup APP
* @brief The class that represents a FreeCAD document
*
* This (besides the App::Application class) is the most important class in FreeCAD.
* It contains all the data of the opened, saved, or newly created FreeCAD Document.
* The App::Document manages the Undo and Redo mechanism and the linking of documents.
*
* Note: the documents are not free objects. They are completely handled by the
* App::Application. Only the Application can Open or destroy a document.
*
* \section Exception Exception handling
* As the document is the main data structure of FreeCAD we have to take a close
* look at how Exceptions affect the integrity of the App::Document.
*
* \section UndoRedo Undo Redo an Transactions
* Undo Redo handling is one of the major mechanism of a document in terms of
* user friendliness and speed (no one will wait for Undo too long).
*
* \section Dependency Graph and dependency handling
* The FreeCAD document handles the dependencies of its DocumentObjects with
* an adjacency list. This gives the opportunity to calculate the shortest
* recompute path. Also, it enables more complicated dependencies beyond trees.
*
* @see App::Application
* @see App::DocumentObject
*/
/**
* @defgroup DocumentObjectGroup Document Object
* @ingroup APP
* @brief %Base class of all objects handled in the Document.
*/
/**
* @defgroup ExpressionFramework Expressions framework
* @ingroup APP
* @brief The expression system allows users to write expressions and formulas that produce values
*/
/**
* @defgroup PropertyFramework Property framework
* @ingroup APP
* @brief System to access object properties.
*
* @section propframe_intro Introduction
*
* The property framework introduces the ability to access attributes (member
* variables) of a class by name without knowing the class type. It's like the
* reflection mechanism of Java or C#. This ability is introduced by the
* App::PropertyContainer class and can be used by all derived classes.
*
* This makes it possible in the first place to make an automatic mapping to python (e.g. in App::FeaturePy) and
* abstract editing properties in Gui::PropertyEditor.
*
* @section Examples
*
* Here some little examples how to use it:
*
* @code
* // search in PropertyList
* Property *prop = _pcFeature->getPropertyByName(attr);
* if(prop)
* {
* return prop->getPyObject();
* }
* @endcode
*
* or:
*
* @code
* void PropertyContainer::Restore(Base::Reader &reader)
* {
* reader.readElement("Properties");
* int Cnt = reader.getAttributeAsInteger("Count");
*
* for(int i=0 ;i<Cnt ;i++)
* {
* reader.readElement("Property");
* string PropName = reader.getAttribute("name");
* Property* prop = getPropertyByName(PropName.c_str());
* if(prop)
* prop->Restore(reader);
*
* reader.readEndElement("Property");
* }
* reader.readEndElement("Properties");
* }
* @endcode
*/
/**
* @namespace App
* @ingroup APP
* @brief The namespace for the part of FreeCAD that works without GUI.
* @details This namespace includes %Application services of FreeCAD that such as:
* - The Application class
* - The Document class
* - The DocumentObject classes
* - The Expression classes
* - The Property classes
*
* For a more high-level discussion see the topic @ref APP "App".
*/