mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-12 02:40:00 +01:00
Implementation of vertical crop (2 axis projection manipulation in frame
buffer). Cleanup of UI for appearance view.
This commit is contained in:
@@ -341,6 +341,7 @@ Symbol::Symbol(Type t, glm::vec3 pos) : Node(), type_(t)
|
|||||||
icons[BUSY] = new Mesh("mesh/icon_circles.ply");
|
icons[BUSY] = new Mesh("mesh/icon_circles.ply");
|
||||||
icons[LOCK] = new Mesh("mesh/icon_lock.ply");
|
icons[LOCK] = new Mesh("mesh/icon_lock.ply");
|
||||||
icons[UNLOCK] = new Mesh("mesh/icon_unlock.ply");
|
icons[UNLOCK] = new Mesh("mesh/icon_unlock.ply");
|
||||||
|
icons[CROP] = new Mesh("mesh/icon_rightarrow.ply");
|
||||||
icons[CIRCLE] = new Mesh("mesh/icon_circle.ply");
|
icons[CIRCLE] = new Mesh("mesh/icon_circle.ply");
|
||||||
icons[CLOCK] = new Mesh("mesh/icon_clock.ply");
|
icons[CLOCK] = new Mesh("mesh/icon_clock.ply");
|
||||||
icons[CLOCK_H] = new Mesh("mesh/icon_clock_hand.ply");
|
icons[CLOCK_H] = new Mesh("mesh/icon_clock_hand.ply");
|
||||||
|
|||||||
@@ -55,20 +55,21 @@ protected:
|
|||||||
Mesh *shadow_;
|
Mesh *shadow_;
|
||||||
glm::vec2 corner_;
|
glm::vec2 corner_;
|
||||||
Type type_;
|
Type type_;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Symbol : public Node
|
class Symbol : public Node
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef enum { CIRCLE_POINT = 0, SQUARE_POINT, IMAGE, VIDEO, SESSION, CLONE, RENDER, PATTERN, CAMERA, SHARE,
|
typedef enum { CIRCLE_POINT = 0, SQUARE_POINT, IMAGE, VIDEO, SESSION, CLONE, RENDER, PATTERN, CAMERA, SHARE,
|
||||||
DOTS, BUSY, LOCK, UNLOCK, CIRCLE, SQUARE, CLOCK, CLOCK_H, GRID, CROSS, EMPTY } Type;
|
DOTS, BUSY, LOCK, UNLOCK, CROP, CIRCLE, SQUARE, CLOCK, CLOCK_H, GRID, CROSS, EMPTY } Type;
|
||||||
Symbol(Type t = CIRCLE_POINT, glm::vec3 pos = glm::vec3(0.f));
|
Symbol(Type t = CIRCLE_POINT, glm::vec3 pos = glm::vec3(0.f));
|
||||||
~Symbol();
|
~Symbol();
|
||||||
|
|
||||||
void draw (glm::mat4 modelview, glm::mat4 projection) override;
|
void draw (glm::mat4 modelview, glm::mat4 projection) override;
|
||||||
void accept (Visitor& v) override;
|
void accept (Visitor& v) override;
|
||||||
|
|
||||||
|
GlmToolkit::AxisAlignedBoundingBox bbox() const { return symbol_->bbox(); }
|
||||||
|
|
||||||
Type type() const { return type_; }
|
Type type() const { return type_; }
|
||||||
glm::vec4 color;
|
glm::vec4 color;
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ FrameBuffer::FrameBuffer(glm::vec3 resolution, bool useAlpha, bool multiSampling
|
|||||||
{
|
{
|
||||||
attrib_.viewport = glm::ivec2(resolution);
|
attrib_.viewport = glm::ivec2(resolution);
|
||||||
attrib_.clear_color = glm::vec4(0.f, 0.f, 0.f, use_alpha_ ? 0.f : 1.f);
|
attrib_.clear_color = glm::vec4(0.f, 0.f, 0.f, use_alpha_ ? 0.f : 1.f);
|
||||||
projection_ = glm::ortho(-1.f, 1.f, 1.f, -1.f, -1.f, 1.f);
|
crop(glm::vec2(1.f, 1.f));
|
||||||
}
|
}
|
||||||
|
|
||||||
FrameBuffer::FrameBuffer(uint width, uint height, bool useAlpha, bool multiSampling):
|
FrameBuffer::FrameBuffer(uint width, uint height, bool useAlpha, bool multiSampling):
|
||||||
@@ -37,7 +37,7 @@ FrameBuffer::FrameBuffer(uint width, uint height, bool useAlpha, bool multiSampl
|
|||||||
{
|
{
|
||||||
attrib_.viewport = glm::ivec2(width, height);
|
attrib_.viewport = glm::ivec2(width, height);
|
||||||
attrib_.clear_color = glm::vec4(0.f, 0.f, 0.f, use_alpha_ ? 0.f : 1.f);
|
attrib_.clear_color = glm::vec4(0.f, 0.f, 0.f, use_alpha_ ? 0.f : 1.f);
|
||||||
projection_ = glm::ortho(-1.f, 1.f, 1.f, -1.f, -1.f, 1.f);
|
crop(glm::vec2(1.f, 1.f));
|
||||||
}
|
}
|
||||||
|
|
||||||
void FrameBuffer::init()
|
void FrameBuffer::init()
|
||||||
@@ -252,14 +252,16 @@ glm::mat4 FrameBuffer::projection() const
|
|||||||
return projection_;
|
return projection_;
|
||||||
}
|
}
|
||||||
|
|
||||||
float FrameBuffer::projectionAspectRatio() const
|
|
||||||
|
glm::vec2 FrameBuffer::projectionArea() const
|
||||||
{
|
{
|
||||||
return ( 1.f / projection_[0][0] ); // TODO height
|
return projection_crop_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FrameBuffer::crop(glm::vec2 c)
|
void FrameBuffer::crop(glm::vec2 c)
|
||||||
{
|
{
|
||||||
glm::vec2 scale = glm::clamp(c, glm::vec2(0.2f, 0.2f), glm::vec2(1.f, 1.f));
|
projection_crop_.x = CLAMP(c.x, 0.1f, 1.f);
|
||||||
projection_ = glm::ortho(-scale.x, scale.x, scale.y, -scale.y, -1.f, 1.f);
|
projection_crop_.y = CLAMP(c.y, 0.1f, 1.f);
|
||||||
|
projection_ = glm::ortho(-projection_crop_.x, projection_crop_.x, projection_crop_.y, -projection_crop_.y, -1.f, 1.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public:
|
|||||||
|
|
||||||
// projection and crop
|
// projection and crop
|
||||||
glm::mat4 projection() const;
|
glm::mat4 projection() const;
|
||||||
float projectionAspectRatio() const;
|
glm::vec2 projectionArea() const;
|
||||||
void crop(glm::vec2 c);
|
void crop(glm::vec2 c);
|
||||||
|
|
||||||
// internal pixel format
|
// internal pixel format
|
||||||
@@ -60,6 +60,7 @@ private:
|
|||||||
|
|
||||||
RenderingAttrib attrib_;
|
RenderingAttrib attrib_;
|
||||||
glm::mat4 projection_;
|
glm::mat4 projection_;
|
||||||
|
glm::vec2 projection_crop_;
|
||||||
uint textureid_, intermediate_textureid_;
|
uint textureid_, intermediate_textureid_;
|
||||||
uint framebufferid_, intermediate_framebufferid_;
|
uint framebufferid_, intermediate_framebufferid_;
|
||||||
bool use_alpha_, use_multi_sampling_;
|
bool use_alpha_, use_multi_sampling_;
|
||||||
|
|||||||
@@ -396,10 +396,11 @@ void ImGuiVisitor::visit (Source& s)
|
|||||||
// preview
|
// preview
|
||||||
float preview_width = ImGui::GetContentRegionAvail().x IMGUI_RIGHT_ALIGN;
|
float preview_width = ImGui::GetContentRegionAvail().x IMGUI_RIGHT_ALIGN;
|
||||||
float width = preview_width;
|
float width = preview_width;
|
||||||
float height = width / ( s.frame()->aspectRatio() * s.frame()->projectionAspectRatio() );
|
glm::vec2 size = s.frame()->projectionArea() * glm::vec2( s.frame()->aspectRatio(), 1.f);
|
||||||
|
float height = width * size.y / size.x;
|
||||||
if (height > 200) {
|
if (height > 200) {
|
||||||
height = 200;
|
height = 200;
|
||||||
width = height * ( s.frame()->aspectRatio() * s.frame()->projectionAspectRatio() );
|
width = height * size.x / size.y;
|
||||||
}
|
}
|
||||||
ImGui::Image((void*)(uintptr_t) s.frame()->texture(), ImVec2(width, height));
|
ImGui::Image((void*)(uintptr_t) s.frame()->texture(), ImVec2(width, height));
|
||||||
|
|
||||||
|
|||||||
@@ -170,6 +170,23 @@ void PickingVisitor::visit(Handles &n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PickingVisitor::visit(Symbol& n)
|
||||||
|
{
|
||||||
|
// discard if not visible or if not exactly one point given for picking
|
||||||
|
if ((!n.visible_ && !force_) || points_.size() != 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// apply inverse transform to the point of interest
|
||||||
|
glm::vec4 P = glm::inverse(modelview_) * glm::vec4( points_[0], 1.f );
|
||||||
|
|
||||||
|
// test bounding box for picking from a single point
|
||||||
|
if ( n.bbox().contains( glm::vec3(P)) ) {
|
||||||
|
// add this to the nodes picked
|
||||||
|
nodes_.push_back( std::pair(&n, glm::vec2(P)) );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void PickingVisitor::visit(Scene &n)
|
void PickingVisitor::visit(Scene &n)
|
||||||
{
|
{
|
||||||
n.root()->accept(*this);
|
n.root()->accept(*this);
|
||||||
|
|||||||
@@ -50,6 +50,11 @@ public:
|
|||||||
* @param n
|
* @param n
|
||||||
*/
|
*/
|
||||||
void visit(Handles& n) override;
|
void visit(Handles& n) override;
|
||||||
|
/**
|
||||||
|
* @brief visit Disk : picking grabber for mixing view
|
||||||
|
* @param n
|
||||||
|
*/
|
||||||
|
void visit(Symbol& n) override;
|
||||||
/**
|
/**
|
||||||
* @brief visit Disk : picking grabber for mixing view
|
* @brief visit Disk : picking grabber for mixing view
|
||||||
* @param n
|
* @param n
|
||||||
|
|||||||
@@ -448,8 +448,9 @@ void Source::update(float dt)
|
|||||||
|
|
||||||
// MODIFY CROP
|
// MODIFY CROP
|
||||||
if (renderbuffer_) {
|
if (renderbuffer_) {
|
||||||
groups_[View::MIXING]->scale_.x *= renderbuffer_->projectionAspectRatio();
|
glm::vec2 crop = renderbuffer_->projectionArea();
|
||||||
groups_[View::LAYER]->scale_.x = renderbuffer_->projectionAspectRatio();
|
groups_[View::MIXING]->scale_.x *= crop.x / crop.y;
|
||||||
|
groups_[View::LAYER]->scale_.x = crop.x / crop.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
need_update_ = false;
|
need_update_ = false;
|
||||||
|
|||||||
@@ -1956,7 +1956,7 @@ void Navigator::Render()
|
|||||||
Mixer::manager().setView(View::LAYER);
|
Mixer::manager().setView(View::LAYER);
|
||||||
view_pannel_visible = previous_view == Settings::application.current_view;
|
view_pannel_visible = previous_view == Settings::application.current_view;
|
||||||
}
|
}
|
||||||
if (ImGui::Selectable( ICON_FA_IMAGE, &selected_view[4], 0, iconsize))
|
if (ImGui::Selectable( ICON_FA_SIGN, &selected_view[4], 0, iconsize))
|
||||||
{
|
{
|
||||||
Mixer::manager().setView(View::APPEARANCE);
|
Mixer::manager().setView(View::APPEARANCE);
|
||||||
view_pannel_visible = previous_view == Settings::application.current_view;
|
view_pannel_visible = previous_view == Settings::application.current_view;
|
||||||
|
|||||||
183
View.cpp
183
View.cpp
@@ -818,11 +818,20 @@ void showContextMenu(View::Mode m, const char* label)
|
|||||||
s->group(m)->translation_ = glm::vec3(0,0,0);
|
s->group(m)->translation_ = glm::vec3(0,0,0);
|
||||||
s->touch();
|
s->touch();
|
||||||
}
|
}
|
||||||
else if (ImGui::Selectable( ICON_FA_VECTOR_SQUARE " Restore" )){
|
else if (ImGui::Selectable( ICON_FA_VECTOR_SQUARE " Reset" )){
|
||||||
s->group(m)->scale_ = glm::vec3(1,1,1);
|
s->group(m)->scale_ = glm::vec3(1,1,1);
|
||||||
s->group(m)->rotation_.z = 0;
|
s->group(m)->rotation_.z = 0;
|
||||||
s->touch();
|
s->touch();
|
||||||
}
|
}
|
||||||
|
else if (ImGui::Selectable( ICON_FA_EXPAND " Fit" )){
|
||||||
|
FrameBuffer *output = Mixer::manager().session()->frame();
|
||||||
|
float w = 1.f;
|
||||||
|
if (output) w = output->aspectRatio() / s->frame()->aspectRatio();
|
||||||
|
s->group(m)->scale_ = glm::vec3(w,1,1);
|
||||||
|
s->group(m)->rotation_.z = 0;
|
||||||
|
s->group(m)->translation_ = glm::vec3(0,0,0);
|
||||||
|
s->touch();
|
||||||
|
}
|
||||||
else if (ImGui::Selectable( ICON_FA_PERCENTAGE " Original aspect ratio" )){ //ICON_FA_ARROWS_ALT_H
|
else if (ImGui::Selectable( ICON_FA_PERCENTAGE " Original aspect ratio" )){ //ICON_FA_ARROWS_ALT_H
|
||||||
s->group(m)->scale_.x = s->group(m)->scale_.y;
|
s->group(m)->scale_.x = s->group(m)->scale_.y;
|
||||||
s->touch();
|
s->touch();
|
||||||
@@ -1741,33 +1750,76 @@ AppearanceView::AppearanceView() : View(APPEARANCE), edit_source_(nullptr), need
|
|||||||
// no settings found: store application default
|
// no settings found: store application default
|
||||||
Settings::application.views[mode_].name = "Appearance";
|
Settings::application.views[mode_].name = "Appearance";
|
||||||
scene.root()->scale_ = glm::vec3(APPEARANCE_DEFAULT_SCALE, APPEARANCE_DEFAULT_SCALE, 1.0f);
|
scene.root()->scale_ = glm::vec3(APPEARANCE_DEFAULT_SCALE, APPEARANCE_DEFAULT_SCALE, 1.0f);
|
||||||
scene.root()->translation_ = glm::vec3(1.8f, 0.f, 0.0f);
|
scene.root()->translation_ = glm::vec3(0.8f, 0.f, 0.0f);
|
||||||
saveSettings();
|
saveSettings();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
restoreSettings();
|
restoreSettings();
|
||||||
|
|
||||||
// Scene background
|
// Scene background
|
||||||
|
//
|
||||||
|
// global dark
|
||||||
Surface *tmp = new Surface( new Shader);
|
Surface *tmp = new Surface( new Shader);
|
||||||
tmp->scale_ = glm::vec3(20.f, 20.f, 1.f);
|
tmp->scale_ = glm::vec3(20.f, 20.f, 1.f);
|
||||||
tmp->shader()->color = glm::vec4( 0.1f, 0.1f, 0.1f, 0.6f );
|
tmp->shader()->color = glm::vec4( 0.1f, 0.1f, 0.1f, 0.6f );
|
||||||
scene.bg()->attach(tmp);
|
scene.bg()->attach(tmp);
|
||||||
backgroundframe = new Frame(Frame::SHARP, Frame::THIN, Frame::NONE);
|
// frame showing the source original shape
|
||||||
backgroundframe->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 0.3f );
|
backgroundframe_ = new Surface( new Shader);
|
||||||
scene.bg()->attach(backgroundframe);
|
backgroundframe_->shader()->color = glm::vec4( COLOR_LIMBO_CIRCLE, 0.8f );
|
||||||
|
scene.bg()->attach(backgroundframe_);
|
||||||
|
// Horizontal axis
|
||||||
|
horizontal_line_ = new Mesh("mesh/h_line.ply");
|
||||||
|
horizontal_line_->shader()->color = glm::vec4( COLOR_TRANSITION_LINES, 0.9f );
|
||||||
|
horizontal_line_->translation_ = glm::vec3(0.f, 1.1f, 0.0f);
|
||||||
|
horizontal_line_->scale_.x = 1.0f;
|
||||||
|
horizontal_line_->scale_.y = 3.0f;
|
||||||
|
scene.bg()->attach(horizontal_line_);
|
||||||
|
Mesh *mark = new Mesh("mesh/h_mark.ply");
|
||||||
|
mark->translation_ = glm::vec3(0.f, 1.1f, 0.0f);
|
||||||
|
mark->scale_ = glm::vec3(2.5f, -2.5f, 0.0f);
|
||||||
|
mark->shader()->color = glm::vec4( COLOR_TRANSITION_LINES, 0.9f );
|
||||||
|
scene.bg()->attach(mark);
|
||||||
|
// vertical axis
|
||||||
|
vertical_line_ = new Group;
|
||||||
|
Mesh *line = new Mesh("mesh/h_line.ply");
|
||||||
|
line->shader()->color = glm::vec4( COLOR_TRANSITION_LINES, 0.9f );
|
||||||
|
line->translation_ = glm::vec3(-0.1f, 0.0f, 0.0f);
|
||||||
|
line->scale_.x = 1.0f;
|
||||||
|
line->scale_.y = 3.0f;
|
||||||
|
line->rotation_.z = M_PI_2;
|
||||||
|
vertical_line_->attach(line);
|
||||||
|
mark = new Mesh("mesh/h_mark.ply");
|
||||||
|
mark->translation_ = glm::vec3(-0.1f, 0.0f, 0.0f);
|
||||||
|
mark->scale_ = glm::vec3(2.5f, -2.5f, 0.0f);
|
||||||
|
mark->rotation_.z = M_PI_2;
|
||||||
|
mark->shader()->color = glm::vec4( COLOR_TRANSITION_LINES, 0.9f );
|
||||||
|
vertical_line_->attach(mark);
|
||||||
|
scene.bg()->attach(vertical_line_);
|
||||||
|
|
||||||
|
// surface showing the source transparency background
|
||||||
backgroundpreview = new ImageSurface("images/checker.dds"); // black : TODO transparency grid
|
backgroundpreview = new ImageSurface("images/checker.dds"); // black : TODO transparency grid
|
||||||
backgroundpreview->setTextureUV(glm::vec4(0.5f, 0.5f, 64.f, 64.f));
|
backgroundpreview->setTextureUV(glm::vec4(0.5f, 0.5f, 64.f, 64.f));
|
||||||
backgroundpreview->translation_.z = 0.001f;
|
backgroundpreview->translation_.z = 0.001f;
|
||||||
scene.bg()->attach(backgroundpreview);
|
scene.bg()->attach(backgroundpreview);
|
||||||
|
// surface to show the texture of the source
|
||||||
surfacepreview = new Surface; // to attach source preview
|
surfacepreview = new Surface; // to attach source preview
|
||||||
surfacepreview->translation_.z = 0.002f;
|
surfacepreview->translation_.z = 0.002f;
|
||||||
scene.bg()->attach(surfacepreview);
|
scene.bg()->attach(surfacepreview);
|
||||||
|
|
||||||
// Geometry Scene foreground
|
// Geometry Scene foreground
|
||||||
Frame *border = new Frame(Frame::SHARP, Frame::LARGE, Frame::GLOW);
|
//
|
||||||
border->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 1.f );
|
// frame showing the edited source shape
|
||||||
scene.fg()->attach(border);
|
foregroundframe_ = new Frame(Frame::SHARP, Frame::LARGE, Frame::GLOW);
|
||||||
|
foregroundframe_->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 1.f );
|
||||||
|
scene.fg()->attach(foregroundframe_);
|
||||||
|
// crop icons
|
||||||
|
crop_horizontal_ = new Symbol(Symbol::CROP);
|
||||||
|
crop_horizontal_->translation_ = glm::vec3(1.0f, 1.1f, 0.f);
|
||||||
|
scene.fg()->attach(crop_horizontal_);
|
||||||
|
crop_vertical_ = new Symbol(Symbol::CROP);
|
||||||
|
crop_vertical_->rotation_.z = M_PI_2;
|
||||||
|
crop_vertical_->translation_ = glm::vec3(-1.1f, -1.0f, 0.f);
|
||||||
|
scene.fg()->attach(crop_vertical_);
|
||||||
// User interface foreground
|
// User interface foreground
|
||||||
//
|
//
|
||||||
// point to show POSITION
|
// point to show POSITION
|
||||||
@@ -1904,6 +1956,10 @@ std::pair<Node *, glm::vec2> AppearanceView::pick(glm::vec2 P)
|
|||||||
pick = *itp;
|
pick = *itp;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
else if ( (*itp).first == crop_horizontal_ || (*itp).first == crop_vertical_ ) {
|
||||||
|
pick = *itp;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// not found: the edit source was not clicked
|
// not found: the edit source was not clicked
|
||||||
if ( itp == pv.rend() )
|
if ( itp == pv.rend() )
|
||||||
@@ -1930,25 +1986,34 @@ void AppearanceView::adjustBackground()
|
|||||||
{
|
{
|
||||||
// by default consider edit source is null
|
// by default consider edit source is null
|
||||||
float image_original_width = 1.f;
|
float image_original_width = 1.f;
|
||||||
float image_projection_width = 1.f;
|
glm::vec2 image_crop_area = glm::vec2(1.f, 1.f);
|
||||||
surfacepreview->setTextureIndex(0);
|
surfacepreview->setTextureIndex(0);
|
||||||
|
|
||||||
// if its a valid index
|
// if its a valid index
|
||||||
if (edit_source_ != nullptr) {
|
if (edit_source_ != nullptr) {
|
||||||
// update rendering frame to match edit source AR
|
// update rendering frame to match edit source AR
|
||||||
image_original_width = edit_source_->frame()->aspectRatio();
|
image_original_width = edit_source_->frame()->aspectRatio();
|
||||||
image_projection_width = image_original_width * edit_source_->frame()->projectionAspectRatio();;
|
|
||||||
surfacepreview->setTextureIndex( edit_source_->frame()->texture() );
|
surfacepreview->setTextureIndex( edit_source_->frame()->texture() );
|
||||||
|
image_crop_area = edit_source_->frame()->projectionArea();
|
||||||
|
image_crop_area.x *= image_original_width;
|
||||||
}
|
}
|
||||||
|
|
||||||
// update aspect ratio
|
// update aspect ratio
|
||||||
backgroundframe->scale_.x = image_original_width;
|
|
||||||
surfacepreview->scale_.x = image_projection_width;
|
// background
|
||||||
backgroundpreview->scale_.x = image_projection_width;
|
horizontal_line_->scale_.x = image_original_width;
|
||||||
backgroundpreview->setTextureUV(glm::vec4(0.5f, 0.5f, 64.f * image_projection_width, 64.f));
|
vertical_line_->translation_.x = -image_original_width;
|
||||||
for (NodeSet::iterator node = scene.fg()->begin(); node != scene.fg()->end(); node++) {
|
backgroundframe_->scale_.x = image_original_width;
|
||||||
(*node)->scale_.x = image_projection_width;
|
|
||||||
}
|
surfacepreview->scale_ = glm::vec3(image_crop_area, 1.f);
|
||||||
|
backgroundpreview->scale_ = glm::vec3(image_crop_area, 1.f);
|
||||||
|
backgroundpreview->setTextureUV(glm::vec4(0.5f, 0.5f, 64.f * image_crop_area.x, 64.f * image_crop_area.y));
|
||||||
|
|
||||||
|
// foreground
|
||||||
|
crop_horizontal_->translation_.x = image_crop_area.x;
|
||||||
|
crop_vertical_->translation_.y = -image_crop_area.y;
|
||||||
|
crop_vertical_->translation_.x = -image_original_width - 0.1f;
|
||||||
|
foregroundframe_->scale_ = glm::vec3(image_crop_area, 1.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
Source *AppearanceView::getEditOrCurrentSource()
|
Source *AppearanceView::getEditOrCurrentSource()
|
||||||
@@ -1991,42 +2056,20 @@ void AppearanceView::draw()
|
|||||||
}
|
}
|
||||||
showContextMenu(mode_,"AppearanceContextMenu");
|
showContextMenu(mode_,"AppearanceContextMenu");
|
||||||
|
|
||||||
|
// draw general view
|
||||||
// if ( edit_source_ != nullptr ) {
|
|
||||||
|
|
||||||
// glm::vec2 P = Rendering::manager().project(glm::vec3(1.1f, 1.14f, 0.f), scene.root()->transform_, false);
|
|
||||||
// ImGui::SetNextWindowPos(ImVec2(P.x, P.y), ImGuiCond_Always);
|
|
||||||
// if (ImGui::Begin("##WIDTH", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBackground
|
|
||||||
// | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings
|
|
||||||
// | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
|
|
||||||
// {
|
|
||||||
// ImGuiToolkit::PushFont(ImGuiToolkit::FONT_LARGE);
|
|
||||||
// ImGui::SetNextItemWidth(100.f);
|
|
||||||
// float crop_width = edit_source_->frame()->projectionAspectRatio();
|
|
||||||
// if ( ImGui::DragFloat("##apppearancewidth", &crop_width, 0.05f, 0.2f, 1.f, "%.1f ") )
|
|
||||||
// {
|
|
||||||
// // crop horizontally
|
|
||||||
// edit_source_->frame()->crop(glm::vec2(crop_width, 1.f));
|
|
||||||
// // TODO scale GEOMETRY and RENDER groups
|
|
||||||
// edit_source_->touch();
|
|
||||||
// // update background and frame
|
|
||||||
// adjustBackground();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// ImGui::PopFont();
|
|
||||||
// ImGui::End();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
Shader::force_blending_opacity = true;
|
Shader::force_blending_opacity = true;
|
||||||
View::draw();
|
View::draw();
|
||||||
Shader::force_blending_opacity = false;
|
Shader::force_blending_opacity = false;
|
||||||
|
|
||||||
if (edit_source_ != nullptr){
|
if (edit_source_ != nullptr){
|
||||||
|
|
||||||
// force to redraw the frame of the edit source (even if source is not visible)
|
// force to redraw the frame of the edit source (even if source is not visible)
|
||||||
DrawVisitor dv(edit_source_->frames_[mode_], Rendering::manager().Projection(), true);
|
DrawVisitor dv(edit_source_->frames_[mode_], Rendering::manager().Projection(), true);
|
||||||
scene.accept(dv);
|
scene.accept(dv);
|
||||||
|
|
||||||
|
// float edit_width = edit_source_->frame()->aspectRatio();
|
||||||
|
// glm::vec2 cropped = edit_source_->frame()->projectionArea();
|
||||||
|
// crop_horizontal_->translation_.x = cropped.x * edit_width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2034,16 +2077,53 @@ View::Cursor AppearanceView::grab (Source *s, glm::vec2 from, glm::vec2 to, std:
|
|||||||
{
|
{
|
||||||
View::Cursor ret = Cursor();
|
View::Cursor ret = Cursor();
|
||||||
|
|
||||||
// work on the given source
|
|
||||||
if (!s)
|
|
||||||
return ret;
|
|
||||||
Group *sourceNode = s->group(mode_); // groups_[View::GEOMETRY]
|
|
||||||
|
|
||||||
// grab coordinates in scene-View reference frame
|
// grab coordinates in scene-View reference frame
|
||||||
glm::vec3 scene_from = Rendering::manager().unProject(from, scene.root()->transform_);
|
glm::vec3 scene_from = Rendering::manager().unProject(from, scene.root()->transform_);
|
||||||
glm::vec3 scene_to = Rendering::manager().unProject(to, scene.root()->transform_);
|
glm::vec3 scene_to = Rendering::manager().unProject(to, scene.root()->transform_);
|
||||||
glm::vec3 scene_translation = scene_to - scene_from;
|
glm::vec3 scene_translation = scene_to - scene_from;
|
||||||
|
|
||||||
|
// work on the given source
|
||||||
|
if (!s) {
|
||||||
|
|
||||||
|
if ( edit_source_ != nullptr ) {
|
||||||
|
|
||||||
|
// make sure matrix transform of stored status is updated
|
||||||
|
edit_source_->stored_status_->update(0);
|
||||||
|
|
||||||
|
// picking on the resizing handles in the corners
|
||||||
|
if ( pick.first == crop_horizontal_ ) {
|
||||||
|
|
||||||
|
// crop horizontally
|
||||||
|
glm::vec2 cropped = edit_source_->frame()->projectionArea();
|
||||||
|
float max_width = edit_source_->frame()->aspectRatio();
|
||||||
|
cropped.x = CLAMP(scene_to.x, 0.2f, max_width) / max_width;
|
||||||
|
edit_source_->frame()->crop(cropped);
|
||||||
|
// TODO scale GEOMETRY and RENDER groups
|
||||||
|
edit_source_->touch();
|
||||||
|
// update background and frame
|
||||||
|
adjustBackground();
|
||||||
|
// cursor indication
|
||||||
|
ret.type = Cursor_ResizeEW;
|
||||||
|
}
|
||||||
|
if ( pick.first == crop_vertical_ ) {
|
||||||
|
// crop vertically
|
||||||
|
glm::vec2 cropped = edit_source_->frame()->projectionArea();
|
||||||
|
cropped.y = -1.f * CLAMP(scene_to.y, -1.f, -0.2f);
|
||||||
|
edit_source_->frame()->crop(cropped);
|
||||||
|
// TODO scale GEOMETRY and RENDER groups
|
||||||
|
edit_source_->touch();
|
||||||
|
// update background and frame
|
||||||
|
adjustBackground();
|
||||||
|
// cursor indication
|
||||||
|
ret.type = Cursor_ResizeNS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
Group *sourceNode = s->group(mode_); // groups_[View::GEOMETRY]
|
||||||
|
|
||||||
// make sure matrix transform of stored status is updated
|
// make sure matrix transform of stored status is updated
|
||||||
s->stored_status_->update(0);
|
s->stored_status_->update(0);
|
||||||
|
|
||||||
@@ -2075,6 +2155,7 @@ View::Cursor AppearanceView::grab (Source *s, glm::vec2 from, glm::vec2 to, std:
|
|||||||
// convert source position in corner reference frame
|
// convert source position in corner reference frame
|
||||||
glm::vec4 center = scene_to_corner_transform * glm::vec4( s->stored_status_->translation_, 1.f);
|
glm::vec4 center = scene_to_corner_transform * glm::vec4( s->stored_status_->translation_, 1.f);
|
||||||
|
|
||||||
|
|
||||||
// picking on the resizing handles in the corners
|
// picking on the resizing handles in the corners
|
||||||
if ( pick.first == s->handles_[mode_][Handles::RESIZE] ) {
|
if ( pick.first == s->handles_[mode_][Handles::RESIZE] ) {
|
||||||
|
|
||||||
|
|||||||
14
View.h
14
View.h
@@ -12,6 +12,8 @@ typedef std::list<Source *> SourceList;
|
|||||||
class SessionSource;
|
class SessionSource;
|
||||||
class Surface;
|
class Surface;
|
||||||
class Symbol;
|
class Symbol;
|
||||||
|
class Mesh;
|
||||||
|
class Frame;
|
||||||
|
|
||||||
class View
|
class View
|
||||||
{
|
{
|
||||||
@@ -212,8 +214,8 @@ public:
|
|||||||
void play(bool open);
|
void play(bool open);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class Surface *output_surface_;
|
Surface *output_surface_;
|
||||||
class Mesh *mark_100ms_, *mark_1s_;
|
Mesh *mark_100ms_, *mark_1s_;
|
||||||
Switch *gradient_;
|
Switch *gradient_;
|
||||||
SessionSource *transition_source_;
|
SessionSource *transition_source_;
|
||||||
};
|
};
|
||||||
@@ -247,10 +249,16 @@ private:
|
|||||||
|
|
||||||
void adjustBackground();
|
void adjustBackground();
|
||||||
|
|
||||||
class Frame *backgroundframe;
|
|
||||||
Surface *backgroundpreview;
|
Surface *backgroundpreview;
|
||||||
Surface *surfacepreview;
|
Surface *surfacepreview;
|
||||||
|
|
||||||
|
Surface *backgroundframe_;
|
||||||
|
Frame *foregroundframe_;
|
||||||
|
Mesh *horizontal_line_;
|
||||||
|
Group *vertical_line_;
|
||||||
|
Symbol *crop_horizontal_;
|
||||||
|
Symbol *crop_vertical_;
|
||||||
|
|
||||||
Symbol *overlay_position_;
|
Symbol *overlay_position_;
|
||||||
Symbol *overlay_position_cross_;
|
Symbol *overlay_position_cross_;
|
||||||
Symbol *overlay_scaling_;
|
Symbol *overlay_scaling_;
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ class LineCircle;
|
|||||||
class Mesh;
|
class Mesh;
|
||||||
class Frame;
|
class Frame;
|
||||||
class Handles;
|
class Handles;
|
||||||
|
class Symbol;
|
||||||
class Disk;
|
class Disk;
|
||||||
class Stream;
|
class Stream;
|
||||||
class MediaPlayer;
|
class MediaPlayer;
|
||||||
@@ -57,6 +58,7 @@ public:
|
|||||||
virtual void visit (Mesh&) {}
|
virtual void visit (Mesh&) {}
|
||||||
virtual void visit (Frame&) {}
|
virtual void visit (Frame&) {}
|
||||||
virtual void visit (Handles&) {}
|
virtual void visit (Handles&) {}
|
||||||
|
virtual void visit (Symbol&) {}
|
||||||
virtual void visit (Disk&) {}
|
virtual void visit (Disk&) {}
|
||||||
virtual void visit (Stream&) {}
|
virtual void visit (Stream&) {}
|
||||||
virtual void visit (MediaPlayer&) {}
|
virtual void visit (MediaPlayer&) {}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
#define LAYER_DEFAULT_SCALE 0.8f
|
#define LAYER_DEFAULT_SCALE 0.8f
|
||||||
#define LAYER_MIN_SCALE 0.4f
|
#define LAYER_MIN_SCALE 0.4f
|
||||||
#define LAYER_MAX_SCALE 1.7f
|
#define LAYER_MAX_SCALE 1.7f
|
||||||
#define APPEARANCE_DEFAULT_SCALE 1.6f
|
#define APPEARANCE_DEFAULT_SCALE 2.f
|
||||||
#define APPEARANCE_MIN_SCALE 0.4f
|
#define APPEARANCE_MIN_SCALE 0.4f
|
||||||
#define APPEARANCE_MAX_SCALE 10.0f
|
#define APPEARANCE_MAX_SCALE 10.0f
|
||||||
#define TRANSITION_DEFAULT_SCALE 5.0f
|
#define TRANSITION_DEFAULT_SCALE 5.0f
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
ply
|
ply
|
||||||
format ascii 1.0
|
format ascii 1.0
|
||||||
comment Created by Blender 2.83.1 - www.blender.org, source file: 'h_line.blend'
|
comment Created by Blender 2.91.0 - www.blender.org
|
||||||
element vertex 26
|
element vertex 14
|
||||||
property float x
|
property float x
|
||||||
property float y
|
property float y
|
||||||
property float z
|
property float z
|
||||||
@@ -9,56 +9,32 @@ property uchar red
|
|||||||
property uchar green
|
property uchar green
|
||||||
property uchar blue
|
property uchar blue
|
||||||
property uchar alpha
|
property uchar alpha
|
||||||
element face 24
|
element face 12
|
||||||
property list uchar uint vertex_indices
|
property list uchar uint vertex_indices
|
||||||
end_header
|
end_header
|
||||||
0.003030 -0.016358 0.000000 255 255 255 255
|
0.982449 0.001584 0.000000 255 255 255 255
|
||||||
-0.000000 -0.013902 0.000000 255 255 255 255
|
1.000075 -0.001403 0.000000 255 255 255 255
|
||||||
-0.000000 -0.016360 0.000000 255 255 255 255
|
1.000097 0.001584 0.000000 255 255 255 255
|
||||||
0.003030 -0.010598 0.000000 255 255 255 255
|
0.971637 -0.001403 0.000000 255 255 255 255
|
||||||
-0.000000 -0.008243 0.000000 255 255 255 255
|
-0.036323 0.001584 0.000000 255 255 255 255
|
||||||
0.003030 -0.005245 0.000000 255 255 255 255
|
-0.963025 0.001584 0.000000 255 255 255 255
|
||||||
0.000000 0.000013 0.000000 255 255 255 255
|
-0.976754 -0.001385 0.000000 255 255 255 255
|
||||||
-0.017626 0.003000 0.000000 255 255 255 255
|
-0.951104 -0.001403 0.000000 255 255 255 255
|
||||||
0.003200 0.003000 0.000000 255 255 255 255
|
-0.987628 0.001584 0.000000 255 255 255 255
|
||||||
-0.036323 0.003000 0.000000 255 255 255 255
|
-1.000000 -0.001403 0.000000 255 255 255 255
|
||||||
-0.028438 0.000013 0.000000 255 255 255 255
|
-0.499475 0.001584 0.000000 255 255 255 255
|
||||||
-0.963025 0.003000 0.000000 255 255 255 255
|
-0.048249 -0.001403 0.000000 255 255 255 255
|
||||||
-0.976754 0.000031 0.000000 255 255 255 255
|
-1.000000 0.001584 0.000000 255 255 255 255
|
||||||
-0.951104 0.000013 0.000000 255 255 255 255
|
-0.499484 -0.001403 0.000000 255 255 255 255
|
||||||
-0.987628 0.003000 0.000000 255 255 255 255
|
|
||||||
-1.000000 0.000013 0.000000 255 255 255 255
|
|
||||||
-1.003292 -0.004700 0.000000 255 255 255 255
|
|
||||||
-1.003000 0.003000 0.000000 255 255 255 255
|
|
||||||
-1.003287 -0.010859 0.000000 255 255 255 255
|
|
||||||
-1.000000 -0.007704 0.000000 255 255 255 255
|
|
||||||
-0.499475 0.003000 0.000000 255 255 255 255
|
|
||||||
-0.048249 0.000013 0.000000 255 255 255 255
|
|
||||||
-1.003287 -0.016722 0.000000 255 255 255 255
|
|
||||||
-1.000000 -0.014160 0.000000 255 255 255 255
|
|
||||||
-0.499484 0.000013 0.000000 255 255 255 255
|
|
||||||
-1.000000 -0.016720 0.000000 255 255 255 255
|
|
||||||
3 0 1 2
|
3 0 1 2
|
||||||
3 3 4 1
|
3 3 0 4
|
||||||
3 5 6 4
|
3 5 6 7
|
||||||
3 7 6 8
|
3 8 9 6
|
||||||
3 9 10 7
|
3 7 10 5
|
||||||
3 11 12 13
|
3 10 11 4
|
||||||
3 14 15 12
|
|
||||||
3 16 15 17
|
|
||||||
3 18 19 16
|
|
||||||
3 13 20 11
|
|
||||||
3 20 21 9
|
|
||||||
3 22 23 18
|
|
||||||
3 0 3 1
|
3 0 3 1
|
||||||
3 3 5 4
|
3 4 11 3
|
||||||
3 5 8 6
|
3 5 8 6
|
||||||
3 7 10 6
|
3 8 12 9
|
||||||
3 9 21 10
|
3 7 13 10
|
||||||
3 11 14 12
|
3 10 13 11
|
||||||
3 14 17 15
|
|
||||||
3 16 19 15
|
|
||||||
3 18 23 19
|
|
||||||
3 13 24 20
|
|
||||||
3 20 24 21
|
|
||||||
3 22 25 23
|
|
||||||
|
|||||||
@@ -1,47 +1,364 @@
|
|||||||
ply
|
ply
|
||||||
format ascii 1.0
|
format ascii 1.0
|
||||||
comment Created by Blender 2.90.1 - www.blender.org
|
comment Created by Blender 2.91.0 - www.blender.org
|
||||||
element vertex 18
|
element vertex 178
|
||||||
property float x
|
property float x
|
||||||
property float y
|
property float y
|
||||||
property float z
|
property float z
|
||||||
property uchar red
|
element face 176
|
||||||
property uchar green
|
|
||||||
property uchar blue
|
|
||||||
property uchar alpha
|
|
||||||
element face 15
|
|
||||||
property list uchar uint vertex_indices
|
property list uchar uint vertex_indices
|
||||||
end_header
|
end_header
|
||||||
-0.098559 0.044351 0.000000 255 255 255 255
|
-0.007848 0.007826 0.000000
|
||||||
-0.080774 0.054762 0.000000 255 255 255 255
|
-0.006431 0.036270 0.000000
|
||||||
-0.098559 0.097694 0.000000 255 255 255 255
|
-0.007848 0.036270 0.000000
|
||||||
-0.000743 -0.000102 0.000000 255 255 255 255
|
-0.004848 0.036270 0.000000
|
||||||
-0.080774 0.026570 0.000000 255 255 255 255
|
-0.003156 0.036270 0.000000
|
||||||
-0.025899 -0.000102 0.000000 255 255 255 255
|
-0.001410 0.036270 0.000000
|
||||||
-0.214161 -0.044555 0.000000 255 255 255 255
|
0.000337 0.036270 0.000000
|
||||||
-0.196376 0.026570 0.000000 255 255 255 255
|
0.002029 0.036270 0.000000
|
||||||
-0.214161 0.044351 0.000000 255 255 255 255
|
0.003612 0.036270 0.000000
|
||||||
-0.196376 -0.026773 0.000000 255 255 255 255
|
0.005029 0.036270 0.000000
|
||||||
-0.080774 -0.054965 0.000000 255 255 255 255
|
0.006227 0.036270 0.000000
|
||||||
-0.098559 -0.097898 0.000000 255 255 255 255
|
0.007151 0.036270 0.000000
|
||||||
-0.080774 -0.026773 0.000000 255 255 255 255
|
0.007746 0.036270 0.000000
|
||||||
-0.098559 -0.044555 0.000000 255 255 255 255
|
0.007956 0.036270 0.000000
|
||||||
0.000234 -0.099325 -0.001878 255 255 255 255
|
0.007956 0.007826 0.000000
|
||||||
0.020009 -0.099325 -0.001878 255 255 255 255
|
-0.044254 0.028970 0.000000
|
||||||
0.020009 0.097955 -0.001878 255 255 255 255
|
-0.041697 0.028916 0.000000
|
||||||
0.000234 0.097955 -0.001878 255 255 255 255
|
-0.042967 0.029065 0.000000
|
||||||
|
0.041804 0.028897 0.000000
|
||||||
|
0.044362 0.028951 0.000000
|
||||||
|
0.043074 0.029046 0.000000
|
||||||
|
-0.045523 0.028615 0.000000
|
||||||
|
0.045631 0.028597 0.000000
|
||||||
|
-0.040480 0.028538 0.000000
|
||||||
|
0.040587 0.028519 0.000000
|
||||||
|
-0.046737 0.027987 0.000000
|
||||||
|
0.046845 0.027968 0.000000
|
||||||
|
-0.039351 0.027945 0.000000
|
||||||
|
0.039459 0.027926 0.000000
|
||||||
|
-0.047861 0.027070 0.000000
|
||||||
|
0.047969 0.027051 0.000000
|
||||||
|
-0.038348 0.027152 0.000000
|
||||||
|
0.038455 0.027133 0.000000
|
||||||
|
-0.037505 0.026175 0.000000
|
||||||
|
0.037612 0.026156 0.000000
|
||||||
|
-0.048301 0.026630 0.000000
|
||||||
|
0.048408 0.026611 0.000000
|
||||||
|
-0.049517 0.025415 0.000000
|
||||||
|
0.049624 0.025396 0.000000
|
||||||
|
-0.036858 0.025027 0.000000
|
||||||
|
0.036966 0.025008 0.000000
|
||||||
|
-0.051354 0.023578 0.000000
|
||||||
|
0.051461 0.023559 0.000000
|
||||||
|
-0.036444 0.023724 0.000000
|
||||||
|
0.036552 0.023705 0.000000
|
||||||
|
-0.036298 0.022281 0.000000
|
||||||
|
0.036406 0.022262 0.000000
|
||||||
|
-0.053656 0.021276 0.000000
|
||||||
|
0.053763 0.021257 0.000000
|
||||||
|
-0.036298 0.021997 0.000000
|
||||||
|
0.036406 0.007826 0.000000
|
||||||
|
-0.036298 0.021211 0.000000
|
||||||
|
-0.056269 0.018664 0.000000
|
||||||
|
0.056376 0.018645 0.000000
|
||||||
|
-0.036298 0.020023 0.000000
|
||||||
|
-0.036298 0.018534 0.000000
|
||||||
|
-0.059037 0.015897 0.000000
|
||||||
|
0.059144 0.015878 0.000000
|
||||||
|
-0.036298 0.016844 0.000000
|
||||||
|
-0.036298 0.015054 0.000000
|
||||||
|
-0.061805 0.013129 0.000000
|
||||||
|
0.061912 0.013110 0.000000
|
||||||
|
-0.036298 0.013263 0.000000
|
||||||
|
-0.036298 0.011574 0.000000
|
||||||
|
-0.064418 0.010517 0.000000
|
||||||
|
0.064525 0.010498 0.000000
|
||||||
|
-0.036298 0.010085 0.000000
|
||||||
|
-0.066720 0.008215 0.000000
|
||||||
|
0.066828 0.008196 0.000000
|
||||||
|
-0.036298 0.008897 0.000000
|
||||||
|
-0.036298 0.008110 0.000000
|
||||||
|
-0.068557 0.006379 0.000000
|
||||||
|
0.068664 0.006360 0.000000
|
||||||
|
-0.036298 0.007826 0.000000
|
||||||
|
-0.069773 0.005163 0.000000
|
||||||
|
0.069880 0.005144 0.000000
|
||||||
|
-0.070213 0.004723 0.000000
|
||||||
|
0.070320 0.004704 0.000000
|
||||||
|
-0.070819 0.004030 0.000000
|
||||||
|
0.070926 0.004011 0.000000
|
||||||
|
-0.071315 0.003279 0.000000
|
||||||
|
0.071422 0.003260 0.000000
|
||||||
|
-0.071701 0.002483 0.000000
|
||||||
|
0.071808 0.002464 0.000000
|
||||||
|
-0.071976 0.001653 0.000000
|
||||||
|
0.072084 0.001634 0.000000
|
||||||
|
-0.072142 0.000800 0.000000
|
||||||
|
0.072249 0.000780 0.000000
|
||||||
|
-0.072197 -0.000065 0.000000
|
||||||
|
0.072304 -0.000084 0.000000
|
||||||
|
-0.072142 -0.000930 0.000000
|
||||||
|
0.072249 -0.000949 0.000000
|
||||||
|
-0.071976 -0.001783 0.000000
|
||||||
|
0.072084 -0.001802 0.000000
|
||||||
|
-0.071701 -0.002613 0.000000
|
||||||
|
0.071808 -0.002633 0.000000
|
||||||
|
-0.071315 -0.003410 0.000000
|
||||||
|
0.071422 -0.003429 0.000000
|
||||||
|
-0.070819 -0.004160 0.000000
|
||||||
|
0.070926 -0.004179 0.000000
|
||||||
|
-0.070213 -0.004854 0.000000
|
||||||
|
0.070320 -0.004873 0.000000
|
||||||
|
-0.069773 -0.005293 0.000000
|
||||||
|
0.069880 -0.005312 0.000000
|
||||||
|
-0.068557 -0.006509 0.000000
|
||||||
|
0.068664 -0.006528 0.000000
|
||||||
|
-0.066720 -0.008345 0.000000
|
||||||
|
-0.036298 -0.007975 0.000000
|
||||||
|
-0.007848 -0.007975 0.000000
|
||||||
|
0.007956 -0.007975 0.000000
|
||||||
|
0.036406 -0.007975 0.000000
|
||||||
|
0.066828 -0.008364 0.000000
|
||||||
|
-0.036298 -0.022412 0.000000
|
||||||
|
-0.007848 -0.036419 0.000000
|
||||||
|
-0.007043 -0.036419 0.000000
|
||||||
|
-0.001921 -0.036419 0.000000
|
||||||
|
0.007956 -0.036419 0.000000
|
||||||
|
0.036406 -0.008260 0.000000
|
||||||
|
0.036406 -0.009046 0.000000
|
||||||
|
-0.064418 -0.010647 0.000000
|
||||||
|
0.064525 -0.010666 0.000000
|
||||||
|
0.036406 -0.010234 0.000000
|
||||||
|
0.036406 -0.011723 0.000000
|
||||||
|
-0.061805 -0.013260 0.000000
|
||||||
|
0.061912 -0.013278 0.000000
|
||||||
|
0.036406 -0.013413 0.000000
|
||||||
|
-0.059037 -0.016027 0.000000
|
||||||
|
0.059144 -0.016046 0.000000
|
||||||
|
0.036406 -0.015203 0.000000
|
||||||
|
0.036406 -0.016993 0.000000
|
||||||
|
-0.056269 -0.018795 0.000000
|
||||||
|
0.056376 -0.018813 0.000000
|
||||||
|
0.036406 -0.018683 0.000000
|
||||||
|
0.036406 -0.020172 0.000000
|
||||||
|
-0.053656 -0.021407 0.000000
|
||||||
|
0.053763 -0.021426 0.000000
|
||||||
|
0.036406 -0.021360 0.000000
|
||||||
|
0.036406 -0.022146 0.000000
|
||||||
|
-0.051354 -0.023709 0.000000
|
||||||
|
0.051461 -0.023728 0.000000
|
||||||
|
0.036406 -0.022431 0.000000
|
||||||
|
-0.036444 -0.023855 0.000000
|
||||||
|
0.036552 -0.023874 0.000000
|
||||||
|
-0.049517 -0.025545 0.000000
|
||||||
|
0.049624 -0.025564 0.000000
|
||||||
|
-0.036858 -0.025158 0.000000
|
||||||
|
0.036966 -0.025176 0.000000
|
||||||
|
-0.037505 -0.026305 0.000000
|
||||||
|
0.037612 -0.026324 0.000000
|
||||||
|
-0.048301 -0.026761 0.000000
|
||||||
|
0.048408 -0.026780 0.000000
|
||||||
|
-0.038348 -0.027283 0.000000
|
||||||
|
0.038455 -0.027302 0.000000
|
||||||
|
-0.047861 -0.027200 0.000000
|
||||||
|
0.047969 -0.027219 0.000000
|
||||||
|
-0.046737 -0.028118 0.000000
|
||||||
|
0.046845 -0.028136 0.000000
|
||||||
|
-0.039351 -0.028075 0.000000
|
||||||
|
0.039459 -0.028094 0.000000
|
||||||
|
-0.040479 -0.028668 0.000000
|
||||||
|
0.040587 -0.028687 0.000000
|
||||||
|
-0.045523 -0.028746 0.000000
|
||||||
|
0.045631 -0.028765 0.000000
|
||||||
|
-0.041697 -0.029047 0.000000
|
||||||
|
0.041804 -0.029066 0.000000
|
||||||
|
-0.044254 -0.029100 0.000000
|
||||||
|
0.044362 -0.029119 0.000000
|
||||||
|
-0.042967 -0.029196 0.000000
|
||||||
|
0.043074 -0.029215 0.000000
|
||||||
|
-0.000229 -0.036419 0.000000
|
||||||
|
0.006539 -0.036419 0.000000
|
||||||
|
0.004956 -0.036419 0.000000
|
||||||
|
0.001517 -0.036419 0.000000
|
||||||
|
0.003264 -0.036419 0.000000
|
||||||
|
-0.003504 -0.036419 0.000000
|
||||||
|
-0.004921 -0.036419 0.000000
|
||||||
|
-0.006120 -0.036419 0.000000
|
||||||
|
-0.007638 -0.036419 0.000000
|
||||||
3 0 1 2
|
3 0 1 2
|
||||||
3 1 3 2
|
3 0 3 1
|
||||||
3 0 4 1
|
3 0 4 3
|
||||||
3 5 3 1
|
3 0 5 4
|
||||||
3 6 7 8
|
3 0 6 5
|
||||||
3 7 0 8
|
3 0 7 6
|
||||||
3 7 4 0
|
3 0 8 7
|
||||||
3 6 9 7
|
3 0 9 8
|
||||||
3 10 3 5
|
3 0 10 9
|
||||||
3 10 11 3
|
3 0 11 10
|
||||||
3 6 12 9
|
3 0 12 11
|
||||||
3 6 13 12
|
3 0 13 12
|
||||||
3 13 10 12
|
3 0 14 13
|
||||||
3 11 10 13
|
3 15 16 17
|
||||||
4 14 15 16 17
|
3 18 19 20
|
||||||
|
3 21 16 15
|
||||||
|
3 18 22 19
|
||||||
|
3 21 23 16
|
||||||
|
3 24 22 18
|
||||||
|
3 25 23 21
|
||||||
|
3 24 26 22
|
||||||
|
3 25 27 23
|
||||||
|
3 28 26 24
|
||||||
|
3 29 27 25
|
||||||
|
3 28 30 26
|
||||||
|
3 29 31 27
|
||||||
|
3 32 30 28
|
||||||
|
3 29 33 31
|
||||||
|
3 34 30 32
|
||||||
|
3 35 33 29
|
||||||
|
3 34 36 30
|
||||||
|
3 37 33 35
|
||||||
|
3 34 38 36
|
||||||
|
3 37 39 33
|
||||||
|
3 40 38 34
|
||||||
|
3 41 39 37
|
||||||
|
3 40 42 38
|
||||||
|
3 41 43 39
|
||||||
|
3 44 42 40
|
||||||
|
3 41 45 43
|
||||||
|
3 46 42 44
|
||||||
|
3 47 45 41
|
||||||
|
3 46 48 42
|
||||||
|
3 47 49 45
|
||||||
|
3 50 48 46
|
||||||
|
3 47 51 49
|
||||||
|
3 52 51 47
|
||||||
|
3 50 53 48
|
||||||
|
3 52 54 51
|
||||||
|
3 52 55 54
|
||||||
|
3 56 55 52
|
||||||
|
3 50 57 53
|
||||||
|
3 56 58 55
|
||||||
|
3 56 59 58
|
||||||
|
3 60 59 56
|
||||||
|
3 50 61 57
|
||||||
|
3 60 62 59
|
||||||
|
3 60 63 62
|
||||||
|
3 64 63 60
|
||||||
|
3 50 65 61
|
||||||
|
3 64 66 63
|
||||||
|
3 67 66 64
|
||||||
|
3 50 68 65
|
||||||
|
3 67 69 66
|
||||||
|
3 67 70 69
|
||||||
|
3 71 70 67
|
||||||
|
3 50 72 68
|
||||||
|
3 71 73 70
|
||||||
|
3 71 0 73
|
||||||
|
3 71 14 0
|
||||||
|
3 71 50 14
|
||||||
|
3 71 72 50
|
||||||
|
3 74 72 71
|
||||||
|
3 74 75 72
|
||||||
|
3 76 75 74
|
||||||
|
3 76 77 75
|
||||||
|
3 78 77 76
|
||||||
|
3 78 79 77
|
||||||
|
3 80 79 78
|
||||||
|
3 80 81 79
|
||||||
|
3 82 81 80
|
||||||
|
3 82 83 81
|
||||||
|
3 84 83 82
|
||||||
|
3 84 85 83
|
||||||
|
3 86 85 84
|
||||||
|
3 86 87 85
|
||||||
|
3 88 87 86
|
||||||
|
3 88 89 87
|
||||||
|
3 90 89 88
|
||||||
|
3 90 91 89
|
||||||
|
3 92 91 90
|
||||||
|
3 92 93 91
|
||||||
|
3 94 93 92
|
||||||
|
3 94 95 93
|
||||||
|
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 104 103 102
|
||||||
|
3 104 105 103
|
||||||
|
3 106 105 104
|
||||||
|
3 106 107 105
|
||||||
|
3 107 108 105
|
||||||
|
3 108 109 105
|
||||||
|
3 109 110 105
|
||||||
|
3 110 111 105
|
||||||
|
3 106 112 107
|
||||||
|
3 113 109 108
|
||||||
|
3 113 114 109
|
||||||
|
3 114 115 109
|
||||||
|
3 115 116 109
|
||||||
|
3 117 111 110
|
||||||
|
3 118 111 117
|
||||||
|
3 119 112 106
|
||||||
|
3 118 120 111
|
||||||
|
3 121 120 118
|
||||||
|
3 122 120 121
|
||||||
|
3 123 112 119
|
||||||
|
3 122 124 120
|
||||||
|
3 125 124 122
|
||||||
|
3 126 112 123
|
||||||
|
3 125 127 124
|
||||||
|
3 128 127 125
|
||||||
|
3 129 127 128
|
||||||
|
3 130 112 126
|
||||||
|
3 129 131 127
|
||||||
|
3 132 131 129
|
||||||
|
3 133 131 132
|
||||||
|
3 134 112 130
|
||||||
|
3 133 135 131
|
||||||
|
3 136 135 133
|
||||||
|
3 137 135 136
|
||||||
|
3 138 112 134
|
||||||
|
3 137 139 135
|
||||||
|
3 140 139 137
|
||||||
|
3 138 141 112
|
||||||
|
3 142 139 140
|
||||||
|
3 143 141 138
|
||||||
|
3 142 144 139
|
||||||
|
3 143 145 141
|
||||||
|
3 146 144 142
|
||||||
|
3 143 147 145
|
||||||
|
3 148 144 146
|
||||||
|
3 149 147 143
|
||||||
|
3 148 150 144
|
||||||
|
3 149 151 147
|
||||||
|
3 152 150 148
|
||||||
|
3 153 151 149
|
||||||
|
3 152 154 150
|
||||||
|
3 155 151 153
|
||||||
|
3 152 156 154
|
||||||
|
3 155 157 151
|
||||||
|
3 158 156 152
|
||||||
|
3 155 159 157
|
||||||
|
3 160 156 158
|
||||||
|
3 161 159 155
|
||||||
|
3 160 162 156
|
||||||
|
3 161 163 159
|
||||||
|
3 164 162 160
|
||||||
|
3 165 163 161
|
||||||
|
3 164 166 162
|
||||||
|
3 165 167 163
|
||||||
|
3 168 166 164
|
||||||
|
3 115 169 116
|
||||||
|
3 169 170 116
|
||||||
|
3 169 171 170
|
||||||
|
3 169 172 171
|
||||||
|
3 172 173 171
|
||||||
|
3 114 174 115
|
||||||
|
3 114 175 174
|
||||||
|
3 114 176 175
|
||||||
|
3 113 177 114
|
||||||
|
|||||||
Reference in New Issue
Block a user