From 8fef0052a30076c6580cd0e450c1c99be636547b Mon Sep 17 00:00:00 2001 From: Bruno Herbelin Date: Sat, 9 Apr 2022 00:35:20 +0200 Subject: [PATCH] New CountVisitor to count the number of sources in session Session size is the number of elements, use CountVisitor to count the total number of sources inside (recursively through SessionSources). --- CMakeLists.txt | 1 + CountVisitor.cpp | 146 ++++++++++++++++ CountVisitor.h | 39 +++++ ImGuiVisitor.cpp | 2 +- InfoVisitor.cpp | 12 +- Mixer.cpp | 22 +-- Session.cpp | 13 +- Session.h | 5 +- SessionCreator.cpp | 2 +- SessionSource.cpp | 4 +- SessionVisitor.cpp | 2 +- UserInterfaceManager.cpp | 2 +- rsc/mesh/border_perspective_round.ply | 185 ++++++++++----------- rsc/mesh/border_perspective_round_left.ply | 45 +++-- rsc/mesh/border_perspective_top.ply | 21 ++- 15 files changed, 353 insertions(+), 148 deletions(-) create mode 100644 CountVisitor.cpp create mode 100644 CountVisitor.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 544e0fb..c28815d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -434,6 +434,7 @@ set(VMIX_SRCS ImGuiToolkit.cpp ImGuiVisitor.cpp InfoVisitor.cpp + CountVisitor.cpp GstToolkit.cpp GlmToolkit.cpp SystemToolkit.cpp diff --git a/CountVisitor.cpp b/CountVisitor.cpp new file mode 100644 index 0000000..bbd3cea --- /dev/null +++ b/CountVisitor.cpp @@ -0,0 +1,146 @@ +/* + * This file is part of vimix - video live mixer + * + * **Copyright** (C) 2019-2022 Bruno Herbelin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +**/ + +#include "Scene.h" +#include "Primitives.h" + +#include "MediaSource.h" +#include "CloneSource.h" +#include "RenderSource.h" +#include "SessionSource.h" +#include "PatternSource.h" +#include "DeviceSource.h" +#include "NetworkSource.h" +#include "SrtReceiverSource.h" +#include "MultiFileSource.h" +#include "Session.h" + +#include "CountVisitor.h" + + +CountVisitor::CountVisitor() : num_source_(0), num_playable_(0) +{ +} + +void CountVisitor::visit(Node &n) +{ + +} + +void CountVisitor::visit(Group &) +{ +} + +void CountVisitor::visit(Switch &) +{ +} + +void CountVisitor::visit(Scene &) +{ +} + +void CountVisitor::visit(Primitive &) +{ +} + + +void CountVisitor::visit(MediaPlayer &mp) +{ + +} + +void CountVisitor::visit(Stream &n) +{ + +} + +void CountVisitor::visit (MediaSource& s) +{ + ++num_source_; + if (s.playable()) + ++num_playable_; +} + +void CountVisitor::visit (SessionFileSource& s) +{ + num_source_ += s.session()->numSources(); + if (s.playable()) + ++num_playable_; +} + +void CountVisitor::visit (SessionGroupSource& s) +{ + num_source_ += s.session()->numSources(); + if (s.playable()) + ++num_playable_; +} + +void CountVisitor::visit (RenderSource& s) +{ + ++num_source_; + ++num_playable_; +} + +void CountVisitor::visit (CloneSource& s) +{ + ++num_source_; + ++num_playable_; +} + +void CountVisitor::visit (PatternSource& s) +{ + ++num_source_; + if (s.playable()) + ++num_playable_; +} + +void CountVisitor::visit (DeviceSource& s) +{ + ++num_source_; + if (s.playable()) + ++num_playable_; +} + +void CountVisitor::visit (NetworkSource& s) +{ + ++num_source_; + if (s.playable()) + ++num_playable_; +} + +void CountVisitor::visit (MultiFileSource& s) +{ + ++num_source_; + if (s.playable()) + ++num_playable_; +} + +void CountVisitor::visit (GenericStreamSource& s) +{ + ++num_source_; + if (s.playable()) + ++num_playable_; +} + +void CountVisitor::visit (SrtReceiverSource& s) +{ + ++num_source_; + if (s.playable()) + ++num_playable_; +} diff --git a/CountVisitor.h b/CountVisitor.h new file mode 100644 index 0000000..c8eea53 --- /dev/null +++ b/CountVisitor.h @@ -0,0 +1,39 @@ +#ifndef COUNTVISITOR_H +#define COUNTVISITOR_H + +#include "Visitor.h" + +class CountVisitor : public Visitor +{ + uint num_source_; + uint num_playable_; + +public: + CountVisitor(); + inline uint numSources () const { return num_source_; } + inline uint numPlayableSources () const { return num_playable_; } + + // Elements of Scene + void visit (Scene& n) override; + void visit (Node& n) override; + void visit (Group& n) override; + void visit (Switch& n) override; + void visit (Primitive& n) override; + + // Elements with attributes + void visit (Stream& n) override; + void visit (MediaPlayer& n) override; + void visit (MediaSource& s) override; + void visit (SessionFileSource& s) override; + void visit (SessionGroupSource& s) override; + void visit (RenderSource& s) override; + void visit (CloneSource& s) override; + void visit (PatternSource& s) override; + void visit (DeviceSource& s) override; + void visit (NetworkSource& s) override; + void visit (MultiFileSource& s) override; + void visit (GenericStreamSource& s) override; + void visit (SrtReceiverSource& s) override; +}; + +#endif // INFOVISITOR_H diff --git a/ImGuiVisitor.cpp b/ImGuiVisitor.cpp index cfa9cd0..17a5fce 100644 --- a/ImGuiVisitor.cpp +++ b/ImGuiVisitor.cpp @@ -689,7 +689,7 @@ void ImGuiVisitor::visit (SessionGroupSource& s) ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.14f, 0.14f, 0.14f, 0.9f)); ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); ImGui::InputTextMultiline("##sourcesingroup", (char *)info.c_str(), info.size(), - ImVec2(IMGUI_RIGHT_ALIGN, CLAMP(session->numSource(), 2, 5) * ImGui::GetTextLineHeightWithSpacing()), + ImVec2(IMGUI_RIGHT_ALIGN, CLAMP(session->size(), 2, 5) * ImGui::GetTextLineHeightWithSpacing()), ImGuiInputTextFlags_ReadOnly); ImGui::PopStyleColor(1); diff --git a/InfoVisitor.cpp b/InfoVisitor.cpp index 018a2b6..faba430 100644 --- a/InfoVisitor.cpp +++ b/InfoVisitor.cpp @@ -149,7 +149,11 @@ void InfoVisitor::visit (SessionFileSource& s) std::ostringstream oss; if (s.session()->frame()){ - std::string numsource = std::to_string(s.session()->numSource()) + " source" + (s.session()->numSource()>1 ? "s" : ""); + uint N = s.session()->size(); + std::string numsource = std::to_string(N) + " source" + (N>1 ? "s" : ""); + uint T = s.session()->numSources(); + if (T>N) + numsource += " (" + std::to_string(T) + " total)"; if (brief_) { oss << SystemToolkit::filename(s.path()) << std::endl; oss << numsource << ", " ; @@ -172,7 +176,11 @@ void InfoVisitor::visit (SessionGroupSource& s) return; std::ostringstream oss; - oss << s.session()->numSource() << " source" << (s.session()->numSource()>1 ? "s" : ""); + uint N = s.session()->size(); + oss << N << " source" << (N>1 ? "s" : ""); + uint T = s.session()->numSources(); + if (T>N) + oss << " (" << std::to_string(T) << " total)"; if (s.session()->frame()){ if (brief_) { diff --git a/Mixer.cpp b/Mixer.cpp index b8d4372..3f4923a 100644 --- a/Mixer.cpp +++ b/Mixer.cpp @@ -705,7 +705,7 @@ void Mixer::groupSelection() } } - if (sessiongroup->session()->numSource() > 0) { + if (sessiongroup->session()->size() > 0) { // recreate groups in session group for (auto git = selectgroups.begin(); git != selectgroups.end(); ++git) sessiongroup->session()->link( *git ); @@ -728,10 +728,10 @@ void Mixer::groupSelection() // store in action manager std::ostringstream info; - info << sessiongroup->name() << " inserted: " << sessiongroup->session()->numSource() << " sources groupped."; + info << sessiongroup->name() << " inserted: " << sessiongroup->session()->size() << " sources groupped."; Action::manager().store(info.str()); - Log::Notify("Added %s source '%s' (group of %d sources)", sessiongroup->info().c_str(), sessiongroup->name().c_str(), sessiongroup->session()->numSource()); + Log::Notify("Added %s source '%s' (group of %d sources)", sessiongroup->info().c_str(), sessiongroup->name().c_str(), sessiongroup->session()->size()); // give the hand to the user Mixer::manager().setCurrentSource(sessiongroup); @@ -763,7 +763,7 @@ void Mixer::groupAll() break; } - if (sessiongroup->session()->numSource() > 0) { + if (sessiongroup->session()->size() > 0) { // recreate groups in session group for (auto git = allgroups.begin(); git != allgroups.end(); ++git) @@ -784,7 +784,7 @@ void Mixer::groupAll() addSource(sessiongroup); // inform of creation - Log::Info("%s Source '%s' created (%d sources groupped)", sessiongroup->info().c_str(), sessiongroup->name().c_str(), sessiongroup->session()->numSource()); + Log::Info("%s Source '%s' created (%d sources groupped)", sessiongroup->info().c_str(), sessiongroup->name().c_str(), sessiongroup->session()->size()); } else { delete sessiongroup; @@ -980,7 +980,7 @@ void Mixer::moveIndex (int current_index, int target_index) void Mixer::setCurrentNext() { - if (session_->numSource() > 0) { + if (session_->size() > 0) { SourceList::iterator it = current_source_; ++it; @@ -995,7 +995,7 @@ void Mixer::setCurrentNext() void Mixer::setCurrentPrevious() { - if (session_->numSource() > 0) { + if (session_->size() > 0) { SourceList::iterator it = current_source_; @@ -1037,7 +1037,7 @@ int Mixer::indexCurrentSource() const int Mixer::numSource() const { - return (int) session_->numSource(); + return (int) session_->size(); } Source *Mixer::currentSource() @@ -1221,7 +1221,7 @@ void Mixer::merge(Session *session) // import every sources std::ostringstream info; - info << session->numSource() << " sources imported from:" << session->filename(); + info << session->size() << " sources imported from:" << session->filename(); for ( Source *s = session->popSource(); s != nullptr; s = session->popSource()) { // avoid name duplicates renameSource(s); @@ -1260,7 +1260,7 @@ void Mixer::merge(SessionSource *source) // prepare Action manager info std::ostringstream info; - info << source->name().c_str() << " expanded:" << session->numSource() << " sources imported"; + info << source->name().c_str() << " expanded:" << session->size() << " sources imported"; // import sources of the session (if not empty) if ( !session->empty() ) { @@ -1395,7 +1395,7 @@ void Mixer::swap() Action::manager().init(); // notification - Log::Notify("Session %s loaded. %d source(s) created.", session_->filename().c_str(), session_->numSource()); + Log::Notify("Session %s loaded. %d source(s) created.", session_->filename().c_str(), session_->size()); } void Mixer::close(bool smooth) diff --git a/Session.cpp b/Session.cpp index b0e96ab..faeb6db 100644 --- a/Session.cpp +++ b/Session.cpp @@ -33,6 +33,7 @@ #include "MixingGroup.h" #include "ControlManager.h" #include "SourceCallback.h" +#include "CountVisitor.h" #include "Log.h" #include "Session.h" @@ -432,11 +433,21 @@ SourceList Session::getDepthSortedList() const return depth_sorted(sources_); } -uint Session::numSource() const +uint Session::size() const { return sources_.size(); } +uint Session::numSources() const +{ + CountVisitor counter; + for( SourceList::const_iterator it = sources_.cbegin(); it != sources_.cend(); ++it) { + (*it)->accept(counter); + } + return counter.numSources(); +} + + SourceIdList Session::getIdList() const { return ids(sources_); diff --git a/Session.h b/Session.h index ec7e358..f461465 100644 --- a/Session.h +++ b/Session.h @@ -63,7 +63,7 @@ public: // management of list of sources bool empty() const; - uint numSource() const; + uint size() const; SourceList::iterator begin (); SourceList::iterator end (); SourceList::iterator find (Source *s); @@ -81,6 +81,9 @@ public: int index (SourceList::iterator it) const; void move (int current_index, int target_index); + // get total number of sources (recursively) + uint numSources() const; + // update all sources and mark sources which failed void update (float dt); uint64_t runtime() const; diff --git a/SessionCreator.cpp b/SessionCreator.cpp index 5cb9e2c..c7b4d16 100644 --- a/SessionCreator.cpp +++ b/SessionCreator.cpp @@ -180,7 +180,7 @@ void SessionCreator::load(const std::string& filename) // all good Log::Info("Session %s Opened '%s' (%d sources)", std::to_string(session_->id()).c_str(), - filename.c_str(), session_->numSource()); + filename.c_str(), session_->size()); } diff --git a/SessionSource.cpp b/SessionSource.cpp index 8e178a9..b16416f 100644 --- a/SessionSource.cpp +++ b/SessionSource.cpp @@ -165,7 +165,7 @@ void SessionSource::update(float dt) if (session_->failedSource() != nullptr) { session_->deleteSource(session_->failedSource()); // fail session if all sources failed - if ( session_->numSource() < 1) + if ( session_->size() < 1) failed_ = true; } @@ -302,7 +302,7 @@ void SessionFileSource::init() attach(renderbuffer); // wait for all sources to init - if (session_->numSource() > 0) + if (session_->size() > 0) wait_for_sources_ = true; else { initialized_ = true; diff --git a/SessionVisitor.cpp b/SessionVisitor.cpp index 8fa463c..5708f82 100644 --- a/SessionVisitor.cpp +++ b/SessionVisitor.cpp @@ -60,7 +60,7 @@ bool SessionVisitor::saveSession(const std::string& filename, Session *session) XMLElement *rootnode = xmlDoc.NewElement(APP_NAME); rootnode->SetAttribute("major", XML_VERSION_MAJOR); rootnode->SetAttribute("minor", XML_VERSION_MINOR); - rootnode->SetAttribute("size", session->numSource()); + rootnode->SetAttribute("size", session->size()); rootnode->SetAttribute("date", SystemToolkit::date_time_string().c_str()); rootnode->SetAttribute("resolution", session->frame()->info().c_str()); xmlDoc.InsertEndChild(rootnode); diff --git a/UserInterfaceManager.cpp b/UserInterfaceManager.cpp index 73e0bc0..b8af4a7 100644 --- a/UserInterfaceManager.cpp +++ b/UserInterfaceManager.cpp @@ -5407,7 +5407,7 @@ void Navigator::Render() // hack to show more sources if not enough space; make source icons smaller... ImVec2 sourceiconsize(icon_width, icon_width); - if (sourcelist_height - 2.f * icon_width < Mixer::manager().session()->numSource() * icon_width ) + if (sourcelist_height - 2.f * icon_width < Mixer::manager().session()->size() * icon_width ) sourceiconsize.y *= 0.75f; // Left bar top diff --git a/rsc/mesh/border_perspective_round.ply b/rsc/mesh/border_perspective_round.ply index 34f372b..8f047fa 100644 --- a/rsc/mesh/border_perspective_round.ply +++ b/rsc/mesh/border_perspective_round.ply @@ -1,104 +1,103 @@ ply format ascii 1.0 -comment Created by Blender 2.91.2 - www.blender.org +comment Created by Blender 2.93.3 - www.blender.org element vertex 42 property float x property float y property float z -property uchar red -property uchar green -property uchar blue -property uchar alpha +property float nx +property float ny +property float nz element face 48 property list uchar uint vertex_indices end_header -0.024507 -0.996045 0.000000 255 255 255 255 -0.174784 -0.905512 0.000000 255 255 255 255 -0.027218 -0.975830 0.000000 255 255 255 255 -0.185609 -0.916652 0.000000 255 255 255 255 -0.191906 -0.891539 0.000000 255 255 255 255 -0.211357 -0.881739 0.000000 255 255 255 255 -0.202956 -0.902581 0.000000 255 255 255 255 -0.213481 -0.863042 0.000000 255 255 255 255 -0.200215 -0.870926 0.000000 255 255 255 255 -0.227129 -0.876006 0.000000 255 255 255 255 -0.224977 -0.894955 0.000000 255 255 255 255 -0.216462 -0.916078 0.000000 255 255 255 255 -0.198841 -0.930269 0.000000 255 255 255 255 -0.017147 -1.015018 0.000000 255 255 255 255 -0.227129 0.099989 0.000000 255 255 255 255 -0.213481 1.063025 0.000000 255 255 255 255 -0.213481 0.099992 0.000000 255 255 255 255 -0.227129 1.075985 0.000000 255 255 255 255 -0.211195 1.087628 0.000000 255 255 255 255 -0.200055 1.076754 0.000000 255 255 255 255 -0.200038 1.051104 0.000000 255 255 255 255 -0.191568 1.092067 0.000000 255 255 255 255 -0.184506 1.111229 0.000000 255 255 255 255 -0.202614 1.103111 0.000000 255 255 255 255 -0.162270 1.113506 0.000000 255 255 255 255 -0.173660 1.100095 0.000000 255 255 255 255 -0.175229 1.127145 0.000000 255 255 255 255 -0.197765 1.124837 0.000000 255 255 255 255 -0.216116 1.116610 0.000000 255 255 255 255 -0.224813 1.100919 0.000000 255 255 255 255 -0.200926 -0.851116 0.000000 255 255 255 255 --0.800033 1.113506 0.000000 255 255 255 255 -0.150350 1.100000 0.000000 255 255 255 255 --0.800026 1.127145 0.000000 255 255 255 255 -0.200038 0.100000 0.000000 255 255 255 255 --0.800026 1.100000 0.000000 255 255 255 255 -0.016287 1.016200 0.000000 255 255 255 255 -0.173893 1.099758 0.000000 255 255 255 255 --0.000785 1.024438 0.000000 255 255 255 255 -0.192264 1.092032 0.000000 255 255 255 255 -0.024618 1.000701 0.000000 255 255 255 255 -0.198820 1.078819 0.000000 255 255 255 255 +0.016287 1.016200 0.000000 -0.000000 0.000000 1.000000 +0.136328 1.079531 0.000000 -0.000000 0.000000 1.000000 +-0.000785 1.024438 0.000000 -0.000000 0.000000 1.000000 +0.154699 1.071804 0.000000 0.000000 -0.000000 1.000000 +0.024618 1.000701 0.000000 0.000000 -0.000000 1.000000 +0.161255 1.058592 0.000000 0.000000 -0.000000 1.000000 +0.013495 -1.001311 0.000000 -0.000000 0.000000 1.000000 +0.115010 -0.933052 0.000000 -0.000000 0.000000 1.000000 +0.016206 -0.981096 0.000000 -0.000000 0.000000 1.000000 +0.125834 -0.944192 0.000000 -0.000000 0.000000 1.000000 +0.132131 -0.919079 0.000000 -0.000000 0.000000 1.000000 +0.151583 -0.909279 0.000000 0.000000 -0.000000 1.000000 +0.143181 -0.930121 0.000000 0.000000 -0.000000 1.000000 +0.153706 -0.890582 0.000000 0.000000 -0.000000 1.000000 +0.140441 -0.898466 0.000000 0.000000 -0.000000 1.000000 +0.167355 -0.903547 0.000000 0.000000 0.000000 1.000000 +0.165202 -0.922495 0.000000 0.000000 -0.000000 1.000000 +0.156688 -0.943618 0.000000 0.000000 -0.000000 1.000000 +0.139066 -0.957810 0.000000 0.000000 -0.000000 1.000000 +0.006135 -1.020284 0.000000 0.000000 -0.000000 1.000000 +0.167355 0.072449 0.000000 0.000000 -0.000000 1.000000 +0.153706 1.035485 0.000000 -0.000000 0.000000 1.000000 +0.153706 0.072452 0.000000 -0.000000 0.000000 1.000000 +0.167355 1.048445 0.000000 -0.000000 -0.000000 1.000000 +0.151421 1.060088 0.000000 -0.000000 -0.000000 1.000000 +0.140280 1.049214 0.000000 -0.000000 0.000000 1.000000 +0.140263 1.023564 0.000000 -0.000000 0.000000 1.000000 +0.131793 1.064527 0.000000 -0.000000 -0.000000 1.000000 +0.124732 1.083689 0.000000 0.000000 0.000000 1.000000 +0.142839 1.075571 0.000000 0.000000 0.000000 1.000000 +0.102495 1.085966 0.000000 0.000000 0.000000 1.000000 +0.113885 1.072555 0.000000 0.000000 0.000000 1.000000 +0.115454 1.099605 0.000000 -0.000000 0.000000 1.000000 +0.137990 1.097297 0.000000 0.000000 0.000000 1.000000 +0.156341 1.089070 0.000000 0.000000 0.000000 1.000000 +0.165038 1.073379 0.000000 0.000000 0.000000 1.000000 +0.141152 -0.878656 0.000000 0.000000 -0.000000 1.000000 +-0.859808 1.085966 0.000000 0.000000 0.000000 1.000000 +0.090575 1.072460 0.000000 0.000000 0.000000 1.000000 +-0.859801 1.099605 0.000000 -0.000000 0.000000 1.000000 +0.140263 0.072460 0.000000 0.000000 -0.000000 1.000000 +-0.859801 1.072460 0.000000 0.000000 0.000000 1.000000 3 0 1 2 -3 3 4 1 -3 5 4 6 -3 7 8 5 -3 5 9 7 -3 10 6 11 -3 6 12 11 -3 3 13 12 -3 14 7 9 -3 14 15 16 -3 17 18 15 -3 15 19 20 -3 18 21 19 -3 22 21 23 -3 24 25 22 -3 22 26 24 -3 27 23 28 -3 23 29 28 -3 20 16 15 -3 16 30 7 -3 31 32 24 -3 24 33 31 +3 3 4 5 3 0 3 1 -3 3 6 4 -3 5 8 4 -3 7 30 8 -3 5 10 9 -3 10 5 6 -3 6 3 12 -3 3 0 13 -3 14 16 7 -3 14 17 15 -3 17 29 18 -3 15 18 19 -3 18 23 21 -3 22 25 21 -3 24 32 25 -3 22 27 26 -3 27 22 23 -3 23 18 29 -3 20 34 16 -3 16 34 30 -3 31 35 32 -3 24 26 33 -3 36 37 38 -3 39 40 41 -3 36 39 37 -3 39 36 40 +3 3 0 4 +3 6 7 8 +3 9 10 7 +3 11 10 12 +3 13 14 11 +3 11 15 13 +3 16 12 17 +3 12 18 17 +3 9 19 18 +3 20 13 15 +3 20 21 22 +3 23 24 21 +3 21 25 26 +3 24 27 25 +3 28 27 29 +3 30 31 28 +3 28 32 30 +3 33 29 34 +3 29 35 34 +3 26 22 21 +3 22 36 13 +3 37 38 30 +3 30 39 37 +3 6 9 7 +3 9 12 10 +3 11 14 10 +3 13 36 14 +3 11 16 15 +3 16 11 12 +3 12 9 18 +3 9 6 19 +3 20 22 13 +3 20 23 21 +3 23 35 24 +3 21 24 25 +3 24 29 27 +3 28 31 27 +3 30 38 31 +3 28 33 32 +3 33 28 29 +3 29 24 35 +3 26 40 22 +3 22 40 36 +3 37 41 38 +3 30 32 39 diff --git a/rsc/mesh/border_perspective_round_left.ply b/rsc/mesh/border_perspective_round_left.ply index ec3285d..6a37f2b 100644 --- a/rsc/mesh/border_perspective_round_left.ply +++ b/rsc/mesh/border_perspective_round_left.ply @@ -1,35 +1,34 @@ ply format ascii 1.0 -comment Created by Blender 2.91.2 - www.blender.org +comment Created by Blender 2.93.3 - www.blender.org element vertex 18 property float x property float y property float z -property uchar red -property uchar green -property uchar blue -property uchar alpha +property float nx +property float ny +property float nz element face 21 property list uchar uint vertex_indices end_header -1.299734 1.127167 0.000000 255 255 255 255 -0.236786 1.113523 0.000000 255 255 255 255 -1.299741 1.113523 0.000000 255 255 255 255 -0.248719 1.100000 0.000000 255 255 255 255 -1.299747 1.100000 0.000000 255 255 255 255 -0.224496 1.099211 0.000000 255 255 255 255 -0.217461 1.111536 0.000000 255 255 255 255 -0.208094 1.091539 0.000000 255 255 255 255 -0.174890 1.091562 0.000000 255 255 255 255 -0.197044 1.102581 0.000000 255 255 255 255 -0.018332 1.027078 0.000000 255 255 255 255 -0.186032 1.080750 0.000000 255 255 255 255 --0.014265 1.017066 0.000000 255 255 255 255 -0.161270 1.104778 0.000000 255 255 255 255 -0.183538 1.116078 0.000000 255 255 255 255 -0.204229 1.125153 0.000000 255 255 255 255 -0.223815 1.127167 0.000000 255 255 255 255 -0.076770 1.027285 0.000000 255 255 255 255 +1.253580 1.099993 0.000000 0.000000 -0.000000 1.000000 +0.190633 1.086349 0.000000 0.000000 -0.000000 1.000000 +1.253587 1.086349 0.000000 0.000000 -0.000000 1.000000 +0.202565 1.072826 0.000000 0.000000 -0.000000 1.000000 +1.253593 1.072827 0.000000 0.000000 -0.000000 1.000000 +0.178844 1.071034 0.000000 0.000000 -0.000000 1.000000 +0.171307 1.084362 0.000000 0.000000 -0.000000 1.000000 +0.159933 1.064867 0.000000 0.000000 -0.000000 1.000000 +0.129238 1.067900 0.000000 0.000000 0.000000 1.000000 +0.150890 1.077414 0.000000 0.000000 0.000000 1.000000 +0.000272 1.012947 0.000000 0.000000 0.000000 1.000000 +0.139377 1.054579 0.000000 0.000000 0.000000 1.000000 +-0.030319 1.014976 0.000000 0.000000 -0.000000 1.000000 +0.118628 1.080113 0.000000 0.000000 0.000000 1.000000 +0.138387 1.090409 0.000000 0.000000 0.000000 1.000000 +0.158075 1.097979 0.000000 -0.000000 0.000000 1.000000 +0.177661 1.099993 0.000000 -0.000000 0.000000 1.000000 +0.033124 1.009642 0.000000 0.000000 0.000000 1.000000 3 0 1 2 3 2 3 4 3 1 5 3 diff --git a/rsc/mesh/border_perspective_top.ply b/rsc/mesh/border_perspective_top.ply index 6b5430b..5917379 100644 --- a/rsc/mesh/border_perspective_top.ply +++ b/rsc/mesh/border_perspective_top.ply @@ -1,23 +1,22 @@ ply format ascii 1.0 -comment Created by Blender 2.91.2 - www.blender.org +comment Created by Blender 2.93.3 - www.blender.org element vertex 6 property float x property float y property float z -property uchar red -property uchar green -property uchar blue -property uchar alpha +property float nx +property float ny +property float nz element face 4 property list uchar uint vertex_indices end_header --0.275655 1.113506 0.000000 255 255 255 255 -0.674727 1.100000 0.000000 255 255 255 255 -0.675300 1.113506 0.000000 255 255 255 255 --0.275648 1.127145 0.000000 255 255 255 255 --0.275648 1.100000 0.000000 255 255 255 255 -0.675290 1.127145 0.000000 255 255 255 255 +-0.469445 1.086125 0.000000 0.000000 0.000000 1.000000 +0.636913 1.072620 0.000000 0.000000 0.000000 1.000000 +0.637580 1.086125 0.000000 0.000000 0.000000 1.000000 +-0.469437 1.099764 0.000000 -0.000000 0.000000 1.000000 +-0.469437 1.072620 0.000000 0.000000 0.000000 1.000000 +0.637568 1.099764 0.000000 -0.000000 0.000000 1.000000 3 0 1 2 3 2 3 0 3 0 4 1