Inviwo 0.9.12-pre
Inviwo documentation
Loading...
Searching...
No Matches
inviwo::CompositeProcessor Class Reference

A processor containing a network of processors, i.e. it will act as a sub network within a processor network. A CompositeProcessor can be used to reduce cluttering in the network. Also makes it easy to reuse groups of processors inside of a network, and across network since they can be saved in the processor list. A CompositeProcessor is usually created by selecting a group of processors that are closely related in the network editor and then clicking "create composite" in the context menu. Use InviwoModule::registerCompositeProcessor to register a saved composite in your module. More...

#include <inviwo/core/processors/compositeprocessor.h>

Inheritance diagram for inviwo::CompositeProcessor:

Public Member Functions

PropertyaddSuperProperty (Property *subProperty)
 CompositeProcessor (std::string_view identifier, std::string_view displayName, InviwoApplication *app, const std::filesystem::path &filename="")
virtual void deserialize (Deserializer &d) override
virtual const ProcessorInfogetProcessorInfo () const override
ProcessorNetworkgetSubNetwork ()
PropertygetSubProperty (Property *superProperty)
PropertygetSuperProperty (Property *subProperty)
virtual void process () override
virtual void propagateEvent (Event *event, Outport *source) override
void removeSuperProperty (Property *subProperty)
void saveSubNetwork (const std::filesystem::path &file)
virtual void serialize (Serializer &s) const override
Public Member Functions inherited from inviwo::Processor
virtual void accept (NetworkVisitor &visitor)
 Accept a NetworkVisitor, the visitor will visit this and then each Property of the Processor in an undefined order. The Visitor will then visit each Properties's properties and so on.
void addInteractionHandler (InteractionHandler *interactionHandler)
template<typename T, typename std::enable_if_t< std::is_base_of< Outport, T >::value, int > = 0>
T & addPort (std::unique_ptr< T > port, std::string_view portGroup="default")
template<typename T, typename std::enable_if_t< std::is_base_of< Inport, T >::value, int > = 0>
T & addPort (std::unique_ptr< T > port, std::string_view portGroup="default")
template<typename T>
T & addPort (T &port, std::string_view portGroup="default")
template<typename... Ts>
void addPorts (Ts &... ports)
bool allInportsAreReady () const
bool allInportsConnected () const
virtual void doIfNotReady ()
const std::string & getCategory () const
const std::string & getClassIdentifier () const
CodeState getCodeState () const
const std::string & getDisplayName () const
virtual const std::string & getIdentifier () const override
InportgetInport (std::string_view identifier) const
const std::vector< Inport * > & getInports () const
const std::vector< InteractionHandler * > & getInteractionHandlers () const
virtual InviwoApplicationgetInviwoApplication () override
ProcessorNetworkgetNetwork () const
OutportgetOutport (std::string_view identifier) const
const std::vector< Outport * > & getOutports () const
virtual const PropertyOwner * getOwner () const override
virtual PropertyOwner * getOwner () override
PortgetPort (std::string_view identifier) const
const std::string & getPortGroup (Port *port) const
std::vector< std::string > getPortGroups () const
const std::vector< Port * > & getPortsInGroup (std::string_view portGroup) const
const std::vector< Port * > & getPortsInSameGroup (Port *port) const
virtual const ProcessorgetProcessor () const override
virtual ProcessorgetProcessor () override
ProcessorWidgetgetProcessorWidget () const
const TagsgetTags () const
bool hasInteractionHandler () const
bool hasProcessorWidget () const
virtual void initializeResources ()
virtual void invalidate (InvalidationLevel invalidationLevel, Property *modifiedProperty=nullptr) override
virtual void invokeEvent (Event *event) override
virtual bool isConnectionActive (Inport *inport, Outport *outport) const
bool isReady () const
bool isSink () const
bool isSource () const
NameDispatcherHandle onDisplayNameChange (std::function< void(std::string_view, std::string_view)> callback)
NameDispatcherHandle onIdentifierChange (std::function< void(std::string_view, std::string_view)> callback)
 Processor (std::string_view identifier="", std::string_view displayName="")
