.. _architecture: Architecture Overview ===================== :class:`Application` ------------------------------------------- When the Autograph process is created, a single instance of the :class:`Application` class is created and accessible with the :attr:`Autograph.app` attribute. The :class:`Application` handles all *application-wide* information about available classes, environment and also settings. It is responsible to create one or multiple :class:`Project` instance(s) which can run in GUI mode or in the background. :class:`Project` ------------------------------------ The :class:`Project` is the main class containing all data related to a single project in Autograph. This is the class on which you will find project-wide functions and get access to any :class:`ProjectItem`. .. note:: Since the :class:`Application` can have multiple projects opened concurrently, you may find useful to retrieve the project actively focused by the user with :meth:`Autograph.Application.getActiveProject()` . :class:`ProjectItem` -------------------------------------------- Represents any item in the Project Panel. A :class:`ProjectItem` can contain an :class:`Effect`, which can be used as a generator (see :meth:`Autograph.Param.setGeneratorEffect`) on a :class:`Param`. :class:`Effect` ------------------------------------ A very generic base-class for anything that contains a set of :class:`Param` . Generator effect can be set as generator on a :class:`Param` with :meth:`Autograph.Param.setGeneratorEffect` . Modifier effect can be added in the :class:`ModifierList` of a :class:`Param` using :meth:`Autograph.Param.getModifiersList` . Generators and Modifiers can be created using the constructore taking a `classID` string. The `classID` must be one of the identifiers returned by :meth:`Autograph.Application.getGeneratorsClassID` or :meth:`Autograph.Application.getModifiersClassID` . :class:`Param` ------------------------------------ An abstract base-class for any parameter on an :class:`Effect` . Any parameter that you can manipulate in the timeline or the properties panel inherits this class. Some Param classes are responsible to store a value (number :class:`DoubleParamBase`, string :class:`StringParamBase`, complex objects such as :class:`Path2DParam` ...) and can optionnally give the user an interface to interact with. Some other Param classes are purely meant for the UI and do not store any value. Some Param classes can have `child` Params, such as :class:`Transform2DParam`. :class:`Composition` --------------------------------------------- A :class:`ProjectItem` can contain a :class:`Composition`. To create a new :class:`Composition` in the project, use :meth:`Autograph.Project.createComposition()` . The :class:`Composition` contains a list of :class:`Layer`, stored from bottom to top (i.e: in reverse order of the UI). :class:`Layer` ----------------------------------- Each :class:`LayerBase` class (and its derived classes :class:`Layer2D` , :class:`Layer3D` , :class:`CameraLayer` , :class:`LightLayer`) is an :class:`Effect` class and thus contains a set of :class:`Param` that the user can control. :class:`Panel` ------------------------------------ Panels are the UI blocks that make up the window workspace, such as the :class:`TimelinePanel` , :class:`PropertiesPanel` , :class:`ViewerPanel` etc.... :class:`RenderManager` ------------------------------------------------- This object is only accessible through :meth:`Autograph.Project.getRenderManager()` and controls anything related to the render queue and is responsible to start renders.