60 lines
1.6 KiB
C++
60 lines
1.6 KiB
C++
#ifndef U_VTKOBJECTSCONTEXT_H
|
|
#define U_VTKOBJECTSCONTEXT_H
|
|
|
|
#include <map>
|
|
#include "Core/ObjectsContext.h"
|
|
#include "uLibVtkInterface.h"
|
|
|
|
class vtkAssembly;
|
|
|
|
namespace uLib {
|
|
namespace Vtk {
|
|
|
|
/**
|
|
* @brief vtkObjectsContext manages VTK representations (Puppets) for a collection of uLib::Objects.
|
|
*/
|
|
class vtkObjectsContext : public Puppet {
|
|
public:
|
|
uLibTypeMacro(vtkObjectsContext, Puppet)
|
|
vtkObjectsContext(uLib::ObjectsContext *context);
|
|
virtual ~vtkObjectsContext();
|
|
|
|
/** @brief Synchronizes the VTK puppets with the core ObjectsContext. */
|
|
void Synchronize();
|
|
|
|
/** @brief Returns the puppet associated with a specific core object. */
|
|
Puppet* GetPuppet(uLib::Object* obj);
|
|
|
|
const std::map<uLib::Object*, Puppet*>& GetPuppets() const { return m_Puppets; }
|
|
|
|
/** @brief Updates all managed puppets. */
|
|
virtual void Update() override;
|
|
|
|
/** @brief Synchronizes all managed puppets back to their models. */
|
|
virtual void SyncFromVtk() override;
|
|
|
|
public:
|
|
virtual void PuppetAdded(Puppet* puppet);
|
|
virtual void PuppetRemoved(Puppet* puppet);
|
|
|
|
public:
|
|
/** @brief Slot called when an object is added to the core context. */
|
|
void OnObjectAdded(uLib::Object* obj);
|
|
/** @brief Slot called when an object is removed from the core context. */
|
|
void OnObjectRemoved(uLib::Object* obj);
|
|
|
|
protected:
|
|
/** @brief Factory method to create a puppet for a core object. */
|
|
Puppet* CreatePuppet(uLib::Object* obj);
|
|
|
|
private:
|
|
uLib::ObjectsContext *m_Context;
|
|
std::map<uLib::Object*, Puppet*> m_Puppets;
|
|
vtkAssembly *m_Assembly;
|
|
};
|
|
|
|
} // namespace Vtk
|
|
} // namespace uLib
|
|
|
|
#endif // U_VTKOBJECTSCONTEXT_H
|