void removeInteractionHandler (InteractionHandler *interactionHandler)
InportremovePort (Inport *port)
OutportremovePort (Outport *port)
PortremovePort (std::string_view identifier)
void setDisplayName (std::string_view displayName)
void setIdentifier (std::string_view identifier)
virtual void setNetwork (ProcessorNetwork *network)
virtual void setProcessorWidget (std::unique_ptr< ProcessorWidget > processorWidget)
virtual void setValid () override
const ProcessorStatusstatus () const
Public Member Functions inherited from inviwo::PropertyOwner
template<typename... Ts>
void addProperties (Ts &... properties)
void addProperty (Property &property)
void addProperty (Property *property, bool owner=true)
PropertyaddProperty (std::unique_ptr< Property > property)
iterator begin ()
const_iterator begin () const
const_iterator cbegin () const
const_iterator cend () const
virtual void clear ()
 Remove all properties; Owned properties will be deleted.
bool empty () const
iterator end ()
const_iterator end () const
const_iterator find (Property *property) const
const std::vector< CompositeProperty * > & getCompositeProperties () const
InvalidationLevel getInvalidationLevel () const
const std::vector< Property * > & getProperties () const
template<class T>
std::vector< T * > getPropertiesByType (bool recursiveSearch=false) const
std::vector< Property * > getPropertiesRecursive () const
std::vector< Property * > & getPropertiesRecursive (std::vector< Property * > &destination) const
template<std::derived_from< Property > T = Property>
T * getProperty (std::string_view identifier)
PropertygetPropertyByIdentifier (std::string_view identifier, bool recursiveSearch=false) const
PropertygetPropertyByPath (std::string_view path) const
void insertProperty (size_t index, Property &property)
 insert property property at position index If index is not valid, the property is appended.
virtual void insertProperty (size_t index, Property *property, bool owner=true)
 insert property property at position index If index is not valid, the property is appended.
PropertyinsertProperty (size_t index, std::unique_ptr< Property > property)
 insert property property at position index If index is not valid, the property is appended.
virtual bool isValid () const
virtual bool move (Property *property, size_t newIndex)
PropertyOwner & operator= (const PropertyOwner &that)=delete
Propertyoperator[] (size_t)
const Propertyoperator[] (size_t) const
virtual PropertyremoveProperty (iterator it)
PropertyremoveProperty (Property &property)
PropertyremoveProperty (Property *property)
PropertyremoveProperty (size_t index)
 remove property referred to by index
PropertyremoveProperty (std::string_view identifier)
virtual void resetAllProperties ()
virtual void setAllPropertiesCurrentStateAsDefault ()
size_t size () const
virtual ~PropertyOwner ()
 Removes all properties and notifies its observers of the removal.
