mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-09 01:09:59 +01:00
Compare commits
80 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ef7722bb5c | ||
|
|
8019f4ea25 | ||
|
|
a612395ca3 | ||
|
|
4718bf166f | ||
|
|
f51bc1f1f4 | ||
|
|
64071a4a55 | ||
|
|
678bdf066e | ||
|
|
cb5562eca2 | ||
|
|
23386fccc2 | ||
|
|
4b1d6a8ac0 | ||
|
|
146408607a | ||
|
|
ffee2f067a | ||
|
|
935762506d | ||
|
|
885ce67174 | ||
|
|
e37b21760e | ||
|
|
25c2bb59f5 | ||
|
|
a1e4709910 | ||
|
|
0593e46e62 | ||
|
|
dca3033c06 | ||
|
|
d45554e162 | ||
|
|
8c4d3f3a18 | ||
|
|
6bb5c0d208 | ||
|
|
209caadd44 | ||
|
|
89fa11447a | ||
|
|
84416f566b | ||
|
|
65564065d9 | ||
|
|
79540c0232 | ||
|
|
5d23a285b4 | ||
|
|
1964a26fc3 | ||
|
|
e37a189bae | ||
|
|
5328995a79 | ||
|
|
6929eb3307 | ||
|
|
33f00f9da4 | ||
|
|
34380e8592 | ||
|
|
8185c93457 | ||
|
|
93b6bc9ca4 | ||
|
|
d76dfa4a9d | ||
|
|
d23267d333 | ||
|
|
e8a258094f | ||
|
|
ffb30bc292 | ||
|
|
fa798c8809 | ||
|
|
ac15bbc840 | ||
|
|
e26052013c | ||
|
|
9215be6bfc | ||
|
|
691c6d174b | ||
|
|
4bc9bf581e | ||
|
|
3686106dab | ||
|
|
62bc779dee | ||
|
|
843fa86c00 | ||
|
|
9bfc5b269a | ||
|
|
a7b6a67a92 | ||
|
|
9b795a0df7 | ||
|
|
29c40036b2 | ||
|
|
49e845137a | ||
|
|
394bfe2da4 | ||
|
|
6607bd319c | ||
|
|
54c5eb6155 | ||
|
|
49ec387cfa | ||
|
|
0ef6164b24 | ||
|
|
87a25ca19f | ||
|
|
e564b63f77 | ||
|
|
0e6ad3e25c | ||
|
|
c3442a1090 | ||
|
|
83e5c37b60 | ||
|
|
2dda3da8b1 | ||
|
|
7e6ee0806d | ||
|
|
9c0adb4ce6 | ||
|
|
b17136d23a | ||
|
|
edeec9568e | ||
|
|
e5ed27180f | ||
|
|
207ac11ded | ||
|
|
2bc8420c24 | ||
|
|
f4048fca04 | ||
|
|
9942d8e628 | ||
|
|
2fe282ef6a | ||
|
|
12dcd34b3d | ||
|
|
0cf4732347 | ||
|
|
4e6a402142 | ||
|
|
9449936df0 | ||
|
|
7c555465b8 |
@@ -6,7 +6,7 @@
|
||||
#include "Primitives.h"
|
||||
#include "Decorations.h"
|
||||
|
||||
BoundingBoxVisitor::BoundingBoxVisitor(): Visitor()
|
||||
BoundingBoxVisitor::BoundingBoxVisitor(bool force): force_(force)
|
||||
{
|
||||
modelview_ = glm::identity<glm::mat4>();
|
||||
|
||||
@@ -35,7 +35,7 @@ void BoundingBoxVisitor::visit(Group &n)
|
||||
return;
|
||||
glm::mat4 mv = modelview_;
|
||||
for (NodeSet::iterator node = n.begin(); node != n.end(); node++) {
|
||||
if ( (*node)->visible_ )
|
||||
if ( (*node)->visible_ || force_)
|
||||
(*node)->accept(*this);
|
||||
modelview_ = mv;
|
||||
}
|
||||
@@ -46,14 +46,13 @@ void BoundingBoxVisitor::visit(Switch &n)
|
||||
if (!n.visible_ || n.numChildren() < 1)
|
||||
return;
|
||||
glm::mat4 mv = modelview_;
|
||||
n.activeChild()->accept(*this);
|
||||
if ( n.activeChild()->visible_ || force_)
|
||||
n.activeChild()->accept(*this);
|
||||
modelview_ = mv;
|
||||
}
|
||||
|
||||
void BoundingBoxVisitor::visit(Primitive &n)
|
||||
{
|
||||
if (!n.visible_)
|
||||
return;
|
||||
|
||||
bbox_.extend(n.bbox().transformed(modelview_));
|
||||
|
||||
@@ -64,3 +63,4 @@ void BoundingBoxVisitor::visit(Scene &n)
|
||||
{
|
||||
n.ws()->accept(*this);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
class BoundingBoxVisitor: public Visitor
|
||||
{
|
||||
glm::mat4 modelview_;
|
||||
bool force_;
|
||||
GlmToolkit::AxisAlignedBoundingBox bbox_;
|
||||
|
||||
public:
|
||||
|
||||
BoundingBoxVisitor();
|
||||
BoundingBoxVisitor(bool force = false);
|
||||
|
||||
void setModelview(glm::mat4 modelview);
|
||||
GlmToolkit::AxisAlignedBoundingBox bbox();
|
||||
@@ -23,6 +23,7 @@ public:
|
||||
void visit(Group& n) override;
|
||||
void visit(Switch& n) override;
|
||||
void visit(Primitive& n) override;
|
||||
|
||||
};
|
||||
|
||||
#endif // BOUNDINGBOXVISITOR_H
|
||||
|
||||
@@ -303,6 +303,7 @@ set(VMIX_RSC_FILES
|
||||
./rsc/shaders/mask_draw.fs
|
||||
./rsc/shaders/image.vs
|
||||
./rsc/shaders/imageprocessing.fs
|
||||
./rsc/shaders/imageblending.fs
|
||||
./rsc/fonts/Hack-Regular.ttf
|
||||
./rsc/fonts/Roboto-Regular.ttf
|
||||
./rsc/fonts/Roboto-Bold.ttf
|
||||
@@ -335,9 +336,14 @@ set(VMIX_RSC_FILES
|
||||
./rsc/mesh/corner.ply
|
||||
./rsc/mesh/shadow.ply
|
||||
./rsc/mesh/glow.ply
|
||||
./rsc/mesh/border_round_left.ply
|
||||
./rsc/mesh/border_round.ply
|
||||
./rsc/mesh/border_top.ply
|
||||
./rsc/mesh/border_perspective_round_left.ply
|
||||
./rsc/mesh/border_perspective_round.ply
|
||||
./rsc/mesh/border_perspective_top.ply
|
||||
./rsc/mesh/border_sharp.ply
|
||||
./rsc/mesh/border_large_round_left.ply
|
||||
./rsc/mesh/border_large_round.ply
|
||||
./rsc/mesh/border_large_top.ply
|
||||
./rsc/mesh/border_handles_rotation.ply
|
||||
@@ -347,6 +353,8 @@ set(VMIX_RSC_FILES
|
||||
./rsc/mesh/border_handles_sharp.ply
|
||||
./rsc/mesh/border_handles_menu.ply
|
||||
./rsc/mesh/border_handles_crop.ply
|
||||
./rsc/mesh/border_handles_lock.ply
|
||||
./rsc/mesh/border_handles_lock_open.ply
|
||||
./rsc/mesh/border_handles_shadow.ply
|
||||
./rsc/mesh/border_large_sharp.ply
|
||||
./rsc/mesh/border_vertical_overlay.ply
|
||||
@@ -364,6 +372,7 @@ set(VMIX_RSC_FILES
|
||||
./rsc/mesh/icon_share.ply
|
||||
./rsc/mesh/icon_clone.ply
|
||||
./rsc/mesh/icon_vimix.ply
|
||||
./rsc/mesh/icon_group_vimix.ply
|
||||
./rsc/mesh/icon_circles.ply
|
||||
./rsc/mesh/icon_dots.ply
|
||||
./rsc/mesh/icon_empty.ply
|
||||
@@ -377,6 +386,10 @@ set(VMIX_RSC_FILES
|
||||
./rsc/mesh/icon_grid.ply
|
||||
./rsc/mesh/icon_rightarrow.ply
|
||||
./rsc/mesh/icon_crop.ply
|
||||
./rsc/mesh/icon_eye.ply
|
||||
./rsc/mesh/icon_eye_slash.ply
|
||||
./rsc/mesh/icon_vector_square_slash.ply
|
||||
./rsc/mesh/icon_cube.ply
|
||||
./rsc/mesh/h_line.ply
|
||||
./rsc/mesh/h_mark.ply
|
||||
)
|
||||
@@ -471,7 +484,7 @@ SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md")
|
||||
SET(CPACK_PACKAGE_CONTACT "bruno.herbelin@gmail.com")
|
||||
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING.txt")
|
||||
SET(CPACK_PACKAGE_VERSION_MAJOR "0")
|
||||
SET(CPACK_PACKAGE_VERSION_MINOR "4")
|
||||
SET(CPACK_PACKAGE_VERSION_MINOR "5")
|
||||
SET(CPACK_PACKAGE_VENDOR "Bruno Herbelin")
|
||||
SET(CPACK_SOURCE_IGNORE_FILES
|
||||
"/\\\\.git/"
|
||||
|
||||
169
Decorations.cpp
169
Decorations.cpp
@@ -12,7 +12,8 @@
|
||||
#include "Log.h"
|
||||
|
||||
|
||||
Frame::Frame(CornerType corner, BorderType border, ShadowType shadow) : Node(), side_(nullptr), top_(nullptr), shadow_(nullptr), square_(nullptr)
|
||||
Frame::Frame(CornerType corner, BorderType border, ShadowType shadow) : Node(),
|
||||
right_(nullptr), left_(nullptr), top_(nullptr), shadow_(nullptr), square_(nullptr)
|
||||
{
|
||||
static Mesh *shadows[3] = {nullptr};
|
||||
if (shadows[0] == nullptr) {
|
||||
@@ -20,33 +21,54 @@ Frame::Frame(CornerType corner, BorderType border, ShadowType shadow) : Node(),
|
||||
shadows[1] = new Mesh("mesh/shadow.ply", "images/shadow.dds");
|
||||
shadows[2] = new Mesh("mesh/shadow_perspective.ply", "images/shadow_perspective.dds");
|
||||
}
|
||||
static Mesh *frames[4] = {nullptr};
|
||||
static Mesh *frames[9] = {nullptr};
|
||||
if (frames[0] == nullptr) {
|
||||
frames[0] = new Mesh("mesh/border_round.ply");
|
||||
frames[1] = new Mesh("mesh/border_top.ply");
|
||||
frames[2] = new Mesh("mesh/border_large_round.ply");
|
||||
frames[3] = new Mesh("mesh/border_large_top.ply");
|
||||
frames[1] = new Mesh("mesh/border_round_left.ply");
|
||||
frames[2] = new Mesh("mesh/border_top.ply");
|
||||
frames[3] = new Mesh("mesh/border_large_round.ply");
|
||||
frames[4] = new Mesh("mesh/border_large_round_left.ply");
|
||||
frames[5] = new Mesh("mesh/border_large_top.ply");
|
||||
frames[6] = new Mesh("mesh/border_perspective_round.ply");
|
||||
frames[7] = new Mesh("mesh/border_perspective_round_left.ply");
|
||||
frames[8] = new Mesh("mesh/border_perspective_top.ply");
|
||||
}
|
||||
static LineSquare *sharpframethin = new LineSquare( 3 );
|
||||
static LineSquare *sharpframelarge = new LineSquare( 5 );
|
||||
static LineSquare *sharpframethin = new LineSquare( 4.f );
|
||||
static LineSquare *sharpframelarge = new LineSquare( 6.f );
|
||||
|
||||
if (corner == SHARP) {
|
||||
// Round corners
|
||||
if (corner == ROUND){
|
||||
if (border == THIN) {
|
||||
right_ = frames[0];
|
||||
left_ = frames[1];
|
||||
top_ = frames[2];
|
||||
}
|
||||
else{
|
||||
right_ = frames[3];
|
||||
left_ = frames[4];
|
||||
top_ = frames[5];
|
||||
}
|
||||
}
|
||||
// Group corners
|
||||
else if (corner == GROUP){
|
||||
if (border == THIN) {
|
||||
right_ = frames[6];
|
||||
left_ = frames[7];
|
||||
top_ = frames[8];
|
||||
}
|
||||
else{
|
||||
right_ = frames[6];
|
||||
left_ = frames[7];
|
||||
top_ = frames[8];
|
||||
}
|
||||
}
|
||||
// Sharp corner
|
||||
else {
|
||||
if (border == LARGE)
|
||||
square_ = sharpframelarge;
|
||||
else
|
||||
square_ = sharpframethin;
|
||||
}
|
||||
else {
|
||||
// Round corners
|
||||
if (border == THIN) {
|
||||
side_ = frames[0];
|
||||
top_ = frames[1];
|
||||
}
|
||||
else{
|
||||
side_ = frames[2];
|
||||
top_ = frames[3];
|
||||
}
|
||||
}
|
||||
|
||||
switch (shadow) {
|
||||
default:
|
||||
@@ -76,8 +98,10 @@ void Frame::update( float dt )
|
||||
Node::update(dt);
|
||||
if(top_)
|
||||
top_->update(dt);
|
||||
if(side_)
|
||||
side_->update(dt);
|
||||
if(right_)
|
||||
right_->update(dt);
|
||||
if(left_)
|
||||
left_->update(dt);
|
||||
if(shadow_)
|
||||
shadow_->update(dt);
|
||||
if(square_)
|
||||
@@ -87,9 +111,11 @@ void Frame::update( float dt )
|
||||
void Frame::draw(glm::mat4 modelview, glm::mat4 projection)
|
||||
{
|
||||
if ( !initialized() ) {
|
||||
if(side_ && !side_->initialized())
|
||||
side_->init();
|
||||
if(top_ && !top_->initialized())
|
||||
if(right_ && !right_->initialized())
|
||||
right_->init();
|
||||
if(left_ && !left_->initialized())
|
||||
left_->init();
|
||||
if(top_ && !top_->initialized())
|
||||
top_->init();
|
||||
if(shadow_ && !shadow_->initialized())
|
||||
shadow_->init();
|
||||
@@ -102,27 +128,28 @@ void Frame::draw(glm::mat4 modelview, glm::mat4 projection)
|
||||
|
||||
glm::mat4 ctm = modelview * transform_;
|
||||
|
||||
// sharp border (scaled)
|
||||
if(square_) {
|
||||
square_->setColor(color);
|
||||
square_->draw( ctm, projection);
|
||||
}
|
||||
|
||||
// shadow (scaled)
|
||||
if(shadow_){
|
||||
shadow_->shader()->color.a = 0.98f;
|
||||
shadow_->draw( ctm, projection);
|
||||
}
|
||||
|
||||
// top (scaled)
|
||||
// round top (scaled)
|
||||
if(top_) {
|
||||
top_->shader()->color = color;
|
||||
top_->draw( ctm, projection);
|
||||
}
|
||||
|
||||
// top (scaled)
|
||||
if(square_) {
|
||||
square_->shader()->color = color;
|
||||
square_->draw( ctm, projection);
|
||||
}
|
||||
// round sides
|
||||
if(right_) {
|
||||
|
||||
if(side_) {
|
||||
|
||||
side_->shader()->color = color;
|
||||
right_->shader()->color = color;
|
||||
|
||||
// get scale
|
||||
glm::vec4 scale = ctm * glm::vec4(1.f, 1.0f, 0.f, 0.f);
|
||||
@@ -132,17 +159,26 @@ void Frame::draw(glm::mat4 modelview, glm::mat4 projection)
|
||||
glm::vec4 vec = ctm * glm::vec4(1.f, 0.f, 0.f, 0.f);
|
||||
rot.z = glm::orientedAngle( glm::vec3(1.f, 0.f, 0.f), glm::normalize(glm::vec3(vec)), glm::vec3(0.f, 0.f, 1.f) );
|
||||
|
||||
if(side_) {
|
||||
// right side
|
||||
vec = ctm * glm::vec4(1.f, 0.f, 0.f, 1.f);
|
||||
right_->draw( GlmToolkit::transform(vec, rot, glm::vec3(scale.y, scale.y, 1.f)), projection );
|
||||
|
||||
// left side
|
||||
vec = ctm * glm::vec4(1.f, 0.f, 0.f, 1.f);
|
||||
side_->draw( GlmToolkit::transform(vec, rot, glm::vec3(scale.y, scale.y, 1.f)), projection );
|
||||
}
|
||||
if(left_) {
|
||||
|
||||
// right side
|
||||
vec = ctm * glm::vec4(-1.f, 0.f, 0.f, 1.f);
|
||||
side_->draw( GlmToolkit::transform(vec, rot, glm::vec3(-scale.y, scale.y, 1.f)), projection );
|
||||
left_->shader()->color = color;
|
||||
|
||||
}
|
||||
// get scale
|
||||
glm::vec4 scale = ctm * glm::vec4(1.f, 1.0f, 0.f, 0.f);
|
||||
|
||||
// get rotation
|
||||
glm::vec3 rot(0.f);
|
||||
glm::vec4 vec = ctm * glm::vec4(1.f, 0.f, 0.f, 0.f);
|
||||
rot.z = glm::orientedAngle( glm::vec3(1.f, 0.f, 0.f), glm::normalize(glm::vec3(vec)), glm::vec3(0.f, 0.f, 1.f) );
|
||||
|
||||
// right side
|
||||
vec = ctm * glm::vec4(-1.f, 0.f, 0.f, 1.f);
|
||||
left_->draw( GlmToolkit::transform(vec, rot, glm::vec3(scale.y, scale.y, 1.f)), projection );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -161,6 +197,8 @@ Handles::Handles(Type type) : Node(), type_(type)
|
||||
static Mesh *handle_scale = new Mesh("mesh/border_handles_scale.ply");
|
||||
static Mesh *handle_crop = new Mesh("mesh/border_handles_crop.ply");
|
||||
static Mesh *handle_menu = new Mesh("mesh/border_handles_menu.ply");
|
||||
static Mesh *handle_lock = new Mesh("mesh/border_handles_lock.ply");
|
||||
static Mesh *handle_unlock = new Mesh("mesh/border_handles_lock_open.ply");
|
||||
static Mesh *handle_shadow = new Mesh("mesh/border_handles_shadow.ply", "images/soft_shadow.dds");
|
||||
|
||||
if ( type_ == Handles::ROTATE ) {
|
||||
@@ -175,6 +213,12 @@ Handles::Handles(Type type) : Node(), type_(type)
|
||||
else if ( type_ == Handles::CROP ) {
|
||||
handle_ = handle_crop;
|
||||
}
|
||||
else if ( type_ == Handles::LOCKED ) {
|
||||
handle_ = handle_lock;
|
||||
}
|
||||
else if ( type_ == Handles::UNLOCKED ) {
|
||||
handle_ = handle_unlock;
|
||||
}
|
||||
else {
|
||||
handle_ = handle_corner;
|
||||
}
|
||||
@@ -212,16 +256,13 @@ void Handles::draw(glm::mat4 modelview, glm::mat4 projection)
|
||||
handle_->shader()->color = color;
|
||||
handle_active->shader()->color = color;
|
||||
|
||||
// extract rotation from modelview
|
||||
glm::mat4 ctm;
|
||||
glm::vec3 rot(0.f);
|
||||
glm::vec4 vec = modelview * glm::vec4(1.f, 0.f, 0.f, 0.f);
|
||||
rot.z = glm::orientedAngle( glm::vec3(1.f, 0.f, 0.f), glm::normalize(glm::vec3(vec)), glm::vec3(0.f, 0.f, 1.f) );
|
||||
glm::vec4 vec;
|
||||
glm::vec3 tra, rot, sca;
|
||||
|
||||
// extract scaling and mirroring
|
||||
ctm = glm::rotate(glm::identity<glm::mat4>(), -rot.z, glm::vec3(0.f, 0.f, 1.f)) * modelview ;
|
||||
vec = ctm * glm::vec4(1.f, 1.f, 0.f, 0.f);
|
||||
glm::vec4 mirror = glm::sign(vec);
|
||||
// get rotation and mirroring from the modelview
|
||||
GlmToolkit::inverse_transform(modelview, tra, rot, sca);
|
||||
glm::vec3 mirror = glm::sign(sca);
|
||||
|
||||
if ( type_ == Handles::RESIZE ) {
|
||||
|
||||
@@ -299,7 +340,7 @@ void Handles::draw(glm::mat4 modelview, glm::mat4 projection)
|
||||
glm::vec4 pos = ctm * glm::vec4(mirror.x * 0.12f, mirror.x * -0.12f, 0.f, 1.f);
|
||||
// 2. ..from the bottom right corner (1,1)
|
||||
vec = ( modelview * glm::vec4(1.f, -1.f, 0.f, 1.f) ) + pos;
|
||||
ctm = GlmToolkit::transform(vec, rot, glm::vec3(mirror.x, mirror.y, 1.f));
|
||||
ctm = GlmToolkit::transform(vec, rot, mirror);
|
||||
// 3. draw
|
||||
shadow_->draw( ctm, projection );
|
||||
handle_->draw( ctm, projection );
|
||||
@@ -309,9 +350,9 @@ void Handles::draw(glm::mat4 modelview, glm::mat4 projection)
|
||||
// 1. Fixed displacement by (0.12,0.12) along the rotation..
|
||||
ctm = GlmToolkit::transform(glm::vec4(0.f), rot, mirror);
|
||||
glm::vec4 pos = ctm * glm::vec4(mirror.x * 0.12f, mirror.x * 0.12f, 0.f, 1.f);
|
||||
// 2. ..from the bottom right corner (1,1)
|
||||
// 2. ..from the bottom right corner (1,-1)
|
||||
vec = ( modelview * glm::vec4(-1.f, -1.f, 0.f, 1.f) ) + pos;
|
||||
ctm = GlmToolkit::transform(vec, rot, glm::vec3(mirror.x, mirror.y, 1.f));
|
||||
ctm = GlmToolkit::transform(vec, rot, mirror);
|
||||
// 3. draw
|
||||
shadow_->draw( ctm, projection );
|
||||
handle_->draw( ctm, projection );
|
||||
@@ -323,7 +364,19 @@ void Handles::draw(glm::mat4 modelview, glm::mat4 projection)
|
||||
glm::vec4 pos = ctm * glm::vec4( -0.12f, 0.12f, 0.f, 1.f);
|
||||
// 2. ..from the top right corner (1,1)
|
||||
vec = ( modelview * glm::vec4(-1.f, 1.f, 0.f, 1.f) ) + pos;
|
||||
ctm = GlmToolkit::transform(vec, rot, glm::vec3(1.f));
|
||||
ctm = GlmToolkit::transform(vec, rot, mirror);
|
||||
// 3. draw
|
||||
shadow_->draw( ctm, projection );
|
||||
handle_->draw( ctm, projection );
|
||||
}
|
||||
else if ( type_ == Handles::LOCKED || type_ == Handles::UNLOCKED ){
|
||||
// one icon in top left corner
|
||||
// 1. Fixed displacement by (-0.12,0.12) along the rotation..
|
||||
ctm = GlmToolkit::transform(glm::vec4(0.f), rot, mirror);
|
||||
glm::vec4 pos = ctm * glm::vec4( -0.12f, 0.12f, 0.f, 1.f);
|
||||
// 2. ..from the bottom right corner (1,-1)
|
||||
vec = ( modelview * glm::vec4(1.f, -1.f, 0.f, 1.f) ) + pos;
|
||||
ctm = GlmToolkit::transform(vec, rot, mirror);
|
||||
// 3. draw
|
||||
shadow_->draw( ctm, projection );
|
||||
handle_->draw( ctm, projection );
|
||||
@@ -359,10 +412,14 @@ Symbol::Symbol(Type t, glm::vec3 pos) : Node(), type_(t)
|
||||
shadows[CLONE] = shadow;
|
||||
icons[RENDER] = new Mesh("mesh/icon_render.ply");
|
||||
shadows[RENDER] = shadow;
|
||||
icons[GROUP] = new Mesh("mesh/icon_group_vimix.ply");
|
||||
shadows[GROUP] = shadow;
|
||||
icons[PATTERN] = new Mesh("mesh/icon_gear.ply");
|
||||
shadows[PATTERN]= shadow;
|
||||
icons[CAMERA] = new Mesh("mesh/icon_camera.ply");
|
||||
shadows[CAMERA] = shadow;
|
||||
icons[CUBE] = new Mesh("mesh/icon_cube.ply");
|
||||
shadows[CUBE] = shadow;
|
||||
icons[SHARE] = new Mesh("mesh/icon_share.ply");
|
||||
shadows[SHARE] = shadow;
|
||||
icons[DOTS] = new Mesh("mesh/icon_dots.ply");
|
||||
@@ -373,6 +430,12 @@ Symbol::Symbol(Type t, glm::vec3 pos) : Node(), type_(t)
|
||||
shadows[LOCK] = shadow;
|
||||
icons[UNLOCK] = new Mesh("mesh/icon_unlock.ply");
|
||||
shadows[UNLOCK] = shadow;
|
||||
icons[EYE] = new Mesh("mesh/icon_eye.ply");
|
||||
shadows[EYE] = shadow;
|
||||
icons[EYESLASH] = new Mesh("mesh/icon_eye_slash.ply");
|
||||
shadows[EYESLASH] = shadow;
|
||||
icons[VECTORSLASH] = new Mesh("mesh/icon_vector_square_slash.ply");
|
||||
shadows[VECTORSLASH] = shadow;
|
||||
icons[ARROWS] = new Mesh("mesh/icon_rightarrow.ply");
|
||||
shadows[ARROWS] = shadow;
|
||||
icons[CIRCLE] = new Mesh("mesh/icon_circle.ply");
|
||||
|
||||
@@ -12,7 +12,7 @@ class Frame : public Node
|
||||
{
|
||||
public:
|
||||
|
||||
typedef enum { ROUND = 0, SHARP } CornerType;
|
||||
typedef enum { ROUND = 0, SHARP, GROUP } CornerType;
|
||||
typedef enum { THIN = 0, LARGE } BorderType;
|
||||
typedef enum { NONE = 0, GLOW, DROP, PERSPECTIVE } ShadowType;
|
||||
|
||||
@@ -23,11 +23,11 @@ public:
|
||||
void draw (glm::mat4 modelview, glm::mat4 projection) override;
|
||||
void accept (Visitor& v) override;
|
||||
|
||||
Mesh *border() const { return side_; }
|
||||
glm::vec4 color;
|
||||
|
||||
protected:
|
||||
Mesh *side_;
|
||||
Mesh *right_;
|
||||
Mesh *left_;
|
||||
Mesh *top_;
|
||||
Mesh *shadow_;
|
||||
LineSquare *square_;
|
||||
@@ -36,7 +36,7 @@ protected:
|
||||
class Handles : public Node
|
||||
{
|
||||
public:
|
||||
typedef enum { RESIZE = 0, RESIZE_H, RESIZE_V, ROTATE, SCALE, CROP, MENU } Type;
|
||||
typedef enum { RESIZE = 0, RESIZE_H, RESIZE_V, ROTATE, SCALE, CROP, MENU, LOCKED, UNLOCKED } Type;
|
||||
Handles(Type type);
|
||||
~Handles();
|
||||
|
||||
@@ -60,8 +60,8 @@ protected:
|
||||
class Symbol : public Node
|
||||
{
|
||||
public:
|
||||
typedef enum { CIRCLE_POINT = 0, SQUARE_POINT, IMAGE, VIDEO, SESSION, CLONE, RENDER, PATTERN, CAMERA, SHARE,
|
||||
DOTS, BUSY, LOCK, UNLOCK, ARROWS, CROP, CIRCLE, SQUARE, CLOCK, CLOCK_H, GRID, CROSS, EMPTY } Type;
|
||||
typedef enum { CIRCLE_POINT = 0, SQUARE_POINT, IMAGE, VIDEO, SESSION, CLONE, RENDER, GROUP, PATTERN, CAMERA, CUBE, SHARE,
|
||||
DOTS, BUSY, LOCK, UNLOCK, EYE, EYESLASH, VECTORSLASH, ARROWS, CROP, CIRCLE, SQUARE, CLOCK, CLOCK_H, GRID, CROSS, EMPTY } Type;
|
||||
Symbol(Type t = CIRCLE_POINT, glm::vec3 pos = glm::vec3(0.f));
|
||||
~Symbol();
|
||||
|
||||
|
||||
@@ -331,7 +331,8 @@ DeviceSource::DeviceSource() : StreamSource()
|
||||
stream_ = new Stream;
|
||||
|
||||
// set symbol
|
||||
symbol_ = new Symbol(Symbol::CAMERA, glm::vec3(0.8f, 0.8f, 0.01f));
|
||||
symbol_ = new Symbol(Symbol::CAMERA, glm::vec3(0.75f, 0.75f, 0.01f));
|
||||
symbol_->scale_.y = 1.5f;
|
||||
}
|
||||
|
||||
DeviceSource::~DeviceSource()
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include <algorithm>
|
||||
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
|
||||
@@ -8,14 +9,21 @@
|
||||
|
||||
DrawVisitor::DrawVisitor(Node *nodetodraw, glm::mat4 projection, bool force): force_(force)
|
||||
{
|
||||
target_ = nodetodraw;
|
||||
targets_.push_back(nodetodraw);
|
||||
modelview_ = glm::identity<glm::mat4>();
|
||||
projection_ = projection;
|
||||
done_ = false;
|
||||
num_duplicat_ = 1;
|
||||
transform_duplicat_ = glm::identity<glm::mat4>();
|
||||
}
|
||||
|
||||
DrawVisitor::DrawVisitor(std::vector<Node *> nodestodraw, glm::mat4 projection, bool force): force_(force)
|
||||
{
|
||||
targets_ = nodestodraw;
|
||||
modelview_ = glm::identity<glm::mat4>();
|
||||
projection_ = projection;
|
||||
num_duplicat_ = 1;
|
||||
transform_duplicat_ = glm::identity<glm::mat4>();
|
||||
}
|
||||
|
||||
void DrawVisitor::loop(int num, glm::mat4 transform)
|
||||
{
|
||||
@@ -30,22 +38,25 @@ void DrawVisitor::visit(Node &n)
|
||||
if (force_)
|
||||
n.visible_ = true;
|
||||
|
||||
// draw the target
|
||||
if ( target_ && n.id() == target_->id()) {
|
||||
// find the node with this id
|
||||
std::vector<Node *>::iterator it = std::find_if(targets_.begin(), targets_.end(), hasId(n.id()));
|
||||
|
||||
// found this node in the list of targets: draw it
|
||||
if (it != targets_.end()) {
|
||||
|
||||
targets_.erase(it);
|
||||
|
||||
for (int i = 0; i < num_duplicat_; ++i) {
|
||||
// draw multiple copies if requested
|
||||
n.draw(modelview_, projection_);
|
||||
modelview_ *= transform_duplicat_;
|
||||
}
|
||||
|
||||
done_ = true;
|
||||
}
|
||||
|
||||
// restore visibility
|
||||
n.visible_ = v;
|
||||
|
||||
if (done_) return;
|
||||
if (targets_.empty()) return;
|
||||
|
||||
// update transform
|
||||
modelview_ *= n.transform_;
|
||||
@@ -55,11 +66,11 @@ void DrawVisitor::visit(Node &n)
|
||||
void DrawVisitor::visit(Group &n)
|
||||
{
|
||||
// no need to traverse deeper if this node was drawn already
|
||||
if (done_) return;
|
||||
if (targets_.empty()) return;
|
||||
|
||||
// traverse children
|
||||
glm::mat4 mv = modelview_;
|
||||
for (NodeSet::iterator node = n.begin(); !done_ && node != n.end(); node++) {
|
||||
for (NodeSet::iterator node = n.begin(); !targets_.empty() && node != n.end(); node++) {
|
||||
if ( (*node)->visible_ || force_)
|
||||
(*node)->accept(*this);
|
||||
modelview_ = mv;
|
||||
@@ -68,7 +79,6 @@ void DrawVisitor::visit(Group &n)
|
||||
|
||||
void DrawVisitor::visit(Scene &n)
|
||||
{
|
||||
done_ = false;
|
||||
modelview_ = glm::identity<glm::mat4>();
|
||||
n.root()->accept(*this);
|
||||
}
|
||||
@@ -76,7 +86,7 @@ void DrawVisitor::visit(Scene &n)
|
||||
void DrawVisitor::visit(Switch &n)
|
||||
{
|
||||
// no need to traverse deeper if this node was drawn already
|
||||
if (done_) return;
|
||||
if (targets_.empty()) return;
|
||||
|
||||
// traverse acive child
|
||||
glm::mat4 mv = modelview_;
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
#ifndef DRAWVISITOR_H
|
||||
#define DRAWVISITOR_H
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
#include "GlmToolkit.h"
|
||||
#include "Visitor.h"
|
||||
|
||||
class DrawVisitor : public Visitor
|
||||
{
|
||||
glm::mat4 modelview_;
|
||||
glm::mat4 projection_;
|
||||
Node *target_;
|
||||
bool done_;
|
||||
std::vector<Node *> targets_;
|
||||
bool force_;
|
||||
int num_duplicat_;
|
||||
glm::mat4 transform_duplicat_;
|
||||
|
||||
public:
|
||||
DrawVisitor(Node *nodetodraw, glm::mat4 projection, bool force = false);
|
||||
DrawVisitor(std::vector<Node *> nodestodraw, glm::mat4 projection, bool force = false);
|
||||
|
||||
void loop(int num, glm::mat4 transform);
|
||||
|
||||
|
||||
@@ -56,8 +56,8 @@ FrameBuffer::FrameBuffer(glm::vec3 resolution, bool useAlpha, bool multiSampling
|
||||
use_alpha_(useAlpha), use_multi_sampling_(multiSampling)
|
||||
{
|
||||
attrib_.viewport = glm::ivec2(resolution);
|
||||
attrib_.clear_color = glm::vec4(0.f, 0.f, 0.f, use_alpha_ ? 0.f : 1.f);
|
||||
setProjectionArea(glm::vec2(1.f, 1.f));
|
||||
attrib_.clear_color = glm::vec4(0.f, 0.f, 0.f, 0.f);
|
||||
}
|
||||
|
||||
FrameBuffer::FrameBuffer(uint width, uint height, bool useAlpha, bool multiSampling):
|
||||
@@ -65,8 +65,8 @@ FrameBuffer::FrameBuffer(uint width, uint height, bool useAlpha, bool multiSampl
|
||||
use_alpha_(useAlpha), use_multi_sampling_(multiSampling)
|
||||
{
|
||||
attrib_.viewport = glm::ivec2(width, height);
|
||||
attrib_.clear_color = glm::vec4(0.f, 0.f, 0.f, use_alpha_ ? 0.f : 1.f);
|
||||
setProjectionArea(glm::vec2(1.f, 1.f));
|
||||
attrib_.clear_color = glm::vec4(0.f, 0.f, 0.f, 0.f);
|
||||
}
|
||||
|
||||
void FrameBuffer::init()
|
||||
|
||||
@@ -80,7 +80,7 @@ protected:
|
||||
*/
|
||||
class FrameGrabbing
|
||||
{
|
||||
friend class Session;
|
||||
friend class Mixer;
|
||||
|
||||
// Private Constructor
|
||||
FrameGrabbing();
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include <glm/gtc/matrix_access.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <glm/gtx/vector_angle.hpp>
|
||||
#include <glm/gtc/random.hpp>
|
||||
|
||||
#include <chrono>
|
||||
@@ -27,6 +28,25 @@ glm::mat4 GlmToolkit::transform(glm::vec3 translation, glm::vec3 rotation, glm::
|
||||
return View * Model;
|
||||
}
|
||||
|
||||
void GlmToolkit::inverse_transform(glm::mat4 M, glm::vec3 &translation, glm::vec3 &rotation, glm::vec3 &scale)
|
||||
{
|
||||
// extract rotation from modelview
|
||||
glm::mat4 ctm;
|
||||
glm::vec3 rot(0.f);
|
||||
glm::vec4 vec = M * glm::vec4(1.f, 0.f, 0.f, 0.f);
|
||||
rot.z = glm::orientedAngle( glm::vec3(1.f, 0.f, 0.f), glm::normalize(glm::vec3(vec)), glm::vec3(0.f, 0.f, 1.f) );
|
||||
rotation = rot;
|
||||
|
||||
// extract scaling
|
||||
ctm = glm::rotate(glm::identity<glm::mat4>(), -rot.z, glm::vec3(0.f, 0.f, 1.f)) * M ;
|
||||
vec = ctm * glm::vec4(1.f, 1.f, 0.f, 0.f);
|
||||
scale = glm::vec3(vec.x, vec.y, 1.f);
|
||||
|
||||
// extract translation
|
||||
vec = M * glm::vec4(0.f, 0.f, 0.f, 1.f);
|
||||
translation = glm::vec3(vec);
|
||||
}
|
||||
|
||||
|
||||
GlmToolkit::AxisAlignedBoundingBox::AxisAlignedBoundingBox() {
|
||||
mMin = glm::vec3(1.f);
|
||||
|
||||
@@ -13,6 +13,7 @@ uint64_t uniqueId();
|
||||
|
||||
// get Matrix for these transformation components
|
||||
glm::mat4 transform(glm::vec3 translation, glm::vec3 rotation, glm::vec3 scale);
|
||||
void inverse_transform(glm::mat4 M, glm::vec3 &translation, glm::vec3 &rotation, glm::vec3 &scale);
|
||||
|
||||
class AxisAlignedBoundingBox
|
||||
{
|
||||
|
||||
@@ -137,7 +137,7 @@ string GstToolkit::gst_version()
|
||||
|
||||
// see https://developer.ridgerun.com/wiki/index.php?title=GStreamer_modify_the_elements_rank
|
||||
|
||||
std::list<std::string> GstToolkit::enable_gpu_decoding_plugins()
|
||||
std::list<std::string> GstToolkit::enable_gpu_decoding_plugins(bool enable)
|
||||
{
|
||||
static list<string> pluginslist;
|
||||
static GstRegistry* plugins_register = nullptr;
|
||||
@@ -162,7 +162,7 @@ std::list<std::string> GstToolkit::enable_gpu_decoding_plugins()
|
||||
GstPluginFeature* feature = gst_registry_lookup_feature(plugins_register, plugins[i]);
|
||||
if(feature != NULL) {
|
||||
pluginslist.push_front( string( plugins[i] ) );
|
||||
gst_plugin_feature_set_rank(feature, GST_RANK_PRIMARY + 1);
|
||||
gst_plugin_feature_set_rank(feature, enable ? GST_RANK_PRIMARY + 1 : GST_RANK_MARGINAL);
|
||||
gst_object_unref(feature);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ std::string filename_to_uri(std::string filename);
|
||||
std::string gst_version();
|
||||
|
||||
std::list<std::string> all_plugins();
|
||||
std::list<std::string> enable_gpu_decoding_plugins();
|
||||
std::list<std::string> enable_gpu_decoding_plugins(bool enable = true);
|
||||
|
||||
std::list<std::string> all_plugin_features(std::string pluginname);
|
||||
bool enable_feature (std::string name, bool enable);
|
||||
|
||||
185
ImGuiToolkit.cpp
185
ImGuiToolkit.cpp
@@ -25,6 +25,7 @@
|
||||
#include "GstToolkit.h"
|
||||
#include "SystemToolkit.h"
|
||||
|
||||
|
||||
unsigned int textureicons = 0;
|
||||
std::map <ImGuiToolkit::font_style, ImFont*>fontmap;
|
||||
|
||||
@@ -90,14 +91,14 @@ void ImGuiToolkit::ButtonSwitch(const char* label, bool* toggle, const char* hel
|
||||
|
||||
// hover
|
||||
ImU32 col_bg;
|
||||
if (ImGui::IsItemHovered())
|
||||
if (ImGui::IsItemHovered()) //
|
||||
col_bg = ImGui::GetColorU32(ImLerp(colors[ImGuiCol_FrameBgHovered], colors[ImGuiCol_TabHovered], t));
|
||||
else
|
||||
col_bg = ImGui::GetColorU32(ImLerp(colors[ImGuiCol_FrameBg], colors[ImGuiCol_TabActive], t));
|
||||
|
||||
// draw help text if present
|
||||
if (help) {
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.6, 0.6, 0.6, 1.f));
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.6, 0.6, 0.6, 0.9f));
|
||||
ImGui::RenderText(draw_pos, help);
|
||||
ImGui::PopStyleColor(1);
|
||||
}
|
||||
@@ -115,7 +116,7 @@ void ImGuiToolkit::ButtonSwitch(const char* label, bool* toggle, const char* hel
|
||||
}
|
||||
|
||||
|
||||
void ImGuiToolkit::Icon(int i, int j)
|
||||
void ImGuiToolkit::Icon(int i, int j, bool enabled)
|
||||
{
|
||||
// icons.dds is a 20 x 20 grid of icons
|
||||
if (textureicons == 0)
|
||||
@@ -123,7 +124,11 @@ void ImGuiToolkit::Icon(int i, int j)
|
||||
|
||||
ImVec2 uv0( static_cast<float>(i) * 0.05, static_cast<float>(j) * 0.05 );
|
||||
ImVec2 uv1( uv0.x + 0.05, uv0.y + 0.05 );
|
||||
ImGui::Image((void*)(intptr_t)textureicons, ImVec2(ImGui::GetTextLineHeightWithSpacing(), ImGui::GetTextLineHeightWithSpacing()), uv0, uv1);
|
||||
|
||||
ImVec4 tint_color = ImGui::GetStyle().Colors[ImGuiCol_Text];
|
||||
if (!enabled)
|
||||
tint_color = ImVec4(0.6f, 0.6f, 0.6f, 0.8f);
|
||||
ImGui::Image((void*)(intptr_t)textureicons, ImVec2(ImGui::GetTextLineHeightWithSpacing(), ImGui::GetTextLineHeightWithSpacing()), uv0, uv1, tint_color);
|
||||
}
|
||||
|
||||
bool ImGuiToolkit::ButtonIcon(int i, int j, const char *tooltip)
|
||||
@@ -168,6 +173,34 @@ bool ImGuiToolkit::ButtonIconToggle(int i, int j, int i_toggle, int j_toggle, bo
|
||||
}
|
||||
|
||||
|
||||
bool ImGuiToolkit::IconButton(int i, int j, const char *tooltip)
|
||||
{
|
||||
bool ret = false;
|
||||
ImGui::PushID( i * 20 + j );
|
||||
|
||||
float frame_height = ImGui::GetFrameHeight();
|
||||
float frame_width = frame_height;
|
||||
ImVec2 draw_pos = ImGui::GetCursorScreenPos();
|
||||
|
||||
// toggle action : operate on the whole area
|
||||
ImGui::InvisibleButton("##iconbutton", ImVec2(frame_width, frame_height));
|
||||
if (ImGui::IsItemClicked())
|
||||
ret = true;
|
||||
|
||||
ImGui::SetCursorScreenPos(draw_pos);
|
||||
Icon(i, j, !ret);
|
||||
|
||||
if (tooltip != nullptr && ImGui::IsItemHovered())
|
||||
{
|
||||
ImGui::BeginTooltip();
|
||||
ImGui::Text("%s", tooltip);
|
||||
ImGui::EndTooltip();
|
||||
}
|
||||
|
||||
ImGui::PopID();
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool ImGuiToolkit::IconToggle(int i, int j, int i_toggle, int j_toggle, bool* toggle, const char *tooltips[])
|
||||
{
|
||||
bool ret = false;
|
||||
@@ -186,10 +219,10 @@ bool ImGuiToolkit::IconToggle(int i, int j, int i_toggle, int j_toggle, bool* to
|
||||
|
||||
ImGui::SetCursorScreenPos(draw_pos);
|
||||
if (*toggle) {
|
||||
Icon(i_toggle, j_toggle);
|
||||
Icon(i_toggle, j_toggle, !ret);
|
||||
}
|
||||
else {
|
||||
Icon(i, j);
|
||||
Icon(i, j, !ret);
|
||||
}
|
||||
|
||||
int tooltipid = *toggle ? 1 : 0;
|
||||
@@ -232,6 +265,42 @@ bool ImGuiToolkit::ButtonIconMultistate(std::vector<std::pair<int, int> > icons,
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool ImGuiToolkit::ComboIcon (std::vector<std::pair<int, int> > icons, int* state)
|
||||
{
|
||||
bool ret = false;
|
||||
Sum id = std::for_each(icons.begin(), icons.end(), Sum());
|
||||
ImGui::PushID( id.sum );
|
||||
|
||||
ImVec2 draw_pos = ImGui::GetCursorScreenPos();
|
||||
float w = ImGui::GetTextLineHeight();
|
||||
ImGui::SetNextItemWidth(w * 2.6f);
|
||||
if (ImGui::BeginCombo("##ComboIcon", " ") )
|
||||
{
|
||||
std::vector<std::pair<int, int> >::iterator it = icons.begin();
|
||||
for(int i = 0 ; it != icons.end(); i++, it++) {
|
||||
ImGui::PushID( id.sum + i + 1);
|
||||
ImVec2 pos = ImGui::GetCursorScreenPos();
|
||||
// combo selectable item
|
||||
if ( ImGui::Selectable(" ", i == *state )){
|
||||
*state = i;
|
||||
ret = true;
|
||||
}
|
||||
// draw item icon
|
||||
ImGui::SetCursorScreenPos( pos + ImVec2(w/6.f,0) );
|
||||
Icon( (*it).first, (*it).second );
|
||||
ImGui::PopID();
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
|
||||
// redraw current ad preview value
|
||||
ImGui::SetCursorScreenPos(draw_pos + ImVec2(w/9.f,w/9.f));
|
||||
Icon(icons[*state].first, icons[*state].second );
|
||||
|
||||
ImGui::PopID();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void ImGuiToolkit::ShowIconsWindow(bool* p_open)
|
||||
{
|
||||
@@ -269,33 +338,37 @@ void ImGuiToolkit::ShowIconsWindow(bool* p_open)
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
void ImGuiToolkit::ToolTip(const char* desc)
|
||||
void ImGuiToolkit::ToolTip(const char* desc, const char* shortcut)
|
||||
{
|
||||
if (ImGui::IsItemHovered())
|
||||
{
|
||||
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_DEFAULT);
|
||||
ImGui::BeginTooltip();
|
||||
ImGui::Text(desc);
|
||||
ImGui::EndTooltip();
|
||||
ImGui::PopFont();
|
||||
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_DEFAULT);
|
||||
ImGui::BeginTooltip();
|
||||
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
|
||||
ImGui::TextUnformatted(desc);
|
||||
ImGui::PopTextWrapPos();
|
||||
|
||||
if (shortcut) {
|
||||
ImGui::SameLine();
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.6, 0.6, 0.6, 0.9f));
|
||||
ImGui::Text(shortcut);
|
||||
ImGui::PopStyleColor();
|
||||
}
|
||||
ImGui::EndTooltip();
|
||||
ImGui::PopFont();
|
||||
}
|
||||
|
||||
// Helper to display a little (?) mark which shows a tooltip when hovered.
|
||||
// In your own code you may want to display an actual icon if you are using a merged icon fonts (see docs/FONTS.txt)
|
||||
void ImGuiToolkit::HelpMarker(const char* desc, const char* icon)
|
||||
void ImGuiToolkit::HelpMarker(const char* desc, const char* icon, const char* shortcut)
|
||||
{
|
||||
ImGui::TextDisabled( icon );
|
||||
if (ImGui::IsItemHovered())
|
||||
{
|
||||
ImGui::BeginTooltip();
|
||||
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_DEFAULT);
|
||||
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
|
||||
ImGui::TextUnformatted(desc);
|
||||
ImGui::PopTextWrapPos();
|
||||
ImGui::PopFont();
|
||||
ImGui::EndTooltip();
|
||||
}
|
||||
ToolTip(desc, shortcut);
|
||||
}
|
||||
|
||||
void ImGuiToolkit::HelpIcon(const char* desc, int i, int j, const char* shortcut)
|
||||
{
|
||||
ImGuiToolkit::Icon(i, j, false);
|
||||
if (ImGui::IsItemHovered())
|
||||
ToolTip(desc, shortcut);
|
||||
}
|
||||
|
||||
// Draws a timeline showing
|
||||
@@ -837,15 +910,19 @@ void ImGuiToolkit::ShowStats(bool *p_open, int* p_corner, bool *p_timer)
|
||||
|
||||
ImGui::SetNextWindowBgAlpha(0.35f); // Transparent background
|
||||
|
||||
if (ImGui::Begin("Metrics", NULL, (corner != -1 ? ImGuiWindowFlags_NoMove : 0) | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
|
||||
if (ImGui::Begin("Metrics", NULL, (corner != -1 ? ImGuiWindowFlags_NoMove : 0) | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
|
||||
{
|
||||
int mode = (*p_timer) ? 1 : 0;
|
||||
ImGui::SetNextItemWidth(250);
|
||||
ImGui::SetNextItemWidth(220);
|
||||
if (ImGui::Combo("##mode", &mode, ICON_FA_TACHOMETER_ALT " Performance\0" ICON_FA_HOURGLASS_HALF " Timers\0") ) {
|
||||
(*p_timer) = mode > 0;
|
||||
}
|
||||
|
||||
bool dumm = true;
|
||||
ImGui::SameLine();
|
||||
if (ImGuiToolkit::IconButton(5,8))
|
||||
ImGui::OpenPopup("metrics_menu");
|
||||
ImGui::Spacing();
|
||||
|
||||
if (*p_timer) {
|
||||
guint64 time_ = gst_util_get_timestamp ();
|
||||
|
||||
@@ -853,14 +930,14 @@ void ImGuiToolkit::ShowStats(bool *p_open, int* p_corner, bool *p_timer)
|
||||
ImGui::Text("%s", GstToolkit::time_to_string(time_-start_time_1_, GstToolkit::TIME_STRING_FIXED).c_str());
|
||||
ImGui::PopFont();
|
||||
ImGui::SameLine(0, 10);
|
||||
if (ImGuiToolkit::IconToggle(11, 14, 12, 14, &dumm))
|
||||
if (ImGuiToolkit::IconButton(12, 14))
|
||||
start_time_1_ = time_; // reset timer 1
|
||||
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_LARGE);
|
||||
ImGui::Text("%s", GstToolkit::time_to_string(time_-start_time_2_, GstToolkit::TIME_STRING_FIXED).c_str());
|
||||
ImGui::PopFont();
|
||||
ImGui::SameLine(0, 10); dumm = true;
|
||||
if (ImGuiToolkit::IconToggle(11, 14, 12, 14, &dumm))
|
||||
start_time_1_ = time_; // reset timer 2
|
||||
ImGui::SameLine(0, 10);
|
||||
if (ImGuiToolkit::IconButton(12, 14))
|
||||
start_time_2_ = time_; // reset timer 2
|
||||
|
||||
}
|
||||
else {
|
||||
@@ -870,20 +947,39 @@ void ImGuiToolkit::ShowStats(bool *p_open, int* p_corner, bool *p_timer)
|
||||
ImGui::Text("Refresh %.1f FPS", io.Framerate);
|
||||
ImGui::Text("Memory %s", SystemToolkit::byte_to_string( SystemToolkit::memory_usage()).c_str() );
|
||||
ImGui::PopFont();
|
||||
|
||||
}
|
||||
|
||||
if (ImGui::BeginPopupContextWindow())
|
||||
if (ImGui::BeginPopup("metrics_menu"))
|
||||
{
|
||||
if (ImGui::MenuItem("Free position", NULL, corner == -1)) *p_corner = -1;
|
||||
if (ImGui::MenuItem("Top", NULL, corner == 1)) *p_corner = 1;
|
||||
if (ImGui::MenuItem("Bottom", NULL, corner == 3)) *p_corner = 3;
|
||||
if (p_open && ImGui::MenuItem("Close")) *p_open = false;
|
||||
if (ImGui::MenuItem( ICON_FA_ANGLE_UP " Top", NULL, corner == 1)) *p_corner = 1;
|
||||
if (ImGui::MenuItem( ICON_FA_ANGLE_DOWN " Bottom", NULL, corner == 3)) *p_corner = 3;
|
||||
if (ImGui::MenuItem( ICON_FA_EXPAND_ARROWS_ALT " Free position", NULL, corner == -1)) *p_corner = -1;
|
||||
if (p_open && ImGui::MenuItem( ICON_FA_TIMES " Close")) *p_open = false;
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
ImGui::End();
|
||||
}
|
||||
}
|
||||
|
||||
// BHBN : TODO stats on video decoding : would be useful if we could know which is HW or SW decoder
|
||||
//#include "MediaPlayer.h"
|
||||
//ImGuiToolkit::PushFont(ImGuiToolkit::FONT_MONO);
|
||||
//uint bitrate_ = 0;
|
||||
//uint pixels_ = 0;
|
||||
//uint videos_ = 0;
|
||||
//uint images_ = 0;
|
||||
//for (auto it = MediaPlayer::begin(); it != MediaPlayer::end(); it++)
|
||||
//{
|
||||
// MediaInfo info = (*it)->media();
|
||||
// bitrate_ += info.bitrate;
|
||||
// pixels_ += info.height * info.width * 4;
|
||||
// if (info.isimage) images_++; else videos_++;
|
||||
//}
|
||||
//ImGui::Text("%d video%s %d image%s", videos_, videos_>1?"s":" ", images_, images_>1?"s":" ");
|
||||
//ImGui::Text("Bitrate %s/s", SystemToolkit::bits_to_string( bitrate_ ).c_str() );
|
||||
//ImGui::Text("Texture %s", SystemToolkit::byte_to_string( pixels_ ).c_str() );
|
||||
//ImGui::PopFont();
|
||||
|
||||
void ImGuiToolkit::WindowText(const char* window_name, ImVec2 window_pos, const char* text)
|
||||
{
|
||||
@@ -936,10 +1032,12 @@ void ImGuiToolkit::WindowDragFloat(const char* window_name, ImVec2 window_pos, f
|
||||
}
|
||||
}
|
||||
|
||||
ImVec4 ImGuiToolkit::GetHighlightColor()
|
||||
ImVec4 ImGuiToolkit::HighlightColor(bool active)
|
||||
{
|
||||
ImVec4* colors = ImGui::GetStyle().Colors;
|
||||
return colors[ImGuiCol_CheckMark];
|
||||
if (active)
|
||||
return ImGui::GetStyle().Colors[ImGuiCol_CheckMark];
|
||||
else
|
||||
return ImGui::GetStyle().Colors[ImGuiCol_TabUnfocusedActive];
|
||||
}
|
||||
|
||||
void ImGuiToolkit::SetAccentColor(accent_color color)
|
||||
@@ -1001,7 +1099,7 @@ void ImGuiToolkit::SetAccentColor(accent_color color)
|
||||
colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
|
||||
colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.13f);
|
||||
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.10f, 0.10f, 0.10f, 0.60f);
|
||||
|
||||
colors[ImGuiCol_DragDropTarget] = colors[ImGuiCol_HeaderActive];
|
||||
}
|
||||
else if (color == ImGuiToolkit::ACCENT_GREY) {
|
||||
colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
|
||||
@@ -1052,6 +1150,7 @@ void ImGuiToolkit::SetAccentColor(accent_color color)
|
||||
colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
|
||||
colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.13f);
|
||||
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.10f, 0.10f, 0.10f, 0.60f);
|
||||
colors[ImGuiCol_DragDropTarget] = colors[ImGuiCol_HeaderActive];
|
||||
}
|
||||
else {
|
||||
// default BLUE
|
||||
@@ -1081,7 +1180,7 @@ void ImGuiToolkit::SetAccentColor(accent_color color)
|
||||
colors[ImGuiCol_ButtonActive] = ImVec4(0.24f, 0.24f, 0.24f, 0.67f);
|
||||
colors[ImGuiCol_Header] = ImVec4(0.26f, 0.59f, 0.98f, 0.31f);
|
||||
colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.51f);
|
||||
colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
|
||||
colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.71f);
|
||||
colors[ImGuiCol_Separator] = ImVec4(0.43f, 0.43f, 0.50f, 0.50f);
|
||||
colors[ImGuiCol_SeparatorHovered] = ImVec4(0.10f, 0.40f, 0.75f, 0.67f);
|
||||
colors[ImGuiCol_SeparatorActive] = ImVec4(0.59f, 0.73f, 0.90f, 0.95f);
|
||||
@@ -1103,7 +1202,9 @@ void ImGuiToolkit::SetAccentColor(accent_color color)
|
||||
colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
|
||||
colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.13f);
|
||||
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.10f, 0.10f, 0.10f, 0.60f);
|
||||
colors[ImGuiCol_DragDropTarget] = colors[ImGuiCol_HeaderActive];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -11,20 +11,25 @@
|
||||
namespace ImGuiToolkit
|
||||
{
|
||||
// Icons from resource icon.dds
|
||||
void Icon(int i, int j);
|
||||
void Icon (int i, int j, bool enabled = true);
|
||||
bool IconButton (int i, int j, const char *tooltips = nullptr);
|
||||
bool IconToggle (int i, int j, int i_toggle, int j_toggle, bool* toggle, const char *tooltips[] = nullptr);
|
||||
void ShowIconsWindow(bool* p_open);
|
||||
|
||||
// utility buttons
|
||||
// icon buttons
|
||||
bool ButtonIcon (int i, int j, const char* tooltip = nullptr);
|
||||
bool ButtonIconToggle (int i, int j, int i_toggle, int j_toggle, bool* toggle);
|
||||
bool ButtonIconMultistate (std::vector<std::pair<int, int> > icons, int* state);
|
||||
bool ButtonToggle(const char* label, bool* toggle);
|
||||
void ButtonSwitch (const char* label, bool* toggle , const char *help = nullptr);
|
||||
bool IconToggle (int i, int j, int i_toggle, int j_toggle, bool* toggle, const char *tooltips[] = nullptr);
|
||||
bool ComboIcon (std::vector<std::pair<int, int> > icons, int* state);
|
||||
|
||||
// utility buttons
|
||||
bool ButtonToggle (const char* label, bool* toggle);
|
||||
void ButtonSwitch (const char* label, bool* toggle , const char *help = nullptr);
|
||||
void ButtonOpenUrl (const char* url, const ImVec2& size_arg = ImVec2(0,0));
|
||||
|
||||
void ToolTip (const char* desc);
|
||||
void HelpMarker (const char* desc, const char* icon = ICON_FA_QUESTION_CIRCLE);
|
||||
void ToolTip (const char* desc, const char* shortcut = "");
|
||||
void HelpMarker (const char* desc, const char* icon = ICON_FA_QUESTION_CIRCLE, const char* shortcut = nullptr);
|
||||
void HelpIcon (const char* desc, int i = 19, int j = 5, const char* shortcut = "");
|
||||
|
||||
// utility sliders
|
||||
bool TimelineSlider (const char* label, guint64 *time, guint64 start, guint64 end, guint64 step, const float width);
|
||||
@@ -55,7 +60,7 @@ namespace ImGuiToolkit
|
||||
ACCENT_GREY
|
||||
} accent_color;
|
||||
void SetAccentColor (accent_color color);
|
||||
struct ImVec4 GetHighlightColor ();
|
||||
struct ImVec4 HighlightColor (bool active = true);
|
||||
|
||||
void ShowStats (bool* p_open, int* p_corner, bool* p_timer);
|
||||
|
||||
|
||||
114
ImGuiVisitor.cpp
114
ImGuiVisitor.cpp
@@ -171,7 +171,7 @@ void ImGuiVisitor::visit(Shader &n)
|
||||
// ImGui::SameLine(0, 5);
|
||||
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
||||
int mode = n.blending;
|
||||
if (ImGui::Combo("Blending", &mode, "Normal\0Screen\0Inverse\0Addition\0Subtract\0") ) {
|
||||
if (ImGui::Combo("Blending", &mode, "Normal\0Screen\0Subtract\0Multiply\0Soft light\0Soft subtract\0Lighten only\0None\0") ) {
|
||||
n.blending = Shader::BlendMode(mode);
|
||||
|
||||
std::ostringstream oss;
|
||||
@@ -180,20 +180,26 @@ void ImGuiVisitor::visit(Shader &n)
|
||||
case Shader::BLEND_OPACITY:
|
||||
oss<<"Normal";
|
||||
break;
|
||||
case Shader::BLEND_ADD:
|
||||
case Shader::BLEND_SCREEN:
|
||||
oss<<"Screen";
|
||||
break;
|
||||
case Shader::BLEND_SUBSTRACT:
|
||||
oss<<"Inverse";
|
||||
break;
|
||||
case Shader::BLEND_LAYER_ADD:
|
||||
oss<<"Addition";
|
||||
break;
|
||||
case Shader::BLEND_LAYER_SUBSTRACT:
|
||||
case Shader::BLEND_SUBTRACT:
|
||||
oss<<"Subtract";
|
||||
break;
|
||||
case Shader::BLEND_CUSTOM:
|
||||
oss<<"Custom";
|
||||
case Shader::BLEND_MULTIPLY:
|
||||
oss<<"Multiply";
|
||||
break;
|
||||
case Shader::BLEND_SOFT_LIGHT:
|
||||
oss<<"Soft light";
|
||||
break;
|
||||
case Shader::BLEND_SOFT_SUBTRACT:
|
||||
oss<<"Soft subtract";
|
||||
break;
|
||||
case Shader::BLEND_LIGHTEN_ONLY:
|
||||
oss<<"Lighten only";
|
||||
break;
|
||||
case Shader::BLEND_NONE:
|
||||
oss<<"None";
|
||||
break;
|
||||
}
|
||||
Action::manager().store(oss.str(), n.id());
|
||||
@@ -393,18 +399,22 @@ void ImGuiVisitor::visit (Source& s)
|
||||
|
||||
// preview
|
||||
float preview_width = ImGui::GetContentRegionAvail().x IMGUI_RIGHT_ALIGN;
|
||||
float width = preview_width;
|
||||
float height = s.frame()->projectionArea().y * width / ( s.frame()->projectionArea().x * s.frame()->aspectRatio());
|
||||
if (height > 230) {
|
||||
height = 230;
|
||||
width = height * s.frame()->aspectRatio() * ( s.frame()->projectionArea().x / s.frame()->projectionArea().y);
|
||||
}
|
||||
ImGui::Image((void*)(uintptr_t) s.frame()->texture(), ImVec2(width, height));
|
||||
|
||||
float preview_height = 4.5f * ImGui::GetFrameHeightWithSpacing();
|
||||
ImVec2 pos = ImGui::GetCursorPos(); // remember where we were...
|
||||
|
||||
float space = ImGui::GetStyle().ItemSpacing.y;
|
||||
float width = preview_width;
|
||||
float height = s.frame()->projectionArea().y * width / ( s.frame()->projectionArea().x * s.frame()->aspectRatio());
|
||||
if (height > preview_height - space) {
|
||||
height = preview_height - space;
|
||||
width = height * s.frame()->aspectRatio() * ( s.frame()->projectionArea().x / s.frame()->projectionArea().y);
|
||||
}
|
||||
// centered image
|
||||
ImGui::SetCursorPos( ImVec2(pos.x + 0.5f * (preview_width-width), pos.y + 0.5f * (preview_height-height-space)) );
|
||||
ImGui::Image((void*)(uintptr_t) s.frame()->texture(), ImVec2(width, height));
|
||||
|
||||
// inform on visibility status
|
||||
ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y -height ) );
|
||||
ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y ) );
|
||||
if (s.active()) {
|
||||
if (s.blendingShader()->color.a > 0.f)
|
||||
ImGuiToolkit::HelpMarker("Visible", ICON_FA_EYE);
|
||||
@@ -414,16 +424,25 @@ void ImGuiVisitor::visit (Source& s)
|
||||
else
|
||||
ImGuiToolkit::HelpMarker("Inactive", ICON_FA_SNOWFLAKE);
|
||||
|
||||
// Inform on status of lock
|
||||
ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y -height + ImGui::GetFrameHeight()) );
|
||||
if (s.locked())
|
||||
ImGuiToolkit::HelpMarker("Locked", ICON_FA_LOCK);
|
||||
// Inform on workspace
|
||||
ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y + ImGui::GetFrameHeightWithSpacing()) );
|
||||
if (s.workspace() == Source::BACKGROUND)
|
||||
ImGuiToolkit::HelpIcon("Background",10, 16);
|
||||
else if (s.workspace() == Source::FOREGROUND)
|
||||
ImGuiToolkit::HelpIcon("Foreground",12, 16);
|
||||
else
|
||||
ImGuiToolkit::HelpMarker("Unlocked", ICON_FA_LOCK_OPEN);
|
||||
ImGuiToolkit::HelpIcon("Stage",11, 16);
|
||||
|
||||
// locking
|
||||
ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y + 2.f * ImGui::GetFrameHeightWithSpacing()) );
|
||||
const char *tooltip[2] = {"Unlocked", "Locked"};
|
||||
bool l = s.locked();
|
||||
if (ImGuiToolkit::IconToggle(15,6,17,6, &l, tooltip ) )
|
||||
s.setLocked(l);
|
||||
|
||||
// toggle enable/disable image processing
|
||||
bool on = s.imageProcessingEnabled();
|
||||
ImGui::SetCursorPos( ImVec2(preview_width + 15, pos.y -ImGui::GetFrameHeight() ) );
|
||||
ImGui::SetCursorPos( ImVec2(preview_width + 15, pos.y + 3.5f * ImGui::GetFrameHeightWithSpacing()) );
|
||||
if ( ImGuiToolkit::ButtonToggle(ICON_FA_MAGIC, &on) ){
|
||||
std::ostringstream oss;
|
||||
oss << s.name() << ": " << ( on ? "Enable Filter" : "Disable Filter");
|
||||
@@ -431,7 +450,7 @@ void ImGuiVisitor::visit (Source& s)
|
||||
}
|
||||
s.setImageProcessingEnabled(on);
|
||||
|
||||
ImGui::SetCursorPos(pos); // ...come back
|
||||
ImGui::SetCursorPosY(pos.y + preview_height); // ...come back
|
||||
|
||||
// image processing pannel
|
||||
if (s.imageProcessingEnabled())
|
||||
@@ -446,27 +465,27 @@ void ImGuiVisitor::visit (Source& s)
|
||||
|
||||
void ImGuiVisitor::visit (MediaSource& s)
|
||||
{
|
||||
if ( s.mediaplayer()->isImage() ) {
|
||||
ImGuiToolkit::Icon(2,9);
|
||||
ImGui::SameLine(0, 10);
|
||||
ImGuiToolkit::Icon(s.icon().x, s.icon().y);
|
||||
ImGui::SameLine(0, 10);
|
||||
if ( s.mediaplayer()->isImage() )
|
||||
ImGui::Text("Image File");
|
||||
}
|
||||
else {
|
||||
ImGuiToolkit::Icon(18,13);
|
||||
ImGui::SameLine(0, 10);
|
||||
else
|
||||
ImGui::Text("Video File");
|
||||
}
|
||||
|
||||
if ( ImGui::Button(IMGUI_TITLE_MEDIAPLAYER, ImVec2(IMGUI_RIGHT_ALIGN, 0)) )
|
||||
UserInterface::manager().showMediaPlayer( s.mediaplayer());
|
||||
ImGuiToolkit::ButtonOpenUrl( SystemToolkit::path_filename(s.path()).c_str(), ImVec2(IMGUI_RIGHT_ALIGN, 0) );
|
||||
}
|
||||
|
||||
void ImGuiVisitor::visit (SessionSource& s)
|
||||
void ImGuiVisitor::visit (SessionFileSource& s)
|
||||
{
|
||||
if (s.session() == nullptr)
|
||||
return;
|
||||
|
||||
ImGuiToolkit::Icon(s.icon().x, s.icon().y);
|
||||
ImGui::SameLine(0, 10);
|
||||
ImGui::Text("Session File");
|
||||
ImGui::Text("%s", SystemToolkit::base_filename(s.path()).c_str());
|
||||
// ImGui::Text("%s", SystemToolkit::base_filename(s.path()).c_str());
|
||||
|
||||
if (ImGuiToolkit::ButtonIcon(3, 2)) s.session()->setFading(0.f);
|
||||
float f = s.session()->fading();
|
||||
@@ -480,14 +499,29 @@ void ImGuiVisitor::visit (SessionSource& s)
|
||||
Action::manager().store(oss.str(), s.id());
|
||||
}
|
||||
|
||||
if ( ImGui::Button( ICON_FA_FILE_UPLOAD " Make Current", ImVec2(IMGUI_RIGHT_ALIGN, 0)) )
|
||||
if ( ImGui::Button( ICON_FA_FILE_UPLOAD " Open File", ImVec2(IMGUI_RIGHT_ALIGN, 0)) )
|
||||
Mixer::manager().set( s.detach() );
|
||||
if ( ImGui::Button( ICON_FA_FILE_EXPORT " Import", ImVec2(IMGUI_RIGHT_ALIGN, 0)) )
|
||||
Mixer::manager().merge( s.detach() );
|
||||
if ( ImGui::Button( ICON_FA_FILE_EXPORT " Import sources", ImVec2(IMGUI_RIGHT_ALIGN, 0)) )
|
||||
Mixer::manager().import( &s );
|
||||
|
||||
ImGuiToolkit::ButtonOpenUrl( SystemToolkit::path_filename(s.path()).c_str(), ImVec2(IMGUI_RIGHT_ALIGN, 0) );
|
||||
}
|
||||
|
||||
void ImGuiVisitor::visit (SessionGroupSource& s)
|
||||
{
|
||||
if (s.session() == nullptr)
|
||||
return;
|
||||
|
||||
ImGuiToolkit::Icon(s.icon().x, s.icon().y);
|
||||
ImGui::SameLine(0, 10);
|
||||
ImGui::Text("Flat Session");
|
||||
|
||||
if ( ImGui::Button( ICON_FA_UPLOAD " Expand sources", ImVec2(IMGUI_RIGHT_ALIGN, 0)) ){
|
||||
Mixer::manager().import( &s );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void ImGuiVisitor::visit (RenderSource& s)
|
||||
{
|
||||
ImGuiToolkit::Icon(s.icon().x, s.icon().y);
|
||||
|
||||
@@ -23,7 +23,8 @@ public:
|
||||
void visit (ImageProcessingShader& n) override;
|
||||
void visit (Source& s) override;
|
||||
void visit (MediaSource& s) override;
|
||||
void visit (SessionSource& s) override;
|
||||
void visit (SessionFileSource& s) override;
|
||||
void visit (SessionGroupSource& s) override;
|
||||
void visit (RenderSource& s) override;
|
||||
void visit (CloneSource& s) override;
|
||||
void visit (PatternSource& s) override;
|
||||
|
||||
@@ -80,8 +80,6 @@ void ImageProcessingShader::reset()
|
||||
|
||||
void ImageProcessingShader::operator = (const ImageProcessingShader &S )
|
||||
{
|
||||
Shader::operator =(S);
|
||||
|
||||
brightness = S.brightness;
|
||||
contrast = S.contrast;
|
||||
saturation = S.saturation;
|
||||
|
||||
@@ -2,14 +2,15 @@
|
||||
|
||||
#include "defines.h"
|
||||
#include "Visitor.h"
|
||||
#include "ImageShader.h"
|
||||
#include "Resource.h"
|
||||
#include "rsc/fonts/IconsFontAwesome5.h"
|
||||
//#include
|
||||
|
||||
static ShadingProgram imageShadingProgram("shaders/image.vs", "shaders/image.fs");
|
||||
#include "ImageShader.h"
|
||||
|
||||
const char* MaskShader::mask_names[3] = { ICON_FA_EXPAND, ICON_FA_EDIT, ICON_FA_SHAPES };
|
||||
ShadingProgram imageShadingProgram("shaders/image.vs", "shaders/image.fs");
|
||||
ShadingProgram inverseAlphaProgram("shaders/image.vs", "shaders/imageblending.fs");
|
||||
|
||||
const char* MaskShader::mask_names[3] = { ICON_FA_EXPAND, ICON_FA_EDIT, ICON_FA_SHAPES };
|
||||
const char* MaskShader::mask_shapes[5] = { "Elipse", "Oblong", "Rectangle", "Horizontal", "Vertical" };
|
||||
std::vector< ShadingProgram* > MaskShader::mask_programs;
|
||||
|
||||
@@ -25,15 +26,15 @@ void ImageShader::use()
|
||||
{
|
||||
Shader::use();
|
||||
|
||||
// set stippling
|
||||
program_->setUniform("stipple", stipple);
|
||||
|
||||
// setup mask texture
|
||||
glActiveTexture(GL_TEXTURE1);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
glBindTexture(GL_TEXTURE_2D, mask_texture);
|
||||
|
||||
glBindTexture (GL_TEXTURE_2D, mask_texture);
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
|
||||
}
|
||||
|
||||
void ImageShader::reset()
|
||||
@@ -61,6 +62,15 @@ void ImageShader::accept(Visitor& v) {
|
||||
}
|
||||
|
||||
|
||||
DivideAlphaShader::DivideAlphaShader(): ImageShader()
|
||||
{
|
||||
// to inverse alpha mode, use dedicated shading program
|
||||
program_ = &inverseAlphaProgram;
|
||||
// reset instance
|
||||
reset();
|
||||
|
||||
blending = Shader::BLEND_NONE;
|
||||
}
|
||||
|
||||
|
||||
MaskShader::MaskShader(): Shader(), mode(0)
|
||||
|
||||
@@ -27,6 +27,14 @@ public:
|
||||
float stipple;
|
||||
};
|
||||
|
||||
class DivideAlphaShader : public ImageShader
|
||||
{
|
||||
|
||||
public:
|
||||
DivideAlphaShader();
|
||||
|
||||
};
|
||||
|
||||
|
||||
class MaskShader : public Shader
|
||||
{
|
||||
|
||||
33
Log.cpp
33
Log.cpp
@@ -43,6 +43,7 @@ struct AppLog
|
||||
{
|
||||
mtx.lock();
|
||||
int old_size = Buf.size();
|
||||
Buf.appendf("%04d ", LineOffsets.size()); // this adds 6 characters to show line number
|
||||
Buf.appendfv(fmt, args);
|
||||
Buf.append("\n");
|
||||
|
||||
@@ -66,6 +67,9 @@ struct AppLog
|
||||
|
||||
// window
|
||||
ImGui::SameLine(0, 0);
|
||||
static bool numbering = true;
|
||||
ImGuiToolkit::ButtonToggle( ICON_FA_SORT_NUMERIC_DOWN, &numbering );
|
||||
ImGui::SameLine();
|
||||
bool clear = ImGui::Button( ICON_FA_BACKSPACE " Clear");
|
||||
ImGui::SameLine();
|
||||
bool copy = ImGui::Button( ICON_FA_COPY " Copy");
|
||||
@@ -73,7 +77,7 @@ struct AppLog
|
||||
Filter.Draw("Filter", -60.0f);
|
||||
|
||||
ImGui::Separator();
|
||||
ImGui::BeginChild("scrolling", ImVec2(0,0), false, ImGuiWindowFlags_HorizontalScrollbar);
|
||||
ImGui::BeginChild("scrolling", ImVec2(0,0), false, ImGuiWindowFlags_AlwaysHorizontalScrollbar);
|
||||
|
||||
if (clear)
|
||||
Clear();
|
||||
@@ -118,7 +122,7 @@ struct AppLog
|
||||
{
|
||||
for (int line_no = clipper.DisplayStart; line_no < clipper.DisplayEnd; line_no++)
|
||||
{
|
||||
const char* line_start = buf + LineOffsets[line_no];
|
||||
const char* line_start = buf + LineOffsets[line_no] + (numbering?0:6);
|
||||
const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end;
|
||||
ImGui::TextUnformatted(line_start, line_end);
|
||||
}
|
||||
@@ -195,10 +199,10 @@ void Log::Warning(const char* fmt, ...)
|
||||
Log::Info("Warning - %s\n", buf.c_str());
|
||||
}
|
||||
|
||||
void Log::Render(bool showNofitications, bool showWarnings)
|
||||
void Log::Render(bool *showWarnings)
|
||||
{
|
||||
bool show_warnings = !warnings.empty() & showWarnings;
|
||||
bool show_notification = !notifications.empty() & showNofitications;
|
||||
bool show_warnings = !warnings.empty();
|
||||
bool show_notification = !notifications.empty();
|
||||
|
||||
if (!show_notification && !show_warnings)
|
||||
return;
|
||||
@@ -238,6 +242,7 @@ void Log::Render(bool showNofitications, bool showWarnings)
|
||||
notifications.clear();
|
||||
}
|
||||
|
||||
|
||||
if (show_warnings) {
|
||||
ImGui::OpenPopup("Warning");
|
||||
if (ImGui::BeginPopupModal("Warning", NULL, ImGuiWindowFlags_AlwaysAutoResize))
|
||||
@@ -255,8 +260,21 @@ void Log::Render(bool showNofitications, bool showWarnings)
|
||||
}
|
||||
ImGui::PopTextWrapPos();
|
||||
|
||||
ImGui::Dummy(ImVec2(width * 0.8f, 0)); ImGui::SameLine(); // right align
|
||||
if (ImGui::Button(" Ok ", ImVec2(width * 0.2f, 0))) {
|
||||
bool close = false;
|
||||
ImGui::Spacing();
|
||||
if (ImGui::Button("Show logs", ImVec2(width * 0.2f, 0))) {
|
||||
close = true;
|
||||
if (showWarnings!= nullptr)
|
||||
*showWarnings = true;
|
||||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
ImGui::Dummy(ImVec2(width * 0.6f, 0)); // right align
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(" Ok ", ImVec2(width * 0.2f, 0)))
|
||||
close = true;
|
||||
|
||||
if (close) {
|
||||
ImGui::CloseCurrentPopup();
|
||||
// messages have been seen
|
||||
warnings.clear();
|
||||
@@ -267,7 +285,6 @@ void Log::Render(bool showNofitications, bool showWarnings)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void Log::Error(const char* fmt, ...)
|
||||
|
||||
2
Log.h
2
Log.h
@@ -12,7 +12,7 @@ namespace Log
|
||||
// Draw logs
|
||||
void ShowLogWindow(bool* p_open = nullptr);
|
||||
|
||||
void Render(bool showNofitications = true, bool showWarnings = true);
|
||||
void Render(bool *showWarnings = nullptr);
|
||||
}
|
||||
|
||||
#endif // __LOG_H_
|
||||
|
||||
@@ -933,9 +933,9 @@ void MediaPlayer::setTimeline(Timeline tl)
|
||||
// return media_.timeline.toggleGaps(from, to);
|
||||
//}
|
||||
|
||||
std::string MediaPlayer::codec() const
|
||||
MediaInfo MediaPlayer::media() const
|
||||
{
|
||||
return media_.codec_name;
|
||||
return media_;
|
||||
}
|
||||
|
||||
std::string MediaPlayer::uri() const
|
||||
|
||||
@@ -101,7 +101,7 @@ public:
|
||||
/**
|
||||
* Get name of Codec of the media
|
||||
* */
|
||||
std::string codec() const;
|
||||
MediaInfo media() const;
|
||||
/**
|
||||
* True if a media was oppenned
|
||||
* */
|
||||
|
||||
@@ -45,7 +45,7 @@ MediaPlayer *MediaSource::mediaplayer() const
|
||||
glm::ivec2 MediaSource::icon() const
|
||||
{
|
||||
if (mediaplayer_->isImage())
|
||||
return glm::ivec2(2, 9);
|
||||
return glm::ivec2(4, 9);
|
||||
else
|
||||
return glm::ivec2(18, 13);
|
||||
}
|
||||
@@ -79,9 +79,10 @@ void MediaSource::init()
|
||||
|
||||
// icon in mixing view
|
||||
if (mediaplayer_->isImage())
|
||||
symbol_ = new Symbol(Symbol::IMAGE, glm::vec3(0.8f, 0.8f, 0.01f));
|
||||
symbol_ = new Symbol(Symbol::IMAGE, glm::vec3(0.75f, 0.75f, 0.01f));
|
||||
else
|
||||
symbol_ = new Symbol(Symbol::VIDEO, glm::vec3(0.8f, 0.8f, 0.01f));
|
||||
symbol_ = new Symbol(Symbol::VIDEO, glm::vec3(0.75f, 0.75f, 0.01f));
|
||||
symbol_->scale_.y = 1.5f;
|
||||
|
||||
// set the renderbuffer of the source and attach rendering nodes
|
||||
attach(renderbuffer);
|
||||
|
||||
291
Mixer.cpp
291
Mixer.cpp
@@ -17,6 +17,7 @@ using namespace tinyxml2;
|
||||
#include "Settings.h"
|
||||
#include "Log.h"
|
||||
#include "View.h"
|
||||
#include "ImageShader.h"
|
||||
#include "SystemToolkit.h"
|
||||
#include "SessionCreator.h"
|
||||
#include "SessionVisitor.h"
|
||||
@@ -34,6 +35,7 @@ using namespace tinyxml2;
|
||||
#define THREADED_LOADING
|
||||
static std::vector< std::future<Session *> > sessionLoaders_;
|
||||
static std::vector< std::future<Session *> > sessionImporters_;
|
||||
static std::vector< SessionSource * > sessionSourceToImport_;
|
||||
const std::chrono::milliseconds timeout_ = std::chrono::milliseconds(4);
|
||||
|
||||
|
||||
@@ -163,6 +165,18 @@ void Mixer::update()
|
||||
}
|
||||
#endif
|
||||
|
||||
// if there is a session source to import
|
||||
if (!sessionSourceToImport_.empty()) {
|
||||
// get the session source to be imported
|
||||
SessionSource *source = sessionSourceToImport_.back();
|
||||
// merge the session inside this session source
|
||||
merge( source );
|
||||
// important: delete the sessionsource itself
|
||||
deleteSource(source);
|
||||
// done with this session source
|
||||
sessionSourceToImport_.pop_back();
|
||||
}
|
||||
|
||||
// if a change of session is requested
|
||||
if (sessionSwapRequested_) {
|
||||
sessionSwapRequested_ = false;
|
||||
@@ -170,6 +184,7 @@ void Mixer::update()
|
||||
if ( back_session_ ) {
|
||||
// swap front and back sessions
|
||||
swap();
|
||||
View::need_deep_update_++;
|
||||
// set session filename
|
||||
Rendering::manager().mainWindow().setTitle(session_->filename());
|
||||
Settings::application.recentSessions.push(session_->filename());
|
||||
@@ -188,19 +203,30 @@ void Mixer::update()
|
||||
update_time_ = gst_util_get_timestamp ();
|
||||
guint64 current_time = gst_util_get_timestamp ();
|
||||
// dt is in milisecond, with fractional precision (from micro seconds)
|
||||
dt_ = static_cast<float>( GST_TIME_AS_USECONDS(current_time - update_time_) * 0.001f);
|
||||
dt_ = static_cast<float>( GST_TIME_AS_USECONDS(current_time - update_time_) ) * 0.001f;
|
||||
update_time_ = current_time;
|
||||
|
||||
// update session and associated sources
|
||||
session_->update(dt_);
|
||||
|
||||
// grab frames to recorders & streamers
|
||||
FrameGrabbing::manager().grabFrame(session_->frame(), dt_);
|
||||
|
||||
// delete sources which failed update (one by one)
|
||||
Source *failure = session()->failedSource();
|
||||
if (failure != nullptr) {
|
||||
MediaSource *failedFile = dynamic_cast<MediaSource *>(failure);
|
||||
if (failedFile != nullptr) {
|
||||
Settings::application.recentImport.remove( failedFile->path() );
|
||||
// failed media: remove it from the list of imports
|
||||
MediaSource *failedMedia = dynamic_cast<MediaSource *>(failure);
|
||||
if (failedMedia != nullptr) {
|
||||
Settings::application.recentImport.remove( failedMedia->path() );
|
||||
}
|
||||
// failed Render loopback: replace it with one matching the current session
|
||||
RenderSource *failedRender = dynamic_cast<RenderSource *>(failure);
|
||||
if (failedRender != nullptr) {
|
||||
if ( recreateSource(failedRender) )
|
||||
failure = nullptr; // prevent delete (already done in recreateSource)
|
||||
}
|
||||
// delete the source
|
||||
deleteSource(failure, false);
|
||||
}
|
||||
|
||||
@@ -237,7 +263,7 @@ Source * Mixer::createSourceFile(const std::string &path)
|
||||
if ( ext == "mix" )
|
||||
{
|
||||
// create a session source
|
||||
SessionSource *ss = new SessionSource();
|
||||
SessionFileSource *ss = new SessionFileSource;
|
||||
ss->load(path);
|
||||
s = ss;
|
||||
}
|
||||
@@ -267,7 +293,8 @@ Source * Mixer::createSourceFile(const std::string &path)
|
||||
Source * Mixer::createSourceRender()
|
||||
{
|
||||
// ready to create a source
|
||||
RenderSource *s = new RenderSource(session_);
|
||||
RenderSource *s = new RenderSource;
|
||||
s->setSession(session_);
|
||||
|
||||
// propose a new name based on session name
|
||||
s->setName(SystemToolkit::base_filename(session_->filename()));
|
||||
@@ -327,6 +354,20 @@ Source * Mixer::createSourceNetwork(const std::string &nameconnection)
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
Source * Mixer::createSourceGroup()
|
||||
{
|
||||
SessionGroupSource *s = new SessionGroupSource;
|
||||
|
||||
s->setResolution( Mixer::manager().session()->frame()->resolution() );
|
||||
|
||||
|
||||
// propose a new name
|
||||
s->setName("Group");
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
Source * Mixer::createSourceClone(const std::string &namesource)
|
||||
{
|
||||
// ready to create a source
|
||||
@@ -396,6 +437,78 @@ void Mixer::insertSource(Source *s, View::Mode m)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool Mixer::replaceSource(Source *from, Source *to)
|
||||
{
|
||||
if ( from == nullptr || to == nullptr)
|
||||
return false;
|
||||
|
||||
// rename
|
||||
renameSource(to, from->name());
|
||||
|
||||
// remove source Nodes from all views
|
||||
detach(from);
|
||||
|
||||
// copy all transforms
|
||||
to->group(View::MIXING)->copyTransform( from->group(View::MIXING) );
|
||||
to->group(View::GEOMETRY)->copyTransform( from->group(View::GEOMETRY) );
|
||||
to->group(View::LAYER)->copyTransform( from->group(View::LAYER) );
|
||||
to->group(View::MIXING)->copyTransform( from->group(View::MIXING) );
|
||||
|
||||
// TODO copy all filters
|
||||
|
||||
|
||||
// add source Nodes to all views
|
||||
attach(to);
|
||||
|
||||
// add source
|
||||
session_->addSource(to);
|
||||
|
||||
// delete source
|
||||
session_->deleteSource(from);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool Mixer::recreateSource(Source *s)
|
||||
{
|
||||
if ( s == nullptr )
|
||||
return false;
|
||||
|
||||
// get the xml description from this source, and exit if not wellformed
|
||||
tinyxml2::XMLDocument xmlDoc;
|
||||
tinyxml2::XMLError eResult = xmlDoc.Parse(Source::xml(s).c_str());
|
||||
if ( XMLResultError(eResult))
|
||||
return false;
|
||||
tinyxml2::XMLElement *root = xmlDoc.FirstChildElement(APP_NAME);
|
||||
if ( root == nullptr )
|
||||
return false;
|
||||
XMLElement* sourceNode = root->FirstChildElement("Source");
|
||||
if ( sourceNode == nullptr )
|
||||
return false;
|
||||
|
||||
// actually create the source with SessionLoader using xml description
|
||||
SessionLoader loader( session_ );
|
||||
Source *replacement = loader.createSource(sourceNode, false); // not clone
|
||||
if (replacement == nullptr)
|
||||
return false;
|
||||
|
||||
// remove source Nodes from all views
|
||||
detach(s);
|
||||
|
||||
// delete source
|
||||
session_->deleteSource(s);
|
||||
|
||||
// add sources Nodes to all views
|
||||
attach(replacement);
|
||||
|
||||
// add source
|
||||
session_->addSource(replacement);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Mixer::deleteSource(Source *s, bool withundo)
|
||||
{
|
||||
if ( s != nullptr )
|
||||
@@ -500,6 +613,16 @@ void Mixer::uncover(Source *s)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Mixer::deselect(Source *s)
|
||||
{
|
||||
if ( s != nullptr ) {
|
||||
if ( s == *current_source_)
|
||||
unsetCurrentSource();
|
||||
Mixer::selection().remove(s);
|
||||
}
|
||||
}
|
||||
|
||||
void Mixer::deleteSelection()
|
||||
{
|
||||
// get clones first : this way we store the history of deletion in the right order
|
||||
@@ -516,7 +639,50 @@ void Mixer::deleteSelection()
|
||||
}
|
||||
// empty the selection
|
||||
while ( !selection().empty() )
|
||||
deleteSource( selection().front()); // this also remove element from selection()
|
||||
deleteSource( selection().front() ); // this also remove element from selection()
|
||||
|
||||
}
|
||||
|
||||
void Mixer::groupSelection()
|
||||
{
|
||||
float d = 2.f;
|
||||
|
||||
SessionGroupSource *group = new SessionGroupSource;
|
||||
group->setResolution( Mixer::manager().session()->frame()->resolution() );
|
||||
|
||||
// empty the selection
|
||||
while ( !selection().empty() ) {
|
||||
|
||||
Source *s = selection().front();
|
||||
d = s->depth();
|
||||
|
||||
// import source into group
|
||||
if ( group->import(s) ) {
|
||||
// detach & remove element from selection()
|
||||
detach (s);
|
||||
// remove source from session
|
||||
session_->removeSource(s);
|
||||
}
|
||||
else
|
||||
selection().pop_front();
|
||||
|
||||
}
|
||||
|
||||
// set depth at given location
|
||||
group->group(View::LAYER)->translation_.z = d;
|
||||
|
||||
// set alpha to full opacity
|
||||
group->group(View::MIXING)->translation_.x = 0.f;
|
||||
group->group(View::MIXING)->translation_.y = 0.f;
|
||||
|
||||
// Add source to Session
|
||||
session_->addSource(group);
|
||||
|
||||
// Attach source to Mixer
|
||||
attach(group);
|
||||
|
||||
// avoid name duplicates
|
||||
renameSource(group, "group");
|
||||
|
||||
}
|
||||
|
||||
@@ -700,7 +866,11 @@ void Mixer::setView(View::Mode m)
|
||||
if ( current_view_ == &transition_ ) {
|
||||
// get the session detached from the transition view and set it as current session
|
||||
// NB: detatch() can return nullptr, which is then ignored.
|
||||
set ( transition_.detach() );
|
||||
Session *se = transition_.detach();
|
||||
if ( se != nullptr )
|
||||
set ( se );
|
||||
else
|
||||
Log::Info("Transition interrupted: Session source added.");
|
||||
}
|
||||
|
||||
switch (m) {
|
||||
@@ -722,10 +892,17 @@ void Mixer::setView(View::Mode m)
|
||||
break;
|
||||
}
|
||||
|
||||
// setttings
|
||||
Settings::application.current_view = (int) m;
|
||||
|
||||
// selection might have to change
|
||||
for (auto sit = session_->begin(); sit != session_->end(); sit++) {
|
||||
if ( !current_view_->canSelect(*sit) )
|
||||
deselect( *sit );
|
||||
}
|
||||
|
||||
// need to deeply update view to apply eventual changes
|
||||
View::need_deep_update_++;
|
||||
|
||||
Settings::application.current_view = (int) m;
|
||||
}
|
||||
|
||||
View *Mixer::view(View::Mode m)
|
||||
@@ -774,7 +951,7 @@ void Mixer::load(const std::string& filename)
|
||||
if (sessionLoaders_.empty()) {
|
||||
// Start async thread for loading the session
|
||||
// Will be obtained in the future in update()
|
||||
sessionLoaders_.emplace_back( std::async(std::launch::async, Session::load, filename) );
|
||||
sessionLoaders_.emplace_back( std::async(std::launch::async, Session::load, filename, 0) );
|
||||
}
|
||||
#else
|
||||
set( Session::load(filename) );
|
||||
@@ -788,7 +965,7 @@ void Mixer::open(const std::string& filename)
|
||||
Log::Info("\nStarting transition to session %s", filename.c_str());
|
||||
|
||||
// create special SessionSource to be used for the smooth transition
|
||||
SessionSource *ts = new SessionSource();
|
||||
SessionFileSource *ts = new SessionFileSource;
|
||||
// open filename if specified
|
||||
if (!filename.empty())
|
||||
ts->load(filename);
|
||||
@@ -812,13 +989,19 @@ void Mixer::import(const std::string& filename)
|
||||
if (sessionImporters_.empty()) {
|
||||
// Start async thread for loading the session
|
||||
// Will be obtained in the future in update()
|
||||
sessionImporters_.emplace_back( std::async(std::launch::async, Session::load, filename) );
|
||||
sessionImporters_.emplace_back( std::async(std::launch::async, Session::load, filename, 0) );
|
||||
}
|
||||
#else
|
||||
merge( Session::load(filename) );
|
||||
#endif
|
||||
}
|
||||
|
||||
void Mixer::import(SessionSource *source)
|
||||
{
|
||||
sessionSourceToImport_.push_back( source );
|
||||
}
|
||||
|
||||
|
||||
void Mixer::merge(Session *session)
|
||||
{
|
||||
if ( session == nullptr ) {
|
||||
@@ -826,11 +1009,76 @@ void Mixer::merge(Session *session)
|
||||
return;
|
||||
}
|
||||
|
||||
// new state in history manager
|
||||
Action::manager().store( std::to_string(session->numSource()) + std::string(" sources imported."));
|
||||
|
||||
// import every sources
|
||||
for ( Source *s = session->popSource(); s != nullptr; s = session->popSource()) {
|
||||
// avoid name duplicates
|
||||
renameSource(s, s->name());
|
||||
insertSource(s);
|
||||
|
||||
// Add source to Session
|
||||
session_->addSource(s);
|
||||
|
||||
// Attach source to Mixer
|
||||
attach(s);
|
||||
}
|
||||
|
||||
// needs to update !
|
||||
View::need_deep_update_++;
|
||||
|
||||
// avoid display issues
|
||||
current_view_->update(0.f);
|
||||
}
|
||||
|
||||
void Mixer::merge(SessionSource *source)
|
||||
{
|
||||
if ( source == nullptr ) {
|
||||
Log::Warning("Failed to import Session Source.");
|
||||
return;
|
||||
}
|
||||
|
||||
// new state in history manager
|
||||
Action::manager().store( source->name().c_str() + std::string(" imported."));
|
||||
|
||||
Session *session = source->detach();
|
||||
|
||||
// import every sources
|
||||
for ( Source *s = session->popSource(); s != nullptr; s = session->popSource()) {
|
||||
|
||||
// avoid name duplicates
|
||||
renameSource(s, s->name());
|
||||
|
||||
// scale alpha
|
||||
s->setAlpha( s->alpha() * source->alpha() );
|
||||
|
||||
// set depth at given location
|
||||
s->group(View::LAYER)->translation_.z = source->depth() + (s->depth() / MAX_DEPTH);
|
||||
|
||||
// set location
|
||||
// a. transform of node to import
|
||||
Group *sNode = s->group(View::GEOMETRY);
|
||||
glm::mat4 sTransform = GlmToolkit::transform(sNode->translation_, sNode->rotation_, sNode->scale_);
|
||||
// b. transform of session source
|
||||
Group *sourceNode = source->group(View::GEOMETRY);
|
||||
glm::mat4 sourceTransform = GlmToolkit::transform(sourceNode->translation_, sourceNode->rotation_, sourceNode->scale_);
|
||||
// c. combined transform of source and session source
|
||||
sourceTransform *= sTransform;
|
||||
GlmToolkit::inverse_transform(sourceTransform, sNode->translation_, sNode->rotation_, sNode->scale_);
|
||||
|
||||
// Add source to Session
|
||||
session_->addSource(s);
|
||||
|
||||
// Attach source to Mixer
|
||||
attach(s);
|
||||
}
|
||||
|
||||
// needs to update !
|
||||
View::need_deep_update_++;
|
||||
|
||||
// avoid display issues
|
||||
current_view_->update(0.f);
|
||||
|
||||
}
|
||||
|
||||
void Mixer::swap()
|
||||
@@ -890,8 +1138,7 @@ void Mixer::close()
|
||||
if (Settings::application.smooth_transition)
|
||||
{
|
||||
// create empty SessionSource to be used for the smooth transition
|
||||
SessionSource *ts = new SessionSource();
|
||||
ts->load();
|
||||
SessionFileSource *ts = new SessionFileSource;
|
||||
|
||||
// insert source and switch to transition view
|
||||
insertSource(ts, View::TRANSITION);
|
||||
@@ -923,10 +1170,8 @@ void Mixer::clear()
|
||||
|
||||
void Mixer::set(Session *s)
|
||||
{
|
||||
if ( s == nullptr ) {
|
||||
Log::Warning("Session loading cancelled.");
|
||||
if ( s == nullptr )
|
||||
return;
|
||||
}
|
||||
|
||||
// delete previous back session if needed
|
||||
if (back_session_)
|
||||
@@ -958,7 +1203,13 @@ void Mixer::paste(const std::string& clipboard)
|
||||
XMLElement* sourceNode = root->FirstChildElement("Source");
|
||||
for( ; sourceNode ; sourceNode = sourceNode->NextSiblingElement())
|
||||
{
|
||||
addSource(loader.cloneOrCreateSource(sourceNode));
|
||||
Source *s = loader.createSource(sourceNode);
|
||||
if (s) {
|
||||
// Add source to Session
|
||||
session_->addSource(s);
|
||||
// Add source to Mixer
|
||||
addSource(s);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
19
Mixer.h
19
Mixer.h
@@ -5,6 +5,8 @@
|
||||
#include "Session.h"
|
||||
#include "Selection.h"
|
||||
|
||||
class SessionSource;
|
||||
|
||||
class Mixer
|
||||
{
|
||||
// Private Constructor
|
||||
@@ -43,6 +45,7 @@ public:
|
||||
Source * createSourcePattern(uint pattern, glm::ivec2 res);
|
||||
Source * createSourceDevice (const std::string &namedevice);
|
||||
Source * createSourceNetwork(const std::string &nameconnection);
|
||||
Source * createSourceGroup ();
|
||||
|
||||
// operations on sources
|
||||
void addSource (Source *s);
|
||||
@@ -50,7 +53,9 @@ public:
|
||||
void renameSource (Source *s, const std::string &newname);
|
||||
void attach (Source *s);
|
||||
void detach (Source *s);
|
||||
void deselect (Source *s);
|
||||
void deleteSelection();
|
||||
void groupSelection();
|
||||
|
||||
// current source
|
||||
Source * currentSource ();
|
||||
@@ -74,8 +79,8 @@ public:
|
||||
View *view (View::Mode m = View::INVALID);
|
||||
void setView (View::Mode m);
|
||||
|
||||
void conceal(Source *s);
|
||||
void uncover(Source *s);
|
||||
void conceal (Source *s);
|
||||
void uncover (Source *s);
|
||||
bool concealed(Source *s);
|
||||
|
||||
// manipulate, load and save sessions
|
||||
@@ -85,8 +90,10 @@ public:
|
||||
void saveas (const std::string& filename);
|
||||
void load (const std::string& filename);
|
||||
void import (const std::string& filename);
|
||||
void merge (Session *s);
|
||||
void set (Session *s);
|
||||
void import (SessionSource *source);
|
||||
void merge (Session *session);
|
||||
void merge (SessionSource *source);
|
||||
void set (Session *session);
|
||||
|
||||
// operations depending on transition mode
|
||||
void close ();
|
||||
@@ -105,7 +112,9 @@ protected:
|
||||
|
||||
SourceList candidate_sources_;
|
||||
SourceList stash_;
|
||||
void insertSource(Source *s, View::Mode m = View::INVALID);
|
||||
void insertSource (Source *s, View::Mode m = View::INVALID);
|
||||
bool replaceSource (Source *from, Source *to);
|
||||
bool recreateSource(Source *s);
|
||||
|
||||
void setCurrentSource(SourceList::iterator it);
|
||||
SourceList::iterator current_source_;
|
||||
|
||||
@@ -274,8 +274,8 @@ NetworkSource::NetworkSource() : StreamSource()
|
||||
stream_ = (Stream *) new NetworkStream;
|
||||
|
||||
// set symbol
|
||||
symbol_ = new Symbol(Symbol::SHARE, glm::vec3(0.8f, 0.8f, 0.01f));
|
||||
|
||||
symbol_ = new Symbol(Symbol::SHARE, glm::vec3(0.75f, 0.75f, 0.01f));
|
||||
symbol_->scale_.y = 1.5f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -137,7 +137,8 @@ PatternSource::PatternSource() : StreamSource()
|
||||
stream_ = (Stream *) new Pattern;
|
||||
|
||||
// set symbol
|
||||
symbol_ = new Symbol(Symbol::PATTERN, glm::vec3(0.8f, 0.8f, 0.01f));
|
||||
symbol_ = new Symbol(Symbol::PATTERN, glm::vec3(0.75f, 0.75f, 0.01f));
|
||||
symbol_->scale_.y = 1.5f;
|
||||
}
|
||||
|
||||
void PatternSource::setPattern(uint type, glm::ivec2 resolution)
|
||||
|
||||
@@ -35,7 +35,7 @@ public:
|
||||
Pattern *pattern() const;
|
||||
void setPattern(uint type, glm::ivec2 resolution);
|
||||
|
||||
glm::ivec2 icon() const override { return glm::ivec2(12, 5); }
|
||||
glm::ivec2 icon() const override { return glm::ivec2(11, 5); }
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -132,6 +132,8 @@ void PickingVisitor::visit(Handles &n)
|
||||
glm::vec4 vec = modelview_ * glm::vec4(1.f, 0.f, 0.f, 0.f);
|
||||
rot.z = glm::orientedAngle( glm::vec3(1.f, 0.f, 0.f), glm::normalize(glm::vec3(vec)), glm::vec3(0.f, 0.f, 1.f) );
|
||||
ctm = glm::rotate(glm::identity<glm::mat4>(), -rot.z, glm::vec3(0.f, 0.f, 1.f)) * modelview_ ;
|
||||
vec = ctm * glm::vec4(1.f, 1.f, 0.f, 0.f);
|
||||
glm::vec4 mirror = glm::sign(vec);
|
||||
|
||||
bool picked = false;
|
||||
if ( n.type() == Handles::RESIZE ) {
|
||||
@@ -153,24 +155,29 @@ void PickingVisitor::visit(Handles &n)
|
||||
}
|
||||
else if ( n.type() == Handles::ROTATE ){
|
||||
// the icon for rotation is on the right top corner at (0.12, 0.12) in scene coordinates
|
||||
glm::vec4 pos = glm::inverse(ctm) * glm::vec4( 0.12f, 0.12f, 0.f, 0.f );
|
||||
glm::vec4 pos = glm::inverse(ctm) * ( mirror * glm::vec4( 0.12f, 0.12f, 0.f, 0.f ) );
|
||||
picked = glm::length( glm::vec2( 1.f, 1.f) + glm::vec2(pos) - glm::vec2(P) ) < 1.5f * scale;
|
||||
}
|
||||
else if ( n.type() == Handles::SCALE ){
|
||||
// the icon for scaling is on the right bottom corner at (0.12, -0.12) in scene coordinates
|
||||
glm::vec4 pos = glm::inverse(ctm) * glm::vec4( 0.12f, -0.12f, 0.f, 0.f );
|
||||
glm::vec4 pos = glm::inverse(ctm) * ( mirror * glm::vec4( 0.12f, -0.12f, 0.f, 0.f ) );
|
||||
picked = glm::length( glm::vec2( 1.f, -1.f) + glm::vec2(pos) - glm::vec2(P) ) < 1.5f * scale;
|
||||
}
|
||||
else if ( n.type() == Handles::CROP ){
|
||||
// the icon for cropping is on the left bottom corner at (0.12, 0.12) in scene coordinates
|
||||
glm::vec4 pos = glm::inverse(ctm) * glm::vec4( 0.12f, 0.12f, 0.f, 0.f );
|
||||
glm::vec4 pos = glm::inverse(ctm) * ( mirror * glm::vec4( 0.12f, 0.12f, 0.f, 0.f ) );
|
||||
picked = glm::length( glm::vec2( -1.f, -1.f) + glm::vec2(pos) - glm::vec2(P) ) < 1.5f * scale;
|
||||
}
|
||||
else if ( n.type() == Handles::MENU ){
|
||||
// the icon for restore is on the left top corner at (-0.12, 0.12) in scene coordinates
|
||||
glm::vec4 pos = glm::inverse(ctm) * glm::vec4( -0.12f, 0.12f, 0.f, 0.f );
|
||||
// the icon for menu is on the left top corner at (-0.12, 0.12) in scene coordinates
|
||||
glm::vec4 pos = glm::inverse(ctm) * ( mirror * glm::vec4( -0.12f, 0.12f, 0.f, 0.f ) );
|
||||
picked = glm::length( glm::vec2( -1.f, 1.f) + glm::vec2(pos) - glm::vec2(P) ) < 1.5f * scale;
|
||||
}
|
||||
else if ( n.type() == Handles::LOCKED || n.type() == Handles::UNLOCKED ){
|
||||
// the icon for lock is on the right bottom corner at (-0.12, 0.12) in scene coordinates
|
||||
glm::vec4 pos = glm::inverse(ctm) * ( mirror * glm::vec4( -0.12f, 0.12f, 0.f, 0.f ) );
|
||||
picked = glm::length( glm::vec2( 1.f, -1.f) + glm::vec2(pos) - glm::vec2(P) ) < 1.5f * scale;
|
||||
}
|
||||
|
||||
if ( picked )
|
||||
// add this to the nodes picked
|
||||
|
||||
257
Primitives.cpp
257
Primitives.cpp
@@ -11,6 +11,7 @@
|
||||
#include <glm/gtc/type_ptr.hpp>
|
||||
#include <glm/gtc/matrix_access.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <glm/gtx/vector_angle.hpp>
|
||||
#include <glm/gtc/constants.hpp>
|
||||
|
||||
#define GLM_ENABLE_EXPERIMENTAL
|
||||
@@ -224,6 +225,204 @@ void Points::accept(Visitor& v)
|
||||
v.visit(*this);
|
||||
}
|
||||
|
||||
|
||||
|
||||
HLine::HLine(float linewidth): Primitive(new Shader), width(linewidth)
|
||||
{
|
||||
// 1 3
|
||||
// +-------+ ^
|
||||
// / | / | \ |
|
||||
// +-----+ => 0 + | / | + 5 | linewidth
|
||||
// -1 1 \ | / | / |
|
||||
// +-------+ v
|
||||
// 2 4
|
||||
//
|
||||
points_ = std::vector<glm::vec3> { glm::vec3( -1.f, 0.f, 0.f ),
|
||||
glm::vec3( -0.999f, 0.001f, 0.f ),
|
||||
glm::vec3( -0.999f, -0.001f, 0.f ),
|
||||
glm::vec3( 0.999f, 0.001f, 0.f ),
|
||||
glm::vec3( 0.999f, -0.001f, 0.f ),
|
||||
glm::vec3( 1.f, 0.f, 0.f ) };
|
||||
colors_ = std::vector<glm::vec4> { glm::vec4( 1.f, 1.f, 1.f , 1.f ), glm::vec4( 1.f, 1.f, 1.f, 1.f ),
|
||||
glm::vec4( 1.f, 1.f, 1.f, 1.f ), glm::vec4( 1.f, 1.f, 1.f, 1.f ),
|
||||
glm::vec4( 1.f, 1.f, 1.f, 1.f ), glm::vec4( 1.f, 1.f, 1.f, 1.f ) };
|
||||
indices_ = std::vector<uint> { 0, 1, 2, 3, 4, 5 };
|
||||
drawMode_ = GL_TRIANGLE_STRIP;
|
||||
|
||||
// default scale
|
||||
scale_.y = width;
|
||||
|
||||
//default color
|
||||
color = glm::vec4( 1.f, 1.f, 1.f, 1.f);
|
||||
}
|
||||
|
||||
HLine::~HLine()
|
||||
{
|
||||
// do NOT delete vao_ (unique)
|
||||
vao_ = 0;
|
||||
}
|
||||
|
||||
void HLine::init()
|
||||
{
|
||||
// use static unique vertex array object
|
||||
static uint unique_vao_ = 0;
|
||||
static uint unique_drawCount = 0;
|
||||
if (unique_vao_) {
|
||||
// 1. only init Node (not the primitive vao)
|
||||
Node::init();
|
||||
// 2. use the global vertex array object
|
||||
vao_ = unique_vao_;
|
||||
drawCount_ = unique_drawCount;
|
||||
// compute AxisAlignedBoundingBox
|
||||
bbox_.extend(points_);
|
||||
// arrays of vertices are not needed anymore
|
||||
points_.clear();
|
||||
colors_.clear();
|
||||
texCoords_.clear();
|
||||
indices_.clear();
|
||||
}
|
||||
else {
|
||||
// 1. init the Primitive (only once)
|
||||
Primitive::init();
|
||||
// 2. remember global vertex array object
|
||||
unique_vao_ = vao_;
|
||||
unique_drawCount = drawCount_;
|
||||
// 3. unique_vao_ will NOT be deleted
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void HLine::draw(glm::mat4 modelview, glm::mat4 projection)
|
||||
{
|
||||
// extract pure scaling from modelview (without rotation)
|
||||
glm::mat4 ctm;
|
||||
glm::vec3 rot(0.f);
|
||||
glm::vec4 vec = modelview * glm::vec4(1.f, 0.f, 0.f, 0.f);
|
||||
rot.z = glm::orientedAngle( glm::vec3(1.f, 0.f, 0.f), glm::normalize(glm::vec3(vec)), glm::vec3(0.f, 0.f, 1.f) );
|
||||
ctm = glm::rotate(glm::identity<glm::mat4>(), -rot.z, glm::vec3(0.f, 0.f, 1.f)) * modelview ;
|
||||
vec = ctm * glm::vec4(1.f, 1.f, 0.f, 0.f);
|
||||
|
||||
// Change transform to use linewidth independently of scale in Y (vertical)
|
||||
scale_.y = (float) width / vec.y;
|
||||
update(0);
|
||||
|
||||
// change color
|
||||
shader_->color = color;
|
||||
|
||||
Primitive::draw(modelview, projection);
|
||||
}
|
||||
|
||||
VLine::VLine(float linewidth): Primitive(new Shader), width(linewidth)
|
||||
{
|
||||
points_ = std::vector<glm::vec3> { glm::vec3( 0.f, -1.f, 0.f ),
|
||||
glm::vec3( 0.001f, -0.999f, 0.f ),
|
||||
glm::vec3( -0.001f, -0.999f, 0.f ),
|
||||
glm::vec3( 0.001f, 0.999f, 0.f ),
|
||||
glm::vec3( -0.001f, 0.999f, 0.f ),
|
||||
glm::vec3( 0.f, 1.f, 0.f )};
|
||||
colors_ = std::vector<glm::vec4> { glm::vec4( 1.f, 1.f, 1.f , 1.f ), glm::vec4( 1.f, 1.f, 1.f, 1.f ),
|
||||
glm::vec4( 1.f, 1.f, 1.f, 1.f ), glm::vec4( 1.f, 1.f, 1.f, 1.f ),
|
||||
glm::vec4( 1.f, 1.f, 1.f, 1.f ), glm::vec4( 1.f, 1.f, 1.f, 1.f ) };
|
||||
indices_ = std::vector<uint> { 0, 1, 2, 3, 4, 5 };
|
||||
drawMode_ = GL_TRIANGLE_STRIP;
|
||||
|
||||
// default scale
|
||||
scale_.x = width;
|
||||
|
||||
// default color
|
||||
color = glm::vec4( 1.f, 1.f, 1.f, 1.f);
|
||||
}
|
||||
|
||||
VLine::~VLine()
|
||||
{
|
||||
// do NOT delete vao_ (unique)
|
||||
vao_ = 0;
|
||||
}
|
||||
|
||||
void VLine::init()
|
||||
{
|
||||
// use static unique vertex array object
|
||||
static uint unique_vao_ = 0;
|
||||
static uint unique_drawCount = 0;
|
||||
if (unique_vao_) {
|
||||
// 1. only init Node (not the primitive vao)
|
||||
Node::init();
|
||||
// 2. use the global vertex array object
|
||||
vao_ = unique_vao_;
|
||||
drawCount_ = unique_drawCount;
|
||||
// compute AxisAlignedBoundingBox
|
||||
bbox_.extend(points_);
|
||||
// arrays of vertices are not needed anymore
|
||||
points_.clear();
|
||||
colors_.clear();
|
||||
texCoords_.clear();
|
||||
indices_.clear();
|
||||
}
|
||||
else {
|
||||
// 1. init the Primitive (only once)
|
||||
Primitive::init();
|
||||
// 2. remember global vertex array object
|
||||
unique_vao_ = vao_;
|
||||
unique_drawCount = drawCount_;
|
||||
// 3. unique_vao_ will NOT be deleted
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void VLine::draw(glm::mat4 modelview, glm::mat4 projection)
|
||||
{
|
||||
// extract pure scaling from modelview (without rotation)
|
||||
glm::mat4 ctm;
|
||||
glm::vec3 rot(0.f);
|
||||
glm::vec4 vec = modelview * glm::vec4(1.f, 0.f, 0.f, 0.f);
|
||||
rot.z = glm::orientedAngle( glm::vec3(1.f, 0.f, 0.f), glm::normalize(glm::vec3(vec)), glm::vec3(0.f, 0.f, 1.f) );
|
||||
ctm = glm::rotate(glm::identity<glm::mat4>(), -rot.z, glm::vec3(0.f, 0.f, 1.f)) * modelview ;
|
||||
vec = ctm * glm::vec4(1.f, 1.f, 0.f, 0.f);
|
||||
|
||||
// Change transform to use linewidth independently of scale in X (horizontal)
|
||||
scale_.x = width / vec.x;
|
||||
update(0);
|
||||
|
||||
// change color
|
||||
shader_->color = color;
|
||||
|
||||
Primitive::draw(modelview, projection);
|
||||
}
|
||||
|
||||
LineSquare::LineSquare(float linewidth) : Group()
|
||||
{
|
||||
top_ = new HLine(linewidth);
|
||||
top_->translation_ = glm::vec3(0.f, 1.f, 0.f);
|
||||
attach(top_);
|
||||
bottom_ = new HLine(linewidth);
|
||||
bottom_->translation_ = glm::vec3(0.f, -1.f, 0.f);
|
||||
attach(bottom_);
|
||||
left_ = new VLine(linewidth);
|
||||
left_->translation_ = glm::vec3(-1.f, 0.f, 0.f);
|
||||
attach(left_);
|
||||
right_ = new VLine(linewidth);
|
||||
right_->translation_ = glm::vec3(1.f, 0.f, 0.f);
|
||||
attach(right_);
|
||||
}
|
||||
|
||||
|
||||
void LineSquare::setLineWidth(float v)
|
||||
{
|
||||
top_->width = v;
|
||||
bottom_->width = v;
|
||||
left_->width = v;
|
||||
right_->width = v;
|
||||
}
|
||||
|
||||
void LineSquare::setColor(glm::vec4 c)
|
||||
{
|
||||
top_->color = c;
|
||||
bottom_->color = c;
|
||||
left_->color = c;
|
||||
right_->color = c;
|
||||
}
|
||||
|
||||
|
||||
LineStrip::LineStrip(std::vector<glm::vec3> points, std::vector<glm::vec4> colors, uint linewidth) : Primitive(new Shader), linewidth_(linewidth)
|
||||
{
|
||||
for(size_t i = 0; i < points.size(); ++i)
|
||||
@@ -263,64 +462,6 @@ void LineStrip::accept(Visitor& v)
|
||||
}
|
||||
|
||||
|
||||
|
||||
static const std::vector<glm::vec3> square_points {
|
||||
glm::vec3( -1.f, -1.f, 0.f ), glm::vec3( -1.f, 1.f, 0.f ),
|
||||
glm::vec3( 1.f, 1.f, 0.f ), glm::vec3( 1.f, -1.f, 0.f ),
|
||||
glm::vec3( -1.f, -1.f, 0.f )
|
||||
};
|
||||
|
||||
static const std::vector<glm::vec4> square_colors {
|
||||
glm::vec4( 1.f, 1.f, 1.f, 1.f ), glm::vec4( 1.f, 1.f, 1.f, 1.f ),
|
||||
glm::vec4( 1.f, 1.f, 1.f, 1.f ), glm::vec4( 1.f, 1.f, 1.f, 1.f ),
|
||||
glm::vec4( 1.f, 1.f, 1.f, 1.f )
|
||||
};
|
||||
|
||||
LineSquare::LineSquare(uint linewidth) : LineStrip(square_points, square_colors, linewidth)
|
||||
{
|
||||
}
|
||||
|
||||
void LineSquare::init()
|
||||
{
|
||||
// use static unique vertex array object
|
||||
static uint unique_vao_ = 0;
|
||||
static uint unique_drawCount = 0;
|
||||
if (unique_vao_) {
|
||||
// 1. only init Node (not the primitive vao)
|
||||
Node::init();
|
||||
// 2. use the global vertex array object
|
||||
vao_ = unique_vao_;
|
||||
drawCount_ = unique_drawCount;
|
||||
// compute AxisAlignedBoundingBox
|
||||
bbox_.extend(points_);
|
||||
// arrays of vertices are not needed anymore
|
||||
points_.clear();
|
||||
colors_.clear();
|
||||
texCoords_.clear();
|
||||
indices_.clear();
|
||||
}
|
||||
else {
|
||||
// 1. init the Primitive (only once)
|
||||
Primitive::init();
|
||||
// 2. remember global vertex array object
|
||||
unique_vao_ = vao_;
|
||||
unique_drawCount = drawCount_;
|
||||
}
|
||||
}
|
||||
|
||||
void LineSquare::accept(Visitor& v)
|
||||
{
|
||||
Primitive::accept(v);
|
||||
v.visit(*this);
|
||||
}
|
||||
|
||||
LineSquare::~LineSquare()
|
||||
{
|
||||
// do NOT delete vao_ (unique)
|
||||
vao_ = 0;
|
||||
}
|
||||
|
||||
|
||||
LineCircle::LineCircle(uint linewidth) : LineStrip(std::vector<glm::vec3>(), std::vector<glm::vec4>(), linewidth)
|
||||
{
|
||||
static int N = 72;
|
||||
|
||||
61
Primitives.h
61
Primitives.h
@@ -124,6 +124,52 @@ public:
|
||||
};
|
||||
|
||||
|
||||
class HLine : public Primitive {
|
||||
|
||||
public:
|
||||
|
||||
HLine(float width = 1.f);
|
||||
virtual ~HLine();
|
||||
|
||||
void init () override;
|
||||
void draw(glm::mat4 modelview, glm::mat4 projection) override;
|
||||
|
||||
glm::vec4 color;
|
||||
float width;
|
||||
};
|
||||
|
||||
class VLine : public Primitive {
|
||||
|
||||
public:
|
||||
|
||||
VLine(float width = 1.f);
|
||||
virtual ~VLine();
|
||||
|
||||
void init () override;
|
||||
void draw(glm::mat4 modelview, glm::mat4 projection) override;
|
||||
|
||||
glm::vec4 color;
|
||||
float width;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief The LineSquare class is a group of 4 lines (width & height = 1.0)
|
||||
*/
|
||||
class LineSquare : public Group {
|
||||
|
||||
HLine *top_, *bottom_;
|
||||
VLine *left_, *right_;
|
||||
|
||||
public:
|
||||
LineSquare(float linewidth = 1.f);
|
||||
|
||||
void setLineWidth(float v);
|
||||
inline float lineWidth() const { return top_->width; }
|
||||
|
||||
void setColor(glm::vec4 c);
|
||||
inline glm::vec4 color() const { return top_->color; }
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief The LineStrip class is a Primitive to draw lines
|
||||
*/
|
||||
@@ -145,21 +191,6 @@ public:
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @brief The LineSquare class is a square LineStrip (width & height = 1.0)
|
||||
*/
|
||||
class LineSquare : public LineStrip {
|
||||
|
||||
public:
|
||||
LineSquare(uint linewidth = 1);
|
||||
|
||||
void init() override;
|
||||
void accept(Visitor& v) override;
|
||||
|
||||
virtual ~LineSquare();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @brief The LineCircle class is a circular LineStrip (diameter = 1.0)
|
||||
*/
|
||||
|
||||
@@ -145,7 +145,7 @@ const std::vector<std::string> VideoRecorder::profile_description {
|
||||
// "video/x-raw, format=I420 ! x264enc pass=4 quantizer=26 speed-preset=3 threads=4 ! video/x-h264, profile=baseline ! h264parse ! ",
|
||||
"video/x-raw, format=I420 ! x264enc tune=\"zerolatency\" threads=4 ! video/x-h264, profile=baseline ! h264parse ! ",
|
||||
#else
|
||||
"video/x-raw, format=I420 ! vtenc_h264_hw realtime=1 ! h264parse ! ",
|
||||
"video/x-raw, format=I420 ! vtenc_h264_hw realtime=1 allow-frame-reordering=0 ! h264parse ! ",
|
||||
#endif
|
||||
"video/x-raw, format=Y444_10LE ! x264enc pass=4 quantizer=16 speed-preset=4 threads=4 ! video/x-h264, profile=(string)high-4:4:4 ! h264parse ! ",
|
||||
// Control x265 encoder quality :
|
||||
|
||||
@@ -158,8 +158,8 @@ bool Rendering::init()
|
||||
gst_init (NULL, NULL);
|
||||
|
||||
// increase selection rank for GPU decoding plugins
|
||||
std::list<std::string> gpuplugins = GstToolkit::enable_gpu_decoding_plugins(Settings::application.render.gpu_decoding);
|
||||
if (Settings::application.render.gpu_decoding) {
|
||||
std::list<std::string> gpuplugins = GstToolkit::enable_gpu_decoding_plugins();
|
||||
if (gpuplugins.size() > 0) {
|
||||
Log::Info("Video decoding favoring the following GPU decoding plugin(s):");
|
||||
for(auto it = gpuplugins.begin(); it != gpuplugins.end(); it++)
|
||||
@@ -229,6 +229,8 @@ void Rendering::pushBackDrawCallback(RenderingCallback function)
|
||||
|
||||
void Rendering::draw()
|
||||
{
|
||||
// guint64 _time = gst_util_get_timestamp ();
|
||||
|
||||
// operate on main window context
|
||||
main_.makeCurrent();
|
||||
|
||||
@@ -275,10 +277,13 @@ void Rendering::draw()
|
||||
|
||||
// software framerate limiter 60FPS if not v-sync
|
||||
if ( Settings::application.render.vsync < 1 ) {
|
||||
int dt = 18000 - int( 1000.f * Mixer::manager().dt() );
|
||||
if (dt > 100)
|
||||
g_usleep( dt );
|
||||
static GTimer *timer = g_timer_new ();
|
||||
double elapsed = g_timer_elapsed (timer, NULL) * 1000000.0;
|
||||
if (elapsed < 16000)
|
||||
g_usleep( 16000 - (gulong)elapsed );
|
||||
g_timer_start(timer);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -673,9 +678,11 @@ bool RenderingWindow::init(int index, GLFWwindow *share)
|
||||
|
||||
// This hint can improve the speed of texturing when perspective-correct texture coordinate interpolation isn't needed
|
||||
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
|
||||
//
|
||||
// fast mipmaps (we are not really using mipmaps anyway)
|
||||
glHint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST);
|
||||
// acurate derivative for shader
|
||||
glHint(GL_FRAGMENT_SHADER_DERIVATIVE_HINT, GL_NICEST);
|
||||
glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST);
|
||||
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
|
||||
|
||||
// if not main window
|
||||
if ( master_ != NULL ) {
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
#include <algorithm>
|
||||
|
||||
#include "SearchVisitor.h"
|
||||
|
||||
#include "Scene.h"
|
||||
#include "MediaSource.h"
|
||||
#include "Session.h"
|
||||
#include "SessionSource.h"
|
||||
|
||||
SearchVisitor::SearchVisitor(Node *node) : Visitor(), node_(node), found_(false)
|
||||
{
|
||||
@@ -39,3 +44,65 @@ void SearchVisitor::visit(Scene &n)
|
||||
// search only in workspace
|
||||
n.ws()->accept(*this);
|
||||
}
|
||||
|
||||
|
||||
|
||||
SearchFileVisitor::SearchFileVisitor() : Visitor()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void SearchFileVisitor::visit(Node &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void SearchFileVisitor::visit(Group &n)
|
||||
{
|
||||
for (NodeSet::iterator node = n.begin(); node != n.end(); node++) {
|
||||
(*node)->accept(*this);
|
||||
}
|
||||
}
|
||||
|
||||
void SearchFileVisitor::visit(Switch &n)
|
||||
{
|
||||
if (n.numChildren()>0)
|
||||
n.activeChild()->accept(*this);
|
||||
}
|
||||
|
||||
|
||||
void SearchFileVisitor::visit(Scene &n)
|
||||
{
|
||||
// search only in workspace
|
||||
n.ws()->accept(*this);
|
||||
}
|
||||
|
||||
|
||||
void SearchFileVisitor::visit (MediaSource& s)
|
||||
{
|
||||
filenames_.push_back( s.path() );
|
||||
}
|
||||
|
||||
void SearchFileVisitor::visit (SessionFileSource& s)
|
||||
{
|
||||
|
||||
filenames_.push_back( s.path() );
|
||||
}
|
||||
|
||||
std::list<std::string> SearchFileVisitor::parse (Session *se)
|
||||
{
|
||||
SearchFileVisitor sv;
|
||||
|
||||
for (auto iter = se->begin(); iter != se->end(); iter++){
|
||||
(*iter)->accept(sv);
|
||||
}
|
||||
|
||||
return sv.filenames();
|
||||
}
|
||||
|
||||
bool SearchFileVisitor::find (Session *se, std::string path)
|
||||
{
|
||||
std::list<std::string> filenames = parse (se);
|
||||
return std::find(filenames.begin(), filenames.end(), path) != filenames.end();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
#ifndef SEARCHVISITOR_H
|
||||
#define SEARCHVISITOR_H
|
||||
|
||||
#include <list>
|
||||
#include <string>
|
||||
#include "Visitor.h"
|
||||
|
||||
class Session;
|
||||
|
||||
class SearchVisitor: public Visitor
|
||||
{
|
||||
Node *node_;
|
||||
@@ -14,12 +18,35 @@ public:
|
||||
inline Node *node() const { return found_ ? node_ : nullptr; }
|
||||
|
||||
// Elements of Scene
|
||||
void visit(Scene& n);
|
||||
void visit(Node& n);
|
||||
void visit(Primitive&) {}
|
||||
void visit(Group& n);
|
||||
void visit(Switch& n);
|
||||
void visit (Scene& n) override;
|
||||
void visit (Node& n) override;
|
||||
void visit (Primitive&) override {}
|
||||
void visit (Group& n) override;
|
||||
void visit (Switch& n) override;
|
||||
|
||||
};
|
||||
|
||||
class SearchFileVisitor: public Visitor
|
||||
{
|
||||
std::list<std::string> filenames_;
|
||||
|
||||
public:
|
||||
SearchFileVisitor();
|
||||
inline std::list<std::string> filenames() const { return filenames_; }
|
||||
|
||||
// Elements of Scene
|
||||
void visit (Scene& n) override;
|
||||
void visit (Node& n) override;
|
||||
void visit (Primitive&) override {}
|
||||
void visit (Group& n) override;
|
||||
void visit (Switch& n) override;
|
||||
|
||||
// Sources
|
||||
void visit (MediaSource& s) override;
|
||||
void visit (SessionFileSource& s) override;
|
||||
|
||||
static std::list<std::string> parse (Session *se);
|
||||
static bool find (Session *se, std::string path);
|
||||
};
|
||||
|
||||
#endif // SEARCHVISITOR_H
|
||||
|
||||
@@ -117,6 +117,12 @@ Source *Selection::front()
|
||||
return selection_.front();
|
||||
}
|
||||
|
||||
void Selection::pop_front()
|
||||
{
|
||||
if (!selection_.empty()) // TODO set mode ?
|
||||
selection_.pop_front();
|
||||
}
|
||||
|
||||
bool Selection::empty()
|
||||
{
|
||||
return selection_.empty();
|
||||
@@ -156,9 +162,21 @@ std::string Selection::xml()
|
||||
xmlDoc.InsertEndChild(selectionNode);
|
||||
|
||||
// fill doc
|
||||
SourceList selection_clones_;
|
||||
SessionVisitor sv(&xmlDoc, selectionNode);
|
||||
for (auto iter = selection_.begin(); iter != selection_.end(); iter++, sv.setRoot(selectionNode) )
|
||||
for (auto iter = selection_.begin(); iter != selection_.end(); iter++, sv.setRoot(selectionNode) ){
|
||||
// keep the clones for later
|
||||
CloneSource *clone = dynamic_cast<CloneSource *>(*iter);
|
||||
if (clone)
|
||||
(*iter)->accept(sv);
|
||||
else
|
||||
selection_clones_.push_back(*iter);
|
||||
}
|
||||
// add the clones at the end
|
||||
for (auto iter = selection_clones_.begin(); iter != selection_clones_.end(); iter++, sv.setRoot(selectionNode) ){
|
||||
|
||||
(*iter)->accept(sv);
|
||||
}
|
||||
|
||||
// get compact string
|
||||
tinyxml2::XMLPrinter xmlPrint(0, true);
|
||||
|
||||
@@ -22,6 +22,7 @@ public:
|
||||
SourceList::iterator begin ();
|
||||
SourceList::iterator end ();
|
||||
Source *front();
|
||||
void pop_front();
|
||||
bool contains (Source *s);
|
||||
bool empty();
|
||||
uint size ();
|
||||
|
||||
61
Session.cpp
61
Session.cpp
@@ -4,9 +4,9 @@
|
||||
#include "Settings.h"
|
||||
#include "FrameBuffer.h"
|
||||
#include "Session.h"
|
||||
#include "GarbageVisitor.h"
|
||||
#include "FrameGrabber.h"
|
||||
#include "SessionCreator.h"
|
||||
#include "SessionSource.h"
|
||||
|
||||
#include "Log.h"
|
||||
|
||||
@@ -15,7 +15,7 @@ Session::Session() : failedSource_(nullptr), active_(true), fading_target_(0.f)
|
||||
filename_ = "";
|
||||
|
||||
config_[View::RENDERING] = new Group;
|
||||
config_[View::RENDERING]->scale_ = FrameBuffer::getResolutionFromParameters(Settings::application.render.ratio, Settings::application.render.res);
|
||||
config_[View::RENDERING]->scale_ = glm::vec3(0.f);
|
||||
|
||||
config_[View::GEOMETRY] = new Group;
|
||||
config_[View::GEOMETRY]->scale_ = Settings::application.views[View::GEOMETRY].default_scale;
|
||||
@@ -63,11 +63,19 @@ void Session::setActive (bool on)
|
||||
// update all sources
|
||||
void Session::update(float dt)
|
||||
{
|
||||
failedSource_ = nullptr;
|
||||
// no update until render view is initialized
|
||||
if ( render_.frame() == nullptr )
|
||||
return;
|
||||
|
||||
// pre-render of all sources
|
||||
failedSource_ = nullptr;
|
||||
for( SourceList::iterator it = sources_.begin(); it != sources_.end(); it++){
|
||||
|
||||
// ensure the RenderSource is rendering this session
|
||||
RenderSource *s = dynamic_cast<RenderSource *>( *it );
|
||||
if ( s!= nullptr && s->session() != this )
|
||||
s->setSession(this);
|
||||
|
||||
if ( (*it)->failed() ) {
|
||||
failedSource_ = (*it);
|
||||
}
|
||||
@@ -91,32 +99,33 @@ void Session::update(float dt)
|
||||
// draw render view in Frame Buffer
|
||||
render_.draw();
|
||||
|
||||
// grab frames to recorders & streamers
|
||||
FrameGrabbing::manager().grabFrame(render_.frame(), dt);
|
||||
|
||||
}
|
||||
|
||||
|
||||
SourceList::iterator Session::addSource(Source *s)
|
||||
{
|
||||
SourceList::iterator its = sources_.end();
|
||||
|
||||
// lock before change
|
||||
access_.lock();
|
||||
|
||||
// find the source
|
||||
SourceList::iterator its = find(s);
|
||||
its = find(s);
|
||||
|
||||
// ok, its NOT in the list !
|
||||
if (its == sources_.end()) {
|
||||
// insert the source in the rendering
|
||||
render_.scene.ws()->attach(s->group(View::RENDERING));
|
||||
// insert the source to the beginning of the list
|
||||
sources_.push_front(s);
|
||||
// return the iterator to the source created at the beginning
|
||||
its = sources_.begin();
|
||||
}
|
||||
|
||||
// unlock access
|
||||
access_.unlock();
|
||||
|
||||
// return the iterator to the source created at the beginning
|
||||
return sources_.begin();
|
||||
return its;
|
||||
}
|
||||
|
||||
SourceList::iterator Session::deleteSource(Source *s)
|
||||
@@ -181,10 +190,12 @@ Source *Session::popSource()
|
||||
return s;
|
||||
}
|
||||
|
||||
void Session::setResolution(glm::vec3 resolution)
|
||||
void Session::setResolution(glm::vec3 resolution, bool useAlpha)
|
||||
{
|
||||
render_.setResolution(resolution);
|
||||
config_[View::RENDERING]->scale_ = resolution;
|
||||
// setup the render view: if not specified the default config resulution will be used
|
||||
render_.setResolution( resolution, useAlpha );
|
||||
// store the actual resolution set in the render view
|
||||
config_[View::RENDERING]->scale_ = render_.resolution();
|
||||
}
|
||||
|
||||
void Session::setFading(float f, bool forcenow)
|
||||
@@ -225,6 +236,11 @@ SourceList::iterator Session::find(Node *node)
|
||||
return std::find_if(sources_.begin(), sources_.end(), Source::hasNode(node));
|
||||
}
|
||||
|
||||
SourceList::iterator Session::find(float depth_from, float depth_to)
|
||||
{
|
||||
return std::find_if(sources_.begin(), sources_.end(), Source::hasDepth(depth_from, depth_to));
|
||||
}
|
||||
|
||||
uint Session::numSource() const
|
||||
{
|
||||
return sources_.size();
|
||||
@@ -275,6 +291,23 @@ int Session::index(SourceList::iterator it) const
|
||||
return index;
|
||||
}
|
||||
|
||||
void Session::move(int current_index, int target_index)
|
||||
{
|
||||
if ( current_index < 0 || current_index > (int) sources_.size()
|
||||
|| target_index < 0 || target_index > (int) sources_.size()
|
||||
|| target_index == current_index )
|
||||
return;
|
||||
|
||||
SourceList::iterator from = at(current_index);
|
||||
SourceList::iterator to = at(target_index);
|
||||
if ( target_index > current_index )
|
||||
to++;
|
||||
|
||||
Source *s = (*from);
|
||||
sources_.erase(from);
|
||||
sources_.insert(to, s);
|
||||
}
|
||||
|
||||
void Session::lock()
|
||||
{
|
||||
access_.lock();
|
||||
@@ -286,9 +319,9 @@ void Session::unlock()
|
||||
}
|
||||
|
||||
|
||||
Session *Session::load(const std::string& filename)
|
||||
Session *Session::load(const std::string& filename, uint recursion)
|
||||
{
|
||||
SessionCreator creator;
|
||||
SessionCreator creator(recursion);
|
||||
creator.load(filename);
|
||||
|
||||
return creator.session();
|
||||
|
||||
@@ -14,7 +14,7 @@ public:
|
||||
Session();
|
||||
~Session();
|
||||
|
||||
static Session *load(const std::string& filename);
|
||||
static Session *load(const std::string& filename, uint recursion = 0);
|
||||
|
||||
// add given source into the session
|
||||
SourceList::iterator addSource (Source *s);
|
||||
@@ -38,12 +38,14 @@ public:
|
||||
SourceList::iterator find (Source *s);
|
||||
SourceList::iterator find (std::string name);
|
||||
SourceList::iterator find (Node *node);
|
||||
SourceList::iterator find (float depth_from, float depth_to);
|
||||
|
||||
SourceList::iterator find (uint64_t id);
|
||||
std::list<uint64_t> getIdList() const;
|
||||
|
||||
SourceList::iterator at (int index);
|
||||
int index (SourceList::iterator it) const;
|
||||
int index (SourceList::iterator it) const;
|
||||
void move (int current_index, int target_index);
|
||||
|
||||
// update all sources and mark sources which failed
|
||||
void update (float dt);
|
||||
@@ -59,7 +61,7 @@ public:
|
||||
inline FrameBuffer *frame () const { return render_.frame(); }
|
||||
|
||||
// configure rendering resolution
|
||||
void setResolution(glm::vec3 resolution);
|
||||
void setResolution(glm::vec3 resolution, bool useAlpha = false);
|
||||
|
||||
// manipulate fading of output
|
||||
void setFading(float f, bool forcenow = false);
|
||||
|
||||
@@ -52,7 +52,7 @@ std::string SessionCreator::info(const std::string& filename)
|
||||
return ret;
|
||||
}
|
||||
|
||||
SessionCreator::SessionCreator(): SessionLoader(nullptr)
|
||||
SessionCreator::SessionCreator(int recursion): SessionLoader(nullptr, recursion)
|
||||
{
|
||||
|
||||
}
|
||||
@@ -85,12 +85,12 @@ void SessionCreator::load(const std::string& filename)
|
||||
// session file seems legit, create a session
|
||||
session_ = new Session;
|
||||
|
||||
// load views config (includes resolution of session rendering)
|
||||
loadConfig( xmlDoc_.FirstChildElement("Views") );
|
||||
|
||||
// ready to read sources
|
||||
SessionLoader::load( xmlDoc_.FirstChildElement("Session") );
|
||||
|
||||
// load optionnal config
|
||||
loadConfig( xmlDoc_.FirstChildElement("Views") );
|
||||
|
||||
// all good
|
||||
session_->setFilename(filename);
|
||||
}
|
||||
@@ -108,7 +108,7 @@ void SessionCreator::loadConfig(XMLElement *viewsNode)
|
||||
}
|
||||
}
|
||||
|
||||
SessionLoader::SessionLoader(Session *session): Visitor(), session_(session)
|
||||
SessionLoader::SessionLoader(Session *session, int recursion): Visitor(), session_(session), recursion_(recursion)
|
||||
{
|
||||
|
||||
}
|
||||
@@ -117,6 +117,11 @@ void SessionLoader::load(XMLElement *sessionNode)
|
||||
{
|
||||
sources_id_.clear();
|
||||
|
||||
if (recursion_ > MAX_SESSION_LEVEL) {
|
||||
Log::Warning("Recursive or imbricated sessions detected! Interrupting loading after %d iterations.\n", MAX_SESSION_LEVEL);
|
||||
return;
|
||||
}
|
||||
|
||||
if (sessionNode != nullptr && session_ != nullptr) {
|
||||
|
||||
XMLElement* sourceNode = sessionNode->FirstChildElement("Source");
|
||||
@@ -142,10 +147,13 @@ void SessionLoader::load(XMLElement *sessionNode)
|
||||
load_source = new MediaSource;
|
||||
}
|
||||
else if ( std::string(pType) == "SessionSource") {
|
||||
load_source = new SessionSource;
|
||||
load_source = new SessionFileSource;
|
||||
}
|
||||
else if ( std::string(pType) == "GroupSource") {
|
||||
load_source = new SessionGroupSource;
|
||||
}
|
||||
else if ( std::string(pType) == "RenderSource") {
|
||||
load_source = new RenderSource(session_);
|
||||
load_source = new RenderSource;
|
||||
}
|
||||
else if ( std::string(pType) == "PatternSource") {
|
||||
load_source = new PatternSource;
|
||||
@@ -220,7 +228,7 @@ void SessionLoader::load(XMLElement *sessionNode)
|
||||
|
||||
}
|
||||
|
||||
Source *SessionLoader::cloneOrCreateSource(tinyxml2::XMLElement *sourceNode)
|
||||
Source *SessionLoader::createSource(tinyxml2::XMLElement *sourceNode, bool clone_duplicates)
|
||||
{
|
||||
xmlCurrent_ = sourceNode;
|
||||
|
||||
@@ -228,10 +236,13 @@ Source *SessionLoader::cloneOrCreateSource(tinyxml2::XMLElement *sourceNode)
|
||||
Source *load_source = nullptr;
|
||||
bool is_clone = false;
|
||||
|
||||
SourceList::iterator sit = session_->end();
|
||||
// check if a source with the given id exists in the session
|
||||
uint64_t id__ = 0;
|
||||
xmlCurrent_->QueryUnsigned64Attribute("id", &id__);
|
||||
SourceList::iterator sit = session_->find(id__);
|
||||
if (clone_duplicates) {
|
||||
uint64_t id__ = 0;
|
||||
xmlCurrent_->QueryUnsigned64Attribute("id", &id__);
|
||||
sit = session_->find(id__);
|
||||
}
|
||||
|
||||
// no source with this id exists
|
||||
if ( sit == session_->end() ) {
|
||||
@@ -242,10 +253,13 @@ Source *SessionLoader::cloneOrCreateSource(tinyxml2::XMLElement *sourceNode)
|
||||
load_source = new MediaSource;
|
||||
}
|
||||
else if ( std::string(pType) == "SessionSource") {
|
||||
load_source = new SessionSource;
|
||||
load_source = new SessionFileSource;
|
||||
}
|
||||
else if ( std::string(pType) == "GroupSource") {
|
||||
load_source = new SessionGroupSource;
|
||||
}
|
||||
else if ( std::string(pType) == "RenderSource") {
|
||||
load_source = new RenderSource(session_);
|
||||
load_source = new RenderSource;
|
||||
}
|
||||
else if ( std::string(pType) == "PatternSource") {
|
||||
load_source = new PatternSource;
|
||||
@@ -278,8 +292,6 @@ Source *SessionLoader::cloneOrCreateSource(tinyxml2::XMLElement *sourceNode)
|
||||
// apply config to source
|
||||
if (load_source) {
|
||||
load_source->accept(*this);
|
||||
// reset mixing (force to place in mixing scene)
|
||||
load_source->group(View::MIXING)->translation_ = glm::vec3(DEFAULT_MIXING_TRANSLATION, 0.f);
|
||||
// increment depth for clones (avoid supperposition)
|
||||
if (is_clone)
|
||||
load_source->group(View::LAYER)->translation_.z += 0.2f;
|
||||
@@ -447,6 +459,9 @@ void SessionLoader::visit (Source& s)
|
||||
XMLElement* sourceNode = xmlCurrent_;
|
||||
const char *pName = sourceNode->Attribute("name");
|
||||
s.setName(pName);
|
||||
bool l = false;
|
||||
sourceNode->QueryBoolAttribute("locked", &l);
|
||||
s.setLocked(l);
|
||||
|
||||
xmlCurrent_ = sourceNode->FirstChildElement("Mixing");
|
||||
if (xmlCurrent_) s.groupNode(View::MIXING)->accept(*this);
|
||||
@@ -518,17 +533,36 @@ void SessionLoader::visit (MediaSource& s)
|
||||
s.mediaplayer()->accept(*this);
|
||||
}
|
||||
|
||||
void SessionLoader::visit (SessionSource& s)
|
||||
void SessionLoader::visit (SessionFileSource& s)
|
||||
{
|
||||
// set uri
|
||||
XMLElement* pathNode = xmlCurrent_->FirstChildElement("path");
|
||||
if (pathNode) {
|
||||
std::string path = std::string ( pathNode->GetText() );
|
||||
|
||||
// load only new files
|
||||
if ( path != s.path() )
|
||||
s.load(path);
|
||||
s.load(path, recursion_ + 1);
|
||||
}
|
||||
}
|
||||
|
||||
void SessionLoader::visit (SessionGroupSource& s)
|
||||
{
|
||||
// set resolution from host session
|
||||
s.setResolution( session_->config(View::RENDERING)->scale_ );
|
||||
|
||||
// get the inside session
|
||||
XMLElement* sessionGroupNode = xmlCurrent_->FirstChildElement("Session");
|
||||
if (sessionGroupNode) {
|
||||
// load session inside group
|
||||
SessionLoader grouploader( s.session(), recursion_ + 1 );
|
||||
grouploader.load( sessionGroupNode );
|
||||
}
|
||||
}
|
||||
|
||||
void SessionLoader::visit (RenderSource& s)
|
||||
{
|
||||
s.setSession( session_ );
|
||||
}
|
||||
|
||||
void SessionLoader::visit (PatternSource& s)
|
||||
|
||||
@@ -13,13 +13,13 @@ class SessionLoader : public Visitor {
|
||||
|
||||
public:
|
||||
|
||||
SessionLoader(Session *session);
|
||||
SessionLoader(Session *session, int recursion = 0);
|
||||
inline Session *session() const { return session_; }
|
||||
|
||||
void load(tinyxml2::XMLElement *sessionNode);
|
||||
inline std::list<uint64_t> getIdList() const { return sources_id_; }
|
||||
|
||||
Source *cloneOrCreateSource(tinyxml2::XMLElement *sourceNode);
|
||||
Source *createSource(tinyxml2::XMLElement *sourceNode, bool clone_duplicates = true);
|
||||
|
||||
// Elements of Scene
|
||||
void visit (Node& n) override;
|
||||
@@ -47,7 +47,9 @@ public:
|
||||
// Sources
|
||||
void visit (Source& s) override;
|
||||
void visit (MediaSource& s) override;
|
||||
void visit (SessionSource& s) override;
|
||||
void visit (SessionFileSource& s) override;
|
||||
void visit (SessionGroupSource& s) override;
|
||||
void visit (RenderSource& s) override;
|
||||
void visit (PatternSource& s) override;
|
||||
void visit (DeviceSource& s) override;
|
||||
void visit (NetworkSource& s) override;
|
||||
@@ -56,6 +58,7 @@ protected:
|
||||
tinyxml2::XMLElement *xmlCurrent_;
|
||||
Session *session_;
|
||||
std::list<uint64_t> sources_id_;
|
||||
int recursion_;
|
||||
|
||||
static void XMLToNode(tinyxml2::XMLElement *xml, Node &n);
|
||||
};
|
||||
@@ -67,7 +70,7 @@ class SessionCreator : public SessionLoader {
|
||||
void loadConfig(tinyxml2::XMLElement *viewsNode);
|
||||
|
||||
public:
|
||||
SessionCreator();
|
||||
SessionCreator(int recursion = 0);
|
||||
|
||||
void load(const std::string& filename);
|
||||
|
||||
|
||||
@@ -17,7 +17,81 @@
|
||||
#include "Mixer.h"
|
||||
|
||||
|
||||
SessionSource::SessionSource() : Source(), path_("")
|
||||
SessionSource::SessionSource() : Source()
|
||||
{
|
||||
failed_ = false;
|
||||
session_ = new Session;
|
||||
}
|
||||
|
||||
SessionSource::~SessionSource()
|
||||
{
|
||||
// delete session
|
||||
if (session_)
|
||||
delete session_;
|
||||
}
|
||||
|
||||
Session *SessionSource::detach()
|
||||
{
|
||||
// remember pointer to give away
|
||||
Session *giveaway = session_;
|
||||
|
||||
// work on a new session
|
||||
session_ = new Session;
|
||||
|
||||
// make disabled
|
||||
initialized_ = false;
|
||||
|
||||
// ask to delete me
|
||||
failed_ = true;
|
||||
|
||||
// lost ref to previous session: to be deleted elsewhere...
|
||||
return giveaway;
|
||||
}
|
||||
|
||||
bool SessionSource::failed() const
|
||||
{
|
||||
return failed_;
|
||||
}
|
||||
|
||||
uint SessionSource::texture() const
|
||||
{
|
||||
if (session_ && session_->frame())
|
||||
return session_->frame()->texture();
|
||||
else
|
||||
return Resource::getTextureBlack();
|
||||
}
|
||||
|
||||
void SessionSource::setActive (bool on)
|
||||
{
|
||||
Source::setActive(on);
|
||||
|
||||
// change status of session (recursive change of internal sources)
|
||||
if (session_ != nullptr)
|
||||
session_->setActive(active_);
|
||||
}
|
||||
|
||||
void SessionSource::update(float dt)
|
||||
{
|
||||
if (session_ == nullptr)
|
||||
return;
|
||||
|
||||
// update content
|
||||
if (active_)
|
||||
session_->update(dt);
|
||||
|
||||
// delete a source which failed
|
||||
if (session_->failedSource() != nullptr) {
|
||||
session_->deleteSource(session_->failedSource());
|
||||
// fail session if all sources failed
|
||||
if ( session_->numSource() < 1)
|
||||
failed_ = true;
|
||||
}
|
||||
|
||||
Source::update(dt);
|
||||
}
|
||||
|
||||
|
||||
SessionFileSource::SessionFileSource() : SessionSource(), path_("")
|
||||
{
|
||||
// specific node for transition view
|
||||
groups_[View::TRANSITION]->visible_ = false;
|
||||
@@ -27,7 +101,7 @@ SessionSource::SessionSource() : Source(), path_("")
|
||||
frames_[View::TRANSITION] = new Switch;
|
||||
Frame *frame = new Frame(Frame::ROUND, Frame::THIN, Frame::DROP);
|
||||
frame->translation_.z = 0.1;
|
||||
frame->color = glm::vec4( COLOR_DEFAULT_SOURCE, 0.9f);
|
||||
frame->color = glm::vec4( COLOR_DEFAULT_SOURCE, 0.95f);
|
||||
frames_[View::TRANSITION]->attach(frame);
|
||||
frame = new Frame(Frame::ROUND, Frame::LARGE, Frame::DROP);
|
||||
frame->translation_.z = 0.01;
|
||||
@@ -48,62 +122,36 @@ SessionSource::SessionSource() : Source(), path_("")
|
||||
groups_[View::TRANSITION]->attach(overlays_[View::TRANSITION]);
|
||||
|
||||
// set symbol
|
||||
symbol_ = new Symbol(Symbol::SESSION, glm::vec3(0.8f, 0.8f, 0.01f));
|
||||
symbol_ = new Symbol(Symbol::SESSION, glm::vec3(0.75f, 0.75f, 0.01f));
|
||||
symbol_->scale_.y = 1.5f;
|
||||
|
||||
failed_ = false;
|
||||
wait_for_sources_ = false;
|
||||
session_ = nullptr;
|
||||
}
|
||||
|
||||
SessionSource::~SessionSource()
|
||||
{
|
||||
// delete session
|
||||
if (session_)
|
||||
delete session_;
|
||||
}
|
||||
|
||||
void SessionSource::load(const std::string &p)
|
||||
void SessionFileSource::load(const std::string &p, uint recursion)
|
||||
{
|
||||
path_ = p;
|
||||
|
||||
if ( path_.empty() )
|
||||
// delete session
|
||||
if (session_) {
|
||||
delete session_;
|
||||
session_ = nullptr;
|
||||
}
|
||||
|
||||
// init session
|
||||
if ( path_.empty() ) {
|
||||
// empty session
|
||||
session_ = new Session;
|
||||
else
|
||||
Log::Warning("Empty Session filename provided.");
|
||||
}
|
||||
else {
|
||||
// launch a thread to load the session file
|
||||
sessionLoader_ = std::async(std::launch::async, Session::load, path_);
|
||||
|
||||
Log::Notify("Opening %s", p.c_str());
|
||||
sessionLoader_ = std::async(std::launch::async, Session::load, path_, recursion);
|
||||
Log::Notify("Opening %s", p.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
Session *SessionSource::detach()
|
||||
{
|
||||
// remember pointer to give away
|
||||
Session *giveaway = session_;
|
||||
|
||||
// work on a new session
|
||||
session_ = new Session;
|
||||
|
||||
// make disabled
|
||||
initialized_ = false;
|
||||
failed_ = true;
|
||||
|
||||
return giveaway;
|
||||
}
|
||||
|
||||
bool SessionSource::failed() const
|
||||
{
|
||||
return failed_;
|
||||
}
|
||||
|
||||
uint SessionSource::texture() const
|
||||
{
|
||||
if (session_ == nullptr)
|
||||
return Resource::getTextureBlack();
|
||||
return session_->frame()->texture();
|
||||
}
|
||||
|
||||
void SessionSource::init()
|
||||
void SessionFileSource::init()
|
||||
{
|
||||
// init is first about getting the loaded session
|
||||
if (session_ == nullptr) {
|
||||
@@ -154,7 +202,7 @@ void SessionSource::init()
|
||||
texturesurface_->setTextureIndex( session_->frame()->texture() );
|
||||
|
||||
// create Frame buffer matching size of session
|
||||
FrameBuffer *renderbuffer = new FrameBuffer( session_->frame()->resolution());
|
||||
FrameBuffer *renderbuffer = new FrameBuffer( session_->frame()->resolution() );
|
||||
|
||||
// set the renderbuffer of the source and attach rendering nodes
|
||||
attach(renderbuffer);
|
||||
@@ -164,12 +212,13 @@ void SessionSource::init()
|
||||
wait_for_sources_ = true;
|
||||
else {
|
||||
initialized_ = true;
|
||||
Log::Info("New Session created.");
|
||||
Log::Info("New Session created (%d x %d).", renderbuffer->width(), renderbuffer->height());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (initialized_){
|
||||
if (initialized_)
|
||||
{
|
||||
// remove the loading icon
|
||||
Node *loader = overlays_[View::TRANSITION]->back();
|
||||
overlays_[View::TRANSITION]->detach(loader);
|
||||
@@ -179,38 +228,7 @@ void SessionSource::init()
|
||||
}
|
||||
}
|
||||
|
||||
void SessionSource::setActive (bool on)
|
||||
{
|
||||
Source::setActive(on);
|
||||
|
||||
// change status of session (recursive change of internal sources)
|
||||
if (session_ != nullptr)
|
||||
session_->setActive(active_);
|
||||
}
|
||||
|
||||
|
||||
void SessionSource::update(float dt)
|
||||
{
|
||||
if (session_ == nullptr)
|
||||
return;
|
||||
|
||||
// update content
|
||||
if (active_)
|
||||
session_->update(dt);
|
||||
|
||||
// delete a source which failed
|
||||
if (session_->failedSource() != nullptr) {
|
||||
session_->deleteSource(session_->failedSource());
|
||||
// fail session if all sources failed
|
||||
if ( session_->numSource() < 1)
|
||||
failed_ = true;
|
||||
}
|
||||
|
||||
Source::update(dt);
|
||||
}
|
||||
|
||||
|
||||
void SessionSource::accept(Visitor& v)
|
||||
void SessionFileSource::accept(Visitor& v)
|
||||
{
|
||||
Source::accept(v);
|
||||
if (!failed())
|
||||
@@ -218,29 +236,116 @@ void SessionSource::accept(Visitor& v)
|
||||
}
|
||||
|
||||
|
||||
RenderSource::RenderSource(Session *session) : Source(), session_(session)
|
||||
SessionGroupSource::SessionGroupSource() : SessionSource(), resolution_(glm::vec3(0.f))
|
||||
{
|
||||
// // redo frame for layers view
|
||||
// frames_[View::LAYER]->clear();
|
||||
|
||||
// // Groups in LAYER have an additional border
|
||||
// Group *group = new Group;
|
||||
// Frame *frame = new Frame(Frame::ROUND, Frame::THIN, Frame::PERSPECTIVE);
|
||||
// frame->translation_.z = 0.1;
|
||||
// frame->color = glm::vec4( COLOR_DEFAULT_SOURCE, 0.95f);
|
||||
// group->attach(frame);
|
||||
// Frame *persp = new Frame(Frame::GROUP, Frame::THIN, Frame::NONE);
|
||||
// persp->translation_.z = 0.1;
|
||||
// persp->color = glm::vec4( COLOR_DEFAULT_SOURCE, 0.95f);
|
||||
// group->attach(persp);
|
||||
// frames_[View::LAYER]->attach(group);
|
||||
|
||||
// group = new Group;
|
||||
// frame = new Frame(Frame::ROUND, Frame::LARGE, Frame::PERSPECTIVE);
|
||||
// frame->translation_.z = 0.1;
|
||||
// frame->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 1.f);
|
||||
// group->attach(frame);
|
||||
// persp = new Frame(Frame::GROUP, Frame::LARGE, Frame::NONE);
|
||||
// persp->translation_.z = 0.1;
|
||||
// persp->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 1.f);
|
||||
// group->attach(persp);
|
||||
// frames_[View::LAYER]->attach(group);
|
||||
|
||||
// set symbol
|
||||
symbol_ = new Symbol(Symbol::GROUP, glm::vec3(0.75f, 0.75f, 0.01f));
|
||||
symbol_->scale_.y = 1.5f;
|
||||
}
|
||||
|
||||
void SessionGroupSource::init()
|
||||
{
|
||||
if ( resolution_.x > 0.f && resolution_.y > 0.f ) {
|
||||
|
||||
session_->setResolution( resolution_ );
|
||||
|
||||
// update to draw framebuffer
|
||||
session_->update( dt_ );
|
||||
|
||||
// get the texture index from framebuffer of session, apply it to the surface
|
||||
texturesurface_->setTextureIndex( session_->frame()->texture() );
|
||||
|
||||
// create Frame buffer matching size of session
|
||||
FrameBuffer *renderbuffer = new FrameBuffer( session_->frame()->resolution() );
|
||||
|
||||
// set the renderbuffer of the source and attach rendering nodes
|
||||
attach(renderbuffer);
|
||||
|
||||
// deep update to reorder
|
||||
View::need_deep_update_++;
|
||||
|
||||
// done init
|
||||
initialized_ = true;
|
||||
Log::Info("Source Group (%d x %d).", int(renderbuffer->resolution().x), int(renderbuffer->resolution().y) );
|
||||
}
|
||||
}
|
||||
|
||||
bool SessionGroupSource::import(Source *source)
|
||||
{
|
||||
bool ret = false;
|
||||
|
||||
if ( session_ )
|
||||
{
|
||||
SourceList::iterator its = session_->addSource(source);
|
||||
if (its != session_->end())
|
||||
ret = true;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void SessionGroupSource::accept(Visitor& v)
|
||||
{
|
||||
Source::accept(v);
|
||||
if (!failed())
|
||||
v.visit(*this);
|
||||
}
|
||||
|
||||
|
||||
|
||||
RenderSource::RenderSource() : Source(), session_(nullptr)
|
||||
{
|
||||
// set symbol
|
||||
symbol_ = new Symbol(Symbol::RENDER, glm::vec3(0.8f, 0.8f, 0.01f));
|
||||
symbol_ = new Symbol(Symbol::RENDER, glm::vec3(0.75f, 0.75f, 0.01f));
|
||||
symbol_->scale_.y = 1.5f;
|
||||
}
|
||||
|
||||
|
||||
bool RenderSource::failed() const
|
||||
{
|
||||
return session_ == nullptr;
|
||||
if (initialized_ && session_!=nullptr)
|
||||
return renderbuffer_->resolution() != session_->frame()->resolution();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
uint RenderSource::texture() const
|
||||
{
|
||||
if (session_ == nullptr)
|
||||
return Resource::getTextureBlack();
|
||||
else
|
||||
if (session_ && session_->frame())
|
||||
return session_->frame()->texture();
|
||||
else
|
||||
return Resource::getTextureBlack(); // getTextureTransparent ?
|
||||
}
|
||||
|
||||
void RenderSource::init()
|
||||
{
|
||||
if (session_ && session_->frame()->texture() != Resource::getTextureBlack()) {
|
||||
if (session_ && session_->frame() && session_->frame()->texture() != Resource::getTextureBlack()) {
|
||||
|
||||
FrameBuffer *fb = session_->frame();
|
||||
|
||||
@@ -248,7 +353,7 @@ void RenderSource::init()
|
||||
texturesurface_->setTextureIndex( fb->texture() );
|
||||
|
||||
// create Frame buffer matching size of output session
|
||||
FrameBuffer *renderbuffer = new FrameBuffer( fb->resolution());
|
||||
FrameBuffer *renderbuffer = new FrameBuffer( fb->resolution() );
|
||||
|
||||
// set the renderbuffer of the source and attach rendering nodes
|
||||
attach(renderbuffer);
|
||||
@@ -263,9 +368,19 @@ void RenderSource::init()
|
||||
}
|
||||
|
||||
|
||||
glm::vec3 RenderSource::resolution() const
|
||||
{
|
||||
if (initialized_)
|
||||
return renderbuffer_->resolution();
|
||||
else if (session_ && session_->frame())
|
||||
return session_->frame()->resolution();
|
||||
else
|
||||
return glm::vec3(0.f);
|
||||
}
|
||||
|
||||
void RenderSource::accept(Visitor& v)
|
||||
{
|
||||
Source::accept(v);
|
||||
if (!failed())
|
||||
// if (!failed())
|
||||
v.visit(*this);
|
||||
}
|
||||
|
||||
@@ -9,48 +9,88 @@ class SessionSource : public Source
|
||||
{
|
||||
public:
|
||||
SessionSource();
|
||||
~SessionSource();
|
||||
virtual ~SessionSource();
|
||||
|
||||
// implementation of source API
|
||||
void update (float dt) override;
|
||||
void setActive (bool on) override;
|
||||
bool failed() const override;
|
||||
uint texture() const override;
|
||||
void accept (Visitor& v) override;
|
||||
bool failed () const override;
|
||||
uint texture () const override;
|
||||
|
||||
// Session Source specific interface
|
||||
void load(const std::string &p = "");
|
||||
Session *detach();
|
||||
|
||||
inline std::string path() const { return path_; }
|
||||
inline Session *session() const { return session_; }
|
||||
|
||||
glm::ivec2 icon() const override { return glm::ivec2(3, 16); }
|
||||
protected:
|
||||
|
||||
Session *session_;
|
||||
std::atomic<bool> failed_;
|
||||
};
|
||||
|
||||
class SessionFileSource : public SessionSource
|
||||
{
|
||||
public:
|
||||
SessionFileSource();
|
||||
|
||||
// implementation of source API
|
||||
void accept (Visitor& v) override;
|
||||
|
||||
// SessionFile Source specific interface
|
||||
void load(const std::string &p = "", uint recursion = 0);
|
||||
|
||||
inline std::string path() const { return path_; }
|
||||
glm::ivec2 icon() const override { return glm::ivec2(19, 6); }
|
||||
|
||||
protected:
|
||||
|
||||
void init() override;
|
||||
static void loadSession(const std::string& filename, SessionSource *source);
|
||||
|
||||
std::string path_;
|
||||
Session *session_;
|
||||
|
||||
std::atomic<bool> failed_;
|
||||
std::atomic<bool> wait_for_sources_;
|
||||
std::future<Session *> sessionLoader_;
|
||||
};
|
||||
|
||||
class SessionGroupSource : public SessionSource
|
||||
{
|
||||
public:
|
||||
SessionGroupSource();
|
||||
|
||||
// implementation of source API
|
||||
void accept (Visitor& v) override;
|
||||
|
||||
// SessionGroup Source specific interface
|
||||
inline void setResolution (glm::vec3 v) { resolution_ = v; }
|
||||
|
||||
// import a source
|
||||
bool import(Source *source);
|
||||
|
||||
// TODO import session entirely : bool import();
|
||||
|
||||
glm::ivec2 icon() const override { return glm::ivec2(10, 6); }
|
||||
|
||||
protected:
|
||||
|
||||
void init() override;
|
||||
|
||||
glm::vec3 resolution_;
|
||||
|
||||
};
|
||||
|
||||
|
||||
class RenderSource : public Source
|
||||
{
|
||||
public:
|
||||
RenderSource(Session *session);
|
||||
RenderSource();
|
||||
|
||||
// implementation of source API
|
||||
bool failed() const override;
|
||||
bool failed () const override;
|
||||
uint texture() const override;
|
||||
void accept (Visitor& v) override;
|
||||
|
||||
inline Session *session () const { return session_; }
|
||||
inline void setSession (Session *se) { session_ = se; }
|
||||
|
||||
glm::vec3 resolution() const;
|
||||
|
||||
glm::ivec2 icon() const override { return glm::ivec2(0, 2); }
|
||||
|
||||
protected:
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "Decorations.h"
|
||||
#include "Source.h"
|
||||
#include "MediaSource.h"
|
||||
#include "Session.h"
|
||||
#include "SessionSource.h"
|
||||
#include "PatternSource.h"
|
||||
#include "DeviceSource.h"
|
||||
@@ -151,31 +152,34 @@ void SessionVisitor::visit(MediaPlayer &n)
|
||||
{
|
||||
XMLElement *newelement = xmlDoc_->NewElement("MediaPlayer");
|
||||
newelement->SetAttribute("id", n.id());
|
||||
newelement->SetAttribute("play", n.isPlaying());
|
||||
newelement->SetAttribute("loop", (int) n.loop());
|
||||
newelement->SetAttribute("speed", n.playSpeed());
|
||||
|
||||
// timeline
|
||||
XMLElement *timelineelement = xmlDoc_->NewElement("Timeline");
|
||||
if (!n.isImage()) {
|
||||
newelement->SetAttribute("play", n.isPlaying());
|
||||
newelement->SetAttribute("loop", (int) n.loop());
|
||||
newelement->SetAttribute("speed", n.playSpeed());
|
||||
|
||||
// gaps in timeline
|
||||
XMLElement *gapselement = xmlDoc_->NewElement("Gaps");
|
||||
TimeIntervalSet gaps = n.timeline()->gaps();
|
||||
for( auto it = gaps.begin(); it!= gaps.end(); it++) {
|
||||
XMLElement *g = xmlDoc_->NewElement("Interval");
|
||||
g->SetAttribute("begin", (*it).begin);
|
||||
g->SetAttribute("end", (*it).end);
|
||||
gapselement->InsertEndChild(g);
|
||||
// timeline
|
||||
XMLElement *timelineelement = xmlDoc_->NewElement("Timeline");
|
||||
|
||||
// gaps in timeline
|
||||
XMLElement *gapselement = xmlDoc_->NewElement("Gaps");
|
||||
TimeIntervalSet gaps = n.timeline()->gaps();
|
||||
for( auto it = gaps.begin(); it!= gaps.end(); it++) {
|
||||
XMLElement *g = xmlDoc_->NewElement("Interval");
|
||||
g->SetAttribute("begin", (*it).begin);
|
||||
g->SetAttribute("end", (*it).end);
|
||||
gapselement->InsertEndChild(g);
|
||||
}
|
||||
timelineelement->InsertEndChild(gapselement);
|
||||
|
||||
// fading in timeline
|
||||
XMLElement *fadingelement = xmlDoc_->NewElement("Fading");
|
||||
XMLElement *array = XMLElementEncodeArray(xmlDoc_, n.timeline()->fadingArray(), MAX_TIMELINE_ARRAY * sizeof(float));
|
||||
fadingelement->InsertEndChild(array);
|
||||
timelineelement->InsertEndChild(fadingelement);
|
||||
newelement->InsertEndChild(timelineelement);
|
||||
}
|
||||
timelineelement->InsertEndChild(gapselement);
|
||||
|
||||
// fading in timeline
|
||||
XMLElement *fadingelement = xmlDoc_->NewElement("Fading");
|
||||
XMLElement *array = XMLElementEncodeArray(xmlDoc_, n.timeline()->fadingArray(), MAX_TIMELINE_ARRAY * sizeof(float));
|
||||
fadingelement->InsertEndChild(array);
|
||||
timelineelement->InsertEndChild(fadingelement);
|
||||
|
||||
newelement->InsertEndChild(timelineelement);
|
||||
xmlCurrent_->InsertEndChild(newelement);
|
||||
}
|
||||
|
||||
@@ -342,6 +346,7 @@ void SessionVisitor::visit (Source& s)
|
||||
XMLElement *sourceNode = xmlDoc_->NewElement( "Source" );
|
||||
sourceNode->SetAttribute("id", s.id());
|
||||
sourceNode->SetAttribute("name", s.name().c_str() );
|
||||
sourceNode->SetAttribute("locked", s.locked() );
|
||||
|
||||
// insert into hierarchy
|
||||
xmlCurrent_->InsertFirstChild(sourceNode);
|
||||
@@ -412,7 +417,7 @@ void SessionVisitor::visit (MediaSource& s)
|
||||
s.mediaplayer()->accept(*this);
|
||||
}
|
||||
|
||||
void SessionVisitor::visit (SessionSource& s)
|
||||
void SessionVisitor::visit (SessionFileSource& s)
|
||||
{
|
||||
xmlCurrent_->SetAttribute("type", "SessionSource");
|
||||
|
||||
@@ -422,6 +427,22 @@ void SessionVisitor::visit (SessionSource& s)
|
||||
path->InsertEndChild( text );
|
||||
}
|
||||
|
||||
void SessionVisitor::visit (SessionGroupSource& s)
|
||||
{
|
||||
xmlCurrent_->SetAttribute("type", "GroupSource");
|
||||
|
||||
Session *se = s.session();
|
||||
|
||||
XMLElement *rootgroup = xmlDoc_->NewElement("Session");
|
||||
xmlCurrent_->InsertEndChild(rootgroup);
|
||||
|
||||
for (auto iter = se->begin(); iter != se->end(); iter++){
|
||||
setRoot(rootgroup);
|
||||
(*iter)->accept(*this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void SessionVisitor::visit (RenderSource&)
|
||||
{
|
||||
xmlCurrent_->SetAttribute("type", "RenderSource");
|
||||
|
||||
@@ -44,7 +44,8 @@ public:
|
||||
// Sources
|
||||
void visit (Source& s) override;
|
||||
void visit (MediaSource& s) override;
|
||||
void visit (SessionSource& s) override;
|
||||
void visit (SessionFileSource& s) override;
|
||||
void visit (SessionGroupSource& s) override;
|
||||
void visit (RenderSource&) override;
|
||||
void visit (CloneSource& s) override;
|
||||
void visit (PatternSource& s) override;
|
||||
|
||||
13
Settings.cpp
13
Settings.cpp
@@ -110,6 +110,11 @@ void Settings::Save()
|
||||
SourceConfNode->SetAttribute("res", application.source.res);
|
||||
pRoot->InsertEndChild(SourceConfNode);
|
||||
|
||||
// Brush
|
||||
XMLElement *BrushNode = xmlDoc.NewElement( "Brush" );
|
||||
BrushNode->InsertEndChild( XMLElementFromGLM(&xmlDoc, application.brush) );
|
||||
pRoot->InsertEndChild(BrushNode);
|
||||
|
||||
// bloc connections
|
||||
{
|
||||
XMLElement *connectionsNode = xmlDoc.NewElement( "Connections" );
|
||||
@@ -131,6 +136,7 @@ void Settings::Save()
|
||||
// save current view only if [mixing, geometry, layers, appearance]
|
||||
int v = application.current_view > 4 ? 1 : application.current_view;
|
||||
viewsNode->SetAttribute("current", v);
|
||||
viewsNode->SetAttribute("workspace", application.current_workspace);
|
||||
|
||||
map<int, Settings::ViewConfig>::iterator iter;
|
||||
for (iter=application.views.begin(); iter != application.views.end(); iter++)
|
||||
@@ -325,6 +331,12 @@ void Settings::Load()
|
||||
}
|
||||
}
|
||||
|
||||
// Brush
|
||||
XMLElement * brushnode = pRoot->FirstChildElement("Brush");
|
||||
if (brushnode != nullptr) {
|
||||
tinyxml2::XMLElementToGLM( brushnode->FirstChildElement("vec3"), application.brush);
|
||||
}
|
||||
|
||||
// bloc views
|
||||
{
|
||||
application.views.clear(); // trash existing list
|
||||
@@ -332,6 +344,7 @@ void Settings::Load()
|
||||
if (pElement)
|
||||
{
|
||||
pElement->QueryIntAttribute("current", &application.current_view);
|
||||
pElement->QueryIntAttribute("workspace", &application.current_workspace);
|
||||
|
||||
XMLElement* viewNode = pElement->FirstChildElement("View");
|
||||
for( ; viewNode ; viewNode=viewNode->NextSiblingElement())
|
||||
|
||||
@@ -190,8 +190,12 @@ struct Application
|
||||
|
||||
// Settings of Views
|
||||
int current_view;
|
||||
int current_workspace;
|
||||
std::map<int, ViewConfig> views;
|
||||
|
||||
// settings brush texture paint
|
||||
glm::vec3 brush;
|
||||
|
||||
// settings render
|
||||
RenderConfig render;
|
||||
|
||||
@@ -221,6 +225,8 @@ struct Application
|
||||
action_history_follow_view = false;
|
||||
accept_connections = false;
|
||||
current_view = 1;
|
||||
current_workspace= 1;
|
||||
brush = glm::vec3(0.5f, 0.1f, 0.f);
|
||||
windows = std::vector<WindowConfig>(3);
|
||||
windows[0].name = APP_NAME APP_TITLE;
|
||||
windows[0].w = 1600;
|
||||
|
||||
51
Shader.cpp
51
Shader.cpp
@@ -1,4 +1,4 @@
|
||||
#include "Shader.h"
|
||||
#include "Shader.h"
|
||||
#include "Resource.h"
|
||||
#include "FrameBuffer.h"
|
||||
#include "Log.h"
|
||||
@@ -23,12 +23,31 @@
|
||||
ShadingProgram *ShadingProgram::currentProgram_ = nullptr;
|
||||
ShadingProgram simpleShadingProgram("shaders/simple.vs", "shaders/simple.fs");
|
||||
|
||||
// Blending presets for matching with Shader::BlendMode
|
||||
GLenum blending_equation[6] = { GL_FUNC_ADD, GL_FUNC_ADD, GL_FUNC_REVERSE_SUBTRACT, GL_FUNC_ADD, GL_FUNC_REVERSE_SUBTRACT, GL_FUNC_ADD};
|
||||
GLenum blending_source_function[6] = { GL_SRC_ALPHA,GL_SRC_ALPHA,GL_SRC_ALPHA,GL_SRC_ALPHA,GL_SRC_ALPHA,GL_SRC_ALPHA};
|
||||
GLenum blending_destination_function[6] = {GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE, GL_DST_COLOR, GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA};
|
||||
|
||||
|
||||
// Blending presets for matching with Shader::BlendModes:
|
||||
GLenum blending_equation[8] = { GL_FUNC_ADD, // normal
|
||||
GL_FUNC_ADD, // screen
|
||||
GL_FUNC_REVERSE_SUBTRACT, // subtract
|
||||
GL_FUNC_ADD, // multiply
|
||||
GL_FUNC_ADD, // soft light
|
||||
GL_FUNC_REVERSE_SUBTRACT, // soft subtract
|
||||
GL_MAX, // lighten only
|
||||
GL_FUNC_ADD};
|
||||
GLenum blending_source_function[8] = { GL_ONE, // normal
|
||||
GL_ONE, // screen
|
||||
GL_SRC_COLOR, // subtract (can be GL_ONE)
|
||||
GL_DST_COLOR, // multiply : src x dst color
|
||||
GL_DST_COLOR, // soft light : src x dst color
|
||||
GL_DST_COLOR, // soft subtract
|
||||
GL_ONE, // lighten only
|
||||
GL_ONE};
|
||||
GLenum blending_destination_function[8] = {GL_ONE_MINUS_SRC_ALPHA,// normal
|
||||
GL_ONE, // screen
|
||||
GL_ONE, // subtract
|
||||
GL_ONE_MINUS_SRC_ALPHA, // multiply
|
||||
GL_ONE, // soft light
|
||||
GL_ONE, // soft subtract
|
||||
GL_ONE, // lighten only
|
||||
GL_ZERO};
|
||||
|
||||
ShadingProgram::ShadingProgram(const std::string& vertex_file, const std::string& fragment_file) : vertex_id_(0), fragment_id_(0), id_(0)
|
||||
{
|
||||
@@ -206,7 +225,7 @@ void Shader::use()
|
||||
if (!program_->initialized())
|
||||
program_->init();
|
||||
|
||||
// Use program and set uniforms
|
||||
// Use program
|
||||
program_->use();
|
||||
|
||||
// set uniforms
|
||||
@@ -221,19 +240,13 @@ void Shader::use()
|
||||
// Blending Function
|
||||
if (force_blending_opacity) {
|
||||
glEnable(GL_BLEND);
|
||||
glBlendEquation(blending_equation[BLEND_OPACITY]);
|
||||
glBlendFunc(blending_source_function[BLEND_OPACITY], blending_destination_function[BLEND_OPACITY]);
|
||||
|
||||
glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD);
|
||||
glBlendFuncSeparate(GL_ONE, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
else if ( blending != BLEND_CUSTOM ) {
|
||||
else if ( blending < BLEND_NONE ) {
|
||||
glEnable(GL_BLEND);
|
||||
glBlendEquation(blending_equation[blending]);
|
||||
glBlendFunc(blending_source_function[blending], blending_destination_function[blending]);
|
||||
|
||||
// TODO different blending for alpha and color
|
||||
// glBlendEquationSeparate(blending_equation[blending], GL_FUNC_ADD);
|
||||
// glBlendFuncSeparate(blending_source_function[blending], blending_destination_function[blending], GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
glBlendEquationSeparate(blending_equation[blending], GL_FUNC_ADD);
|
||||
glBlendFuncSeparate(blending_source_function[blending], blending_destination_function[blending], GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
else
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
13
Shader.h
13
Shader.h
@@ -60,11 +60,13 @@ public:
|
||||
|
||||
typedef enum {
|
||||
BLEND_OPACITY = 0,
|
||||
BLEND_ADD,
|
||||
BLEND_SUBSTRACT,
|
||||
BLEND_LAYER_ADD,
|
||||
BLEND_LAYER_SUBSTRACT,
|
||||
BLEND_CUSTOM
|
||||
BLEND_SCREEN,
|
||||
BLEND_SUBTRACT,
|
||||
BLEND_MULTIPLY,
|
||||
BLEND_SOFT_LIGHT,
|
||||
BLEND_SOFT_SUBTRACT,
|
||||
BLEND_LIGHTEN_ONLY,
|
||||
BLEND_NONE
|
||||
} BlendMode;
|
||||
BlendMode blending;
|
||||
|
||||
@@ -72,7 +74,6 @@ public:
|
||||
|
||||
protected:
|
||||
ShadingProgram *program_;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
150
Source.cpp
150
Source.cpp
@@ -1,5 +1,6 @@
|
||||
#include <algorithm>
|
||||
#include <locale>
|
||||
#include <tinyxml2.h>
|
||||
#include <glm/gtc/matrix_access.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
|
||||
@@ -14,10 +15,11 @@
|
||||
#include "ImageShader.h"
|
||||
#include "ImageProcessingShader.h"
|
||||
#include "SystemToolkit.h"
|
||||
#include "SessionVisitor.h"
|
||||
#include "Log.h"
|
||||
#include "Mixer.h"
|
||||
|
||||
Source::Source() : initialized_(false), active_(true), locked_(false), need_update_(true), symbol_(nullptr)
|
||||
Source::Source() : initialized_(false), symbol_(nullptr), active_(true), locked_(false), need_update_(true), workspace_(STAGE)
|
||||
{
|
||||
// create unique id
|
||||
id_ = GlmToolkit::uniqueId();
|
||||
@@ -41,7 +43,7 @@ Source::Source() : initialized_(false), active_(true), locked_(false), need_upda
|
||||
frames_[View::MIXING] = new Switch;
|
||||
Frame *frame = new Frame(Frame::ROUND, Frame::THIN, Frame::DROP);
|
||||
frame->translation_.z = 0.1;
|
||||
frame->color = glm::vec4( COLOR_DEFAULT_SOURCE, 0.9f);
|
||||
frame->color = glm::vec4( COLOR_DEFAULT_SOURCE, 0.95f);
|
||||
frames_[View::MIXING]->attach(frame);
|
||||
frame = new Frame(Frame::ROUND, Frame::LARGE, Frame::DROP);
|
||||
frame->translation_.z = 0.01;
|
||||
@@ -63,7 +65,7 @@ Source::Source() : initialized_(false), active_(true), locked_(false), need_upda
|
||||
frames_[View::GEOMETRY] = new Switch;
|
||||
frame = new Frame(Frame::SHARP, Frame::THIN, Frame::NONE);
|
||||
frame->translation_.z = 0.1;
|
||||
frame->color = glm::vec4( COLOR_DEFAULT_SOURCE, 0.7f);
|
||||
frame->color = glm::vec4( COLOR_DEFAULT_SOURCE, 0.8f);
|
||||
frames_[View::GEOMETRY]->attach(frame);
|
||||
frame = new Frame(Frame::SHARP, Frame::LARGE, Frame::GLOW);
|
||||
frame->translation_.z = 0.1;
|
||||
@@ -117,7 +119,7 @@ Source::Source() : initialized_(false), active_(true), locked_(false), need_upda
|
||||
frames_[View::LAYER] = new Switch;
|
||||
frame = new Frame(Frame::ROUND, Frame::THIN, Frame::PERSPECTIVE);
|
||||
frame->translation_.z = 0.1;
|
||||
frame->color = glm::vec4( COLOR_DEFAULT_SOURCE, 0.8f);
|
||||
frame->color = glm::vec4( COLOR_DEFAULT_SOURCE, 0.95f);
|
||||
frames_[View::LAYER]->attach(frame);
|
||||
frame = new Frame(Frame::ROUND, Frame::LARGE, Frame::PERSPECTIVE);
|
||||
frame->translation_.z = 0.1;
|
||||
@@ -178,21 +180,12 @@ Source::Source() : initialized_(false), active_(true), locked_(false), need_upda
|
||||
groups_[View::TRANSITION] = new Group;
|
||||
|
||||
//
|
||||
// shared locker symbol
|
||||
//
|
||||
locker_ = new Symbol(Symbol::LOCK, glm::vec3(0.8f, -0.8f, 0.01f));
|
||||
locker_->color = glm::vec4(1.f, 1.f, 1.f, 0.6f);
|
||||
|
||||
// add semi transparent icon statically to mixing and layer views
|
||||
Group *lockgroup = new Group;
|
||||
lockgroup->translation_.z = 0.1;
|
||||
lockgroup->attach( locker_ );
|
||||
groups_[View::LAYER]->attach(lockgroup);
|
||||
groups_[View::MIXING]->attach(lockgroup);
|
||||
|
||||
// add semi transparent icon dynamically with overlay
|
||||
overlays_[View::LAYER]->attach( locker_ );
|
||||
overlays_[View::MIXING]->attach( locker_ );
|
||||
// locker switch button : locked / unlocked icons
|
||||
locker_ = new Switch;
|
||||
lock_ = new Handles(Handles::LOCKED);
|
||||
locker_->attach(lock_);
|
||||
unlock_ = new Handles(Handles::UNLOCKED);
|
||||
locker_->attach(unlock_);
|
||||
|
||||
// create objects
|
||||
stored_status_ = new Group;
|
||||
@@ -299,7 +292,7 @@ void Source::setMode(Source::Mode m)
|
||||
// show overlay if current
|
||||
bool current = m >= Source::CURRENT;
|
||||
for (auto o = overlays_.begin(); o != overlays_.end(); o++)
|
||||
(*o).second->visible_ = current;
|
||||
(*o).second->visible_ = current & !locked_;
|
||||
|
||||
// show in appearance view if current
|
||||
groups_[View::APPEARANCE]->visible_ = m > Source::VISIBLE;
|
||||
@@ -359,6 +352,13 @@ void Source::render()
|
||||
|
||||
void Source::attach(FrameBuffer *renderbuffer)
|
||||
{
|
||||
// invalid argument
|
||||
if (renderbuffer == nullptr)
|
||||
return;
|
||||
|
||||
// replace renderbuffer_
|
||||
if (renderbuffer_)
|
||||
delete renderbuffer_;
|
||||
renderbuffer_ = renderbuffer;
|
||||
|
||||
// if a symbol is available, add it to overlay
|
||||
@@ -389,6 +389,14 @@ void Source::attach(FrameBuffer *renderbuffer)
|
||||
if (groups_[View::TRANSITION]->numChildren() > 0)
|
||||
groups_[View::TRANSITION]->attach(mixingsurface_);
|
||||
|
||||
// hack to place the symbols in the corner independently of aspect ratio
|
||||
symbol_->translation_.x += 0.1f * (renderbuffer_->aspectRatio()-1.f);
|
||||
|
||||
// add lock icon to views (displayed on front)
|
||||
groups_[View::LAYER]->attach( locker_ );
|
||||
groups_[View::MIXING]->attach( locker_ );
|
||||
groups_[View::GEOMETRY]->attach( locker_ );
|
||||
|
||||
// scale all icon nodes to match aspect ratio
|
||||
for (int v = View::MIXING; v < View::INVALID; v++) {
|
||||
NodeSet::iterator node;
|
||||
@@ -398,10 +406,6 @@ void Source::attach(FrameBuffer *renderbuffer)
|
||||
}
|
||||
}
|
||||
|
||||
// hack to place the symbols in the corner independently of aspect ratio
|
||||
symbol_->translation_.x += 0.1f * (renderbuffer_->aspectRatio()-1.f);
|
||||
locker_->translation_.x += 0.1f * (renderbuffer_->aspectRatio()-1.f);
|
||||
|
||||
// (re) create the masking buffer
|
||||
if (maskbuffer_)
|
||||
delete maskbuffer_;
|
||||
@@ -430,22 +434,16 @@ void Source::setActive (bool on)
|
||||
groups_[View::RENDERING]->visible_ = active_;
|
||||
groups_[View::GEOMETRY]->visible_ = active_;
|
||||
groups_[View::LAYER]->visible_ = active_;
|
||||
|
||||
}
|
||||
|
||||
void Source::setLocked (bool on)
|
||||
{
|
||||
locked_ = on;
|
||||
|
||||
// the lock icon is visible when locked
|
||||
locker_->visible_ = on;
|
||||
|
||||
// a locked source is not visible in the GEOMETRY view (that's the whole point of it!)
|
||||
groups_[View::GEOMETRY]->visible_ = !locked_;
|
||||
|
||||
// the lock icon
|
||||
locker_->setActive( on ? 0 : 1);
|
||||
}
|
||||
|
||||
|
||||
// Transfer functions from coordinates to alpha (1 - transparency)
|
||||
float linear_(float x, float y) {
|
||||
return 1.f - CLAMP( sqrt( ( x * x ) + ( y * y ) ), 0.f, 1.f );
|
||||
@@ -461,6 +459,47 @@ float sin_quad(float x, float y) {
|
||||
// return 0.5f + 0.5f * cos( M_PI * CLAMP( ( ( x * x ) + ( y * y ) ), 0.f, 1.f ) );
|
||||
}
|
||||
|
||||
|
||||
float Source::depth() const
|
||||
{
|
||||
return group(View::RENDERING)->translation_.z;
|
||||
}
|
||||
|
||||
void Source::setDepth(float d)
|
||||
{
|
||||
groups_[View::LAYER]->translation_.z = CLAMP(d, MIN_DEPTH, MAX_DEPTH);
|
||||
touch();
|
||||
}
|
||||
|
||||
float Source::alpha() const
|
||||
{
|
||||
return blendingShader()->color.a;
|
||||
}
|
||||
|
||||
void Source::setAlpha(float a)
|
||||
{
|
||||
// todo clamp a
|
||||
glm::vec2 dist = glm::vec2(groups_[View::MIXING]->translation_);
|
||||
glm::vec2 step = glm::normalize(dist) * 0.01f;
|
||||
|
||||
// special case: perfectly centered (step is null).
|
||||
if ( glm::length(dist) < EPSILON)
|
||||
// step in the diagonal
|
||||
step = glm::vec2(0.01f, 0.01f);
|
||||
|
||||
// converge linearly to reduce the difference of alpha
|
||||
float delta = sin_quad(dist.x, dist.y) - CLAMP(a, 0.f, 1.f);
|
||||
while ( glm::abs(delta) > 0.01f ){
|
||||
dist += step * glm::sign(delta);
|
||||
delta = sin_quad(dist.x, dist.y) - CLAMP(a, 0.f, 1.f);
|
||||
}
|
||||
|
||||
// apply new mixing coordinates
|
||||
groups_[View::MIXING]->translation_.x = dist.x;
|
||||
groups_[View::MIXING]->translation_.y = dist.y;
|
||||
touch();
|
||||
}
|
||||
|
||||
void Source::update(float dt)
|
||||
{
|
||||
// keep delta-t
|
||||
@@ -469,13 +508,11 @@ void Source::update(float dt)
|
||||
// update nodes if needed
|
||||
if (renderbuffer_ && mixingsurface_ && maskbuffer_ && need_update_)
|
||||
{
|
||||
// Log::Info("UPDATE %s %f", initials_, dt);
|
||||
|
||||
// ADJUST alpha based on MIXING node
|
||||
// read position of the mixing node and interpret this as transparency of render output
|
||||
glm::vec2 dist = glm::vec2(groups_[View::MIXING]->translation_);
|
||||
// use the sinusoidal transfer function
|
||||
blendingshader_->color = glm::vec4(1.0, 1.0, 1.0, sin_quad( dist.x, dist.y ));
|
||||
blendingshader_->color = glm::vec4(1.f, 1.f, 1.f, sin_quad( dist.x, dist.y ));
|
||||
mixingshader_->color = blendingshader_->color;
|
||||
|
||||
// CHANGE update status based on limbo
|
||||
@@ -504,18 +541,21 @@ void Source::update(float dt)
|
||||
mixingsurface_->update(dt_);
|
||||
|
||||
// Layers icons are displayed in Perspective (diagonal)
|
||||
groups_[View::LAYER]->translation_.x = -groups_[View::LAYER]->translation_.z;
|
||||
groups_[View::LAYER]->translation_.y = groups_[View::LAYER]->translation_.x / LAYER_PERSPECTIVE;
|
||||
|
||||
// CHANGE lock based on range of layers stage
|
||||
bool l = (groups_[View::LAYER]->translation_.x < -FOREGROUND_DEPTH)
|
||||
|| (groups_[View::LAYER]->translation_.x > -BACKGROUND_DEPTH);
|
||||
setLocked( l );
|
||||
|
||||
// adjust position of layer icon: step up when on stage
|
||||
if (groups_[View::LAYER]->translation_.x < -FOREGROUND_DEPTH)
|
||||
// Update workspace based on depth, and
|
||||
// adjust vertical position of icon depending on workspace
|
||||
if (groups_[View::LAYER]->translation_.x < -LAYER_FOREGROUND) {
|
||||
groups_[View::LAYER]->translation_.y -= 0.3f;
|
||||
else if (groups_[View::LAYER]->translation_.x < -BACKGROUND_DEPTH)
|
||||
workspace_ = Source::FOREGROUND;
|
||||
}
|
||||
else if (groups_[View::LAYER]->translation_.x < -LAYER_BACKGROUND) {
|
||||
groups_[View::LAYER]->translation_.y -= 0.15f;
|
||||
workspace_ = Source::STAGE;
|
||||
}
|
||||
else
|
||||
workspace_ = Source::BACKGROUND;
|
||||
|
||||
// MODIFY depth based on LAYER node
|
||||
groups_[View::MIXING]->translation_.z = groups_[View::LAYER]->translation_.z;
|
||||
@@ -637,6 +677,27 @@ void Source::setMask(FrameBufferImage *img)
|
||||
}
|
||||
|
||||
|
||||
std::string Source::xml(Source *s)
|
||||
{
|
||||
std::string x = "";
|
||||
|
||||
tinyxml2::XMLDocument xmlDoc;
|
||||
tinyxml2::XMLElement *selectionNode = xmlDoc.NewElement(APP_NAME);
|
||||
selectionNode->SetAttribute("size", 1);
|
||||
xmlDoc.InsertEndChild(selectionNode);
|
||||
|
||||
SessionVisitor sv(&xmlDoc, selectionNode);
|
||||
s->accept(sv);
|
||||
|
||||
// get compact string
|
||||
tinyxml2::XMLPrinter xmlPrint(0, true);
|
||||
xmlDoc.Print( &xmlPrint );
|
||||
x = xmlPrint.CStr();
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
|
||||
bool Source::hasNode::operator()(const Source* elem) const
|
||||
{
|
||||
if (_n && elem)
|
||||
@@ -677,7 +738,8 @@ CloneSource *Source::clone()
|
||||
CloneSource::CloneSource(Source *origin) : Source(), origin_(origin)
|
||||
{
|
||||
// set symbol
|
||||
symbol_ = new Symbol(Symbol::CLONE, glm::vec3(0.8f, 0.8f, 0.01f));
|
||||
symbol_ = new Symbol(Symbol::CLONE, glm::vec3(0.75f, 0.75f, 0.01f));
|
||||
symbol_->scale_.y = 1.5f;
|
||||
}
|
||||
|
||||
CloneSource::~CloneSource()
|
||||
|
||||
48
Source.h
48
Source.h
@@ -77,6 +77,7 @@ public:
|
||||
|
||||
// a Source has a shader to control mixing effects
|
||||
inline ImageShader *blendingShader () const { return blendingshader_; }
|
||||
|
||||
// a Source has a shader used to render in fbo
|
||||
inline Shader *renderingShader () const { return renderingshader_; }
|
||||
|
||||
@@ -96,12 +97,20 @@ public:
|
||||
virtual void update (float dt);
|
||||
|
||||
// update mode
|
||||
inline bool active () const { return active_; }
|
||||
virtual void setActive (bool on);
|
||||
inline bool active () { return active_; }
|
||||
|
||||
// lock mode
|
||||
inline bool locked () const { return locked_; }
|
||||
virtual void setLocked (bool on);
|
||||
inline bool locked () { return locked_; }
|
||||
|
||||
// Workspace
|
||||
typedef enum {
|
||||
BACKGROUND = 0,
|
||||
STAGE = 1,
|
||||
FOREGROUND = 2
|
||||
} Workspace;
|
||||
inline Workspace workspace () const { return workspace_; }
|
||||
|
||||
// a Source shall informs if the source failed (i.e. shall be deleted)
|
||||
virtual bool failed () const = 0;
|
||||
@@ -116,9 +125,16 @@ public:
|
||||
virtual void accept (Visitor& v);
|
||||
|
||||
// operations on mask
|
||||
void storeMask(FrameBufferImage *img = nullptr);
|
||||
FrameBufferImage *getMask() const { return maskimage_; }
|
||||
void setMask(FrameBufferImage *img);
|
||||
inline FrameBufferImage *getMask () const { return maskimage_; }
|
||||
void setMask (FrameBufferImage *img);
|
||||
void storeMask (FrameBufferImage *img = nullptr);
|
||||
|
||||
float depth () const;
|
||||
void setDepth (float d);
|
||||
|
||||
float alpha () const;
|
||||
void setAlpha (float a);
|
||||
|
||||
|
||||
struct hasNode: public std::unary_function<Source*, bool>
|
||||
{
|
||||
@@ -148,8 +164,25 @@ public:
|
||||
uint64_t _id;
|
||||
};
|
||||
|
||||
struct hasDepth: public std::unary_function<Source*, bool>
|
||||
{
|
||||
inline bool operator()(const Source* elem) const {
|
||||
return (elem && elem->depth()>_from && elem->depth()<_to );
|
||||
}
|
||||
hasDepth(float d1, float d2) {
|
||||
_from = MIN(d1, d2);
|
||||
_to = MAX(d1, d2);
|
||||
}
|
||||
private:
|
||||
float _from;
|
||||
float _to;
|
||||
};
|
||||
|
||||
virtual glm::ivec2 icon () const { return glm::ivec2(12, 11); }
|
||||
|
||||
// get the xml description text of a source
|
||||
static std::string xml(Source *s);
|
||||
|
||||
protected:
|
||||
// name
|
||||
std::string name_;
|
||||
@@ -200,7 +233,9 @@ protected:
|
||||
std::map<View::Mode, Group*> overlays_;
|
||||
std::map<View::Mode, Switch*> frames_;
|
||||
std::map<View::Mode, Handles*[7]> handles_;
|
||||
Symbol *symbol_, *locker_;
|
||||
Handles *lock_, *unlock_;
|
||||
Switch *locker_;
|
||||
Symbol *symbol_;
|
||||
|
||||
// update
|
||||
bool active_;
|
||||
@@ -208,6 +243,7 @@ protected:
|
||||
bool need_update_;
|
||||
float dt_;
|
||||
Group *stored_status_;
|
||||
Workspace workspace_;
|
||||
|
||||
// clones
|
||||
CloneList clones_;
|
||||
|
||||
@@ -18,7 +18,8 @@ GenericStreamSource::GenericStreamSource() : StreamSource()
|
||||
stream_ = new Stream;
|
||||
|
||||
// set symbol
|
||||
symbol_ = new Symbol(Symbol::EMPTY, glm::vec3(0.8f, 0.8f, 0.01f));
|
||||
symbol_ = new Symbol(Symbol::EMPTY, glm::vec3(0.75f, 0.75f, 0.01f));
|
||||
symbol_->scale_.y = 1.5f;
|
||||
}
|
||||
|
||||
void GenericStreamSource::setDescription(const std::string &desc)
|
||||
|
||||
@@ -109,6 +109,24 @@ string SystemToolkit::byte_to_string(long b)
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
string SystemToolkit::bits_to_string(long b)
|
||||
{
|
||||
double numbytes = static_cast<double>(b);
|
||||
ostringstream oss;
|
||||
|
||||
std::list<std::string> list = {" bit", " Kbit", " Mbit", " Gbit", " Tbit"};
|
||||
std::list<std::string>::iterator i = list.begin();
|
||||
|
||||
while(numbytes >= 1000.0 && i != list.end())
|
||||
{
|
||||
i++;
|
||||
numbytes /= 1000.0;
|
||||
}
|
||||
oss << std::fixed << std::setprecision(2) << numbytes << *i;
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
|
||||
|
||||
string SystemToolkit::date_time_string()
|
||||
{
|
||||
|
||||
@@ -76,6 +76,9 @@ namespace SystemToolkit
|
||||
// get a string to display memory size with unit KB, MB, GB, TB
|
||||
std::string byte_to_string(long b);
|
||||
|
||||
// get a string to display bit size with unit Kbit, MBit, Gbit, Tbit
|
||||
std::string bits_to_string(long b);
|
||||
|
||||
// get a transliteration to Latin of any string
|
||||
std::string transliterate(std::string input);
|
||||
}
|
||||
|
||||
@@ -71,7 +71,6 @@ static TextEditor editor;
|
||||
// utility functions
|
||||
void ShowAboutGStreamer(bool* p_open);
|
||||
void ShowAboutOpengl(bool* p_open);
|
||||
void ShowConfig(bool* p_open);
|
||||
void ShowSandbox(bool* p_open);
|
||||
|
||||
// static objects for multithreaded file dialog
|
||||
@@ -162,6 +161,8 @@ UserInterface::UserInterface()
|
||||
show_imgui_about = false;
|
||||
show_gst_about = false;
|
||||
show_opengl_about = false;
|
||||
show_view_navigator = 0;
|
||||
target_view_navigator = 1;
|
||||
currentTextEdit = "";
|
||||
screenshot_step = 0;
|
||||
|
||||
@@ -262,7 +263,7 @@ void UserInterface::handleKeyboard()
|
||||
}
|
||||
else if (ImGui::IsKeyPressed( GLFW_KEY_S )) {
|
||||
// Save Session
|
||||
if (Mixer::manager().session()->filename().empty())
|
||||
if (shift_modifier_active || Mixer::manager().session()->filename().empty())
|
||||
selectSaveFilename();
|
||||
else
|
||||
Mixer::manager().save();
|
||||
@@ -271,6 +272,10 @@ void UserInterface::handleKeyboard()
|
||||
// New Session
|
||||
Mixer::manager().close();
|
||||
}
|
||||
// else if (ImGui::IsKeyPressed( GLFW_KEY_SPACE )) {
|
||||
// // New Session
|
||||
// Mixer::manager().session()->setActive( !Mixer::manager().session()->active() );
|
||||
// }
|
||||
else if (ImGui::IsKeyPressed( GLFW_KEY_L )) {
|
||||
// Logs
|
||||
Settings::application.widget.logs = !Settings::application.widget.logs;
|
||||
@@ -382,7 +387,7 @@ void UserInterface::handleKeyboard()
|
||||
else if (ImGui::IsKeyPressed( GLFW_KEY_INSERT ))
|
||||
navigator.togglePannelNew();
|
||||
// button tab to select next
|
||||
else if (ImGui::IsKeyPressed( GLFW_KEY_TAB )) {
|
||||
else if ( !alt_modifier_active && ImGui::IsKeyPressed( GLFW_KEY_TAB )) {
|
||||
if (shift_modifier_active)
|
||||
Mixer::manager().setCurrentPrevious();
|
||||
else
|
||||
@@ -400,6 +405,17 @@ void UserInterface::handleKeyboard()
|
||||
}
|
||||
}
|
||||
|
||||
// special case: CTRL + TAB is ALT + TAB in OSX
|
||||
if (io.ConfigMacOSXBehaviors ? io.KeyAlt : io.KeyCtrl) {
|
||||
if (ImGui::IsKeyPressed( GLFW_KEY_TAB ))
|
||||
show_view_navigator += shift_modifier_active ? 3 : 1;
|
||||
}
|
||||
else if (show_view_navigator > 0) {
|
||||
show_view_navigator = 0;
|
||||
Mixer::manager().setView((View::Mode) target_view_navigator);
|
||||
}
|
||||
|
||||
|
||||
// confirmation for leaving vimix: prevent un-wanted Ctrl+Q, but make it easy to confirm
|
||||
if (ImGui::BeginPopup("confirm_quit_popup"))
|
||||
{
|
||||
@@ -547,7 +563,7 @@ void UserInterface::handleMouse()
|
||||
}
|
||||
// no source is selected
|
||||
else
|
||||
clear_selection = true;
|
||||
Mixer::manager().unsetCurrentSource();
|
||||
}
|
||||
if (clear_selection) {
|
||||
// unset current
|
||||
@@ -608,7 +624,7 @@ void UserInterface::handleMouse()
|
||||
glm::vec2 d = mousepos - mouse_smooth;
|
||||
mouse_smooth += smoothing * d;
|
||||
ImVec2 start = ImVec2(mouse_smooth.x / io.DisplayFramebufferScale.x, mouse_smooth.y / io.DisplayFramebufferScale.y);
|
||||
ImGui::GetBackgroundDrawList()->AddLine(io.MousePos, start, ImGui::GetColorU32(ImGuiCol_ResizeGripHovered), 5.f);
|
||||
ImGui::GetBackgroundDrawList()->AddLine(io.MousePos, start, ImGui::GetColorU32(ImGuiCol_HeaderActive), 5.f);
|
||||
}
|
||||
else
|
||||
mouse_smooth = mousepos;
|
||||
@@ -635,10 +651,11 @@ void UserInterface::handleMouse()
|
||||
}
|
||||
// Selection area
|
||||
else {
|
||||
ImGui::GetBackgroundDrawList()->AddRect(io.MouseClickedPos[ImGuiMouseButton_Left], io.MousePos,
|
||||
ImGui::GetColorU32(ImGuiCol_ResizeGripHovered));
|
||||
ImGui::GetBackgroundDrawList()->AddRectFilled(io.MouseClickedPos[ImGuiMouseButton_Left], io.MousePos,
|
||||
ImGui::GetColorU32(ImGuiCol_ResizeGripHovered, 0.3f));
|
||||
// highlight-colored selection rectangle
|
||||
ImVec4 color = ImGuiToolkit::HighlightColor();
|
||||
ImGui::GetBackgroundDrawList()->AddRect(io.MouseClickedPos[ImGuiMouseButton_Left], io.MousePos, ImGui::GetColorU32(color));
|
||||
color.w = 0.12; // transparent
|
||||
ImGui::GetBackgroundDrawList()->AddRectFilled(io.MouseClickedPos[ImGuiMouseButton_Left], io.MousePos, ImGui::GetColorU32(color));
|
||||
|
||||
// Bounding box multiple sources selection
|
||||
Mixer::manager().view()->select(mouseclic[ImGuiMouseButton_Left], mousepos);
|
||||
@@ -765,7 +782,7 @@ void UserInterface::NewFrame()
|
||||
void UserInterface::Render()
|
||||
{
|
||||
// warning modal dialog
|
||||
Log::Render();
|
||||
Log::Render(&Settings::application.widget.logs);
|
||||
|
||||
// clear view mode in Transition view
|
||||
if ( !Settings::application.transition.hide_windows || Settings::application.current_view < View::TRANSITION) {
|
||||
@@ -784,7 +801,9 @@ void UserInterface::Render()
|
||||
if (Settings::application.widget.logs)
|
||||
Log::ShowLogWindow(&Settings::application.widget.logs);
|
||||
|
||||
// about dialogs
|
||||
// dialogs
|
||||
if (show_view_navigator > 0)
|
||||
target_view_navigator = RenderViewNavigator( &show_view_navigator );
|
||||
if (show_vimix_about)
|
||||
RenderAbout(&show_vimix_about);
|
||||
if (show_imgui_about)
|
||||
@@ -842,7 +861,7 @@ void UserInterface::showMenuFile()
|
||||
|
||||
if (ImGui::MenuItem( ICON_FA_FILE_UPLOAD " Open", CTRL_MOD "O"))
|
||||
selectOpenFilename();
|
||||
if (ImGui::MenuItem( ICON_FA_FILE_UPLOAD " Reload", CTRL_MOD "+Shift+O"))
|
||||
if (ImGui::MenuItem( ICON_FA_FILE_UPLOAD " Reload", CTRL_MOD "Shift+O"))
|
||||
Mixer::manager().load( Mixer::manager().session()->filename() );
|
||||
|
||||
if (ImGui::MenuItem( ICON_FA_FILE_EXPORT " Import")) {
|
||||
@@ -861,7 +880,7 @@ void UserInterface::showMenuFile()
|
||||
navigator.hidePannel();
|
||||
}
|
||||
}
|
||||
if (ImGui::MenuItem( ICON_FA_SAVE " Save as"))
|
||||
if (ImGui::MenuItem( ICON_FA_SAVE " Save as", CTRL_MOD "Shift+S"))
|
||||
selectSaveFilename();
|
||||
|
||||
ImGui::MenuItem( ICON_FA_FILE_DOWNLOAD " Save on exit", nullptr, &Settings::application.recentSessions.save_on_exit);
|
||||
@@ -1049,6 +1068,8 @@ void UserInterface::RenderHistory()
|
||||
bool tmp = false;
|
||||
if (ImGui::BeginMenuBar())
|
||||
{
|
||||
if (ImGuiToolkit::IconButton(4,16))
|
||||
Settings::application.widget.history = false;
|
||||
if (ImGui::BeginMenu(IMGUI_TITLE_HISTORY))
|
||||
{
|
||||
if ( ImGui::MenuItem( ICON_FA_UNDO " Undo", CTRL_MOD "Z") )
|
||||
@@ -1139,6 +1160,8 @@ void UserInterface::RenderPreview()
|
||||
// menu (no title bar)
|
||||
if (ImGui::BeginMenuBar())
|
||||
{
|
||||
if (ImGuiToolkit::IconButton(4,16))
|
||||
Settings::application.widget.preview = false;
|
||||
if (ImGui::BeginMenu(IMGUI_TITLE_PREVIEW))
|
||||
{
|
||||
glm::ivec2 p = FrameBuffer::getParametersFromResolution(output->resolution());
|
||||
@@ -1372,6 +1395,97 @@ void UserInterface::RenderPreview()
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int UserInterface::RenderViewNavigator(int *shift)
|
||||
{
|
||||
// calculate potential target view index :
|
||||
// - shift increment : minus 1 to not react to first trigger
|
||||
// - current_view : indices are between 1 (Mixing) and 5 (Appearance)
|
||||
// - Modulo 4 to allow multiple repetition of shift increment
|
||||
int target_index = ( (Settings::application.current_view -1)+ (*shift -1) )%4 + 1;
|
||||
|
||||
// prepare rendering of centered, fixed-size, semi-transparent window;
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
ImVec2 window_pos = ImVec2(io.DisplaySize.x / 2.f, io.DisplaySize.y / 2.f);
|
||||
ImVec2 window_pos_pivot = ImVec2(0.5f, 0.5f);
|
||||
ImGui::SetNextWindowPos(window_pos, ImGuiCond_Always, window_pos_pivot);
|
||||
ImGui::SetNextWindowSize(ImVec2(500.f, 120.f + 2.f * ImGui::GetTextLineHeight()), ImGuiCond_Always);
|
||||
ImGui::SetNextWindowBgAlpha(0.85f);
|
||||
|
||||
// show window
|
||||
if (ImGui::Begin("Views", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
|
||||
{
|
||||
// prepare rendering of the array of selectable icons
|
||||
bool selected_view[View::INVALID] = { };
|
||||
selected_view[ target_index ] = true;
|
||||
ImVec2 iconsize(120.f, 120.f);
|
||||
|
||||
// draw icons centered horizontally and vertically
|
||||
ImVec2 alignment = ImVec2(0.4f, 0.5f);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, alignment);
|
||||
|
||||
// draw in 4 columns
|
||||
ImGui::Columns(4, NULL, false);
|
||||
|
||||
// 4 selectable large icons
|
||||
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_LARGE);
|
||||
if (ImGui::Selectable( ICON_FA_BULLSEYE, &selected_view[1], 0, iconsize))
|
||||
{
|
||||
Mixer::manager().setView(View::MIXING);
|
||||
*shift = 0;
|
||||
}
|
||||
ImGui::NextColumn();
|
||||
if (ImGui::Selectable( ICON_FA_OBJECT_UNGROUP , &selected_view[2], 0, iconsize))
|
||||
{
|
||||
Mixer::manager().setView(View::GEOMETRY);
|
||||
*shift = 0;
|
||||
}
|
||||
ImGui::NextColumn();
|
||||
if (ImGui::Selectable( ICON_FA_LAYER_GROUP, &selected_view[3], 0, iconsize))
|
||||
{
|
||||
Mixer::manager().setView(View::LAYER);
|
||||
*shift = 0;
|
||||
}
|
||||
ImGui::NextColumn();
|
||||
if (ImGui::Selectable( ICON_FA_CHESS_BOARD, &selected_view[4], 0, iconsize))
|
||||
{
|
||||
Mixer::manager().setView(View::APPEARANCE);
|
||||
*shift = 0;
|
||||
}
|
||||
ImGui::PopFont();
|
||||
|
||||
// 4 subtitles (text centered in column)
|
||||
ImGui::NextColumn();
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + (ImGui::GetColumnWidth() - ImGui::CalcTextSize("Mixing").x) * 0.5f - ImGui::GetStyle().ItemSpacing.x);
|
||||
|
||||
ImGuiToolkit::PushFont(Settings::application.current_view == 1 ? ImGuiToolkit::FONT_BOLD : ImGuiToolkit::FONT_DEFAULT);
|
||||
ImGui::Text("Mixing");
|
||||
ImGui::PopFont();
|
||||
ImGui::NextColumn();
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + (ImGui::GetColumnWidth() - ImGui::CalcTextSize("Geometry").x) * 0.5f - ImGui::GetStyle().ItemSpacing.x);
|
||||
ImGuiToolkit::PushFont(Settings::application.current_view == 2 ? ImGuiToolkit::FONT_BOLD : ImGuiToolkit::FONT_DEFAULT);
|
||||
ImGui::Text("Geometry");
|
||||
ImGui::PopFont();
|
||||
ImGui::NextColumn();
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + (ImGui::GetColumnWidth() - ImGui::CalcTextSize("Layers").x) * 0.5f - ImGui::GetStyle().ItemSpacing.x);
|
||||
ImGuiToolkit::PushFont(Settings::application.current_view == 3 ? ImGuiToolkit::FONT_BOLD : ImGuiToolkit::FONT_DEFAULT);
|
||||
ImGui::Text("Layers");
|
||||
ImGui::PopFont();
|
||||
ImGui::NextColumn();
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + (ImGui::GetColumnWidth() - ImGui::CalcTextSize("Texturing").x) * 0.5f - ImGui::GetStyle().ItemSpacing.x);
|
||||
ImGuiToolkit::PushFont(Settings::application.current_view == 4 ? ImGuiToolkit::FONT_BOLD : ImGuiToolkit::FONT_DEFAULT);
|
||||
ImGui::Text("Texturing");
|
||||
ImGui::PopFont();
|
||||
|
||||
ImGui::Columns(1);
|
||||
ImGui::PopStyleVar();
|
||||
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
return target_index;
|
||||
}
|
||||
|
||||
void UserInterface::showMediaPlayer(MediaPlayer *mp)
|
||||
{
|
||||
Settings::application.widget.media_player = true;
|
||||
@@ -1442,6 +1556,8 @@ void MediaController::Render()
|
||||
// menu (no title bar)
|
||||
if (ImGui::BeginMenuBar())
|
||||
{
|
||||
if (ImGuiToolkit::IconButton(4,16))
|
||||
Settings::application.widget.media_player = false;
|
||||
if (ImGui::BeginMenu(IMGUI_TITLE_MEDIAPLAYER))
|
||||
{
|
||||
ImGui::MenuItem( ICON_FA_EYE " Preview", nullptr, &Settings::application.widget.media_player_view);
|
||||
@@ -1535,8 +1651,8 @@ void MediaController::Render()
|
||||
|
||||
ImGui::SetCursorScreenPos(tooltip_pos);
|
||||
ImGui::Text(" %s", mp_->filename().c_str());
|
||||
ImGui::Text(" %s", mp_->codec().c_str());
|
||||
if ( mp_->frameRate() > 0.f )
|
||||
ImGui::Text(" %s", mp_->media().codec_name.c_str());
|
||||
if ( mp_->frameRate() > 1.f )
|
||||
ImGui::Text(" %d x %d px, %.2f / %.2f fps", mp_->width(), mp_->height(), mp_->updateFrameRate() , mp_->frameRate() );
|
||||
else
|
||||
ImGui::Text(" %d x %d px", mp_->width(), mp_->height());
|
||||
@@ -1896,8 +2012,8 @@ void Navigator::hidePannel()
|
||||
|
||||
void Navigator::Render()
|
||||
{
|
||||
std::string about = "";
|
||||
static uint count_about = 0;
|
||||
std::string tooltip_ = "";
|
||||
static uint timer_tooltip_ = 0;
|
||||
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
ImGuiStyle& style = ImGui::GetStyle();
|
||||
@@ -1933,15 +2049,16 @@ void Navigator::Render()
|
||||
applyButtonSelection(NAV_MENU);
|
||||
}
|
||||
if (ImGui::IsItemHovered())
|
||||
about = "Main menu [Home]";
|
||||
tooltip_ = "Main menu HOME";
|
||||
|
||||
// the list of INITIALS for sources
|
||||
int index = 0;
|
||||
SourceList::iterator iter;
|
||||
for (iter = Mixer::manager().session()->begin(); iter != Mixer::manager().session()->end(); iter++, index++)
|
||||
{
|
||||
Source *s = (*iter);
|
||||
// draw an indicator for current source
|
||||
if ( (*iter)->mode() >= Source::SELECTED ){
|
||||
if ( s->mode() >= Source::SELECTED ){
|
||||
ImDrawList* draw_list = ImGui::GetWindowDrawList();
|
||||
ImVec2 p1 = ImGui::GetCursorScreenPos() + ImVec2(icon_width, 0.5f * icon_width);
|
||||
ImVec2 p2 = ImVec2(p1.x + 2.f, p1.y + 2.f);
|
||||
@@ -1953,13 +2070,35 @@ void Navigator::Render()
|
||||
draw_list->AddRect(p1, p2, color, 0.0f, 0, 3.f);
|
||||
}
|
||||
// draw select box
|
||||
ImGui::PushID(std::to_string((*iter)->group(View::RENDERING)->id()).c_str());
|
||||
if (ImGui::Selectable( (*iter)->initials(), &selected_button[index], 0, iconsize))
|
||||
ImGui::PushID(std::to_string(s->group(View::RENDERING)->id()).c_str());
|
||||
if (ImGui::Selectable(s->initials(), &selected_button[index], 0, iconsize))
|
||||
{
|
||||
applyButtonSelection(index);
|
||||
if (selected_button[index])
|
||||
Mixer::manager().setCurrentIndex(index);
|
||||
}
|
||||
|
||||
if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_None))
|
||||
{
|
||||
ImGui::SetDragDropPayload("DND_SOURCE", &index, sizeof(int));
|
||||
ImGui::Text( ICON_FA_SORT " %s ", s->initials());
|
||||
ImGui::EndDragDropSource();
|
||||
}
|
||||
if (ImGui::BeginDragDropTarget())
|
||||
{
|
||||
if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("DND_SOURCE"))
|
||||
{
|
||||
if ( payload->DataSize == sizeof(int) ) {
|
||||
int payload_index = *(const int*)payload->Data;
|
||||
int current_source_index = Mixer::manager().indexCurrentSource();
|
||||
Mixer::manager().session()->move(payload_index, index);
|
||||
if (payload_index == current_source_index)
|
||||
applyButtonSelection(index);
|
||||
}
|
||||
}
|
||||
ImGui::EndDragDropTarget();
|
||||
}
|
||||
|
||||
ImGui::PopID();
|
||||
}
|
||||
|
||||
@@ -1970,7 +2109,7 @@ void Navigator::Render()
|
||||
applyButtonSelection(NAV_NEW);
|
||||
}
|
||||
if (ImGui::IsItemHovered())
|
||||
about = "New Source [Ins]";
|
||||
tooltip_ = "New Source INS";
|
||||
|
||||
}
|
||||
else {
|
||||
@@ -1999,46 +2138,42 @@ void Navigator::Render()
|
||||
view_pannel_visible = previous_view == Settings::application.current_view;
|
||||
}
|
||||
if (ImGui::IsItemHovered())
|
||||
about = "Mixing [ F1 ]";
|
||||
tooltip_ = "Mixing F1";
|
||||
if (ImGui::Selectable( ICON_FA_OBJECT_UNGROUP , &selected_view[2], 0, iconsize))
|
||||
{
|
||||
if (ImGui::IsItemHovered())
|
||||
Mixer::manager().setView(View::GEOMETRY);
|
||||
view_pannel_visible = previous_view == Settings::application.current_view;
|
||||
}
|
||||
if (ImGui::IsItemHovered())
|
||||
about = "Geometry [ F2 ]";
|
||||
tooltip_ = "Geometry F2";
|
||||
if (ImGui::Selectable( ICON_FA_LAYER_GROUP, &selected_view[3], 0, iconsize))
|
||||
{
|
||||
Mixer::manager().setView(View::LAYER);
|
||||
view_pannel_visible = previous_view == Settings::application.current_view;
|
||||
}
|
||||
if (ImGui::IsItemHovered())
|
||||
about = "Layers [ F3 ]";
|
||||
tooltip_ = "Layers F3";
|
||||
if (ImGui::Selectable( ICON_FA_CHESS_BOARD, &selected_view[4], 0, iconsize))
|
||||
{
|
||||
Mixer::manager().setView(View::APPEARANCE);
|
||||
view_pannel_visible = previous_view == Settings::application.current_view;
|
||||
}
|
||||
if (ImGui::IsItemHovered())
|
||||
about = "Texturing [ F4 ]";
|
||||
tooltip_ = "Texturing F4";
|
||||
|
||||
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
if (!about.empty()) {
|
||||
count_about++;
|
||||
if (count_about > 100) {
|
||||
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_DEFAULT);
|
||||
ImGui::BeginTooltip();
|
||||
ImGui::Text("%s", about.c_str());
|
||||
ImGui::EndTooltip();
|
||||
ImGui::PopFont();
|
||||
}
|
||||
// show tooltip
|
||||
if (!tooltip_.empty()) {
|
||||
timer_tooltip_++;
|
||||
// pseudo timeout for showing tooltip
|
||||
if (timer_tooltip_ > 80)
|
||||
ImGuiToolkit::ToolTip(tooltip_.substr(0, tooltip_.size()-4).c_str(), tooltip_.substr(tooltip_.size()-4, 4).c_str());
|
||||
}
|
||||
else
|
||||
count_about = 0;
|
||||
timer_tooltip_ = 0;
|
||||
|
||||
if ( view_pannel_visible && !pannel_visible_ )
|
||||
RenderViewPannel( ImVec2(width_, sourcelist_height_), ImVec2(width_*0.8f, height_ - sourcelist_height_) );
|
||||
@@ -2082,10 +2217,9 @@ void Navigator::RenderViewPannel(ImVec2 draw_pos , ImVec2 draw_size)
|
||||
ImGui::SetNextWindowBgAlpha(0.95f); // Transparent background
|
||||
if (ImGui::Begin("##ViewPannel", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
|
||||
{
|
||||
bool dumm = true;
|
||||
ImGui::SetCursorPosX(10.f);
|
||||
ImGui::SetCursorPosY(10.f);
|
||||
if (ImGuiToolkit::IconToggle(4,7,5,7, &dumm)) {
|
||||
if (ImGuiToolkit::IconButton(5,7)) {
|
||||
// reset zoom
|
||||
Mixer::manager().view((View::Mode)Settings::application.current_view)->recenter();
|
||||
}
|
||||
@@ -2497,10 +2631,10 @@ void Navigator::RenderMainPannel()
|
||||
ImGui::PopFont();
|
||||
|
||||
// Icon to switch fullscreen
|
||||
ImGui::SetCursorPos(ImVec2(pannel_width_ - 35.f, 15.f));
|
||||
ImGui::SetCursorPos(ImVec2(pannel_width_ - 40.f, 13.f));
|
||||
const char *tooltip[2] = {"Enter Fullscreen (" CTRL_MOD "Shift+F)", "Exit Fullscreen (" CTRL_MOD "Shift+F)"};
|
||||
bool fs = Rendering::manager().mainWindow().isFullscreen();
|
||||
if ( ImGuiToolkit::IconToggle(3,15,2,15, &fs, tooltip ) ) {
|
||||
if ( ImGuiToolkit::IconToggle(4,15,3,15, &fs, tooltip ) ) {
|
||||
Rendering::manager().mainWindow().toggleFullscreen();
|
||||
}
|
||||
// Session menu
|
||||
@@ -2625,7 +2759,7 @@ void Navigator::RenderMainPannel()
|
||||
// display the sessions list and detect if one was selected (double clic)
|
||||
bool session_selected = false;
|
||||
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
||||
ImGui::ListBoxHeader("##Sessions", 5);
|
||||
ImGui::ListBoxHeader("##Sessions", CLAMP(sessions_list.size(), 4, 8));
|
||||
static std::string file_info = "";
|
||||
static std::list<std::string>::iterator file_selected = sessions_list.end();
|
||||
for(auto it = sessions_list.begin(); it != sessions_list.end(); it++) {
|
||||
|
||||
@@ -113,6 +113,8 @@ class UserInterface
|
||||
bool show_imgui_about;
|
||||
bool show_gst_about;
|
||||
bool show_opengl_about;
|
||||
int show_view_navigator;
|
||||
int target_view_navigator;
|
||||
unsigned int screenshot_step;
|
||||
|
||||
// frame grabbers
|
||||
@@ -165,6 +167,7 @@ protected:
|
||||
void RenderPreview();
|
||||
void RenderHistory();
|
||||
void RenderShaderEditor();
|
||||
int RenderViewNavigator(int* shift);
|
||||
void handleKeyboard();
|
||||
void handleMouse();
|
||||
void handleScreenshot();
|
||||
|
||||
51
View.h
51
View.h
@@ -9,11 +9,14 @@
|
||||
class Source;
|
||||
typedef std::list<Source *> SourceList;
|
||||
|
||||
class SessionSource;
|
||||
class Session;
|
||||
class SessionFileSource;
|
||||
class Surface;
|
||||
class Symbol;
|
||||
class Mesh;
|
||||
class Frame;
|
||||
class Disk;
|
||||
class Handles;
|
||||
|
||||
class View
|
||||
{
|
||||
@@ -60,6 +63,7 @@ public:
|
||||
// select sources provided a start and end selection points in screen coordinates
|
||||
virtual void select(glm::vec2, glm::vec2);
|
||||
virtual void selectAll();
|
||||
virtual bool canSelect(Source *);
|
||||
|
||||
// drag the view provided a start and an end point in screen coordinates
|
||||
virtual Cursor drag (glm::vec2, glm::vec2);
|
||||
@@ -93,6 +97,10 @@ protected:
|
||||
std::string current_action_;
|
||||
uint64_t current_id_;
|
||||
Mode mode_;
|
||||
|
||||
// contex menu
|
||||
bool show_context_menu_;
|
||||
inline void openContextMenu() { show_context_menu_ = true; }
|
||||
};
|
||||
|
||||
|
||||
@@ -106,8 +114,6 @@ public:
|
||||
void resize (int) override;
|
||||
int size () override;
|
||||
void centerSource(Source *) override;
|
||||
void select(glm::vec2, glm::vec2) override;
|
||||
void selectAll() override;
|
||||
|
||||
std::pair<Node *, glm::vec2> pick(glm::vec2) override;
|
||||
Cursor grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair<Node *, glm::vec2>) override;
|
||||
@@ -121,12 +127,12 @@ private:
|
||||
float limbo_scale_;
|
||||
|
||||
Group *slider_root_;
|
||||
class Disk *slider_;
|
||||
class Disk *button_white_;
|
||||
class Disk *button_black_;
|
||||
class Disk *stashCircle_;
|
||||
class Mesh *mixingCircle_;
|
||||
|
||||
Disk *slider_;
|
||||
Disk *button_white_;
|
||||
Disk *button_black_;
|
||||
Disk *stashCircle_;
|
||||
Mesh *mixingCircle_;
|
||||
Mesh *circle_;
|
||||
};
|
||||
|
||||
class RenderView : public View
|
||||
@@ -139,8 +145,9 @@ public:
|
||||
~RenderView ();
|
||||
|
||||
void draw () override;
|
||||
bool canSelect(Source *) override;
|
||||
|
||||
void setResolution (glm::vec3 resolution = glm::vec3(0.f));
|
||||
void setResolution (glm::vec3 resolution = glm::vec3(0.f), bool useAlpha = false);
|
||||
glm::vec3 resolution() const { return frame_buffer_->resolution(); }
|
||||
|
||||
void setFading(float f = 0.f);
|
||||
@@ -158,6 +165,7 @@ public:
|
||||
void update (float dt) override;
|
||||
void resize (int) override;
|
||||
int size () override;
|
||||
bool canSelect(Source *) override;
|
||||
|
||||
std::pair<Node *, glm::vec2> pick(glm::vec2 P) override;
|
||||
Cursor grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair<Node *, glm::vec2> pick) override;
|
||||
@@ -176,7 +184,6 @@ private:
|
||||
Node *overlay_scaling_cross_;
|
||||
Node *overlay_scaling_grid_;
|
||||
Node *overlay_crop_;
|
||||
bool show_context_menu_;
|
||||
};
|
||||
|
||||
class LayerView : public View
|
||||
@@ -184,10 +191,13 @@ class LayerView : public View
|
||||
public:
|
||||
LayerView();
|
||||
|
||||
void draw () override;
|
||||
void update (float dt) override;
|
||||
void resize (int) override;
|
||||
int size () override;
|
||||
bool canSelect(Source *) override;
|
||||
|
||||
std::pair<Node *, glm::vec2> pick(glm::vec2) override;
|
||||
Cursor grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair<Node *, glm::vec2> pick) override;
|
||||
void arrow (glm::vec2) override;
|
||||
|
||||
@@ -198,6 +208,10 @@ private:
|
||||
Mesh *persp_layer_;
|
||||
Mesh *persp_left_, *persp_right_;
|
||||
Group *frame_;
|
||||
Group *overlay_group_;
|
||||
Frame *overlay_group_frame_;
|
||||
Handles *overlay_group_icon_;
|
||||
|
||||
};
|
||||
|
||||
class TransitionView : public View
|
||||
@@ -208,22 +222,22 @@ public:
|
||||
void draw () override;
|
||||
void update (float dt) override;
|
||||
void zoom (float factor) override;
|
||||
void selectAll() override;
|
||||
bool canSelect(Source *) override;
|
||||
|
||||
std::pair<Node *, glm::vec2> pick(glm::vec2 P) override;
|
||||
Cursor grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair<Node *, glm::vec2> pick) override;
|
||||
void arrow (glm::vec2) override;
|
||||
Cursor drag (glm::vec2, glm::vec2) override;
|
||||
|
||||
void attach(SessionSource *ts);
|
||||
class Session *detach();
|
||||
void attach(SessionFileSource *ts);
|
||||
Session *detach();
|
||||
void play(bool open);
|
||||
|
||||
private:
|
||||
Surface *output_surface_;
|
||||
Mesh *mark_100ms_, *mark_1s_;
|
||||
Switch *gradient_;
|
||||
SessionSource *transition_source_;
|
||||
SessionFileSource *transition_source_;
|
||||
};
|
||||
|
||||
|
||||
@@ -232,14 +246,12 @@ class AppearanceView : public View
|
||||
public:
|
||||
AppearanceView();
|
||||
|
||||
void select(glm::vec2, glm::vec2) override;
|
||||
void selectAll() override;
|
||||
|
||||
void draw () override;
|
||||
|
||||
void update (float dt) override;
|
||||
void resize (int) override;
|
||||
int size () override;
|
||||
bool canSelect(Source *) override;
|
||||
void select(glm::vec2 A, glm::vec2 B) override;
|
||||
|
||||
std::pair<Node *, glm::vec2> pick(glm::vec2 P) override;
|
||||
Cursor grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair<Node *, glm::vec2> pick) override;
|
||||
@@ -280,7 +292,6 @@ private:
|
||||
Symbol *overlay_rotation_fix_;
|
||||
Node *overlay_rotation_clock_;
|
||||
Symbol *overlay_rotation_clock_hand_;
|
||||
bool show_context_menu_;
|
||||
|
||||
// for mask shader draw: 0=cursor, 1=brush, 2=eraser, 3=crop_shape
|
||||
int mask_cursor_paint_;
|
||||
|
||||
@@ -32,7 +32,8 @@ class MediaSource;
|
||||
class PatternSource;
|
||||
class DeviceSource;
|
||||
class GenericStreamSource;
|
||||
class SessionSource;
|
||||
class SessionFileSource;
|
||||
class SessionGroupSource;
|
||||
class RenderSource;
|
||||
class CloneSource;
|
||||
class NetworkSource;
|
||||
@@ -75,7 +76,8 @@ public:
|
||||
virtual void visit (GenericStreamSource&) {}
|
||||
virtual void visit (DeviceSource&) {}
|
||||
virtual void visit (PatternSource&) {}
|
||||
virtual void visit (SessionSource&) {}
|
||||
virtual void visit (SessionFileSource&) {}
|
||||
virtual void visit (SessionGroupSource&) {}
|
||||
virtual void visit (RenderSource&) {}
|
||||
virtual void visit (CloneSource&) {}
|
||||
|
||||
|
||||
22
defines.h
22
defines.h
@@ -9,6 +9,7 @@
|
||||
#define XML_VERSION_MAJOR 0
|
||||
#define XML_VERSION_MINOR 2
|
||||
#define MAX_RECENT_HISTORY 20
|
||||
#define MAX_SESSION_LEVEL 3
|
||||
|
||||
#define MINI(a, b) (((a) < (b)) ? (a) : (b))
|
||||
#define MAXI(a, b) (((a) > (b)) ? (a) : (b))
|
||||
@@ -24,15 +25,13 @@
|
||||
#define ROUND(val, factor) float( int( val * factor ) ) / factor;
|
||||
|
||||
#define SCENE_UNIT 5.f
|
||||
#define CIRCLE_SQUARE_DIST(x,y) ( (x*x + y*y) / (SCENE_UNIT * SCENE_UNIT * SCENE_UNIT * SCENE_UNIT) )
|
||||
#define MIN_SCALE 0.01f
|
||||
#define MAX_SCALE 10.f
|
||||
#define CLAMP_SCALE(x) SIGN(x) * CLAMP( ABS(x), MIN_SCALE, MAX_SCALE)
|
||||
#define SCENE_DEPTH 14.f
|
||||
#define MIN_DEPTH 0.f
|
||||
#define MAX_DEPTH 12.f
|
||||
#define BACKGROUND_DEPTH 2.f
|
||||
#define FOREGROUND_DEPTH 10.f
|
||||
#define DELTA_DEPTH 0.05f
|
||||
#define MIXING_DEFAULT_SCALE 2.4f
|
||||
#define MIXING_MIN_SCALE 0.8f
|
||||
#define MIXING_MAX_SCALE 7.0f
|
||||
@@ -45,6 +44,9 @@
|
||||
#define LAYER_MIN_SCALE 0.4f
|
||||
#define LAYER_MAX_SCALE 1.7f
|
||||
#define LAYER_PERSPECTIVE 2.0f
|
||||
#define LAYER_BACKGROUND 2.f
|
||||
#define LAYER_FOREGROUND 10.f
|
||||
#define LAYER_STEP 0.25f
|
||||
#define APPEARANCE_DEFAULT_SCALE 2.f
|
||||
#define APPEARANCE_MIN_SCALE 0.4f
|
||||
#define APPEARANCE_MAX_SCALE 7.0f
|
||||
@@ -80,17 +82,21 @@
|
||||
|
||||
#define COLOR_BGROUND 0.2f, 0.2f, 0.2f
|
||||
#define COLOR_NAVIGATOR 0.1f, 0.1f, 0.1f
|
||||
#define COLOR_DEFAULT_SOURCE 0.8f, 0.8f, 0.8f
|
||||
#define COLOR_DEFAULT_SOURCE 0.7f, 0.7f, 0.7f
|
||||
#define COLOR_HIGHLIGHT_SOURCE 1.f, 1.f, 1.f
|
||||
#define COLOR_TRANSITION_SOURCE 1.f, 0.5f, 1.f
|
||||
#define COLOR_TRANSITION_LINES 0.9f, 0.9f, 0.9f
|
||||
#define COLOR_APPEARANCE_SOURCE 0.9f, 0.9f, 0.1f
|
||||
#define COLOR_APPEARANCE_MASK 0.1f, 0.9f, 0.9f
|
||||
#define COLOR_APPEARANCE_MASK_DISABLE 0.3f, 0.6f, 0.6f
|
||||
#define COLOR_FRAME 0.8f, 0.f, 0.8f
|
||||
#define COLOR_FRAME_LIGHT 0.95f, 0.3f, 0.95f
|
||||
#define COLOR_APPEARANCE_LIGHT 1.0f, 1.0f, 0.9f
|
||||
#define COLOR_APPEARANCE_MASK 0.9f, 0.9f, 0.9f
|
||||
#define COLOR_APPEARANCE_MASK_DISABLE 0.6f, 0.6f, 0.6f
|
||||
#define COLOR_FRAME 0.75f, 0.2f, 0.75f
|
||||
#define COLOR_FRAME_LIGHT 0.9f, 0.6f, 0.9f
|
||||
#define COLOR_CIRCLE 0.25f, 0.65f, 0.7f
|
||||
#define COLOR_CIRCLE_LIGHT 0.6f, 0.95f, 1.f
|
||||
#define COLOR_LIMBO_CIRCLE 0.16f, 0.16f, 0.16f
|
||||
#define COLOR_SLIDER_CIRCLE 0.11f, 0.11f, 0.11f
|
||||
#define COLOR_STASH_CIRCLE 0.06f, 0.06f, 0.06f
|
||||
|
||||
|
||||
#endif // VMIX_DEFINES_H
|
||||
|
||||
@@ -9,7 +9,7 @@ monitor or a projector, but can be streamed or recorded live (no audio).
|
||||
|
||||

|
||||
|
||||
Check the [Graphical User Manual](https://github.com/brunoherbelin/vimix/wiki/User-manual) for more details.
|
||||
Check the [Graphical User Manual](https://github.com/brunoherbelin/vimix/wiki/User-manual) for more details or this selection of [videos by Jean Detheux](https://vimeo.com/showcase/7871359).
|
||||
|
||||
## Install vimix
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 37 KiB |
Binary file not shown.
@@ -27,9 +27,9 @@
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="32"
|
||||
inkscape:cx="34.523709"
|
||||
inkscape:cy="21.609175"
|
||||
inkscape:zoom="22.627417"
|
||||
inkscape:cx="35.082716"
|
||||
inkscape:cy="31.811389"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:document-units="px"
|
||||
@@ -41,8 +41,8 @@
|
||||
guidetolerance="10000"
|
||||
inkscape:window-width="2890"
|
||||
inkscape:window-height="1885"
|
||||
inkscape:window-x="982"
|
||||
inkscape:window-y="112"
|
||||
inkscape:window-x="817"
|
||||
inkscape:window-y="89"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
@@ -168,7 +168,7 @@
|
||||
xlink:href="#linearGradient3237-580"
|
||||
id="radialGradient855"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(4.0147937,-0.11912026,0.11328765,3.8182126,-1.0246148,2.407343)"
|
||||
gradientTransform="matrix(4.0147937,-0.11912026,0.11328765,3.8182126,-0.22443818,-46.542095)"
|
||||
cx="8"
|
||||
cy="8"
|
||||
fx="8"
|
||||
@@ -191,20 +191,32 @@
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(-0.8,48.8)">
|
||||
transform="translate(-0.8,48.8)"
|
||||
style="opacity:0.89674699">
|
||||
<ellipse
|
||||
style="fill:#0c0c0c;fill-opacity:0.477137;stroke:none;stroke-width:0.862179;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path854"
|
||||
cx="32.799999"
|
||||
cy="-16.91748"
|
||||
rx="27.470198"
|
||||
ry="27.375973" />
|
||||
<path
|
||||
id="path4090"
|
||||
d="m 32.8,-48.060406 c -17.255744,0 -31.2604062,14.004662 -31.2604062,31.260406 0,17.25574444 14.0046622,31.260406 31.2604062,31.260406 17.255744,0 31.260406,-14.00466156 31.260406,-31.260406 0,-17.255744 -14.004662,-31.260406 -31.260406,-31.260406 z m 0,3.907551 c 15.098776,0 27.352855,12.254079 27.352855,27.352855 0,15.0987764 -12.254079,27.352856 -27.352855,27.352856 -15.098776,0 -27.3528555,-12.2540796 -27.3528555,-27.352856 0,-15.098776 12.2540795,-27.352855 27.3528555,-27.352855 z"
|
||||
style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#848484;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.34172;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.6;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
|
||||
inkscape:connector-curvature="0" />
|
||||
d="m 32.8,-48.060406 c -17.255744,0 -31.2604061,14.004662 -31.2604061,31.260406 0,17.25574393 14.0046621,31.260406 31.2604061,31.260406 17.255744,0 31.260406,-14.00466207 31.260406,-31.260406 0,-17.255744 -14.004662,-31.260406 -31.260406,-31.260406 z m 0,3.907551 c 15.098776,0 27.352855,12.254079 27.352855,27.352855 0,15.0987763 -12.254079,27.352856 -27.352855,27.352856 -15.098776,0 -27.3528552,-12.2540797 -27.3528552,-27.352856 0,-15.098776 12.2540792,-27.352855 27.3528552,-27.352855 z"
|
||||
style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#848484;fill-opacity:0.654019;fill-rule:nonzero;stroke:none;stroke-width:4.34172;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.6;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="405"
|
||||
inkscape:export-ydpi="405" />
|
||||
<g
|
||||
id="g858">
|
||||
<path
|
||||
id="path4096"
|
||||
style="display:inline;overflow:visible;visibility:visible;opacity:0.801;fill:url(#radialGradient855);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:stroke fill markers;enable-background:accumulate"
|
||||
d="m 36.688849,-42.590063 c -0.303933,2.108537 -2.081796,3.675579 -4.183594,3.6875 -2.080492,0.0106 -3.863017,-1.50665 -4.21289,-3.585937 -12.672805,2.236616 -21.7888326,13.427755 -21.4160161,26.291015 0.1430268,4.836336 1.636139,9.5362214 4.3105471,13.5683594 L 33.725958,-20.359594 v -1.535156 c 0,-3.229159 2.616539,-5.847657 5.845703,-5.847657 1.906945,0 3.585217,0.927726 4.652344,2.339844 h 1.195313 c 3.875281,0 7.017578,2.093968 7.017578,4.677734 l -7.017578,1.167969 v 5.847656 c 0,6.3779194 -4.259861,11.7530414 -10.085938,13.45898538 l 3.015625,8.15429682 c 0.05432,0.149079 0.106204,0.243515 0.205076,0.378518 C 50.521949,5.6477954 58.834499,-4.9395226 58.733771,-17.193579 58.61364,-29.921919 49.273879,-40.681635 36.688849,-42.590063 Z m 2.769317,19.244586 c -0.764292,0 -1.38415,0.619286 -1.38415,1.384151 0,0.764288 0.619858,1.385691 1.38415,1.385691 0.764291,0 1.385692,-0.621403 1.385692,-1.385691 0,-0.764865 -0.621402,-1.384151 -1.385692,-1.384151 z M 31.800177,0.30446838 c -0.138877,0.0044 -0.274456,0.01953 -0.414062,0.01953 h -2.855469 l 2.800781,7.58007782 c 0.138751,0.380792 0.336318,0.7630677 0.493205,1.0479047 0.763561,0.0573 0.707955,0.03676 1.473592,0.02631 0.559417,-0.01186 1.118303,-0.04182 1.675781,-0.08984 z m -14.0625,0.01953 -2.873047,1.43554602 c 3.582287,3.433627 8.074429,5.76748 12.943359,6.7246095 L 24.788458,0.32399838 Z"
|
||||
sodipodi:nodetypes="ccccccsscsccscccccssssscsccccccccccc" />
|
||||
</g>
|
||||
<path
|
||||
id="path4096"
|
||||
style="display:inline;overflow:visible;visibility:visible;opacity:0.801;fill:url(#radialGradient855);fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:2.09426;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:stroke fill markers;enable-background:accumulate"
|
||||
d="m 35.888672,6.359375 c -0.303933,2.1085366 -2.081796,3.675579 -4.183594,3.6875 -2.080492,0.0106 -3.863017,-1.5066505 -4.21289,-3.5859375 C 14.819383,8.697554 5.7033554,19.888693 6.0761719,32.751953 c 0.1430268,4.836335 1.636139,9.536221 4.3105471,13.568359 L 32.925781,28.589844 v -1.535156 c 0,-3.229159 2.616539,-5.847657 5.845703,-5.847657 1.906945,0 3.585217,0.927726 4.652344,2.339844 h 1.195313 c 3.875281,0 7.017578,2.093968 7.017578,4.677734 l -7.017578,1.167969 v 5.847656 c 0,6.377919 -4.259861,11.753041 -10.085938,13.458985 l 3.015625,8.154297 c 0.05432,0.149079 0.106204,0.243515 0.205076,0.378518 C 49.721772,54.597233 58.034322,44.009915 57.933594,31.755859 57.813463,19.027519 48.473702,8.2678032 35.888672,6.359375 Z m 2.882812,18.941406 c -0.968462,0 -1.753906,0.78472 -1.753906,1.753907 0,0.968457 0.785445,1.755859 1.753906,1.755859 0.96846,0 1.75586,-0.787402 1.75586,-1.755859 0,-0.969187 -0.787401,-1.753907 -1.75586,-1.753907 z M 31,49.253906 c -0.138877,0.0044 -0.274456,0.01953 -0.414062,0.01953 h -2.855469 l 2.800781,7.580078 c 0.138751,0.380792 0.336318,0.763068 0.493205,1.047905 0.763561,0.0573 0.707955,0.03676 1.473592,0.02631 0.559417,-0.01186 1.118303,-0.04182 1.675781,-0.08984 z m -14.0625,0.01953 -2.873047,1.435546 c 3.582287,3.433627 8.074429,5.76748 12.943359,6.72461 l -3.019531,-8.160156 z"
|
||||
transform="translate(0.8,-48.8)"
|
||||
sodipodi:nodetypes="ccccccsscsccscccccssssscsccccccccccc" />
|
||||
<path
|
||||
style="opacity:0.80908332;fill:#acacac;fill-opacity:1;stroke:#1c1c1c;stroke-width:1.12343;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
style="opacity:0.809083;fill:#888888;fill-opacity:1;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
id="path859"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:cx="32.47654"
|
||||
|
||||
|
Before Width: | Height: | Size: 323 KiB After Width: | Height: | Size: 324 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 37 KiB |
332
rsc/mesh/border_handles_lock.ply
Normal file
332
rsc/mesh/border_handles_lock.ply
Normal file
@@ -0,0 +1,332 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.91.2 - www.blender.org
|
||||
element vertex 161
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
element face 161
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-0.012242 0.075367 0.000000
|
||||
-0.001435 0.075367 0.000000
|
||||
-0.006839 0.075732 0.000000
|
||||
-0.017428 0.074305 0.000000
|
||||
0.003751 0.074305 0.000000
|
||||
-0.022347 0.072593 0.000000
|
||||
0.008670 0.072593 0.000000
|
||||
-0.026951 0.070279 0.000000
|
||||
0.013274 0.070279 0.000000
|
||||
-0.031194 0.067412 0.000000
|
||||
0.017517 0.067412 0.000000
|
||||
-0.035026 0.064038 0.000000
|
||||
0.021349 0.064038 0.000000
|
||||
-0.038400 0.060207 0.000000
|
||||
0.024723 0.060207 0.000000
|
||||
-0.041268 0.055965 0.000000
|
||||
0.027591 0.055965 0.000000
|
||||
-0.043583 0.051362 0.000000
|
||||
-0.009399 0.054572 0.000000
|
||||
-0.006839 0.054745 0.000000
|
||||
-0.004278 0.054572 0.000000
|
||||
0.029905 0.051362 0.000000
|
||||
-0.011855 0.054069 0.000000
|
||||
-0.001822 0.054069 0.000000
|
||||
-0.014185 0.053258 0.000000
|
||||
0.000508 0.053258 0.000000
|
||||
-0.016366 0.052163 0.000000
|
||||
0.002689 0.052163 0.000000
|
||||
-0.018376 0.050804 0.000000
|
||||
0.004699 0.050804 0.000000
|
||||
-0.045295 0.046444 0.000000
|
||||
0.031618 0.046444 0.000000
|
||||
-0.020191 0.049207 0.000000
|
||||
0.006514 0.049206 0.000000
|
||||
-0.021789 0.047392 0.000000
|
||||
0.008112 0.047392 0.000000
|
||||
-0.023148 0.045383 0.000000
|
||||
0.009471 0.045383 0.000000
|
||||
-0.046357 0.041260 0.000000
|
||||
0.032680 0.041260 0.000000
|
||||
-0.024244 0.043202 0.000000
|
||||
0.010567 0.043202 0.000000
|
||||
-0.025055 0.040872 0.000000
|
||||
0.011378 0.040872 0.000000
|
||||
0.033045 0.035857 0.000000
|
||||
-0.046722 0.035857 0.000000
|
||||
-0.025558 0.038416 0.000000
|
||||
0.011881 0.038416 0.000000
|
||||
-0.025731 0.035857 0.000000
|
||||
0.012054 0.035857 0.000000
|
||||
-0.046722 0.035485 0.000000
|
||||
-0.025731 0.016969 0.000000
|
||||
0.012054 0.035485 0.000000
|
||||
0.033045 0.016969 0.000000
|
||||
-0.046722 0.034458 0.000000
|
||||
0.012054 0.034458 0.000000
|
||||
-0.046722 0.032906 0.000000
|
||||
0.012054 0.032906 0.000000
|
||||
-0.046722 0.030960 0.000000
|
||||
0.012054 0.030960 0.000000
|
||||
-0.046722 0.028752 0.000000
|
||||
0.012054 0.028752 0.000000
|
||||
-0.046722 0.026413 0.000000
|
||||
0.012054 0.026413 0.000000
|
||||
-0.046722 0.024073 0.000000
|
||||
0.012054 0.024073 0.000000
|
||||
-0.046722 0.021865 0.000000
|
||||
0.012054 0.021865 0.000000
|
||||
-0.046722 0.019920 0.000000
|
||||
0.012054 0.019920 0.000000
|
||||
-0.046722 0.018368 0.000000
|
||||
0.012054 0.018368 0.000000
|
||||
-0.046722 0.017340 0.000000
|
||||
0.012054 0.017340 0.000000
|
||||
-0.046722 0.016969 0.000000
|
||||
0.012054 0.016969 0.000000
|
||||
-0.054728 0.016854 0.000000
|
||||
-0.053020 0.016969 0.000000
|
||||
0.039343 0.016969 0.000000
|
||||
0.041051 0.016854 0.000000
|
||||
0.042690 0.016519 0.000000
|
||||
-0.056367 0.016519 0.000000
|
||||
0.044244 0.015979 0.000000
|
||||
-0.057921 0.015979 0.000000
|
||||
0.045698 0.015249 0.000000
|
||||
-0.059375 0.015249 0.000000
|
||||
0.047038 0.014344 0.000000
|
||||
-0.060715 0.014344 0.000000
|
||||
0.048248 0.013279 0.000000
|
||||
-0.061925 0.013279 0.000000
|
||||
0.049312 0.012070 0.000000
|
||||
-0.062989 0.012070 0.000000
|
||||
0.050217 0.010731 0.000000
|
||||
-0.063894 0.010731 0.000000
|
||||
-0.064624 0.009277 0.000000
|
||||
0.050947 0.009277 0.000000
|
||||
-0.065164 0.007723 0.000000
|
||||
0.051487 0.007723 0.000000
|
||||
-0.065499 0.006084 0.000000
|
||||
0.051822 0.006084 0.000000
|
||||
-0.065614 0.004376 0.000000
|
||||
0.051937 0.004376 0.000000
|
||||
-0.065614 0.003385 0.000000
|
||||
0.051937 0.003385 0.000000
|
||||
0.051937 0.000645 0.000000
|
||||
-0.065614 0.000645 0.000000
|
||||
0.051937 -0.003494 0.000000
|
||||
-0.065614 -0.003494 0.000000
|
||||
0.051937 -0.008682 0.000000
|
||||
-0.065614 -0.008682 0.000000
|
||||
0.051937 -0.014570 0.000000
|
||||
-0.065614 -0.014570 0.000000
|
||||
0.051937 -0.020808 0.000000
|
||||
-0.065614 -0.020808 0.000000
|
||||
0.051937 -0.027046 0.000000
|
||||
-0.065614 -0.027046 0.000000
|
||||
0.051937 -0.032934 0.000000
|
||||
-0.065614 -0.032934 0.000000
|
||||
0.051937 -0.038122 0.000000
|
||||
-0.065614 -0.038122 0.000000
|
||||
0.051937 -0.042261 0.000000
|
||||
-0.065614 -0.042261 0.000000
|
||||
0.051937 -0.045001 0.000000
|
||||
-0.065614 -0.045001 0.000000
|
||||
0.051937 -0.045992 0.000000
|
||||
-0.065614 -0.045992 0.000000
|
||||
-0.065499 -0.047701 0.000000
|
||||
0.051822 -0.047701 0.000000
|
||||
-0.065164 -0.049339 0.000000
|
||||
0.051487 -0.049339 0.000000
|
||||
-0.064624 -0.050893 0.000000
|
||||
0.050947 -0.050893 0.000000
|
||||
-0.063894 -0.052347 0.000000
|
||||
0.050217 -0.052347 0.000000
|
||||
-0.062989 -0.053686 0.000000
|
||||
0.049312 -0.053686 0.000000
|
||||
-0.061925 -0.054896 0.000000
|
||||
0.048248 -0.054896 0.000000
|
||||
-0.060715 -0.055960 0.000000
|
||||
0.047038 -0.055960 0.000000
|
||||
-0.059375 -0.056865 0.000000
|
||||
0.045698 -0.056865 0.000000
|
||||
-0.057921 -0.057595 0.000000
|
||||
0.044244 -0.057595 0.000000
|
||||
-0.056367 -0.058135 0.000000
|
||||
0.042690 -0.058135 0.000000
|
||||
-0.054728 -0.058470 0.000000
|
||||
0.041051 -0.058470 0.000000
|
||||
-0.053020 -0.058585 0.000000
|
||||
0.039343 -0.058585 0.000000
|
||||
-0.051202 -0.058585 0.000000
|
||||
-0.046178 -0.058585 0.000000
|
||||
-0.038588 -0.058585 0.000000
|
||||
-0.029074 -0.058585 0.000000
|
||||
-0.018277 -0.058585 0.000000
|
||||
-0.006839 -0.058585 0.000000
|
||||
0.004600 -0.058585 0.000000
|
||||
0.015397 -0.058585 0.000000
|
||||
0.024911 -0.058585 0.000000
|
||||
0.032501 -0.058585 0.000000
|
||||
0.037525 -0.058585 0.000000
|
||||
3 0 1 2
|
||||
3 3 1 0
|
||||
3 3 4 1
|
||||
3 5 4 3
|
||||
3 5 6 4
|
||||
3 7 6 5
|
||||
3 7 8 6
|
||||
3 9 8 7
|
||||
3 9 10 8
|
||||
3 11 10 9
|
||||
3 11 12 10
|
||||
3 13 12 11
|
||||
3 13 14 12
|
||||
3 15 14 13
|
||||
3 15 16 14
|
||||
3 17 18 15
|
||||
3 18 19 15
|
||||
3 19 16 15
|
||||
3 19 20 16
|
||||
3 20 21 16
|
||||
3 17 22 18
|
||||
3 23 21 20
|
||||
3 17 24 22
|
||||
3 25 21 23
|
||||
3 17 26 24
|
||||
3 27 21 25
|
||||
3 17 28 26
|
||||
3 29 21 27
|
||||
3 30 28 17
|
||||
3 29 31 21
|
||||
3 30 32 28
|
||||
3 33 31 29
|
||||
3 30 34 32
|
||||
3 35 31 33
|
||||
3 30 36 34
|
||||
3 37 31 35
|
||||
3 38 36 30
|
||||
3 37 39 31
|
||||
3 38 40 36
|
||||
3 41 39 37
|
||||
3 38 42 40
|
||||
3 43 39 41
|
||||
3 43 44 39
|
||||
3 45 42 38
|
||||
3 45 46 42
|
||||
3 47 44 43
|
||||
3 45 48 46
|
||||
3 49 44 47
|
||||
3 50 48 45
|
||||
3 50 51 48
|
||||
3 52 44 49
|
||||
3 52 53 44
|
||||
3 54 51 50
|
||||
3 55 53 52
|
||||
3 56 51 54
|
||||
3 57 53 55
|
||||
3 58 51 56
|
||||
3 59 53 57
|
||||
3 60 51 58
|
||||
3 61 53 59
|
||||
3 62 51 60
|
||||
3 63 53 61
|
||||
3 64 51 62
|
||||
3 65 53 63
|
||||
3 66 51 64
|
||||
3 67 53 65
|
||||
3 68 51 66
|
||||
3 69 53 67
|
||||
3 70 51 68
|
||||
3 71 53 69
|
||||
3 72 51 70
|
||||
3 73 53 71
|
||||
3 74 51 72
|
||||
3 75 53 73
|
||||
3 76 74 77
|
||||
3 76 51 74
|
||||
3 76 75 51
|
||||
3 76 53 75
|
||||
3 76 78 53
|
||||
3 76 79 78
|
||||
3 76 80 79
|
||||
3 81 80 76
|
||||
3 81 82 80
|
||||
3 83 82 81
|
||||
3 83 84 82
|
||||
3 85 84 83
|
||||
3 85 86 84
|
||||
3 87 86 85
|
||||
3 87 88 86
|
||||
3 89 88 87
|
||||
3 89 90 88
|
||||
3 91 90 89
|
||||
3 91 92 90
|
||||
3 93 92 91
|
||||
3 94 92 93
|
||||
3 94 95 92
|
||||
3 96 95 94
|
||||
3 96 97 95
|
||||
3 98 97 96
|
||||
3 98 99 97
|
||||
3 100 99 98
|
||||
3 100 101 99
|
||||
3 102 101 100
|
||||
3 102 103 101
|
||||
3 102 104 103
|
||||
3 105 104 102
|
||||
3 105 106 104
|
||||
3 107 106 105
|
||||
3 107 108 106
|
||||
3 109 108 107
|
||||
3 109 110 108
|
||||
3 111 110 109
|
||||
3 111 112 110
|
||||
3 113 112 111
|
||||
3 113 114 112
|
||||
3 115 114 113
|
||||
3 115 116 114
|
||||
3 117 116 115
|
||||
3 117 118 116
|
||||
3 119 118 117
|
||||
3 119 120 118
|
||||
3 121 120 119
|
||||
3 121 122 120
|
||||
3 123 122 121
|
||||
3 123 124 122
|
||||
3 125 124 123
|
||||
3 126 124 125
|
||||
3 126 127 124
|
||||
3 128 127 126
|
||||
3 128 129 127
|
||||
3 130 129 128
|
||||
3 130 131 129
|
||||
3 132 131 130
|
||||
3 132 133 131
|
||||
3 134 133 132
|
||||
3 134 135 133
|
||||
3 136 135 134
|
||||
3 136 137 135
|
||||
3 138 137 136
|
||||
3 138 139 137
|
||||
3 140 139 138
|
||||
3 140 141 139
|
||||
3 142 141 140
|
||||
3 142 143 141
|
||||
3 144 143 142
|
||||
3 144 145 143
|
||||
3 146 145 144
|
||||
3 146 147 145
|
||||
3 148 147 146
|
||||
3 148 149 147
|
||||
3 150 149 148
|
||||
3 151 149 150
|
||||
3 152 149 151
|
||||
3 153 149 152
|
||||
3 154 149 153
|
||||
3 155 149 154
|
||||
3 156 149 155
|
||||
3 157 149 156
|
||||
3 158 149 157
|
||||
3 159 149 158
|
||||
3 160 149 159
|
||||
444
rsc/mesh/border_handles_lock_open.ply
Normal file
444
rsc/mesh/border_handles_lock_open.ply
Normal file
@@ -0,0 +1,444 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.91.2 - www.blender.org
|
||||
element vertex 218
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
element face 216
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
0.040385 0.075489 0.000000
|
||||
0.051230 0.075530 0.000000
|
||||
0.045805 0.075878 0.000000
|
||||
0.056437 0.074479 0.000000
|
||||
0.035192 0.074396 0.000000
|
||||
0.061378 0.072775 0.000000
|
||||
0.030273 0.072647 0.000000
|
||||
0.066004 0.070464 0.000000
|
||||
0.025675 0.070292 0.000000
|
||||
0.070267 0.067595 0.000000
|
||||
0.021443 0.067380 0.000000
|
||||
0.074118 0.064217 0.000000
|
||||
0.017624 0.063960 0.000000
|
||||
0.077509 0.060377 0.000000
|
||||
0.014265 0.060083 0.000000
|
||||
0.080392 0.056124 0.000000
|
||||
0.011412 0.055797 0.000000
|
||||
0.045753 0.054861 0.000000
|
||||
0.048336 0.054711 0.000000
|
||||
0.082719 0.051506 0.000000
|
||||
0.009113 0.051151 0.000000
|
||||
0.043198 0.054661 0.000000
|
||||
0.050817 0.054224 0.000000
|
||||
0.040752 0.054128 0.000000
|
||||
0.053172 0.053424 0.000000
|
||||
0.038435 0.053287 0.000000
|
||||
0.055376 0.052333 0.000000
|
||||
0.036271 0.052161 0.000000
|
||||
0.057409 0.050975 0.000000
|
||||
0.034279 0.050773 0.000000
|
||||
0.084441 0.046572 0.000000
|
||||
0.007413 0.046196 0.000000
|
||||
0.059245 0.049374 0.000000
|
||||
0.032483 0.049147 0.000000
|
||||
0.060863 0.047551 0.000000
|
||||
0.030904 0.047307 0.000000
|
||||
0.062238 0.045532 0.000000
|
||||
0.029563 0.045275 0.000000
|
||||
0.085509 0.041369 0.000000
|
||||
0.006358 0.040980 0.000000
|
||||
0.063349 0.043338 0.000000
|
||||
0.028482 0.043076 0.000000
|
||||
0.064170 0.040994 0.000000
|
||||
0.027683 0.040733 0.000000
|
||||
0.085876 0.035946 0.000000
|
||||
0.064680 0.038522 0.000000
|
||||
0.005997 0.035552 0.000000
|
||||
0.027188 0.038270 0.000000
|
||||
0.064855 0.035946 0.000000
|
||||
0.027018 0.035710 0.000000
|
||||
0.064855 0.035533 0.000000
|
||||
0.085876 0.035533 0.000000
|
||||
0.027018 0.017031 0.000000
|
||||
0.005997 0.035188 0.000000
|
||||
0.064855 0.034389 0.000000
|
||||
0.085876 0.034389 0.000000
|
||||
0.005997 0.034180 0.000000
|
||||
0.064855 0.032662 0.000000
|
||||
0.085876 0.032662 0.000000
|
||||
0.005997 0.032658 0.000000
|
||||
0.064855 0.030497 0.000000
|
||||
0.085876 0.030497 0.000000
|
||||
0.005997 0.030750 0.000000
|
||||
0.005997 0.028585 0.000000
|
||||
0.064855 0.028041 0.000000
|
||||
0.085876 0.028041 0.000000
|
||||
0.005997 0.026292 0.000000
|
||||
0.064855 0.025438 0.000000
|
||||
0.085876 0.025438 0.000000
|
||||
0.005997 0.023998 0.000000
|
||||
0.064855 0.022835 0.000000
|
||||
0.085876 0.022835 0.000000
|
||||
0.005997 0.021833 0.000000
|
||||
0.064855 0.020378 0.000000
|
||||
0.085876 0.020378 0.000000
|
||||
0.005997 0.019925 0.000000
|
||||
0.064855 0.018213 0.000000
|
||||
0.085876 0.018213 0.000000
|
||||
0.005997 0.018403 0.000000
|
||||
0.005997 0.017396 0.000000
|
||||
0.064855 0.016486 0.000000
|
||||
0.085876 0.016486 0.000000
|
||||
0.005997 0.017031 0.000000
|
||||
-0.054573 0.016916 0.000000
|
||||
-0.052862 0.017031 0.000000
|
||||
0.027266 0.017031 0.000000
|
||||
0.027952 0.017031 0.000000
|
||||
0.028988 0.017031 0.000000
|
||||
0.030288 0.017031 0.000000
|
||||
0.031762 0.017031 0.000000
|
||||
0.033324 0.017031 0.000000
|
||||
0.034886 0.017031 0.000000
|
||||
0.036360 0.017031 0.000000
|
||||
0.037660 0.017031 0.000000
|
||||
0.038696 0.017031 0.000000
|
||||
0.039382 0.017031 0.000000
|
||||
0.039630 0.017031 0.000000
|
||||
0.041341 0.016916 0.000000
|
||||
-0.056214 0.016581 0.000000
|
||||
0.042982 0.016581 0.000000
|
||||
-0.057770 0.016040 0.000000
|
||||
0.044539 0.016040 0.000000
|
||||
0.064855 0.015343 0.000000
|
||||
0.085876 0.015343 0.000000
|
||||
-0.059227 0.015309 0.000000
|
||||
0.045995 0.015309 0.000000
|
||||
0.064855 0.014930 0.000000
|
||||
0.085876 0.014930 0.000000
|
||||
-0.060568 0.014403 0.000000
|
||||
0.047336 0.014403 0.000000
|
||||
0.064913 0.014072 0.000000
|
||||
0.085819 0.014072 0.000000
|
||||
-0.061780 0.013337 0.000000
|
||||
0.048548 0.013337 0.000000
|
||||
0.085652 0.013249 0.000000
|
||||
0.065080 0.013249 0.000000
|
||||
-0.062846 0.012126 0.000000
|
||||
0.049614 0.012126 0.000000
|
||||
0.085382 0.012470 0.000000
|
||||
0.065349 0.012470 0.000000
|
||||
0.085018 0.011742 0.000000
|
||||
0.065714 0.011742 0.000000
|
||||
-0.063752 0.010785 0.000000
|
||||
0.050520 0.010785 0.000000
|
||||
0.084566 0.011072 0.000000
|
||||
0.066166 0.011072 0.000000
|
||||
0.084034 0.010467 0.000000
|
||||
0.066698 0.010467 0.000000
|
||||
-0.064483 0.009329 0.000000
|
||||
0.051251 0.009329 0.000000
|
||||
0.083429 0.009935 0.000000
|
||||
0.067303 0.009935 0.000000
|
||||
0.082758 0.009483 0.000000
|
||||
0.067974 0.009483 0.000000
|
||||
0.082030 0.009118 0.000000
|
||||
0.068702 0.009118 0.000000
|
||||
-0.065024 0.007773 0.000000
|
||||
0.051792 0.007773 0.000000
|
||||
0.081251 0.008849 0.000000
|
||||
0.069481 0.008849 0.000000
|
||||
0.080428 0.008682 0.000000
|
||||
0.070303 0.008682 0.000000
|
||||
0.071162 0.008625 0.000000
|
||||
0.079570 0.008625 0.000000
|
||||
0.071327 0.008625 0.000000
|
||||
0.071785 0.008625 0.000000
|
||||
0.072476 0.008625 0.000000
|
||||
0.073342 0.008625 0.000000
|
||||
0.074325 0.008625 0.000000
|
||||
0.075366 0.008625 0.000000
|
||||
0.076407 0.008625 0.000000
|
||||
0.077390 0.008625 0.000000
|
||||
0.078256 0.008625 0.000000
|
||||
0.078947 0.008625 0.000000
|
||||
0.079405 0.008625 0.000000
|
||||
-0.065359 0.006132 0.000000
|
||||
0.052128 0.006132 0.000000
|
||||
-0.065475 0.004421 0.000000
|
||||
0.052243 0.004421 0.000000
|
||||
-0.065475 0.003429 0.000000
|
||||
0.052243 0.003429 0.000000
|
||||
-0.065475 0.000685 0.000000
|
||||
0.052243 0.000685 0.000000
|
||||
-0.065475 -0.003460 0.000000
|
||||
0.052243 -0.003460 0.000000
|
||||
-0.065475 -0.008656 0.000000
|
||||
0.052243 -0.008656 0.000000
|
||||
-0.065475 -0.014552 0.000000
|
||||
0.052243 -0.014552 0.000000
|
||||
-0.065475 -0.020799 0.000000
|
||||
0.052243 -0.020799 0.000000
|
||||
-0.065475 -0.027045 0.000000
|
||||
0.052243 -0.027045 0.000000
|
||||
-0.065475 -0.032941 0.000000
|
||||
0.052243 -0.032941 0.000000
|
||||
-0.065475 -0.038137 0.000000
|
||||
0.052243 -0.038137 0.000000
|
||||
-0.065475 -0.042282 0.000000
|
||||
0.052243 -0.042282 0.000000
|
||||
-0.065475 -0.045026 0.000000
|
||||
0.052243 -0.045026 0.000000
|
||||
-0.065475 -0.046018 0.000000
|
||||
0.052243 -0.046018 0.000000
|
||||
-0.065359 -0.047729 0.000000
|
||||
0.052128 -0.047729 0.000000
|
||||
-0.065024 -0.049370 0.000000
|
||||
0.051792 -0.049370 0.000000
|
||||
-0.064483 -0.050926 0.000000
|
||||
0.051251 -0.050926 0.000000
|
||||
-0.063752 -0.052382 0.000000
|
||||
0.050520 -0.052382 0.000000
|
||||
-0.062846 -0.053723 0.000000
|
||||
0.049614 -0.053723 0.000000
|
||||
-0.061780 -0.054934 0.000000
|
||||
0.048548 -0.054934 0.000000
|
||||
-0.060568 -0.056000 0.000000
|
||||
0.047336 -0.056000 0.000000
|
||||
-0.059227 -0.056906 0.000000
|
||||
0.045995 -0.056906 0.000000
|
||||
-0.057770 -0.057637 0.000000
|
||||
0.044539 -0.057637 0.000000
|
||||
-0.056214 -0.058178 0.000000
|
||||
0.042982 -0.058178 0.000000
|
||||
-0.054573 -0.058513 0.000000
|
||||
0.041341 -0.058513 0.000000
|
||||
-0.052862 -0.058628 0.000000
|
||||
0.039630 -0.058628 0.000000
|
||||
-0.051042 -0.058628 0.000000
|
||||
-0.046011 -0.058628 0.000000
|
||||
-0.038410 -0.058628 0.000000
|
||||
-0.028883 -0.058628 0.000000
|
||||
-0.018070 -0.058628 0.000000
|
||||
-0.006616 -0.058628 0.000000
|
||||
0.004839 -0.058628 0.000000
|
||||
0.015651 -0.058628 0.000000
|
||||
0.025178 -0.058628 0.000000
|
||||
0.032779 -0.058628 0.000000
|
||||
0.037810 -0.058628 0.000000
|
||||
3 0 1 2
|
||||
3 0 3 1
|
||||
3 4 3 0
|
||||
3 4 5 3
|
||||
3 6 5 4
|
||||
3 6 7 5
|
||||
3 8 7 6
|
||||
3 8 9 7
|
||||
3 10 9 8
|
||||
3 10 11 9
|
||||
3 12 11 10
|
||||
3 12 13 11
|
||||
3 14 13 12
|
||||
3 14 15 13
|
||||
3 16 15 14
|
||||
3 16 17 15
|
||||
3 17 18 15
|
||||
3 18 19 15
|
||||
3 20 21 16
|
||||
3 21 17 16
|
||||
3 22 19 18
|
||||
3 20 23 21
|
||||
3 24 19 22
|
||||
3 20 25 23
|
||||
3 26 19 24
|
||||
3 20 27 25
|
||||
3 28 19 26
|
||||
3 20 29 27
|
||||
3 28 30 19
|
||||
3 31 29 20
|
||||
3 32 30 28
|
||||
3 31 33 29
|
||||
3 34 30 32
|
||||
3 31 35 33
|
||||
3 36 30 34
|
||||
3 31 37 35
|
||||
3 36 38 30
|
||||
3 39 37 31
|
||||
3 40 38 36
|
||||
3 39 41 37
|
||||
3 42 38 40
|
||||
3 39 43 41
|
||||
3 42 44 38
|
||||
3 45 44 42
|
||||
3 46 43 39
|
||||
3 46 47 43
|
||||
3 48 44 45
|
||||
3 46 49 47
|
||||
3 50 44 48
|
||||
3 50 51 44
|
||||
3 46 52 49
|
||||
3 53 52 46
|
||||
3 54 51 50
|
||||
3 54 55 51
|
||||
3 56 52 53
|
||||
3 57 55 54
|
||||
3 57 58 55
|
||||
3 59 52 56
|
||||
3 60 58 57
|
||||
3 60 61 58
|
||||
3 62 52 59
|
||||
3 63 52 62
|
||||
3 64 61 60
|
||||
3 64 65 61
|
||||
3 66 52 63
|
||||
3 67 65 64
|
||||
3 67 68 65
|
||||
3 69 52 66
|
||||
3 70 68 67
|
||||
3 70 71 68
|
||||
3 72 52 69
|
||||
3 73 71 70
|
||||
3 73 74 71
|
||||
3 75 52 72
|
||||
3 76 74 73
|
||||
3 76 77 74
|
||||
3 78 52 75
|
||||
3 79 52 78
|
||||
3 80 77 76
|
||||
3 80 81 77
|
||||
3 82 52 79
|
||||
3 83 82 84
|
||||
3 83 52 82
|
||||
3 83 85 52
|
||||
3 83 86 85
|
||||
3 83 87 86
|
||||
3 83 88 87
|
||||
3 83 89 88
|
||||
3 83 90 89
|
||||
3 83 91 90
|
||||
3 83 92 91
|
||||
3 83 93 92
|
||||
3 83 94 93
|
||||
3 83 95 94
|
||||
3 83 96 95
|
||||
3 83 97 96
|
||||
3 98 97 83
|
||||
3 98 99 97
|
||||
3 100 99 98
|
||||
3 100 101 99
|
||||
3 102 81 80
|
||||
3 102 103 81
|
||||
3 104 101 100
|
||||
3 104 105 101
|
||||
3 106 103 102
|
||||
3 106 107 103
|
||||
3 108 105 104
|
||||
3 108 109 105
|
||||
3 110 107 106
|
||||
3 110 111 107
|
||||
3 112 109 108
|
||||
3 112 113 109
|
||||
3 110 114 111
|
||||
3 115 114 110
|
||||
3 116 113 112
|
||||
3 116 117 113
|
||||
3 115 118 114
|
||||
3 119 118 115
|
||||
3 119 120 118
|
||||
3 121 120 119
|
||||
3 122 117 116
|
||||
3 122 123 117
|
||||
3 121 124 120
|
||||
3 125 124 121
|
||||
3 125 126 124
|
||||
3 127 126 125
|
||||
3 128 123 122
|
||||
3 128 129 123
|
||||
3 127 130 126
|
||||
3 131 130 127
|
||||
3 131 132 130
|
||||
3 133 132 131
|
||||
3 133 134 132
|
||||
3 135 134 133
|
||||
3 136 129 128
|
||||
3 136 137 129
|
||||
3 135 138 134
|
||||
3 139 138 135
|
||||
3 139 140 138
|
||||
3 141 140 139
|
||||
3 142 140 141
|
||||
3 142 143 140
|
||||
3 144 143 142
|
||||
3 145 143 144
|
||||
3 146 143 145
|
||||
3 147 143 146
|
||||
3 148 143 147
|
||||
3 149 143 148
|
||||
3 150 143 149
|
||||
3 151 143 150
|
||||
3 152 143 151
|
||||
3 153 143 152
|
||||
3 154 143 153
|
||||
3 155 137 136
|
||||
3 155 156 137
|
||||
3 157 156 155
|
||||
3 157 158 156
|
||||
3 159 158 157
|
||||
3 159 160 158
|
||||
3 161 160 159
|
||||
3 161 162 160
|
||||
3 163 162 161
|
||||
3 163 164 162
|
||||
3 165 164 163
|
||||
3 165 166 164
|
||||
3 167 166 165
|
||||
3 167 168 166
|
||||
3 169 168 167
|
||||
3 169 170 168
|
||||
3 171 170 169
|
||||
3 171 172 170
|
||||
3 173 172 171
|
||||
3 173 174 172
|
||||
3 175 174 173
|
||||
3 175 176 174
|
||||
3 177 176 175
|
||||
3 177 178 176
|
||||
3 179 178 177
|
||||
3 179 180 178
|
||||
3 181 180 179
|
||||
3 181 182 180
|
||||
3 183 182 181
|
||||
3 183 184 182
|
||||
3 185 184 183
|
||||
3 185 186 184
|
||||
3 187 186 185
|
||||
3 187 188 186
|
||||
3 189 188 187
|
||||
3 189 190 188
|
||||
3 191 190 189
|
||||
3 191 192 190
|
||||
3 193 192 191
|
||||
3 193 194 192
|
||||
3 195 194 193
|
||||
3 195 196 194
|
||||
3 197 196 195
|
||||
3 197 198 196
|
||||
3 199 198 197
|
||||
3 199 200 198
|
||||
3 201 200 199
|
||||
3 201 202 200
|
||||
3 203 202 201
|
||||
3 203 204 202
|
||||
3 205 204 203
|
||||
3 205 206 204
|
||||
3 207 206 205
|
||||
3 208 206 207
|
||||
3 209 206 208
|
||||
3 210 206 209
|
||||
3 211 206 210
|
||||
3 212 206 211
|
||||
3 213 206 212
|
||||
3 214 206 213
|
||||
3 215 206 214
|
||||
3 216 206 215
|
||||
3 217 206 216
|
||||
102
rsc/mesh/border_large_round_left.ply
Normal file
102
rsc/mesh/border_large_round_left.ply
Normal file
@@ -0,0 +1,102 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.91.2 - www.blender.org
|
||||
element vertex 39
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
property uchar red
|
||||
property uchar green
|
||||
property uchar blue
|
||||
property uchar alpha
|
||||
element face 49
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
0.999961 1.039382 0.000000 255 255 255 255
|
||||
0.036681 1.013523 0.000000 255 255 255 255
|
||||
0.999928 1.013523 0.000000 255 255 255 255
|
||||
0.048614 1.000000 0.000000 255 255 255 255
|
||||
0.999934 1.000000 0.000000 255 255 255 255
|
||||
0.028181 1.000395 0.000000 255 255 255 255
|
||||
0.017356 1.011536 0.000000 255 255 255 255
|
||||
0.007989 0.991539 0.000000 255 255 255 255
|
||||
-0.011462 0.981739 0.000000 255 255 255 255
|
||||
-0.003061 1.002581 0.000000 255 255 255 255
|
||||
-0.013586 0.963042 0.000000 255 255 255 255
|
||||
-0.000320 0.970926 0.000000 255 255 255 255
|
||||
-0.040085 0.987614 0.000000 255 255 255 255
|
||||
-0.034447 1.010591 0.000000 255 255 255 255
|
||||
-0.021394 1.028161 0.000000 255 255 255 255
|
||||
-0.000456 1.037345 0.000000 255 255 255 255
|
||||
0.019362 1.039382 0.000000 255 255 255 255
|
||||
-0.040085 0.000016 0.000000 255 255 255 255
|
||||
-0.013585 -0.963025 0.000000 255 255 255 255
|
||||
-0.013586 0.000008 0.000000 255 255 255 255
|
||||
-0.040084 -0.987582 0.000000 255 255 255 255
|
||||
-0.011300 -0.987628 0.000000 255 255 255 255
|
||||
-0.000159 -0.976754 0.000000 255 255 255 255
|
||||
-0.000142 -0.951104 0.000000 255 255 255 255
|
||||
0.008328 -0.992067 0.000000 255 255 255 255
|
||||
0.015389 -1.011229 0.000000 255 255 255 255
|
||||
-0.002718 -1.003111 0.000000 255 255 255 255
|
||||
0.037626 -1.013506 0.000000 255 255 255 255
|
||||
0.026236 -1.000095 0.000000 255 255 255 255
|
||||
0.020330 -1.039350 0.000000 255 255 255 255
|
||||
-0.002473 -1.037015 0.000000 255 255 255 255
|
||||
-0.021043 -1.028691 0.000000 255 255 255 255
|
||||
-0.034734 -1.013730 0.000000 255 255 255 255
|
||||
-0.001031 0.951116 0.000000 255 255 255 255
|
||||
0.999929 -1.013506 0.000000 255 255 255 255
|
||||
0.049546 -1.000000 0.000000 255 255 255 255
|
||||
0.999926 -1.039350 0.000000 255 255 255 255
|
||||
-0.000142 -0.000000 0.000000 255 255 255 255
|
||||
0.999922 -1.000000 0.000000 255 255 255 255
|
||||
3 0 1 2
|
||||
3 2 3 4
|
||||
3 1 5 3
|
||||
3 6 7 5
|
||||
3 8 7 9
|
||||
3 10 11 8
|
||||
3 8 12 10
|
||||
3 13 9 14
|
||||
3 9 15 14
|
||||
3 6 16 15
|
||||
3 17 10 12
|
||||
3 17 18 19
|
||||
3 20 21 18
|
||||
3 18 22 23
|
||||
3 21 24 22
|
||||
3 25 24 26
|
||||
3 27 28 25
|
||||
3 25 29 27
|
||||
3 30 26 31
|
||||
3 26 32 31
|
||||
3 23 19 18
|
||||
3 19 33 10
|
||||
3 34 35 27
|
||||
3 27 36 34
|
||||
3 0 16 1
|
||||
3 2 1 3
|
||||
3 1 6 5
|
||||
3 6 9 7
|
||||
3 8 11 7
|
||||
3 10 33 11
|
||||
3 8 13 12
|
||||
3 13 8 9
|
||||
3 9 6 15
|
||||
3 6 1 16
|
||||
3 17 19 10
|
||||
3 17 20 18
|
||||
3 20 32 21
|
||||
3 18 21 22
|
||||
3 21 26 24
|
||||
3 25 28 24
|
||||
3 27 35 28
|
||||
3 25 30 29
|
||||
3 30 25 26
|
||||
3 26 21 32
|
||||
3 23 37 19
|
||||
3 19 37 33
|
||||
3 34 38 35
|
||||
3 27 29 36
|
||||
3 17 12 20
|
||||
104
rsc/mesh/border_perspective_round.ply
Normal file
104
rsc/mesh/border_perspective_round.ply
Normal file
@@ -0,0 +1,104 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.91.2 - www.blender.org
|
||||
element vertex 42
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
property uchar red
|
||||
property uchar green
|
||||
property uchar blue
|
||||
property uchar alpha
|
||||
element face 48
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
0.024507 -0.996045 0.000000 255 255 255 255
|
||||
0.174784 -0.905512 0.000000 255 255 255 255
|
||||
0.027218 -0.975830 0.000000 255 255 255 255
|
||||
0.185609 -0.916652 0.000000 255 255 255 255
|
||||
0.191906 -0.891539 0.000000 255 255 255 255
|
||||
0.211357 -0.881739 0.000000 255 255 255 255
|
||||
0.202956 -0.902581 0.000000 255 255 255 255
|
||||
0.213481 -0.863042 0.000000 255 255 255 255
|
||||
0.200215 -0.870926 0.000000 255 255 255 255
|
||||
0.227129 -0.876006 0.000000 255 255 255 255
|
||||
0.224977 -0.894955 0.000000 255 255 255 255
|
||||
0.216462 -0.916078 0.000000 255 255 255 255
|
||||
0.198841 -0.930269 0.000000 255 255 255 255
|
||||
0.017147 -1.015018 0.000000 255 255 255 255
|
||||
0.227129 0.099989 0.000000 255 255 255 255
|
||||
0.213481 1.063025 0.000000 255 255 255 255
|
||||
0.213481 0.099992 0.000000 255 255 255 255
|
||||
0.227129 1.075985 0.000000 255 255 255 255
|
||||
0.211195 1.087628 0.000000 255 255 255 255
|
||||
0.200055 1.076754 0.000000 255 255 255 255
|
||||
0.200038 1.051104 0.000000 255 255 255 255
|
||||
0.191568 1.092067 0.000000 255 255 255 255
|
||||
0.184506 1.111229 0.000000 255 255 255 255
|
||||
0.202614 1.103111 0.000000 255 255 255 255
|
||||
0.162270 1.113506 0.000000 255 255 255 255
|
||||
0.173660 1.100095 0.000000 255 255 255 255
|
||||
0.175229 1.127145 0.000000 255 255 255 255
|
||||
0.197765 1.124837 0.000000 255 255 255 255
|
||||
0.216116 1.116610 0.000000 255 255 255 255
|
||||
0.224813 1.100919 0.000000 255 255 255 255
|
||||
0.200926 -0.851116 0.000000 255 255 255 255
|
||||
-0.800033 1.113506 0.000000 255 255 255 255
|
||||
0.150350 1.100000 0.000000 255 255 255 255
|
||||
-0.800026 1.127145 0.000000 255 255 255 255
|
||||
0.200038 0.100000 0.000000 255 255 255 255
|
||||
-0.800026 1.100000 0.000000 255 255 255 255
|
||||
0.016287 1.016200 0.000000 255 255 255 255
|
||||
0.173893 1.099758 0.000000 255 255 255 255
|
||||
-0.000785 1.024438 0.000000 255 255 255 255
|
||||
0.192264 1.092032 0.000000 255 255 255 255
|
||||
0.024618 1.000701 0.000000 255 255 255 255
|
||||
0.198820 1.078819 0.000000 255 255 255 255
|
||||
3 0 1 2
|
||||
3 3 4 1
|
||||
3 5 4 6
|
||||
3 7 8 5
|
||||
3 5 9 7
|
||||
3 10 6 11
|
||||
3 6 12 11
|
||||
3 3 13 12
|
||||
3 14 7 9
|
||||
3 14 15 16
|
||||
3 17 18 15
|
||||
3 15 19 20
|
||||
3 18 21 19
|
||||
3 22 21 23
|
||||
3 24 25 22
|
||||
3 22 26 24
|
||||
3 27 23 28
|
||||
3 23 29 28
|
||||
3 20 16 15
|
||||
3 16 30 7
|
||||
3 31 32 24
|
||||
3 24 33 31
|
||||
3 0 3 1
|
||||
3 3 6 4
|
||||
3 5 8 4
|
||||
3 7 30 8
|
||||
3 5 10 9
|
||||
3 10 5 6
|
||||
3 6 3 12
|
||||
3 3 0 13
|
||||
3 14 16 7
|
||||
3 14 17 15
|
||||
3 17 29 18
|
||||
3 15 18 19
|
||||
3 18 23 21
|
||||
3 22 25 21
|
||||
3 24 32 25
|
||||
3 22 27 26
|
||||
3 27 22 23
|
||||
3 23 18 29
|
||||
3 20 34 16
|
||||
3 16 34 30
|
||||
3 31 35 32
|
||||
3 24 26 33
|
||||
3 36 37 38
|
||||
3 39 40 41
|
||||
3 36 39 37
|
||||
3 39 36 40
|
||||
53
rsc/mesh/border_perspective_round_left.ply
Normal file
53
rsc/mesh/border_perspective_round_left.ply
Normal file
@@ -0,0 +1,53 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.91.2 - www.blender.org
|
||||
element vertex 18
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
property uchar red
|
||||
property uchar green
|
||||
property uchar blue
|
||||
property uchar alpha
|
||||
element face 21
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
1.299734 1.127167 0.000000 255 255 255 255
|
||||
0.236786 1.113523 0.000000 255 255 255 255
|
||||
1.299741 1.113523 0.000000 255 255 255 255
|
||||
0.248719 1.100000 0.000000 255 255 255 255
|
||||
1.299747 1.100000 0.000000 255 255 255 255
|
||||
0.224496 1.099211 0.000000 255 255 255 255
|
||||
0.217461 1.111536 0.000000 255 255 255 255
|
||||
0.208094 1.091539 0.000000 255 255 255 255
|
||||
0.174890 1.091562 0.000000 255 255 255 255
|
||||
0.197044 1.102581 0.000000 255 255 255 255
|
||||
0.018332 1.027078 0.000000 255 255 255 255
|
||||
0.186032 1.080750 0.000000 255 255 255 255
|
||||
-0.014265 1.017066 0.000000 255 255 255 255
|
||||
0.161270 1.104778 0.000000 255 255 255 255
|
||||
0.183538 1.116078 0.000000 255 255 255 255
|
||||
0.204229 1.125153 0.000000 255 255 255 255
|
||||
0.223815 1.127167 0.000000 255 255 255 255
|
||||
0.076770 1.027285 0.000000 255 255 255 255
|
||||
3 0 1 2
|
||||
3 2 3 4
|
||||
3 1 5 3
|
||||
3 6 7 5
|
||||
3 8 7 9
|
||||
3 10 11 8
|
||||
3 8 12 10
|
||||
3 13 9 14
|
||||
3 9 15 14
|
||||
3 6 16 15
|
||||
3 0 16 1
|
||||
3 2 1 3
|
||||
3 1 6 5
|
||||
3 6 9 7
|
||||
3 8 11 7
|
||||
3 10 17 11
|
||||
3 8 13 12
|
||||
3 13 8 9
|
||||
3 9 6 15
|
||||
3 6 1 16
|
||||
3 10 12 17
|
||||
24
rsc/mesh/border_perspective_top.ply
Normal file
24
rsc/mesh/border_perspective_top.ply
Normal file
@@ -0,0 +1,24 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.91.2 - www.blender.org
|
||||
element vertex 6
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
property uchar red
|
||||
property uchar green
|
||||
property uchar blue
|
||||
property uchar alpha
|
||||
element face 4
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-0.275655 1.113506 0.000000 255 255 255 255
|
||||
0.674727 1.100000 0.000000 255 255 255 255
|
||||
0.675300 1.113506 0.000000 255 255 255 255
|
||||
-0.275648 1.127145 0.000000 255 255 255 255
|
||||
-0.275648 1.100000 0.000000 255 255 255 255
|
||||
0.675290 1.127145 0.000000 255 255 255 255
|
||||
3 0 1 2
|
||||
3 2 3 0
|
||||
3 0 4 1
|
||||
3 2 5 3
|
||||
101
rsc/mesh/border_round_left.ply
Normal file
101
rsc/mesh/border_round_left.ply
Normal file
@@ -0,0 +1,101 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.91.2 - www.blender.org
|
||||
element vertex 39
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
property uchar red
|
||||
property uchar green
|
||||
property uchar blue
|
||||
property uchar alpha
|
||||
element face 48
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
1.000026 1.027167 0.000000 255 255 255 255
|
||||
0.036786 1.013523 0.000000 255 255 255 255
|
||||
1.000033 1.013523 0.000000 255 255 255 255
|
||||
0.048719 1.000000 0.000000 255 255 255 255
|
||||
1.000039 1.000000 0.000000 255 255 255 255
|
||||
0.028285 1.000395 0.000000 255 255 255 255
|
||||
0.017461 1.011536 0.000000 255 255 255 255
|
||||
0.008094 0.991539 0.000000 255 255 255 255
|
||||
-0.011358 0.981739 0.000000 255 255 255 255
|
||||
-0.002956 1.002581 0.000000 255 255 255 255
|
||||
-0.013481 0.963042 0.000000 255 255 255 255
|
||||
-0.000215 0.970926 0.000000 255 255 255 255
|
||||
-0.027129 0.976006 0.000000 255 255 255 255
|
||||
-0.024977 0.994955 0.000000 255 255 255 255
|
||||
-0.016462 1.016078 0.000000 255 255 255 255
|
||||
0.004229 1.025153 0.000000 255 255 255 255
|
||||
0.023815 1.027167 0.000000 255 255 255 255
|
||||
-0.027129 0.000011 0.000000 255 255 255 255
|
||||
-0.013481 -0.963025 0.000000 255 255 255 255
|
||||
-0.013481 0.000008 0.000000 255 255 255 255
|
||||
-0.027129 -0.975985 0.000000 255 255 255 255
|
||||
-0.011195 -0.987628 0.000000 255 255 255 255
|
||||
-0.000055 -0.976754 0.000000 255 255 255 255
|
||||
-0.000038 -0.951104 0.000000 255 255 255 255
|
||||
0.008432 -0.992067 0.000000 255 255 255 255
|
||||
0.015494 -1.011229 0.000000 255 255 255 255
|
||||
-0.002614 -1.003111 0.000000 255 255 255 255
|
||||
0.037730 -1.013506 0.000000 255 255 255 255
|
||||
0.026340 -1.000095 0.000000 255 255 255 255
|
||||
0.024771 -1.027145 0.000000 255 255 255 255
|
||||
0.002235 -1.024837 0.000000 255 255 255 255
|
||||
-0.016116 -1.016610 0.000000 255 255 255 255
|
||||
-0.024813 -1.000919 0.000000 255 255 255 255
|
||||
-0.000927 0.951116 0.000000 255 255 255 255
|
||||
1.000033 -1.013506 0.000000 255 255 255 255
|
||||
0.049651 -1.000000 0.000000 255 255 255 255
|
||||
1.000026 -1.027145 0.000000 255 255 255 255
|
||||
-0.000038 -0.000000 0.000000 255 255 255 255
|
||||
1.000026 -1.000000 0.000000 255 255 255 255
|
||||
3 0 1 2
|
||||
3 2 3 4
|
||||
3 1 5 3
|
||||
3 6 7 5
|
||||
3 8 7 9
|
||||
3 10 11 8
|
||||
3 8 12 10
|
||||
3 13 9 14
|
||||
3 9 15 14
|
||||
3 6 16 15
|
||||
3 17 10 12
|
||||
3 17 18 19
|
||||
3 20 21 18
|
||||
3 18 22 23
|
||||
3 21 24 22
|
||||
3 25 24 26
|
||||
3 27 28 25
|
||||
3 25 29 27
|
||||
3 30 26 31
|
||||
3 26 32 31
|
||||
3 23 19 18
|
||||
3 19 33 10
|
||||
3 34 35 27
|
||||
3 27 36 34
|
||||
3 0 16 1
|
||||
3 2 1 3
|
||||
3 1 6 5
|
||||
3 6 9 7
|
||||
3 8 11 7
|
||||
3 10 33 11
|
||||
3 8 13 12
|
||||
3 13 8 9
|
||||
3 9 6 15
|
||||
3 6 1 16
|
||||
3 17 19 10
|
||||
3 17 20 18
|
||||
3 20 32 21
|
||||
3 18 21 22
|
||||
3 21 26 24
|
||||
3 25 28 24
|
||||
3 27 35 28
|
||||
3 25 30 29
|
||||
3 30 25 26
|
||||
3 26 21 32
|
||||
3 23 37 19
|
||||
3 19 37 33
|
||||
3 34 38 35
|
||||
3 27 29 36
|
||||
40
rsc/mesh/icon_cube.ply
Normal file
40
rsc/mesh/icon_cube.ply
Normal file
@@ -0,0 +1,40 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.91.2 - www.blender.org
|
||||
element vertex 14
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
element face 16
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-0.100035 0.057779 0.000000
|
||||
-0.002114 0.090894 0.000000
|
||||
-0.002069 0.111204 0.000000
|
||||
0.095897 0.057200 0.000000
|
||||
-0.072133 0.052704 0.000000
|
||||
0.068377 0.052027 0.000000
|
||||
-0.100035 -0.050237 0.000000
|
||||
0.078085 0.037024 0.000000
|
||||
0.095897 -0.050237 0.000000
|
||||
-0.002025 0.014469 0.000000
|
||||
0.006837 -0.000988 0.000000
|
||||
0.078085 -0.039552 0.000000
|
||||
0.006837 -0.077564 0.000000
|
||||
-0.002069 -0.102495 0.000000
|
||||
3 0 1 2
|
||||
3 1 3 2
|
||||
3 0 4 1
|
||||
3 5 3 1
|
||||
3 6 4 0
|
||||
3 5 7 3
|
||||
3 7 8 3
|
||||
3 6 9 4
|
||||
3 9 7 5
|
||||
3 9 10 7
|
||||
3 11 8 7
|
||||
3 6 10 9
|
||||
3 6 12 10
|
||||
3 12 8 11
|
||||
3 13 12 6
|
||||
3 12 13 8
|
||||
680
rsc/mesh/icon_eye.ply
Normal file
680
rsc/mesh/icon_eye.ply
Normal file
@@ -0,0 +1,680 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.91.0 - www.blender.org
|
||||
element vertex 336
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
element face 334
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-0.010156 0.068409 0.000014
|
||||
0.011150 0.068410 0.000014
|
||||
0.000497 0.068925 0.000014
|
||||
0.021529 0.066895 0.000014
|
||||
-0.020536 0.066893 0.000014
|
||||
0.031590 0.064425 0.000014
|
||||
-0.030598 0.064422 0.000014
|
||||
0.041286 0.061046 0.000014
|
||||
-0.040295 0.061042 0.000014
|
||||
0.050572 0.056803 0.000014
|
||||
-0.049582 0.056798 0.000014
|
||||
0.059402 0.051743 0.000014
|
||||
-0.058412 0.051736 0.000014
|
||||
0.000497 0.052101 0.000014
|
||||
-0.002837 0.051991 0.000014
|
||||
0.003831 0.051991 0.000014
|
||||
-0.006139 0.051663 0.000014
|
||||
0.007132 0.051663 0.000014
|
||||
0.067730 0.045910 0.000014
|
||||
-0.066741 0.045901 0.000014
|
||||
-0.009398 0.051122 0.000014
|
||||
0.010392 0.051122 0.000014
|
||||
-0.012605 0.050371 0.000014
|
||||
0.013598 0.050371 0.000014
|
||||
-0.015750 0.049416 0.000014
|
||||
0.016743 0.049416 0.000014
|
||||
-0.018822 0.048259 0.000014
|
||||
0.019816 0.048259 0.000014
|
||||
-0.021814 0.046904 0.000014
|
||||
0.022807 0.046904 0.000014
|
||||
-0.024713 0.045357 0.000014
|
||||
0.025707 0.045357 0.000014
|
||||
0.075511 0.039349 0.000014
|
||||
-0.074522 0.039340 0.000014
|
||||
-0.027511 0.043621 0.000014
|
||||
0.028505 0.043621 0.000014
|
||||
-0.030199 0.041699 0.000014
|
||||
0.031192 0.041699 0.000014
|
||||
-0.032765 0.039597 0.000014
|
||||
0.033758 0.039597 0.000014
|
||||
-0.035200 0.037318 0.000014
|
||||
0.036194 0.037318 0.000014
|
||||
0.082698 0.032107 0.000014
|
||||
-0.081709 0.032098 0.000014
|
||||
-0.037480 0.034883 0.000014
|
||||
0.038474 0.034883 0.000014
|
||||
-0.000254 0.035258 0.000014
|
||||
0.002502 0.035221 0.000014
|
||||
0.000497 0.035276 0.000014
|
||||
-0.001003 0.035222 0.000014
|
||||
-0.001751 0.035169 0.000014
|
||||
0.004492 0.035048 0.000014
|
||||
-0.002498 0.035100 0.000014
|
||||
-0.003242 0.035014 0.000014
|
||||
0.006461 0.034757 0.000014
|
||||
-0.003985 0.034911 0.000014
|
||||
-0.004724 0.034792 0.000014
|
||||
-0.039583 0.032317 0.000014
|
||||
0.040576 0.032317 0.000014
|
||||
-0.005461 0.034656 0.000014
|
||||
0.008405 0.034351 0.000014
|
||||
-0.006196 0.034504 0.000014
|
||||
-0.006926 0.034335 0.000014
|
||||
0.010318 0.033833 0.000014
|
||||
-0.007653 0.034150 0.000014
|
||||
-0.008376 0.033948 0.000014
|
||||
-0.007808 0.033125 0.000014
|
||||
0.012195 0.033203 0.000014
|
||||
0.014032 0.032463 0.000014
|
||||
-0.007292 0.032274 0.000014
|
||||
0.015824 0.031616 0.000014
|
||||
-0.041505 0.029630 0.000014
|
||||
0.042498 0.029630 0.000014
|
||||
-0.006828 0.031397 0.000014
|
||||
0.089246 0.024229 0.000014
|
||||
-0.088256 0.024221 0.000014
|
||||
0.017565 0.030662 0.000014
|
||||
-0.006419 0.030496 0.000014
|
||||
0.019252 0.029605 0.000014
|
||||
-0.006063 0.029574 0.000014
|
||||
-0.043242 0.026833 0.000014
|
||||
0.044235 0.026833 0.000014
|
||||
0.020878 0.028445 0.000014
|
||||
-0.005763 0.028634 0.000014
|
||||
-0.005519 0.027677 0.000014
|
||||
0.022439 0.027185 0.000014
|
||||
-0.005331 0.026707 0.000014
|
||||
0.023922 0.025834 0.000014
|
||||
-0.044789 0.023934 0.000014
|
||||
0.045783 0.023934 0.000014
|
||||
-0.005201 0.025726 0.000014
|
||||
0.025316 0.024404 0.000014
|
||||
-0.005128 0.024737 0.000014
|
||||
-0.005115 0.023742 0.000014
|
||||
0.026618 0.022898 0.000014
|
||||
0.095110 0.015760 0.000014
|
||||
-0.094119 0.015753 0.000014
|
||||
-0.046144 0.020943 0.000014
|
||||
0.047137 0.020943 0.000014
|
||||
-0.005160 0.022743 0.000014
|
||||
0.027825 0.021323 0.000014
|
||||
-0.005265 0.021748 0.000014
|
||||
-0.005429 0.020766 0.000014
|
||||
0.028935 0.019681 0.000014
|
||||
-0.047301 0.017871 0.000014
|
||||
0.048295 0.017871 0.000014
|
||||
-0.005649 0.019799 0.000014
|
||||
-0.005926 0.018849 0.000014
|
||||
0.029946 0.017978 0.000014
|
||||
-0.006257 0.017918 0.000014
|
||||
0.030854 0.016219 0.000014
|
||||
-0.006643 0.017009 0.000014
|
||||
-0.048257 0.014727 0.000014
|
||||
0.049251 0.014727 0.000014
|
||||
-0.007081 0.016125 0.000014
|
||||
0.031658 0.014407 0.000014
|
||||
-0.007571 0.015267 0.000014
|
||||
0.100243 0.006745 0.000014
|
||||
-0.099250 0.006742 0.000014
|
||||
-0.008111 0.014438 0.000014
|
||||
-0.049008 0.011521 0.000014
|
||||
0.050001 0.011521 0.000014
|
||||
-0.008702 0.013640 0.000014
|
||||
0.032354 0.012549 0.000014
|
||||
-0.009340 0.012876 0.000014
|
||||
-0.010026 0.012148 0.000014
|
||||
0.032941 0.010647 0.000014
|
||||
-0.010754 0.011463 0.000014
|
||||
-0.049549 0.008262 0.000014
|
||||
0.050542 0.008262 0.000014
|
||||
-0.011518 0.010824 0.000014
|
||||
-0.012316 0.010234 0.000014
|
||||
0.033416 0.008707 0.000014
|
||||
-0.032298 0.008549 0.000014
|
||||
-0.031007 0.009931 0.000014
|
||||
-0.031830 0.010499 0.000014
|
||||
-0.013145 0.009694 0.000014
|
||||
-0.030156 0.009415 0.000014
|
||||
-0.014003 0.009204 0.000014
|
||||
-0.029278 0.008951 0.000014
|
||||
-0.014888 0.008766 0.000014
|
||||
-0.028377 0.008542 0.000014
|
||||
-0.015797 0.008381 0.000014
|
||||
0.033775 0.006734 0.000014
|
||||
-0.032647 0.006582 0.000014
|
||||
-0.027455 0.008187 0.000014
|
||||
-0.016728 0.008049 0.000014
|
||||
-0.049876 0.004961 0.000014
|
||||
0.050870 0.004961 0.000014
|
||||
-0.026515 0.007887 0.000014
|
||||
-0.017678 0.007773 0.000014
|
||||
-0.025558 0.007642 0.000014
|
||||
-0.018645 0.007552 0.000014
|
||||
-0.024588 0.007455 0.000014
|
||||
-0.019628 0.007389 0.000014
|
||||
-0.023607 0.007324 0.000014
|
||||
-0.020622 0.007284 0.000014
|
||||
-0.022617 0.007252 0.000014
|
||||
-0.021621 0.007238 0.000014
|
||||
0.100436 0.006345 0.000014
|
||||
-0.099442 0.006342 0.000014
|
||||
0.034017 0.004742 0.000014
|
||||
-0.032877 0.004606 0.000014
|
||||
0.100612 0.005939 0.000014
|
||||
-0.099619 0.005936 0.000014
|
||||
0.100772 0.005527 0.000014
|
||||
-0.099779 0.005523 0.000014
|
||||
0.100916 0.005109 0.000014
|
||||
-0.099923 0.005106 0.000014
|
||||
0.101043 0.004686 0.000014
|
||||
-0.100050 0.004683 0.000014
|
||||
-0.049987 0.001628 0.000014
|
||||
0.050980 0.001628 0.000014
|
||||
0.034138 0.002749 0.000014
|
||||
0.101154 0.004259 0.000014
|
||||
-0.100161 0.004256 0.000014
|
||||
-0.032990 0.002624 0.000014
|
||||
0.101248 0.003828 0.000014
|
||||
-0.100255 0.003825 0.000014
|
||||
0.101325 0.003393 0.000014
|
||||
-0.100332 0.003390 0.000014
|
||||
0.101385 0.002956 0.000014
|
||||
-0.100392 0.002952 0.000014
|
||||
0.101429 0.002516 0.000014
|
||||
-0.100435 0.002512 0.000014
|
||||
0.034141 0.000759 0.000014
|
||||
-0.032986 0.000642 0.000014
|
||||
0.101455 0.002073 0.000014
|
||||
-0.100461 0.002070 0.000014
|
||||
0.101463 0.001630 0.000014
|
||||
-0.100470 0.001626 0.000014
|
||||
0.101455 0.001186 0.000014
|
||||
-0.049876 -0.001705 0.000014
|
||||
0.050872 -0.001706 0.000014
|
||||
-0.100461 0.001183 0.000014
|
||||
0.101429 0.000744 0.000014
|
||||
-0.100435 0.000740 0.000014
|
||||
0.034026 -0.001223 0.000014
|
||||
0.101386 0.000304 0.000014
|
||||
-0.100392 0.000300 0.000014
|
||||
-0.032865 -0.001334 0.000014
|
||||
0.101325 -0.000134 0.000014
|
||||
-0.100332 -0.000137 0.000014
|
||||
0.101248 -0.000569 0.000014
|
||||
-0.100255 -0.000572 0.000014
|
||||
0.101154 -0.001000 0.000014
|
||||
-0.100161 -0.001003 0.000014
|
||||
0.101043 -0.001427 0.000014
|
||||
-0.100050 -0.001430 0.000014
|
||||
0.033795 -0.003191 0.000014
|
||||
-0.032627 -0.003300 0.000014
|
||||
0.100916 -0.001850 0.000014
|
||||
-0.099923 -0.001853 0.000014
|
||||
-0.049549 -0.005006 0.000014
|
||||
0.050545 -0.005007 0.000014
|
||||
0.100772 -0.002267 0.000014
|
||||
-0.099779 -0.002271 0.000014
|
||||
0.100612 -0.002680 0.000014
|
||||
-0.099619 -0.002683 0.000014
|
||||
0.100436 -0.003086 0.000014
|
||||
-0.099442 -0.003089 0.000014
|
||||
0.100243 -0.003486 0.000014
|
||||
-0.099250 -0.003489 0.000014
|
||||
0.033449 -0.005140 0.000014
|
||||
-0.032274 -0.005250 0.000014
|
||||
0.095112 -0.012497 0.000014
|
||||
-0.094117 -0.012504 0.000014
|
||||
-0.049008 -0.008265 0.000014
|
||||
0.050005 -0.008266 0.000014
|
||||
0.032988 -0.007066 0.000014
|
||||
-0.031806 -0.007179 0.000014
|
||||
0.032414 -0.008963 0.000014
|
||||
-0.031222 -0.009081 0.000014
|
||||
-0.048257 -0.011471 0.000014
|
||||
0.049256 -0.011473 0.000014
|
||||
0.031728 -0.010825 0.000014
|
||||
-0.030525 -0.010952 0.000014
|
||||
0.030930 -0.012649 0.000014
|
||||
-0.029713 -0.012787 0.000014
|
||||
-0.047301 -0.014615 0.000014
|
||||
0.048300 -0.014618 0.000014
|
||||
0.089250 -0.020965 0.000014
|
||||
-0.088253 -0.020973 0.000014
|
||||
0.030023 -0.014428 0.000014
|
||||
-0.028793 -0.014570 0.000014
|
||||
0.029007 -0.016157 0.000014
|
||||
-0.027773 -0.016287 0.000014
|
||||
-0.046144 -0.017687 0.000014
|
||||
0.047144 -0.017691 0.000014
|
||||
0.027889 -0.017823 0.000014
|
||||
-0.026657 -0.017935 0.000014
|
||||
-0.044789 -0.020678 0.000014
|
||||
0.045790 -0.020682 0.000014
|
||||
0.026679 -0.019412 0.000014
|
||||
-0.025449 -0.019509 0.000014
|
||||
0.025382 -0.020921 0.000014
|
||||
-0.024151 -0.021007 0.000014
|
||||
-0.043242 -0.023577 0.000014
|
||||
0.044243 -0.023582 0.000014
|
||||
0.024001 -0.022348 0.000014
|
||||
0.082702 -0.028842 0.000014
|
||||
-0.081704 -0.028851 0.000014
|
||||
-0.022769 -0.022425 0.000014
|
||||
0.022541 -0.023687 0.000014
|
||||
-0.021306 -0.023759 0.000014
|
||||
-0.041505 -0.026374 0.000014
|
||||
0.042506 -0.026380 0.000014
|
||||
0.021005 -0.024938 0.000014
|
||||
-0.019765 -0.025006 0.000014
|
||||
0.019399 -0.026096 0.000014
|
||||
-0.018150 -0.026161 0.000014
|
||||
0.017725 -0.027158 0.000014
|
||||
-0.016466 -0.027221 0.000014
|
||||
-0.039583 -0.029061 0.000014
|
||||
0.040584 -0.029067 0.000014
|
||||
0.015989 -0.028120 0.000014
|
||||
-0.014715 -0.028183 0.000014
|
||||
0.014194 -0.028981 0.000014
|
||||
-0.012903 -0.029043 0.000014
|
||||
0.075515 -0.036084 0.000014
|
||||
-0.074517 -0.036093 0.000014
|
||||
0.012345 -0.029736 0.000014
|
||||
-0.011042 -0.029793 0.000014
|
||||
-0.037480 -0.031627 0.000014
|
||||
0.038481 -0.031633 0.000014
|
||||
0.010446 -0.030383 0.000014
|
||||
-0.009148 -0.030428 0.000014
|
||||
0.008512 -0.030915 0.000014
|
||||
-0.007226 -0.030947 0.000014
|
||||
0.006558 -0.031329 0.000014
|
||||
-0.005283 -0.031351 0.000014
|
||||
0.004589 -0.031626 0.000014
|
||||
-0.003322 -0.031639 0.000014
|
||||
0.002612 -0.031804 0.000014
|
||||
-0.035200 -0.034062 0.000014
|
||||
0.036201 -0.034069 0.000014
|
||||
-0.001349 -0.031811 0.000014
|
||||
0.000631 -0.031866 0.000014
|
||||
-0.032765 -0.036341 0.000014
|
||||
0.033765 -0.036348 0.000014
|
||||
0.067734 -0.042645 0.000014
|
||||
-0.066736 -0.042654 0.000014
|
||||
-0.030199 -0.038443 0.000014
|
||||
0.031198 -0.038451 0.000014
|
||||
-0.027511 -0.040365 0.000014
|
||||
0.028511 -0.040372 0.000014
|
||||
-0.024713 -0.042101 0.000014
|
||||
0.025712 -0.042109 0.000014
|
||||
-0.021814 -0.043648 0.000014
|
||||
0.022812 -0.043656 0.000014
|
||||
0.059406 -0.048480 0.000014
|
||||
-0.058408 -0.048487 0.000014
|
||||
-0.018822 -0.045003 0.000014
|
||||
0.019820 -0.045009 0.000014
|
||||
-0.015750 -0.046160 0.000014
|
||||
0.016746 -0.046166 0.000014
|
||||
-0.012605 -0.047115 0.000014
|
||||
0.013601 -0.047121 0.000014
|
||||
-0.009398 -0.047866 0.000014
|
||||
0.010393 -0.047870 0.000014
|
||||
-0.006139 -0.048407 0.000014
|
||||
0.007134 -0.048410 0.000014
|
||||
-0.002837 -0.048735 0.000014
|
||||
0.003831 -0.048736 0.000014
|
||||
0.050575 -0.053542 0.000014
|
||||
-0.049579 -0.053547 0.000014
|
||||
0.000497 -0.048845 0.000014
|
||||
0.041289 -0.057786 0.000014
|
||||
-0.040293 -0.057790 0.000014
|
||||
0.031592 -0.061166 0.000014
|
||||
-0.030597 -0.061169 0.000014
|
||||
0.021530 -0.063637 0.000014
|
||||
-0.020536 -0.063639 0.000014
|
||||
0.011150 -0.065153 0.000014
|
||||
-0.010156 -0.065154 0.000014
|
||||
0.000497 -0.065669 0.000014
|
||||
3 0 1 2
|
||||
3 0 3 1
|
||||
3 4 3 0
|
||||
3 4 5 3
|
||||
3 6 5 4
|
||||
3 6 7 5
|
||||
3 8 7 6
|
||||
3 8 9 7
|
||||
3 10 9 8
|
||||
3 10 11 9
|
||||
3 12 13 10
|
||||
3 13 11 10
|
||||
3 12 14 13
|
||||
3 15 11 13
|
||||
3 12 16 14
|
||||
3 17 11 15
|
||||
3 17 18 11
|
||||
3 19 16 12
|
||||
3 19 20 16
|
||||
3 21 18 17
|
||||
3 19 22 20
|
||||
3 23 18 21
|
||||
3 19 24 22
|
||||
3 25 18 23
|
||||
3 19 26 24
|
||||
3 27 18 25
|
||||
3 19 28 26
|
||||
3 29 18 27
|
||||
3 19 30 28
|
||||
3 31 18 29
|
||||
3 31 32 18
|
||||
3 33 30 19
|
||||
3 33 34 30
|
||||
3 35 32 31
|
||||
3 33 36 34
|
||||
3 37 32 35
|
||||
3 33 38 36
|
||||
3 39 32 37
|
||||
3 33 40 38
|
||||
3 41 32 39
|
||||
3 41 42 32
|
||||
3 43 40 33
|
||||
3 43 44 40
|
||||
3 45 42 41
|
||||
3 46 47 48
|
||||
3 49 47 46
|
||||
3 50 47 49
|
||||
3 50 51 47
|
||||
3 52 51 50
|
||||
3 53 51 52
|
||||
3 53 54 51
|
||||
3 55 54 53
|
||||
3 56 54 55
|
||||
3 43 57 44
|
||||
3 58 42 45
|
||||
3 59 54 56
|
||||
3 59 60 54
|
||||
3 61 60 59
|
||||
3 62 60 61
|
||||
3 62 63 60
|
||||
3 64 63 62
|
||||
3 65 63 64
|
||||
3 66 63 65
|
||||
3 66 67 63
|
||||
3 66 68 67
|
||||
3 69 68 66
|
||||
3 69 70 68
|
||||
3 43 71 57
|
||||
3 72 42 58
|
||||
3 73 70 69
|
||||
3 72 74 42
|
||||
3 75 71 43
|
||||
3 73 76 70
|
||||
3 77 76 73
|
||||
3 77 78 76
|
||||
3 79 78 77
|
||||
3 75 80 71
|
||||
3 81 74 72
|
||||
3 79 82 78
|
||||
3 83 82 79
|
||||
3 84 82 83
|
||||
3 84 85 82
|
||||
3 86 85 84
|
||||
3 86 87 85
|
||||
3 75 88 80
|
||||
3 89 74 81
|
||||
3 90 87 86
|
||||
3 90 91 87
|
||||
3 92 91 90
|
||||
3 93 91 92
|
||||
3 93 94 91
|
||||
3 89 95 74
|
||||
3 96 88 75
|
||||
3 96 97 88
|
||||
3 98 95 89
|
||||
3 99 94 93
|
||||
3 99 100 94
|
||||
3 101 100 99
|
||||
3 102 100 101
|
||||
3 102 103 100
|
||||
3 96 104 97
|
||||
3 105 95 98
|
||||
3 106 103 102
|
||||
3 107 103 106
|
||||
3 107 108 103
|
||||
3 109 108 107
|
||||
3 109 110 108
|
||||
3 111 110 109
|
||||
3 96 112 104
|
||||
3 113 95 105
|
||||
3 114 110 111
|
||||
3 114 115 110
|
||||
3 116 115 114
|
||||
3 113 117 95
|
||||
3 118 112 96
|
||||
3 119 115 116
|
||||
3 118 120 112
|
||||
3 121 117 113
|
||||
3 122 115 119
|
||||
3 122 123 115
|
||||
3 124 123 122
|
||||
3 125 123 124
|
||||
3 125 126 123
|
||||
3 127 126 125
|
||||
3 118 128 120
|
||||
3 129 117 121
|
||||
3 130 126 127
|
||||
3 131 126 130
|
||||
3 131 132 126
|
||||
3 133 134 135
|
||||
3 136 132 131
|
||||
3 133 137 134
|
||||
3 138 132 136
|
||||
3 133 139 137
|
||||
3 140 132 138
|
||||
3 133 141 139
|
||||
3 142 132 140
|
||||
3 142 143 132
|
||||
3 144 141 133
|
||||
3 144 145 141
|
||||
3 146 143 142
|
||||
3 118 147 128
|
||||
3 148 117 129
|
||||
3 144 149 145
|
||||
3 150 143 146
|
||||
3 144 151 149
|
||||
3 152 143 150
|
||||
3 144 153 151
|
||||
3 154 143 152
|
||||
3 144 155 153
|
||||
3 156 143 154
|
||||
3 144 157 155
|
||||
3 158 143 156
|
||||
3 144 158 157
|
||||
3 144 143 158
|
||||
3 148 159 117
|
||||
3 160 147 118
|
||||
3 144 161 143
|
||||
3 162 161 144
|
||||
3 148 163 159
|
||||
3 164 147 160
|
||||
3 148 165 163
|
||||
3 166 147 164
|
||||
3 148 167 165
|
||||
3 168 147 166
|
||||
3 148 169 167
|
||||
3 170 147 168
|
||||
3 170 171 147
|
||||
3 172 169 148
|
||||
3 162 173 161
|
||||
3 172 174 169
|
||||
3 175 171 170
|
||||
3 176 173 162
|
||||
3 172 177 174
|
||||
3 178 171 175
|
||||
3 172 179 177
|
||||
3 180 171 178
|
||||
3 172 181 179
|
||||
3 182 171 180
|
||||
3 172 183 181
|
||||
3 184 171 182
|
||||
3 176 185 173
|
||||
3 186 185 176
|
||||
3 172 187 183
|
||||
3 188 171 184
|
||||
3 172 189 187
|
||||
3 190 171 188
|
||||
3 172 191 189
|
||||
3 190 192 171
|
||||
3 193 191 172
|
||||
3 194 192 190
|
||||
3 193 195 191
|
||||
3 196 192 194
|
||||
3 186 197 185
|
||||
3 193 198 195
|
||||
3 199 192 196
|
||||
3 200 197 186
|
||||
3 193 201 198
|
||||
3 202 192 199
|
||||
3 193 203 201
|
||||
3 204 192 202
|
||||
3 193 205 203
|
||||
3 206 192 204
|
||||
3 193 207 205
|
||||
3 208 192 206
|
||||
3 200 209 197
|
||||
3 210 209 200
|
||||
3 193 211 207
|
||||
3 212 192 208
|
||||
3 212 213 192
|
||||
3 214 211 193
|
||||
3 214 215 211
|
||||
3 216 213 212
|
||||
3 214 217 215
|
||||
3 218 213 216
|
||||
3 214 219 217
|
||||
3 220 213 218
|
||||
3 214 221 219
|
||||
3 222 213 220
|
||||
3 210 223 209
|
||||
3 224 223 210
|
||||
3 214 225 221
|
||||
3 226 213 222
|
||||
3 226 227 213
|
||||
3 228 225 214
|
||||
3 224 229 223
|
||||
3 230 229 224
|
||||
3 230 231 229
|
||||
3 232 231 230
|
||||
3 226 233 227
|
||||
3 234 225 228
|
||||
3 232 235 231
|
||||
3 236 235 232
|
||||
3 236 237 235
|
||||
3 238 237 236
|
||||
3 226 239 233
|
||||
3 240 225 234
|
||||
3 240 241 225
|
||||
3 242 239 226
|
||||
3 238 243 237
|
||||
3 244 243 238
|
||||
3 244 245 243
|
||||
3 246 245 244
|
||||
3 242 247 239
|
||||
3 248 241 240
|
||||
3 246 249 245
|
||||
3 250 249 246
|
||||
3 242 251 247
|
||||
3 252 241 248
|
||||
3 250 253 249
|
||||
3 254 253 250
|
||||
3 254 255 253
|
||||
3 256 255 254
|
||||
3 242 257 251
|
||||
3 258 241 252
|
||||
3 256 259 255
|
||||
3 258 260 241
|
||||
3 261 257 242
|
||||
3 262 259 256
|
||||
3 262 263 259
|
||||
3 264 263 262
|
||||
3 261 265 257
|
||||
3 266 260 258
|
||||
3 264 267 263
|
||||
3 268 267 264
|
||||
3 268 269 267
|
||||
3 270 269 268
|
||||
3 270 271 269
|
||||
3 272 271 270
|
||||
3 261 273 265
|
||||
3 274 260 266
|
||||
3 272 275 271
|
||||
3 276 275 272
|
||||
3 276 277 275
|
||||
3 278 277 276
|
||||
3 274 279 260
|
||||
3 280 273 261
|
||||
3 278 281 277
|
||||
3 282 281 278
|
||||
3 280 283 273
|
||||
3 284 279 274
|
||||
3 282 285 281
|
||||
3 286 285 282
|
||||
3 286 287 285
|
||||
3 288 287 286
|
||||
3 288 289 287
|
||||
3 290 289 288
|
||||
3 290 291 289
|
||||
3 292 291 290
|
||||
3 292 293 291
|
||||
3 280 294 283
|
||||
3 295 279 284
|
||||
3 296 293 292
|
||||
3 296 297 293
|
||||
3 280 298 294
|
||||
3 299 279 295
|
||||
3 299 300 279
|
||||
3 301 298 280
|
||||
3 301 302 298
|
||||
3 303 300 299
|
||||
3 301 304 302
|
||||
3 305 300 303
|
||||
3 301 306 304
|
||||
3 307 300 305
|
||||
3 301 308 306
|
||||
3 309 300 307
|
||||
3 309 310 300
|
||||
3 311 308 301
|
||||
3 311 312 308
|
||||
3 313 310 309
|
||||
3 311 314 312
|
||||
3 315 310 313
|
||||
3 311 316 314
|
||||
3 317 310 315
|
||||
3 311 318 316
|
||||
3 319 310 317
|
||||
3 311 320 318
|
||||
3 321 310 319
|
||||
3 311 322 320
|
||||
3 323 310 321
|
||||
3 323 324 310
|
||||
3 325 322 311
|
||||
3 325 326 322
|
||||
3 326 324 323
|
||||
3 325 324 326
|
||||
3 325 327 324
|
||||
3 328 327 325
|
||||
3 328 329 327
|
||||
3 330 329 328
|
||||
3 330 331 329
|
||||
3 332 331 330
|
||||
3 332 333 331
|
||||
3 334 333 332
|
||||
3 334 335 333
|
||||
948
rsc/mesh/icon_eye_slash.ply
Normal file
948
rsc/mesh/icon_eye_slash.ply
Normal file
@@ -0,0 +1,948 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.91.0 - www.blender.org
|
||||
element vertex 470
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
element face 468
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-0.099706 0.091319 0.000014
|
||||
-0.098970 0.091314 0.000014
|
||||
-0.099337 0.091328 0.000014
|
||||
-0.100075 0.091285 0.000014
|
||||
-0.098605 0.091275 0.000014
|
||||
-0.100442 0.091227 0.000014
|
||||
-0.098245 0.091213 0.000014
|
||||
-0.100802 0.091145 0.000014
|
||||
-0.097890 0.091128 0.000014
|
||||
-0.101154 0.091040 0.000014
|
||||
-0.097541 0.091019 0.000014
|
||||
-0.101498 0.090913 0.000014
|
||||
-0.097200 0.090889 0.000014
|
||||
-0.101831 0.090764 0.000014
|
||||
-0.096867 0.090735 0.000014
|
||||
-0.102155 0.090594 0.000014
|
||||
-0.096544 0.090560 0.000014
|
||||
-0.102466 0.090403 0.000014
|
||||
-0.096231 0.090364 0.000014
|
||||
-0.102765 0.090192 0.000014
|
||||
-0.095931 0.090146 0.000014
|
||||
-0.103049 0.089962 0.000014
|
||||
-0.095053 0.089467 0.000014
|
||||
-0.103319 0.089713 0.000014
|
||||
-0.103574 0.089445 0.000014
|
||||
-0.092625 0.087591 0.000014
|
||||
-0.103811 0.089160 0.000014
|
||||
-0.103946 0.088986 0.000014
|
||||
-0.104321 0.088503 0.000014
|
||||
-0.104887 0.087775 0.000014
|
||||
-0.105596 0.086862 0.000014
|
||||
-0.088957 0.084756 0.000014
|
||||
-0.106401 0.085826 0.000014
|
||||
-0.107254 0.084728 0.000014
|
||||
-0.084360 0.081204 0.000014
|
||||
-0.108107 0.083630 0.000014
|
||||
-0.108912 0.082594 0.000014
|
||||
-0.109622 0.081681 0.000014
|
||||
-0.110188 0.080953 0.000014
|
||||
-0.079142 0.077172 0.000014
|
||||
-0.110562 0.080471 0.000014
|
||||
-0.110698 0.080296 0.000014
|
||||
-0.110916 0.079996 0.000014
|
||||
-0.111112 0.079684 0.000014
|
||||
-0.111287 0.079361 0.000014
|
||||
-0.111440 0.079029 0.000014
|
||||
-0.111571 0.078687 0.000014
|
||||
-0.111679 0.078339 0.000014
|
||||
-0.111764 0.077984 0.000014
|
||||
-0.111826 0.077624 0.000014
|
||||
-0.111864 0.077260 0.000014
|
||||
-0.111879 0.076893 0.000014
|
||||
-0.073615 0.072901 0.000014
|
||||
-0.111870 0.076524 0.000014
|
||||
-0.111836 0.076155 0.000014
|
||||
-0.111778 0.075789 0.000014
|
||||
-0.111696 0.075429 0.000014
|
||||
-0.111591 0.075077 0.000014
|
||||
-0.111464 0.074734 0.000014
|
||||
-0.111315 0.074400 0.000014
|
||||
-0.111145 0.074077 0.000014
|
||||
-0.110954 0.073766 0.000014
|
||||
-0.110744 0.073467 0.000014
|
||||
-0.110513 0.073183 0.000014
|
||||
-0.110264 0.072913 0.000014
|
||||
-0.109997 0.072659 0.000014
|
||||
-0.068087 0.068629 0.000014
|
||||
-0.109712 0.072422 0.000014
|
||||
-0.105650 0.069283 0.000014
|
||||
-0.094422 0.060607 0.000014
|
||||
-0.004122 0.068780 0.000014
|
||||
0.011047 0.068364 0.000014
|
||||
0.000386 0.068879 0.000014
|
||||
-0.008613 0.068493 0.000014
|
||||
-0.062870 0.064597 0.000014
|
||||
-0.013080 0.068021 0.000014
|
||||
0.021434 0.066847 0.000014
|
||||
-0.017518 0.067364 0.000014
|
||||
-0.021922 0.066525 0.000014
|
||||
0.031502 0.064376 0.000014
|
||||
-0.026285 0.065505 0.000014
|
||||
-0.030601 0.064305 0.000014
|
||||
-0.058272 0.061045 0.000014
|
||||
0.041205 0.060994 0.000014
|
||||
-0.034867 0.062926 0.000014
|
||||
-0.039075 0.061370 0.000014
|
||||
-0.043220 0.059639 0.000014
|
||||
-0.054604 0.058210 0.000014
|
||||
0.050498 0.056749 0.000014
|
||||
-0.077459 0.047500 0.000014
|
||||
-0.047296 0.057733 0.000014
|
||||
-0.052176 0.056334 0.000014
|
||||
-0.051298 0.055655 0.000014
|
||||
0.059334 0.051684 0.000014
|
||||
-0.002527 0.051955 0.000014
|
||||
0.000386 0.052043 0.000014
|
||||
0.002600 0.051995 0.000014
|
||||
0.004804 0.051852 0.000014
|
||||
-0.005419 0.051700 0.000014
|
||||
0.006996 0.051612 0.000014
|
||||
-0.008281 0.051278 0.000014
|
||||
0.067668 0.045847 0.000014
|
||||
0.009172 0.051278 0.000014
|
||||
-0.011107 0.050693 0.000014
|
||||
0.011329 0.050849 0.000014
|
||||
0.013465 0.050327 0.000014
|
||||
-0.013890 0.049948 0.000014
|
||||
0.015576 0.049713 0.000014
|
||||
-0.016623 0.049043 0.000014
|
||||
0.017659 0.049007 0.000014
|
||||
-0.019299 0.047983 0.000014
|
||||
0.019711 0.048211 0.000014
|
||||
0.021729 0.047324 0.000014
|
||||
-0.021912 0.046769 0.000014
|
||||
-0.056197 0.031070 0.000014
|
||||
0.023711 0.046348 0.000014
|
||||
-0.024455 0.045404 0.000014
|
||||
0.025652 0.045284 0.000014
|
||||
0.075455 0.039282 0.000014
|
||||
-0.026920 0.043891 0.000014
|
||||
0.027545 0.044136 0.000014
|
||||
0.029382 0.042909 0.000014
|
||||
-0.029302 0.042232 0.000014
|
||||
0.031160 0.041605 0.000014
|
||||
-0.031592 0.040429 0.000014
|
||||
0.032876 0.040227 0.000014
|
||||
-0.031084 0.040036 0.000014
|
||||
0.034530 0.038777 0.000014
|
||||
-0.029679 0.038951 0.000014
|
||||
0.082647 0.032034 0.000014
|
||||
-0.027557 0.037311 0.000014
|
||||
0.036118 0.037257 0.000014
|
||||
-0.024897 0.035256 0.000014
|
||||
0.037638 0.035669 0.000014
|
||||
0.039088 0.034016 0.000014
|
||||
-0.021878 0.032923 0.000014
|
||||
-0.001705 0.035113 0.000014
|
||||
0.001731 0.035197 0.000014
|
||||
0.000013 0.035199 0.000014
|
||||
0.003447 0.035105 0.000014
|
||||
-0.003417 0.034937 0.000014
|
||||
0.005156 0.034926 0.000014
|
||||
-0.005122 0.034673 0.000014
|
||||
0.006857 0.034657 0.000014
|
||||
-0.006815 0.034320 0.000014
|
||||
0.008545 0.034300 0.000014
|
||||
-0.008493 0.033877 0.000014
|
||||
0.010216 0.033855 0.000014
|
||||
0.040467 0.032300 0.000014
|
||||
-0.007985 0.033148 0.000014
|
||||
0.011867 0.033322 0.000014
|
||||
0.013489 0.032703 0.000014
|
||||
-0.007517 0.032396 0.000014
|
||||
-0.018680 0.030452 0.000014
|
||||
0.015070 0.032003 0.000014
|
||||
-0.007091 0.031623 0.000014
|
||||
0.041771 0.030523 0.000014
|
||||
0.089200 0.024150 0.000014
|
||||
0.016609 0.031223 0.000014
|
||||
-0.006707 0.030829 0.000014
|
||||
0.018103 0.030367 0.000014
|
||||
-0.032067 0.012424 0.000014
|
||||
-0.006367 0.030018 0.000014
|
||||
0.042998 0.028687 0.000014
|
||||
-0.015481 0.027980 0.000014
|
||||
0.019548 0.029436 0.000014
|
||||
-0.006069 0.029190 0.000014
|
||||
0.020942 0.028432 0.000014
|
||||
-0.005815 0.028348 0.000014
|
||||
0.044146 0.026794 0.000014
|
||||
0.022283 0.027358 0.000014
|
||||
-0.005606 0.027493 0.000014
|
||||
-0.012462 0.025648 0.000014
|
||||
-0.005442 0.026628 0.000014
|
||||
0.023567 0.026215 0.000014
|
||||
0.045211 0.024853 0.000014
|
||||
-0.005324 0.025753 0.000014
|
||||
0.024792 0.025005 0.000014
|
||||
-0.087751 0.024625 0.000014
|
||||
-0.085826 0.025590 0.000014
|
||||
-0.086550 0.026150 0.000014
|
||||
-0.005252 0.024870 0.000014
|
||||
-0.009802 0.023592 0.000014
|
||||
-0.083824 0.024043 0.000014
|
||||
0.025955 0.023731 0.000014
|
||||
-0.005227 0.023982 0.000014
|
||||
0.046187 0.022872 0.000014
|
||||
-0.088935 0.023085 0.000014
|
||||
0.095068 0.015675 0.000014
|
||||
-0.080800 0.021706 0.000014
|
||||
-0.005243 0.023686 0.000014
|
||||
0.027053 0.022395 0.000014
|
||||
-0.005264 0.023390 0.000014
|
||||
-0.007680 0.021952 0.000014
|
||||
-0.005290 0.023095 0.000014
|
||||
-0.005322 0.022800 0.000014
|
||||
-0.090099 0.021529 0.000014
|
||||
0.047074 0.020854 0.000014
|
||||
-0.005359 0.022507 0.000014
|
||||
-0.005402 0.022213 0.000014
|
||||
0.028083 0.020999 0.000014
|
||||
-0.005449 0.021921 0.000014
|
||||
-0.006275 0.020867 0.000014
|
||||
-0.005502 0.021630 0.000014
|
||||
-0.077009 0.018777 0.000014
|
||||
-0.005561 0.021339 0.000014
|
||||
-0.091242 0.019956 0.000014
|
||||
-0.005624 0.021050 0.000014
|
||||
-0.005693 0.020761 0.000014
|
||||
0.029039 0.019550 0.000014
|
||||
-0.005767 0.020474 0.000014
|
||||
0.047871 0.018802 0.000014
|
||||
-0.092362 0.018365 0.000014
|
||||
0.029915 0.018060 0.000014
|
||||
0.048576 0.016719 0.000014
|
||||
-0.072706 0.015453 0.000014
|
||||
-0.093458 0.016755 0.000014
|
||||
0.030711 0.016529 0.000014
|
||||
-0.094528 0.015126 0.000014
|
||||
0.049191 0.014609 0.000014
|
||||
0.031424 0.014963 0.000014
|
||||
0.100205 0.006654 0.000014
|
||||
-0.068149 0.011932 0.000014
|
||||
-0.095571 0.013476 0.000014
|
||||
0.032055 0.013364 0.000014
|
||||
0.049713 0.012474 0.000014
|
||||
-0.096584 0.011804 0.000014
|
||||
0.032602 0.011735 0.000014
|
||||
0.050141 0.010317 0.000014
|
||||
-0.006504 -0.007329 0.000014
|
||||
-0.063591 0.008410 0.000014
|
||||
-0.097567 0.010110 0.000014
|
||||
0.033065 0.010081 0.000014
|
||||
0.050476 0.008141 0.000014
|
||||
-0.098517 0.008392 0.000014
|
||||
0.033441 0.008404 0.000014
|
||||
-0.059289 0.005086 0.000014
|
||||
0.033730 0.006707 0.000014
|
||||
-0.099432 0.006651 0.000014
|
||||
0.050715 0.005950 0.000014
|
||||
0.033932 0.004994 0.000014
|
||||
0.100398 0.006254 0.000014
|
||||
-0.099625 0.006251 0.000014
|
||||
0.100575 0.005848 0.000014
|
||||
-0.099802 0.005844 0.000014
|
||||
0.050859 0.003747 0.000014
|
||||
0.100735 0.005435 0.000014
|
||||
-0.099962 0.005432 0.000014
|
||||
0.100879 0.005017 0.000014
|
||||
-0.100106 0.005014 0.000014
|
||||
-0.055498 0.002157 0.000014
|
||||
0.101006 0.004594 0.000014
|
||||
-0.100233 0.004590 0.000014
|
||||
0.034044 0.003268 0.000014
|
||||
0.101117 0.004167 0.000014
|
||||
-0.100344 0.004163 0.000014
|
||||
0.101211 0.003735 0.000014
|
||||
-0.100438 0.003732 0.000014
|
||||
0.050906 0.001533 0.000014
|
||||
0.101288 0.003300 0.000014
|
||||
-0.100515 0.003297 0.000014
|
||||
0.101348 0.002862 0.000014
|
||||
-0.100575 0.002859 0.000014
|
||||
0.034066 0.001533 0.000014
|
||||
0.101391 0.002422 0.000014
|
||||
-0.100619 0.002418 0.000014
|
||||
0.101417 0.001979 0.000014
|
||||
-0.100645 0.001976 0.000014
|
||||
-0.052474 -0.000180 0.000014
|
||||
0.101426 0.001535 0.000014
|
||||
-0.100653 0.001532 0.000014
|
||||
0.101417 0.001091 0.000014
|
||||
0.034043 0.000647 0.000014
|
||||
0.050868 -0.000353 0.000014
|
||||
-0.100645 0.001088 0.000014
|
||||
0.101392 0.000649 0.000014
|
||||
-0.100619 0.000645 0.000014
|
||||
0.101348 0.000208 0.000014
|
||||
0.033996 -0.000238 0.000014
|
||||
-0.100575 0.000205 0.000014
|
||||
0.101288 -0.000230 0.000014
|
||||
-0.100515 -0.000233 0.000014
|
||||
-0.050472 -0.001727 0.000014
|
||||
0.101211 -0.000665 0.000014
|
||||
-0.100438 -0.000668 0.000014
|
||||
0.033925 -0.001121 0.000014
|
||||
0.050755 -0.002217 0.000014
|
||||
0.101117 -0.001096 0.000014
|
||||
-0.100344 -0.001100 0.000014
|
||||
0.101006 -0.001524 0.000014
|
||||
-0.100233 -0.001527 0.000014
|
||||
0.033830 -0.002001 0.000014
|
||||
0.100879 -0.001947 0.000014
|
||||
-0.100106 -0.001950 0.000014
|
||||
-0.049748 -0.002286 0.000014
|
||||
0.100735 -0.002365 0.000014
|
||||
-0.099962 -0.002368 0.000014
|
||||
0.033713 -0.002879 0.000014
|
||||
0.050569 -0.004058 0.000014
|
||||
-0.048853 -0.008687 0.000014
|
||||
0.100575 -0.002777 0.000014
|
||||
-0.099802 -0.002781 0.000014
|
||||
0.100398 -0.003184 0.000014
|
||||
-0.099625 -0.003188 0.000014
|
||||
0.033572 -0.003752 0.000014
|
||||
0.100205 -0.003584 0.000014
|
||||
-0.099432 -0.003588 0.000014
|
||||
0.098392 -0.006978 0.000014
|
||||
-0.094295 -0.012609 0.000014
|
||||
0.033408 -0.004621 0.000014
|
||||
0.050313 -0.005877 0.000014
|
||||
0.033221 -0.005486 0.000014
|
||||
0.033010 -0.006346 0.000014
|
||||
0.049990 -0.007672 0.000014
|
||||
0.032777 -0.007201 0.000014
|
||||
0.096470 -0.010306 0.000014
|
||||
0.032521 -0.008049 0.000014
|
||||
0.019059 -0.027082 0.000014
|
||||
0.049601 -0.009444 0.000014
|
||||
0.032242 -0.008891 0.000014
|
||||
-0.047194 -0.014806 0.000014
|
||||
0.046030 -0.019547 0.000014
|
||||
0.049149 -0.011192 0.000014
|
||||
0.094441 -0.013564 0.000014
|
||||
0.048637 -0.012915 0.000014
|
||||
-0.088427 -0.021084 0.000014
|
||||
0.048066 -0.014612 0.000014
|
||||
0.092307 -0.016751 0.000014
|
||||
0.047440 -0.016285 0.000014
|
||||
-0.044820 -0.020591 0.000014
|
||||
0.046760 -0.017931 0.000014
|
||||
0.090071 -0.019865 0.000014
|
||||
0.046030 -0.019551 0.000014
|
||||
0.046030 -0.019547 0.000014
|
||||
0.046030 -0.019547 0.000014
|
||||
0.046030 -0.019548 0.000014
|
||||
0.046030 -0.019548 0.000014
|
||||
0.046030 -0.019549 0.000014
|
||||
0.046030 -0.019549 0.000014
|
||||
0.046030 -0.019549 0.000014
|
||||
0.046030 -0.019550 0.000014
|
||||
0.046030 -0.019550 0.000014
|
||||
0.046030 -0.019550 0.000014
|
||||
0.046030 -0.019551 0.000014
|
||||
0.087733 -0.022902 0.000014
|
||||
-0.041782 -0.025990 0.000014
|
||||
-0.081874 -0.028968 0.000014
|
||||
0.085297 -0.025861 0.000014
|
||||
0.082764 -0.028738 0.000014
|
||||
-0.038131 -0.030949 0.000014
|
||||
0.043189 -0.045727 0.000014
|
||||
0.080135 -0.031532 0.000014
|
||||
-0.074682 -0.036215 0.000014
|
||||
-0.033916 -0.035417 0.000014
|
||||
0.077414 -0.034239 0.000014
|
||||
0.074602 -0.036858 0.000014
|
||||
-0.029188 -0.039342 0.000014
|
||||
-0.066895 -0.042780 0.000014
|
||||
0.071700 -0.039386 0.000014
|
||||
-0.023998 -0.042670 0.000014
|
||||
0.110485 -0.069355 0.000014
|
||||
-0.018395 -0.045350 0.000014
|
||||
-0.058561 -0.048618 0.000014
|
||||
-0.012429 -0.047330 0.000014
|
||||
0.064452 -0.062157 0.000014
|
||||
-0.006152 -0.048556 0.000014
|
||||
0.008756 -0.048200 0.000014
|
||||
0.009866 -0.048338 0.000014
|
||||
0.009508 -0.048060 0.000014
|
||||
0.008001 -0.048328 0.000014
|
||||
0.007245 -0.048444 0.000014
|
||||
0.010857 -0.049104 0.000014
|
||||
0.006487 -0.048550 0.000014
|
||||
0.005728 -0.048643 0.000014
|
||||
0.000386 -0.048976 0.000014
|
||||
-0.049725 -0.053682 0.000014
|
||||
0.004968 -0.048725 0.000014
|
||||
0.004207 -0.048796 0.000014
|
||||
0.003444 -0.048855 0.000014
|
||||
0.002681 -0.048903 0.000014
|
||||
0.001917 -0.048939 0.000014
|
||||
0.001152 -0.048963 0.000014
|
||||
0.012353 -0.050261 0.000014
|
||||
0.014228 -0.051712 0.000014
|
||||
0.016356 -0.053358 0.000014
|
||||
0.018611 -0.055102 0.000014
|
||||
-0.040433 -0.057928 0.000014
|
||||
0.020865 -0.056846 0.000014
|
||||
0.022993 -0.058492 0.000014
|
||||
-0.030729 -0.061309 0.000014
|
||||
0.024868 -0.059943 0.000014
|
||||
0.026364 -0.061100 0.000014
|
||||
0.027355 -0.061866 0.000014
|
||||
-0.020661 -0.063780 0.000014
|
||||
0.027713 -0.062143 0.000014
|
||||
0.025512 -0.062692 0.000014
|
||||
0.081414 -0.075264 0.000014
|
||||
0.023296 -0.063202 0.000014
|
||||
0.021068 -0.063673 0.000014
|
||||
0.018825 -0.064102 0.000014
|
||||
-0.010274 -0.065297 0.000014
|
||||
0.016569 -0.064487 0.000014
|
||||
0.014298 -0.064828 0.000014
|
||||
0.012014 -0.065121 0.000014
|
||||
0.009716 -0.065365 0.000014
|
||||
0.000386 -0.065812 0.000014
|
||||
0.007405 -0.065558 0.000014
|
||||
0.005079 -0.065698 0.000014
|
||||
0.002740 -0.065783 0.000014
|
||||
0.110770 -0.069592 0.000014
|
||||
0.111038 -0.069846 0.000014
|
||||
0.111287 -0.070116 0.000014
|
||||
0.111517 -0.070400 0.000014
|
||||
0.111728 -0.070699 0.000014
|
||||
0.111919 -0.071010 0.000014
|
||||
0.112089 -0.071333 0.000014
|
||||
0.112238 -0.071666 0.000014
|
||||
0.112366 -0.072010 0.000014
|
||||
0.112470 -0.072362 0.000014
|
||||
0.112552 -0.072721 0.000014
|
||||
0.112611 -0.073087 0.000014
|
||||
0.112645 -0.073457 0.000014
|
||||
0.112654 -0.073825 0.000014
|
||||
0.112640 -0.074192 0.000014
|
||||
0.112601 -0.074556 0.000014
|
||||
0.112540 -0.074917 0.000014
|
||||
0.112454 -0.075271 0.000014
|
||||
0.092643 -0.083941 0.000014
|
||||
0.112346 -0.075620 0.000014
|
||||
0.112216 -0.075961 0.000014
|
||||
0.112063 -0.076294 0.000014
|
||||
0.111888 -0.076617 0.000014
|
||||
0.111692 -0.076929 0.000014
|
||||
0.111474 -0.077230 0.000014
|
||||
0.111339 -0.077404 0.000014
|
||||
0.110964 -0.077886 0.000014
|
||||
0.110398 -0.078614 0.000014
|
||||
0.109688 -0.079528 0.000014
|
||||
0.108882 -0.080564 0.000014
|
||||
0.108029 -0.081661 0.000014
|
||||
0.107176 -0.082759 0.000014
|
||||
0.106370 -0.083795 0.000014
|
||||
0.105660 -0.084708 0.000014
|
||||
0.096704 -0.087079 0.000014
|
||||
0.105094 -0.085437 0.000014
|
||||
0.104719 -0.085919 0.000014
|
||||
0.104584 -0.086093 0.000014
|
||||
0.104347 -0.086379 0.000014
|
||||
0.104092 -0.086646 0.000014
|
||||
0.103822 -0.086895 0.000014
|
||||
0.103538 -0.087126 0.000014
|
||||
0.097004 -0.087297 0.000014
|
||||
0.103239 -0.087337 0.000014
|
||||
0.097317 -0.087494 0.000014
|
||||
0.102928 -0.087527 0.000014
|
||||
0.097640 -0.087669 0.000014
|
||||
0.102604 -0.087698 0.000014
|
||||
0.097973 -0.087822 0.000014
|
||||
0.102271 -0.087847 0.000014
|
||||
0.098314 -0.087953 0.000014
|
||||
0.101927 -0.087974 0.000014
|
||||
0.098663 -0.088061 0.000014
|
||||
0.101575 -0.088078 0.000014
|
||||
0.099018 -0.088146 0.000014
|
||||
0.101215 -0.088160 0.000014
|
||||
0.099378 -0.088208 0.000014
|
||||
0.100848 -0.088218 0.000014
|
||||
0.099743 -0.088247 0.000014
|
||||
0.100479 -0.088252 0.000014
|
||||
0.100110 -0.088262 0.000014
|
||||
3 0 1 2
|
||||
3 3 1 0
|
||||
3 3 4 1
|
||||
3 5 4 3
|
||||
3 5 6 4
|
||||
3 7 6 5
|
||||
3 7 8 6
|
||||
3 9 8 7
|
||||
3 9 10 8
|
||||
3 11 10 9
|
||||
3 11 12 10
|
||||
3 13 12 11
|
||||
3 13 14 12
|
||||
3 15 14 13
|
||||
3 15 16 14
|
||||
3 17 16 15
|
||||
3 17 18 16
|
||||
3 19 18 17
|
||||
3 19 20 18
|
||||
3 21 20 19
|
||||
3 21 22 20
|
||||
3 23 22 21
|
||||
3 24 22 23
|
||||
3 24 25 22
|
||||
3 26 25 24
|
||||
3 27 25 26
|
||||
3 28 25 27
|
||||
3 29 25 28
|
||||
3 30 25 29
|
||||
3 30 31 25
|
||||
3 32 31 30
|
||||
3 33 31 32
|
||||
3 33 34 31
|
||||
3 35 34 33
|
||||
3 36 34 35
|
||||
3 37 34 36
|
||||
3 38 34 37
|
||||
3 38 39 34
|
||||
3 40 39 38
|
||||
3 41 39 40
|
||||
3 42 39 41
|
||||
3 43 39 42
|
||||
3 44 39 43
|
||||
3 45 39 44
|
||||
3 46 39 45
|
||||
3 47 39 46
|
||||
3 48 39 47
|
||||
3 49 39 48
|
||||
3 50 39 49
|
||||
3 51 39 50
|
||||
3 51 52 39
|
||||
3 53 52 51
|
||||
3 54 52 53
|
||||
3 55 52 54
|
||||
3 56 52 55
|
||||
3 57 52 56
|
||||
3 58 52 57
|
||||
3 59 52 58
|
||||
3 60 52 59
|
||||
3 61 52 60
|
||||
3 62 52 61
|
||||
3 63 52 62
|
||||
3 64 52 63
|
||||
3 65 52 64
|
||||
3 65 66 52
|
||||
3 67 66 65
|
||||
3 68 66 67
|
||||
3 69 66 68
|
||||
3 70 71 72
|
||||
3 73 71 70
|
||||
3 69 74 66
|
||||
3 75 71 73
|
||||
3 75 76 71
|
||||
3 77 76 75
|
||||
3 78 76 77
|
||||
3 78 79 76
|
||||
3 80 79 78
|
||||
3 81 79 80
|
||||
3 69 82 74
|
||||
3 81 83 79
|
||||
3 84 83 81
|
||||
3 85 83 84
|
||||
3 86 83 85
|
||||
3 69 87 82
|
||||
3 86 88 83
|
||||
3 89 87 69
|
||||
3 90 88 86
|
||||
3 89 91 87
|
||||
3 92 88 90
|
||||
3 92 93 88
|
||||
3 89 92 91
|
||||
3 89 94 92
|
||||
3 94 95 92
|
||||
3 95 93 92
|
||||
3 96 93 95
|
||||
3 97 93 96
|
||||
3 89 98 94
|
||||
3 99 93 97
|
||||
3 89 100 98
|
||||
3 99 101 93
|
||||
3 102 101 99
|
||||
3 89 103 100
|
||||
3 104 101 102
|
||||
3 105 101 104
|
||||
3 89 106 103
|
||||
3 107 101 105
|
||||
3 89 108 106
|
||||
3 109 101 107
|
||||
3 89 110 108
|
||||
3 111 101 109
|
||||
3 112 101 111
|
||||
3 89 113 110
|
||||
3 114 113 89
|
||||
3 115 101 112
|
||||
3 114 116 113
|
||||
3 117 101 115
|
||||
3 117 118 101
|
||||
3 114 119 116
|
||||
3 120 118 117
|
||||
3 121 118 120
|
||||
3 114 122 119
|
||||
3 123 118 121
|
||||
3 114 124 122
|
||||
3 125 118 123
|
||||
3 114 126 124
|
||||
3 127 118 125
|
||||
3 114 128 126
|
||||
3 127 129 118
|
||||
3 114 130 128
|
||||
3 131 129 127
|
||||
3 114 132 130
|
||||
3 133 129 131
|
||||
3 134 129 133
|
||||
3 114 135 132
|
||||
3 136 137 138
|
||||
3 136 139 137
|
||||
3 140 139 136
|
||||
3 140 141 139
|
||||
3 142 141 140
|
||||
3 142 143 141
|
||||
3 144 143 142
|
||||
3 144 145 143
|
||||
3 146 145 144
|
||||
3 146 147 145
|
||||
3 148 129 134
|
||||
3 149 147 146
|
||||
3 149 150 147
|
||||
3 149 151 150
|
||||
3 152 151 149
|
||||
3 114 153 135
|
||||
3 152 154 151
|
||||
3 155 154 152
|
||||
3 156 129 148
|
||||
3 156 157 129
|
||||
3 155 158 154
|
||||
3 159 158 155
|
||||
3 159 160 158
|
||||
3 161 153 114
|
||||
3 162 160 159
|
||||
3 163 157 156
|
||||
3 161 164 153
|
||||
3 162 165 160
|
||||
3 166 165 162
|
||||
3 166 167 165
|
||||
3 168 167 166
|
||||
3 169 157 163
|
||||
3 168 170 167
|
||||
3 171 170 168
|
||||
3 161 172 164
|
||||
3 173 170 171
|
||||
3 173 174 170
|
||||
3 175 157 169
|
||||
3 176 174 173
|
||||
3 176 177 174
|
||||
3 178 179 180
|
||||
3 181 177 176
|
||||
3 161 182 172
|
||||
3 178 183 179
|
||||
3 181 184 177
|
||||
3 185 184 181
|
||||
3 186 157 175
|
||||
3 187 183 178
|
||||
3 186 188 157
|
||||
3 187 189 183
|
||||
3 190 184 185
|
||||
3 190 191 184
|
||||
3 192 191 190
|
||||
3 161 193 182
|
||||
3 194 191 192
|
||||
3 195 191 194
|
||||
3 196 189 187
|
||||
3 197 188 186
|
||||
3 198 191 195
|
||||
3 199 191 198
|
||||
3 199 200 191
|
||||
3 201 200 199
|
||||
3 161 202 193
|
||||
3 203 200 201
|
||||
3 196 204 189
|
||||
3 205 200 203
|
||||
3 206 204 196
|
||||
3 207 200 205
|
||||
3 208 200 207
|
||||
3 208 209 200
|
||||
3 161 210 202
|
||||
3 211 188 197
|
||||
3 210 209 208
|
||||
3 161 209 210
|
||||
3 212 204 206
|
||||
3 161 213 209
|
||||
3 214 188 211
|
||||
3 212 215 204
|
||||
3 216 215 212
|
||||
3 161 217 213
|
||||
3 218 215 216
|
||||
3 219 188 214
|
||||
3 161 220 217
|
||||
3 219 221 188
|
||||
3 218 222 215
|
||||
3 223 222 218
|
||||
3 161 224 220
|
||||
3 225 221 219
|
||||
3 226 222 223
|
||||
3 161 227 224
|
||||
3 228 221 225
|
||||
3 229 227 161
|
||||
3 226 230 222
|
||||
3 231 230 226
|
||||
3 229 232 227
|
||||
3 233 221 228
|
||||
3 234 230 231
|
||||
3 229 235 232
|
||||
3 234 236 230
|
||||
3 229 237 235
|
||||
3 238 236 234
|
||||
3 239 221 233
|
||||
3 229 240 237
|
||||
3 239 241 221
|
||||
3 242 236 238
|
||||
3 239 243 241
|
||||
3 244 236 242
|
||||
3 245 243 239
|
||||
3 245 246 243
|
||||
3 247 236 244
|
||||
3 245 248 246
|
||||
3 249 236 247
|
||||
3 249 250 236
|
||||
3 245 251 248
|
||||
3 252 250 249
|
||||
3 229 253 240
|
||||
3 245 254 251
|
||||
3 255 250 252
|
||||
3 245 256 254
|
||||
3 257 250 255
|
||||
3 258 256 245
|
||||
3 258 259 256
|
||||
3 260 250 257
|
||||
3 258 261 259
|
||||
3 262 250 260
|
||||
3 229 263 253
|
||||
3 258 264 261
|
||||
3 265 250 262
|
||||
3 258 266 264
|
||||
3 267 250 265
|
||||
3 267 268 250
|
||||
3 258 269 266
|
||||
3 270 268 267
|
||||
3 258 271 269
|
||||
3 229 272 263
|
||||
3 273 271 258
|
||||
3 274 268 270
|
||||
3 273 275 271
|
||||
3 276 268 274
|
||||
3 273 277 275
|
||||
3 229 278 272
|
||||
3 279 268 276
|
||||
3 273 280 277
|
||||
3 281 268 279
|
||||
3 281 282 268
|
||||
3 273 283 280
|
||||
3 284 282 281
|
||||
3 229 285 278
|
||||
3 286 283 273
|
||||
3 286 287 283
|
||||
3 288 282 284
|
||||
3 286 289 287
|
||||
3 290 282 288
|
||||
3 229 291 285
|
||||
3 286 292 289
|
||||
3 293 282 290
|
||||
3 293 294 282
|
||||
3 286 295 292
|
||||
3 296 294 293
|
||||
3 229 297 291
|
||||
3 298 295 286
|
||||
3 296 299 294
|
||||
3 298 300 295
|
||||
3 301 299 296
|
||||
3 298 302 300
|
||||
3 303 299 301
|
||||
3 229 304 297
|
||||
3 298 305 302
|
||||
3 306 299 303
|
||||
3 298 307 305
|
||||
3 308 299 306
|
||||
3 229 309 304
|
||||
3 310 307 298
|
||||
3 229 311 309
|
||||
3 229 312 311
|
||||
3 313 307 310
|
||||
3 229 314 312
|
||||
3 313 315 307
|
||||
3 229 316 314
|
||||
3 317 316 229
|
||||
3 318 315 313
|
||||
3 317 319 316
|
||||
3 308 320 299
|
||||
3 317 321 319
|
||||
3 322 315 318
|
||||
3 322 323 315
|
||||
3 324 323 322
|
||||
3 325 320 308
|
||||
3 326 323 324
|
||||
3 326 327 323
|
||||
3 328 327 326
|
||||
3 325 329 320
|
||||
3 330 327 328
|
||||
3 330 331 327
|
||||
3 332 331 330
|
||||
3 317 333 321
|
||||
3 317 334 333
|
||||
3 317 335 334
|
||||
3 317 336 335
|
||||
3 317 337 336
|
||||
3 317 338 337
|
||||
3 317 339 338
|
||||
3 317 340 339
|
||||
3 317 341 340
|
||||
3 317 342 341
|
||||
3 317 343 342
|
||||
3 317 332 343
|
||||
3 317 331 332
|
||||
3 317 344 331
|
||||
3 325 345 329
|
||||
3 346 345 325
|
||||
3 317 347 344
|
||||
3 317 348 347
|
||||
3 346 349 345
|
||||
3 350 348 317
|
||||
3 350 351 348
|
||||
3 352 349 346
|
||||
3 352 353 349
|
||||
3 350 354 351
|
||||
3 350 355 354
|
||||
3 352 356 353
|
||||
3 357 356 352
|
||||
3 350 358 355
|
||||
3 357 359 356
|
||||
3 350 360 358
|
||||
3 357 361 359
|
||||
3 362 361 357
|
||||
3 362 363 361
|
||||
3 364 360 350
|
||||
3 362 365 363
|
||||
3 366 367 368
|
||||
3 369 367 366
|
||||
3 370 367 369
|
||||
3 370 371 367
|
||||
3 372 371 370
|
||||
3 373 371 372
|
||||
3 362 374 365
|
||||
3 375 374 362
|
||||
3 376 371 373
|
||||
3 377 371 376
|
||||
3 378 371 377
|
||||
3 379 371 378
|
||||
3 380 371 379
|
||||
3 381 371 380
|
||||
3 374 371 381
|
||||
3 375 371 374
|
||||
3 375 382 371
|
||||
3 375 383 382
|
||||
3 375 384 383
|
||||
3 375 385 384
|
||||
3 386 385 375
|
||||
3 386 387 385
|
||||
3 386 388 387
|
||||
3 389 388 386
|
||||
3 389 390 388
|
||||
3 389 391 390
|
||||
3 389 392 391
|
||||
3 393 392 389
|
||||
3 393 394 392
|
||||
3 393 395 394
|
||||
3 396 360 364
|
||||
3 393 397 395
|
||||
3 393 398 397
|
||||
3 393 399 398
|
||||
3 400 399 393
|
||||
3 400 401 399
|
||||
3 400 402 401
|
||||
3 400 403 402
|
||||
3 400 404 403
|
||||
3 405 404 400
|
||||
3 405 406 404
|
||||
3 405 407 406
|
||||
3 405 408 407
|
||||
3 396 409 360
|
||||
3 396 410 409
|
||||
3 396 411 410
|
||||
3 396 412 411
|
||||
3 396 413 412
|
||||
3 396 414 413
|
||||
3 396 415 414
|
||||
3 396 416 415
|
||||
3 396 417 416
|
||||
3 396 418 417
|
||||
3 396 419 418
|
||||
3 396 420 419
|
||||
3 396 421 420
|
||||
3 396 422 421
|
||||
3 396 423 422
|
||||
3 396 424 423
|
||||
3 396 425 424
|
||||
3 396 426 425
|
||||
3 427 426 396
|
||||
3 427 428 426
|
||||
3 427 429 428
|
||||
3 427 430 429
|
||||
3 427 431 430
|
||||
3 427 432 431
|
||||
3 427 433 432
|
||||
3 427 434 433
|
||||
3 427 435 434
|
||||
3 427 436 435
|
||||
3 427 437 436
|
||||
3 427 438 437
|
||||
3 427 439 438
|
||||
3 427 440 439
|
||||
3 427 441 440
|
||||
3 427 442 441
|
||||
3 443 442 427
|
||||
3 443 444 442
|
||||
3 443 445 444
|
||||
3 443 446 445
|
||||
3 443 447 446
|
||||
3 443 448 447
|
||||
3 443 449 448
|
||||
3 443 450 449
|
||||
3 451 450 443
|
||||
3 451 452 450
|
||||
3 453 452 451
|
||||
3 453 454 452
|
||||
3 455 454 453
|
||||
3 455 456 454
|
||||
3 457 456 455
|
||||
3 457 458 456
|
||||
3 459 458 457
|
||||
3 459 460 458
|
||||
3 461 460 459
|
||||
3 461 462 460
|
||||
3 463 462 461
|
||||
3 463 464 462
|
||||
3 465 464 463
|
||||
3 465 466 464
|
||||
3 467 466 465
|
||||
3 467 468 466
|
||||
3 469 468 467
|
||||
648
rsc/mesh/icon_group_vimix.ply
Normal file
648
rsc/mesh/icon_group_vimix.ply
Normal file
@@ -0,0 +1,648 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.91.2 - www.blender.org
|
||||
element vertex 320
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
element face 318
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-0.075364 0.080724 0.001667
|
||||
0.096283 0.097068 0.001667
|
||||
-0.075364 0.097068 0.001667
|
||||
0.079936 0.080724 0.001667
|
||||
0.096283 -0.074543 0.001667
|
||||
0.079936 -0.074543 0.001667
|
||||
-0.099885 -0.099059 0.001667
|
||||
-0.083538 0.048037 0.001667
|
||||
-0.099885 0.064381 0.001667
|
||||
0.063589 0.064381 0.001667
|
||||
0.047241 0.048037 0.001667
|
||||
0.063589 -0.099059 0.001667
|
||||
-0.083538 -0.082715 0.001667
|
||||
0.047241 -0.082715 0.001667
|
||||
0.002248 0.021272 0.001667
|
||||
0.005256 0.021354 0.001667
|
||||
0.004134 0.021399 0.001667
|
||||
0.006351 0.021220 0.001667
|
||||
0.000438 0.020903 0.001667
|
||||
0.007418 0.021002 0.001667
|
||||
0.008452 0.020704 0.001667
|
||||
-0.001277 0.020307 0.001667
|
||||
0.009452 0.020328 0.001667
|
||||
0.010412 0.019878 0.001667
|
||||
-0.002882 0.019501 0.001667
|
||||
0.011331 0.019358 0.001667
|
||||
-0.004361 0.018503 0.001667
|
||||
0.012206 0.018773 0.001667
|
||||
0.013032 0.018124 0.001667
|
||||
-0.005696 0.017328 0.001667
|
||||
0.013808 0.017417 0.001667
|
||||
0.014529 0.016654 0.001667
|
||||
-0.006871 0.015993 0.001667
|
||||
0.015193 0.015839 0.001667
|
||||
-0.007870 0.014515 0.001667
|
||||
0.018036 0.015840 0.001667
|
||||
0.020300 0.015738 0.001667
|
||||
0.018036 0.015840 0.001667
|
||||
0.018036 0.015840 0.001667
|
||||
0.018036 0.015840 0.001667
|
||||
0.018036 0.015840 0.001667
|
||||
0.018036 0.015840 0.001667
|
||||
0.018036 0.015840 0.001667
|
||||
0.018036 0.015840 0.001667
|
||||
0.018036 0.015839 0.001667
|
||||
0.018036 0.015839 0.001667
|
||||
0.018036 0.015839 0.001667
|
||||
0.018036 0.015839 0.001667
|
||||
0.018036 0.015839 0.001667
|
||||
0.022471 0.015443 0.001667
|
||||
0.024530 0.014966 0.001667
|
||||
0.026456 0.014322 0.001667
|
||||
-0.008676 0.012910 0.001667
|
||||
0.028230 0.013523 0.001667
|
||||
0.029832 0.012583 0.001667
|
||||
-0.009271 0.011195 0.001667
|
||||
0.004134 0.011670 0.001667
|
||||
0.031243 0.011515 0.001667
|
||||
0.003568 0.011632 0.001667
|
||||
0.004700 0.011632 0.001667
|
||||
0.003026 0.011521 0.001667
|
||||
0.005242 0.011521 0.001667
|
||||
0.002511 0.011342 0.001667
|
||||
0.005757 0.011342 0.001667
|
||||
0.032441 0.010333 0.001667
|
||||
0.002029 0.011101 0.001667
|
||||
0.006239 0.011101 0.001667
|
||||
-0.009641 0.009386 0.001667
|
||||
0.001586 0.010801 0.001667
|
||||
0.006682 0.010801 0.001667
|
||||
0.001185 0.010449 0.001667
|
||||
0.007083 0.010449 0.001667
|
||||
0.000833 0.010048 0.001667
|
||||
0.007435 0.010048 0.001667
|
||||
0.033408 0.009049 0.001667
|
||||
0.000533 0.009605 0.001667
|
||||
0.007735 0.009605 0.001667
|
||||
0.000291 0.009123 0.001667
|
||||
0.007977 0.009123 0.001667
|
||||
-0.009768 0.007500 0.001667
|
||||
0.000112 0.008609 0.001667
|
||||
0.008156 0.008609 0.001667
|
||||
0.034123 0.007677 0.001667
|
||||
0.000001 0.008066 0.001667
|
||||
0.008267 0.008066 0.001667
|
||||
-0.000037 0.007500 0.001667
|
||||
0.008305 0.007500 0.001667
|
||||
0.034566 0.006229 0.001667
|
||||
-0.009768 0.007428 0.001667
|
||||
0.000001 0.006934 0.001667
|
||||
0.008267 0.006934 0.001667
|
||||
-0.009768 0.007230 0.001667
|
||||
-0.009768 0.006930 0.001667
|
||||
0.008156 0.006392 0.001667
|
||||
0.000112 0.006392 0.001667
|
||||
-0.009768 0.006555 0.001667
|
||||
-0.009768 0.006129 0.001667
|
||||
0.007977 0.005877 0.001667
|
||||
0.000291 0.005877 0.001667
|
||||
0.034719 0.004720 0.001667
|
||||
-0.009768 0.005677 0.001667
|
||||
0.007735 0.005396 0.001667
|
||||
0.000533 0.005396 0.001667
|
||||
-0.009768 0.005226 0.001667
|
||||
0.007435 0.004952 0.001667
|
||||
0.000833 0.004952 0.001667
|
||||
-0.009768 0.004800 0.001667
|
||||
0.007083 0.004552 0.001667
|
||||
0.001185 0.004552 0.001667
|
||||
-0.009768 0.004424 0.001667
|
||||
0.018036 0.001941 0.001667
|
||||
0.006682 0.004199 0.001667
|
||||
0.001586 0.004199 0.001667
|
||||
-0.009768 0.004125 0.001667
|
||||
0.006239 0.003900 0.001667
|
||||
0.002029 0.003900 0.001667
|
||||
-0.009768 0.003927 0.001667
|
||||
-0.009768 0.003855 0.001667
|
||||
0.005757 0.003658 0.001667
|
||||
0.002511 0.003658 0.001667
|
||||
-0.074397 -0.046979 0.001667
|
||||
0.005242 0.003479 0.001667
|
||||
0.003026 0.003479 0.001667
|
||||
0.004700 0.003368 0.001667
|
||||
0.003568 0.003368 0.001667
|
||||
0.004134 0.003330 0.001667
|
||||
0.018036 0.001667 0.001667
|
||||
0.018036 0.000911 0.001667
|
||||
0.018036 -0.000231 0.001667
|
||||
0.018036 -0.001663 0.001667
|
||||
0.018036 -0.003288 0.001667
|
||||
0.018036 -0.005009 0.001667
|
||||
0.018036 -0.006730 0.001667
|
||||
0.018036 -0.008355 0.001667
|
||||
0.018036 -0.009787 0.001667
|
||||
0.018036 -0.010929 0.001667
|
||||
0.018036 -0.011685 0.001667
|
||||
0.018036 -0.011959 0.001667
|
||||
0.017829 -0.015695 0.001667
|
||||
0.017222 -0.019311 0.001667
|
||||
0.016238 -0.022783 0.001667
|
||||
0.014898 -0.026090 0.001667
|
||||
0.013226 -0.029209 0.001667
|
||||
0.011243 -0.032119 0.001667
|
||||
0.008971 -0.034798 0.001667
|
||||
0.006432 -0.037223 0.001667
|
||||
0.003650 -0.039373 0.001667
|
||||
0.000646 -0.041226 0.001667
|
||||
-0.047778 -0.045317 0.001667
|
||||
-0.002558 -0.042759 0.001667
|
||||
-0.005940 -0.043951 0.001667
|
||||
-0.005799 -0.044332 0.001667
|
||||
-0.014345 -0.045266 0.001667
|
||||
-0.005409 -0.045386 0.001667
|
||||
-0.014428 -0.045269 0.001667
|
||||
-0.014193 -0.045678 0.001667
|
||||
-0.014510 -0.045274 0.001667
|
||||
-0.014592 -0.045279 0.001667
|
||||
-0.014673 -0.045284 0.001667
|
||||
-0.014755 -0.045290 0.001667
|
||||
-0.014836 -0.045295 0.001667
|
||||
-0.014918 -0.045301 0.001667
|
||||
-0.015000 -0.045306 0.001667
|
||||
-0.015082 -0.045310 0.001667
|
||||
-0.015164 -0.045314 0.001667
|
||||
-0.015246 -0.045316 0.001667
|
||||
-0.015329 -0.045317 0.001667
|
||||
-0.048194 -0.045525 0.001667
|
||||
-0.031010 -0.045317 0.001667
|
||||
-0.023293 -0.066183 0.001667
|
||||
-0.022117 -0.045317 0.001667
|
||||
-0.021986 -0.045671 0.001667
|
||||
-0.004820 -0.046979 0.001667
|
||||
-0.049343 -0.046099 0.001667
|
||||
-0.021623 -0.046651 0.001667
|
||||
-0.013772 -0.046815 0.001667
|
||||
-0.051078 -0.046967 0.001667
|
||||
-0.021076 -0.048131 0.001667
|
||||
-0.013137 -0.048534 0.001667
|
||||
-0.053254 -0.048054 0.001667
|
||||
-0.004082 -0.048975 0.001667
|
||||
-0.074558 -0.047105 0.001667
|
||||
-0.074713 -0.047236 0.001667
|
||||
-0.074863 -0.047373 0.001667
|
||||
-0.075007 -0.047515 0.001667
|
||||
-0.075145 -0.047663 0.001667
|
||||
-0.075278 -0.047815 0.001667
|
||||
-0.075405 -0.047973 0.001667
|
||||
-0.075525 -0.048136 0.001667
|
||||
-0.055723 -0.049288 0.001667
|
||||
-0.020390 -0.049987 0.001667
|
||||
-0.075640 -0.048303 0.001667
|
||||
-0.075747 -0.048475 0.001667
|
||||
-0.075849 -0.048651 0.001667
|
||||
-0.012340 -0.050688 0.001667
|
||||
-0.075943 -0.048831 0.001667
|
||||
-0.076031 -0.049015 0.001667
|
||||
-0.003244 -0.051240 0.001667
|
||||
-0.076111 -0.049202 0.001667
|
||||
-0.076184 -0.049391 0.001667
|
||||
-0.058338 -0.050596 0.001667
|
||||
-0.076249 -0.049583 0.001667
|
||||
-0.076307 -0.049777 0.001667
|
||||
-0.076357 -0.049973 0.001667
|
||||
-0.076400 -0.050171 0.001667
|
||||
-0.019611 -0.052093 0.001667
|
||||
-0.076435 -0.050370 0.001667
|
||||
-0.076463 -0.050571 0.001667
|
||||
-0.076482 -0.050773 0.001667
|
||||
-0.060954 -0.051903 0.001667
|
||||
-0.011436 -0.053133 0.001667
|
||||
-0.076494 -0.050975 0.001667
|
||||
-0.076498 -0.051179 0.001667
|
||||
-0.076415 -0.052124 0.001667
|
||||
-0.002357 -0.053640 0.001667
|
||||
-0.063423 -0.053138 0.001667
|
||||
-0.018786 -0.054323 0.001667
|
||||
-0.076178 -0.053003 0.001667
|
||||
-0.075802 -0.053804 0.001667
|
||||
-0.010478 -0.055724 0.001667
|
||||
-0.065599 -0.054225 0.001667
|
||||
-0.001469 -0.056039 0.001667
|
||||
-0.075304 -0.054518 0.001667
|
||||
-0.067334 -0.055093 0.001667
|
||||
-0.017961 -0.056554 0.001667
|
||||
-0.074700 -0.055135 0.001667
|
||||
-0.068483 -0.055667 0.001667
|
||||
-0.074008 -0.055644 0.001667
|
||||
-0.073242 -0.056036 0.001667
|
||||
-0.068899 -0.055875 0.001667
|
||||
-0.009520 -0.058314 0.001667
|
||||
-0.069782 -0.056223 0.001667
|
||||
-0.072421 -0.056300 0.001667
|
||||
-0.000631 -0.058304 0.001667
|
||||
-0.070674 -0.056404 0.001667
|
||||
-0.071559 -0.056426 0.001667
|
||||
-0.017183 -0.058660 0.001667
|
||||
0.000107 -0.060300 0.001667
|
||||
-0.008616 -0.060759 0.001667
|
||||
-0.016497 -0.060516 0.001667
|
||||
0.000696 -0.061893 0.001667
|
||||
-0.015949 -0.061996 0.001667
|
||||
-0.007819 -0.062913 0.001667
|
||||
0.001086 -0.062947 0.001667
|
||||
-0.015587 -0.062976 0.001667
|
||||
-0.007184 -0.064632 0.001667
|
||||
0.001227 -0.063328 0.001667
|
||||
-0.015456 -0.063330 0.001667
|
||||
0.001306 -0.063600 0.001667
|
||||
-0.015377 -0.063602 0.001667
|
||||
0.001347 -0.063874 0.001667
|
||||
-0.015336 -0.063876 0.001667
|
||||
0.001351 -0.064147 0.001667
|
||||
-0.015332 -0.064149 0.001667
|
||||
0.001320 -0.064414 0.001667
|
||||
-0.015363 -0.064416 0.001667
|
||||
0.001255 -0.064674 0.001667
|
||||
-0.015428 -0.064676 0.001667
|
||||
-0.006763 -0.065769 0.001667
|
||||
0.001158 -0.064922 0.001667
|
||||
-0.015525 -0.064924 0.001667
|
||||
0.001030 -0.065156 0.001667
|
||||
-0.015653 -0.065158 0.001667
|
||||
0.000873 -0.065373 0.001667
|
||||
-0.015810 -0.065375 0.001667
|
||||
0.000688 -0.065568 0.001667
|
||||
-0.015995 -0.065571 0.001667
|
||||
0.000476 -0.065740 0.001667
|
||||
-0.016206 -0.065742 0.001667
|
||||
0.000240 -0.065885 0.001667
|
||||
-0.016442 -0.065887 0.001667
|
||||
-0.006611 -0.066181 0.001667
|
||||
-0.000019 -0.066000 0.001667
|
||||
-0.016702 -0.066002 0.001667
|
||||
-0.000096 -0.066028 0.001667
|
||||
-0.016779 -0.066030 0.001667
|
||||
-0.000310 -0.066106 0.001667
|
||||
-0.016992 -0.066108 0.001667
|
||||
-0.000632 -0.066223 0.001667
|
||||
-0.017314 -0.066225 0.001667
|
||||
-0.006496 -0.066440 0.001667
|
||||
-0.023178 -0.066442 0.001667
|
||||
-0.001035 -0.066370 0.001667
|
||||
-0.017718 -0.066372 0.001667
|
||||
-0.001493 -0.066537 0.001667
|
||||
-0.018176 -0.066539 0.001667
|
||||
-0.006351 -0.066676 0.001667
|
||||
-0.023033 -0.066678 0.001667
|
||||
-0.001979 -0.066713 0.001667
|
||||
-0.018661 -0.066715 0.001667
|
||||
-0.006179 -0.066888 0.001667
|
||||
-0.022861 -0.066890 0.001667
|
||||
-0.002464 -0.066890 0.001667
|
||||
-0.019146 -0.066892 0.001667
|
||||
-0.005983 -0.067073 0.001667
|
||||
-0.022665 -0.067075 0.001667
|
||||
-0.002922 -0.067057 0.001667
|
||||
-0.019604 -0.067059 0.001667
|
||||
-0.003326 -0.067204 0.001667
|
||||
-0.020008 -0.067206 0.001667
|
||||
-0.005766 -0.067230 0.001667
|
||||
-0.022449 -0.067232 0.001667
|
||||
-0.003648 -0.067321 0.001667
|
||||
-0.020330 -0.067323 0.001667
|
||||
-0.005532 -0.067358 0.001667
|
||||
-0.022215 -0.067360 0.001667
|
||||
-0.003861 -0.067399 0.001667
|
||||
-0.020543 -0.067401 0.001667
|
||||
-0.005284 -0.067455 0.001667
|
||||
-0.021966 -0.067457 0.001667
|
||||
-0.003938 -0.067427 0.001667
|
||||
-0.020620 -0.067429 0.001667
|
||||
-0.004210 -0.067506 0.001667
|
||||
-0.020893 -0.067508 0.001667
|
||||
-0.005024 -0.067519 0.001667
|
||||
-0.021707 -0.067521 0.001667
|
||||
-0.004484 -0.067546 0.001667
|
||||
-0.021167 -0.067548 0.001667
|
||||
-0.004757 -0.067551 0.001667
|
||||
-0.021439 -0.067553 0.001667
|
||||
3 0 1 2
|
||||
3 0 3 1
|
||||
3 3 4 1
|
||||
3 5 4 3
|
||||
3 6 7 8
|
||||
3 7 9 8
|
||||
3 7 10 9
|
||||
3 10 11 9
|
||||
3 6 12 7
|
||||
3 13 11 10
|
||||
3 6 13 12
|
||||
3 6 11 13
|
||||
3 14 15 16
|
||||
3 14 17 15
|
||||
3 18 17 14
|
||||
3 18 19 17
|
||||
3 18 20 19
|
||||
3 21 20 18
|
||||
3 21 22 20
|
||||
3 21 23 22
|
||||
3 24 23 21
|
||||
3 24 25 23
|
||||
3 26 25 24
|
||||
3 26 27 25
|
||||
3 26 28 27
|
||||
3 29 28 26
|
||||
3 29 30 28
|
||||
3 29 31 30
|
||||
3 32 31 29
|
||||
3 32 33 31
|
||||
3 34 33 32
|
||||
3 35 36 37
|
||||
3 38 36 35
|
||||
3 39 36 38
|
||||
3 40 36 39
|
||||
3 41 36 40
|
||||
3 42 36 41
|
||||
3 43 36 42
|
||||
3 44 36 43
|
||||
3 45 36 44
|
||||
3 46 36 45
|
||||
3 47 36 46
|
||||
3 48 36 47
|
||||
3 34 48 33
|
||||
3 34 36 48
|
||||
3 34 49 36
|
||||
3 34 50 49
|
||||
3 34 51 50
|
||||
3 52 51 34
|
||||
3 52 53 51
|
||||
3 52 54 53
|
||||
3 55 54 52
|
||||
3 55 56 54
|
||||
3 56 57 54
|
||||
3 55 58 56
|
||||
3 59 57 56
|
||||
3 55 60 58
|
||||
3 61 57 59
|
||||
3 55 62 60
|
||||
3 63 57 61
|
||||
3 63 64 57
|
||||
3 55 65 62
|
||||
3 66 64 63
|
||||
3 67 65 55
|
||||
3 67 68 65
|
||||
3 69 64 66
|
||||
3 67 70 68
|
||||
3 71 64 69
|
||||
3 67 72 70
|
||||
3 73 64 71
|
||||
3 73 74 64
|
||||
3 67 75 72
|
||||
3 76 74 73
|
||||
3 67 77 75
|
||||
3 78 74 76
|
||||
3 79 77 67
|
||||
3 79 80 77
|
||||
3 81 74 78
|
||||
3 81 82 74
|
||||
3 79 83 80
|
||||
3 84 82 81
|
||||
3 79 85 83
|
||||
3 86 82 84
|
||||
3 86 87 82
|
||||
3 88 85 79
|
||||
3 88 89 85
|
||||
3 90 87 86
|
||||
3 91 89 88
|
||||
3 92 89 91
|
||||
3 93 87 90
|
||||
3 92 94 89
|
||||
3 95 94 92
|
||||
3 96 94 95
|
||||
3 97 87 93
|
||||
3 96 98 94
|
||||
3 97 99 87
|
||||
3 100 98 96
|
||||
3 101 99 97
|
||||
3 100 102 98
|
||||
3 103 102 100
|
||||
3 104 99 101
|
||||
3 103 105 102
|
||||
3 106 105 103
|
||||
3 107 99 104
|
||||
3 106 108 105
|
||||
3 109 108 106
|
||||
3 107 110 99
|
||||
3 111 110 107
|
||||
3 109 112 108
|
||||
3 113 112 109
|
||||
3 114 110 111
|
||||
3 113 115 112
|
||||
3 116 115 113
|
||||
3 117 115 116
|
||||
3 118 110 114
|
||||
3 117 119 115
|
||||
3 120 119 117
|
||||
3 121 110 118
|
||||
3 120 122 119
|
||||
3 123 110 121
|
||||
3 120 124 122
|
||||
3 125 110 123
|
||||
3 120 125 124
|
||||
3 120 110 125
|
||||
3 120 126 110
|
||||
3 120 127 126
|
||||
3 120 128 127
|
||||
3 120 129 128
|
||||
3 120 130 129
|
||||
3 120 131 130
|
||||
3 120 132 131
|
||||
3 120 133 132
|
||||
3 120 134 133
|
||||
3 120 135 134
|
||||
3 120 136 135
|
||||
3 120 137 136
|
||||
3 120 138 137
|
||||
3 120 139 138
|
||||
3 120 140 139
|
||||
3 120 141 140
|
||||
3 120 142 141
|
||||
3 120 143 142
|
||||
3 120 144 143
|
||||
3 120 145 144
|
||||
3 120 146 145
|
||||
3 120 147 146
|
||||
3 120 148 147
|
||||
3 148 149 147
|
||||
3 148 150 149
|
||||
3 148 151 150
|
||||
3 148 152 151
|
||||
3 152 153 151
|
||||
3 148 154 152
|
||||
3 155 153 152
|
||||
3 148 156 154
|
||||
3 148 157 156
|
||||
3 148 158 157
|
||||
3 148 159 158
|
||||
3 148 160 159
|
||||
3 148 161 160
|
||||
3 148 162 161
|
||||
3 148 163 162
|
||||
3 148 164 163
|
||||
3 148 165 164
|
||||
3 148 166 165
|
||||
3 120 167 148
|
||||
3 168 166 148
|
||||
3 169 170 168
|
||||
3 170 166 168
|
||||
3 169 171 170
|
||||
3 155 172 153
|
||||
3 120 173 167
|
||||
3 169 174 171
|
||||
3 175 172 155
|
||||
3 120 176 173
|
||||
3 169 177 174
|
||||
3 178 172 175
|
||||
3 120 179 176
|
||||
3 178 180 172
|
||||
3 181 179 120
|
||||
3 182 179 181
|
||||
3 183 179 182
|
||||
3 184 179 183
|
||||
3 185 179 184
|
||||
3 186 179 185
|
||||
3 187 179 186
|
||||
3 188 179 187
|
||||
3 188 189 179
|
||||
3 169 190 177
|
||||
3 191 189 188
|
||||
3 192 189 191
|
||||
3 193 189 192
|
||||
3 194 180 178
|
||||
3 195 189 193
|
||||
3 196 189 195
|
||||
3 194 197 180
|
||||
3 198 189 196
|
||||
3 199 189 198
|
||||
3 199 200 189
|
||||
3 201 200 199
|
||||
3 202 200 201
|
||||
3 203 200 202
|
||||
3 204 200 203
|
||||
3 169 205 190
|
||||
3 206 200 204
|
||||
3 207 200 206
|
||||
3 208 200 207
|
||||
3 208 209 200
|
||||
3 210 197 194
|
||||
3 211 209 208
|
||||
3 212 209 211
|
||||
3 213 209 212
|
||||
3 210 214 197
|
||||
3 213 215 209
|
||||
3 169 216 205
|
||||
3 217 215 213
|
||||
3 218 215 217
|
||||
3 219 214 210
|
||||
3 218 220 215
|
||||
3 219 221 214
|
||||
3 222 220 218
|
||||
3 222 223 220
|
||||
3 169 224 216
|
||||
3 225 223 222
|
||||
3 225 226 223
|
||||
3 227 226 225
|
||||
3 228 226 227
|
||||
3 228 229 226
|
||||
3 230 221 219
|
||||
3 228 231 229
|
||||
3 232 231 228
|
||||
3 230 233 221
|
||||
3 232 234 231
|
||||
3 235 234 232
|
||||
3 169 236 224
|
||||
3 230 237 233
|
||||
3 238 237 230
|
||||
3 169 239 236
|
||||
3 238 240 237
|
||||
3 169 241 239
|
||||
3 242 240 238
|
||||
3 242 243 240
|
||||
3 169 244 241
|
||||
3 245 243 242
|
||||
3 245 246 243
|
||||
3 169 247 244
|
||||
3 245 248 246
|
||||
3 169 249 247
|
||||
3 245 250 248
|
||||
3 169 251 249
|
||||
3 245 252 250
|
||||
3 169 253 251
|
||||
3 245 254 252
|
||||
3 169 255 253
|
||||
3 245 256 254
|
||||
3 169 257 255
|
||||
3 258 256 245
|
||||
3 258 259 256
|
||||
3 169 260 257
|
||||
3 258 261 259
|
||||
3 169 262 260
|
||||
3 258 263 261
|
||||
3 169 264 262
|
||||
3 258 265 263
|
||||
3 169 266 264
|
||||
3 258 267 265
|
||||
3 169 268 266
|
||||
3 258 269 267
|
||||
3 169 270 268
|
||||
3 271 269 258
|
||||
3 271 272 269
|
||||
3 169 273 270
|
||||
3 271 274 272
|
||||
3 169 275 273
|
||||
3 271 276 274
|
||||
3 169 277 275
|
||||
3 271 278 276
|
||||
3 169 279 277
|
||||
3 280 278 271
|
||||
3 281 279 169
|
||||
3 280 282 278
|
||||
3 281 283 279
|
||||
3 280 284 282
|
||||
3 281 285 283
|
||||
3 286 284 280
|
||||
3 287 285 281
|
||||
3 286 288 284
|
||||
3 287 289 285
|
||||
3 290 288 286
|
||||
3 291 289 287
|
||||
3 290 292 288
|
||||
3 291 293 289
|
||||
3 294 292 290
|
||||
3 295 293 291
|
||||
3 294 296 292
|
||||
3 295 297 293
|
||||
3 294 298 296
|
||||
3 295 299 297
|
||||
3 300 298 294
|
||||
3 301 299 295
|
||||
3 300 302 298
|
||||
3 301 303 299
|
||||
3 304 302 300
|
||||
3 305 303 301
|
||||
3 304 306 302
|
||||
3 305 307 303
|
||||
3 308 306 304
|
||||
3 309 307 305
|
||||
3 308 310 306
|
||||
3 309 311 307
|
||||
3 308 312 310
|
||||
3 309 313 311
|
||||
3 314 312 308
|
||||
3 315 313 309
|
||||
3 314 316 312
|
||||
3 315 317 313
|
||||
3 318 316 314
|
||||
3 319 317 315
|
||||
@@ -1,6 +1,6 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.90.0 - www.blender.org
|
||||
comment Created by Blender 2.91.2 - www.blender.org
|
||||
element vertex 183
|
||||
property float x
|
||||
property float y
|
||||
@@ -8,189 +8,189 @@ property float z
|
||||
element face 187
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-0.009432 0.094246 0.000000
|
||||
0.003738 0.094295 0.000000
|
||||
-0.002850 0.094717 0.000000
|
||||
0.010061 0.093020 0.000000
|
||||
-0.015738 0.092918 0.000000
|
||||
0.016061 0.090949 0.000000
|
||||
-0.021711 0.090794 0.000000
|
||||
0.021679 0.088143 0.000000
|
||||
-0.027296 0.087934 0.000000
|
||||
0.026855 0.084659 0.000000
|
||||
-0.032435 0.084398 0.000000
|
||||
0.031532 0.080557 0.000000
|
||||
-0.037073 0.080246 0.000000
|
||||
0.035651 0.075894 0.000000
|
||||
-0.041152 0.075537 0.000000
|
||||
0.039152 0.070729 0.000000
|
||||
-0.044616 0.070332 0.000000
|
||||
-0.002914 0.069195 0.000000
|
||||
0.000224 0.069013 0.000000
|
||||
0.041977 0.065121 0.000000
|
||||
-0.047408 0.064691 0.000000
|
||||
-0.006016 0.068952 0.000000
|
||||
0.003236 0.068422 0.000000
|
||||
-0.008987 0.068306 0.000000
|
||||
0.006096 0.067450 0.000000
|
||||
-0.011800 0.067284 0.000000
|
||||
0.008773 0.066126 0.000000
|
||||
-0.014428 0.065917 0.000000
|
||||
0.011241 0.064477 0.000000
|
||||
-0.016847 0.064231 0.000000
|
||||
0.044068 0.059129 0.000000
|
||||
-0.049473 0.058673 0.000000
|
||||
0.013472 0.062532 0.000000
|
||||
-0.019028 0.062257 0.000000
|
||||
0.015436 0.060319 0.000000
|
||||
-0.020946 0.060022 0.000000
|
||||
0.017106 0.057867 0.000000
|
||||
-0.022575 0.057555 0.000000
|
||||
0.045366 0.052811 0.000000
|
||||
-0.050753 0.052338 0.000000
|
||||
0.018454 0.055203 0.000000
|
||||
-0.023887 0.054884 0.000000
|
||||
0.019452 0.052356 0.000000
|
||||
-0.024857 0.052039 0.000000
|
||||
0.045811 0.046226 0.000000
|
||||
0.020071 0.049354 0.000000
|
||||
-0.051192 0.045747 0.000000
|
||||
-0.025459 0.049048 0.000000
|
||||
0.020284 0.046226 0.000000
|
||||
-0.025665 0.045939 0.000000
|
||||
0.020284 0.045572 0.000000
|
||||
0.045811 0.045572 0.000000
|
||||
-0.025665 0.013047 0.000000
|
||||
-0.051192 0.045104 0.000000
|
||||
0.020284 0.043764 0.000000
|
||||
0.045811 0.043764 0.000000
|
||||
-0.051192 0.043325 0.000000
|
||||
0.020284 0.041034 0.000000
|
||||
0.045811 0.041034 0.000000
|
||||
-0.051192 0.040638 0.000000
|
||||
0.020284 0.037611 0.000000
|
||||
0.045811 0.037611 0.000000
|
||||
-0.051192 0.037269 0.000000
|
||||
0.020284 0.033727 0.000000
|
||||
0.045811 0.033727 0.000000
|
||||
-0.051192 0.033447 0.000000
|
||||
0.020284 0.029612 0.000000
|
||||
0.045811 0.029612 0.000000
|
||||
-0.051192 0.029397 0.000000
|
||||
0.020284 0.025496 0.000000
|
||||
0.045811 0.025496 0.000000
|
||||
-0.051192 0.025348 0.000000
|
||||
0.020284 0.021612 0.000000
|
||||
0.045811 0.021612 0.000000
|
||||
-0.051192 0.021525 0.000000
|
||||
0.020284 0.018189 0.000000
|
||||
0.045811 0.018189 0.000000
|
||||
-0.051192 0.018157 0.000000
|
||||
0.020284 0.015459 0.000000
|
||||
0.045811 0.015459 0.000000
|
||||
-0.051192 0.015469 0.000000
|
||||
-0.051192 0.013691 0.000000
|
||||
0.020284 0.013651 0.000000
|
||||
0.045811 0.013651 0.000000
|
||||
-0.051192 0.013047 0.000000
|
||||
0.020284 0.012997 0.000000
|
||||
0.021859 0.012998 0.000000
|
||||
0.023659 0.012999 0.000000
|
||||
0.045811 0.012997 0.000000
|
||||
-0.060928 0.012907 0.000000
|
||||
-0.058851 0.013047 0.000000
|
||||
0.053470 0.013047 0.000000
|
||||
0.025647 0.012998 0.000000
|
||||
0.027786 0.012997 0.000000
|
||||
0.055547 0.012907 0.000000
|
||||
0.043820 0.012995 0.000000
|
||||
0.030038 0.012996 0.000000
|
||||
0.032366 0.012995 0.000000
|
||||
0.034731 0.012994 0.000000
|
||||
0.041679 0.012994 0.000000
|
||||
0.037097 0.012993 0.000000
|
||||
0.039425 0.012993 0.000000
|
||||
-0.062921 0.012500 0.000000
|
||||
0.057540 0.012500 0.000000
|
||||
-0.064811 0.011843 0.000000
|
||||
0.059430 0.011843 0.000000
|
||||
-0.066580 0.010956 0.000000
|
||||
0.061199 0.010956 0.000000
|
||||
-0.068209 0.009856 0.000000
|
||||
0.062828 0.009856 0.000000
|
||||
-0.069680 0.008561 0.000000
|
||||
0.064299 0.008561 0.000000
|
||||
-0.070975 0.007090 0.000000
|
||||
0.065594 0.007090 0.000000
|
||||
-0.072075 0.005461 0.000000
|
||||
0.066694 0.005461 0.000000
|
||||
-0.072963 0.003693 0.000000
|
||||
0.067582 0.003693 0.000000
|
||||
-0.073620 0.001804 0.000000
|
||||
0.068239 0.001804 0.000000
|
||||
-0.074027 -0.000189 0.000000
|
||||
0.068646 -0.000189 0.000000
|
||||
-0.074167 -0.002266 0.000000
|
||||
0.068786 -0.002266 0.000000
|
||||
-0.074167 -0.003270 0.000000
|
||||
0.068786 -0.003270 0.000000
|
||||
-0.074167 -0.006047 0.000000
|
||||
0.068786 -0.006047 0.000000
|
||||
-0.074167 -0.010242 0.000000
|
||||
0.068786 -0.010242 0.000000
|
||||
-0.074167 -0.015500 0.000000
|
||||
0.068786 -0.015500 0.000000
|
||||
-0.074167 -0.021467 0.000000
|
||||
0.068786 -0.021467 0.000000
|
||||
-0.074167 -0.027788 0.000000
|
||||
0.068786 -0.027788 0.000000
|
||||
-0.074167 -0.034109 0.000000
|
||||
0.068786 -0.034109 0.000000
|
||||
-0.074167 -0.040076 0.000000
|
||||
0.068786 -0.040076 0.000000
|
||||
-0.074167 -0.045334 0.000000
|
||||
0.068786 -0.045334 0.000000
|
||||
-0.074167 -0.049529 0.000000
|
||||
0.068786 -0.049529 0.000000
|
||||
-0.074167 -0.052306 0.000000
|
||||
0.068786 -0.052306 0.000000
|
||||
-0.074167 -0.053310 0.000000
|
||||
0.068786 -0.053310 0.000000
|
||||
-0.074027 -0.055387 0.000000
|
||||
0.068646 -0.055387 0.000000
|
||||
-0.073620 -0.057380 0.000000
|
||||
0.068239 -0.057380 0.000000
|
||||
-0.072963 -0.059269 0.000000
|
||||
0.067582 -0.059269 0.000000
|
||||
-0.072075 -0.061037 0.000000
|
||||
0.066694 -0.061037 0.000000
|
||||
-0.070975 -0.062666 0.000000
|
||||
0.065594 -0.062666 0.000000
|
||||
-0.069680 -0.064137 0.000000
|
||||
0.064299 -0.064137 0.000000
|
||||
-0.068209 -0.065431 0.000000
|
||||
0.062828 -0.065431 0.000000
|
||||
-0.066580 -0.066532 0.000000
|
||||
0.061199 -0.066532 0.000000
|
||||
-0.064811 -0.067419 0.000000
|
||||
0.059430 -0.067419 0.000000
|
||||
-0.062921 -0.068076 0.000000
|
||||
0.057540 -0.068076 0.000000
|
||||
-0.060928 -0.068483 0.000000
|
||||
0.055547 -0.068483 0.000000
|
||||
-0.058851 -0.068623 0.000000
|
||||
0.053470 -0.068623 0.000000
|
||||
-0.056641 -0.068623 0.000000
|
||||
-0.050531 -0.068623 0.000000
|
||||
-0.041301 -0.068623 0.000000
|
||||
-0.029731 -0.068623 0.000000
|
||||
-0.016601 -0.068623 0.000000
|
||||
-0.002690 -0.068623 0.000000
|
||||
0.011220 -0.068623 0.000000
|
||||
0.024350 -0.068623 0.000000
|
||||
0.035920 -0.068623 0.000000
|
||||
0.045150 -0.068623 0.000000
|
||||
0.051260 -0.068623 0.000000
|
||||
-0.007900 0.079000 -0.000010
|
||||
0.003131 0.079042 -0.000010
|
||||
-0.002387 0.079396 -0.000010
|
||||
0.008428 0.077974 -0.000010
|
||||
-0.013182 0.077888 -0.000010
|
||||
0.013453 0.076239 -0.000010
|
||||
-0.018186 0.076109 -0.000010
|
||||
0.018159 0.073889 -0.000010
|
||||
-0.022864 0.073714 -0.000010
|
||||
0.022495 0.070971 -0.000010
|
||||
-0.027169 0.070752 -0.000010
|
||||
0.026412 0.067534 -0.000010
|
||||
-0.031053 0.067274 -0.000010
|
||||
0.029862 0.063628 -0.000010
|
||||
-0.034470 0.063330 -0.000010
|
||||
0.032795 0.059302 -0.000010
|
||||
-0.037372 0.058970 -0.000010
|
||||
-0.002441 0.058018 -0.000010
|
||||
0.000188 0.057865 -0.000010
|
||||
0.035162 0.054605 -0.000010
|
||||
-0.039711 0.054244 -0.000010
|
||||
-0.005039 0.057814 -0.000010
|
||||
0.002711 0.057370 -0.000010
|
||||
-0.007527 0.057272 -0.000010
|
||||
0.005106 0.056556 -0.000010
|
||||
-0.009884 0.056417 -0.000010
|
||||
0.007349 0.055446 -0.000010
|
||||
-0.012086 0.055271 -0.000010
|
||||
0.009416 0.054065 -0.000010
|
||||
-0.014111 0.053859 -0.000010
|
||||
0.036913 0.049586 -0.000010
|
||||
-0.041440 0.049204 -0.000010
|
||||
0.011284 0.052436 -0.000010
|
||||
-0.015938 0.052205 -0.000010
|
||||
0.012930 0.050582 -0.000010
|
||||
-0.017545 0.050333 -0.000010
|
||||
0.014329 0.048528 -0.000010
|
||||
-0.018909 0.048267 -0.000010
|
||||
0.038000 0.044294 -0.000010
|
||||
-0.042513 0.043898 -0.000010
|
||||
0.015458 0.046297 -0.000010
|
||||
-0.020009 0.046030 -0.000010
|
||||
0.016294 0.043912 -0.000010
|
||||
-0.020821 0.043647 -0.000010
|
||||
0.038373 0.038777 -0.000010
|
||||
0.016813 0.041398 -0.000010
|
||||
-0.042881 0.038377 -0.000010
|
||||
-0.021325 0.041141 -0.000010
|
||||
0.016991 0.038777 -0.000010
|
||||
-0.021498 0.038537 -0.000010
|
||||
0.016991 0.038230 -0.000010
|
||||
0.038373 0.038230 -0.000010
|
||||
-0.021498 0.010986 -0.000010
|
||||
-0.042881 0.037838 -0.000010
|
||||
0.016991 0.036716 -0.000010
|
||||
0.038373 0.036716 -0.000010
|
||||
-0.042881 0.036348 -0.000010
|
||||
0.016991 0.034428 -0.000010
|
||||
0.038373 0.034428 -0.000010
|
||||
-0.042881 0.034097 -0.000010
|
||||
0.016991 0.031561 -0.000010
|
||||
0.038373 0.031561 -0.000010
|
||||
-0.042881 0.031275 -0.000010
|
||||
0.016991 0.028308 -0.000010
|
||||
0.038373 0.028308 -0.000010
|
||||
-0.042881 0.028073 -0.000010
|
||||
0.016991 0.024861 -0.000010
|
||||
0.038373 0.024861 -0.000010
|
||||
-0.042881 0.024681 -0.000010
|
||||
0.016991 0.021414 -0.000010
|
||||
0.038373 0.021414 -0.000010
|
||||
-0.042881 0.021289 -0.000010
|
||||
0.016991 0.018160 -0.000010
|
||||
0.038373 0.018160 -0.000010
|
||||
-0.042881 0.018087 -0.000010
|
||||
0.016991 0.015293 -0.000010
|
||||
0.038373 0.015293 -0.000010
|
||||
-0.042881 0.015266 -0.000010
|
||||
0.016991 0.013006 -0.000010
|
||||
0.038373 0.013006 -0.000010
|
||||
-0.042881 0.013015 -0.000010
|
||||
-0.042881 0.011525 -0.000010
|
||||
0.016991 0.011492 -0.000010
|
||||
0.038373 0.011492 -0.000010
|
||||
-0.042881 0.010986 -0.000010
|
||||
0.016991 0.010944 -0.000010
|
||||
0.018310 0.010945 -0.000010
|
||||
0.019818 0.010945 -0.000010
|
||||
0.038373 0.010944 -0.000010
|
||||
-0.051036 0.010869 -0.000010
|
||||
-0.049295 0.010986 -0.000010
|
||||
0.044788 0.010986 -0.000010
|
||||
0.021483 0.010945 -0.000010
|
||||
0.023275 0.010944 -0.000010
|
||||
0.046528 0.010869 -0.000010
|
||||
0.036705 0.010942 -0.000010
|
||||
0.025161 0.010943 -0.000010
|
||||
0.027111 0.010942 -0.000010
|
||||
0.029092 0.010941 -0.000010
|
||||
0.034912 0.010941 -0.000010
|
||||
0.031073 0.010941 -0.000010
|
||||
0.033024 0.010941 -0.000010
|
||||
-0.052705 0.010528 -0.000010
|
||||
0.048198 0.010528 -0.000010
|
||||
-0.054288 0.009978 -0.000010
|
||||
0.049781 0.009978 -0.000010
|
||||
-0.055769 0.009234 -0.000010
|
||||
0.051262 0.009234 -0.000010
|
||||
-0.057134 0.008313 -0.000010
|
||||
0.052627 0.008313 -0.000010
|
||||
-0.058366 0.007228 -0.000010
|
||||
0.053859 0.007228 -0.000010
|
||||
-0.059451 0.005996 -0.000010
|
||||
0.054944 0.005996 -0.000010
|
||||
-0.060373 0.004632 -0.000010
|
||||
0.055865 0.004632 -0.000010
|
||||
-0.061116 0.003151 -0.000010
|
||||
0.056609 0.003151 -0.000010
|
||||
-0.061666 0.001568 -0.000010
|
||||
0.057159 0.001568 -0.000010
|
||||
-0.062008 -0.000101 -0.000010
|
||||
0.057500 -0.000101 -0.000010
|
||||
-0.062125 -0.001841 -0.000010
|
||||
0.057618 -0.001841 -0.000010
|
||||
-0.062125 -0.002682 -0.000010
|
||||
0.057618 -0.002682 -0.000010
|
||||
-0.062125 -0.005008 -0.000010
|
||||
0.057618 -0.005008 -0.000010
|
||||
-0.062125 -0.008522 -0.000010
|
||||
0.057618 -0.008522 -0.000010
|
||||
-0.062125 -0.012926 -0.000010
|
||||
0.057618 -0.012926 -0.000010
|
||||
-0.062125 -0.017924 -0.000010
|
||||
0.057618 -0.017924 -0.000010
|
||||
-0.062125 -0.023219 -0.000010
|
||||
0.057618 -0.023219 -0.000010
|
||||
-0.062125 -0.028514 -0.000010
|
||||
0.057618 -0.028514 -0.000010
|
||||
-0.062125 -0.033512 -0.000010
|
||||
0.057618 -0.033512 -0.000010
|
||||
-0.062125 -0.037916 -0.000010
|
||||
0.057618 -0.037916 -0.000010
|
||||
-0.062125 -0.041430 -0.000010
|
||||
0.057618 -0.041430 -0.000010
|
||||
-0.062125 -0.043756 -0.000010
|
||||
0.057618 -0.043756 -0.000010
|
||||
-0.062125 -0.044597 -0.000010
|
||||
0.057618 -0.044597 -0.000010
|
||||
-0.062008 -0.046337 -0.000010
|
||||
0.057500 -0.046337 -0.000010
|
||||
-0.061666 -0.048006 -0.000010
|
||||
0.057159 -0.048006 -0.000010
|
||||
-0.061116 -0.049589 -0.000010
|
||||
0.056609 -0.049589 -0.000010
|
||||
-0.060373 -0.051070 -0.000010
|
||||
0.055865 -0.051070 -0.000010
|
||||
-0.059451 -0.052434 -0.000010
|
||||
0.054944 -0.052434 -0.000010
|
||||
-0.058366 -0.053666 -0.000010
|
||||
0.053859 -0.053666 -0.000010
|
||||
-0.057134 -0.054750 -0.000010
|
||||
0.052627 -0.054750 -0.000010
|
||||
-0.055769 -0.055672 -0.000010
|
||||
0.051262 -0.055672 -0.000010
|
||||
-0.054288 -0.056415 -0.000010
|
||||
0.049781 -0.056415 -0.000010
|
||||
-0.052705 -0.056965 -0.000010
|
||||
0.048198 -0.056965 -0.000010
|
||||
-0.051036 -0.057307 -0.000010
|
||||
0.046528 -0.057307 -0.000010
|
||||
-0.049295 -0.057424 -0.000010
|
||||
0.044788 -0.057424 -0.000010
|
||||
-0.047444 -0.057424 -0.000010
|
||||
-0.042326 -0.057424 -0.000010
|
||||
-0.034595 -0.057424 -0.000010
|
||||
-0.024903 -0.057424 -0.000010
|
||||
-0.013905 -0.057424 -0.000010
|
||||
-0.002254 -0.057424 -0.000010
|
||||
0.009398 -0.057424 -0.000010
|
||||
0.020396 -0.057424 -0.000010
|
||||
0.030087 -0.057424 -0.000010
|
||||
0.037819 -0.057424 -0.000010
|
||||
0.042937 -0.057424 -0.000010
|
||||
3 0 1 2
|
||||
3 0 3 1
|
||||
3 4 3 0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.90.0 - www.blender.org
|
||||
comment Created by Blender 2.91.2 - www.blender.org
|
||||
element vertex 207
|
||||
property float x
|
||||
property float y
|
||||
@@ -8,213 +8,213 @@ property float z
|
||||
element face 205
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-0.009432 0.099819 0.000000
|
||||
0.003738 0.099869 0.000000
|
||||
-0.002850 0.100291 0.000000
|
||||
0.010061 0.098593 0.000000
|
||||
-0.015738 0.098491 0.000000
|
||||
0.016061 0.096523 0.000000
|
||||
-0.021711 0.096368 0.000000
|
||||
0.021679 0.093717 0.000000
|
||||
-0.027296 0.093508 0.000000
|
||||
0.026855 0.090233 0.000000
|
||||
-0.032435 0.089972 0.000000
|
||||
0.031532 0.086130 0.000000
|
||||
-0.037073 0.085819 0.000000
|
||||
0.035651 0.081468 0.000000
|
||||
-0.041152 0.081111 0.000000
|
||||
0.039152 0.076303 0.000000
|
||||
-0.044616 0.075906 0.000000
|
||||
-0.002914 0.074769 0.000000
|
||||
0.000224 0.074587 0.000000
|
||||
0.041977 0.070695 0.000000
|
||||
-0.047408 0.070264 0.000000
|
||||
-0.006016 0.074526 0.000000
|
||||
0.003236 0.073996 0.000000
|
||||
-0.008987 0.073879 0.000000
|
||||
0.006096 0.073024 0.000000
|
||||
-0.011800 0.072858 0.000000
|
||||
0.008773 0.071699 0.000000
|
||||
-0.014428 0.071490 0.000000
|
||||
0.011241 0.070051 0.000000
|
||||
-0.016847 0.069805 0.000000
|
||||
0.044068 0.064703 0.000000
|
||||
-0.049473 0.064247 0.000000
|
||||
0.013472 0.068106 0.000000
|
||||
-0.019028 0.067830 0.000000
|
||||
0.015436 0.065893 0.000000
|
||||
-0.020946 0.065595 0.000000
|
||||
0.017106 0.063440 0.000000
|
||||
-0.022575 0.063128 0.000000
|
||||
0.045366 0.058385 0.000000
|
||||
-0.050753 0.057912 0.000000
|
||||
0.018454 0.060776 0.000000
|
||||
-0.023887 0.060458 0.000000
|
||||
0.019452 0.057930 0.000000
|
||||
-0.024857 0.057613 0.000000
|
||||
0.045811 0.051799 0.000000
|
||||
0.020071 0.054928 0.000000
|
||||
-0.051192 0.051321 0.000000
|
||||
-0.025459 0.054621 0.000000
|
||||
0.020284 0.051799 0.000000
|
||||
-0.025665 0.051512 0.000000
|
||||
0.020284 0.051699 0.000000
|
||||
0.045811 0.051699 0.000000
|
||||
0.020284 0.051421 0.000000
|
||||
0.045811 0.051421 0.000000
|
||||
-0.025665 0.013047 0.000000
|
||||
0.020284 0.051002 0.000000
|
||||
0.045811 0.051002 0.000000
|
||||
-0.051192 0.050568 0.000000
|
||||
0.020284 0.050476 0.000000
|
||||
0.045811 0.050476 0.000000
|
||||
-0.051192 0.048486 0.000000
|
||||
0.020284 0.049879 0.000000
|
||||
0.045811 0.049879 0.000000
|
||||
0.020284 0.049247 0.000000
|
||||
0.045811 0.049247 0.000000
|
||||
0.020284 0.048615 0.000000
|
||||
0.045811 0.048615 0.000000
|
||||
0.020284 0.048018 0.000000
|
||||
0.045811 0.048018 0.000000
|
||||
-0.051192 0.045341 0.000000
|
||||
0.020284 0.047493 0.000000
|
||||
0.045811 0.047493 0.000000
|
||||
0.020284 0.047073 0.000000
|
||||
0.045811 0.047073 0.000000
|
||||
0.020284 0.046795 0.000000
|
||||
0.045811 0.046795 0.000000
|
||||
0.020284 0.046695 0.000000
|
||||
0.045811 0.046695 0.000000
|
||||
0.020354 0.045653 0.000000
|
||||
0.045742 0.045653 0.000000
|
||||
0.020557 0.044655 0.000000
|
||||
0.045539 0.044655 0.000000
|
||||
-0.051192 0.041398 0.000000
|
||||
0.020884 0.043709 0.000000
|
||||
0.045212 0.043709 0.000000
|
||||
0.021327 0.042824 0.000000
|
||||
0.044769 0.042824 0.000000
|
||||
0.021875 0.042010 0.000000
|
||||
0.044220 0.042010 0.000000
|
||||
0.022522 0.041276 0.000000
|
||||
0.043574 0.041276 0.000000
|
||||
-0.051192 0.036924 0.000000
|
||||
0.023257 0.040629 0.000000
|
||||
0.042839 0.040629 0.000000
|
||||
0.024071 0.040081 0.000000
|
||||
0.042025 0.040081 0.000000
|
||||
0.024955 0.039638 0.000000
|
||||
0.041140 0.039638 0.000000
|
||||
0.025901 0.039311 0.000000
|
||||
0.040194 0.039311 0.000000
|
||||
0.026900 0.039108 0.000000
|
||||
0.039195 0.039108 0.000000
|
||||
0.027942 0.039038 0.000000
|
||||
0.038153 0.039038 0.000000
|
||||
0.028143 0.039038 0.000000
|
||||
0.028699 0.039038 0.000000
|
||||
0.029538 0.039038 0.000000
|
||||
0.030590 0.039038 0.000000
|
||||
0.031783 0.039038 0.000000
|
||||
0.033048 0.039038 0.000000
|
||||
0.034312 0.039038 0.000000
|
||||
0.035506 0.039038 0.000000
|
||||
0.036558 0.039038 0.000000
|
||||
0.037397 0.039038 0.000000
|
||||
0.037952 0.039038 0.000000
|
||||
-0.051192 0.032184 0.000000
|
||||
-0.051192 0.027444 0.000000
|
||||
-0.051192 0.022970 0.000000
|
||||
-0.051192 0.019027 0.000000
|
||||
-0.051192 0.015882 0.000000
|
||||
-0.051192 0.013800 0.000000
|
||||
-0.051192 0.013047 0.000000
|
||||
-0.060928 0.012907 0.000000
|
||||
-0.058851 0.013047 0.000000
|
||||
0.053470 0.013047 0.000000
|
||||
0.055547 0.012907 0.000000
|
||||
-0.062921 0.012500 0.000000
|
||||
0.057540 0.012500 0.000000
|
||||
-0.064811 0.011843 0.000000
|
||||
0.059430 0.011843 0.000000
|
||||
-0.066580 0.010956 0.000000
|
||||
0.061199 0.010956 0.000000
|
||||
-0.068209 0.009856 0.000000
|
||||
0.062828 0.009856 0.000000
|
||||
-0.069680 0.008561 0.000000
|
||||
0.064299 0.008561 0.000000
|
||||
-0.070975 0.007090 0.000000
|
||||
0.065594 0.007090 0.000000
|
||||
-0.072075 0.005461 0.000000
|
||||
0.066694 0.005461 0.000000
|
||||
-0.072963 0.003693 0.000000
|
||||
0.067582 0.003693 0.000000
|
||||
-0.073620 0.001804 0.000000
|
||||
0.068239 0.001804 0.000000
|
||||
-0.074027 -0.000189 0.000000
|
||||
0.068646 -0.000189 0.000000
|
||||
-0.074167 -0.002266 0.000000
|
||||
0.068786 -0.002266 0.000000
|
||||
-0.074167 -0.003270 0.000000
|
||||
0.068786 -0.003270 0.000000
|
||||
-0.074167 -0.006047 0.000000
|
||||
0.068786 -0.006047 0.000000
|
||||
-0.074167 -0.010242 0.000000
|
||||
0.068786 -0.010242 0.000000
|
||||
-0.074167 -0.015500 0.000000
|
||||
0.068786 -0.015500 0.000000
|
||||
-0.074167 -0.021467 0.000000
|
||||
0.068786 -0.021467 0.000000
|
||||
-0.074167 -0.027788 0.000000
|
||||
0.068786 -0.027788 0.000000
|
||||
-0.074167 -0.034109 0.000000
|
||||
0.068786 -0.034109 0.000000
|
||||
-0.074167 -0.040076 0.000000
|
||||
0.068786 -0.040076 0.000000
|
||||
-0.074167 -0.045334 0.000000
|
||||
0.068786 -0.045334 0.000000
|
||||
-0.074167 -0.049529 0.000000
|
||||
0.068786 -0.049529 0.000000
|
||||
-0.074167 -0.052306 0.000000
|
||||
0.068786 -0.052306 0.000000
|
||||
-0.074167 -0.053310 0.000000
|
||||
0.068786 -0.053310 0.000000
|
||||
-0.074027 -0.055387 0.000000
|
||||
0.068646 -0.055387 0.000000
|
||||
-0.073620 -0.057380 0.000000
|
||||
0.068239 -0.057380 0.000000
|
||||
-0.072963 -0.059269 0.000000
|
||||
0.067582 -0.059269 0.000000
|
||||
-0.072075 -0.061037 0.000000
|
||||
0.066694 -0.061037 0.000000
|
||||
-0.070975 -0.062666 0.000000
|
||||
0.065594 -0.062666 0.000000
|
||||
-0.069680 -0.064137 0.000000
|
||||
0.064299 -0.064137 0.000000
|
||||
-0.068209 -0.065431 0.000000
|
||||
0.062828 -0.065431 0.000000
|
||||
-0.066580 -0.066532 0.000000
|
||||
0.061199 -0.066532 0.000000
|
||||
-0.064811 -0.067419 0.000000
|
||||
0.059430 -0.067419 0.000000
|
||||
-0.062921 -0.068076 0.000000
|
||||
0.057540 -0.068076 0.000000
|
||||
-0.060928 -0.068483 0.000000
|
||||
0.055547 -0.068483 0.000000
|
||||
-0.058851 -0.068623 0.000000
|
||||
0.053470 -0.068623 0.000000
|
||||
-0.056641 -0.068623 0.000000
|
||||
-0.050531 -0.068623 0.000000
|
||||
-0.041301 -0.068623 0.000000
|
||||
-0.029731 -0.068623 0.000000
|
||||
-0.016601 -0.068623 0.000000
|
||||
-0.002690 -0.068623 0.000000
|
||||
0.011220 -0.068623 0.000000
|
||||
0.024350 -0.068623 0.000000
|
||||
0.035920 -0.068623 0.000000
|
||||
0.045150 -0.068623 0.000000
|
||||
0.051260 -0.068623 0.000000
|
||||
0.004060 0.080795 -0.000011
|
||||
-0.006788 0.080836 -0.000011
|
||||
-0.001361 0.081184 -0.000011
|
||||
-0.011996 0.079785 -0.000011
|
||||
0.009254 0.079701 -0.000011
|
||||
-0.016937 0.078080 -0.000011
|
||||
0.014174 0.077952 -0.000011
|
||||
-0.021564 0.075769 -0.000011
|
||||
0.018774 0.075596 -0.000011
|
||||
-0.025828 0.072899 -0.000011
|
||||
0.023007 0.072684 -0.000011
|
||||
-0.029680 0.069520 -0.000011
|
||||
0.026826 0.069264 -0.000011
|
||||
-0.033072 0.065679 -0.000011
|
||||
0.030186 0.065386 -0.000011
|
||||
-0.035956 0.061426 -0.000011
|
||||
0.033039 0.061099 -0.000011
|
||||
-0.001309 0.060162 -0.000011
|
||||
-0.003893 0.060012 -0.000011
|
||||
-0.038283 0.056807 -0.000011
|
||||
0.035339 0.056452 -0.000011
|
||||
0.001246 0.059962 -0.000011
|
||||
-0.006374 0.059526 -0.000011
|
||||
0.003693 0.059430 -0.000011
|
||||
-0.008729 0.058725 -0.000011
|
||||
0.006010 0.058588 -0.000011
|
||||
-0.010935 0.057634 -0.000011
|
||||
0.008175 0.057462 -0.000011
|
||||
-0.012968 0.056276 -0.000011
|
||||
0.010167 0.056074 -0.000011
|
||||
-0.040006 0.051871 -0.000011
|
||||
0.037040 0.051495 -0.000011
|
||||
-0.014804 0.054674 -0.000011
|
||||
0.011964 0.054447 -0.000011
|
||||
-0.016422 0.052851 -0.000011
|
||||
0.013544 0.052606 -0.000011
|
||||
-0.017798 0.050831 -0.000011
|
||||
0.014885 0.050574 -0.000011
|
||||
-0.041074 0.046667 -0.000011
|
||||
0.038094 0.046278 -0.000011
|
||||
-0.018909 0.048637 -0.000011
|
||||
0.015966 0.048375 -0.000011
|
||||
-0.019730 0.046292 -0.000011
|
||||
0.016765 0.046032 -0.000011
|
||||
-0.041441 0.041243 -0.000011
|
||||
-0.020241 0.043820 -0.000011
|
||||
0.038456 0.040849 -0.000011
|
||||
0.017261 0.043568 -0.000011
|
||||
-0.020416 0.041243 -0.000011
|
||||
0.017430 0.041007 -0.000011
|
||||
-0.020416 0.041161 -0.000011
|
||||
-0.041441 0.041161 -0.000011
|
||||
-0.020416 0.040932 -0.000011
|
||||
-0.041441 0.040932 -0.000011
|
||||
0.017430 0.009325 -0.000011
|
||||
-0.020416 0.040586 -0.000011
|
||||
-0.041441 0.040586 -0.000011
|
||||
0.038456 0.040229 -0.000011
|
||||
-0.020416 0.040153 -0.000011
|
||||
-0.041441 0.040153 -0.000011
|
||||
0.038456 0.038514 -0.000011
|
||||
-0.020416 0.039662 -0.000011
|
||||
-0.041441 0.039662 -0.000011
|
||||
-0.020416 0.039141 -0.000011
|
||||
-0.041441 0.039141 -0.000011
|
||||
-0.020416 0.038621 -0.000011
|
||||
-0.041441 0.038621 -0.000011
|
||||
-0.020416 0.038129 -0.000011
|
||||
-0.041441 0.038129 -0.000011
|
||||
0.038456 0.035924 -0.000011
|
||||
-0.020416 0.037696 -0.000011
|
||||
-0.041441 0.037696 -0.000011
|
||||
-0.020416 0.037351 -0.000011
|
||||
-0.041441 0.037351 -0.000011
|
||||
-0.020416 0.037122 -0.000011
|
||||
-0.041441 0.037122 -0.000011
|
||||
-0.020416 0.037039 -0.000011
|
||||
-0.041441 0.037039 -0.000011
|
||||
-0.020473 0.036181 -0.000011
|
||||
-0.041384 0.036181 -0.000011
|
||||
-0.020640 0.035359 -0.000011
|
||||
-0.041217 0.035359 -0.000011
|
||||
0.038456 0.032676 -0.000011
|
||||
-0.020910 0.034579 -0.000011
|
||||
-0.040947 0.034579 -0.000011
|
||||
-0.021274 0.033851 -0.000011
|
||||
-0.040583 0.033851 -0.000011
|
||||
-0.021726 0.033180 -0.000011
|
||||
-0.040131 0.033180 -0.000011
|
||||
-0.022259 0.032575 -0.000011
|
||||
-0.039598 0.032575 -0.000011
|
||||
0.038456 0.028991 -0.000011
|
||||
-0.022864 0.032043 -0.000011
|
||||
-0.038993 0.032043 -0.000011
|
||||
-0.023534 0.031591 -0.000011
|
||||
-0.038323 0.031591 -0.000011
|
||||
-0.024263 0.031227 -0.000011
|
||||
-0.037594 0.031227 -0.000011
|
||||
-0.025042 0.030957 -0.000011
|
||||
-0.036815 0.030957 -0.000011
|
||||
-0.025865 0.030790 -0.000011
|
||||
-0.035992 0.030790 -0.000011
|
||||
-0.026723 0.030733 -0.000011
|
||||
-0.035134 0.030733 -0.000011
|
||||
-0.026889 0.030733 -0.000011
|
||||
-0.027346 0.030733 -0.000011
|
||||
-0.028037 0.030733 -0.000011
|
||||
-0.028904 0.030733 -0.000011
|
||||
-0.029887 0.030733 -0.000011
|
||||
-0.030929 0.030733 -0.000011
|
||||
-0.031970 0.030733 -0.000011
|
||||
-0.032953 0.030733 -0.000011
|
||||
-0.033820 0.030733 -0.000011
|
||||
-0.034511 0.030733 -0.000011
|
||||
-0.034968 0.030733 -0.000011
|
||||
0.038456 0.025087 -0.000011
|
||||
0.038456 0.021183 -0.000011
|
||||
0.038456 0.017498 -0.000011
|
||||
0.038456 0.014251 -0.000011
|
||||
0.038456 0.011660 -0.000011
|
||||
0.038456 0.009945 -0.000011
|
||||
0.038456 0.009325 -0.000011
|
||||
0.046475 0.009210 -0.000011
|
||||
0.044764 0.009325 -0.000011
|
||||
-0.047749 0.009325 -0.000011
|
||||
-0.049460 0.009210 -0.000011
|
||||
0.048117 0.008874 -0.000011
|
||||
-0.051102 0.008874 -0.000011
|
||||
0.049673 0.008333 -0.000011
|
||||
-0.052658 0.008333 -0.000011
|
||||
0.051130 0.007602 -0.000011
|
||||
-0.054115 0.007602 -0.000011
|
||||
0.052472 0.006696 -0.000011
|
||||
-0.055457 0.006696 -0.000011
|
||||
0.053683 0.005630 -0.000011
|
||||
-0.056668 0.005630 -0.000011
|
||||
0.054750 0.004418 -0.000011
|
||||
-0.057735 0.004418 -0.000011
|
||||
0.055656 0.003077 -0.000011
|
||||
-0.058641 0.003077 -0.000011
|
||||
0.056387 0.001621 -0.000011
|
||||
-0.059373 0.001621 -0.000011
|
||||
0.056928 0.000064 -0.000011
|
||||
-0.059914 0.000064 -0.000011
|
||||
0.057264 -0.001577 -0.000011
|
||||
-0.060249 -0.001577 -0.000011
|
||||
0.057379 -0.003288 -0.000011
|
||||
-0.060364 -0.003288 -0.000011
|
||||
0.057379 -0.004115 -0.000011
|
||||
-0.060364 -0.004115 -0.000011
|
||||
0.057379 -0.006402 -0.000011
|
||||
-0.060364 -0.006402 -0.000011
|
||||
0.057379 -0.009857 -0.000011
|
||||
-0.060364 -0.009857 -0.000011
|
||||
0.057379 -0.014188 -0.000011
|
||||
-0.060364 -0.014188 -0.000011
|
||||
0.057379 -0.019102 -0.000011
|
||||
-0.060364 -0.019102 -0.000011
|
||||
0.057379 -0.024309 -0.000011
|
||||
-0.060364 -0.024309 -0.000011
|
||||
0.057379 -0.029516 -0.000011
|
||||
-0.060364 -0.029516 -0.000011
|
||||
0.057379 -0.034430 -0.000011
|
||||
-0.060364 -0.034430 -0.000011
|
||||
0.057379 -0.038761 -0.000011
|
||||
-0.060364 -0.038761 -0.000011
|
||||
0.057379 -0.042216 -0.000011
|
||||
-0.060364 -0.042216 -0.000011
|
||||
0.057379 -0.044503 -0.000011
|
||||
-0.060364 -0.044503 -0.000011
|
||||
0.057379 -0.045330 -0.000011
|
||||
-0.060364 -0.045330 -0.000011
|
||||
0.057264 -0.047041 -0.000011
|
||||
-0.060249 -0.047041 -0.000011
|
||||
0.056928 -0.048682 -0.000011
|
||||
-0.059914 -0.048682 -0.000011
|
||||
0.056387 -0.050239 -0.000011
|
||||
-0.059373 -0.050239 -0.000011
|
||||
0.055656 -0.051695 -0.000011
|
||||
-0.058641 -0.051695 -0.000011
|
||||
0.054750 -0.053036 -0.000011
|
||||
-0.057735 -0.053036 -0.000011
|
||||
0.053683 -0.054248 -0.000011
|
||||
-0.056668 -0.054248 -0.000011
|
||||
0.052472 -0.055314 -0.000011
|
||||
-0.055457 -0.055314 -0.000011
|
||||
0.051130 -0.056220 -0.000011
|
||||
-0.054115 -0.056220 -0.000011
|
||||
0.049673 -0.056951 -0.000011
|
||||
-0.052658 -0.056951 -0.000011
|
||||
0.048117 -0.057492 -0.000011
|
||||
-0.051102 -0.057492 -0.000011
|
||||
0.046475 -0.057828 -0.000011
|
||||
-0.049460 -0.057828 -0.000011
|
||||
0.044764 -0.057943 -0.000011
|
||||
-0.047749 -0.057943 -0.000011
|
||||
0.042944 -0.057943 -0.000011
|
||||
0.037911 -0.057943 -0.000011
|
||||
0.030309 -0.057943 -0.000011
|
||||
0.020779 -0.057943 -0.000011
|
||||
0.009964 -0.057943 -0.000011
|
||||
-0.001493 -0.057943 -0.000011
|
||||
-0.012950 -0.057943 -0.000011
|
||||
-0.023764 -0.057943 -0.000011
|
||||
-0.033294 -0.057943 -0.000011
|
||||
-0.040896 -0.057943 -0.000011
|
||||
-0.045929 -0.057943 -0.000011
|
||||
3 0 1 2
|
||||
3 0 3 1
|
||||
3 4 3 0
|
||||
|
||||
664
rsc/mesh/icon_vector_square_slash.ply
Normal file
664
rsc/mesh/icon_vector_square_slash.ply
Normal file
@@ -0,0 +1,664 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.91.2 - www.blender.org
|
||||
element vertex 328
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
element face 326
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-0.054947 0.061984 0.000000
|
||||
-0.053447 0.062056 0.000000
|
||||
-0.053901 0.062056 0.000000
|
||||
-0.052189 0.062056 0.000000
|
||||
-0.050289 0.062056 0.000000
|
||||
-0.047907 0.062056 0.000000
|
||||
-0.045204 0.062056 0.000000
|
||||
-0.042340 0.062056 0.000000
|
||||
-0.039477 0.062056 0.000000
|
||||
-0.036774 0.062056 0.000000
|
||||
-0.034392 0.062056 0.000000
|
||||
-0.032492 0.062056 0.000000
|
||||
-0.031234 0.062056 0.000000
|
||||
-0.030779 0.062056 0.000000
|
||||
-0.029733 0.061984 0.000000
|
||||
0.029835 0.061984 0.000000
|
||||
0.050684 0.062056 0.000000
|
||||
0.030881 0.062056 0.000000
|
||||
0.040676 0.052282 0.000000
|
||||
-0.055950 0.061777 0.000000
|
||||
-0.028730 0.061777 0.000000
|
||||
0.028832 0.061777 0.000000
|
||||
-0.056901 0.061443 0.000000
|
||||
-0.027779 0.061443 0.000000
|
||||
0.027881 0.061443 0.000000
|
||||
-0.057791 0.060991 0.000000
|
||||
-0.026889 0.060991 0.000000
|
||||
0.026991 0.060991 0.000000
|
||||
-0.058611 0.060431 0.000000
|
||||
-0.026070 0.060431 0.000000
|
||||
0.026171 0.060431 0.000000
|
||||
-0.059351 0.059771 0.000000
|
||||
-0.025329 0.059771 0.000000
|
||||
0.025431 0.059771 0.000000
|
||||
-0.060003 0.059023 0.000000
|
||||
-0.024678 0.059023 0.000000
|
||||
0.024780 0.059023 0.000000
|
||||
-0.060556 0.058193 0.000000
|
||||
-0.024124 0.058193 0.000000
|
||||
0.024226 0.058193 0.000000
|
||||
-0.061003 0.057293 0.000000
|
||||
-0.023677 0.057293 0.000000
|
||||
0.023779 0.057293 0.000000
|
||||
-0.061333 0.056331 0.000000
|
||||
-0.023347 0.056331 0.000000
|
||||
0.023449 0.056331 0.000000
|
||||
-0.061538 0.055316 0.000000
|
||||
-0.023142 0.055316 0.000000
|
||||
0.023244 0.055316 0.000000
|
||||
-0.061609 0.054258 0.000000
|
||||
-0.023071 0.054258 0.000000
|
||||
0.023173 0.054258 0.000000
|
||||
-0.061609 0.053798 0.000000
|
||||
-0.022161 0.054258 0.000000
|
||||
-0.019646 0.054258 0.000000
|
||||
-0.015846 0.054258 0.000000
|
||||
-0.011082 0.054258 0.000000
|
||||
-0.005676 0.054258 0.000000
|
||||
0.000051 0.054258 0.000000
|
||||
0.005778 0.054258 0.000000
|
||||
0.011184 0.054258 0.000000
|
||||
0.015948 0.054258 0.000000
|
||||
0.019748 0.054258 0.000000
|
||||
0.022263 0.054258 0.000000
|
||||
-0.061609 0.052525 0.000000
|
||||
-0.061609 0.050603 0.000000
|
||||
-0.052099 0.052282 0.000000
|
||||
-0.052099 0.033119 0.000000
|
||||
-0.032907 0.052282 0.000000
|
||||
-0.032907 0.033119 0.000000
|
||||
-0.023071 0.038663 0.000000
|
||||
0.033332 0.052282 0.000000
|
||||
0.033332 0.045109 0.000000
|
||||
-0.061609 0.048193 0.000000
|
||||
-0.061609 0.045459 0.000000
|
||||
0.052523 0.037198 0.000000
|
||||
0.061711 0.045870 0.000000
|
||||
0.061711 0.046171 0.000000
|
||||
0.061711 0.045037 0.000000
|
||||
-0.061609 0.042561 0.000000
|
||||
0.023173 0.038663 0.000000
|
||||
0.023173 0.035187 0.000000
|
||||
0.061711 0.043779 0.000000
|
||||
0.061711 0.042203 0.000000
|
||||
-0.061609 0.039664 0.000000
|
||||
0.061711 0.040414 0.000000
|
||||
0.061711 0.038518 0.000000
|
||||
-0.061609 0.036930 0.000000
|
||||
-0.023071 0.038509 0.000000
|
||||
0.061711 0.036622 0.000000
|
||||
-0.023071 0.038085 0.000000
|
||||
-0.023071 0.037444 0.000000
|
||||
-0.023071 0.036641 0.000000
|
||||
0.052523 0.033119 0.000000
|
||||
-0.061609 0.034520 0.000000
|
||||
-0.023071 0.035729 0.000000
|
||||
0.061711 0.034833 0.000000
|
||||
-0.023071 0.034764 0.000000
|
||||
0.061711 0.033257 0.000000
|
||||
-0.023071 0.033798 0.000000
|
||||
-0.061609 0.032598 0.000000
|
||||
-0.023071 0.032887 0.000000
|
||||
0.061711 0.031999 0.000000
|
||||
0.038054 0.023067 0.000000
|
||||
0.048347 0.033119 0.000000
|
||||
-0.023071 0.032083 0.000000
|
||||
-0.061609 0.031325 0.000000
|
||||
-0.023071 0.031443 0.000000
|
||||
0.061711 0.031166 0.000000
|
||||
-0.023071 0.031018 0.000000
|
||||
-0.061609 0.030865 0.000000
|
||||
0.061711 0.030865 0.000000
|
||||
-0.023071 0.030865 0.000000
|
||||
-0.061538 0.029807 0.000000
|
||||
-0.023142 0.029807 0.000000
|
||||
0.061640 0.029807 0.000000
|
||||
-0.023347 0.028792 0.000000
|
||||
0.061435 0.028792 0.000000
|
||||
-0.061333 0.028792 0.000000
|
||||
-0.023677 0.027830 0.000000
|
||||
0.061105 0.027830 0.000000
|
||||
-0.061003 0.027830 0.000000
|
||||
-0.024124 0.026930 0.000000
|
||||
0.060658 0.026930 0.000000
|
||||
-0.060556 0.026930 0.000000
|
||||
-0.024678 0.026100 0.000000
|
||||
0.060105 0.026100 0.000000
|
||||
-0.060003 0.026100 0.000000
|
||||
-0.025329 0.025351 0.000000
|
||||
0.059453 0.025351 0.000000
|
||||
-0.059351 0.025351 0.000000
|
||||
-0.026070 0.024692 0.000000
|
||||
0.058713 0.024692 0.000000
|
||||
-0.058611 0.024692 0.000000
|
||||
-0.026889 0.024132 0.000000
|
||||
0.057893 0.024132 0.000000
|
||||
-0.057791 0.024132 0.000000
|
||||
-0.027779 0.023680 0.000000
|
||||
0.057003 0.023680 0.000000
|
||||
-0.056901 0.023680 0.000000
|
||||
-0.028730 0.023345 0.000000
|
||||
0.056052 0.023345 0.000000
|
||||
-0.055950 0.023345 0.000000
|
||||
-0.029733 0.023138 0.000000
|
||||
0.055049 0.023138 0.000000
|
||||
-0.054947 0.023138 0.000000
|
||||
-0.030779 0.023067 0.000000
|
||||
0.054003 0.023067 0.000000
|
||||
-0.053901 0.023067 0.000000
|
||||
-0.053901 0.022146 0.000000
|
||||
-0.038486 0.023067 0.000000
|
||||
-0.038486 -0.023719 0.000000
|
||||
0.038588 0.023067 0.000000
|
||||
0.038588 -0.023719 0.000000
|
||||
0.054003 0.022146 0.000000
|
||||
0.054003 0.019601 0.000000
|
||||
-0.053901 0.019601 0.000000
|
||||
0.054003 0.015756 0.000000
|
||||
-0.053901 0.015756 0.000000
|
||||
0.054003 0.010937 0.000000
|
||||
-0.053901 0.010937 0.000000
|
||||
0.054003 0.005468 0.000000
|
||||
-0.053901 0.005468 0.000000
|
||||
0.054003 -0.000326 0.000000
|
||||
-0.053901 -0.000326 0.000000
|
||||
0.054003 -0.006120 0.000000
|
||||
-0.053901 -0.006120 0.000000
|
||||
0.054003 -0.011589 0.000000
|
||||
-0.053901 -0.011589 0.000000
|
||||
0.054003 -0.016409 0.000000
|
||||
-0.053901 -0.016409 0.000000
|
||||
0.054003 -0.020254 0.000000
|
||||
-0.053901 -0.020254 0.000000
|
||||
0.054003 -0.022799 0.000000
|
||||
-0.053901 -0.022799 0.000000
|
||||
0.054003 -0.023719 0.000000
|
||||
-0.053901 -0.023719 0.000000
|
||||
-0.054947 -0.023790 0.000000
|
||||
-0.037141 -0.023719 0.000000
|
||||
-0.048284 -0.034601 0.000000
|
||||
0.029835 -0.023790 0.000000
|
||||
0.030881 -0.023719 0.000000
|
||||
0.055049 -0.023790 0.000000
|
||||
-0.055950 -0.023998 0.000000
|
||||
0.028832 -0.023998 0.000000
|
||||
0.056052 -0.023998 0.000000
|
||||
-0.056901 -0.024332 0.000000
|
||||
0.027881 -0.024332 0.000000
|
||||
0.057003 -0.024332 0.000000
|
||||
-0.057791 -0.024784 0.000000
|
||||
0.026991 -0.024784 0.000000
|
||||
0.057893 -0.024784 0.000000
|
||||
-0.058611 -0.025344 0.000000
|
||||
0.026171 -0.025344 0.000000
|
||||
0.058713 -0.025344 0.000000
|
||||
-0.059351 -0.026004 0.000000
|
||||
0.025431 -0.026004 0.000000
|
||||
0.059453 -0.026004 0.000000
|
||||
-0.060003 -0.026753 0.000000
|
||||
0.024780 -0.026753 0.000000
|
||||
0.060105 -0.026753 0.000000
|
||||
-0.060556 -0.027582 0.000000
|
||||
0.024226 -0.027582 0.000000
|
||||
0.060658 -0.027582 0.000000
|
||||
-0.061003 -0.028482 0.000000
|
||||
0.023779 -0.028482 0.000000
|
||||
0.061105 -0.028482 0.000000
|
||||
-0.061333 -0.029445 0.000000
|
||||
0.023449 -0.029445 0.000000
|
||||
0.061435 -0.029445 0.000000
|
||||
-0.061538 -0.030459 0.000000
|
||||
0.023244 -0.030459 0.000000
|
||||
0.061640 -0.030459 0.000000
|
||||
-0.061609 -0.031517 0.000000
|
||||
0.023173 -0.031517 0.000000
|
||||
0.061711 -0.031517 0.000000
|
||||
-0.061609 -0.031834 0.000000
|
||||
0.023173 -0.031671 0.000000
|
||||
0.061711 -0.031978 0.000000
|
||||
0.023173 -0.032095 0.000000
|
||||
-0.061609 -0.032710 0.000000
|
||||
0.061711 -0.033250 0.000000
|
||||
0.023173 -0.032736 0.000000
|
||||
-0.061609 -0.034033 0.000000
|
||||
0.023173 -0.033539 0.000000
|
||||
0.052523 -0.034601 0.000000
|
||||
0.061711 -0.035173 0.000000
|
||||
0.023173 -0.034451 0.000000
|
||||
-0.061609 -0.035691 0.000000
|
||||
-0.052099 -0.034601 0.000000
|
||||
0.023173 -0.035416 0.000000
|
||||
0.033332 -0.034601 0.000000
|
||||
-0.052099 -0.038327 0.000000
|
||||
0.033332 -0.053764 0.000000
|
||||
0.052523 -0.053764 0.000000
|
||||
0.061711 -0.037582 0.000000
|
||||
0.023173 -0.036382 0.000000
|
||||
-0.061609 -0.037573 0.000000
|
||||
0.023173 -0.037293 0.000000
|
||||
-0.032907 -0.046238 0.000000
|
||||
-0.023071 -0.039315 0.000000
|
||||
-0.023071 -0.036632 0.000000
|
||||
0.023173 -0.038097 0.000000
|
||||
-0.061609 -0.039566 0.000000
|
||||
0.061711 -0.040317 0.000000
|
||||
0.023173 -0.038737 0.000000
|
||||
-0.061609 -0.041560 0.000000
|
||||
-0.061609 -0.043442 0.000000
|
||||
-0.061609 -0.045100 0.000000
|
||||
-0.061609 -0.046423 0.000000
|
||||
-0.061609 -0.047299 0.000000
|
||||
-0.061609 -0.047615 0.000000
|
||||
0.023173 -0.039162 0.000000
|
||||
0.023173 -0.039315 0.000000
|
||||
0.061711 -0.043214 0.000000
|
||||
0.061711 -0.046111 0.000000
|
||||
0.061711 -0.048846 0.000000
|
||||
-0.032907 -0.053764 0.000000
|
||||
0.061711 -0.051255 0.000000
|
||||
0.061711 -0.053178 0.000000
|
||||
0.061711 -0.054450 0.000000
|
||||
-0.049771 -0.062708 0.000000
|
||||
-0.040614 -0.053764 0.000000
|
||||
-0.023071 -0.054910 0.000000
|
||||
0.061711 -0.054910 0.000000
|
||||
-0.023142 -0.055968 0.000000
|
||||
-0.022161 -0.054910 0.000000
|
||||
-0.019646 -0.054910 0.000000
|
||||
-0.015846 -0.054910 0.000000
|
||||
-0.011082 -0.054910 0.000000
|
||||
-0.005676 -0.054910 0.000000
|
||||
0.000051 -0.054910 0.000000
|
||||
0.005778 -0.054910 0.000000
|
||||
0.011184 -0.054910 0.000000
|
||||
0.015948 -0.054910 0.000000
|
||||
0.019748 -0.054910 0.000000
|
||||
0.022263 -0.054910 0.000000
|
||||
0.023173 -0.054910 0.000000
|
||||
0.023244 -0.055968 0.000000
|
||||
0.061640 -0.055968 0.000000
|
||||
-0.023347 -0.056983 0.000000
|
||||
0.023449 -0.056983 0.000000
|
||||
0.061435 -0.056983 0.000000
|
||||
-0.023677 -0.057945 0.000000
|
||||
0.023779 -0.057945 0.000000
|
||||
0.061105 -0.057945 0.000000
|
||||
-0.024124 -0.058846 0.000000
|
||||
0.024226 -0.058846 0.000000
|
||||
0.060658 -0.058846 0.000000
|
||||
-0.024678 -0.059675 0.000000
|
||||
0.024780 -0.059675 0.000000
|
||||
0.060105 -0.059675 0.000000
|
||||
-0.025329 -0.060424 0.000000
|
||||
0.025431 -0.060424 0.000000
|
||||
0.059453 -0.060424 0.000000
|
||||
-0.026070 -0.061083 0.000000
|
||||
0.026171 -0.061083 0.000000
|
||||
0.058713 -0.061083 0.000000
|
||||
-0.026889 -0.061643 0.000000
|
||||
0.026991 -0.061643 0.000000
|
||||
0.057893 -0.061643 0.000000
|
||||
-0.027779 -0.062095 0.000000
|
||||
0.027881 -0.062095 0.000000
|
||||
0.057003 -0.062095 0.000000
|
||||
-0.028730 -0.062429 0.000000
|
||||
0.028832 -0.062429 0.000000
|
||||
0.056052 -0.062429 0.000000
|
||||
-0.029733 -0.062637 0.000000
|
||||
0.029835 -0.062637 0.000000
|
||||
0.055049 -0.062637 0.000000
|
||||
-0.030779 -0.062708 0.000000
|
||||
0.030881 -0.062708 0.000000
|
||||
0.054003 -0.062708 0.000000
|
||||
0.031336 -0.062708 0.000000
|
||||
0.032594 -0.062708 0.000000
|
||||
0.034494 -0.062708 0.000000
|
||||
0.036876 -0.062708 0.000000
|
||||
0.039579 -0.062708 0.000000
|
||||
0.042442 -0.062708 0.000000
|
||||
0.045306 -0.062708 0.000000
|
||||
0.048009 -0.062708 0.000000
|
||||
0.050390 -0.062708 0.000000
|
||||
0.052291 -0.062708 0.000000
|
||||
0.053548 -0.062708 0.000000
|
||||
-0.071576 -0.061008 0.000000
|
||||
0.073069 0.060167 0.000000
|
||||
0.064126 0.071586 0.000000
|
||||
-0.062632 -0.072426 0.000000
|
||||
3 0 1 2
|
||||
3 0 3 1
|
||||
3 0 4 3
|
||||
3 0 5 4
|
||||
3 0 6 5
|
||||
3 0 7 6
|
||||
3 0 8 7
|
||||
3 0 9 8
|
||||
3 0 10 9
|
||||
3 0 11 10
|
||||
3 0 12 11
|
||||
3 0 13 12
|
||||
3 0 14 13
|
||||
3 15 16 17
|
||||
3 15 18 16
|
||||
3 19 14 0
|
||||
3 19 20 14
|
||||
3 21 18 15
|
||||
3 22 20 19
|
||||
3 22 23 20
|
||||
3 24 18 21
|
||||
3 25 23 22
|
||||
3 25 26 23
|
||||
3 27 18 24
|
||||
3 28 26 25
|
||||
3 28 29 26
|
||||
3 30 18 27
|
||||
3 31 29 28
|
||||
3 31 32 29
|
||||
3 33 18 30
|
||||
3 34 32 31
|
||||
3 34 35 32
|
||||
3 36 18 33
|
||||
3 37 35 34
|
||||
3 37 38 35
|
||||
3 39 18 36
|
||||
3 40 38 37
|
||||
3 40 41 38
|
||||
3 42 18 39
|
||||
3 43 41 40
|
||||
3 43 44 41
|
||||
3 45 18 42
|
||||
3 46 44 43
|
||||
3 46 47 44
|
||||
3 48 18 45
|
||||
3 49 47 46
|
||||
3 49 50 47
|
||||
3 51 18 48
|
||||
3 52 50 49
|
||||
3 52 53 50
|
||||
3 52 54 53
|
||||
3 52 55 54
|
||||
3 52 56 55
|
||||
3 52 57 56
|
||||
3 52 58 57
|
||||
3 52 59 58
|
||||
3 52 60 59
|
||||
3 52 61 60
|
||||
3 52 62 61
|
||||
3 52 63 62
|
||||
3 52 51 63
|
||||
3 52 18 51
|
||||
3 64 18 52
|
||||
3 65 66 64
|
||||
3 66 18 64
|
||||
3 65 67 66
|
||||
3 68 18 66
|
||||
3 69 70 68
|
||||
3 70 71 68
|
||||
3 71 18 68
|
||||
3 70 72 71
|
||||
3 73 67 65
|
||||
3 74 67 73
|
||||
3 75 76 77
|
||||
3 75 78 76
|
||||
3 79 67 74
|
||||
3 70 80 72
|
||||
3 80 81 72
|
||||
3 75 82 78
|
||||
3 75 83 82
|
||||
3 84 67 79
|
||||
3 75 85 83
|
||||
3 75 86 85
|
||||
3 87 67 84
|
||||
3 69 88 70
|
||||
3 75 89 86
|
||||
3 69 90 88
|
||||
3 69 91 90
|
||||
3 69 92 91
|
||||
3 93 89 75
|
||||
3 94 67 87
|
||||
3 69 95 92
|
||||
3 93 96 89
|
||||
3 69 97 95
|
||||
3 93 98 96
|
||||
3 69 99 97
|
||||
3 100 67 94
|
||||
3 69 101 99
|
||||
3 93 102 98
|
||||
3 100 69 67
|
||||
3 100 101 69
|
||||
3 103 93 104
|
||||
3 103 102 93
|
||||
3 100 105 101
|
||||
3 106 105 100
|
||||
3 106 107 105
|
||||
3 103 108 102
|
||||
3 106 109 107
|
||||
3 110 109 106
|
||||
3 103 111 108
|
||||
3 110 112 109
|
||||
3 113 112 110
|
||||
3 113 114 112
|
||||
3 103 115 111
|
||||
3 113 116 114
|
||||
3 103 117 115
|
||||
3 118 116 113
|
||||
3 118 119 116
|
||||
3 103 120 117
|
||||
3 121 119 118
|
||||
3 121 122 119
|
||||
3 103 123 120
|
||||
3 124 122 121
|
||||
3 124 125 122
|
||||
3 103 126 123
|
||||
3 127 125 124
|
||||
3 127 128 125
|
||||
3 103 129 126
|
||||
3 130 128 127
|
||||
3 130 131 128
|
||||
3 103 132 129
|
||||
3 133 131 130
|
||||
3 133 134 131
|
||||
3 103 135 132
|
||||
3 136 134 133
|
||||
3 136 137 134
|
||||
3 103 138 135
|
||||
3 139 137 136
|
||||
3 139 140 137
|
||||
3 103 141 138
|
||||
3 142 140 139
|
||||
3 142 143 140
|
||||
3 103 144 141
|
||||
3 145 143 142
|
||||
3 145 146 143
|
||||
3 103 147 144
|
||||
3 148 146 145
|
||||
3 149 150 148
|
||||
3 150 146 148
|
||||
3 149 151 150
|
||||
3 152 147 103
|
||||
3 153 147 152
|
||||
3 153 154 147
|
||||
3 153 155 154
|
||||
3 156 151 149
|
||||
3 153 157 155
|
||||
3 158 151 156
|
||||
3 153 159 157
|
||||
3 160 151 158
|
||||
3 153 161 159
|
||||
3 162 151 160
|
||||
3 153 163 161
|
||||
3 164 151 162
|
||||
3 153 165 163
|
||||
3 166 151 164
|
||||
3 153 167 165
|
||||
3 168 151 166
|
||||
3 153 169 167
|
||||
3 170 151 168
|
||||
3 153 171 169
|
||||
3 172 151 170
|
||||
3 153 173 171
|
||||
3 174 151 172
|
||||
3 153 175 173
|
||||
3 176 151 174
|
||||
3 177 151 176
|
||||
3 177 178 151
|
||||
3 177 179 178
|
||||
3 180 153 181
|
||||
3 180 175 153
|
||||
3 180 182 175
|
||||
3 183 179 177
|
||||
3 184 182 180
|
||||
3 184 185 182
|
||||
3 186 179 183
|
||||
3 187 185 184
|
||||
3 187 188 185
|
||||
3 189 179 186
|
||||
3 190 188 187
|
||||
3 190 191 188
|
||||
3 192 179 189
|
||||
3 193 191 190
|
||||
3 193 194 191
|
||||
3 195 179 192
|
||||
3 196 194 193
|
||||
3 196 197 194
|
||||
3 198 179 195
|
||||
3 199 197 196
|
||||
3 199 200 197
|
||||
3 201 179 198
|
||||
3 202 200 199
|
||||
3 202 203 200
|
||||
3 204 179 201
|
||||
3 205 203 202
|
||||
3 205 206 203
|
||||
3 207 179 204
|
||||
3 208 206 205
|
||||
3 208 209 206
|
||||
3 210 179 207
|
||||
3 211 209 208
|
||||
3 211 212 209
|
||||
3 213 179 210
|
||||
3 214 212 211
|
||||
3 214 215 212
|
||||
3 216 179 213
|
||||
3 217 215 214
|
||||
3 217 218 215
|
||||
3 219 218 217
|
||||
3 220 179 216
|
||||
3 219 221 218
|
||||
3 222 221 219
|
||||
3 223 179 220
|
||||
3 224 221 222
|
||||
3 224 225 221
|
||||
3 225 226 221
|
||||
3 227 225 224
|
||||
3 228 229 223
|
||||
3 229 179 223
|
||||
3 230 231 227
|
||||
3 231 225 227
|
||||
3 228 232 229
|
||||
3 230 233 231
|
||||
3 234 226 225
|
||||
3 234 235 226
|
||||
3 236 233 230
|
||||
3 237 232 228
|
||||
3 238 233 236
|
||||
3 239 240 241
|
||||
3 242 233 238
|
||||
3 243 232 237
|
||||
3 234 244 235
|
||||
3 245 233 242
|
||||
3 243 246 232
|
||||
3 246 247 232
|
||||
3 247 248 232
|
||||
3 248 249 232
|
||||
3 249 250 232
|
||||
3 250 251 232
|
||||
3 252 233 245
|
||||
3 253 233 252
|
||||
3 239 253 240
|
||||
3 239 233 253
|
||||
3 234 254 244
|
||||
3 234 255 254
|
||||
3 234 256 255
|
||||
3 257 233 239
|
||||
3 234 258 256
|
||||
3 234 259 258
|
||||
3 234 260 259
|
||||
3 261 257 262
|
||||
3 261 263 257
|
||||
3 263 233 257
|
||||
3 263 234 233
|
||||
3 263 260 234
|
||||
3 263 264 260
|
||||
3 261 265 263
|
||||
3 266 264 263
|
||||
3 267 264 266
|
||||
3 268 264 267
|
||||
3 269 264 268
|
||||
3 270 264 269
|
||||
3 271 264 270
|
||||
3 272 264 271
|
||||
3 273 264 272
|
||||
3 274 264 273
|
||||
3 275 264 274
|
||||
3 276 264 275
|
||||
3 277 264 276
|
||||
3 278 264 277
|
||||
3 278 279 264
|
||||
3 261 280 265
|
||||
3 281 279 278
|
||||
3 281 282 279
|
||||
3 261 283 280
|
||||
3 284 282 281
|
||||
3 284 285 282
|
||||
3 261 286 283
|
||||
3 287 285 284
|
||||
3 287 288 285
|
||||
3 261 289 286
|
||||
3 290 288 287
|
||||
3 290 291 288
|
||||
3 261 292 289
|
||||
3 293 291 290
|
||||
3 293 294 291
|
||||
3 261 295 292
|
||||
3 296 294 293
|
||||
3 296 297 294
|
||||
3 261 298 295
|
||||
3 299 297 296
|
||||
3 299 300 297
|
||||
3 261 301 298
|
||||
3 302 300 299
|
||||
3 302 303 300
|
||||
3 261 304 301
|
||||
3 305 303 302
|
||||
3 305 306 303
|
||||
3 261 307 304
|
||||
3 308 306 305
|
||||
3 308 309 306
|
||||
3 261 310 307
|
||||
3 311 309 308
|
||||
3 311 312 309
|
||||
3 313 312 311
|
||||
3 314 312 313
|
||||
3 315 312 314
|
||||
3 316 312 315
|
||||
3 317 312 316
|
||||
3 318 312 317
|
||||
3 319 312 318
|
||||
3 320 312 319
|
||||
3 321 312 320
|
||||
3 322 312 321
|
||||
3 323 312 322
|
||||
3 324 325 326
|
||||
3 324 327 325
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,11 +9,10 @@ in vec2 vertexUV;
|
||||
uniform vec3 iResolution; // viewport image resolution (in pixels)
|
||||
uniform mat4 iTransform; // image transformation
|
||||
uniform vec4 color;
|
||||
uniform vec4 uv;
|
||||
|
||||
// Image Shader
|
||||
uniform sampler2D iChannel0; // input channel (texture id).
|
||||
uniform sampler2D iChannel1; // input mask
|
||||
uniform sampler2D iChannel0; // input channel (texture id).
|
||||
uniform sampler2D iChannel1; // input mask
|
||||
uniform float stipple;
|
||||
|
||||
void main()
|
||||
@@ -28,11 +27,11 @@ void main()
|
||||
// read mask intensity as average of RGB
|
||||
float maskIntensity = dot(texture(iChannel1, vertexUV).rgb, vec3(1.0/3.0));
|
||||
|
||||
// alpha is a mix of texture alpha, vertex alpha, and uniform alpha affected by stippling
|
||||
// alpha is a mix of texture, vertex, uniform and mask alpha, affected by stippling
|
||||
float A = textureColor.a * vertexColor.a * color.a * maskIntensity;
|
||||
A += textureColor.a * stipple * ( int(gl_FragCoord.x + gl_FragCoord.y) % 2 );
|
||||
A = clamp(A, 0.0, 1.0);
|
||||
|
||||
// output RGBA
|
||||
FragColor = vec4(RGB, clamp(A, 0.0, 1.0) );
|
||||
// FragColor = texture(iChannel1, vertexUV);
|
||||
// output RGB with Alpha pre-multiplied
|
||||
FragColor = vec4(RGB * A, A);
|
||||
}
|
||||
|
||||
@@ -6,9 +6,9 @@ in vec4 vertexColor;
|
||||
in vec2 vertexUV;
|
||||
|
||||
// from General Shader
|
||||
uniform vec3 iResolution; // viewport resolution (in pixels)
|
||||
uniform vec3 iResolution; // viewport image resolution (in pixels)
|
||||
uniform mat4 iTransform; // image transformation
|
||||
uniform vec4 color;
|
||||
uniform vec4 uv;
|
||||
|
||||
// Image Shader
|
||||
uniform sampler2D iChannel0; // input channel (texture id).
|
||||
@@ -18,18 +18,19 @@ uniform float stipple;
|
||||
void main()
|
||||
{
|
||||
// adjust UV
|
||||
vec2 texcoord = vec2(uv.x, uv.y) + vertexUV * vec2(uv.z - uv.x, uv.w - uv.y);
|
||||
vec4 texcoord = iTransform * vec4(vertexUV.x, vertexUV.y, 0.0, 1.0);
|
||||
|
||||
// color is a mix of texture (manipulated with brightness & contrast), vertex and uniform colors
|
||||
vec4 textureColor = texture(iChannel0, texcoord);
|
||||
// color texture
|
||||
vec4 textureColor = texture(iChannel0, texcoord.xy);
|
||||
vec3 RGB = textureColor.rgb * vertexColor.rgb * color.rgb;
|
||||
|
||||
// alpha is a mix of texture alpha, vertex alpha, and uniform alpha affected by stippling
|
||||
float maskIntensity = dot(texture(iChannel1, vertexUV).rgb, vec3(1.0/3.0));
|
||||
// alpha is a mix of texture, vertex, uniform and mask alpha
|
||||
float A = textureColor.a * vertexColor.a * color.a;
|
||||
|
||||
float A = textureColor.a * vertexColor.a * color.a * maskIntensity;
|
||||
A -= stipple * ( int(gl_FragCoord.x + gl_FragCoord.y) % 2 > 0 ? 0.05 : 0.95 );
|
||||
// post-reversing premultiplication of alpha
|
||||
float invA = 1.0 / clamp( A , 0.000001, 10.0);
|
||||
// float invA = 1.0 / (A*A);
|
||||
|
||||
// output RGBA
|
||||
FragColor = vec4(RGB, clamp(A, 0.0, 1.0) );
|
||||
// output
|
||||
FragColor = vec4( RGB * invA, A);
|
||||
}
|
||||
|
||||
@@ -326,8 +326,7 @@ void main(void)
|
||||
float alpha = clamp(ma * color.a, 0.0, 1.0);
|
||||
|
||||
// read color & apply basic filterid
|
||||
vec3 transformedRGB;
|
||||
transformedRGB = apply_filter();
|
||||
vec3 transformedRGB = apply_filter();
|
||||
|
||||
// chromakey
|
||||
alpha -= mix( 0.0, 1.0 - alphachromakey( transformedRGB, chromakey.rgb, chromadelta), float(chromadelta > 0.0001) );
|
||||
@@ -355,6 +354,7 @@ void main(void)
|
||||
|
||||
// luma key
|
||||
alpha -= mix( 0.0, step( transformedHSL.z, lumakey ), float(lumakey > EPSILON));
|
||||
alpha = clamp(alpha, 0.0, 1.0);
|
||||
|
||||
// level threshold
|
||||
transformedHSL = mix( transformedHSL, vec3(0.0, 0.0, 0.95 - step( transformedHSL.z, threshold )), float(threshold > EPSILON));
|
||||
@@ -366,7 +366,7 @@ void main(void)
|
||||
transformedRGB = LevelsControl(transformedRGB, levels.x, gamma.rgb * gamma.a, levels.y, levels.z, levels.w);
|
||||
|
||||
// apply base color and alpha for final fragment color
|
||||
FragColor = vec4(transformedRGB * vertexColor.rgb * color.rgb, clamp(alpha, 0.0, 1.0) );
|
||||
FragColor = vec4(transformedRGB * vertexColor.rgb * color.rgb * alpha, alpha);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,11 @@ float sdCircle( in vec2 p, in float b)
|
||||
return ( length( p ) / b );
|
||||
}
|
||||
|
||||
float sdElipse( in vec2 p, in float b)
|
||||
{
|
||||
return ( length( p ) / b );
|
||||
}
|
||||
|
||||
const mat3 KERNEL = mat3( 0.0625, 0.125, 0.0625,
|
||||
0.125, 0.25, 0.125,
|
||||
0.0625, 0.125, 0.0625);
|
||||
|
||||
@@ -7,11 +7,11 @@ in vec4 vertexColor;
|
||||
uniform vec3 iResolution; // viewport resolution (in pixels)
|
||||
|
||||
uniform vec4 color; // drawing color
|
||||
uniform vec4 uv;
|
||||
|
||||
void main()
|
||||
{
|
||||
FragColor = color * vertexColor;
|
||||
vec4 c = color * vertexColor;
|
||||
FragColor = vec4( c.r * c.a, c.g * c.a, c.b * c.a, c.a);
|
||||
}
|
||||
|
||||
// RGBA 2 YUVA converter
|
||||
|
||||
Reference in New Issue
Block a user