Work-in progress scaling of sources in geometry view

This commit is contained in:
brunoherbelin
2020-05-14 17:52:33 +02:00
parent 0e1cbd33f2
commit a0d9b81620
12 changed files with 237 additions and 159 deletions

View File

@@ -265,6 +265,8 @@ set(VMIX_RSC_FILES
./rsc/mesh/border_round.ply
./rsc/mesh/border_sharp.ply
./rsc/mesh/border_large_round.ply
./rsc/mesh/border_handles_sharp.ply
./rsc/mesh/border_handles_overlay.ply
./rsc/mesh/border_large_sharp.ply
./rsc/mesh/border_vertical_overlay.ply
./rsc/mesh/circle.ply

View File

@@ -225,6 +225,10 @@ void MediaPlayer::close()
GstClockTime MediaPlayer::duration()
{
// cannot play an image
if (isimage_)
return GST_CLOCK_TIME_NONE;
if (duration_ == GST_CLOCK_TIME_NONE && pipeline_ != nullptr) {
gint64 d = GST_CLOCK_TIME_NONE;
if ( gst_element_query_duration(pipeline_, GST_FORMAT_TIME, &d) )

View File

@@ -377,24 +377,28 @@ void Mesh::accept(Visitor& v)
Frame::Frame(Style style) : Node()
{
overlay_ = nullptr;
shadow_ = nullptr;
color = glm::vec4( 1.f, 1.f, 1.f, 1.f);
switch (style) {
case SHARP_LARGE:
border_ = new Mesh("mesh/border_large_sharp.ply");
case SHARP_HANDLES:
border_ = new Mesh("mesh/border_handles_sharp.ply");
overlay_ = new Mesh("mesh/border_handles_overlay.ply");
shadow_ = new Mesh("mesh/shadow.ply", "images/shadow.png");
break;
case SHARP_THIN:
border_ = new Mesh("mesh/border_sharp.ply");
break;
case ROUND_LARGE:
border_ = new Mesh("mesh/border_large_round.ply");
shadow_ = new Mesh("mesh/shadow.ply", "images/shadow.png");
break;
default:
case ROUND_THIN:
border_ = new Mesh("mesh/border_round.ply");
shadow_ = new Mesh("mesh/shadow.ply", "images/shadow.png");
break;
}
overlay_ = nullptr;
shadow_ = new Mesh("mesh/shadow.ply", "images/shadow.png");
color = glm::vec4( 1.f, 1.f, 1.f, 1.f);
}
Frame::~Frame()
@@ -416,6 +420,7 @@ void Frame::draw(glm::mat4 modelview, glm::mat4 projection)
if ( visible_ ) { // not absolutely necessary but saves some CPU time..
// shadow
if(shadow_)
shadow_->draw( modelview * transform_, projection);
if (overlay_) {

2
Mesh.h
View File

@@ -41,7 +41,7 @@ class Frame : public Node
public:
typedef enum { ROUND_THIN = 0, ROUND_LARGE, SHARP_THIN, SHARP_LARGE } Style;
typedef enum { ROUND_THIN = 0, ROUND_LARGE, SHARP_THIN, SHARP_HANDLES } Style;
Frame(Style style);
~Frame();

View File

@@ -19,7 +19,7 @@ void PickingVisitor::visit(Node &n)
{
modelview_ *= n.transform_;
// modelview_ = modelview_ * transform(n.translation_, n.rotation_, n.scale_);
// modelview_ *= transform(n.translation_, n.rotation_, n.scale_);
// Log::Info("Node %d", n.id());
// Log::Info("%s", glm::to_string(modelview_).c_str());
}
@@ -65,7 +65,7 @@ void PickingVisitor::visit(Surface &n)
// if P is inside [LL UR] rectangle:
if ( P.x > LL.x && P.x < UR.x && P.y > LL.y && P.y < UR.y )
// add this surface to the nodes picked
nodes_.push_back(&n);
nodes_.push_back( std::pair(&n, glm::vec2(P)) );
}
void PickingVisitor::visit(LineSquare &)
@@ -89,7 +89,7 @@ void PickingVisitor::visit(LineCircle &n)
float r = glm::length( glm::vec2(P) );
if ( r < 1.02 && r > 0.98)
nodes_.push_back(&n);
nodes_.push_back( std::pair(&n, glm::vec2(P)) );
}
void PickingVisitor::visit(Scene &n)

View File

@@ -3,6 +3,7 @@
#include <glm/glm.hpp>
#include <vector>
#include <utility>
#include "Visitor.h"
@@ -10,11 +11,13 @@ class PickingVisitor: public Visitor
{
glm::vec2 point_;
glm::mat4 modelview_;
std::vector<Node *> nodes_;
std::vector< std::pair<Node *, glm::vec2> > nodes_;
public:
PickingVisitor(glm::vec2 coordinates);
std::vector<Node *> picked() { return nodes_; }
std::vector< std::pair<Node *, glm::vec2> > picked() { return nodes_; }
// Elements of Scene
void visit(Scene& n);

View File

@@ -33,13 +33,16 @@ Source::Source(const std::string &name) : name_(name), initialized_(false)
// default geometry nodes
groups_[View::GEOMETRY] = new Group;
frame = new Frame(Frame::SHARP_THIN);
frame->translation_.z = 0.1;
frame->color = glm::vec4( 0.8f, 0.8f, 0.0f, 0.9f);
groups_[View::GEOMETRY]->attach(frame);
// will be associated to nodes later
blendingshader_ = new ImageShader;
rendershader_ = new ImageProcessingShader;
renderbuffer_ = nullptr;
rendersurface_ = nullptr;
overlay_ = nullptr;
}
Source::~Source()
@@ -73,8 +76,10 @@ void Source::accept(Visitor& v)
void Source::setOverlayVisible(bool on)
{
if (overlay_)
overlay_->visible_ = on;
// if (overlay_)
// overlay_->visible_ = on;
for (auto o = overlays_.begin(); o != overlays_.end(); o++)
(*o).second->visible_ = on;
}
bool hasNode::operator()(const Source* elem) const
@@ -107,13 +112,18 @@ MediaSource::MediaSource(const std::string &name) : Source(name), path_("")
mediasurface_ = new Surface(rendershader_);
// extra overlay for mixing view
overlay_ = new Frame(Frame::ROUND_LARGE);
overlay_->overlay_ = new Mesh("mesh/icon_video.ply");
overlay_->translation_.z = 0.1;
overlay_->color = glm::vec4( 0.8f, 0.8f, 0.0f, 1.f);
overlay_->visible_ = false;
groups_[View::MIXING]->attach(overlay_);
overlays_[View::MIXING] = new Frame(Frame::ROUND_LARGE);
overlays_[View::MIXING]->translation_.z = 0.1;
overlays_[View::MIXING]->color = glm::vec4( 0.8f, 0.8f, 0.0f, 1.f);
overlays_[View::MIXING]->visible_ = false;
groups_[View::MIXING]->attach(overlays_[View::MIXING]);
// extra overlay for geometry view
overlays_[View::GEOMETRY] = new Frame(Frame::SHARP_HANDLES);
overlays_[View::GEOMETRY]->translation_.z = 0.1;
overlays_[View::GEOMETRY]->color = glm::vec4( 0.8f, 0.8f, 0.0f, 1.f);
overlays_[View::GEOMETRY]->visible_ = false;
groups_[View::GEOMETRY]->attach(overlays_[View::GEOMETRY]);
}
MediaSource::~MediaSource()
@@ -179,13 +189,20 @@ void MediaSource::init()
ImageShader *is = static_cast<ImageShader *>(surfacemix->shader());
if (is) is->stipple = 1.0;
groups_[View::MIXING]->attach(surfacemix);
if (mediaplayer_->duration() == GST_CLOCK_TIME_NONE)
overlays_[View::MIXING]->overlay_ = new Mesh("mesh/icon_image.ply");
else
overlays_[View::MIXING]->overlay_ = new Mesh("mesh/icon_video.ply");
// scale all mixing nodes to match aspect ratio of the media
for (NodeSet::iterator node = groups_[View::MIXING]->begin();
node != groups_[View::MIXING]->end(); node++) {
(*node)->scale_.x = mediaplayer_->aspectRatio();
}
for (NodeSet::iterator node = groups_[View::GEOMETRY]->begin();
node != groups_[View::GEOMETRY]->end(); node++) {
(*node)->scale_.x = mediaplayer_->aspectRatio();
}
// mixingshader_->mask = ImageShader::mask_presets["Halo"];
// done init once and for all

View File

@@ -80,7 +80,7 @@ protected:
ImageShader *blendingshader_;
// overlay to be displayed on top of source
Frame *overlay_;
std::map<View::Mode, Frame*> overlays_;
};
// TODO : source set sorted by shader

View File

@@ -306,10 +306,8 @@ void UserInterface::handleMouse()
{
// drag current source
Mixer::manager().currentView()->grab( mouseclic[ImGuiMouseButton_Left], mousepos, current);
}
else {
// Log::Info("Mouse drag (%.1f,%.1f)(%.1f,%.1f)", io.MouseClickedPos[0].x, io.MouseClickedPos[0].y, io.MousePos.x, io.MousePos.y);
// Selection area
ImGui::GetBackgroundDrawList()->AddRect(io.MouseClickedPos[ImGuiMouseButton_Left], io.MousePos,
@@ -318,9 +316,9 @@ void UserInterface::handleMouse()
ImGui::GetColorU32(ImGuiCol_ResizeGripHovered, 0.3f));
}
}
else if ( ImGui::IsMouseDown(ImGuiMouseButton_Left)) {
else if ( ImGui::IsMouseDown(ImGuiMouseButton_Left) ) {
// get coordinate in world view of mouse cursor
// get coordinate in world coordinate of mouse cursor
glm::vec3 point = Rendering::manager().unProject(mousepos);
// picking visitor traverses the scene
@@ -331,7 +329,7 @@ void UserInterface::handleMouse()
if (pv.picked().empty())
Mixer::manager().unsetCurrentSource();
else
Mixer::manager().setCurrentSource(pv.picked().back());
Mixer::manager().setCurrentSource(pv.picked().back().first);
}
else if ( ImGui::IsMouseReleased(ImGuiMouseButton_Left) )

View File

@@ -11,6 +11,7 @@
#include "View.h"
#include "Source.h"
#include "Primitives.h"
#include "PickingVisitor.h"
#include "Resource.h"
#include "Mesh.h"
#include "Mixer.h"
@@ -69,7 +70,6 @@ MixingView::MixingView() : View(MIXING)
MixingView::~MixingView()
{
// TODO : verify that scene is deleted, and all children with it
}
@@ -238,7 +238,6 @@ GeometryView::GeometryView() : View(GEOMETRY)
GeometryView::~GeometryView()
{
// TODO : verify that scene is deleted, and all children with it
}
@@ -291,18 +290,68 @@ void GeometryView::grab (glm::vec2 from, glm::vec2 to, Source *s)
Group *sourceNode = s->group(View::GEOMETRY);
static glm::vec3 start_translation = glm::vec3(0.f);
static glm::vec3 start_scale = glm::vec3(0.f);
static glm::vec2 start_position = glm::vec2(0.f);
if ( start_position != from ) {
start_position = from;
start_translation = sourceNode->translation_;
start_scale = sourceNode->scale_;
}
// unproject
// unproject in scene coordinates
glm::vec3 gl_Position_from = Rendering::manager().unProject(from, scene.root()->transform_);
glm::vec3 gl_Position_to = Rendering::manager().unProject(to, scene.root()->transform_);
// compute delta translation
// coordinate in source
glm::mat4 modelview;
glm::vec2 clicpos(0.f);
PickingVisitor pv(gl_Position_to);
sourceNode->accept(pv);
if (!pv.picked().empty()){
clicpos = pv.picked().back().second;
modelview = pv.picked().back().first->transform_;
// Log::Info("clic pos source %.2f. %.2f", clicpos.x, clicpos.y);
}
// glm::vec4 P = glm::inverse(sourceNode->transform_ * modelview) * glm::vec4( gl_Position_to, 1.f );
if ( ABS(clicpos.x)>0.9f && ABS(clicpos.y)>0.9f )
{
// clic inside corner
Log::Info("corner %.2f. %.2f", clicpos.x, clicpos.y);
// Log::Info(" %.2f. %.2f", P.x, P.y);
// glm::vec2 topos = clicpos;
// PickingVisitor pv(gl_Position_from);
// sourceNode->accept(pv);
// if (!pv.picked().empty()){
// topos = pv.picked().back().second;
//// Log::Info("scale %.2f. %.2f", topos.x, topos.y);
// }
glm::vec4 P = glm::inverse(sourceNode->transform_ * modelview) * glm::vec4( gl_Position_from, 1.f );
sourceNode->scale_ = start_scale * (glm::vec3(clicpos, 1.f) / glm::vec3(P) );
Log::Info("scale %.2f. %.2f", sourceNode->scale_.x, sourceNode->scale_.y);
Log::Info(" %.2f. %.2f", start_scale.x, start_scale.y);
}
else if ( ABS(clicpos.x)>0.95f && ABS(clicpos.y)<0.05f )
{
// clic resize horizontal
Log::Info("H resize %.2f. %.2f", clicpos.x, clicpos.y);
}
else if ( ABS(clicpos.x)<0.05f && ABS(clicpos.y)>0.95f )
{
// clic resize vertical
Log::Info("V resize %.2f. %.2f", clicpos.x, clicpos.y);
}
else
// clic inside source: compute delta translation
sourceNode->translation_ = start_translation + gl_Position_to - gl_Position_from;
}

