diff --git a/doc/devel/uml/class128645.html b/doc/devel/uml/class128645.html index 0281acf2a..7b271a2ee 100644 --- a/doc/devel/uml/class128645.html +++ b/doc/devel/uml/class128645.html @@ -16,13 +16,13 @@ -

Declaration :

Directly inherited by : Allocation ExplicitPlacement RelativePlacement

+

Declaration :

Directly inherited by : ExplicitPlacement

used to specify the position of a MObject in the EDL. This can be done in various ways (absolute, relative).
Placement at the same time acts as (refcounting) smart pointer for accessing the MObject.

Artifact : placement

Operation resolve

Declaration :

create an actual (explicit) placement while trying to satisfy the network of adjacent objects and placements.

Relation subject (<unidirectional association>)

Declaration :

Placement acts as smart pointer

Operation chain

Declaration :

create and add another Placement for this media object, thus increasingly constraining the (possible) position of this object.

-
Relation chain (<unidirectional association>)

Declaration :

Chain of additional Placements further constraining the position of this MObject

+
Relation chain (<unidirectional association>)

Declaration :

Chain of additional Placements further constraining the position of this MObject

All public operations : chain , resolve

diff --git a/doc/devel/uml/class129285.html b/doc/devel/uml/class129285.html index ab298c57b..8393d4269 100644 --- a/doc/devel/uml/class129285.html +++ b/doc/devel/uml/class129285.html @@ -4,20 +4,19 @@ -Class FixedPlacement +Class FixedLocation -
Class FixedPlacement
+
Class FixedLocation

-

Declaration :

Artifact : fixedplacement

+

Declaration :

Artifact : fixedlocation

-

All public operations : chain , resolve

diff --git a/doc/devel/uml/class129413.html b/doc/devel/uml/class129413.html index 8dd65f6f6..b8fa2c81b 100644 --- a/doc/devel/uml/class129413.html +++ b/doc/devel/uml/class129413.html @@ -4,19 +4,19 @@ -Class RelativePlacement +Class RelativeLocation -
Class RelativePlacement
+
Class RelativeLocation

-

Declaration :

Artifact : relativeplacement

+

Declaration :

Artifact : relativelocation

Relation anchor (<unidirectional association>)

Declaration :

  • Uml : # anchor : MObject, multiplicity : 1
  • C++ : protected: MObject* anchor
Attribut relType
@@ -24,6 +24,5 @@
Attribut offset

Declaration :

  • Uml : # offset : Time
  • C++ : protected: Time offset

Offset the actual position by this (time) value relative to the anchor point. TODO: Representation?

Class RelType
-

All public operations : chain , resolve

diff --git a/doc/devel/uml/class129541.html b/doc/devel/uml/class129541.html index 98c845e4d..40d20683a 100644 --- a/doc/devel/uml/class129541.html +++ b/doc/devel/uml/class129541.html @@ -16,12 +16,12 @@ -

Declaration :

Directly inherited by : Constraint Wish

+

Declaration :

Directly inherited by : Constraint Wish

a directive to place a MObject in a specific way

Artifact : allocation

Attribut repr

Declaration :

  • Uml : # repr : string
  • C++ : protected: string repr

human readable representation of the condition characterizing this allocaton, e.g. "t >= 10"

Operation get_repr

Declaration :

  • Uml : + get_repr() : string
  • C++ : public: inline const string getRepr () const
-

All public operations : chain , get_repr , resolve

+

All public operations : get_repr

diff --git a/doc/devel/uml/class129797.html b/doc/devel/uml/class129797.html index ed207461b..934410392 100644 --- a/doc/devel/uml/class129797.html +++ b/doc/devel/uml/class129797.html @@ -16,8 +16,7 @@ -

Declaration :

Directly inherited by : FixedPlacement

-

Artifact : explicitplacement

+

Declaration :

  • C++ : class ExplicitPlacement : public Placement
  • Java : public interface ExplicitPlacement

Artifact : explicitplacement

Attribut time

Declaration :

  • Uml : # time : Time
  • C++ : protected: Time time
diff --git a/doc/devel/uml/class130053.html b/doc/devel/uml/class130053.html index a754c6888..7df85e17a 100644 --- a/doc/devel/uml/class130053.html +++ b/doc/devel/uml/class130053.html @@ -18,6 +18,6 @@

Declaration :

-

All public operations : chain , get_repr , resolve

+

All public operations : get_repr

diff --git a/doc/devel/uml/class130181.html b/doc/devel/uml/class130181.html index 3ddc9b19f..1d050e694 100644 --- a/doc/devel/uml/class130181.html +++ b/doc/devel/uml/class130181.html @@ -18,6 +18,6 @@

Declaration :

-

All public operations : chain , get_repr , resolve

+

All public operations : get_repr

diff --git a/doc/devel/uml/class133893.html b/doc/devel/uml/class133893.html index ed2c18147..ba0cbda57 100644 --- a/doc/devel/uml/class133893.html +++ b/doc/devel/uml/class133893.html @@ -16,7 +16,7 @@ -

Declaration :

  • C++ : enum RelType
  • Java : public enum RelType

the possible kinds of RelativePlacements

nested in RelativePlacement

+

Declaration :

  • C++ : enum RelType
  • Java : public enum RelType

the possible kinds of RelativePlacements

nested in RelativeLocation

Items :

2.2.2 Package Builder

@@ -911,7 +912,7 @@ reuse exiting Engine

