diff --git a/doc/devel/uml/class153349.html b/doc/devel/uml/class153349.html index 48617516d..845e35a8d 100644 --- a/doc/devel/uml/class153349.html +++ b/doc/devel/uml/class153349.html @@ -19,6 +19,8 @@

Declaration :

Relation <unidirectional association>

Declaration :

Stereotype: holds

-
+ +
Operation getParent

Declaration :

+

All public operations : getParent

diff --git a/doc/devel/uml/class153605.html b/doc/devel/uml/class153605.html index 3978922a5..abd092454 100644 --- a/doc/devel/uml/class153605.html +++ b/doc/devel/uml/class153605.html @@ -18,7 +18,7 @@

Declaration :

-
Relation scopes (<unidirectional association>)

Declaration :

Stereotype: has_a

+
Relation scopes (<unidirectional association>)

Declaration :

Stereotype: owns

diff --git a/doc/devel/uml/class153861.html b/doc/devel/uml/class153861.html index 1ef4ad515..70c14570f 100644 --- a/doc/devel/uml/class153861.html +++ b/doc/devel/uml/class153861.html @@ -20,7 +20,7 @@
Relation <unidirectional association>

Declaration :

-
Relation <unidirectional association>

Declaration :

Stereotype: use

+
Relation <unidirectional association>

Declaration :

Stereotype: uses