View File

@@ -12,67 +12,67 @@ property uchar alpha
element face 57
property list uchar uint vertex_indices
end_header
0.640531 -0.899390 0.000000 255 255 255 255
0.662011 -0.727588 0.000000 255 255 255 255
0.640531 -0.706113 0.000000 255 255 255 255
0.898289 -0.706113 0.000000 255 255 255 255
0.876809 -0.727588 0.000000 255 255 255 255
0.898289 -0.899390 0.000000 255 255 255 255
0.662011 -0.877915 0.000000 255 255 255 255
0.876809 -0.877915 0.000000 255 255 255 255
0.708155 -0.749211 0.000000 255 255 255 255
0.712525 -0.749211 0.000000 255 255 255 255
0.710340 -0.749063 0.000000 255 255 255 255
0.714621 -0.749639 0.000000 255 255 255 255
0.706059 -0.749639 0.000000 255 255 255 255
0.716609 -0.750330 0.000000 255 255 255 255
0.704072 -0.750330 0.000000 255 255 255 255
0.718469 -0.751263 0.000000 255 255 255 255
0.702211 -0.751263 0.000000 255 255 255 255
0.720183 -0.752421 0.000000 255 255 255 255
0.700498 -0.752421 0.000000 255 255 255 255
0.721730 -0.753783 0.000000 255 255 255 255
0.698951 -0.753783 0.000000 255 255 255 255
0.723092 -0.755330 0.000000 255 255 255 255
0.697589 -0.755330 0.000000 255 255 255 255
0.724250 -0.757043 0.000000 255 255 255 255
0.696431 -0.757043 0.000000 255 255 255 255
0.725183 -0.758902 0.000000 255 255 255 255
0.695497 -0.758902 0.000000 255 255 255 255
0.725874 -0.760890 0.000000 255 255 255 255
0.694806 -0.760890 0.000000 255 255 255 255
0.726303 -0.762985 0.000000 255 255 255 255
0.694378 -0.762985 0.000000 255 255 255 255
0.726450 -0.765170 0.000000 255 255 255 255
0.694230 -0.765170 0.000000 255 255 255 255
0.694378 -0.767357 0.000000 255 255 255 255
0.726303 -0.767357 0.000000 255 255 255 255
0.694806 -0.769454 0.000000 255 255 255 255
0.725874 -0.769454 0.000000 255 255 255 255
0.695497 -0.771442 0.000000 255 255 255 255
0.725183 -0.771442 0.000000 255 255 255 255
0.763836 -0.813489 0.000000 255 255 255 255
0.844589 -0.856440 0.000000 255 255 255 255
0.790890 -0.770539 0.000000 255 255 255 255
0.696431 -0.773302 0.000000 255 255 255 255
0.724250 -0.773302 0.000000 255 255 255 255
0.697589 -0.775015 0.000000 255 255 255 255
0.723092 -0.775015 0.000000 255 255 255 255
0.698951 -0.776561 0.000000 255 255 255 255
0.721730 -0.776561 0.000000 255 255 255 255
0.700498 -0.777922 0.000000 255 255 255 255
0.720183 -0.777922 0.000000 255 255 255 255
0.702211 -0.779079 0.000000 255 255 255 255
0.718469 -0.779079 0.000000 255 255 255 255
0.704072 -0.780011 0.000000 255 255 255 255
0.716609 -0.780011 0.000000 255 255 255 255
0.706059 -0.780701 0.000000 255 255 255 255
0.714621 -0.780701 0.000000 255 255 255 255
0.708155 -0.781129 0.000000 255 255 255 255
0.712525 -0.781129 0.000000 255 255 255 255
0.710340 -0.781276 0.000000 255 255 255 255
0.694230 -0.856440 0.000000 255 255 255 255
0.737190 -0.792443 0.000000 255 255 255 255
-0.124093 1.079884 0.000000 255 255 255 255
-0.103797 1.242214 0.000000 255 255 255 255
-0.124093 1.262506 0.000000 255 255 255 255
0.119454 1.262506 0.000000 255 255 255 255
0.099159 1.242214 0.000000 255 255 255 255
0.119454 1.079884 0.000000 255 255 255 255
-0.103797 1.100175 0.000000 255 255 255 255
0.099159 1.100175 0.000000 255 255 255 255
-0.060197 1.221784 0.000000 255 255 255 255
-0.056067 1.221784 0.000000 255 255 255 255
-0.058132 1.221923 0.000000 255 255 255 255
-0.054087 1.221379 0.000000 255 255 255 255
-0.062177 1.221379 0.000000 255 255 255 255
-0.052209 1.220727 0.000000 255 255 255 255
-0.064055 1.220727 0.000000 255 255 255 255
-0.050451 1.219844 0.000000 255 255 255 255
-0.065813 1.219844 0.000000 255 255 255 255
-0.048832 1.218751 0.000000 255 255 255 255
-0.067432 1.218751 0.000000 255 255 255 255
-0.047370 1.217464 0.000000 255 255 255 255
-0.068894 1.217464 0.000000 255 255 255 255
-0.046083 1.216002 0.000000 255 255 255 255
-0.070181 1.216002 0.000000 255 255 255 255
-0.044989 1.214384 0.000000 255 255 255 255
-0.071274 1.214384 0.000000 255 255 255 255
-0.044107 1.212627 0.000000 255 255 255 255
-0.072157 1.212627 0.000000 255 255 255 255
-0.043454 1.210749 0.000000 255 255 255 255
-0.072810 1.210749 0.000000 255 255 255 255
-0.043049 1.208769 0.000000 255 255 255 255
-0.073215 1.208769 0.000000 255 255 255 255
-0.042910 1.206705 0.000000 255 255 255 255
-0.073354 1.206705 0.000000 255 255 255 255
-0.073215 1.204638 0.000000 255 255 255 255
-0.043049 1.204638 0.000000 255 255 255 255
-0.072810 1.202657 0.000000 255 255 255 255
-0.043454 1.202657 0.000000 255 255 255 255
-0.072157 1.200779 0.000000 255 255 255 255
-0.044107 1.200778 0.000000 255 255 255 255
-0.007586 1.161049 0.000000 255 255 255 255
0.068715 1.120467 0.000000 255 255 255 255
0.017976 1.201632 0.000000 255 255 255 255
-0.071274 1.199021 0.000000 255 255 255 255
-0.044989 1.199021 0.000000 255 255 255 255
-0.070181 1.197403 0.000000 255 255 255 255
-0.046083 1.197403 0.000000 255 255 255 255
-0.068894 1.195941 0.000000 255 255 255 255
-0.047370 1.195941 0.000000 255 255 255 255
-0.067432 1.194655 0.000000 255 255 255 255
-0.048832 1.194655 0.000000 255 255 255 255
-0.065813 1.193563 0.000000 255 255 255 255
-0.050451 1.193563 0.000000 255 255 255 255
-0.064055 1.192681 0.000000 255 255 255 255
-0.052209 1.192681 0.000000 255 255 255 255
-0.062177 1.192029 0.000000 255 255 255 255
-0.054087 1.192029 0.000000 255 255 255 255
-0.060197 1.191625 0.000000 255 255 255 255
-0.056067 1.191625 0.000000 255 255 255 255
-0.058132 1.191486 0.000000 255 255 255 255
-0.073354 1.120467 0.000000 255 255 255 255
-0.032763 1.180935 0.000000 255 255 255 255
3 0 1 2
3 1 3 2
3 1 4 3