Selection :

    Transformation

  • length = 5
  • start = 100
  • -
    Class instance

    type :RelativePlacement

    attributes :

    -
    Class instance

    type :RelativePlacement

    attributes :

      +
      Class instance

      type :RelativeLocation

      attributes :

      relations :

        diff --git a/doc/devel/uml/index_65.html b/doc/devel/uml/index_65.html index 28aa29de6..5984e789e 100644 --- a/doc/devel/uml/index_65.html +++ b/doc/devel/uml/index_65.html @@ -49,12 +49,12 @@ Assetsclass view ATTACHattributeattach subject to anchor (e.g. an effect to a clip) au1class instance -aud_Aclass instance aud_aclass instance +aud_Aclass instance audioclass instance audio1class instance -audio1class instance audio1class instance +audio1class instance autoartifactMedia Object holding automation data AutoclassAutomation data for some parameter (i.e. a time varying function) Automation Entitiesclass diagram diff --git a/doc/devel/uml/index_66.html b/doc/devel/uml/index_66.html index 70cc864a7..5ed3d76c4 100644 --- a/doc/devel/uml/index_66.html +++ b/doc/devel/uml/index_66.html @@ -34,8 +34,8 @@ buildableartifactmarker interface denoting any MObject able to be treated by Tools buildEngineoperationMain Operation of the Builder: create a render engine for a given part of the timeline Buildercomponent -Builderpackage builderpackagesourcecode package

        The Builder creating the Render Engine,
        located within the MObject Subsystem +Builderpackage Builder Entitiesclass diagram Builder Workingsclass view BuilderFacadeclassProvides unified access to the builder functionality. While individual components of the builder subsystem may be called if necessary or suitable, it is usually better to do all extern invocations via the high level methods of this Facade diff --git a/doc/devel/uml/index_67.html b/doc/devel/uml/index_67.html index 2f29cffbf..198d3e6c7 100644 --- a/doc/devel/uml/index_67.html +++ b/doc/devel/uml/index_67.html @@ -25,30 +25,28 @@ causeattributea copy of the first exception encountered in this exception chain chainrelationChain of additional Placements further constraining the position of this MObject chainoperationcreate and add another Placement for this media object, thus increasingly constraining the (possible) position of this object. -chainplacementartifactChaining and additionally constraining Placements -ChainPlacementclass checked_inrelationchecked_in objects are subject of cache aging and must be not in use checked_outrelationthis list keeps all mappings which are in use, and thus prevents them from Cache aging Cinelerra3artifactthe main executable to be built cinelerra3package -class instanceclass instance class instanceclass instance class instanceclass instance class instanceclass instance -class instanceclass instance -class instanceclass instance -class instanceclass instance class instanceclass instance class instanceclass instance +class instanceclass instance class instanceclass instance class instanceclass instance class instanceclass instance class instanceclass instance -class instanceclass instance class instanceclass instance class instanceclass instance class instanceclass instance +class instanceclass instance +class instanceclass instance class instanceclass instance +class instanceclass instance +class instanceclass instance clearoperationclear current session contents
        without resetting overall session config.
        Afterwards, the session will contain only one
        empty EDL, while all Assets are retained.
        Clipclassbookkeeping (asset) view of a media clip. clipartifactbookkeeping (asset) view of a media clip. diff --git a/doc/devel/uml/index_70.html b/doc/devel/uml/index_70.html index 94fe56f77..485f245e8 100644 --- a/doc/devel/uml/index_70.html +++ b/doc/devel/uml/index_70.html @@ -29,8 +29,8 @@ FileProviderclassThis is the Factory for Files, whenever something wants to use some file (or temporary storage), This Factory will hand out some smart/shared pointer to a File object which will be used to retrieve Frames. FileReferenceclass filesrelation -fixedplacementartifact -FixedPlacementclass +fixedlocationartifactimplements fixed placement of a MObject +FixedLocationclass Fixtureactivity object fixtureartifactthe (low level) representation of the EDL with concrete placement data Fixturecomponent diff --git a/doc/devel/uml/index_72.html b/doc/devel/uml/index_72.html index a26e1439f..58b669cd2 100644 --- a/doc/devel/uml/index_72.html +++ b/doc/devel/uml/index_72.html @@ -24,8 +24,8 @@ howtoProcoperation@return descriptor how to build a render pipeline corresponding to this media Hubclass hubartifactspecial ProcNode used to build data distributing connections -HUEclass instance HUEclass instance +HUEclass instance diff --git a/doc/devel/uml/index_73.html b/doc/devel/uml/index_73.html index 496421c53..798945020 100644 --- a/doc/devel/uml/index_73.html +++ b/doc/devel/uml/index_73.html @@ -20,9 +20,9 @@ idattributeAsset primary key. In Memory Databaseclass diagram inFixtureactivity action pin -inputclass instance -inputclass instance inputclass instance +inputclass instance +inputclass instance instanceoperation instructionsrelation Interfaceclass view diff --git a/doc/devel/uml/index_76.html b/doc/devel/uml/index_76.html index 8fa1f472c..9b41469f0 100644 --- a/doc/devel/uml/index_76.html +++ b/doc/devel/uml/index_76.html @@ -25,6 +25,8 @@ linkartifactforwarding, adapting or connecting ProcNode loadoperationreplace the current session by a new
        session loaded from serialized state. load Mediause case +locatingpinartifactChaining and constraining the Placement of a Media Object +LocatingPinclassAn element with value semantics, which actually implements the placement of some MObject by positioning it in some way. Lockclass Lockclass Logicclass diff --git a/doc/devel/uml/index_77.html b/doc/devel/uml/index_77.html index d83661f51..997d703b9 100644 --- a/doc/devel/uml/index_77.html +++ b/doc/devel/uml/index_77.html @@ -32,8 +32,8 @@ MediaFactoryclassspecialized Asset Factory for configuring (new) media asset instances based on existing media files on disk; can create placeholder assets as well merge activity nodemerge activity node Metaclasskey abstraction: metadata and organisational asset -metaartifactkey abstraction: metadata and organisational asset metaartifactabstract base class of all MObjects representing meta data or processing instructions +metaartifactkey abstraction: metadata and organisational asset Metaclass mobjectartifactKey Abstraction: A Media Object in the Session mobjectpackagesourcecode package

        MObject Subsystem
        including the Session (EDL), Builder and Processing Controller diff --git a/doc/devel/uml/index_78.html b/doc/devel/uml/index_78.html index 7a0c5e875..eeaf4b78d 100644 --- a/doc/devel/uml/index_78.html +++ b/doc/devel/uml/index_78.html @@ -18,7 +18,7 @@ - + diff --git a/doc/devel/uml/index_79.html b/doc/devel/uml/index_79.html index b34c12000..2a52fbc5c 100644 --- a/doc/devel/uml/index_79.html +++ b/doc/devel/uml/index_79.html @@ -20,8 +20,8 @@ - + diff --git a/doc/devel/uml/index_82.html b/doc/devel/uml/index_82.html index 40cc37dd5..3a3a83808 100644 --- a/doc/devel/uml/index_82.html +++ b/doc/devel/uml/index_82.html @@ -20,10 +20,10 @@ - - - + + + diff --git a/doc/devel/uml/index_83.html b/doc/devel/uml/index_83.html index 5c1a18530..eb3719cf0 100644 --- a/doc/devel/uml/index_83.html +++ b/doc/devel/uml/index_83.html @@ -31,8 +31,8 @@ - + @@ -46,8 +46,8 @@ - + diff --git a/doc/devel/uml/index_84.html b/doc/devel/uml/index_84.html index 1739030f8..03ef3d02c 100644 --- a/doc/devel/uml/index_84.html +++ b/doc/devel/uml/index_84.html @@ -42,11 +42,11 @@ - + - +
        NameKindDescription
        nameattributeelement ID, comprehensible but sanitized. The tuple (category, name, org) is unique.
        nextrelationnext additional Placement, if any
        nextrelationnext additional LocatingPin, if any
        nodecreatertoolartifactcentral Tool implementing the Renderengine building
        NodeCreatorToolclassThis Tool implementation plays the central role in the buld process: given a MObject from Session, it is able to attach ProcNodes to the render engine under construction such as to reflect the properties of the MObject in the actual render.
        nodesrelation
        offsetattributeOffset the actual position by this (time) value relative to the anchor point. TODO: Representation?
        orgattributeorigin or authorship id. Can be a project abbreviation, a package id or just the authors nickname or UID. This allows for the compnent name to be more generic (e.g. "blur"). Default for all assets provided by the core cinelerra-3 codebase is "cin3".
        ouputclass instance
        ouputclass instance
        ouputclass instance
        ouputclass instance
        OutPortclassstructural asset corresponding to some port generating media output
        outportartifactstructural asset corresponding to some port generating media output
        outputrelation
        refPointclass instance
        regoperationregisters an asset object in the internal DB, providing its unique key
        registryrelation@internal Table or DB holding all registered asset instances.
        relativeplacementartifactPlacement implemnetaion providing various ways of attaching a MObject to another one
        RelativePlacementclass
        relTypeattributethe kind of relation denoted by this Placement
        relativelocationartifactPlacement implemnetaion providing various ways of attaching a MObject to another one
        RelativeLocationclass
        RelTypeclassthe possible kinds of RelativePlacements
        relTypeattributethe kind of relation denoted by this Placement
        removeoperationremove the given asset <i>together with all its dependants</i> from the internal DB
        Render Entitiesclass diagram
        Render Requestactivity parameter
        Service Componentsclass view
        Sessioncomponent
        sessionartifactInterface: the session edited by the user
        sessionpackagesourcecode package

        Everything concerning the EDL and Session, within the MObject Subsystem
        Sessionclass view
        sessionpackagesourcecode package

        Everything concerning the EDL and Session, within the MObject Subsystem
        SessionclassPrimary Interface for all editing tasks.
        The session contains defaults, all the assets being edited, and a set of EDL with the individual MObjects to be manipulated and rendered.
        Session structureclass diagram
        sessionimplartifactholds the complete session data to be edited by the user
        SimpleClipclassElementary clip consisting of only one media stream
        SmartPointerclass
        SmartPointersclass view
        sourcerelationthe media source this clip referes to
        sourcerelationmedia source of this clip
        sourcerelationthe media source this clip referes to
        SourceclassSource Node: represents a media source to pull data from.
        sourceartifactRepresentation of a Media source
        Source Overviewdeployment diagram
        trafoartifacttransforming processing Node
        treatoperation
        treatoperation
        treatoperation
        treatoperation
        treatoperation
        treatoperation
        treatoperation
        treatoperation
        treatoperation
        treatoperationThis operation is to be overloaded for the specific MObject subclasses to be treated.
        diff --git a/doc/devel/uml/index_86.html b/doc/devel/uml/index_86.html index 0ae05e4c3..ce992fef4 100644 --- a/doc/devel/uml/index_86.html +++ b/doc/devel/uml/index_86.html @@ -22,21 +22,21 @@ vframeartifacta buffer and render process holding a Video frame vid1class instance vid1class instance -vid_Aclass instance -vid_Aclass instance -vid_aclass instance vid_Aclass instance +vid_Aclass instance vid_aclass instance +vid_Aclass instance +vid_aclass instance +videoclass instance videoclass instance videoclass instance -videoclass instance videoclass instance -video1class instance -video1class instance -video1class instance -video1class instance -video1class instance video1class instance +video1class instance +video1class instance +video1class instance +video1class instance +video1class instance VRenderclassRepresentation of a Video render process. (Encapsulates the video buffers for the actual calculations) vrenderartifactRepresentation of a Video render process diff --git a/src/proc/mobject/placement.hpp b/src/proc/mobject/placement.hpp index c1e7fc022..4c0504594 100644 --- a/src/proc/mobject/placement.hpp +++ b/src/proc/mobject/placement.hpp @@ -21,13 +21,36 @@ */ +/** @file placement.hpp + ** Placements are at the very core of all editing operations, + ** because they act as handles (smart pointers) to access the media objects + ** to be manipulated. Moreover, Placements are the actual content of the EDL(s) + ** and Fixture and thus are small objects with value semantics. Many editing tasks + ** include finding some Placement in the EDL or directly take a ref to some Placement. + ** + ** Placements are smart pointers: By acting on the Placement object, we can change + ** parameters of the way the media object is placed (e.g. adjust an offset), while by + ** dereferencing the Placement object, we access the "real" media object (e.g. for trimming). + ** + ** Placements are templated on the type of the actual MObject they refer to, so, sometimes + ** we rather use a Placement to be able to use the more specific methods of the + ** session::Clip interface. But please note the following detail: this type + ** labeling is the only difference between this subclasses, besides that, + ** they can be replaced by one another (no slicing). + ** + ** @see ExplicitPlacement + ** + */ + + + #ifndef MOBJECT_PLACEMENT_H #define MOBJECT_PLACEMENT_H #include "common/time.hpp" #include "common/factory.hpp" #include "proc/mobject/mobject.hpp" -#include "proc/mobject/session/chainplacement.hpp" +#include "proc/mobject/session/locatingpin.hpp" #include "proc/mobject/session/track.hpp" @@ -38,8 +61,8 @@ namespace mobject class ExplicitPlacement; - template /////TODO: unsolved design problem here! - class Placement : public shared_ptr + template + class Placement : public shared_ptr { protected: typedef cinelerra::Time Time; @@ -47,18 +70,41 @@ namespace mobject public: - ChainPlacement chain; + LocatingPin chain; /** resolve the network of placement and * provide the resulting (explicit) placement. */ - ExplicitPlacement resolve () ; + virtual ExplicitPlacement resolve () ; protected: Placement (); + virtual ~Placement() {}; }; + + /* === defining specialisations to be subclasses === */ + + namespace session + { + class Clip; + class Effect; + class Meta; + } + template<> + class Placement : public Placement + { + //TODO: overwirte shared_ptr's operator-> to return the correct subtype of MObject... + }; + + template<> + class Placement : public Placement + { }; + + template<> + class Placement : public Placement + { }; diff --git a/src/proc/mobject/session/allocation.cpp b/src/proc/mobject/session/allocation.cpp index e3ed4b701..a590756c3 100644 --- a/src/proc/mobject/session/allocation.cpp +++ b/src/proc/mobject/session/allocation.cpp @@ -1,5 +1,5 @@ /* - Allocation - directive to place a MObject in a specific way + Allocation - objective to place a MObject in a specific way Copyright (C) CinelerraCV 2007, Christian Thaeter diff --git a/src/proc/mobject/session/allocation.hpp b/src/proc/mobject/session/allocation.hpp index 88605572a..5bdd5b88c 100644 --- a/src/proc/mobject/session/allocation.hpp +++ b/src/proc/mobject/session/allocation.hpp @@ -1,5 +1,5 @@ /* - ALLOCATION.hpp - directive to place a MObject in a specific way + ALLOCATION.hpp - objective to place a MObject in a specific way Copyright (C) CinelerraCV 2007, Christian Thaeter @@ -26,7 +26,7 @@ #include -#include "proc/mobject/placement.hpp" +#include "proc/mobject/session/locatingpin.hpp" using std::string; @@ -39,9 +39,10 @@ namespace mobject /** - * a directive to place a MObject in a specific way + * Interface: any objective, constraint or wish of + * placeing a MObject in a specific way. */ - class Allocation : public Placement + class Allocation : public LocatingPin { protected: /** human readable representation of the condition diff --git a/src/proc/mobject/session/clip.hpp b/src/proc/mobject/session/clip.hpp index 83696c866..316cbc435 100644 --- a/src/proc/mobject/session/clip.hpp +++ b/src/proc/mobject/session/clip.hpp @@ -25,6 +25,7 @@ #define MOBJECT_SESSION_CLIP_H #include "proc/mobject/session/abstractmo.hpp" +#include "proc/mobject/placement.hpp" @@ -55,6 +56,8 @@ namespace mobject //TODO: where to put the duration ??? }; + + diff --git a/src/proc/mobject/session/fixedplacement.cpp b/src/proc/mobject/session/fixedlocation.cpp similarity index 88% rename from src/proc/mobject/session/fixedplacement.cpp rename to src/proc/mobject/session/fixedlocation.cpp index cfd370501..08c19aa24 100644 --- a/src/proc/mobject/session/fixedplacement.cpp +++ b/src/proc/mobject/session/fixedlocation.cpp @@ -1,5 +1,5 @@ /* - ${Name} - ???????????? needed any longer? + FixedLocation - directly positioning a MObject to a fixed location Copyright (C) CinelerraCV 2007, Christian Thaeter @@ -21,7 +21,7 @@ * *****************************************************/ -#include "proc/mobject/session/fixedplacement.hpp" +#include "proc/mobject/session/fixedlocation.hpp" namespace mobject { diff --git a/src/proc/mobject/session/fixedplacement.hpp b/src/proc/mobject/session/fixedlocation.hpp similarity index 70% rename from src/proc/mobject/session/fixedplacement.hpp rename to src/proc/mobject/session/fixedlocation.hpp index badf3e781..e3a51056b 100644 --- a/src/proc/mobject/session/fixedplacement.hpp +++ b/src/proc/mobject/session/fixedlocation.hpp @@ -1,5 +1,5 @@ /* - FIXEDPLACEMENT.hpp - TODO: didn't we plan to rename ExplicitPlacement to DirectPlacement?? + FIXEDLOCATION.hpp - directly positioning a MObject to a fixed location Copyright (C) CinelerraCV 2007, Christian Thaeter @@ -21,11 +21,10 @@ */ -#ifndef MOBJECT_SESSION_FIXEDPLACEMENT_H -#define MOBJECT_SESSION_FIXEDPLACEMENT_H +#ifndef MOBJECT_SESSION_FIXEDLOCATION_H +#define MOBJECT_SESSION_FIXEDLOCATION_H -#include "proc/mobject/placement.hpp" -#include "proc/mobject/explicitplacement.hpp" +#include "proc/mobject/session/locatingpin.hpp" @@ -34,9 +33,11 @@ namespace mobject namespace session { - // TODO: didn't we plan to rename ExplicitPlacement to DirectPlacement?? - - class DirectPlacement : public ExplicitPlacement + /** + * The most common case of positioning a MObject + * in the EDL: directly specifying a constant position. + */ + class FixedLocation : public LocatingPing { /////////// }; diff --git a/src/proc/mobject/session/chainplacement.cpp b/src/proc/mobject/session/locatingpin.cpp similarity index 89% rename from src/proc/mobject/session/chainplacement.cpp rename to src/proc/mobject/session/locatingpin.cpp index 3c5393ddd..be9b2863c 100644 --- a/src/proc/mobject/session/chainplacement.cpp +++ b/src/proc/mobject/session/locatingpin.cpp @@ -1,5 +1,5 @@ /* - ChainPlacement - Chaining and additionally constraining Placements + LocatingPin - Chaining and constraining the Placement of a Media Object Copyright (C) CinelerraCV 2007, Christian Thaeter @@ -21,7 +21,7 @@ * *****************************************************/ -#include "proc/mobject/session/chainplacement.hpp" +#include "proc/mobject/session/locatingpin.hpp" #include "proc/mobject/placement.hpp" namespace mobject diff --git a/src/proc/mobject/session/chainplacement.hpp b/src/proc/mobject/session/locatingpin.hpp similarity index 79% rename from src/proc/mobject/session/chainplacement.hpp rename to src/proc/mobject/session/locatingpin.hpp index db71b8c1f..ceb39c4c4 100644 --- a/src/proc/mobject/session/chainplacement.hpp +++ b/src/proc/mobject/session/locatingpin.hpp @@ -1,5 +1,5 @@ /* - CHAINPLACEMENT.hpp - Chaining and additionally constraining Placements + LOCATINGPIN.hpp - Chaining and constraining the Placement of a Media Object Copyright (C) CinelerraCV 2007, Christian Thaeter @@ -21,8 +21,8 @@ */ -#ifndef MOBJECT_SESSION_CHAINPLACEMENT_H -#define MOBJECT_SESSION_CHAINPLACEMENT_H +#ifndef MOBJECT_SESSION_LOCATINGPIN_H +#define MOBJECT_SESSION_LOCATINGPIN_H @@ -37,12 +37,11 @@ namespace mobject class RelativePlacement; - template - struct ChainPlacement + struct LocatingPin { protected: - /** next additional Placement, if any */ - Placement * next; + /** next additional Pin, if any */ + LocatingPin * next; public: FixedPlacement& operator() (Time); diff --git a/src/proc/mobject/session/relativeplacement.cpp b/src/proc/mobject/session/relativelocation.cpp similarity index 100% rename from src/proc/mobject/session/relativeplacement.cpp rename to src/proc/mobject/session/relativelocation.cpp diff --git a/src/proc/mobject/session/relativeplacement.hpp b/src/proc/mobject/session/relativelocation.hpp similarity index 84% rename from src/proc/mobject/session/relativeplacement.hpp rename to src/proc/mobject/session/relativelocation.hpp index 1836d689d..577c741f3 100644 --- a/src/proc/mobject/session/relativeplacement.hpp +++ b/src/proc/mobject/session/relativelocation.hpp @@ -1,5 +1,5 @@ /* - RELATIVEPLACEMENT.hpp - Placement implemnetaion providing various ways of attaching a MObject to another one + RELATIVELOCATION.hpp - Placement implementation attaching MObjects relative to another one Copyright (C) CinelerraCV 2007, Christian Thaeter @@ -21,10 +21,10 @@ */ -#ifndef MOBJECT_SESSION_RELATIVEPLACEMENT_H -#define MOBJECT_SESSION_RELATIVEPLACEMENT_H +#ifndef MOBJECT_SESSION_RELATIVELOCATION_H +#define MOBJECT_SESSION_RELATIVELOCATION_H -#include "proc/mobject/placement.hpp" +#include "proc/mobject/session/locatingpin.hpp" @@ -36,7 +36,7 @@ namespace mobject - class RelativePlacement : public Placement + class RelativeLocation : public LocatingPin { public: diff --git a/uml/cinelerra3/128133.diagram b/uml/cinelerra3/128133.diagram index a6da87c99..2df4f1453 100644 --- a/uml/cinelerra3/128133.diagram +++ b/uml/cinelerra3/128133.diagram @@ -22,7 +22,7 @@ classcanvas 129413 class_ref 128517 // MObject end classcanvas 129669 class_ref 128645 // Placement draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 539 121 2000 + xyz 634 120 2000 end classcanvas 129925 class_ref 128389 // Track draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default @@ -44,17 +44,17 @@ classcanvas 131973 class_ref 129157 // Meta draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default xyz 389 368 2000 end -classcanvas 132229 class_ref 129285 // FixedPlacement +classcanvas 132229 class_ref 129285 // FixedLocation draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 678 374 2005 + xyz 608 332 2005 end -classcanvas 132869 class_ref 129413 // RelativePlacement +classcanvas 132869 class_ref 129413 // RelativeLocation draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 477 342 2000 + xyz 491 332 2000 end classcanvas 134149 class_ref 129541 // Allocation draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 592 342 2000 + xyz 568 427 2000 end classcanvas 134405 class_ref 129669 // Label draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default @@ -62,7 +62,7 @@ classcanvas 134405 class_ref 129669 // Label end classcanvas 135429 class_ref 129797 // ExplicitPlacement draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 673 258 2004 + xyz 715 276 2004 end classcanvas 135813 class_ref 129797 // ExplicitPlacement draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default @@ -80,11 +80,11 @@ textcanvas 137093 "Fixture is the actual assembly of various Media Objects ready xyzwh 39 909 2000 147 108 classcanvas 137221 class_ref 130053 // Wish draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 573 485 2000 + xyz 561 532 2000 end classcanvas 137349 class_ref 130181 // Constraint draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 623 485 2000 + xyz 616 532 2000 end classcanvas 138629 class_ref 135173 // Segment draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default @@ -102,9 +102,9 @@ classcanvas 139653 class_ref 139781 // SessManager draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default xyz 101 301 2000 end -classcanvas 141317 class_ref 139909 // ChainPlacement +classcanvas 141317 class_ref 139909 // LocatingPin draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 677 148 2000 + xyz 518 239 2000 end relationcanvas 128389 relation_ref 128005 // from ref 128005 z 1999 to ref 128133 @@ -157,27 +157,19 @@ relationcanvas 132101 relation_ref 129669 // no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 132997 relation_ref 129925 // - from ref 132869 z 1999 to point 529 240 - line 133893 z 1999 to ref 129413 - role_a_pos 413 204 3000 no_role_b - multiplicity_a_pos 401 197 3000 multiplicity_b_pos 515 317 3000 + from ref 132869 z 1999 to point 455 329 + line 133893 z 1999 to point 430 252 + line 144389 z 1999 to ref 129413 + role_a_pos 417 223 3000 no_role_b + multiplicity_a_pos 406 208 3000 multiplicity_b_pos 474 359 3000 relationcanvas 134533 relation_ref 130309 // from ref 134405 z 1999 to ref 131973 no_role_a no_role_b no_multiplicity_a no_multiplicity_b -relationcanvas 135173 relation_ref 130565 // - from ref 134149 z 1999 to point 576 266 - line 142853 z 1999 to ref 129669 - no_role_a no_role_b - no_multiplicity_a no_multiplicity_b -relationcanvas 135301 relation_ref 130693 // - from ref 132869 z 1999 to ref 129669 - no_role_a no_role_b - no_multiplicity_a no_multiplicity_b relationcanvas 135685 relation_ref 130949 // geometry VHV - from ref 135429 z 1999 to point 724 236 - line 141445 z 1999 to point 576 236 + from ref 135429 z 1999 to point 766 245 + line 141445 z 1999 to point 671 245 line 141573 z 1999 to ref 129669 no_role_a no_role_b no_multiplicity_a no_multiplicity_b @@ -226,20 +218,37 @@ relationcanvas 139781 relation_ref 142853 // multiplicity_a_pos 126 426 3000 no_multiplicity_b relationcanvas 140165 relation_ref 142981 // from ref 129669 z 1999 to ref 129413 - role_a_pos 401 145 3000 no_role_b - multiplicity_a_pos 401 178 3000 multiplicity_b_pos 512 178 3000 -relationcanvas 140293 relation_ref 143109 // - from ref 132229 z 1999 to ref 135429 - no_role_a no_role_b - no_multiplicity_a no_multiplicity_b + role_a_pos 413 151 3000 no_role_b + multiplicity_a_pos 403 151 3000 multiplicity_b_pos 589 153 3000 relationcanvas 142213 relation_ref 143237 // from ref 129669 z 1999 to ref 141317 - role_a_pos 640 145 3000 no_role_b - multiplicity_a_pos 664 171 3000 no_multiplicity_b -relationcanvas 142341 relation_ref 143365 // - from ref 141317 z 1999 to point 724 207 - line 142597 z 1999 to point 637 207 - line 142725 z 1999 to ref 129669 - role_a_pos 640 191 3000 no_role_b + role_a_pos 578 200 3000 no_role_b + multiplicity_a_pos 599 233 3000 no_multiplicity_b +relationcanvas 142981 relation_ref 143493 // + geometry VHV + from ref 132869 z 1999 to point 539 304 + line 143493 z 1999 to point 554 304 + line 143621 z 1999 to ref 141317 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 143109 relation_ref 143621 // + geometry VHV + from ref 132229 z 1999 to point 650 304 + line 143749 z 1999 to point 554 304 + line 143877 z 1999 to ref 141317 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 143237 relation_ref 143749 // + geometry VHV unfixed + from ref 134149 z 1999 to point 599 304 + line 144005 z 1999 to point 554 304 + line 144133 z 1999 to ref 141317 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 144517 relation_ref 143877 // + from ref 141317 z 1999 to point 488 239 + line 144645 z 1999 to point 488 269 + line 144773 z 1999 to ref 141317 + role_a_pos 492 244 3000 no_role_b no_multiplicity_a no_multiplicity_b end diff --git a/uml/cinelerra3/128261 b/uml/cinelerra3/128261 index de4cec32a..9925728b7 100644 --- a/uml/cinelerra3/128261 +++ b/uml/cinelerra3/128261 @@ -1,6 +1,6 @@ format 40 "MObject" // ProcessingLayer::MObject - revision 24 + revision 26 modified_by 5 "hiv" // class settings //class diagram settings @@ -485,7 +485,7 @@ ${class}::${name} ${(}const ${t0}& ${p0}${)}${const}${volatile} ${throw}${static cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value}; " classrelation_ref 145413 // chain () - b multiplicity "" parent class_ref 139909 // ChainPlacement + b multiplicity "" parent class_ref 139909 // LocatingPin end end @@ -701,7 +701,7 @@ ${inlines} end end - class 129285 "FixedPlacement" + class 129285 "FixedLocation" visibility package cpp_decl "${comment}${template}class ${name}${inherit} { @@ -712,16 +712,16 @@ ${inlines} idl_decl "" explicit_switch_type "" - classrelation 145285 // - relation 143109 ---|> + classrelation 145797 // + relation 143621 ---|> a public cpp default "${type}" - classrelation_ref 145285 // - b multiplicity "" parent class_ref 129797 // ExplicitPlacement + classrelation_ref 145797 // + b multiplicity "" parent class_ref 139909 // LocatingPin end end - class 129413 "RelativePlacement" + class 129413 "RelativeLocation" visibility package cpp_decl "${comment}${template}class ${name}${inherit} { @@ -751,14 +751,6 @@ ${inlines} comment "the kind of relation denoted by this Placement" end - classrelation 131333 // - relation 130693 ---|> - a public - cpp default "${type}" - classrelation_ref 131333 // - b multiplicity "" parent class_ref 128645 // Placement - end - attribute 129029 "offset" protected type class_ref 134917 // Time init_value "0" @@ -802,6 +794,14 @@ ${items}}; comment "attach subject to anchor (e.g. an effect to a clip)" end end + + classrelation 145669 // + relation 143493 ---|> + a public + cpp default "${type}" + classrelation_ref 145669 // + b multiplicity "" parent class_ref 139909 // LocatingPin + end end class 129541 "Allocation" @@ -816,14 +816,6 @@ ${inlines} explicit_switch_type "" comment "a directive to place a MObject in a specific way" - classrelation 131205 // - relation 130565 ---|> - a public - cpp default "${type}" - classrelation_ref 131205 // - b multiplicity "" parent class_ref 128645 // Placement - end - attribute 128773 "repr" protected explicit_type "string" cpp_decl " ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value}; @@ -851,6 +843,14 @@ ${inlines} idl_name_spec "get_${name}" get_of_attribute attribute_ref 128773 // repr end + + classrelation 145925 // + relation 143749 ---|> + a public + cpp default "${type}" + classrelation_ref 145925 // + b multiplicity "" parent class_ref 139909 // LocatingPin + end end class 129669 "Label" @@ -1080,7 +1080,7 @@ ${inlines} comment "Provides the implementation for getting the acutal value of a time varying or automated effect/plugin parameter" end - class 139909 "ChainPlacement" + class 139909 "LocatingPin" visibility package cpp_decl "${comment}${template}class ${name}${inherit} { @@ -1091,14 +1091,15 @@ ${inlines} idl_decl "" explicit_switch_type "" - classrelation 145541 // next () - relation 143365 ---> + comment "An element with value semantics, which actually implements the placement of some MObject by positioning it in some way." + classrelation 146053 // next () + relation 143877 ---> a role_name "next" multiplicity "" protected - comment "next additional Placement, if any" + comment "next additional LocatingPin, if any" cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value}; " - classrelation_ref 145541 // next () - b multiplicity "" parent class_ref 128645 // Placement + classrelation_ref 146053 // next () + b multiplicity "" parent class_ref 139909 // LocatingPin end end end diff --git a/uml/cinelerra3/129285 b/uml/cinelerra3/129285 index 1c121e419..ec9e7d7fc 100644 --- a/uml/cinelerra3/129285 +++ b/uml/cinelerra3/129285 @@ -1,6 +1,6 @@ format 40 "ProcessingLayer" // ProcessingLayer - revision 4 + revision 5 modified_by 5 "hiv" // class settings //class diagram settings @@ -226,7 +226,7 @@ format 40 end classinstance 130053 "" - type class_ref 129413 // RelativePlacement + type class_ref 129413 // RelativeLocation attributes attribute_ref 128133 // relType "SAMETIME" @@ -250,7 +250,7 @@ format 40 end classinstance 130309 "" - type class_ref 129413 // RelativePlacement + type class_ref 129413 // RelativeLocation attributes attribute_ref 129029 // offset "+3" diff --git a/uml/cinelerra3/130437 b/uml/cinelerra3/130437 index df17fa821..b1c2021e8 100644 --- a/uml/cinelerra3/130437 +++ b/uml/cinelerra3/130437 @@ -1,6 +1,6 @@ format 40 "session" // design::codegen::proc::mobject::session - revision 10 + revision 11 modified_by 5 "hiv" // class settings //class diagram settings @@ -511,7 +511,7 @@ ${namespace_end}" comment "abstract base class of all MObjects representing meta data or processing instructions" end - artifact 139013 "chainplacement" + artifact 139013 "locatingpin" stereotype "source" cpp_h "/* ${NAME}.hpp - ${description} @@ -545,12 +545,12 @@ ${namespace_start} ${members} ${namespace_end}" associated_classes - class_ref 139909 // ChainPlacement + class_ref 139909 // LocatingPin end - comment "Chaining and additionally constraining Placements" + comment "Chaining and constraining the Placement of a Media Object" end - artifact 129797 "fixedplacement" + artifact 129797 "fixedlocation" stereotype "source" cpp_h "/* ${NAME}.hpp - ${description} @@ -584,11 +584,12 @@ ${namespace_start} ${members} ${namespace_end}" associated_classes - class_ref 129285 // FixedPlacement + class_ref 129285 // FixedLocation end + comment "implements fixed placement of a MObject" end - artifact 129925 "relativeplacement" + artifact 129925 "relativelocation" stereotype "source" cpp_h "/* ${NAME}.hpp - ${description} @@ -622,7 +623,7 @@ ${namespace_start} ${members} ${namespace_end}" associated_classes - class_ref 129413 // RelativePlacement + class_ref 129413 // RelativeLocation end comment "Placement implemnetaion providing various ways of attaching a MObject to another one" end diff --git a/uml/cinelerra3/5.session b/uml/cinelerra3/5.session index 49af64898..9440f200a 100644 --- a/uml/cinelerra3/5.session +++ b/uml/cinelerra3/5.session @@ -4,21 +4,17 @@ diagrams 860 633 100 4 0 0 active classdiagram_ref 128133 // Session structure 860 633 100 4 0 0 - classdiagram_ref 130437 // Media-Asset Relations - 860 633 100 4 0 0 classdiagram_ref 128389 // Render Entities 688 506 100 4 120 0 end show_stereotypes -selected class_ref 129285 // FixedPlacement +selected + package_ref 129 // cinelerra3 open - deploymentview_ref 128133 // EXE Deployment - deploymentview_ref 128773 // gen - deploymentview_ref 128901 // gen - classview_ref 128901 // Assets - class_ref 128517 // MObject class_ref 128645 // Placement - class_ref 129413 // RelativePlacement + class_ref 129413 // RelativeLocation + class_ref 129541 // Allocation + class_ref 139909 // LocatingPin classview_ref 129029 // Interface usecaseview_ref 128133 // usage end diff --git a/uml/cinelerra3/cinelerra3.prj b/uml/cinelerra3/cinelerra3.prj index efde6fe95..62217077f 100644 --- a/uml/cinelerra3/cinelerra3.prj +++ b/uml/cinelerra3/cinelerra3.prj @@ -1,6 +1,6 @@ format 40 "cinelerra3" - revision 33 + revision 35 modified_by 5 "hiv" cpp_root_dir "../../src/" diff --git a/wiki/renderengine.html b/wiki/renderengine.html index eefa14ca2..2aaac1a79 100644 --- a/wiki/renderengine.html +++ b/wiki/renderengine.html @@ -1359,6 +1359,12 @@ From experiences with other middle scale projects, I prefer having the test code {{red{how to create a test stub for this interface...?}}}
    +
    +
    Used to actually implement the various kinds of [[Placement]] of ~MObjects. ~LocationPin is the root of a hierarchy of different kinds of placing, constraining and locating a Media Object. Basically, this is an instance of the ''state pattern'': The user sees one Placement object with value semantics, but when the properties of the Placement are changed, actually a ~LocationPin object (or rather a chain of ~LocationPins) is changed within the Placement. Subclasses of ~LocationPin implement different placing/constraining behaviour:
    +* {{{FixedLocation}}} places a MObject to a fixed temporal position and track
    +* {{{RelativeLocation}}} is used to atach the MObject to some other anchor MObject
    +* //additional constraints, placement objectives, range restrictions, pattern rules will follow...//
    +
    All sorts of "things" to be placed and manipulated by the user in the EDL. This interface abstracts the details and just supposes
     * the media object has a duration
    @@ -2079,19 +2085,20 @@ DAMAGE.
     
     The fact of being placed in the [[Session|SessionOverview]]/[[EDL]]is constitutive for all sorts of [[MObject]]s, without Placement they make no sense. Thus &mdash; technically &mdash; Placements act as ''smart pointers''. Of course, there are several kinds of Placements and they are templated on the type of MObject they are refering to. Placements can be //aggregated// to increasingly constrain the resulting "location" of the refered ~MObject. See &rarr; [[handling of Placements|PlacementHandling]] for more details
    -
    -
    [[Placement]]s are at the very core of all [[editing operations|EditingOperations]], because they act as handles (smart pointers) to access the [[media objects|MObject]] to be manipulated. Moreover, Placements are the actual content of the EDL(s) and Fixture and thus are small objects with //value semantics//. Many editing tasks include finding some Placement in the EDL or directly take a ref to some Placement. By acting on the Placement object, we can in some cases change parameters of the way the media object is placed (e.g. adjust an offset), while by dereferencing the Placement object, we access the "real" media object (e.g. for trimming its length).
    +
    +
    [[Placement]]s are at the very core of all [[editing operations|EditingOperations]], because they act as handles (smart pointers) to access the [[media objects|MObject]] to be manipulated. Moreover, Placements are the actual content of the EDL(s) and Fixture and thus are small objects with //value semantics//. Many editing tasks include finding some Placement in the EDL or directly take a ref to some Placement. By acting on the Placement object, we can in some cases change parameters of the way the media object is placed (e.g. adjust an offset), while by dereferencing the Placement object, we access the "real" media object (e.g. for trimming its length). Placements are ''templated'' on the type of the actual ~MObject they refer to, thus defining the interface/methods usable on this object.
     
    -Placements are ''templated'' on the type of the actual ~MObject they refer to, thus defining the interface/methods usable on this object. Each Placement has a ''kind'', which determines its actual placing and locating behaviour, but besides that, we don't stress the identity of a placement object (~MObjects on the other hand //do have// a distinguishable identity): initially, you create a Placement of some specific kind (fixed, relative,...), but later on, you treat the placement polymorphically and don't care about its kind. The sole purpose of the placement's kind is to select some virtual function implementing the desired behaviour.
    +Actually, the way each Placement locates its subject is implemented by one or several small LocationPin objects, where subclasses of LocationPin implement the various differend methods of placing and resolving the final location. Notably, we can give a ~FixedLocation or we can atach to another ~MObject to get a ~RelativeLocation, etc.
     
    -There is no limitation to one single Placement per ~MObject, indeed we can ''aggregate'' several Placements, resulting in their properties and constraints being combined to yield the actual position of the ~MObject refered by those Placements. 
    +Placements have //value semantics,// i.e. we don't stress the identity of a placement object (~MObjects on the other hand //do have// a distinguishable identity): initially, you create a Placement parametrized to some specific kind (fixed, relative,...), but later on, you treat the placement polymorphically and don't care about its kind. The sole purpose of the placement's kind is to select some virtual function implementing the desired behaviour. There is no limitation to one single Placement per ~MObject, indeed we have several different Placements of the same MObject (from a users point of view, this behaves like having clones). Besides, we can ''aggregate'' additional [[LocationPin]]a to one Placements, resulting in their properties and constraints being combined to yield the actual position of the referred ~MObject.
     
     !design decisions
    -* Placements can be aggregated in a sort of chain.
    +* the actual way of placing is implemented similar to the ''State Pattern'' by small embedded LoctionPin objects.
    +* these LocationPin objects form a ''decorator'' like chain
     * resolving into an ExplicitPlacement traverses this chain
    -* //overconstraining// a placement is not an error, we just stop traversing the chain (ignoring the remaining additionla Placements) at the moment the position is completely defined. 
    -* {{red{question...}}} how to implement this? externally, decorator-style or using the State pattern?
    -* {{red{problem...}}} how to get at the individual MObject sub-Interfaces. Why is this a Problem?
    +* //overconstraining// a placement is not an error, we just stop traversing the chain (ignoring the remaining additional Placements) at the moment the position is completely defined. 
    +* we provide subclasses to be able to form collections of e.g. {{{Placement<Effect>}}}, but we don't stress polymorphism here. Instead we stick to value semantics and explicitly ''allow slicing'' (all subclasses have the same size and layout and differ only in their vtable contents). This is justified, because for the polymorphical treating of ~MObjects the visitor mechanism used by the builder and the EDL is sufficiant, and I don't want to add another layer of complexity by making Placement something like {{{boost::variant}}}.
    +* Why is the question how to access a ~MObject subinterface a Problem?
     *# we want the EDL/Fixture to be a collection of Placements. This means, either we store pointers, or Placement needs to be //one// unique type!
     *# but if Placement is //a single type//, then we can get only MObjects from a Placement.
     *# then either we had to do everything by a visitor (which gets the concrete subtype dynamically), or we'd end up switching on type.