Rumba C++ SDK
maquina::NodeDelegate Class Referenceabstract

This interface gives a high level access to the document structure. More...

#include <NodeDelegate.h>

Inheritance diagram for maquina::NodeDelegate:
maquina::NodeDelegateGroup maquina::NodeDelegateRumba maquina::NodeDelegateWrapper maquina::NodeDelegateManipulator maquina::VirtualAttributeNodeDelegate maquina::NodeDelegateSimpleList

Classes

class  AttributeDelegate
 A node attribute delegate. More...
 
class  AttributeIterator
 A node attribute iterator. More...
 
class  AttributeIteratorDelegate
 A node attribute iterator delegate to implement in the plugin. More...
 
struct  Attributes
 A node attributes iteration. More...
 
class  ChildIterator
 A node attribute iterator. More...
 
class  ChildIteratorDelegate
 A node attribute iterator delegate to implement a child iterator in the plugin. More...
 
class  Children
 A node children iteration. More...
 
class  Observer
 An object to keep an observer alive. More...
 
class  TransformUserData
 A blind data provided by the start_transform's implementation and passed to set_scale, set_rotation and set_translation. More...
 

Public Types

enum  MutableFlags {
  ScaleX = 0x001, ScaleY = 0x002, ScaleZ = 0x004, Scale = ScaleX|ScaleY|ScaleZ,
  RotateX = 0x008, RotateY = 0x010, RotateZ = 0x020, Rotate = RotateX|RotateY|RotateZ,
  TranslateX = 0x040, TranslateY = 0x080, TranslateZ = 0x100, Translate = TranslateX|TranslateY|TranslateZ,
  AllComponents = Scale|Rotate|Translate
}
 

Public Member Functions

virtual ~NodeDelegate ()
 
virtual StringView type_name () const =0
 
virtual std::shared_ptr< NodeDelegateparent () const =0
 Returns the parent node. More...
 
virtual maquina::StringView name () const =0
 The node's name. More...
 
virtual std::string path () const =0
 Returns the full path to the node. More...
 
virtual std::string document_path () const
 Returns the document path to the node. More...
 
virtual Imath::Box3d bounding_box () const
 Returns the bounding_box of the node. More...
 
virtual bool is_node () const
 Return true if this node delegate is a Rumba Node. More...
 
virtual std::shared_ptr< class AttributeDescriptordescription () const
 Returns the node's description, always returns a valid pointer. More...
 
virtual Node node () const
 Return the node behind this node delegate. More...
 
virtual bool operator== (const NodeDelegate &o) const =0
 Return true if both nodes are the same or both nodes are invalid. More...
 
virtual bool operator!= (const NodeDelegate &o) const =0
 Return true if the nodes are different or if one is invalid. More...
 
virtual std::shared_ptr< NodeDelegatefind (const StringView &path)
 Returns descendent node_delegate using a path starting at this node. More...
 
virtual int child_count () const
 Returns the number of children in the node. More...
 
virtual std::shared_ptr< NodeDelegatechild (const StringView &name)
 Return a node child using its name. More...
 
Children children ()
 
virtual int attribute_count () const
 Returns the number of attributes. More...
 
virtual std::shared_ptr< AttributeDelegateattribute (const StringView &name)
 Return a node attribute using its name. More...
 
virtual bool add_attribute (const StringView &name, const Value &value)
 Add a node attribute with the given name and value. More...
 
virtual std::shared_ptr< Channelchannel (const ChannelType sc)
 Return the specified channel if available, return nullptr otherwise. More...
 
virtual std::vector< Channelchannels ()
 Return all the node's channels. More...
 
virtual void channel_plugs (std::unordered_set< Plug > &set) const
 
virtual void animate ()
 Called when the node delegate is assigned to an animation system layer. More...
 
Attributes attributes ()
 
virtual bool has_transform () const
 Return true if this node is has a transformation matrix. More...
 
virtual Imath::M44d matrix (const QueryContext &qc=QueryContext::at_current_frame) const
 Return the node's local matrix which transforms a point from the local node space to the parent space. More...
 