diff --git a/doc/devel/uml/fig136325.png b/doc/devel/uml/fig136325.png index 32668374d..7aa5b5289 100644 Binary files a/doc/devel/uml/fig136325.png and b/doc/devel/uml/fig136325.png differ diff --git a/doc/devel/uml/index_71.html b/doc/devel/uml/index_71.html index a95c02ef8..8e5db9b8f 100644 --- a/doc/devel/uml/index_71.html +++ b/doc/devel/uml/index_71.html @@ -38,6 +38,7 @@ getFixtureoperationWhile the session can be comprised of several EDLs,
there is only one Fixture, which represents the actual
configuration of all Objects to be rendered getFrameoperationmode = READ, WRITE, ... getIDoperation +getParentoperation getParentsoperationList of entities this asset depends on or requires to be functional. May be empty. The head of this list can be considered the primary prerequisite getPlaylistForRenderoperation getStateProxyoperation diff --git a/doc/devel/uml/public_operations.html b/doc/devel/uml/public_operations.html index 717b3562d..4e6395642 100644 --- a/doc/devel/uml/public_operations.html +++ b/doc/devel/uml/public_operations.html @@ -44,6 +44,7 @@ getFixtureSessionWhile the session can be comprised of several EDLs,
there is only one Fixture, which represents the actual
configuration of all Objects to be rendered getFrameFilemode = READ, WRITE, ... getIDAssetManager +getParentScope getParentsAssetList of entities this asset depends on or requires to be functional. May be empty. The head of this list can be considered the primary prerequisite getPlaylistForRenderFixture getStateProxyRenderState diff --git a/src/proc/mobject/session/scope.cpp b/src/proc/mobject/session/scope.cpp index 570fe90ff..fe5f60bcb 100644 --- a/src/proc/mobject/session/scope.cpp +++ b/src/proc/mobject/session/scope.cpp @@ -22,6 +22,7 @@ #include "proc/mobject/session/scope.hpp" +#include "proc/mobject/session/query-focus-stack.hpp" #include "proc/mobject/mobject.hpp" //#include "proc/mobject/session/track.hpp" //#include "proc/mobject/placement.hpp" @@ -42,6 +43,7 @@ namespace session { ScopeLocator::ScopeLocator() + : focusStack_(new QueryFocusStack) { } diff --git a/src/proc/mobject/session/scope.hpp b/src/proc/mobject/session/scope.hpp index 05ff245fd..fa7a0a0a7 100644 --- a/src/proc/mobject/session/scope.hpp +++ b/src/proc/mobject/session/scope.hpp @@ -30,6 +30,7 @@ #include "proc/mobject/placement-ref.hpp" #include "lib/singleton.hpp" +#include //#include //#include @@ -39,8 +40,10 @@ namespace mobject { namespace session { + using boost::scoped_ptr; class ScopeLocator; + class QueryFocusStack; /** @@ -53,11 +56,16 @@ namespace session { public: Scope (PlacementMO const& constitutingPlacement); + static Scope const& containing (PlacementMO const& aPlacement); + static Scope const& containing (RefPlacement const& refPlacement); + + Scope const& getParent() const; }; class ScopeLocator { + scoped_ptr focusStack_; public: ScopeLocator(); diff --git a/uml/lumiera/132357 b/uml/lumiera/132357 index ef09856d3..fa75cd0cd 100644 --- a/uml/lumiera/132357 +++ b/uml/lumiera/132357 @@ -1,6 +1,6 @@ format 58 "Placement" // ProcessingLayer::MObject::Placement - revision 1 + revision 2 modified_by 5 "hiv" // class settings //class diagram settings @@ -68,6 +68,23 @@ ${inlines} " classrelation_ref 177541 // b multiplicity "1" parent class_ref 152453 // PlacementRef + end + + operation 138885 "getParent" + public return_type class_ref 153349 // Scope + nparams 0 + cpp_decl " ${comment}${friend}${static}${inline}${virtual}${type} ${name} ${(}${)}${const}${volatile} ${throw}${abstract};" + cpp_def "${comment}${inline}${type} +${class}::${name} ${(}${)}${const}${volatile} ${throw}${staticnl} +{ + ${body} +} + +" + + + + end end @@ -110,7 +127,7 @@ ${inlines} classrelation 177797 // scopes () relation 167813 ---> - stereotype "has_a" + stereotype "owns" a role_name "scopes" protected cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value}; " @@ -176,7 +193,7 @@ ${inlines} classrelation 178565 // relation 168581 ---> - stereotype "use" + stereotype "uses" a role_name "" protected cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value}; " diff --git a/uml/lumiera/136325.diagram b/uml/lumiera/136325.diagram index 5b265342a..80ebfe88a 100644 --- a/uml/lumiera/136325.diagram +++ b/uml/lumiera/136325.diagram @@ -10,7 +10,7 @@ classcanvas 128133 class_ref 152453 // PlacementRef end classcanvas 128261 class_ref 153349 // Scope draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 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 show_stereotype_properties default - xyz 214 212 2000 + xyz 204 208 2000 end classcanvas 128517 class_ref 153477 // ScopePath draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 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 show_stereotype_properties default @@ -29,8 +29,8 @@ classcanvas 129413 class_ref 152069 // PlacementIndex xyz 340 345 2004 end note 129669 "actually -implemented through" - xyzwh 250 303 2000 131 50 +implemented through the:" + xyzwh 241 308 2000 140 45 classcanvas 129797 class_ref 153861 // ScopeLocator draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 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 show_stereotype_properties default xyz 196 17 2000 @@ -42,18 +42,18 @@ end note 131333 "this connection is established by the current session" xyzwh 361 39 2000 158 47 relationcanvas 128389 relation_ref 167557 // - from ref 128261 z 1999 stereotype "<>" xyz 277 231 3000 to ref 128133 + from ref 128261 z 1999 stereotype "<>" xyz 281 219 3000 to ref 128133 no_role_a no_role_b - multiplicity_a_pos 328 237 3000 multiplicity_b_pos 268 237 3000 + multiplicity_a_pos 328 237 3000 multiplicity_b_pos 278 237 3000 end relationcanvas 128645 relation_ref 167685 // - from ref 128517 z 1999 stereotype "<>" xyz 135 231 3000 to ref 128261 - role_a_pos 176 214 3000 no_role_b + from ref 128517 z 1999 stereotype "<>" xyz 130 231 3000 to ref 128261 + role_a_pos 166 214 3000 no_role_b no_multiplicity_a no_multiplicity_b end relationcanvas 128901 relation_ref 167813 // - from ref 128773 z 1999 stereotype "<>" xyz 49 181 3000 to ref 128517 - role_a_pos 86 195 3000 no_role_b + from ref 128773 z 1999 stereotype "<>" xyz 54 182 3000 to ref 128517 + role_a_pos 88 194 3000 no_role_b no_multiplicity_a no_multiplicity_b end relationcanvas 129157 relation_ref 167941 // @@ -64,7 +64,7 @@ relationcanvas 129157 relation_ref 167941 // no_multiplicity_a no_multiplicity_b end relationcanvas 129285 relation_ref 168069 // - from ref 128005 z 1999 stereotype "<>" xyz 193 286 3000 to ref 128261 + from ref 128005 z 1999 stereotype "<>" xyz 193 289 3000 to ref 128261 no_role_a no_role_b no_multiplicity_a no_multiplicity_b end @@ -81,7 +81,7 @@ relationcanvas 130053 relation_ref 168197 // no_multiplicity_a no_multiplicity_b end relationcanvas 130309 relation_ref 168325 // - from ref 129797 z 1999 stereotype "<>" xyz 237 141 3000 to ref 128261 + from ref 129797 z 1999 stereotype "<>" xyz 237 139 3000 to ref 128261 no_role_a no_role_b no_multiplicity_a no_multiplicity_b end @@ -92,7 +92,7 @@ relationcanvas 130949 relation_ref 168453 // no_multiplicity_a no_multiplicity_b end relationcanvas 131205 relation_ref 168581 // - from ref 129797 z 1999 stereotype "<>" xyz 339 91 3000 to ref 130437 + from ref 129797 z 1999 stereotype "<>" xyz 338 92 3000 to ref 130437 no_role_a no_role_b no_multiplicity_a no_multiplicity_b end diff --git a/uml/lumiera/lumiera.prj b/uml/lumiera/lumiera.prj index 98d69abad..890574f20 100644 --- a/uml/lumiera/lumiera.prj +++ b/uml/lumiera/lumiera.prj @@ -1,6 +1,6 @@ format 58 "lumiera" - revision 54 + revision 55 modified_by 5 "hiv" cpp_root_dir "../../src/" diff --git a/wiki/renderengine.html b/wiki/renderengine.html index 6663337cb..2c9abe508 100644 --- a/wiki/renderengine.html +++ b/wiki/renderengine.html @@ -3051,10 +3051,10 @@ Placement references mimic the behaviour of a real placement, i.e. they proxy th {{red{WIP}}} -
+
MObjects are attached into the [[Session]] by adding a [[Placement]]. Because this especially includes the case of //grouping or container objects,// e.g. tracks or [[meta-clips|VirtualClip]], any placement may optionally define and root a scope, and every placement is at least contained in one encompassing scope &mdash; of course with the exception of the absolute top level, which can be thought off as being contained in a scope of handling rules.
 
