mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-13 19:29:58 +01:00
@@ -749,6 +749,37 @@ bool Control::receiveSourceAttribute(Source *target, const std::string &attribut
|
|||||||
arguments >> t >> osc::EndMessage;
|
arguments >> t >> osc::EndMessage;
|
||||||
target->call( new SetGeometry( &transform, t), true );
|
target->call( new SetGeometry( &transform, t), true );
|
||||||
}
|
}
|
||||||
|
/// e.g. '/vimix/current/corner ffffffff 0 0 0 0 0 0 0 0'
|
||||||
|
else if (attribute.compare(OSC_SOURCE_CORNER) == 0) {
|
||||||
|
// read 8 float values
|
||||||
|
float corners[8] = {0.f};
|
||||||
|
for (size_t i = 0; i < 8; ++i) {
|
||||||
|
try {
|
||||||
|
float val = 0.f;
|
||||||
|
arguments >> val;
|
||||||
|
corners[i] = val;
|
||||||
|
} catch (osc::WrongArgumentTypeException &) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// convert to data_ matrix format
|
||||||
|
Group transform;
|
||||||
|
transform.copyTransform(target->group(View::GEOMETRY));
|
||||||
|
transform.data_[0].x = corners[0];
|
||||||
|
transform.data_[0].y = corners[1];
|
||||||
|
transform.data_[1].x = corners[2];
|
||||||
|
transform.data_[1].y = corners[3];
|
||||||
|
transform.data_[2].x = corners[4];
|
||||||
|
transform.data_[2].y = corners[5];
|
||||||
|
transform.data_[3].x = corners[6];
|
||||||
|
transform.data_[3].y = corners[7];
|
||||||
|
// duration argument
|
||||||
|
float t = 0.f;
|
||||||
|
if (arguments.Eos())
|
||||||
|
arguments >> osc::EndMessage;
|
||||||
|
else
|
||||||
|
arguments >> t >> osc::EndMessage;
|
||||||
|
target->call( new SetGeometry( &transform, t), true );
|
||||||
|
}
|
||||||
/// e.g. '/vimix/current/resize ff 10.0 2.2'
|
/// e.g. '/vimix/current/resize ff 10.0 2.2'
|
||||||
else if ( attribute.compare(OSC_SOURCE_RESIZE) == 0) {
|
else if ( attribute.compare(OSC_SOURCE_RESIZE) == 0) {
|
||||||
float x = 0.f, y = 0.f, t = 0.f;
|
float x = 0.f, y = 0.f, t = 0.f;
|
||||||
|
|||||||
@@ -52,6 +52,7 @@
|
|||||||
#define OSC_SOURCE_TURN "/turn"
|
#define OSC_SOURCE_TURN "/turn"
|
||||||
#define OSC_SOURCE_RESET "/reset"
|
#define OSC_SOURCE_RESET "/reset"
|
||||||
#define OSC_SOURCE_POSITION "/position"
|
#define OSC_SOURCE_POSITION "/position"
|
||||||
|
#define OSC_SOURCE_CORNER "/corner"
|
||||||
#define OSC_SOURCE_SIZE "/size"
|
#define OSC_SOURCE_SIZE "/size"
|
||||||
#define OSC_SOURCE_ANGLE "/angle"
|
#define OSC_SOURCE_ANGLE "/angle"
|
||||||
#define OSC_SOURCE_SEEK "/seek"
|
#define OSC_SOURCE_SEEK "/seek"
|
||||||
|
|||||||
@@ -762,6 +762,10 @@ void SetGeometry::update(Source *s, float dt)
|
|||||||
intermediate.translation_ = glm::mix(start_.translation_, target_.translation_, progress/duration_);
|
intermediate.translation_ = glm::mix(start_.translation_, target_.translation_, progress/duration_);
|
||||||
intermediate.scale_ = glm::mix(start_.scale_, target_.scale_, progress/duration_);
|
intermediate.scale_ = glm::mix(start_.scale_, target_.scale_, progress/duration_);
|
||||||
intermediate.rotation_ = glm::mix(start_.rotation_, target_.rotation_, progress/duration_);
|
intermediate.rotation_ = glm::mix(start_.rotation_, target_.rotation_, progress/duration_);
|
||||||
|
intermediate.data_[0] = glm::mix(start_.data_[0], target_.data_[0], progress/duration_);
|
||||||
|
intermediate.data_[1] = glm::mix(start_.data_[1], target_.data_[1], progress/duration_);
|
||||||
|
intermediate.data_[2] = glm::mix(start_.data_[2], target_.data_[2], progress/duration_);
|
||||||
|
intermediate.data_[3] = glm::mix(start_.data_[3], target_.data_[3], progress/duration_);
|
||||||
// apply geometry
|
// apply geometry
|
||||||
s->group(View::GEOMETRY)->copyTransform(&intermediate);
|
s->group(View::GEOMETRY)->copyTransform(&intermediate);
|
||||||
s->touch();
|
s->touch();
|
||||||
|
|||||||
Reference in New Issue
Block a user