virtual Imath::M44d world_matrix (const QueryContext &qc=QueryContext::at_current_frame) const
 Return the node's world matrix which transforms a point from the local node space to the world space. More...
 
virtual Imath::M44d parent_world_matrix (const QueryContext &qc=QueryContext::at_current_frame) const
 Return the node parent's world matrix which transforms a point from the parent space to the world space. More...
 
virtual Imath::V3d rotate_pivot (const QueryContext &qc=QueryContext::at_current_frame) const
 
virtual Imath::V3d scale_pivot (const QueryContext &qc=QueryContext::at_current_frame) const
 
virtual Imath::V3d joint_orient (const QueryContext &qc=QueryContext::at_current_frame) const
 
virtual Imath::V3d rotate_axis (const QueryContext &qc=QueryContext::at_current_frame) const
 
virtual int mutable_flags () const
 Returns the mutable transformation component. More...
 
virtual std::unique_ptr< TransformUserDatastart_transform (const QueryContext &qc=QueryContext::at_current_frame)
 Start a transform modification, time to backup an initial state. More...
 
virtual void end_transform (const ModificationContext &mc=ModificationContext::default_mc(), TransformUserData *user_data=nullptr)
 End a transform modification, time to backup an initial state. More...
 
virtual void set_matrix (const Imath::M44d &matrix, const ModificationContext &mc=ModificationContext::default_mc(), TransformUserData *user_data=nullptr)
 Set the node matrix. More...
 
virtual Imath::V3d scale (const QueryContext &qc=QueryContext::at_current_frame) const
 Return the scale of the node matrix. More...
 
virtual void set_scale (const Imath::V3d &scale, const ModificationContext &mc=ModificationContext::default_mc(), TransformUserData *user_data=nullptr)
 Set the scale of the node matrix. More...
 
virtual Imath::V3d rotation (const QueryContext &qc=QueryContext::at_current_frame) const
 Return the node matrix's rotation as euler radians angles in the order returned by rotation_order. More...
 
virtual Imath::Eulerd::Order rotate_order (const QueryContext &qc=QueryContext::at_current_frame) const
 Return the node rotate order. More...
 
virtual void set_rotation (const Imath::V3d &rotation, const ModificationContext &mc=ModificationContext::default_mc(), TransformUserData *user_data=nullptr)
 Set the transformation rotation. More...
 
virtual Imath::V3d translation (const QueryContext &qc=QueryContext::at_current_frame) const
 Return the node's translation. More...
 
virtual void set_translation (const Imath::V3d &translation, const ModificationContext &mc=ModificationContext::default_mc(), TransformUserData *user_data=nullptr)
 Set the translation of the node matrix. More...
 
Imath::V3d extract_translation (const Imath::M44d &local_matrix, const QueryContext &mc=QueryContext::at_current_frame) const
 A helper function to extract the node delegate translation component out of a local matrix, regarding the different pivots. More...
 
Imath::V3d extract_rotation (Imath::M44d local_matrix, const QueryContext &mc=QueryContext::at_current_frame) const
 A helper function to extract the node delegate rotation component out of a local matrix, regarding the joint_orient and rotate_axis. More...
 
virtual std::shared_ptr< Observercreate_transform_observer (const std::function< void()> &func, bool in_interactive=true)
 Create an observer notified when the NodeDelegate transform attributes have changed. More...
 
virtual bool is_camera () const
 Returns true if this node is a camera. More...
 
virtual bool is_locked () const
 Return true if the camera can't be moved. More...
 
virtual void set_locked (bool locked, const ModificationContext &mc=ModificationContext::default_mc())
 Set the locked attribute. More...
 
virtual bool is_orthographic (const QueryContext &qc=QueryContext::at_current_frame) const
 Does this camera has an orthographic projection. More...
 
virtual float orthographic_width (const QueryContext &qc=QueryContext::at_current_frame) const
 Return the orthographic width, the length projected in the width of the camera image. More...
 
virtual void set_orthographic_width (float width, const ModificationContext &mc=ModificationContext::default_mc())
 Set the orthographic width. More...
 
virtual float center_of_interest (const QueryContext &qc=QueryContext::at_current_frame) const
 Return the center of interest, the distance of the point the camera is looking at. More...
 