-Thus, while the [[sequences (former called EDL)|EDL]] act as generic container holding a pile of placments, actually there is a more fine grained structure based on the nesting of the tracks, which especially in Lumiera's HighLevelModel belong to the sequence (they aren't a property of the top level timeline as one might expect). Building upon these observations, we actually require each addition of a placement to specify a scope. The implementation of this tie-to-scope is provided by the same mechanism as utilised for relative placements, i.e. an directional placement relation. This relation actually is implemented by the PlacementIndex
+Thus, while the [[sequences (former called EDL)|EDL]] act as generic container holding a pile of placments, actually there is a more fine grained structure based on the nesting of the tracks, which especially in Lumiera's HighLevelModel belong to the sequence (they aren't a property of the top level timeline as one might expect). Building upon these observations, we actually require each addition of a placement to specify a scope. Consequently, for each Placement at hand it is possible to determine an //containing scope,// which in turn is associated with some Placement of a top-level ~MObject for this scope. An example would be the {{{Placement<Track>}}} acting as scope of all the clips placed onto this track. The //implementation//&nbsp; of this tie-to-scope is provided by the same mechanism as utilised for relative placements, i.e. an directional placement relation. Actually, this relation is implemented by the PlacementIndex within the current [[Session]].
 
 
 [>img[Structure of Placment Scopes|draw/ScopeStructure1.png]]
@@ -3382,7 +3382,7 @@ Viewed as a micro program, the processing patterns are ''weak typed'' &mdash
 
a given Render Engine configuration is a list of Processors. Each Processor in turn contains a Graph of ProcNode.s to do the acutal data processing. In order to cary out any calculations, the Processor needs to be called with a StateProxy containing the state information for this RenderProcess
 
-
+
When querying contents of the session or sub-containers within the session, the QueryFocus follows the current point-of-query. As such queries can be issued to explore the content of container-like objects holding other MObjects, the focus is always attached to a container, which also acts as [[scope|PlacementScope]] for the contained objects. QueryFocus is an implicit state (the current point of interrest). This sate especially remembers the path down from the root of the HighLevelModel, which was used to access the current scope. Because this path constitutes a hierarchy of scopes, it can be relevant for querying and resolving placement properties. (&rarr; SessionStructureQuery)
 
 !provided operations
@@ -3392,6 +3392,8 @@ Viewed as a micro program, the processing patterns are ''weak typed'' &mdash
 * get the current scope, which is implemented as Placement
 * get the current ScopePath from root (session globals) down to the current scope
 [>img[Scope Locating|uml/fig136325.png]]
+!!!relation to Scope
+There is a tight integration with PlacementScope through the ScopeLocator, which establishes the //current scope.// But QueryFocus is more of a //binding// &mdash; it links or focusses the current state and into a specific scope with a ScopePath depending on the current state. Thus, while Scope is just a passive container allowing locate and navigate, QueryFocus by virtue of this binding allows to query this current location.
 
 !implementation notes
 we provide a static access API, meaning that there is a singleton behind the scenes, which manages the mentioned scope stack. Moreover, there is an link to the current session. This link works by the current session grabbing the query focus and attaching to it. This attachment is shallow, i.e. the QueryFocus doesn't have knowledge about the session, which allows the focus to be unit tested.