added base 'block' node

This commit is contained in:
itsmattkc
2019-07-27 02:50:22 -07:00
parent 316d12b61d
commit badcade0b6
4 changed files with 75 additions and 2 deletions
+44
View File
@@ -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));
}
+9 -2
View File
@@ -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
+5
View File
@@ -82,3 +82,8 @@ int Node::IndexOfParameter(NodeParam *param)
{
return children().indexOf(param);
}
QVariant Node::PtrToValue(void *ptr)
{
return reinterpret_cast<quintptr>(ptr);
}
+17
View File
@@ -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