virtual void set_center_of_interest (float coi, const ModificationContext &mc=ModificationContext::default_mc())
 Set the center of interest. More...
 
virtual float near_clipping_plane (const QueryContext &qc=QueryContext::at_current_frame) const
 Return the near clipping plane. More...
 
virtual void set_near_clipping_plane (float near_clipping_plane, const ModificationContext &mc=ModificationContext::default_mc())
 Set the near clipping plane. More...
 
virtual float far_clipping_plane (const QueryContext &qc=QueryContext::at_current_frame) const
 Return the far clipping plane. More...
 
virtual void set_far_clipping_plane (float far_clipping_plane, const ModificationContext &mc=ModificationContext::default_mc())
 Set the far clipping plane. More...
 
virtual Imath::M44d projection_matrix (const QueryContext &qc=QueryContext::at_current_frame) const
 Return the camera's projection matrix. More...
 
virtual float aspect_ratio () const
 Return the camera's aspect ratio, width over height. This aspect ratio is used to shape the viewport's frame. More...
 
virtual std::shared_ptr< NodeDelegateaim () const
 Return the aim target node if available. More...
 
virtual std::shared_ptr< NodeDelegateup () const
 Return the up target node if available. More...
 
virtual std::shared_ptr< Observercreate_camera_observer (const std::function< void()> &func, bool in_interactive=true)
 Create an observer notified when the NodeDelegate camera attributes have changed. More...
 
virtual bool has_geometry () const
 Return true if this node has a geometry. More...
 
virtual Shape geometry () const
 Returns the node's geometry. More...
 
virtual bool is_sculpt () const
 This node is a sculpt node, i-e, displaces the vertices of the input scene's geometries using sparse buffers of delta position. More...
 
virtual BufferConstV3f input_points (const StringView &path, const QueryContext &qc=QueryContext::at_current_frame) const
 Return the points of the input scene node at the given path. More...
 
virtual SparseBufferConstV3f delta_points (const StringView &path, const QueryContext &qc=QueryContext::at_current_frame) const
 Return the delta points fot the scene node at the given path. More...
 
virtual void set_delta_points (const SparseBufferConstV3f &delta_points, const StringView &path, const ModificationContext &mc=ModificationContext::default_mc()) const
 Set the delta points fot the scene node at the given path. More...
 
virtual std::shared_ptr< maquina::NodeDelegate::Observercreate_sculpt_observer (const std::function< void()> &func, bool in_interactive)
 Create an observer notified when the NodeDelegate sculpt attributes have changed. More...
 

Protected Member Functions

virtual std::shared_ptr< ChildIteratorDelegate_children_begin ()
 Return the begin iterator of the attributes. More...
 
virtual std::shared_ptr< ChildIteratorDelegate_children_end ()
 Return the end iterator of the attributes. More...
 
virtual std::shared_ptr< AttributeIteratorDelegate_attributes_begin ()
 Return the begin iterator of the attributes. More...
 
virtual std::shared_ptr< AttributeIteratorDelegate_attributes_end ()
 Return the end iterator of the attributes. More...
 

Friends

class NodeDelegateWrapper
 

Detailed Description

This interface gives a high level access to the document structure.

Using this class, not only the API nodes structure can be traversed but also the values.

The values can present a hierarchical structure which is managed by the value itself.

For exemple, a USD reader Rumba node exposes the USD file structure to the Rumba user interface with special USD values and a specialized NodeDelegate.

This class can be used to traverse the document in a user interface.

Deriving this class, one can also define a value internal hierarchy.

Those objects are invalid if the document structure changes. So they shall be keeped only during the traversal and not used if the current node has been destroyed.

If you need to keep references on a node, use a path on this node. The path is a string like "/nodeA/nodeB/nodeC.plugA/nodeD/nodeE". Here "nodeA", "nodeB" and "nodeC" are valid rumba:Node objects. "plugA" is the name of a plug of "nodeC". "nodeD" and "nodeE" are nodes served by the value stored in "plugA". "nodeD" and "nodeE" do not really exist in the document.

