mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-11 18:34:58 +01:00
Improved user visual feedback on geometryview actions (rotation and
scaling).
This commit is contained in:
@@ -313,6 +313,7 @@ set(VMIX_RSC_FILES
|
|||||||
./rsc/mesh/icon_unlock.ply
|
./rsc/mesh/icon_unlock.ply
|
||||||
./rsc/mesh/icon_circle.ply
|
./rsc/mesh/icon_circle.ply
|
||||||
./rsc/mesh/icon_square.ply
|
./rsc/mesh/icon_square.ply
|
||||||
|
./rsc/mesh/icon_cross.ply
|
||||||
./rsc/mesh/icon_clock.ply
|
./rsc/mesh/icon_clock.ply
|
||||||
./rsc/mesh/icon_grid.ply
|
./rsc/mesh/icon_grid.ply
|
||||||
./rsc/mesh/h_line.ply
|
./rsc/mesh/h_line.ply
|
||||||
|
|||||||
@@ -296,6 +296,7 @@ Symbol::Symbol(Type t, glm::vec3 pos) : Node(), type_(t)
|
|||||||
icons[SQUARE] = new Mesh("mesh/icon_square.ply");
|
icons[SQUARE] = new Mesh("mesh/icon_square.ply");
|
||||||
icons[CLOCK] = new Mesh("mesh/icon_clock.ply");
|
icons[CLOCK] = new Mesh("mesh/icon_clock.ply");
|
||||||
icons[GRID] = new Mesh("mesh/icon_grid.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");
|
icons[EMPTY] = new Mesh("mesh/icon_empty.ply");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -322,10 +323,29 @@ void Symbol::draw(glm::mat4 modelview, glm::mat4 projection)
|
|||||||
// set color
|
// set color
|
||||||
symbol_->shader()->color = color;
|
symbol_->shader()->color = color;
|
||||||
|
|
||||||
glm::mat4 ctm = modelview * transform_;
|
// glm::mat4 ctm = modelview * transform_;
|
||||||
// correct for aspect ratio
|
// // correct for aspect ratio
|
||||||
glm::vec4 vec = ctm * glm::vec4(1.f, 1.0f, 0.f, 0.f);
|
// 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));
|
// 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);
|
symbol_->draw( ctm, projection);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ protected:
|
|||||||
class Symbol : public Node
|
class Symbol : public Node
|
||||||
{
|
{
|
||||||
public:
|
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(Type t = POINT, glm::vec3 pos = glm::vec3(0.f));
|
||||||
~Symbol();
|
~Symbol();
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ void Node::copyTransform(Node *other)
|
|||||||
{
|
{
|
||||||
if (!other)
|
if (!other)
|
||||||
return;
|
return;
|
||||||
transform_ = glm::identity<glm::mat4>();
|
transform_ = other->transform_;
|
||||||
scale_ = other->scale_;
|
scale_ = other->scale_;
|
||||||
rotation_ = other->rotation_;
|
rotation_ = other->rotation_;
|
||||||
translation_ = other->translation_;
|
translation_ = other->translation_;
|
||||||
|
|||||||
109
View.cpp
109
View.cpp
@@ -626,31 +626,47 @@ GeometryView::GeometryView() : View(GEOMETRY)
|
|||||||
scene.fg()->attach(border);
|
scene.fg()->attach(border);
|
||||||
|
|
||||||
// User interface foreground
|
// User interface foreground
|
||||||
|
//
|
||||||
|
// 'clock' : tic marks every 10 degrees for ROTATION
|
||||||
|
// (with opaque background)
|
||||||
Group *g = new Group;
|
Group *g = new Group;
|
||||||
Symbol *s = new Symbol(Symbol::CLOCK);
|
Symbol *s = new Symbol(Symbol::CLOCK);
|
||||||
g->attach(s);
|
g->attach(s);
|
||||||
Symbol *d = new Symbol(Symbol::POINT);
|
s = new Symbol(Symbol::POINT);
|
||||||
d->color = glm::vec4(0.f, 0.f, 0.f, 0.25f);
|
s->color = glm::vec4(0.f, 0.f, 0.f, 0.25f);
|
||||||
d->scale_ = glm::vec3(28.f, 28.f, 1.f);
|
s->scale_ = glm::vec3(28.f, 28.f, 1.f);
|
||||||
d->translation_.z = -0.1;
|
s->translation_.z = -0.1;
|
||||||
g->attach(d);
|
g->attach(s);
|
||||||
overlay_rotation_clock_ = g;
|
overlay_rotation_clock_ = g;
|
||||||
overlay_rotation_clock_->scale_ = glm::vec3(0.25f, 0.25f, 1.f);
|
overlay_rotation_clock_->scale_ = glm::vec3(0.25f, 0.25f, 1.f);
|
||||||
scene.fg()->attach(overlay_rotation_clock_);
|
scene.fg()->attach(overlay_rotation_clock_);
|
||||||
overlay_rotation_clock_->visible_ = false;
|
overlay_rotation_clock_->visible_ = false;
|
||||||
|
// circle to show the center of ROTATION
|
||||||
overlay_rotation_circle_ = new Symbol(Symbol::CIRCLE);
|
overlay_rotation_ = new Symbol(Symbol::CIRCLE);
|
||||||
overlay_rotation_circle_->scale_ = glm::vec3(0.25f, 0.25f, 1.f);
|
overlay_rotation_->scale_ = glm::vec3(0.25f, 0.25f, 1.f);
|
||||||
scene.fg()->attach(overlay_rotation_circle_);
|
scene.fg()->attach(overlay_rotation_);
|
||||||
overlay_rotation_circle_->visible_ = false;
|
overlay_rotation_->visible_ = false;
|
||||||
|
// 'grid' : tic marks every 0.1 step for SCALING
|
||||||
overlay_grid_ = new Symbol(Symbol::GRID);
|
g = new Group;
|
||||||
overlay_grid_->scale_ = glm::vec3(1.f, 1.f, 1.f);
|
s = new Symbol(Symbol::GRID);
|
||||||
scene.fg()->attach(overlay_grid_);
|
g->attach(s);
|
||||||
overlay_grid_->visible_ = false;
|
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_ = 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_);
|
scene.fg()->attach(overlay_scaling_);
|
||||||
overlay_scaling_->visible_ = false;
|
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;
|
std::ostringstream info;
|
||||||
if (pick.first) {
|
if (pick.first) {
|
||||||
// which corner was picked ?
|
// which corner was picked ?
|
||||||
glm::vec2 corner = glm::sign(pick.second);
|
glm::vec2 corner = glm::round(pick.second);
|
||||||
|
|
||||||
// transform from source center to corner
|
// 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),
|
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
|
// picking on the resizing handles in the corners
|
||||||
if ( pick.first == s->handle_[Handles::RESIZE] ) {
|
if ( pick.first == s->handle_[Handles::RESIZE] ) {
|
||||||
|
|
||||||
overlay_scaling_->visible_ = true;
|
// overlay_scaling_->visible_ = true;
|
||||||
glm::vec4 icon = corner_to_scene_transform * glm::vec4(0.f, 0.f, 0.f, 1.f);
|
// 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_.x = icon.x;
|
||||||
overlay_scaling_->translation_.y = icon.y;
|
// overlay_scaling_->translation_.y = icon.y;
|
||||||
overlay_scaling_->update(0);
|
// overlay_scaling_->rotation_.z = s->stored_status_->rotation_.z;
|
||||||
|
// overlay_scaling_->update(0);
|
||||||
|
|
||||||
// RESIZE CORNER
|
// RESIZE CORNER
|
||||||
// proportional SCALING with SHIFT
|
// 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
|
// picking on the BORDER RESIZING handles left or right
|
||||||
else if ( pick.first == s->handle_[Handles::RESIZE_H] ) {
|
else if ( pick.first == s->handle_[Handles::RESIZE_H] ) {
|
||||||
|
|
||||||
overlay_scaling_->visible_ = true;
|
// overlay_scaling_->visible_ = true;
|
||||||
glm::vec4 icon = corner_to_scene_transform * glm::vec4(0.f, 1.f, 0.f, 1.f);
|
// 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_.x = icon.x;
|
||||||
overlay_scaling_->translation_.y = icon.y;
|
// overlay_scaling_->translation_.y = icon.y;
|
||||||
overlay_scaling_->update(0);
|
// overlay_scaling_->rotation_.z = s->stored_status_->rotation_.z;
|
||||||
|
// overlay_scaling_->update(0);
|
||||||
|
|
||||||
// SHIFT: HORIZONTAL SCALE to restore source aspect ratio
|
// SHIFT: HORIZONTAL SCALE to restore source aspect ratio
|
||||||
if (UserInterface::manager().shiftModifier()) {
|
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
|
// picking on the BORDER RESIZING handles top or bottom
|
||||||
else if ( pick.first == s->handle_[Handles::RESIZE_V] ) {
|
else if ( pick.first == s->handle_[Handles::RESIZE_V] ) {
|
||||||
|
|
||||||
overlay_scaling_->visible_ = true;
|
// overlay_scaling_->visible_ = true;
|
||||||
glm::vec4 icon = corner_to_scene_transform * glm::vec4(1.f, 0.f, 0.f, 1.f);
|
// 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_.x = icon.x;
|
||||||
overlay_scaling_->translation_.y = icon.y;
|
// overlay_scaling_->translation_.y = icon.y;
|
||||||
overlay_scaling_->update(0);
|
// overlay_scaling_->rotation_.z = s->stored_status_->rotation_.z;
|
||||||
|
// overlay_scaling_->update(0);
|
||||||
|
|
||||||
// SHIFT: VERTICAL SCALE to restore source aspect ratio
|
// SHIFT: VERTICAL SCALE to restore source aspect ratio
|
||||||
if (UserInterface::manager().shiftModifier()) {
|
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
|
// picking on the CENTRER SCALING handle
|
||||||
else if ( pick.first == s->handle_[Handles::SCALE] ) {
|
else if ( pick.first == s->handle_[Handles::SCALE] ) {
|
||||||
|
|
||||||
|
overlay_scaling_cross_->visible_ = false;
|
||||||
|
overlay_scaling_grid_->visible_ = false;
|
||||||
overlay_scaling_->visible_ = true;
|
overlay_scaling_->visible_ = true;
|
||||||
overlay_scaling_->translation_.x = s->stored_status_->translation_.x;
|
overlay_scaling_->translation_.x = s->stored_status_->translation_.x;
|
||||||
overlay_scaling_->translation_.y = s->stored_status_->translation_.y;
|
overlay_scaling_->translation_.y = s->stored_status_->translation_.y;
|
||||||
|
overlay_scaling_->rotation_.z = s->stored_status_->rotation_.z;
|
||||||
overlay_scaling_->update(0);
|
overlay_scaling_->update(0);
|
||||||
|
|
||||||
// PROPORTIONAL ONLY
|
// PROPORTIONAL ONLY
|
||||||
if (UserInterface::manager().shiftModifier()) {
|
if (UserInterface::manager().shiftModifier()) {
|
||||||
float factor = glm::length( glm::vec2( source_to ) ) / glm::length( glm::vec2( source_from ) );
|
float factor = glm::length( glm::vec2( source_to ) ) / glm::length( glm::vec2( source_from ) );
|
||||||
source_scaling = glm::vec3(factor, factor, 1.f);
|
source_scaling = glm::vec3(factor, factor, 1.f);
|
||||||
|
overlay_scaling_cross_->visible_ = true;
|
||||||
|
overlay_scaling_cross_->copyTransform(overlay_scaling_);
|
||||||
}
|
}
|
||||||
// apply center scaling
|
// apply center scaling
|
||||||
sourceNode->scale_ = s->stored_status_->scale_ * source_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()) {
|
if (UserInterface::manager().altModifier()) {
|
||||||
sourceNode->scale_.x = ROUND(sourceNode->scale_.x, 10.f);
|
sourceNode->scale_.x = ROUND(sourceNode->scale_.x, 10.f);
|
||||||
sourceNode->scale_.y = ROUND(sourceNode->scale_.y, 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)
|
// show cursor depending on diagonal (corner picked)
|
||||||
ret.type = Cursor_ResizeNWSE;
|
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
|
// ROTATION on CENTER
|
||||||
overlay_rotation_clock_->visible_ = false;
|
overlay_rotation_clock_->visible_ = false;
|
||||||
overlay_rotation_circle_->visible_ = true;
|
overlay_rotation_->visible_ = true;
|
||||||
overlay_rotation_circle_->translation_.x = s->stored_status_->translation_.x;
|
overlay_rotation_->translation_.x = s->stored_status_->translation_.x;
|
||||||
overlay_rotation_circle_->translation_.y = s->stored_status_->translation_.y;
|
overlay_rotation_->translation_.y = s->stored_status_->translation_.y;
|
||||||
overlay_rotation_circle_->update(0);
|
overlay_rotation_->update(0);
|
||||||
|
|
||||||
// rotation center to center of source (disregarding scale)
|
// rotation center to center of source (disregarding scale)
|
||||||
glm::mat4 T = glm::translate(glm::identity<glm::mat4>(), s->stored_status_->translation_);
|
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;
|
degrees = (degrees / 10) * 10;
|
||||||
sourceNode->rotation_.z = glm::radians( float(degrees) );
|
sourceNode->rotation_.z = glm::radians( float(degrees) );
|
||||||
overlay_rotation_clock_->visible_ = true;
|
overlay_rotation_clock_->visible_ = true;
|
||||||
overlay_rotation_clock_->translation_.x = s->stored_status_->translation_.x;
|
overlay_rotation_clock_->copyTransform(overlay_rotation_);
|
||||||
overlay_rotation_clock_->translation_.y = s->stored_status_->translation_.y;
|
|
||||||
overlay_rotation_clock_->update(0);
|
|
||||||
}
|
}
|
||||||
// show cursor for rotation
|
// show cursor for rotation
|
||||||
ret.type = Cursor_Hand;
|
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()
|
void GeometryView::terminate()
|
||||||
{
|
{
|
||||||
overlay_rotation_clock_->visible_ = false;
|
overlay_rotation_clock_->visible_ = false;
|
||||||
overlay_rotation_circle_->visible_ = false;
|
overlay_rotation_->visible_ = false;
|
||||||
overlay_grid_->visible_ = false;
|
overlay_scaling_grid_->visible_ = false;
|
||||||
|
overlay_scaling_cross_->visible_ = false;
|
||||||
overlay_scaling_->visible_ = false;
|
overlay_scaling_->visible_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
5
View.h
5
View.h
@@ -148,10 +148,11 @@ public:
|
|||||||
void terminate();
|
void terminate();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Node *overlay_rotation_circle_;
|
Node *overlay_rotation_;
|
||||||
Node *overlay_rotation_clock_;
|
Node *overlay_rotation_clock_;
|
||||||
Node *overlay_scaling_;
|
Node *overlay_scaling_;
|
||||||
Node *overlay_grid_;
|
Node *overlay_scaling_cross_;
|
||||||
|
Node *overlay_scaling_grid_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class LayerView : public View
|
class LayerView : public View
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
ply
|
ply
|
||||||
format ascii 1.0
|
format ascii 1.0
|
||||||
comment Created by Blender 2.90.0 - www.blender.org
|
comment Created by Blender 2.90.0 - www.blender.org
|
||||||
element vertex 164
|
element vertex 80
|
||||||
property float x
|
property float x
|
||||||
property float y
|
property float y
|
||||||
property float z
|
property float z
|
||||||
@@ -9,173 +9,89 @@ property uchar red
|
|||||||
property uchar green
|
property uchar green
|
||||||
property uchar blue
|
property uchar blue
|
||||||
property uchar alpha
|
property uchar alpha
|
||||||
element face 82
|
element face 40
|
||||||
property list uchar uint vertex_indices
|
property list uchar uint vertex_indices
|
||||||
end_header
|
end_header
|
||||||
-0.009185 0.309212 0.000000 255 255 255 255
|
-0.009185 0.712606 0.000000 255 255 255 255
|
||||||
0.009185 0.291011 0.000000 255 255 255 255
|
0.009185 0.611799 0.000000 255 255 255 255
|
||||||
0.009185 0.309212 0.000000 255 255 255 255
|
0.009185 0.712606 0.000000 255 255 255 255
|
||||||
-0.009185 0.291011 0.000000 255 255 255 255
|
-0.009185 0.611799 0.000000 255 255 255 255
|
||||||
-0.009185 0.209212 0.000000 255 255 255 255
|
0.190815 0.712606 0.000000 255 255 255 255
|
||||||
0.009185 0.191011 0.000000 255 255 255 255
|
0.209185 0.611800 0.000000 255 255 255 255
|
||||||
0.009185 0.209212 0.000000 255 255 255 255
|
0.209185 0.712606 0.000000 255 255 255 255
|
||||||
-0.009185 0.191011 0.000000 255 255 255 255
|
0.190815 0.611800 0.000000 255 255 255 255
|
||||||
-0.009185 0.109212 0.000000 255 255 255 255
|
0.390815 0.712606 0.000000 255 255 255 255
|
||||||
0.009185 0.091011 0.000000 255 255 255 255
|
0.409185 0.611800 0.000000 255 255 255 255
|
||||||
0.009185 0.109212 0.000000 255 255 255 255
|
0.409185 0.712606 0.000000 255 255 255 255
|
||||||
-0.009185 0.091011 0.000000 255 255 255 255
|
0.390815 0.611800 0.000000 255 255 255 255
|
||||||
-0.009185 0.009212 0.000000 255 255 255 255
|
-0.409185 0.712606 0.000000 255 255 255 255
|
||||||
0.009185 -0.008989 0.000000 255 255 255 255
|
-0.390815 0.611799 0.000000 255 255 255 255
|
||||||
0.009185 0.009212 0.000000 255 255 255 255
|
-0.390815 0.712606 0.000000 255 255 255 255
|
||||||
-0.009185 -0.008989 0.000000 255 255 255 255
|
-0.409185 0.611799 0.000000 255 255 255 255
|
||||||
0.090815 0.009212 0.000000 255 255 255 255
|
-0.209185 0.712606 0.000000 255 255 255 255
|
||||||
0.109185 -0.008989 0.000000 255 255 255 255
|
-0.190815 0.611799 0.000000 255 255 255 255
|
||||||
0.109185 0.009212 0.000000 255 255 255 255
|
-0.190815 0.712606 0.000000 255 255 255 255
|
||||||
0.090815 -0.008989 0.000000 255 255 255 255
|
-0.209185 0.611799 0.000000 255 255 255 255
|
||||||
0.190815 0.009212 0.000000 255 255 255 255
|
0.714442 0.007350 0.000000 255 255 255 255
|
||||||
0.209185 -0.008989 0.000000 255 255 255 255
|
0.613635 -0.011021 0.000000 255 255 255 255
|
||||||
0.209185 0.009212 0.000000 255 255 255 255
|
0.714442 -0.011021 0.000000 255 255 255 255
|
||||||
0.190815 -0.008989 0.000000 255 255 255 255
|
0.613635 0.007350 0.000000 255 255 255 255
|
||||||
0.290815 0.009212 0.000000 255 255 255 255
|
0.714442 -0.192650 0.000000 255 255 255 255
|
||||||
0.309185 -0.008989 0.000000 255 255 255 255
|
0.613635 -0.211021 0.000000 255 255 255 255
|
||||||
0.309185 0.009212 0.000000 255 255 255 255
|
0.714442 -0.211021 0.000000 255 255 255 255
|
||||||
0.290815 -0.008989 0.000000 255 255 255 255
|
0.613635 -0.192650 0.000000 255 255 255 255
|
||||||
0.390815 0.009212 0.000000 255 255 255 255
|
0.714442 -0.392650 0.000000 255 255 255 255
|
||||||
0.409185 -0.008989 0.000000 255 255 255 255
|
0.613635 -0.411021 0.000000 255 255 255 255
|
||||||
0.409185 0.009212 0.000000 255 255 255 255
|
0.714442 -0.411021 0.000000 255 255 255 255
|
||||||
0.390815 -0.008989 0.000000 255 255 255 255
|
0.613635 -0.392650 0.000000 255 255 255 255
|
||||||
0.490815 0.009212 0.000000 255 255 255 255
|
0.714441 0.407350 0.000000 255 255 255 255
|
||||||
0.509185 -0.008989 0.000000 255 255 255 255
|
0.613635 0.388979 0.000000 255 255 255 255
|
||||||
0.509185 0.009212 0.000000 255 255 255 255
|
0.714441 0.388979 0.000000 255 255 255 255
|
||||||
0.490815 -0.008989 0.000000 255 255 255 255
|
0.613635 0.407350 0.000000 255 255 255 255
|
||||||
-0.609185 0.009212 0.000000 255 255 255 255
|
0.714442 0.207350 0.000000 255 255 255 255
|
||||||
-0.590815 -0.008989 0.000000 255 255 255 255
|
0.613635 0.188979 0.000000 255 255 255 255
|
||||||
-0.590815 0.009212 0.000000 255 255 255 255
|
0.714442 0.188979 0.000000 255 255 255 255
|
||||||
-0.609185 -0.008989 0.000000 255 255 255 255
|
0.613635 0.207350 0.000000 255 255 255 255
|
||||||
-0.509185 0.009212 0.000000 255 255 255 255
|
0.009185 -0.716277 0.000000 255 255 255 255
|
||||||
-0.490815 -0.008989 0.000000 255 255 255 255
|
-0.009185 -0.615470 0.000000 255 255 255 255
|
||||||
-0.490815 0.009212 0.000000 255 255 255 255
|
-0.009185 -0.716277 0.000000 255 255 255 255
|
||||||
-0.509185 -0.008989 0.000000 255 255 255 255
|
0.009185 -0.615470 0.000000 255 255 255 255
|
||||||
-0.409185 0.009212 0.000000 255 255 255 255
|
-0.190815 -0.716277 0.000000 255 255 255 255
|
||||||
-0.390815 -0.008989 0.000000 255 255 255 255
|
-0.209185 -0.615470 0.000000 255 255 255 255
|
||||||
-0.390815 0.009212 0.000000 255 255 255 255
|
-0.209185 -0.716277 0.000000 255 255 255 255
|
||||||
-0.409185 -0.008989 0.000000 255 255 255 255
|
-0.190815 -0.615470 0.000000 255 255 255 255
|
||||||
-0.309185 0.009212 0.000000 255 255 255 255
|
-0.390815 -0.716277 0.000000 255 255 255 255
|
||||||
-0.290815 -0.008989 0.000000 255 255 255 255
|
-0.409185 -0.615470 0.000000 255 255 255 255
|
||||||
-0.290815 0.009212 0.000000 255 255 255 255
|
-0.409185 -0.716277 0.000000 255 255 255 255
|
||||||
-0.309185 -0.008989 0.000000 255 255 255 255
|
-0.390815 -0.615470 0.000000 255 255 255 255
|
||||||
-0.209185 0.009212 0.000000 255 255 255 255
|
0.409185 -0.716277 0.000000 255 255 255 255
|
||||||
-0.190815 -0.008989 0.000000 255 255 255 255
|
0.390815 -0.615470 0.000000 255 255 255 255
|
||||||
-0.190815 0.009212 0.000000 255 255 255 255
|
0.390815 -0.716277 0.000000 255 255 255 255
|
||||||
-0.209185 -0.008989 0.000000 255 255 255 255
|
0.409185 -0.615470 0.000000 255 255 255 255
|
||||||
-0.109185 0.009212 0.000000 255 255 255 255
|
0.209185 -0.716277 0.000000 255 255 255 255
|
||||||
-0.090815 -0.008989 0.000000 255 255 255 255
|
0.190815 -0.615470 0.000000 255 255 255 255
|
||||||
-0.090815 0.009212 0.000000 255 255 255 255
|
0.190815 -0.716277 0.000000 255 255 255 255
|
||||||
-0.109185 -0.008989 0.000000 255 255 255 255
|
0.209185 -0.615470 0.000000 255 255 255 255
|
||||||
0.590815 0.009212 0.000000 255 255 255 255
|
-0.714441 -0.011020 0.000000 255 255 255 255
|
||||||
0.609185 -0.008989 0.000000 255 255 255 255
|
-0.613635 0.007350 0.000000 255 255 255 255
|
||||||
0.609185 0.009212 0.000000 255 255 255 255
|
-0.714441 0.007350 0.000000 255 255 255 255
|
||||||
0.590815 -0.008989 0.000000 255 255 255 255
|
-0.613635 -0.011020 0.000000 255 255 255 255
|
||||||
0.690815 0.009212 0.000000 255 255 255 255
|
-0.714442 0.188980 0.000000 255 255 255 255
|
||||||
0.709185 -0.008989 0.000000 255 255 255 255
|
-0.613635 0.207350 0.000000 255 255 255 255
|
||||||
0.709185 0.009212 0.000000 255 255 255 255
|
-0.714442 0.207350 0.000000 255 255 255 255
|
||||||
0.690815 -0.008989 0.000000 255 255 255 255
|
-0.613635 0.188980 0.000000 255 255 255 255
|
||||||
0.790815 0.009212 0.000000 255 255 255 255
|
-0.714442 0.388980 0.000000 255 255 255 255
|
||||||
0.809185 -0.008989 0.000000 255 255 255 255
|
-0.613635 0.407350 0.000000 255 255 255 255
|
||||||
0.809185 0.009212 0.000000 255 255 255 255
|
-0.714442 0.407350 0.000000 255 255 255 255
|
||||||
0.790815 -0.008989 0.000000 255 255 255 255
|
-0.613635 0.388980 0.000000 255 255 255 255
|
||||||
0.890815 0.009212 0.000000 255 255 255 255
|
-0.714441 -0.411020 0.000000 255 255 255 255
|
||||||
0.909185 -0.008989 0.000000 255 255 255 255
|
-0.613635 -0.392650 0.000000 255 255 255 255
|
||||||
0.909185 0.009212 0.000000 255 255 255 255
|
-0.714441 -0.392650 0.000000 255 255 255 255
|
||||||
0.890815 -0.008989 0.000000 255 255 255 255
|
-0.613635 -0.411020 0.000000 255 255 255 255
|
||||||
0.990815 0.009212 0.000000 255 255 255 255
|
-0.714441 -0.211020 0.000000 255 255 255 255
|
||||||
1.009185 -0.008989 0.000000 255 255 255 255
|
-0.613635 -0.192650 0.000000 255 255 255 255
|
||||||
1.009185 0.009212 0.000000 255 255 255 255
|
-0.714441 -0.192650 0.000000 255 255 255 255
|
||||||
0.990815 -0.008989 0.000000 255 255 255 255
|
-0.613635 -0.211020 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
|
|
||||||
3 0 1 2
|
3 0 1 2
|
||||||
3 0 3 1
|
3 0 3 1
|
||||||
3 4 5 6
|
3 4 5 6
|
||||||
@@ -216,45 +132,3 @@ end_header
|
|||||||
3 72 75 73
|
3 72 75 73
|
||||||
3 76 77 78
|
3 76 77 78
|
||||||
3 76 79 77
|
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
|
|
||||||
|
|||||||
Reference in New Issue
Block a user