9 #include "imstkLogger.h" 10 #include "imstkMacros.h" 14 #include <unordered_map> 22 template<
class Base,
class Target>
23 std::function<bool(Base*)>
27 return (dynamic_cast<Target*>(p) !=
nullptr);
50 std::shared_ptr<Geometry>
getInput(
size_t port = 0)
const 52 return (m_inputs.count(port) == 0) ?
nullptr : m_inputs.at(port);
58 std::shared_ptr<Geometry>
getOutput(
size_t port = 0)
const 60 return m_outputs.count(port) == 0 ? nullptr : m_outputs.at(port);
66 void setInput(std::shared_ptr<Geometry> inputGeometry,
size_t port = 0);
75 LOG(WARNING) <<
"GeometryAlgorithm failed to run, inputs not satisfied";
89 void setOutput(std::shared_ptr<Geometry> inputGeometry,
const size_t port = 0);
95 imstkGetMacro(NumInputPorts,
size_t);
102 imstkGetMacro(NumOutputPorts,
size_t);
112 CHECK(m_optionalTypeChecks.find(port) == m_optionalTypeChecks.end())
113 <<
"There is already an optional type for this port " << port <<
", can't assign another one.";
114 m_requiredTypeChecks[port] = makeTypeCheck<Geometry, T>();
124 CHECK(m_requiredTypeChecks.find(port) == m_requiredTypeChecks.end())
125 <<
"There is already a required type for port " << port <<
" , can't assign another one.";
126 m_optionalTypeChecks[port] = makeTypeCheck<Geometry, T>();
140 using GeometryCheck = std::function<bool (Geometry*)>;
141 using TypeCheckContainer = std::unordered_map<size_t, GeometryCheck>;
143 TypeCheckContainer m_requiredTypeChecks;
144 TypeCheckContainer m_optionalTypeChecks;
148 std::unordered_map<size_t, std::shared_ptr<Geometry>> m_inputs;
149 std::unordered_map<size_t, std::shared_ptr<Geometry>> m_outputs;
152 size_t m_NumInputPorts = 1;
153 size_t m_NumOutputPorts = 1;
virtual void requestUpdate()=0
Users can implement this for the logic to be run.
std::shared_ptr< Geometry > getInput(size_t port=0) const
Returns input geometry given port, returns nullptr if doesn't exist.
void setNumOutputPorts(const size_t numPorts)
Get/Set the amount of output ports.
std::shared_ptr< Geometry > getOutput(size_t port=0) const
Returns output geometry given port, returns nullptr if doesn't exist.
void update()
Do the actual algorithm.
void setInput(std::shared_ptr< Geometry > inputGeometry, size_t port=0)
Set the input at the port.
std::function< bool(Base *)> makeTypeCheck()
void setOptionalInputType(const size_t port)
Declares the type for the port with the given number, the data for this port is optional and may be o...
Abstract base class for geometry algorithms. GeometryAlgorithms take N input geometries and produce N...
virtual bool areInputsValid()
Check inputs are correct.
void setOutput(std::shared_ptr< Geometry > inputGeometry, const size_t port=0)
Set the output at the port.
void setRequiredInputType(const size_t port)
Declares the type for the port with the given number, also defines that the give port is required for...
void setNumInputPorts(const size_t numPorts)
Get/Set the amount of input ports.