View File

@@ -12,70 +12,70 @@ property uchar alpha
element face 80
property list uchar uint vertex_indices
end_header
0.658177 -0.900641 0.000000 255 255 255 255
0.678184 -0.680614 0.000000 255 255 255 255
0.658177 -0.680614 0.000000 255 255 255 255
0.678184 -0.700617 0.000000 255 255 255 255
0.698190 -0.700617 0.000000 255 255 255 255
0.718197 -0.680614 0.000000 255 255 255 255
0.698190 -0.680614 0.000000 255 255 255 255
0.718197 -0.720619 0.000000 255 255 255 255
0.838237 -0.720619 0.000000 255 255 255 255
0.858243 -0.680614 0.000000 255 255 255 255
0.838237 -0.680614 0.000000 255 255 255 255
0.858243 -0.700617 0.000000 255 255 255 255
0.878250 -0.700617 0.000000 255 255 255 255
0.898256 -0.680614 0.000000 255 255 255 255
0.878250 -0.680614 0.000000 255 255 255 255
0.898256 -0.900641 0.000000 255 255 255 255
0.678184 -0.720619 0.000000 255 255 255 255
0.858243 -0.720619 0.000000 255 255 255 255
0.878250 -0.720619 0.000000 255 255 255 255
0.678184 -0.740622 0.000000 255 255 255 255
0.698190 -0.720619 0.000000 255 255 255 255
0.698190 -0.740622 0.000000 255 255 255 255
0.858243 -0.740622 0.000000 255 255 255 255
0.878250 -0.740622 0.000000 255 255 255 255
0.678184 -0.760624 0.000000 255 255 255 255
0.718197 -0.750623 0.000000 255 255 255 255
0.838237 -0.750623 0.000000 255 255 255 255
0.878250 -0.760624 0.000000 255 255 255 255
0.698190 -0.760624 0.000000 255 255 255 255
0.718197 -0.830632 0.000000 255 255 255 255
0.838237 -0.830632 0.000000 255 255 255 255
0.858243 -0.760624 0.000000 255 255 255 255
0.678184 -0.780626 0.000000 255 255 255 255
0.698190 -0.780626 0.000000 255 255 255 255
0.858243 -0.780626 0.000000 255 255 255 255
0.878250 -0.780626 0.000000 255 255 255 255
0.678184 -0.800629 0.000000 255 255 255 255
0.698190 -0.800629 0.000000 255 255 255 255
0.858243 -0.800629 0.000000 255 255 255 255
0.878250 -0.800629 0.000000 255 255 255 255
0.678184 -0.820631 0.000000 255 255 255 255
0.698190 -0.820631 0.000000 255 255 255 255
0.858243 -0.820631 0.000000 255 255 255 255
0.878250 -0.820631 0.000000 255 255 255 255
0.678184 -0.840634 0.000000 255 255 255 255
0.878250 -0.840634 0.000000 255 255 255 255
0.678184 -0.860636 0.000000 255 255 255 255
0.698190 -0.840634 0.000000 255 255 255 255
0.698190 -0.860636 0.000000 255 255 255 255
0.858243 -0.840634 0.000000 255 255 255 255
0.858243 -0.860636 0.000000 255 255 255 255
0.878250 -0.860636 0.000000 255 255 255 255
0.678184 -0.880638 0.000000 255 255 255 255
0.718197 -0.860636 0.000000 255 255 255 255
0.698190 -0.880638 0.000000 255 255 255 255
0.718197 -0.900641 0.000000 255 255 255 255
0.838237 -0.860636 0.000000 255 255 255 255
0.838237 -0.900641 0.000000 255 255 255 255
0.858243 -0.880638 0.000000 255 255 255 255
0.878250 -0.880638 0.000000 255 255 255 255
0.678184 -0.900641 0.000000 255 255 255 255
0.698190 -0.900641 0.000000 255 255 255 255
0.858243 -0.900641 0.000000 255 255 255 255
0.878250 -0.900641 0.000000 255 255 255 255
-0.122371 1.059774 0.000000 255 255 255 255
-0.102365 1.279800 0.000000 255 255 255 255
-0.122371 1.279800 0.000000 255 255 255 255
-0.102365 1.259798 0.000000 255 255 255 255
-0.082358 1.259798 0.000000 255 255 255 255
-0.062351 1.279800 0.000000 255 255 255 255
-0.082358 1.279800 0.000000 255 255 255 255
-0.062351 1.239795 0.000000 255 255 255 255
0.057688 1.239795 0.000000 255 255 255 255
0.077695 1.279800 0.000000 255 255 255 255
0.057688 1.279800 0.000000 255 255 255 255
0.077695 1.259798 0.000000 255 255 255 255
0.097701 1.259798 0.000000 255 255 255 255
0.117708 1.279800 0.000000 255 255 255 255
0.097701 1.279800 0.000000 255 255 255 255
0.117708 1.059774 0.000000 255 255 255 255
-0.102365 1.239795 0.000000 255 255 255 255
0.077695 1.239795 0.000000 255 255 255 255
0.097701 1.239795 0.000000 255 255 255 255
-0.102365 1.219793 0.000000 255 255 255 255
-0.082358 1.239795 0.000000 255 255 255 255
-0.082358 1.219793 0.000000 255 255 255 255
0.077695 1.219793 0.000000 255 255 255 255
0.097701 1.219793 0.000000 255 255 255 255
-0.102365 1.199791 0.000000 255 255 255 255
-0.062351 1.209792 0.000000 255 255 255 255
0.057688 1.209792 0.000000 255 255 255 255
0.097701 1.199791 0.000000 255 255 255 255
-0.082358 1.199791 0.000000 255 255 255 255
-0.062351 1.129782 0.000000 255 255 255 255
0.057688 1.129782 0.000000 255 255 255 255
0.077695 1.199791 0.000000 255 255 255 255
-0.102365 1.179788 0.000000 255 255 255 255
-0.082358 1.179788 0.000000 255 255 255 255
0.077695 1.179788 0.000000 255 255 255 255
0.097701 1.179788 0.000000 255 255 255 255
-0.102365 1.159786 0.000000 255 255 255 255
-0.082358 1.159786 0.000000 255 255 255 255
0.077695 1.159786 0.000000 255 255 255 255
0.097701 1.159786 0.000000 255 255 255 255
-0.102365 1.139784 0.000000 255 255 255 255
-0.082358 1.139784 0.000000 255 255 255 255
0.077695 1.139784 0.000000 255 255 255 255
0.097701 1.139784 0.000000 255 255 255 255
-0.102365 1.119781 0.000000 255 255 255 255
0.097701 1.119781 0.000000 255 255 255 255
-0.102365 1.099779 0.000000 255 255 255 255
-0.082358 1.119781 0.000000 255 255 255 255
-0.082358 1.099779 0.000000 255 255 255 255
0.077695 1.119781 0.000000 255 255 255 255
0.077695 1.099779 0.000000 255 255 255 255
0.097701 1.099779 0.000000 255 255 255 255
-0.102365 1.079776 0.000000 255 255 255 255
-0.062351 1.099779 0.000000 255 255 255 255
-0.082358 1.079776 0.000000 255 255 255 255
-0.062351 1.059774 0.000000 255 255 255 255
0.057688 1.099779 0.000000 255 255 255 255
0.057688 1.059774 0.000000 255 255 255 255
0.077695 1.079776 0.000000 255 255 255 255
0.097701 1.079776 0.000000 255 255 255 255
-0.102365 1.059774 0.000000 255 255 255 255
-0.082358 1.059774 0.000000 255 255 255 255
0.077695 1.059774 0.000000 255 255 255 255
0.097701 1.059774 0.000000 255 255 255 255
3 0 1 2
3 0 3 1
3 4 5 6