Public Member Functions inherited from inviwo::PropertyOwnerObservable
void notifyObserversDidAddProperty (Property *property, size_t index)
void notifyObserversDidRemoveProperty (PropertyOwner *owner, Property *property, size_t index)
void notifyObserversWillAddProperty (PropertyOwner *owner, Property *property, size_t index)
void notifyObserversWillRemoveProperty (Property *property, size_t index)
Public Member Functions inherited from inviwo::Observable< PropertyOwnerObserver >
void addObserver (PropertyOwnerObserver *observer)
bool isObservedBy (PropertyOwnerObserver *observer) const
Observable< PropertyOwnerObserver > & operator= (const Observable< PropertyOwnerObserver > &other)
void removeObserver (PropertyOwnerObserver *observer)
virtual void startBlockingNotifications () override final
virtual void stopBlockingNotifications () override final
Public Member Functions inherited from inviwo::MetaDataOwner
void copyMetaDataFrom (const MetaDataOwner &src)
void copyMetaDataTo (MetaDataOwner &dst)
template<typename T>
requires std::derived_from<T, MetaData>
T * createMetaData (std::string_view key)
void deserialize (Deserializer &d)
template<typename T>
requires std::derived_from<T, MetaData>
T * getMetaData (std::string_view key)
template<typename T>
requires std::derived_from<T, MetaData>
const T * getMetaData (std::string_view key) const
template<typename T, typename U>
requires std::derived_from<T, MetaData> && Gettable<T, U>
getMetaData (std::string_view key, U val) const
MetaDataMapgetMetaDataMap ()
const MetaDataMapgetMetaDataMap () const
template<typename T>
requires std::derived_from<T, MetaData>
bool hasMetaData (std::string_view key) const
bool hasMetaData (std::string_view key) const
 MetaDataOwner (const MetaDataOwner &rhs)=default
 MetaDataOwner (MetaDataOwner &rhs)=default
MetaDataOwner & operator= (const MetaDataOwner &rhs)=default
MetaDataOwner & operator= (MetaDataOwner &)=default
void serialize (Serializer &s) const
template<typename T, typename U>
requires std::derived_from<T, MetaData> && Settable<T, U>
void setMetaData (std::string_view key, U value)
template<typename T>
requires std::derived_from<T, MetaData>
bool unsetMetaData (std::string_view key)
 unset, i.e. remove the metadata entry matching the given key and type
Public Member Functions inherited from inviwo::Observable< ProcessorObserver >
void addObserver (ProcessorObserver *observer)
bool isObservedBy (ProcessorObserver *observer) const
Observable< ProcessorObserver > & operator= (const Observable< ProcessorObserver > &other)
void removeObserver (ProcessorObserver *observer)
virtual void startBlockingNotifications () override final
virtual void stopBlockingNotifications () override final
Public Member Functions inherited from inviwo::ProcessorNetworkObserver
virtual void onProcessorNetworkChange ()
virtual void onProcessorNetworkDidAddConnection (const PortConnection &)
virtual void onProcessorNetworkDidAddLink (const PropertyLink &)
virtual void onProcessorNetworkDidRemoveConnection (const PortConnection &)
virtual void onProcessorNetworkDidRemoveLink (const PropertyLink &)
virtual void onProcessorNetworkDidRemoveProcessor (Processor *)
virtual void onProcessorNetworkUnlocked ()
virtual void onProcessorNetworkWillAddConnection (const PortConnection &)
virtual void onProcessorNetworkWillAddLink (const PropertyLink &)
virtual void onProcessorNetworkWillAddProcessor (Processor *)
virtual void onProcessorNetworkWillRemoveConnection (const PortConnection &)
virtual void onProcessorNetworkWillRemoveLink (const PropertyLink &)
Public Member Functions inherited from inviwo::Observer
 Observer (const Observer &other)
 Observer (Observer &&other)
Observer & operator= (const Observer &other)
Observer & operator= (Observer &&other)
void removeObservation (ObservableInterface *observable)
void removeObservations ()
virtual ~Observer ()
Public Member Functions inherited from inviwo::PropertyOwnerObserver
virtual void onDidRemoveProperty (PropertyOwner *owner, Property *property, size_t index)
virtual void onWillAddProperty (PropertyOwner *owner, Property *property, size_t index)

Static Public Attributes

static const ProcessorInfo processorInfo_

Additional Inherited Members

