#ifndef __CPPLUGINS__INTERFACE__WORKSPACE__H__ #define __CPPLUGINS__INTERFACE__WORKSPACE__H__ #include #include #include #include #include #include // Some forward declarations class QWidget; class vtkRenderWindowInteractor; namespace cpPlugins { namespace Interface { /** \brief A complex pipeline */ class cpPlugins_Interface_EXPORT Workspace { public: typedef cpPlugins::Interface::Interface TPlugins; typedef cpPlugins::Interface::Object TObject; typedef cpPlugins::Interface::ProcessObject TFilter; typedef cpPlugins::Interface::DataObject TData; typedef TFilter::TParameters TParameters; // Various types typedef std::set< std::string > TStringContainer; typedef std::pair< std::string, std::string > TExposedPort; typedef std::map< std::string, TExposedPort > TExposedPorts; typedef std::set< vtkRenderWindowInteractor* > TInteractors; // Graph type typedef std::pair< std::string, std::string > TConnection; typedef cpExtensions::DataStructures:: Graph< TObject::Pointer, TConnection, std::string > TGraph; public: Workspace( ); virtual ~Workspace( ); // Plugins management TPlugins* GetPlugins( ); const TPlugins* GetPlugins( ) const; void SetPlugins( TPlugins* i ); // Workspace IO std::string LoadWorkspace( const std::string& fname ); std::string SaveWorkspace( const std::string& fname ) const; // Graph management TGraph* GetGraph( ); const TGraph* GetGraph( ) const; void Clear( ); void ClearConnections( ); // Filter management TFilter* GetFilter( const std::string& name ); const TFilter* GetFilter( const std::string& name ) const; bool HasFilter( const std::string& name ) const; bool CreateFilter( const std::string& filter, const std::string& name ); bool RenameFilter( const std::string& old_name, const std::string& new_name ); void RemoveFilter( const std::string& name ); // Widgets management virtual const TInteractors& GetInteractors( ) const; virtual void AddInteractor( vtkRenderWindowInteractor* interactor ); // Connection management bool Connect( const std::string& orig_filter, const std::string& dest_filter, const std::string& output_name, const std::string& input_name ); bool Connect( TData* input_object, const std::string& exposed_port ); void RemoveConnection( const std::string& dest_filter, const std::string& input_name ); void RemoveConnection( const std::string& exposed_port ); void RemoveConnections( const std::string& dest_filter ); // Graph reduction bool Reduce( const std::string& name ); void ExposeInputPort( const std::string& name, const std::string& filter, const std::string& filter_input ); void ExposeOutputPort( const std::string& name, const std::string& filter, const std::string& filter_output ); void HideInputPort( const std::string& name ); void HideOutputPort( const std::string& name ); bool RenameExposedInputPort( const std::string& old_name, const std::string& new_name ); bool RenameExposedOutputPort( const std::string& old_name, const std::string& new_name ); const TExposedPorts& GetExposedInputPorts( ) const; const TExposedPorts& GetExposedOutputPorts( ) const; TData* GetExposedInput( const std::string& name ); const TData* GetExposedInput( const std::string& name ) const; TData* GetExposedOutput( const std::string& name ); const TData* GetExposedOutput( const std::string& name ) const; // Pipeline execution std::string Execute( ); std::string Execute( const std::string& name ); protected: // Plugins interface TPlugins* m_Plugins; // Processing graph typename TGraph::Pointer m_Graph; TExposedPorts m_ExposedInputPorts; TExposedPorts m_ExposedOutputPorts; TInteractors m_Interactors; }; } // ecapseman } // ecapseman #endif // __CPPLUGINS__INTERFACE__WORKSPACE__H__ // eof - $RCSfile$