added base 'block' node
This commit is contained in:
@@ -22,7 +22,17 @@
|
||||
|
||||
Block::Block()
|
||||
{
|
||||
previous_input_ = new NodeInput();
|
||||
AddParameter(previous_input_);
|
||||
|
||||
previous_output_ = new NodeOutput();
|
||||
AddParameter(previous_output_);
|
||||
|
||||
next_input_ = new NodeInput();
|
||||
AddParameter(next_input_);
|
||||
|
||||
next_output_ = new NodeOutput();
|
||||
AddParameter(next_output_);
|
||||
}
|
||||
|
||||
QString Block::Category()
|
||||
@@ -30,7 +40,41 @@ QString Block::Category()
|
||||
return tr("Block");
|
||||
}
|
||||
|
||||
rational Block::in()
|
||||
{
|
||||
rational in_point = 0;
|
||||
|
||||
Block* block = previous();
|
||||
|
||||
while (block != nullptr) {
|
||||
in_point += block->length();
|
||||
|
||||
block = previous();
|
||||
}
|
||||
|
||||
return in_point;
|
||||
}
|
||||
|
||||
rational Block::out()
|
||||
{
|
||||
return in() + length();
|
||||
}
|
||||
|
||||
Block *Block::previous()
|
||||
{
|
||||
return ValueToPtr<Block>(previous_input_->get_value(0));
|
||||
}
|
||||
|
||||
Block *Block::next()
|
||||
{
|
||||
return ValueToPtr<Block>(next_input_->get_value(0));
|
||||
}
|
||||
|
||||
void Block::Process(const rational &time)
|
||||
{
|
||||
Q_UNUSED(time)
|
||||
|
||||
// Simply set both output values as a pointer to this object
|
||||
previous_output_->set_value(PtrToValue(this));
|
||||
next_output_->set_value(PtrToValue(this));
|
||||
}
|
||||
|
||||
@@ -36,10 +36,17 @@ public:
|
||||
|
||||
virtual rational length() = 0;
|
||||
|
||||
virtual Block* previous();
|
||||
virtual Block* next();
|
||||
|
||||
public slots:
|
||||
// virtual void Process(const rational &time) override;
|
||||
|
||||
virtual void Process(const rational &time) override;
|
||||
|
||||
private:
|
||||
NodeInput* previous_input_;
|
||||
NodeInput* next_input_;
|
||||
NodeOutput* previous_output_;
|
||||
NodeOutput* next_output_;
|
||||
};
|
||||
|
||||
#endif // BLOCK_H
|
||||
|
||||
@@ -82,3 +82,8 @@ int Node::IndexOfParameter(NodeParam *param)
|
||||
{
|
||||
return children().indexOf(param);
|
||||
}
|
||||
|
||||
QVariant Node::PtrToValue(void *ptr)
|
||||
{
|
||||
return reinterpret_cast<quintptr>(ptr);
|
||||
}
|
||||
|
||||
@@ -123,6 +123,17 @@ public:
|
||||
*/
|
||||
int IndexOfParameter(NodeParam* param);
|
||||
|
||||
/**
|
||||
* @brief Convert a pointer to a value that can be sent between NodeParams
|
||||
*/
|
||||
static QVariant PtrToValue(void* ptr);
|
||||
|
||||
template<class T>
|
||||
/**
|
||||
* @brief Convert a NodeParam value to a pointer of any kind
|
||||
*/
|
||||
static T* ValueToPtr(const QVariant& ptr);
|
||||
|
||||
public slots:
|
||||
/**
|
||||
* @brief The main processing function
|
||||
@@ -159,4 +170,10 @@ signals:
|
||||
void EdgeRemoved(NodeEdgePtr edge);
|
||||
};
|
||||
|
||||
template<class T>
|
||||
T* Node::ValueToPtr(const QVariant &ptr)
|
||||
{
|
||||
return reinterpret_cast<T*>(ptr.value<quintptr>());
|
||||
}
|
||||
|
||||
#endif // NODE_H
|
||||
|
||||
Reference in New Issue
Block a user