Public Types inherited from inviwo::Processor
using NameDispatcher = Dispatcher<void(std::string_view, std::string_view)>
using NameDispatcherHandle = typename NameDispatcher::Handle
Public Types inherited from inviwo::PropertyOwner
using const_iterator = std::vector<Property*>::const_iterator
using iterator = std::vector<Property*>::iterator
Public Attributes inherited from inviwo::ProcessorNetworkObserver
friend ProcessorNetworkObservable
Public Attributes inherited from inviwo::PropertyOwnerObserver
friend PropertyOwnerObservable
Protected Member Functions inherited from inviwo::Processor
void addPortToGroup (Port *port, std::string_view portGroup)
void removePortFromGroups (Port *port)
void setInportsChanged (bool changed)
Protected Member Functions inherited from inviwo::PropertyOwner
void forEachProperty (std::function< void(Property &)> callback, bool recursiveSearch=false) const
PropertyOwner & operator= (PropertyOwner &&that)
 PropertyOwner (const PropertyOwner &rhs)
 PropertyOwner (PropertyOwner &&rhs)
Protected Member Functions inherited from inviwo::Observable< PropertyOwnerObserver >
void forEachObserver (C callback)
Protected Member Functions inherited from inviwo::ObservableInterface
void addObservationHelper (Observer *observer)
virtual void addObserver (Observer *observer)=0
void removeObservationHelper (Observer *observer)
virtual void removeObserver (Observer *observer)=0
Protected Member Functions inherited from inviwo::ProcessorObservable
void notifyObserversAboutPropertyChange (Property *p)
void notifyObserversAboutToProcess (Processor *p)
void notifyObserversActiveConnectionsChange (Processor *p)
void notifyObserversFinishBackgroundWork (Processor *p, size_t jobs=1)
void notifyObserversFinishedProcess (Processor *p)
void notifyObserversInvalidationBegin (Processor *p)
void notifyObserversInvalidationEnd (Processor *p)
void notifyObserversProcessorPortAdded (Processor *p, Port *port)
void notifyObserversProcessorPortRemoved (Processor *p, Port *port)
void notifyObserversProgressChanged (Processor *p, std::optional< double > progress)
void notifyObserversReadyChange (Processor *p)
void notifyObserversSinkChange (Processor *p)
void notifyObserversSourceChange (Processor *p)
void notifyObserversStartBackgroundWork (Processor *p, size_t jobs=1)
Protected Member Functions inherited from inviwo::Observable< ProcessorObserver >
void forEachObserver (C callback)
Protected Member Functions inherited from inviwo::Observer
void addObservation (ObservableInterface *observable)
Static Protected Member Functions inherited from inviwo::Processor
static std::function< ProcessorStatus()> getDefaultIsReadyUpdater (Processor *)
Protected Attributes inherited from inviwo::Processor
StateCoordinator< ProcessorStatusisReady_
StateCoordinator< bool > isSink_
StateCoordinator< bool > isSource_
std::unique_ptr< ProcessorWidgetprocessorWidget_
Protected Attributes inherited from inviwo::PropertyOwner
std::vector< CompositeProperty * > compositeProperties_
std::vector< EventProperty * > eventProperties_
std::vector< std::unique_ptr< Property > > ownedProperties_
std::vector< Property * > properties_
Protected Attributes inherited from inviwo::MetaDataOwner
MetaDataMap metaData_
Protected Attributes inherited from inviwo::ProcessorObservable
friend ProcessorNetworkEvaluator
friend Property
Protected Attributes inherited from inviwo::Observer
std::unordered_set< ObservableInterface * > observables_

Detailed Description

A processor containing a network of processors, i.e. it will act as a sub network within a processor network. A CompositeProcessor can be used to reduce cluttering in the network. Also makes it easy to reuse groups of processors inside of a network, and across network since they can be saved in the processor list. A CompositeProcessor is usually created by selecting a group of processors that are closely related in the network editor and then clicking "create composite" in the context menu. Use InviwoModule::registerCompositeProcessor to register a saved composite in your module.

The network inside of the CompositeProcessors is called the sub network and the network of the CompositeProcessor the super network. The CompositeProcessor will only evaluate its sub network when its process function is called, and otherwise keep it locked.