The matrix of the node delegate is decomposed in different components: scale, shear, rotation, translation, scale_pivots, rotate_pivot and joint_orient.

The formula to get the local matrix is (using post multiplication) : matrix = [-scale_pivot] * [scale] * [shear] * [scale_pivot] * [-rotate_pivot] * [rotate] * [joint_orient] * [rotate_pivot] * [translation]

The formula to get the world matrix is (using post multiplication) : world_matrix = matrix * parent_world_matrix

Constructor & Destructor Documentation

◆ ~NodeDelegate()

virtual maquina::NodeDelegate::~NodeDelegate ( )
inlinevirtual

Member Function Documentation

◆ bounding_box()

virtual Imath::Box3d maquina::NodeDelegate::bounding_box ( ) const
virtual

Returns the bounding_box of the node.

Reimplemented in maquina::NodeDelegateRumba, and maquina::NodeDelegateWrapper.

◆ description()

virtual std::shared_ptr<class AttributeDescriptor> maquina::NodeDelegate::description ( ) const
virtual

Returns the node's description, always returns a valid pointer.

Reimplemented in maquina::VirtualAttributeNodeDelegate, maquina::NodeDelegateRumba, maquina::NodeDelegateGroup, and maquina::NodeDelegateWrapper.

◆ document_path()

virtual std::string maquina::NodeDelegate::document_path ( ) const
virtual

Returns the document path to the node.

Reimplemented in maquina::NodeDelegateWrapper.

◆ find()

virtual std::shared_ptr<NodeDelegate> maquina::NodeDelegate::find ( const StringView path)
virtual

Returns descendent node_delegate using a path starting at this node.

If the node_delegate does not exist, returns nullptr.

Reimplemented in maquina::NodeDelegateRumba, and maquina::NodeDelegateWrapper.

◆ is_node()

virtual bool maquina::NodeDelegate::is_node ( ) const
virtual

Return true if this node delegate is a Rumba Node.

Reimplemented in maquina::NodeDelegateRumba, and maquina::NodeDelegateWrapper.

◆ name()

virtual maquina::StringView maquina::NodeDelegate::name ( ) const
pure virtual

The node's name.

Implemented by the plug-in.

Implemented in maquina::NodeDelegateRumba, maquina::NodeDelegateGroup, and maquina::NodeDelegateWrapper.

◆ node()

virtual Node maquina::NodeDelegate::node ( ) const
virtual

Return the node behind this node delegate.

Exceptions
std::runtime_errorif the node delegate is not mapped to a Node

Reimplemented in maquina::NodeDelegateRumba, and maquina::NodeDelegateWrapper.

◆ operator!=()

virtual bool maquina::NodeDelegate::operator!= ( const NodeDelegate o) const
pure virtual

Return true if the nodes are different or if one is invalid.

Implemented by the plug-in.

Implemented in maquina::NodeDelegateRumba, maquina::NodeDelegateWrapper, and maquina::NodeDelegateGroup.

◆ operator==()

virtual bool maquina::NodeDelegate::operator== ( const NodeDelegate o) const
pure virtual

Return true if both nodes are the same or both nodes are invalid.

Implemented by the plug-in.

Implemented in maquina::NodeDelegateRumba, maquina::NodeDelegateWrapper, and maquina::NodeDelegateGroup.

◆ parent()

virtual std::shared_ptr<NodeDelegate> maquina::NodeDelegate::parent ( ) const
pure virtual

Returns the parent node.

Implemented by the plug-in.

Implemented in maquina::NodeDelegateRumba, maquina::NodeDelegateGroup, maquina::NodeDelegateSimpleList, and maquina::NodeDelegateWrapper.

◆ path()

virtual std::string maquina::NodeDelegate::path ( ) const
pure virtual

Returns the full path to the node.

Implemented by the plug-in.

Implemented in maquina::NodeDelegateRumba, maquina::NodeDelegateGroup, and maquina::NodeDelegateWrapper.

◆ type_name()

virtual StringView maquina::NodeDelegate::type_name ( ) const
pure virtual

Friends And Related Function Documentation

◆ NodeDelegateWrapper

friend class NodeDelegateWrapper
friend

The documentation for this class was generated from the following file: