Improved user visual feedback on geometryview actions (rotation and

scaling).
This commit is contained in:
brunoherbelin
2020-09-09 23:39:08 +02:00
parent 32234c4d7c
commit a5545147f0
7 changed files with 179 additions and 258 deletions

View File

@@ -313,6 +313,7 @@ set(VMIX_RSC_FILES
./rsc/mesh/icon_unlock.ply
./rsc/mesh/icon_circle.ply
./rsc/mesh/icon_square.ply
./rsc/mesh/icon_cross.ply
./rsc/mesh/icon_clock.ply
./rsc/mesh/icon_grid.ply
./rsc/mesh/h_line.ply

View File

@@ -296,6 +296,7 @@ Symbol::Symbol(Type t, glm::vec3 pos) : Node(), type_(t)
icons[SQUARE] = new Mesh("mesh/icon_square.ply");
icons[CLOCK] = new Mesh("mesh/icon_clock.ply");
icons[GRID] = new Mesh("mesh/icon_grid.ply");
icons[CROSS] = new Mesh("mesh/icon_cross.ply");
icons[EMPTY] = new Mesh("mesh/icon_empty.ply");
}
@@ -322,10 +323,29 @@ void Symbol::draw(glm::mat4 modelview, glm::mat4 projection)
// set color
symbol_->shader()->color = color;
glm::mat4 ctm = modelview * transform_;
// correct for aspect ratio
glm::vec4 vec = ctm * glm::vec4(1.f, 1.0f, 0.f, 0.f);
ctm *= glm::scale(glm::identity<glm::mat4>(), glm::vec3( vec.y / vec.x, 1.f, 1.f));
// glm::mat4 ctm = modelview * transform_;
// // correct for aspect ratio
// glm::vec4 vec = ctm * glm::vec4(1.f, 1.0f, 0.f, 0.f);
// ctm *= glm::scale(glm::identity<glm::mat4>(), glm::vec3( vec.y / vec.x, 1.f, 1.f));
// rebuild a matrix with rotation (see handles) and translation from modelview + translation_
// and define scale to be 1, 1
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) );
// extract scaling
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::vec3 sca = glm::vec3(vec.y , vec.y, 1.f) * glm::vec3(scale_.y, scale_.y, 1.f);
glm::vec3 tran = glm::vec3(modelview[3][0], modelview[3][1], modelview[3][2]) ;
tran += translation_ * glm::vec3(vec);
rot.z += rotation_.z;
ctm = GlmToolkit::transform(tran, rot, sca);
symbol_->draw( ctm, projection);
}

View File

@@ -57,7 +57,7 @@ protected:
class Symbol : public Node
{
public:
typedef enum { POINT = 0, IMAGE, VIDEO, SESSION, CLONE, RENDER, DOTS, BUSY, LOCK, UNLOCK, CIRCLE, SQUARE, CLOCK, GRID, EMPTY } Type;
typedef enum { POINT = 0, IMAGE, VIDEO, SESSION, CLONE, RENDER, DOTS, BUSY, LOCK, UNLOCK, CIRCLE, SQUARE, CLOCK, GRID, CROSS, EMPTY } Type;
Symbol(Type t = POINT, glm::vec3 pos = glm::vec3(0.f));
~Symbol();

View File

@@ -52,7 +52,7 @@ void Node::copyTransform(Node *other)
{
if (!other)
return;
transform_ = glm::identity<glm::mat4>();
transform_ = other->transform_;
scale_ = other->scale_;
rotation_ = other->rotation_;
translation_ = other->translation_;

109
View.cpp
View File

@@ -626,31 +626,47 @@ GeometryView::GeometryView() : View(GEOMETRY)
scene.fg()->attach(border);
// User interface foreground
//
// 'clock' : tic marks every 10 degrees for ROTATION
// (with opaque background)
Group *g = new Group;
Symbol *s = new Symbol(Symbol::CLOCK);
g->attach(s);
Symbol *d = new Symbol(Symbol::POINT);
d->color = glm::vec4(0.f, 0.f, 0.f, 0.25f);
d->scale_ = glm::vec3(28.f, 28.f, 1.f);
d->translation_.z = -0.1;
g->attach(d);
s = new Symbol(Symbol::POINT);
s->color = glm::vec4(0.f, 0.f, 0.f, 0.25f);
s->scale_ = glm::vec3(28.f, 28.f, 1.f);
s->translation_.z = -0.1;
g->attach(s);
overlay_rotation_clock_ = g;
overlay_rotation_clock_->scale_ = glm::vec3(0.25f, 0.25f, 1.f);
scene.fg()->attach(overlay_rotation_clock_);
overlay_rotation_clock_->visible_ = false;
overlay_rotation_circle_ = new Symbol(Symbol::CIRCLE);
overlay_rotation_circle_->scale_ = glm::vec3(0.25f, 0.25f, 1.f);
scene.fg()->attach(overlay_rotation_circle_);
overlay_rotation_circle_->visible_ = false;
overlay_grid_ = new Symbol(Symbol::GRID);
overlay_grid_->scale_ = glm::vec3(1.f, 1.f, 1.f);
scene.fg()->attach(overlay_grid_);
overlay_grid_->visible_ = false;
// circle to show the center of ROTATION
overlay_rotation_ = new Symbol(Symbol::CIRCLE);
overlay_rotation_->scale_ = glm::vec3(0.25f, 0.25f, 1.f);
scene.fg()->attach(overlay_rotation_);
overlay_rotation_->visible_ = false;
// 'grid' : tic marks every 0.1 step for SCALING
g = new Group;
s = new Symbol(Symbol::GRID);
g->attach(s);
s = new Symbol(Symbol::POINT);
s->color = glm::vec4(0.f, 0.f, 0.f, 0.25f);
s->scale_ = glm::vec3(23.f, 23.f, 1.f);
s->translation_.z = -0.1;
g->attach(s);
overlay_scaling_grid_ = g;
overlay_scaling_grid_->scale_ = glm::vec3(0.28f, 0.28f, 1.f);
scene.fg()->attach(overlay_scaling_grid_);
overlay_scaling_grid_->visible_ = false;
// cross in the square for proportional SCALING
overlay_scaling_cross_ = new Symbol(Symbol::CROSS);
overlay_scaling_cross_->scale_ = glm::vec3(0.28f, 0.28f, 1.f);
scene.fg()->attach(overlay_scaling_cross_);
overlay_scaling_cross_->visible_ = false;
// square to show the center of SCALING
overlay_scaling_ = new Symbol(Symbol::SQUARE);
overlay_scaling_->scale_ = glm::vec3(0.25f, 0.25f, 1.f);
overlay_scaling_->scale_ = glm::vec3(0.28f, 0.28f, 1.f);
scene.fg()->attach(overlay_scaling_);
overlay_scaling_->visible_ = false;
@@ -776,7 +792,7 @@ View::Cursor GeometryView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::p
std::ostringstream info;
if (pick.first) {
// which corner was picked ?
glm::vec2 corner = glm::sign(pick.second);
glm::vec2 corner = glm::round(pick.second);
// transform from source center to corner
glm::mat4 T = GlmToolkit::transform(glm::vec3(corner.x, corner.y, 0.f), glm::vec3(0.f, 0.f, 0.f),
@@ -798,11 +814,12 @@ View::Cursor GeometryView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::p
// picking on the resizing handles in the corners
if ( pick.first == s->handle_[Handles::RESIZE] ) {
overlay_scaling_->visible_ = true;
glm::vec4 icon = corner_to_scene_transform * glm::vec4(0.f, 0.f, 0.f, 1.f);
overlay_scaling_->translation_.x = icon.x;
overlay_scaling_->translation_.y = icon.y;
overlay_scaling_->update(0);
// overlay_scaling_->visible_ = true;
// glm::vec4 icon = corner_to_scene_transform * glm::vec4(0.f, 0.f, 0.f, 1.f);
// overlay_scaling_->translation_.x = icon.x;
// overlay_scaling_->translation_.y = icon.y;
// overlay_scaling_->rotation_.z = s->stored_status_->rotation_.z;
// overlay_scaling_->update(0);
// RESIZE CORNER
// proportional SCALING with SHIFT
@@ -848,11 +865,12 @@ View::Cursor GeometryView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::p
// picking on the BORDER RESIZING handles left or right
else if ( pick.first == s->handle_[Handles::RESIZE_H] ) {
overlay_scaling_->visible_ = true;
glm::vec4 icon = corner_to_scene_transform * glm::vec4(0.f, 1.f, 0.f, 1.f);
overlay_scaling_->translation_.x = icon.x;
overlay_scaling_->translation_.y = icon.y;
overlay_scaling_->update(0);
// overlay_scaling_->visible_ = true;
// glm::vec4 icon = corner_to_scene_transform * glm::vec4(0.f, 0.f, 0.f, 1.f);
// overlay_scaling_->translation_.x = icon.x;
// overlay_scaling_->translation_.y = icon.y;
// overlay_scaling_->rotation_.z = s->stored_status_->rotation_.z;
// overlay_scaling_->update(0);
// SHIFT: HORIZONTAL SCALE to restore source aspect ratio
if (UserInterface::manager().shiftModifier()) {
@@ -886,11 +904,12 @@ View::Cursor GeometryView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::p
// picking on the BORDER RESIZING handles top or bottom
else if ( pick.first == s->handle_[Handles::RESIZE_V] ) {
overlay_scaling_->visible_ = true;
glm::vec4 icon = corner_to_scene_transform * glm::vec4(1.f, 0.f, 0.f, 1.f);
overlay_scaling_->translation_.x = icon.x;
overlay_scaling_->translation_.y = icon.y;
overlay_scaling_->update(0);
// overlay_scaling_->visible_ = true;
// glm::vec4 icon = corner_to_scene_transform * glm::vec4(0.f, 0.f, 0.f, 1.f);
// overlay_scaling_->translation_.x = icon.x;
// overlay_scaling_->translation_.y = icon.y;
// overlay_scaling_->rotation_.z = s->stored_status_->rotation_.z;
// overlay_scaling_->update(0);
// SHIFT: VERTICAL SCALE to restore source aspect ratio
if (UserInterface::manager().shiftModifier()) {
@@ -924,15 +943,20 @@ View::Cursor GeometryView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::p
// picking on the CENTRER SCALING handle
else if ( pick.first == s->handle_[Handles::SCALE] ) {
overlay_scaling_cross_->visible_ = false;
overlay_scaling_grid_->visible_ = false;
overlay_scaling_->visible_ = true;
overlay_scaling_->translation_.x = s->stored_status_->translation_.x;
overlay_scaling_->translation_.y = s->stored_status_->translation_.y;
overlay_scaling_->rotation_.z = s->stored_status_->rotation_.z;
overlay_scaling_->update(0);
// PROPORTIONAL ONLY
if (UserInterface::manager().shiftModifier()) {
float factor = glm::length( glm::vec2( source_to ) ) / glm::length( glm::vec2( source_from ) );
source_scaling = glm::vec3(factor, factor, 1.f);
overlay_scaling_cross_->visible_ = true;
overlay_scaling_cross_->copyTransform(overlay_scaling_);
}
// apply center scaling
sourceNode->scale_ = s->stored_status_->scale_ * source_scaling;
@@ -940,6 +964,8 @@ View::Cursor GeometryView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::p
if (UserInterface::manager().altModifier()) {
sourceNode->scale_.x = ROUND(sourceNode->scale_.x, 10.f);
sourceNode->scale_.y = ROUND(sourceNode->scale_.y, 10.f);
overlay_scaling_grid_->visible_ = true;
overlay_scaling_grid_->copyTransform(overlay_scaling_);
}
// show cursor depending on diagonal (corner picked)
ret.type = Cursor_ResizeNWSE;
@@ -951,10 +977,10 @@ View::Cursor GeometryView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::p
// ROTATION on CENTER
overlay_rotation_clock_->visible_ = false;
overlay_rotation_circle_->visible_ = true;
overlay_rotation_circle_->translation_.x = s->stored_status_->translation_.x;
overlay_rotation_circle_->translation_.y = s->stored_status_->translation_.y;
overlay_rotation_circle_->update(0);
overlay_rotation_->visible_ = true;
overlay_rotation_->translation_.x = s->stored_status_->translation_.x;
overlay_rotation_->translation_.y = s->stored_status_->translation_.y;
overlay_rotation_->update(0);
// rotation center to center of source (disregarding scale)
glm::mat4 T = glm::translate(glm::identity<glm::mat4>(), s->stored_status_->translation_);
@@ -970,9 +996,7 @@ View::Cursor GeometryView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::p
degrees = (degrees / 10) * 10;
sourceNode->rotation_.z = glm::radians( float(degrees) );
overlay_rotation_clock_->visible_ = true;
overlay_rotation_clock_->translation_.x = s->stored_status_->translation_.x;
overlay_rotation_clock_->translation_.y = s->stored_status_->translation_.y;
overlay_rotation_clock_->update(0);
overlay_rotation_clock_->copyTransform(overlay_rotation_);
}
// show cursor for rotation
ret.type = Cursor_Hand;
@@ -1022,8 +1046,9 @@ View::Cursor GeometryView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::p
void GeometryView::terminate()
{
overlay_rotation_clock_->visible_ = false;
overlay_rotation_circle_->visible_ = false;
overlay_grid_->visible_ = false;
overlay_rotation_->visible_ = false;
overlay_scaling_grid_->visible_ = false;
overlay_scaling_cross_->visible_ = false;
overlay_scaling_->visible_ = false;
}

5
View.h
View File

@@ -148,10 +148,11 @@ public:
void terminate();
private:
Node *overlay_rotation_circle_;
Node *overlay_rotation_;
Node *overlay_rotation_clock_;
Node *overlay_scaling_;
Node *overlay_grid_;
Node *overlay_scaling_cross_;
Node *overlay_scaling_grid_;
};
class LayerView : public View

View File

@@ -1,7 +1,7 @@
ply
format ascii 1.0
comment Created by Blender 2.90.0 - www.blender.org
element vertex 164
element vertex 80
property float x
property float y
property float z
@@ -9,173 +9,89 @@ property uchar red
property uchar green
property uchar blue
property uchar alpha
element face 82
element face 40
property list uchar uint vertex_indices
end_header
-0.009185 0.309212 0.000000 255 255 255 255
0.009185 0.291011 0.000000 255 255 255 255
0.009185 0.309212 0.000000 255 255 255 255
-0.009185 0.291011 0.000000 255 255 255 255
-0.009185 0.209212 0.000000 255 255 255 255
0.009185 0.191011 0.000000 255 255 255 255
0.009185 0.209212 0.000000 255 255 255 255
-0.009185 0.191011 0.000000 255 255 255 255
-0.009185 0.109212 0.000000 255 255 255 255
0.009185 0.091011 0.000000 255 255 255 255
0.009185 0.109212 0.000000 255 255 255 255
-0.009185 0.091011 0.000000 255 255 255 255
-0.009185 0.009212 0.000000 255 255 255 255
0.009185 -0.008989 0.000000 255 255 255 255
0.009185 0.009212 0.000000 255 255 255 255
-0.009185 -0.008989 0.000000 255 255 255 255
0.090815 0.009212 0.000000 255 255 255 255
0.109185 -0.008989 0.000000 255 255 255 255
0.109185 0.009212 0.000000 255 255 255 255
0.090815 -0.008989 0.000000 255 255 255 255
0.190815 0.009212 0.000000 255 255 255 255
0.209185 -0.008989 0.000000 255 255 255 255
0.209185 0.009212 0.000000 255 255 255 255
0.190815 -0.008989 0.000000 255 255 255 255
0.290815 0.009212 0.000000 255 255 255 255
0.309185 -0.008989 0.000000 255 255 255 255
0.309185 0.009212 0.000000 255 255 255 255
0.290815 -0.008989 0.000000 255 255 255 255
0.390815 0.009212 0.000000 255 255 255 255
0.409185 -0.008989 0.000000 255 255 255 255
0.409185 0.009212 0.000000 255 255 255 255
0.390815 -0.008989 0.000000 255 255 255 255
0.490815 0.009212 0.000000 255 255 255 255
0.509185 -0.008989 0.000000 255 255 255 255
0.509185 0.009212 0.000000 255 255 255 255
0.490815 -0.008989 0.000000 255 255 255 255
-0.609185 0.009212 0.000000 255 255 255 255
-0.590815 -0.008989 0.000000 255 255 255 255
-0.590815 0.009212 0.000000 255 255 255 255
-0.609185 -0.008989 0.000000 255 255 255 255
-0.509185 0.009212 0.000000 255 255 255 255
-0.490815 -0.008989 0.000000 255 255 255 255
-0.490815 0.009212 0.000000 255 255 255 255
-0.509185 -0.008989 0.000000 255 255 255 255
-0.409185 0.009212 0.000000 255 255 255 255
-0.390815 -0.008989 0.000000 255 255 255 255
-0.390815 0.009212 0.000000 255 255 255 255
-0.409185 -0.008989 0.000000 255 255 255 255
-0.309185 0.009212 0.000000 255 255 255 255
-0.290815 -0.008989 0.000000 255 255 255 255
-0.290815 0.009212 0.000000 255 255 255 255
-0.309185 -0.008989 0.000000 255 255 255 255
-0.209185 0.009212 0.000000 255 255 255 255
-0.190815 -0.008989 0.000000 255 255 255 255
-0.190815 0.009212 0.000000 255 255 255 255
-0.209185 -0.008989 0.000000 255 255 255 255
-0.109185 0.009212 0.000000 255 255 255 255
-0.090815 -0.008989 0.000000 255 255 255 255
-0.090815 0.009212 0.000000 255 255 255 255
-0.109185 -0.008989 0.000000 255 255 255 255
0.590815 0.009212 0.000000 255 255 255 255
0.609185 -0.008989 0.000000 255 255 255 255
0.609185 0.009212 0.000000 255 255 255 255
0.590815 -0.008989 0.000000 255 255 255 255
0.690815 0.009212 0.000000 255 255 255 255
0.709185 -0.008989 0.000000 255 255 255 255
0.709185 0.009212 0.000000 255 255 255 255
0.690815 -0.008989 0.000000 255 255 255 255
0.790815 0.009212 0.000000 255 255 255 255
0.809185 -0.008989 0.000000 255 255 255 255
0.809185 0.009212 0.000000 255 255 255 255
0.790815 -0.008989 0.000000 255 255 255 255
0.890815 0.009212 0.000000 255 255 255 255
0.909185 -0.008989 0.000000 255 255 255 255
0.909185 0.009212 0.000000 255 255 255 255
0.890815 -0.008989 0.000000 255 255 255 255
0.990815 0.009212 0.000000 255 255 255 255
1.009185 -0.008989 0.000000 255 255 255 255
1.009185 0.009212 0.000000 255 255 255 255
0.990815 -0.008989 0.000000 255 255 255 255
-1.009185 0.009212 0.000000 255 255 255 255
-0.990815 -0.008989 0.000000 255 255 255 255
-0.990815 0.009212 0.000000 255 255 255 255
-1.009185 -0.008989 0.000000 255 255 255 255
-0.909185 0.009212 0.000000 255 255 255 255
-0.890815 -0.008989 0.000000 255 255 255 255
-0.890815 0.009212 0.000000 255 255 255 255
-0.909185 -0.008989 0.000000 255 255 255 255
-0.809185 0.009212 0.000000 255 255 255 255
-0.790815 -0.008989 0.000000 255 255 255 255
-0.790815 0.009212 0.000000 255 255 255 255
-0.809185 -0.008989 0.000000 255 255 255 255
-0.709185 0.009212 0.000000 255 255 255 255
-0.690815 -0.008989 0.000000 255 255 255 255
-0.690815 0.009212 0.000000 255 255 255 255
-0.709185 -0.008989 0.000000 255 255 255 255
-0.009185 0.409212 0.000000 255 255 255 255
0.009185 0.391011 0.000000 255 255 255 255
0.009185 0.409212 0.000000 255 255 255 255
-0.009185 0.391011 0.000000 255 255 255 255
-0.009185 0.809212 0.000000 255 255 255 255
0.009185 0.791011 0.000000 255 255 255 255
0.009185 0.809212 0.000000 255 255 255 255
-0.009185 0.791011 0.000000 255 255 255 255
-0.009185 0.709212 0.000000 255 255 255 255
0.009185 0.691011 0.000000 255 255 255 255
0.009185 0.709212 0.000000 255 255 255 255
-0.009185 0.691011 0.000000 255 255 255 255
-0.009185 0.609212 0.000000 255 255 255 255
0.009185 0.591011 0.000000 255 255 255 255
0.009185 0.609212 0.000000 255 255 255 255
-0.009185 0.591011 0.000000 255 255 255 255
-0.009185 0.509212 0.000000 255 255 255 255
0.009185 0.491011 0.000000 255 255 255 255
0.009185 0.509212 0.000000 255 255 255 255
-0.009185 0.491011 0.000000 255 255 255 255
-0.009185 0.909212 0.000000 255 255 255 255
0.009185 0.891011 0.000000 255 255 255 255
0.009185 0.909212 0.000000 255 255 255 255
-0.009185 0.891011 0.000000 255 255 255 255
-0.009185 -0.190788 0.000000 255 255 255 255
0.009185 -0.208989 0.000000 255 255 255 255
0.009185 -0.190788 0.000000 255 255 255 255
-0.009185 -0.208989 0.000000 255 255 255 255
-0.009185 -0.290788 0.000000 255 255 255 255
0.009185 -0.308989 0.000000 255 255 255 255
0.009185 -0.290788 0.000000 255 255 255 255
-0.009185 -0.308989 0.000000 255 255 255 255
-0.009185 -0.390788 0.000000 255 255 255 255
0.009185 -0.408989 0.000000 255 255 255 255
0.009185 -0.390788 0.000000 255 255 255 255
-0.009185 -0.408989 0.000000 255 255 255 255
-0.009185 -0.490788 0.000000 255 255 255 255
0.009185 -0.508989 0.000000 255 255 255 255
0.009185 -0.490788 0.000000 255 255 255 255
-0.009185 -0.508989 0.000000 255 255 255 255
-0.009185 -0.090788 0.000000 255 255 255 255
0.009185 -0.108989 0.000000 255 255 255 255
0.009185 -0.090788 0.000000 255 255 255 255
-0.009185 -0.108989 0.000000 255 255 255 255
-0.009185 -0.690788 0.000000 255 255 255 255
0.009185 -0.708989 0.000000 255 255 255 255
0.009185 -0.690788 0.000000 255 255 255 255
-0.009185 -0.708989 0.000000 255 255 255 255
-0.009185 -0.790788 0.000000 255 255 255 255
0.009185 -0.808989 0.000000 255 255 255 255
0.009185 -0.790788 0.000000 255 255 255 255
-0.009185 -0.808989 0.000000 255 255 255 255
-0.009185 -0.890788 0.000000 255 255 255 255
0.009185 -0.908989 0.000000 255 255 255 255
0.009185 -0.890788 0.000000 255 255 255 255
-0.009185 -0.908989 0.000000 255 255 255 255
-0.009185 -0.990788 0.000000 255 255 255 255
0.009185 -1.008989 0.000000 255 255 255 255
0.009185 -0.990788 0.000000 255 255 255 255
-0.009185 -1.008989 0.000000 255 255 255 255
-0.009185 -0.590788 0.000000 255 255 255 255
0.009185 -0.608989 0.000000 255 255 255 255
0.009185 -0.590788 0.000000 255 255 255 255
-0.009185 -0.608989 0.000000 255 255 255 255
-0.009185 1.009212 0.000000 255 255 255 255
0.009185 0.991011 0.000000 255 255 255 255
0.009185 1.009212 0.000000 255 255 255 255
-0.009185 0.991011 0.000000 255 255 255 255
-0.009185 0.712606 0.000000 255 255 255 255
0.009185 0.611799 0.000000 255 255 255 255
0.009185 0.712606 0.000000 255 255 255 255
-0.009185 0.611799 0.000000 255 255 255 255
0.190815 0.712606 0.000000 255 255 255 255
0.209185 0.611800 0.000000 255 255 255 255
0.209185 0.712606 0.000000 255 255 255 255
0.190815 0.611800 0.000000 255 255 255 255
0.390815 0.712606 0.000000 255 255 255 255
0.409185 0.611800 0.000000 255 255 255 255
0.409185 0.712606 0.000000 255 255 255 255
0.390815 0.611800 0.000000 255 255 255 255
-0.409185 0.712606 0.000000 255 255 255 255
-0.390815 0.611799 0.000000 255 255 255 255
-0.390815 0.712606 0.000000 255 255 255 255
-0.409185 0.611799 0.000000 255 255 255 255
-0.209185 0.712606 0.000000 255 255 255 255
-0.190815 0.611799 0.000000 255 255 255 255
-0.190815 0.712606 0.000000 255 255 255 255
-0.209185 0.611799 0.000000 255 255 255 255
0.714442 0.007350 0.000000 255 255 255 255
0.613635 -0.011021 0.000000 255 255 255 255
0.714442 -0.011021 0.000000 255 255 255 255
0.613635 0.007350 0.000000 255 255 255 255
0.714442 -0.192650 0.000000 255 255 255 255
0.613635 -0.211021 0.000000 255 255 255 255
0.714442 -0.211021 0.000000 255 255 255 255
0.613635 -0.192650 0.000000 255 255 255 255
0.714442 -0.392650 0.000000 255 255 255 255
0.613635 -0.411021 0.000000 255 255 255 255
0.714442 -0.411021 0.000000 255 255 255 255
0.613635 -0.392650 0.000000 255 255 255 255
0.714441 0.407350 0.000000 255 255 255 255
0.613635 0.388979 0.000000 255 255 255 255
0.714441 0.388979 0.000000 255 255 255 255
0.613635 0.407350 0.000000 255 255 255 255
0.714442 0.207350 0.000000 255 255 255 255
0.613635 0.188979 0.000000 255 255 255 255
0.714442 0.188979 0.000000 255 255 255 255
0.613635 0.207350 0.000000 255 255 255 255
0.009185 -0.716277 0.000000 255 255 255 255
-0.009185 -0.615470 0.000000 255 255 255 255
-0.009185 -0.716277 0.000000 255 255 255 255
0.009185 -0.615470 0.000000 255 255 255 255
-0.190815 -0.716277 0.000000 255 255 255 255
-0.209185 -0.615470 0.000000 255 255 255 255
-0.209185 -0.716277 0.000000 255 255 255 255
-0.190815 -0.615470 0.000000 255 255 255 255
-0.390815 -0.716277 0.000000 255 255 255 255
-0.409185 -0.615470 0.000000 255 255 255 255
-0.409185 -0.716277 0.000000 255 255 255 255
-0.390815 -0.615470 0.000000 255 255 255 255
0.409185 -0.716277 0.000000 255 255 255 255
0.390815 -0.615470 0.000000 255 255 255 255
0.390815 -0.716277 0.000000 255 255 255 255
0.409185 -0.615470 0.000000 255 255 255 255
0.209185 -0.716277 0.000000 255 255 255 255
0.190815 -0.615470 0.000000 255 255 255 255
0.190815 -0.716277 0.000000 255 255 255 255
0.209185 -0.615470 0.000000 255 255 255 255
-0.714441 -0.011020 0.000000 255 255 255 255
-0.613635 0.007350 0.000000 255 255 255 255
-0.714441 0.007350 0.000000 255 255 255 255
-0.613635 -0.011020 0.000000 255 255 255 255
-0.714442 0.188980 0.000000 255 255 255 255
-0.613635 0.207350 0.000000 255 255 255 255
-0.714442 0.207350 0.000000 255 255 255 255
-0.613635 0.188980 0.000000 255 255 255 255
-0.714442 0.388980 0.000000 255 255 255 255
-0.613635 0.407350 0.000000 255 255 255 255
-0.714442 0.407350 0.000000 255 255 255 255
-0.613635 0.388980 0.000000 255 255 255 255
-0.714441 -0.411020 0.000000 255 255 255 255
-0.613635 -0.392650 0.000000 255 255 255 255
-0.714441 -0.392650 0.000000 255 255 255 255
-0.613635 -0.411020 0.000000 255 255 255 255
-0.714441 -0.211020 0.000000 255 255 255 255
-0.613635 -0.192650 0.000000 255 255 255 255
-0.714441 -0.192650 0.000000 255 255 255 255
-0.613635 -0.211020 0.000000 255 255 255 255
3 0 1 2
3 0 3 1
3 4 5 6
@@ -216,45 +132,3 @@ end_header
3 72 75 73
3 76 77 78
3 76 79 77
3 80 81 82
3 80 83 81
3 84 85 86
3 84 87 85
3 88 89 90
3 88 91 89
3 92 93 94
3 92 95 93
3 96 97 98
3 96 99 97
3 100 101 102
3 100 103 101
3 104 105 106
3 104 107 105
3 108 109 110
3 108 111 109
3 112 113 114
3 112 115 113
3 116 117 118
3 116 119 117
3 120 121 122
3 120 123 121
3 124 125 126
3 124 127 125
3 128 129 130
3 128 131 129
3 132 133 134
3 132 135 133
3 136 137 138
3 136 139 137
3 140 141 142
3 140 143 141
3 144 145 146
3 144 147 145
3 148 149 150
3 148 151 149
3 152 153 154
3 152 155 153
3 156 157 158
3 156 159 157
3 160 161 162
3 160 163 161