mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-11 18:34:58 +01:00
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).
This commit is contained in:
@@ -434,6 +434,7 @@ set(VMIX_SRCS
|
||||
ImGuiToolkit.cpp
|
||||
ImGuiVisitor.cpp
|
||||
InfoVisitor.cpp
|
||||
CountVisitor.cpp
|
||||
GstToolkit.cpp
|
||||
GlmToolkit.cpp
|
||||
SystemToolkit.cpp
|
||||
|
||||
146
CountVisitor.cpp
Normal file
146
CountVisitor.cpp
Normal file
@@ -0,0 +1,146 @@
|
||||
/*
|
||||
* This file is part of vimix - video live mixer
|
||||
*
|
||||
* **Copyright** (C) 2019-2022 Bruno Herbelin <bruno.herbelin@gmail.com>
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
**/
|
||||
|
||||
#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_;
|
||||
}
|
||||
39
CountVisitor.h
Normal file
39
CountVisitor.h
Normal file
@@ -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
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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_) {
|
||||
|
||||
22
Mixer.cpp
22
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)
|
||||
|
||||
13
Session.cpp
13
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_);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user