How it works The CompositeProcessor will observe its sub network and when a processor gets added to the sub network the CompositeProcessor will check if it's a CompositeSource or a CompositeSink. In the case it's a CompositeSource, which acts as data inputs in the sub network, in will get the special "super" inport and add it to it self. If it's a CompositeSink, which acts as data outputs, it will get the "super" outport and add it to it self.

When the CompositeSource gets evaluated in the sub network it will take the data from its super inport and put in its outport, moving the data from the super network to the sub network. At the end of the sub network evaluation the SinkProcessors will be evaluated and take the data on its inport and put on its super outport, moving the data from the sub network into the super network.

Properties in the sub network that are marked with application usage mode, or added by calling addSuperProperty, will be cloned and added to the composite processor with mutual onChange callbacks to keep them in sync, exposing the sub property's state to the super network.

Events are propagated through the sub network using the super inport and outports in the Source and Sink Processors.

Design considerations Many designs for composite processors were considered, including implementing it as a pure GUI feature having all the processors in the same network. The current design of completely encapsulating the sub network was chosen since it minimizes the amount of logic in the GUI. Hence keeping the simple mapping from processor network to GUI. It also completely hides the sub network from the super network making it possible to compose sub network in several layers out of the box.

See also
CompositeSource
CompositeSink

Constructor & Destructor Documentation

◆ CompositeProcessor()

inviwo::CompositeProcessor::CompositeProcessor ( std::string_view identifier,
std::string_view displayName,
InviwoApplication * app,
const std::filesystem::path & filename = "" )

Construct a CompositeProcessor, an optional workspace file can be supplied in which case it is deserialized as the CompositeProcessors sub network. otherwise the network is left empty. getSubNetwork can then be use to add processors etc.

Member Function Documentation

◆ addSuperProperty()

Property * inviwo::CompositeProcessor::addSuperProperty ( Property * subProperty)

Add a corresponding property in the CompositeProcessor for the sub property 'subProperty' in the sub network. Changes in the subProperty will be reflected in the superProperty and vice versa.

◆ deserialize()

virtual void inviwo::CompositeProcessor::deserialize ( Deserializer & d)
overridevirtual

Reimplemented from inviwo::Processor.

◆ getProcessorInfo()

virtual const ProcessorInfo & inviwo::CompositeProcessor::getProcessorInfo ( ) const
overridevirtual

Implements inviwo::Processor.

◆ getSubNetwork()

ProcessorNetwork & inviwo::CompositeProcessor::getSubNetwork ( )

Get access to the sub network to add or remove processors etc

◆ getSubProperty()

Property * inviwo::CompositeProcessor::getSubProperty ( Property * superProperty)

Get the sub property for super property 'superProperty'.

◆ getSuperProperty()

Property * inviwo::CompositeProcessor::getSuperProperty ( Property * subProperty)

Get the super property for sub property 'subProperty' given there is one, nullptr otherwise.

◆ process()

virtual void inviwo::CompositeProcessor::process ( )
overridevirtual

Evaluates the sub network

Reimplemented from inviwo::Processor.

◆ propagateEvent()

virtual void inviwo::CompositeProcessor::propagateEvent ( Event * event,
Outport * source )
overridevirtual

Propagates events through the sub network using the sink and source processors

Reimplemented from inviwo::Processor.

◆ removeSuperProperty()

void inviwo::CompositeProcessor::removeSuperProperty ( Property * subProperty)

Remove the super property for sub property 'subProperty'.

◆ saveSubNetwork()

void inviwo::CompositeProcessor::saveSubNetwork ( const std::filesystem::path & file)

Save the current network into the composites folder of the user settings dir. The current display name will be used as filename. Saved networks will automatically appear as Processors in the processor list, with the same display name.

◆ serialize()

virtual void inviwo::CompositeProcessor::serialize ( Serializer & s) const
overridevirtual

Reimplemented from inviwo::Processor.


The documentation for this class was generated from the following file:
  • include/inviwo/core/processors/compositeprocessor.h