mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-06 16:00:00 +01:00
Greatly improved rendering of frame and decorators. Creation of a
DrawVisitor to selectively draw single nodes (for overlay of frame in GeometryView)
This commit is contained in:
@@ -225,6 +225,7 @@ set(VMIX_SRCS
|
||||
RenderingManager.cpp
|
||||
UserInterfaceManager.cpp
|
||||
PickingVisitor.cpp
|
||||
DrawVisitor.cpp
|
||||
SearchVisitor.cpp
|
||||
ImGuiToolkit.cpp
|
||||
ImGuiVisitor.cpp
|
||||
@@ -266,8 +267,10 @@ set(VMIX_RSC_FILES
|
||||
./rsc/mesh/shadow.ply
|
||||
./rsc/mesh/target.ply
|
||||
./rsc/mesh/border_round.ply
|
||||
./rsc/mesh/border_top.ply
|
||||
./rsc/mesh/border_sharp.ply
|
||||
./rsc/mesh/border_large_round.ply
|
||||
./rsc/mesh/border_large_top.ply
|
||||
./rsc/mesh/border_handles_rotation.ply
|
||||
./rsc/mesh/border_handles_overlay.ply
|
||||
./rsc/mesh/border_handles_sharp.ply
|
||||
|
||||
101
Decorations.cpp
101
Decorations.cpp
@@ -1,41 +1,38 @@
|
||||
|
||||
#include <glad/glad.h>
|
||||
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <glm/gtx/vector_angle.hpp>
|
||||
|
||||
|
||||
#include "Resource.h"
|
||||
#include "Visitor.h"
|
||||
#include "ImageShader.h"
|
||||
#include "Log.h"
|
||||
#include "GlmToolkit.h"
|
||||
#include "Decorations.h"
|
||||
|
||||
#include "Visitor.h"
|
||||
#include "ImageShader.h"
|
||||
#include "GlmToolkit.h"
|
||||
|
||||
Frame::Frame(Type type) : Node(), type_(type)
|
||||
|
||||
Frame::Frame(Type type) : Node(), type_(type), side_(nullptr), top_(nullptr), shadow_(nullptr), square_(nullptr)
|
||||
{
|
||||
color = glm::vec4( 1.f, 1.f, 1.f, 1.f);
|
||||
color = glm::vec4( 1.f, 1.f, 1.f, 1.f);
|
||||
switch (type) {
|
||||
case SHARP_LARGE:
|
||||
border_ = nullptr; //new Mesh("mesh/border_large_sharp.ply");
|
||||
square_ = new LineSquare(color, 2.f );
|
||||
shadow_ = new Mesh("mesh/shadow.ply", "images/shadow.png");
|
||||
break;
|
||||
case SHARP_THIN:
|
||||
border_ = new Mesh("mesh/border_sharp.ply");
|
||||
shadow_ = nullptr;
|
||||
square_ = new LineSquare(color, 2.f );
|
||||
break;
|
||||
case ROUND_LARGE:
|
||||
border_ = new Mesh("mesh/border_large_round.ply");
|
||||
side_ = new Mesh("mesh/border_large_round.ply");
|
||||
top_ = new Mesh("mesh/border_large_top.ply");
|
||||
shadow_ = new Mesh("mesh/shadow.ply", "images/shadow.png");
|
||||
break;
|
||||
default:
|
||||
case ROUND_THIN:
|
||||
border_ = new Mesh("mesh/border_round.ply");
|
||||
side_ = new Mesh("mesh/border_round.ply");
|
||||
top_ = new Mesh("mesh/border_top.ply");
|
||||
shadow_ = new Mesh("mesh/shadow.ply", "images/shadow.png");
|
||||
break;
|
||||
case ROUND_SHADOW:
|
||||
border_ = new Mesh("mesh/border_round.ply");
|
||||
side_ = new Mesh("mesh/border_round.ply");
|
||||
top_ = new Mesh("mesh/border_top.ply");
|
||||
shadow_ = new Mesh("mesh/shadow_perspective.ply", "images/shadow_perspective.png");
|
||||
break;
|
||||
}
|
||||
@@ -43,41 +40,73 @@ Frame::Frame(Type type) : Node(), type_(type)
|
||||
|
||||
Frame::~Frame()
|
||||
{
|
||||
if(border_) delete border_;
|
||||
if(side_) delete side_;
|
||||
if(top_) delete top_;
|
||||
if(shadow_) delete shadow_;
|
||||
}
|
||||
|
||||
void Frame::update( float dt )
|
||||
{
|
||||
Node::update(dt);
|
||||
if(top_)
|
||||
top_->update(dt);
|
||||
if(side_)
|
||||
side_->update(dt);
|
||||
if(shadow_)
|
||||
shadow_->update(dt);
|
||||
}
|
||||
|
||||
void Frame::draw(glm::mat4 modelview, glm::mat4 projection)
|
||||
{
|
||||
if ( !initialized() ) {
|
||||
if(border_) border_->init();
|
||||
if(side_) side_->init();
|
||||
if(top_) top_->init();
|
||||
if(shadow_) shadow_->init();
|
||||
init();
|
||||
}
|
||||
|
||||
if ( visible_ ) {
|
||||
|
||||
// shadow
|
||||
glm::mat4 ctm = modelview * transform_;
|
||||
|
||||
// shadow (scaled)
|
||||
if(shadow_)
|
||||
shadow_->draw( modelview * transform_, projection);
|
||||
shadow_->draw( ctm, projection);
|
||||
|
||||
if(border_) {
|
||||
// right side
|
||||
float ar = scale_.x / scale_.y;
|
||||
glm::vec3 s(1.f, 1.f, 1.f);
|
||||
// glm::vec3 s(scale_.y, scale_.y, 1.0);
|
||||
glm::vec3 t(translation_.x - 1.0 + ar, translation_.y, translation_.z);
|
||||
glm::mat4 ctm = modelview * GlmToolkit::transform(t, rotation_, s);
|
||||
// top (scaled)
|
||||
if(top_) {
|
||||
top_->shader()->color = color;
|
||||
top_->draw( ctm, projection);
|
||||
}
|
||||
|
||||
// top (scaled)
|
||||
if(square_) {
|
||||
square_->shader()->color = color;
|
||||
square_->draw( ctm, projection);
|
||||
}
|
||||
|
||||
if(side_) {
|
||||
|
||||
side_->shader()->color = color;
|
||||
|
||||
// get scale
|
||||
glm::vec4 scale = ctm * glm::vec4(1.f, 1.0f, 0.f, 0.f);
|
||||
|
||||
// get rotation
|
||||
glm::vec3 rot(0.f);
|
||||
glm::vec4 vec = ctm * glm::vec4(1.f, 0.f, 0.f, 0.f);
|
||||
rot.z = glm::orientedAngle( glm::vec3(1.f, 0.f, 0.f), glm::normalize(glm::vec3(vec)), glm::vec3(0.f, 0.f, 1.f) );
|
||||
|
||||
if(side_) {
|
||||
|
||||
if(border_) {
|
||||
// right side
|
||||
border_->shader()->color = color;
|
||||
border_->draw( ctm, projection );
|
||||
// left side
|
||||
t.x = -t.x;
|
||||
s.x = -s.x;
|
||||
ctm = modelview * GlmToolkit::transform(t, rotation_, s);
|
||||
border_->draw( ctm, projection );
|
||||
vec = ctm * glm::vec4(1.f, 0.f, 0.f, 1.f);
|
||||
side_->draw( GlmToolkit::transform(vec, rot, glm::vec3(scale.y, scale.y, 1.f)), projection );
|
||||
|
||||
// right side
|
||||
vec = ctm * glm::vec4(-1.f, 0.f, 0.f, 1.f);
|
||||
side_->draw( GlmToolkit::transform(vec, rot, glm::vec3(-scale.y, scale.y, 1.f)), projection );
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <string>
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
#include "Primitives.h"
|
||||
#include "Mesh.h"
|
||||
|
||||
class Frame : public Node
|
||||
@@ -15,18 +16,20 @@ public:
|
||||
Frame(Type type);
|
||||
~Frame();
|
||||
|
||||
void update (float dt) override;
|
||||
void draw (glm::mat4 modelview, glm::mat4 projection) override;
|
||||
void accept (Visitor& v) override;
|
||||
|
||||
Type type() const { return type_; }
|
||||
Mesh *border() const { return border_; }
|
||||
Mesh *border() const { return side_; }
|
||||
glm::vec4 color;
|
||||
|
||||
protected:
|
||||
Mesh *border_;
|
||||
Mesh *shadow_;
|
||||
Type type_;
|
||||
|
||||
Mesh *side_;
|
||||
Mesh *top_;
|
||||
Mesh *shadow_;
|
||||
LineSquare *square_;
|
||||
};
|
||||
|
||||
class Handles : public Node
|
||||
|
||||
141
DrawVisitor.cpp
Normal file
141
DrawVisitor.cpp
Normal file
@@ -0,0 +1,141 @@
|
||||
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
|
||||
#include "DrawVisitor.h"
|
||||
#include "Scene.h"
|
||||
|
||||
|
||||
DrawVisitor::DrawVisitor(Node *nodetodraw, glm::mat4 projection)
|
||||
{
|
||||
target_ = nodetodraw;
|
||||
modelview_ = glm::identity<glm::mat4>();
|
||||
projection_ = projection;
|
||||
done_ = false;
|
||||
}
|
||||
|
||||
|
||||
void DrawVisitor::visit(Node &n)
|
||||
{
|
||||
// draw the target
|
||||
if ( n.id() == target_->id()) {
|
||||
n.draw(modelview_, projection_);
|
||||
done_ = true;
|
||||
}
|
||||
|
||||
if (done_) return;
|
||||
|
||||
// update transform
|
||||
modelview_ *= n.transform_;
|
||||
}
|
||||
|
||||
|
||||
void DrawVisitor::visit(Group &n)
|
||||
{
|
||||
// no need to traverse deeper if this node was drawn already
|
||||
if (done_) return;
|
||||
|
||||
// traverse children
|
||||
glm::mat4 mv = modelview_;
|
||||
for (NodeSet::iterator node = n.begin(); !done_ && node != n.end(); node++) {
|
||||
(*node)->accept(*this);
|
||||
modelview_ = mv;
|
||||
}
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(Scene &n)
|
||||
{
|
||||
n.root()->accept(*this);
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(Switch &n)
|
||||
{
|
||||
glm::mat4 mv = modelview_;
|
||||
(*n.activeChild())->accept(*this);
|
||||
modelview_ = mv;
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(Animation &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(Primitive &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(Surface &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(ImageSurface &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(FrameBufferSurface &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(MediaSurface &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(MediaPlayer &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(Shader &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(ImageShader &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(ImageProcessingShader &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(LineStrip &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(LineSquare &)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(LineCircle &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(Mesh &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit(Frame &n)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void DrawVisitor::visit (Source& s)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DrawVisitor::visit (MediaSource& s)
|
||||
{
|
||||
|
||||
}
|
||||
42
DrawVisitor.h
Normal file
42
DrawVisitor.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#ifndef DRAWVISITOR_H
|
||||
#define DRAWVISITOR_H
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
#include "Visitor.h"
|
||||
|
||||
class DrawVisitor : public Visitor
|
||||
{
|
||||
glm::mat4 modelview_;
|
||||
glm::mat4 projection_;
|
||||
Node *target_;
|
||||
bool done_;
|
||||
|
||||
public:
|
||||
DrawVisitor(Node *nodetodraw, glm::mat4 projection);
|
||||
|
||||
void visit(Scene& n) override;
|
||||
void visit(Node& n) override;
|
||||
void visit(Group& n) override;
|
||||
void visit(Switch& n) override;
|
||||
void visit(Animation& n) override;
|
||||
void visit(Primitive& n) override;
|
||||
void visit(Surface& n) override;
|
||||
void visit(ImageSurface& n) override;
|
||||
void visit(MediaSurface& n) override;
|
||||
void visit(FrameBufferSurface& n) override;
|
||||
void visit(LineStrip& n) override;
|
||||
void visit(LineSquare&) override;
|
||||
void visit(LineCircle& n) override;
|
||||
void visit(Mesh& n) override;
|
||||
void visit(Frame& n) override;
|
||||
|
||||
void visit(MediaPlayer& n) override;
|
||||
void visit(Shader& n) override;
|
||||
void visit(ImageShader& n) override;
|
||||
void visit(ImageProcessingShader& n) override;
|
||||
|
||||
void visit (Source& s) override;
|
||||
void visit (MediaSource& s) override;
|
||||
};
|
||||
|
||||
#endif // DRAWVISITOR_H
|
||||
@@ -7,8 +7,8 @@
|
||||
#include "Visitor.h"
|
||||
|
||||
|
||||
class GarbageVisitor : public Visitor {
|
||||
|
||||
class GarbageVisitor : public Visitor
|
||||
{
|
||||
Group *current_;
|
||||
std::list<Node *> targets_;
|
||||
bool found_;
|
||||
|
||||
@@ -65,8 +65,8 @@ void PickingVisitor::visit(Surface &n)
|
||||
|
||||
void PickingVisitor::visit(Frame &n)
|
||||
{
|
||||
if (n.border())
|
||||
n.border()->accept(*this);
|
||||
// if (n.border())
|
||||
// n.border()->accept(*this);
|
||||
}
|
||||
|
||||
void PickingVisitor::visit(Handles &n)
|
||||
|
||||
@@ -17,14 +17,6 @@
|
||||
#include <glm/gtx/rotate_vector.hpp>
|
||||
|
||||
|
||||
static const std::vector<glm::vec3> square_points {
|
||||
glm::vec3( -0.99f, -1.f, 0.f ), glm::vec3( -1.f, -0.99f, 0.f ),
|
||||
glm::vec3( -1.f, 0.99f, 0.f ), glm::vec3( -0.99f, 1.f, 0.f ),
|
||||
glm::vec3( 0.99f, 1.f, 0.f ), glm::vec3( 1.f, 0.99f, 0.f ),
|
||||
glm::vec3( 1.f, -0.99f, 0.f ), glm::vec3( 0.99f, -1.f, 0.f ),
|
||||
glm::vec3( -0.99f, -1.f, 0.f )
|
||||
};
|
||||
|
||||
|
||||
Surface::Surface(Shader *s) : Primitive(s), textureindex_(0)
|
||||
{
|
||||
@@ -258,7 +250,7 @@ void LineStrip::draw(glm::mat4 modelview, glm::mat4 projection)
|
||||
if ( !initialized() )
|
||||
init();
|
||||
|
||||
glLineWidth(linewidth_);
|
||||
glLineWidth(linewidth_ * Rendering::manager().mainWindow().dpiScale());
|
||||
|
||||
Primitive::draw(modelview, projection);
|
||||
|
||||
@@ -272,6 +264,13 @@ void LineStrip::accept(Visitor& v)
|
||||
}
|
||||
|
||||
|
||||
|
||||
static const std::vector<glm::vec3> square_points {
|
||||
glm::vec3( -1.f, -1.f, 0.f ), glm::vec3( -1.f, 1.f, 0.f ),
|
||||
glm::vec3( 1.f, 1.f, 0.f ), glm::vec3( 1.f, -1.f, 0.f ),
|
||||
glm::vec3( -1.f, -1.f, 0.f )
|
||||
};
|
||||
|
||||
LineSquare::LineSquare(glm::vec4 color, uint linewidth) : LineStrip(square_points, color, linewidth)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -66,6 +66,8 @@ public:
|
||||
// get total height available in monitor
|
||||
int maxHeight();
|
||||
|
||||
inline float dpiScale() const { return dpi_scale_; }
|
||||
|
||||
// get which monitor contains this point
|
||||
static GLFWmonitor *monitorAt(int x, int y);
|
||||
// get which monitor has this name
|
||||
|
||||
15
Source.cpp
15
Source.cpp
@@ -222,21 +222,16 @@ FrameBuffer *Source::frame() const
|
||||
}
|
||||
}
|
||||
|
||||
Handles *Source::handleNode(Handles::Type t) const
|
||||
bool Source::contains(Node *node) const
|
||||
{
|
||||
if ( t == Handles::ROTATE )
|
||||
return rotate_handle_;
|
||||
else if ( t == Handles::RESIZE_H )
|
||||
return resize_H_handle_;
|
||||
else if ( t == Handles::RESIZE_V )
|
||||
return resize_V_handle_;
|
||||
else
|
||||
return resize_handle_;
|
||||
hasNode tester(node);
|
||||
return tester(this);
|
||||
}
|
||||
|
||||
|
||||
bool hasNode::operator()(const Source* elem) const
|
||||
{
|
||||
if (elem)
|
||||
if (_n && elem)
|
||||
{
|
||||
SearchVisitor sv(_n);
|
||||
elem->group(View::MIXING)->accept(sv);
|
||||
|
||||
9
Source.h
9
Source.h
@@ -24,6 +24,9 @@ typedef std::list<CloneSource *> CloneList;
|
||||
|
||||
class Source
|
||||
{
|
||||
friend class View;
|
||||
friend class GeometryView;
|
||||
|
||||
public:
|
||||
// create a source and add it to the list
|
||||
// only subclasses of sources can actually be instanciated
|
||||
@@ -44,10 +47,12 @@ public:
|
||||
// an overlay can be displayed on top of the source
|
||||
void setOverlayVisible(bool on);
|
||||
|
||||
// get handle on the node used to manipulate the source in a view
|
||||
// get handle on the nodes used to manipulate the source in a view
|
||||
inline Group *group(View::Mode m) const { return groups_.at(m); }
|
||||
inline Node *groupNode(View::Mode m) const { return static_cast<Node*>(groups_.at(m)); }
|
||||
Handles *handleNode(Handles::Type t) const;
|
||||
|
||||
// tests if a given node is part of the source
|
||||
bool contains(Node *node) const;
|
||||
|
||||
// a Source has a shader to control image processing effects
|
||||
inline ImageProcessingShader *processingShader() const { return rendershader_; }
|
||||
|
||||
@@ -293,7 +293,7 @@ void UserInterface::handleMouse()
|
||||
mouseclic[ImGuiMouseButton_Left] = glm::vec2(io.MouseClickedPos[ImGuiMouseButton_Left].x * io.DisplayFramebufferScale.y, io.MouseClickedPos[ImGuiMouseButton_Left].y* io.DisplayFramebufferScale.x);
|
||||
mouseclic[ImGuiMouseButton_Right] = glm::vec2(io.MouseClickedPos[ImGuiMouseButton_Right].x * io.DisplayFramebufferScale.y, io.MouseClickedPos[ImGuiMouseButton_Right].y* io.DisplayFramebufferScale.x);
|
||||
|
||||
static std::pair<Node *, glm::vec2> pick = { nullptr, glm::vec2(0.f) };
|
||||
static std::pair<Node *, glm::vec2> picked = { nullptr, glm::vec2(0.f) };
|
||||
|
||||
// if not on any window
|
||||
if ( !ImGui::IsAnyWindowHovered() && !ImGui::IsAnyWindowFocused() )
|
||||
@@ -351,8 +351,8 @@ void UserInterface::handleMouse()
|
||||
{
|
||||
if (current)
|
||||
{
|
||||
// drag current source
|
||||
int c = Mixer::manager().currentView()->grab( mouseclic[ImGuiMouseButton_Left], mousepos, current, pick);
|
||||
// grab current source
|
||||
int c = Mixer::manager().currentView()->grab( mouseclic[ImGuiMouseButton_Left], mousepos, current, picked);
|
||||
ImGui::SetMouseCursor(c);
|
||||
}
|
||||
else {
|
||||
@@ -371,21 +371,15 @@ void UserInterface::handleMouse()
|
||||
|
||||
// get coordinate in world coordinate of mouse cursor
|
||||
glm::vec3 point = Rendering::manager().unProject(mousepos);
|
||||
// ask the view what was picked
|
||||
picked = Mixer::manager().currentView()->pick(point);
|
||||
|
||||
// picking visitor traverses the scene
|
||||
PickingVisitor pv(point);
|
||||
Mixer::manager().currentView()->scene.accept(pv);
|
||||
|
||||
// picking visitor found nodes?
|
||||
if (pv.picked().empty()) {
|
||||
if (picked.first == nullptr){
|
||||
// nothing picked, unset current
|
||||
Mixer::manager().unsetCurrentSource();
|
||||
navigator.hidePannel();
|
||||
}
|
||||
else {
|
||||
// top-most Node picked
|
||||
pick = pv.picked().back();
|
||||
// find source containing the cliced Node
|
||||
Mixer::manager().setCurrentSource( pick.first );
|
||||
} else {
|
||||
Mixer::manager().setCurrentSource( picked.first );
|
||||
if (navigator.pannelVisible())
|
||||
navigator.showPannelSource( Mixer::manager().indexCurrentSource() );
|
||||
}
|
||||
@@ -393,7 +387,7 @@ void UserInterface::handleMouse()
|
||||
}
|
||||
else if ( ImGui::IsMouseReleased(ImGuiMouseButton_Left) )
|
||||
{
|
||||
pick = { nullptr, glm::vec2(0.f) };
|
||||
picked = { nullptr, glm::vec2(0.f) };
|
||||
|
||||
}
|
||||
if ( ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left) )
|
||||
|
||||
81
View.cpp
81
View.cpp
@@ -13,6 +13,7 @@
|
||||
#include "Source.h"
|
||||
#include "Primitives.h"
|
||||
#include "PickingVisitor.h"
|
||||
#include "DrawVisitor.h"
|
||||
#include "Mesh.h"
|
||||
#include "Mixer.h"
|
||||
#include "FrameBuffer.h"
|
||||
@@ -78,6 +79,26 @@ View::Cursor View::drag (glm::vec2 from, glm::vec2 to)
|
||||
return Cursor_ResizeAll;
|
||||
}
|
||||
|
||||
std::pair<Node *, glm::vec2> View::pick(glm::vec3 point)
|
||||
{
|
||||
std::pair<Node *, glm::vec2> picked = { nullptr, glm::vec2(0.f) };
|
||||
|
||||
// picking visitor traverses the scene
|
||||
PickingVisitor pv(point);
|
||||
scene.accept(pv);
|
||||
|
||||
// picking visitor found nodes?
|
||||
if ( !pv.picked().empty()) {
|
||||
|
||||
// select top-most Node picked
|
||||
picked = pv.picked().back();
|
||||
|
||||
}
|
||||
|
||||
return picked;
|
||||
}
|
||||
|
||||
|
||||
MixingView::MixingView() : View(MIXING)
|
||||
{
|
||||
// read default settings
|
||||
@@ -267,6 +288,58 @@ void GeometryView::zoom( float factor )
|
||||
scene.root()->scale_.y = z;
|
||||
}
|
||||
|
||||
|
||||
void GeometryView::draw()
|
||||
{
|
||||
// draw scene of this view
|
||||
scene.root()->draw(glm::identity<glm::mat4>(), Rendering::manager().Projection());
|
||||
|
||||
// draw overlay of current source
|
||||
Source *s = Mixer::manager().currentSource();
|
||||
if (s != nullptr) {
|
||||
|
||||
DrawVisitor dv(s->overlays_[View::GEOMETRY], Rendering::manager().Projection());
|
||||
scene.accept(dv);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
std::pair<Node *, glm::vec2> GeometryView::pick(glm::vec3 point)
|
||||
{
|
||||
std::pair<Node *, glm::vec2> picked = { nullptr, glm::vec2(0.f) };
|
||||
|
||||
// picking visitor traverses the scene
|
||||
PickingVisitor pv(point);
|
||||
scene.accept(pv);
|
||||
|
||||
// picking visitor found nodes?
|
||||
if ( !pv.picked().empty()) {
|
||||
|
||||
Source *s = Mixer::manager().currentSource();
|
||||
if (s != nullptr) {
|
||||
// find if the current source was picked
|
||||
auto itp = pv.picked().begin();
|
||||
for (; itp != pv.picked().end(); itp++){
|
||||
if (s->contains( (*itp).first )){
|
||||
picked = *itp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// not found: the current source was not clicked
|
||||
if (itp == pv.picked().end())
|
||||
s = nullptr;
|
||||
}
|
||||
// maybe the source changed
|
||||
if (s == nullptr)
|
||||
{
|
||||
// select top-most Node picked
|
||||
picked = pv.picked().back();
|
||||
}
|
||||
}
|
||||
|
||||
return picked;
|
||||
}
|
||||
|
||||
View::Cursor GeometryView::grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair<Node *, glm::vec2> pick)
|
||||
{
|
||||
View::Cursor ret = Cursor_Arrow;
|
||||
@@ -305,7 +378,7 @@ View::Cursor GeometryView::grab (glm::vec2 from, glm::vec2 to, Source *s, std::p
|
||||
// which manipulation to perform?
|
||||
if (pick.first) {
|
||||
// picking on the resizing handles in the corners
|
||||
if ( pick.first == s->handleNode(Handles::RESIZE) ) {
|
||||
if ( pick.first == s->resize_handle_ ) {
|
||||
if (UserInterface::manager().keyboardModifier())
|
||||
S_resize.y = S_resize.x;
|
||||
sourceNode->scale_ = start_scale * S_resize;
|
||||
@@ -324,17 +397,17 @@ View::Cursor GeometryView::grab (glm::vec2 from, glm::vec2 to, Source *s, std::p
|
||||
ret = axis.x * axis.y > 0.f ? Cursor_ResizeNESW : Cursor_ResizeNWSE;
|
||||
}
|
||||
// picking on the resizing handles left or right
|
||||
else if ( pick.first == s->handleNode(Handles::RESIZE_H) ) {
|
||||
else if ( pick.first == s->resize_H_handle_ ) {
|
||||
sourceNode->scale_ = start_scale * glm::vec3(S_resize.x, 1.f, 1.f);
|
||||
ret = Cursor_ResizeEW;
|
||||
}
|
||||
// picking on the resizing handles top or bottom
|
||||
else if ( pick.first == s->handleNode(Handles::RESIZE_V) ) {
|
||||
else if ( pick.first == s->resize_V_handle_ ) {
|
||||
sourceNode->scale_ = start_scale * glm::vec3(1.f, S_resize.y, 1.f);
|
||||
ret = Cursor_ResizeNS;
|
||||
}
|
||||
// picking on the rotating handle
|
||||
else if ( pick.first == s->handleNode(Handles::ROTATE) ) {
|
||||
else if ( pick.first == s->rotate_handle_ ) {
|
||||
float angle = glm::orientedAngle( glm::normalize(glm::vec2(S_from)), glm::normalize(glm::vec2(S_to)));
|
||||
|
||||
if (UserInterface::manager().keyboardModifier())
|
||||
|
||||
3
View.h
3
View.h
@@ -34,6 +34,7 @@ public:
|
||||
Cursor_NotAllowed
|
||||
} Cursor;
|
||||
|
||||
virtual std::pair<Node *, glm::vec2> pick(glm::vec3 point);
|
||||
virtual Cursor drag (glm::vec2, glm::vec2);
|
||||
virtual Cursor grab (glm::vec2, glm::vec2, Source*, std::pair<Node *, glm::vec2>) {
|
||||
return Cursor_Arrow;
|
||||
@@ -88,8 +89,10 @@ class GeometryView : public View
|
||||
public:
|
||||
GeometryView();
|
||||
|
||||
void draw () override;
|
||||
void update (float dt) override;
|
||||
void zoom (float factor) override;
|
||||
std::pair<Node *, glm::vec2> pick(glm::vec3 point) override;
|
||||
Cursor grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair<Node *, glm::vec2> pick) override;
|
||||
Cursor over (glm::vec2, Source*, std::pair<Node *, glm::vec2>) override;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.82 (sub 7) - www.blender.org, source file: 'border_large.blend'
|
||||
element vertex 45
|
||||
comment Created by Blender 2.82 (sub 7) - www.blender.org, source file: 'border_large_round.blend'
|
||||
element vertex 39
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
@@ -9,108 +9,94 @@ property uchar red
|
||||
property uchar green
|
||||
property uchar blue
|
||||
property uchar alpha
|
||||
element face 57
|
||||
element face 49
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-0.950647 -1.000000 0.000000 255 255 255 255
|
||||
-0.000071 -1.013523 0.000000 255 255 255 255
|
||||
-0.000077 -1.000000 0.000000 255 255 255 255
|
||||
-0.962557 -1.013523 0.000000 255 255 255 255
|
||||
-0.007321 -1.039382 0.000000 255 255 255 255
|
||||
0.963176 -1.013523 0.000000 255 255 255 255
|
||||
0.951244 -1.000000 0.000000 255 255 255 255
|
||||
0.971677 -1.000395 0.000000 255 255 255 255
|
||||
0.982502 -1.011536 0.000000 255 255 255 255
|
||||
0.991868 -0.991539 0.000000 255 255 255 255
|
||||
1.011320 -0.981739 0.000000 255 255 255 255
|
||||
1.002918 -1.002581 0.000000 255 255 255 255
|
||||
1.013443 -0.963042 0.000000 255 255 255 255
|
||||
1.000178 -0.970926 0.000000 255 255 255 255
|
||||
1.039942 -0.987614 0.000000 255 255 255 255
|
||||
1.034304 -1.010591 0.000000 255 255 255 255
|
||||
1.021251 -1.028161 0.000000 255 255 255 255
|
||||
1.000314 -1.037345 0.000000 255 255 255 255
|
||||
0.980495 -1.039382 0.000000 255 255 255 255
|
||||
1.039942 -0.000016 0.000000 255 255 255 255
|
||||
1.013443 0.963025 0.000000 255 255 255 255
|
||||
1.013443 -0.000008 0.000000 255 255 255 255
|
||||
1.039942 0.987582 0.000000 255 255 255 255
|
||||
1.011158 0.987628 0.000000 255 255 255 255
|
||||
1.000017 0.976754 0.000000 255 255 255 255
|
||||
1.000000 0.951104 0.000000 255 255 255 255
|
||||
0.991530 0.992067 0.000000 255 255 255 255
|
||||
0.984469 1.011229 0.000000 255 255 255 255
|
||||
1.002576 1.003111 0.000000 255 255 255 255
|
||||
0.962232 1.013506 0.000000 255 255 255 255
|
||||
0.973622 1.000095 0.000000 255 255 255 255
|
||||
0.979528 1.039350 0.000000 255 255 255 255
|
||||
1.002331 1.037015 0.000000 255 255 255 255
|
||||
1.020900 1.028691 0.000000 255 255 255 255
|
||||
1.034592 1.013730 0.000000 255 255 255 255
|
||||
1.000889 -0.951116 0.000000 255 255 255 255
|
||||
-0.951593 1.000000 0.000000 255 255 255 255
|
||||
-0.000071 1.013506 0.000000 255 255 255 255
|
||||
-0.963515 1.013506 0.000000 255 255 255 255
|
||||
0.950312 1.000000 0.000000 255 255 255 255
|
||||
-0.007321 1.039350 0.000000 255 255 255 255
|
||||
-0.994357 -1.039382 0.000000 255 255 255 255
|
||||
1.000000 0.000000 0.000000 255 255 255 255
|
||||
-0.000064 1.000000 0.000000 255 255 255 255
|
||||
-0.995340 1.039350 0.000000 255 255 255 255
|
||||
-0.999961 -1.039382 0.000000 255 255 255 255
|
||||
-0.036682 -1.013523 0.000000 255 255 255 255
|
||||
-0.999928 -1.013523 0.000000 255 255 255 255
|
||||
-0.048614 -1.000000 0.000000 255 255 255 255
|
||||
-0.999935 -1.000000 0.000000 255 255 255 255
|
||||
-0.028181 -1.000395 0.000000 255 255 255 255
|
||||
-0.017356 -1.011536 0.000000 255 255 255 255
|
||||
-0.007989 -0.991539 0.000000 255 255 255 255
|
||||
0.011462 -0.981739 0.000000 255 255 255 255
|
||||
0.003061 -1.002581 0.000000 255 255 255 255
|
||||
0.013586 -0.963042 0.000000 255 255 255 255
|
||||
0.000320 -0.970926 0.000000 255 255 255 255
|
||||
0.040085 -0.987614 0.000000 255 255 255 255
|
||||
0.034447 -1.010591 0.000000 255 255 255 255
|
||||
0.021394 -1.028161 0.000000 255 255 255 255
|
||||
0.000456 -1.037345 0.000000 255 255 255 255
|
||||
-0.019362 -1.039382 0.000000 255 255 255 255
|
||||
0.040085 -0.000016 0.000000 255 255 255 255
|
||||
0.013585 0.963025 0.000000 255 255 255 255
|
||||
0.013586 -0.000008 0.000000 255 255 255 255
|
||||
0.040084 0.987582 0.000000 255 255 255 255
|
||||
0.011300 0.987628 0.000000 255 255 255 255
|
||||
0.000160 0.976754 0.000000 255 255 255 255
|
||||
0.000142 0.951104 0.000000 255 255 255 255
|
||||
-0.008328 0.992067 0.000000 255 255 255 255
|
||||
-0.015389 1.011229 0.000000 255 255 255 255
|
||||
0.002718 1.003111 0.000000 255 255 255 255
|
||||
-0.037625 1.013506 0.000000 255 255 255 255
|
||||
-0.026235 1.000095 0.000000 255 255 255 255
|
||||
-0.020330 1.039350 0.000000 255 255 255 255
|
||||
0.002473 1.037015 0.000000 255 255 255 255
|
||||
0.021043 1.028691 0.000000 255 255 255 255
|
||||
0.034734 1.013730 0.000000 255 255 255 255
|
||||
0.001031 -0.951116 0.000000 255 255 255 255
|
||||
-0.999929 1.013506 0.000000 255 255 255 255
|
||||
-0.049546 1.000000 0.000000 255 255 255 255
|
||||
-0.999926 1.039350 0.000000 255 255 255 255
|
||||
0.000142 0.000000 0.000000 255 255 255 255
|
||||
-0.999922 1.000000 0.000000 255 255 255 255
|
||||
3 0 1 2
|
||||
3 3 4 1
|
||||
3 4 5 1
|
||||
3 1 6 2
|
||||
3 5 7 6
|
||||
3 8 9 7
|
||||
3 10 9 11
|
||||
3 12 13 10
|
||||
3 10 14 12
|
||||
3 15 11 16
|
||||
3 11 17 16
|
||||
3 8 18 17
|
||||
3 19 12 14
|
||||
3 19 20 21
|
||||
3 22 23 20
|
||||
3 20 24 25
|
||||
3 23 26 24
|
||||
3 27 26 28
|
||||
3 29 30 27
|
||||
3 27 31 29
|
||||
3 32 28 33
|
||||
3 28 34 33
|
||||
3 25 21 20
|
||||
3 21 35 12
|
||||
3 36 37 38
|
||||
3 37 39 29
|
||||
3 29 40 37
|
||||
3 40 38 37
|
||||
3 0 3 1
|
||||
3 3 41 4
|
||||
3 4 18 5
|
||||
3 1 5 6
|
||||
3 5 8 7
|
||||
3 8 11 9
|
||||
3 10 13 9
|
||||
3 12 35 13
|
||||
3 10 15 14
|
||||
3 15 10 11
|
||||
3 11 8 17
|
||||
3 8 5 18
|
||||
3 19 21 12
|
||||
3 19 22 20
|
||||
3 22 34 23
|
||||
3 20 23 24
|
||||
3 23 28 26
|
||||
3 27 30 26
|
||||
3 29 39 30
|
||||
3 27 32 31
|
||||
3 32 27 28
|
||||
3 28 23 34
|
||||
3 25 42 21
|
||||
3 21 42 35
|
||||
3 36 43 37
|
||||
3 37 43 39
|
||||
3 29 31 40
|
||||
3 40 44 38
|
||||
3 19 14 22
|
||||
3 2 3 4
|
||||
3 1 5 3
|
||||
3 6 7 5
|
||||
3 8 7 9
|
||||
3 10 11 8
|
||||
3 8 12 10
|
||||
3 13 9 14
|
||||
3 9 15 14
|
||||
3 6 16 15
|
||||
3 17 10 12
|
||||
3 17 18 19
|
||||
3 20 21 18
|
||||
3 18 22 23
|
||||
3 21 24 22
|
||||
3 25 24 26
|
||||
3 27 28 25
|
||||
3 25 29 27
|
||||
3 30 26 31
|
||||
3 26 32 31
|
||||
3 23 19 18
|
||||
3 19 33 10
|
||||
3 34 35 27
|
||||
3 27 36 34
|
||||
3 0 16 1
|
||||
3 2 1 3
|
||||
3 1 6 5
|
||||
3 6 9 7
|
||||
3 8 11 7
|
||||
3 10 33 11
|
||||
3 8 13 12
|
||||
3 13 8 9
|
||||
3 9 6 15
|
||||
3 6 1 16
|
||||
3 17 19 10
|
||||
3 17 20 18
|
||||
3 20 32 21
|
||||
3 18 21 22
|
||||
3 21 26 24
|
||||
3 25 28 24
|
||||
3 27 35 28
|
||||
3 25 30 29
|
||||
3 30 25 26
|
||||
3 26 21 32
|
||||
3 23 37 19
|
||||
3 19 37 33
|
||||
3 34 38 35
|
||||
3 27 29 36
|
||||
3 17 12 20
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.82 (sub 7) - www.blender.org, source file: 'border.blend'
|
||||
element vertex 45
|
||||
comment Created by Blender 2.82 (sub 7) - www.blender.org, source file: 'border_round.blend'
|
||||
element vertex 39
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
@@ -9,107 +9,93 @@ property uchar red
|
||||
property uchar green
|
||||
property uchar blue
|
||||
property uchar alpha
|
||||
element face 56
|
||||
element face 48
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-0.950647 -1.000000 0.000000 255 255 255 255
|
||||
-0.000071 -1.013523 0.000000 255 255 255 255
|
||||
-0.000077 -1.000000 0.000000 255 255 255 255
|
||||
-0.962557 -1.013523 0.000000 255 255 255 255
|
||||
-0.000064 -1.027167 0.000000 255 255 255 255
|
||||
0.963176 -1.013523 0.000000 255 255 255 255
|
||||
0.951244 -1.000000 0.000000 255 255 255 255
|
||||
0.971677 -1.000395 0.000000 255 255 255 255
|
||||
0.982502 -1.011536 0.000000 255 255 255 255
|
||||
0.991868 -0.991539 0.000000 255 255 255 255
|
||||
1.011320 -0.981739 0.000000 255 255 255 255
|
||||
1.002918 -1.002581 0.000000 255 255 255 255
|
||||
1.013443 -0.963042 0.000000 255 255 255 255
|
||||
1.000178 -0.970926 0.000000 255 255 255 255
|
||||
1.027092 -0.976006 0.000000 255 255 255 255
|
||||
1.024939 -0.994955 0.000000 255 255 255 255
|
||||
1.016425 -1.016078 0.000000 255 255 255 255
|
||||
0.995733 -1.025153 0.000000 255 255 255 255
|
||||
0.976147 -1.027167 0.000000 255 255 255 255
|
||||
1.027092 -0.000011 0.000000 255 255 255 255
|
||||
1.013443 0.963025 0.000000 255 255 255 255
|
||||
1.013443 -0.000008 0.000000 255 255 255 255
|
||||
1.027092 0.975985 0.000000 255 255 255 255
|
||||
1.011158 0.987628 0.000000 255 255 255 255
|
||||
1.000017 0.976754 0.000000 255 255 255 255
|
||||
1.000000 0.951104 0.000000 255 255 255 255
|
||||
0.991530 0.992067 0.000000 255 255 255 255
|
||||
0.984469 1.011229 0.000000 255 255 255 255
|
||||
1.002576 1.003111 0.000000 255 255 255 255
|
||||
0.962232 1.013506 0.000000 255 255 255 255
|
||||
0.973622 1.000095 0.000000 255 255 255 255
|
||||
0.975191 1.027145 0.000000 255 255 255 255
|
||||
0.997727 1.024837 0.000000 255 255 255 255
|
||||
1.016078 1.016610 0.000000 255 255 255 255
|
||||
1.024775 1.000919 0.000000 255 255 255 255
|
||||
1.000889 -0.951116 0.000000 255 255 255 255
|
||||
-0.951593 1.000000 0.000000 255 255 255 255
|
||||
-0.000071 1.013506 0.000000 255 255 255 255
|
||||
-0.963515 1.013506 0.000000 255 255 255 255
|
||||
0.950312 1.000000 0.000000 255 255 255 255
|
||||
-0.000064 1.027145 0.000000 255 255 255 255
|
||||
-0.975505 -1.027167 0.000000 255 255 255 255
|
||||
1.000000 0.000000 0.000000 255 255 255 255
|
||||
-0.000064 1.000000 0.000000 255 255 255 255
|
||||
-0.976476 1.027145 0.000000 255 255 255 255
|
||||
-1.000026 -1.027167 0.000000 255 255 255 255
|
||||
-0.036786 -1.013523 0.000000 255 255 255 255
|
||||
-1.000033 -1.013523 0.000000 255 255 255 255
|
||||
-0.048719 -1.000000 0.000000 255 255 255 255
|
||||
-1.000039 -1.000000 0.000000 255 255 255 255
|
||||
-0.028286 -1.000395 0.000000 255 255 255 255
|
||||
-0.017461 -1.011536 0.000000 255 255 255 255
|
||||
-0.008094 -0.991539 0.000000 255 255 255 255
|
||||
0.011357 -0.981739 0.000000 255 255 255 255
|
||||
0.002956 -1.002581 0.000000 255 255 255 255
|
||||
0.013481 -0.963042 0.000000 255 255 255 255
|
||||
0.000215 -0.970926 0.000000 255 255 255 255
|
||||
0.027129 -0.976006 0.000000 255 255 255 255
|
||||
0.024977 -0.994955 0.000000 255 255 255 255
|
||||
0.016462 -1.016078 0.000000 255 255 255 255
|
||||
-0.004229 -1.025153 0.000000 255 255 255 255
|
||||
-0.023815 -1.027167 0.000000 255 255 255 255
|
||||
0.027129 -0.000011 0.000000 255 255 255 255
|
||||
0.013481 0.963025 0.000000 255 255 255 255
|
||||
0.013481 -0.000008 0.000000 255 255 255 255
|
||||
0.027129 0.975985 0.000000 255 255 255 255
|
||||
0.011195 0.987628 0.000000 255 255 255 255
|
||||
0.000055 0.976754 0.000000 255 255 255 255
|
||||
0.000038 0.951104 0.000000 255 255 255 255
|
||||
-0.008432 0.992067 0.000000 255 255 255 255
|
||||
-0.015494 1.011229 0.000000 255 255 255 255
|
||||
0.002614 1.003111 0.000000 255 255 255 255
|
||||
-0.037730 1.013506 0.000000 255 255 255 255
|
||||
-0.026340 1.000095 0.000000 255 255 255 255
|
||||
-0.024771 1.027145 0.000000 255 255 255 255
|
||||
-0.002235 1.024837 0.000000 255 255 255 255
|
||||
0.016116 1.016610 0.000000 255 255 255 255
|
||||
0.024813 1.000919 0.000000 255 255 255 255
|
||||
0.000926 -0.951116 0.000000 255 255 255 255
|
||||
-1.000033 1.013506 0.000000 255 255 255 255
|
||||
-0.049650 1.000000 0.000000 255 255 255 255
|
||||
-1.000026 1.027145 0.000000 255 255 255 255
|
||||
0.000038 0.000000 0.000000 255 255 255 255
|
||||
-1.000026 1.000000 0.000000 255 255 255 255
|
||||
3 0 1 2
|
||||
3 3 4 1
|
||||
3 4 5 1
|
||||
3 1 6 2
|
||||
3 5 7 6
|
||||
3 8 9 7
|
||||
3 10 9 11
|
||||
3 12 13 10
|
||||
3 10 14 12
|
||||
3 15 11 16
|
||||
3 11 17 16
|
||||
3 8 18 17
|
||||
3 19 12 14
|
||||
3 19 20 21
|
||||
3 22 23 20
|
||||
3 20 24 25
|
||||
3 23 26 24
|
||||
3 27 26 28
|
||||
3 29 30 27
|
||||
3 27 31 29
|
||||
3 32 28 33
|
||||
3 28 34 33
|
||||
3 25 21 20
|
||||
3 21 35 12
|
||||
3 36 37 38
|
||||
3 37 39 29
|
||||
3 29 40 37
|
||||
3 40 38 37
|
||||
3 0 3 1
|
||||
3 3 41 4
|
||||
3 4 18 5
|
||||
3 1 5 6
|
||||
3 5 8 7
|
||||
3 8 11 9
|
||||
3 10 13 9
|
||||
3 12 35 13
|
||||
3 10 15 14
|
||||
3 15 10 11
|
||||
3 11 8 17
|
||||
3 8 5 18
|
||||
3 19 21 12
|
||||
3 19 22 20
|
||||
3 22 34 23
|
||||
3 20 23 24
|
||||
3 23 28 26
|
||||
3 27 30 26
|
||||
3 29 39 30
|
||||
3 27 32 31
|
||||
3 32 27 28
|
||||
3 28 23 34
|
||||
3 25 42 21
|
||||
3 21 42 35
|
||||
3 36 43 37
|
||||
3 37 43 39
|
||||
3 29 31 40
|
||||
3 40 44 38
|
||||
3 2 3 4
|
||||
3 1 5 3
|
||||
3 6 7 5
|
||||
3 8 7 9
|
||||
3 10 11 8
|
||||
3 8 12 10
|
||||
3 13 9 14
|
||||
3 9 15 14
|
||||
3 6 16 15
|
||||
3 17 10 12
|
||||
3 17 18 19
|
||||
3 20 21 18
|
||||
3 18 22 23
|
||||
3 21 24 22
|
||||
3 25 24 26
|
||||
3 27 28 25
|
||||
3 25 29 27
|
||||
3 30 26 31
|
||||
3 26 32 31
|
||||
3 23 19 18
|
||||
3 19 33 10
|
||||
3 34 35 27
|
||||
3 27 36 34
|
||||
3 0 16 1
|
||||
3 2 1 3
|
||||
3 1 6 5
|
||||
3 6 9 7
|
||||
3 8 11 7
|
||||
3 10 33 11
|
||||
3 8 13 12
|
||||
3 13 8 9
|
||||
3 9 6 15
|
||||
3 6 1 16
|
||||
3 17 19 10
|
||||
3 17 20 18
|
||||
3 20 32 21
|
||||
3 18 21 22
|
||||
3 21 26 24
|
||||
3 25 28 24
|
||||
3 27 35 28
|
||||
3 25 30 29
|
||||
3 30 25 26
|
||||
3 26 21 32
|
||||
3 23 37 19
|
||||
3 19 37 33
|
||||
3 34 38 35
|
||||
3 27 29 36
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.82 (sub 7) - www.blender.org, source file: 'border_sharp.blend'
|
||||
element vertex 52
|
||||
element vertex 39
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
@@ -9,120 +9,94 @@ property uchar red
|
||||
property uchar green
|
||||
property uchar blue
|
||||
property uchar alpha
|
||||
element face 62
|
||||
element face 49
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-0.950647 -1.000000 0.000000 255 255 255 255
|
||||
-0.000071 -1.003000 0.000000 255 255 255 255
|
||||
-0.000077 -1.000000 0.000000 255 255 255 255
|
||||
-0.962557 -1.003000 0.000000 255 255 255 255
|
||||
0.000015 -1.007400 0.000000 255 255 255 255
|
||||
0.963176 -1.003000 0.000000 255 255 255 255
|
||||
0.951244 -1.000000 0.000000 255 255 255 255
|
||||
0.971677 -1.000000 0.000000 255 255 255 255
|
||||
0.982502 -1.003000 0.000000 255 255 255 255
|
||||
1.000000 -1.000000 0.000000 255 255 255 255
|
||||
1.003758 -0.981739 0.000000 255 255 255 255
|
||||
1.003000 -1.002581 0.000000 255 255 255 255
|
||||
1.003000 -0.963042 0.000000 255 255 255 255
|
||||
1.000000 -0.970926 0.000000 255 255 255 255
|
||||
1.007400 -0.970801 0.000000 255 255 255 255
|
||||
1.007400 -0.997446 0.000000 255 255 255 255
|
||||
1.007400 -1.007400 0.000000 255 255 255 255
|
||||
0.996947 -1.007400 0.000000 255 255 255 255
|
||||
0.973770 -1.007400 0.000000 255 255 255 255
|
||||
1.007400 -0.000016 0.000000 255 255 255 255
|
||||
1.003000 0.963025 0.000000 255 255 255 255
|
||||
1.003000 -0.000008 0.000000 255 255 255 255
|
||||
1.007400 0.987582 0.000000 255 255 255 255
|
||||
1.003000 0.987628 0.000000 255 255 255 255
|
||||
1.000017 0.976754 0.000000 255 255 255 255
|
||||
1.000000 0.951104 0.000000 255 255 255 255
|
||||
1.000000 1.000000 0.000000 255 255 255 255
|
||||
0.984469 1.003292 0.000000 255 255 255 255
|
||||
1.003000 1.003000 0.000000 255 255 255 255
|
||||
0.962232 1.003287 0.000000 255 255 255 255
|
||||
0.973622 1.000000 0.000000 255 255 255 255
|
||||
0.979528 1.007393 0.000000 255 255 255 255
|
||||
1.002331 1.007393 0.000000 255 255 255 255
|
||||
1.005447 1.007400 0.000000 255 255 255 255
|
||||
1.007400 1.007400 0.000000 255 255 255 255
|
||||
1.000000 -0.951116 0.000000 255 255 255 255
|
||||
-0.951593 1.000000 0.000000 255 255 255 255
|
||||
-0.000071 1.003287 0.000000 255 255 255 255
|
||||
-0.963515 1.003287 0.000000 255 255 255 255
|
||||
0.950312 1.000000 0.000000 255 255 255 255
|
||||
-0.000290 1.007393 0.000000 255 255 255 255
|
||||
-0.971125 -1.007400 0.000000 255 255 255 255
|
||||
1.000000 0.000000 0.000000 255 255 255 255
|
||||
-0.000064 1.000000 0.000000 255 255 255 255
|
||||
-0.969477 1.007393 0.000000 255 255 255 255
|
||||
1.007402 -0.002983 0.000000 255 255 255 255
|
||||
1.049534 -0.000048 0.000000 255 255 255 255
|
||||
1.006874 -0.000048 0.000000 255 255 255 255
|
||||
1.049534 0.003142 0.000000 255 255 255 255
|
||||
1.006210 -0.002992 0.000000 255 255 255 255
|
||||
1.049533 -0.002983 0.000000 255 255 255 255
|
||||
1.006300 0.003142 0.000000 255 255 255 255
|
||||
-0.999971 -1.007400 0.000000 255 255 255 255
|
||||
-0.036811 -1.003000 0.000000 255 255 255 255
|
||||
-1.000058 -1.003000 0.000000 255 255 255 255
|
||||
-0.048743 -1.000000 0.000000 255 255 255 255
|
||||
-1.000064 -1.000000 0.000000 255 255 255 255
|
||||
-0.028310 -1.000000 0.000000 255 255 255 255
|
||||
-0.017485 -1.003000 0.000000 255 255 255 255
|
||||
0.000013 -1.000000 0.000000 255 255 255 255
|
||||
0.003771 -0.981739 0.000000 255 255 255 255
|
||||
0.003013 -1.002581 0.000000 255 255 255 255
|
||||
0.003013 -0.963042 0.000000 255 255 255 255
|
||||
0.000013 -0.970926 0.000000 255 255 255 255
|
||||
0.007413 -0.970801 0.000000 255 255 255 255
|
||||
0.007413 -0.997446 0.000000 255 255 255 255
|
||||
0.007413 -1.007400 0.000000 255 255 255 255
|
||||
-0.003040 -1.007400 0.000000 255 255 255 255
|
||||
-0.026217 -1.007400 0.000000 255 255 255 255
|
||||
0.007413 -0.000016 0.000000 255 255 255 255
|
||||
0.003013 0.963025 0.000000 255 255 255 255
|
||||
0.003013 -0.000008 0.000000 255 255 255 255
|
||||
0.007413 0.987582 0.000000 255 255 255 255
|
||||
0.003013 0.987628 0.000000 255 255 255 255
|
||||
0.000031 0.976754 0.000000 255 255 255 255
|
||||
0.000013 0.951104 0.000000 255 255 255 255
|
||||
0.000013 1.000000 0.000000 255 255 255 255
|
||||
-0.015518 1.003292 0.000000 255 255 255 255
|
||||
0.003013 1.003000 0.000000 255 255 255 255
|
||||
-0.037754 1.003287 0.000000 255 255 255 255
|
||||
-0.026365 1.000000 0.000000 255 255 255 255
|
||||
-0.020459 1.007393 0.000000 255 255 255 255
|
||||
0.002344 1.007393 0.000000 255 255 255 255
|
||||
0.005460 1.007400 0.000000 255 255 255 255
|
||||
0.007413 1.007400 0.000000 255 255 255 255
|
||||
0.000013 -0.951116 0.000000 255 255 255 255
|
||||
-1.000058 1.003287 0.000000 255 255 255 255
|
||||
-0.049675 1.000000 0.000000 255 255 255 255
|
||||
-1.000277 1.007393 0.000000 255 255 255 255
|
||||
0.000013 0.000000 0.000000 255 255 255 255
|
||||
-1.000051 1.000000 0.000000 255 255 255 255
|
||||
3 0 1 2
|
||||
3 3 4 1
|
||||
3 4 5 1
|
||||
3 1 6 2
|
||||
3 5 7 6
|
||||
3 8 9 7
|
||||
3 10 9 11
|
||||
3 12 13 10
|
||||
3 10 14 12
|
||||
3 15 11 16
|
||||
3 11 17 16
|
||||
3 8 18 17
|
||||
3 19 12 14
|
||||
3 19 20 21
|
||||
3 22 23 20
|
||||
3 20 24 25
|
||||
3 23 26 24
|
||||
3 27 26 28
|
||||
3 29 30 27
|
||||
3 27 31 29
|
||||
3 32 28 33
|
||||
3 28 34 33
|
||||
3 25 21 20
|
||||
3 21 35 12
|
||||
3 36 37 38
|
||||
3 37 39 29
|
||||
3 29 40 37
|
||||
3 40 38 37
|
||||
3 0 3 1
|
||||
3 3 41 4
|
||||
3 4 18 5
|
||||
3 1 5 6
|
||||
3 5 8 7
|
||||
3 8 11 9
|
||||
3 10 13 9
|
||||
3 12 35 13
|
||||
3 10 15 14
|
||||
3 15 10 11
|
||||
3 11 8 17
|
||||
3 8 5 18
|
||||
3 19 21 12
|
||||
3 19 22 20
|
||||
3 22 34 23
|
||||
3 20 23 24
|
||||
3 23 28 26
|
||||
3 27 30 26
|
||||
3 29 39 30
|
||||
3 27 32 31
|
||||
3 32 27 28
|
||||
3 28 23 34
|
||||
3 25 42 21
|
||||
3 21 42 35
|
||||
3 36 43 37
|
||||
3 37 43 39
|
||||
3 29 31 40
|
||||
3 40 44 38
|
||||
3 19 14 22
|
||||
3 45 46 47
|
||||
3 48 47 46
|
||||
3 49 45 47
|
||||
3 45 50 46
|
||||
3 48 51 47
|
||||
3 2 3 4
|
||||
3 1 5 3
|
||||
3 6 7 5
|
||||
3 8 7 9
|
||||
3 10 11 8
|
||||
3 8 12 10
|
||||
3 13 9 14
|
||||
3 9 15 14
|
||||
3 6 16 15
|
||||
3 17 10 12
|
||||
3 17 18 19
|
||||
3 20 21 18
|
||||
3 18 22 23
|
||||
3 21 24 22
|
||||
3 25 24 26
|
||||
3 27 28 25
|
||||
3 25 29 27
|
||||
3 30 26 31
|
||||
3 26 32 31
|
||||
3 23 19 18
|
||||
3 19 33 10
|
||||
3 34 35 27
|
||||
3 27 36 34
|
||||
3 0 16 1
|
||||
3 2 1 3
|
||||
3 1 6 5
|
||||
3 6 9 7
|
||||
3 8 11 7
|
||||
3 10 33 11
|
||||
3 8 13 12
|
||||
3 13 8 9
|
||||
3 9 6 15
|
||||
3 6 1 16
|
||||
3 17 19 10
|
||||
3 17 20 18
|
||||
3 20 32 21
|
||||
3 18 21 22
|
||||
3 21 26 24
|
||||
3 25 28 24
|
||||
3 27 35 28
|
||||
3 25 30 29
|
||||
3 30 25 26
|
||||
3 26 21 32
|
||||
3 23 37 19
|
||||
3 19 37 33
|
||||
3 34 38 35
|
||||
3 27 29 36
|
||||
3 17 12 20
|
||||
|
||||
Reference in New Issue
Block a user