diff --git a/CMakeLists.txt b/CMakeLists.txt index 62c9860..acd6417 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -447,6 +447,7 @@ set(VMIX_RSC_FILES ./rsc/mesh/icon_vector_square_slash.ply ./rsc/mesh/icon_cube.ply ./rsc/mesh/icon_sequence.ply + ./rsc/mesh/icon_receive.ply ./rsc/mesh/h_line.ply ./rsc/mesh/h_mark.ply ) diff --git a/Decorations.cpp b/Decorations.cpp index 31f5c4b..95b7da8 100644 --- a/Decorations.cpp +++ b/Decorations.cpp @@ -441,10 +441,12 @@ Symbol::Symbol(Type t, glm::vec3 pos) : Node(), type_(t) shadows[PATTERN]= shadow; icons[CAMERA] = new Mesh("mesh/icon_camera.ply"); shadows[CAMERA] = shadow; - icons[CUBE] = new Mesh("mesh/icon_cube.ply"); - shadows[CUBE] = shadow; + icons[CUBE] = new Mesh("mesh/icon_cube.ply"); + shadows[CUBE] = shadow; icons[SHARE] = new Mesh("mesh/icon_share.ply"); shadows[SHARE] = shadow; + icons[RECEIVE] = new Mesh("mesh/icon_receive.ply"); + shadows[RECEIVE]= shadow; icons[DOTS] = new Mesh("mesh/icon_dots.ply"); shadows[DOTS] = nullptr; icons[BUSY] = new Mesh("mesh/icon_circles.ply"); diff --git a/Decorations.h b/Decorations.h index db3df25..697affa 100644 --- a/Decorations.h +++ b/Decorations.h @@ -60,7 +60,7 @@ protected: class Symbol : public Node { public: - typedef enum { CIRCLE_POINT = 0, SQUARE_POINT, IMAGE, SEQUENCE, VIDEO, SESSION, CLONE, RENDER, GROUP, PATTERN, CAMERA, CUBE, SHARE, + typedef enum { CIRCLE_POINT = 0, SQUARE_POINT, IMAGE, SEQUENCE, VIDEO, SESSION, CLONE, RENDER, GROUP, PATTERN, CAMERA, CUBE, SHARE, RECEIVE, DOTS, BUSY, LOCK, UNLOCK, EYE, EYESLASH, VECTORSLASH, ARROWS, ROTATION, CROP, CIRCLE, SQUARE, CLOCK, CLOCK_H, GRID, CROSS, EMPTY } Type; Symbol(Type t, glm::vec3 pos = glm::vec3(0.f)); ~Symbol(); diff --git a/SessionCreator.cpp b/SessionCreator.cpp index ac56e9d..9ea4e27 100644 --- a/SessionCreator.cpp +++ b/SessionCreator.cpp @@ -32,6 +32,7 @@ #include "PatternSource.h" #include "DeviceSource.h" #include "NetworkSource.h" +#include "SrtReceiverSource.h" #include "MultiFileSource.h" #include "StreamSource.h" #include "RenderSource.h" @@ -352,6 +353,9 @@ void SessionLoader::load(XMLElement *sessionNode) else if ( std::string(pType) == "GenericStreamSource") { load_source = new GenericStreamSource(id_xml_); } + else if ( std::string(pType) == "SrtReceiverSource") { + load_source = new SrtReceiverSource(id_xml_); + } // skip failed (including clones) if (!load_source) @@ -480,6 +484,9 @@ Source *SessionLoader::createSource(tinyxml2::XMLElement *sourceNode, Mode mode) else if ( std::string(pType) == "GenericStreamSource") { load_source = new GenericStreamSource(id__); } + else if ( std::string(pType) == "SrtReceiverSource") { + load_source = new SrtReceiverSource(id__); + } else if ( std::string(pType) == "CloneSource") { // clone from given origin XMLElement* originNode = xmlCurrent_->FirstChildElement("origin"); @@ -1089,6 +1096,18 @@ void SessionLoader::visit (GenericStreamSource& s) } } +void SessionLoader::visit (SrtReceiverSource& s) +{ + XMLElement* ip = xmlCurrent_->FirstChildElement("ip"); + XMLElement* port = xmlCurrent_->FirstChildElement("port"); + if (ip && port) { + const char * textip = ip->GetText(); + const char * textport = port->GetText(); + if (textip && textport) + s.setConnection(textip, textport); + } +} + void SessionLoader::visit (CloneSource& s) { diff --git a/SessionCreator.h b/SessionCreator.h index e223e49..4a470db 100644 --- a/SessionCreator.h +++ b/SessionCreator.h @@ -61,6 +61,7 @@ public: void visit (NetworkSource& s) override; void visit (MultiFileSource& s) override; void visit (GenericStreamSource& s) override; + void visit (SrtReceiverSource& s) override; static void XMLToNode(const tinyxml2::XMLElement *xml, Node &n); static void XMLToSourcecore(tinyxml2::XMLElement *xml, SourceCore &s); diff --git a/SessionVisitor.cpp b/SessionVisitor.cpp index 5fcdda3..adcda41 100644 --- a/SessionVisitor.cpp +++ b/SessionVisitor.cpp @@ -36,6 +36,7 @@ using namespace tinyxml2; #include "PatternSource.h" #include "DeviceSource.h" #include "NetworkSource.h" +#include "SrtReceiverSource.h" #include "MultiFileSource.h" #include "ImageShader.h" #include "ImageProcessingShader.h" @@ -725,6 +726,22 @@ void SessionVisitor::visit (GenericStreamSource& s) xmlCurrent_->InsertEndChild(desc); } + +void SessionVisitor::visit (SrtReceiverSource& s) +{ + xmlCurrent_->SetAttribute("type", "SrtReceiverSource"); + + XMLElement *ip = xmlDoc_->NewElement("ip"); + XMLText *iptext = xmlDoc_->NewText( s.ip().c_str() ); + ip->InsertEndChild( iptext ); + xmlCurrent_->InsertEndChild(ip); + + XMLElement *port = xmlDoc_->NewElement("port"); + XMLText *porttext = xmlDoc_->NewText( s.port().c_str() ); + port->InsertEndChild( porttext ); + xmlCurrent_->InsertEndChild(port); +} + std::string SessionVisitor::getClipboard(const SourceList &list) { std::string x = ""; diff --git a/SessionVisitor.h b/SessionVisitor.h index 22724ef..bbb543a 100644 --- a/SessionVisitor.h +++ b/SessionVisitor.h @@ -67,6 +67,7 @@ public: void visit (MixingGroup& s) override; void visit (MultiFileSource& s) override; void visit (GenericStreamSource& s) override; + void visit (SrtReceiverSource& s) override; static tinyxml2::XMLElement *NodeToXML(const Node &n, tinyxml2::XMLDocument *doc); static tinyxml2::XMLElement *ImageToXML(const FrameBufferImage *img, tinyxml2::XMLDocument *doc); diff --git a/Source.h b/Source.h index 839ac81..1a53d78 100644 --- a/Source.h +++ b/Source.h @@ -24,7 +24,7 @@ #define ICON_SOURCE_RENDER 0, 2 #define ICON_SOURCE_CLONE 9, 2 #define ICON_SOURCE_GSTREAMER 16, 16 -#define ICON_SOURCE_SRT 14, 5 +#define ICON_SOURCE_SRT 11, 8 #define ICON_SOURCE 13, 11 class SourceCallback; diff --git a/SrtReceiverSource.cpp b/SrtReceiverSource.cpp index fadbb9f..6817b8c 100644 --- a/SrtReceiverSource.cpp +++ b/SrtReceiverSource.cpp @@ -11,7 +11,7 @@ SrtReceiverSource::SrtReceiverSource(uint64_t id) : StreamSource(id) stream_ = new Stream; // set symbol - symbol_ = new Symbol(Symbol::SHARE, glm::vec3(0.75f, 0.75f, 0.01f)); + symbol_ = new Symbol(Symbol::RECEIVE, glm::vec3(0.75f, 0.75f, 0.01f)); symbol_->scale_.y = 1.5f; } diff --git a/UserInterfaceManager.cpp b/UserInterfaceManager.cpp index f56bbcf..41bf2c5 100644 --- a/UserInterfaceManager.cpp +++ b/UserInterfaceManager.cpp @@ -3792,7 +3792,7 @@ void OutputPreview::Render() } // start broadcast (broadcaster does not exists) else { - if ( ImGui::MenuItem( ICON_FA_GLOBE " Broadcast") ) { + if ( ImGui::MenuItem( ICON_FA_PODCAST " Broadcast") ) { video_broadcaster_ = new VideoBroadcast(Settings::application.broadcast_port); FrameGrabbing::manager().add(video_broadcaster_); } @@ -3872,7 +3872,7 @@ void OutputPreview::Render() ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(IMGUI_COLOR_BROADCAST, 0.8f)); else ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(IMGUI_COLOR_BROADCAST, 0.4f)); - ImGui::Text(ICON_FA_GLOBE); + ImGui::Text(ICON_FA_PODCAST); ImGui::PopStyleColor(1); ImGui::PopFont(); } @@ -3929,7 +3929,7 @@ void OutputPreview::Render() Connection::manager().info().name.c_str(), Streaming::manager().listStreams().size() ); if (video_broadcaster_) - ImGui::Text( " " ICON_FA_GLOBE " %s", video_broadcaster_->info().c_str() ); + ImGui::Text( " " ICON_FA_PODCAST " %s", video_broadcaster_->info().c_str() ); } ImGui::End(); @@ -5107,7 +5107,7 @@ void Navigator::RenderNewPannel() } } - if ( ImGui::Selectable("Custom SRT") ) { + if ( ImGui::Selectable("SRT Broadcaster") ) { new_source_preview_.setSource(); custom_connected = true; } @@ -5120,11 +5120,12 @@ void Navigator::RenderNewPannel() ImGuiToolkit::HelpToolTip("Create a source getting images from connected devices or machines;\n" ICON_FA_CARET_RIGHT " webcams or frame grabbers\n" ICON_FA_CARET_RIGHT " screen capture\n" - ICON_FA_CARET_RIGHT " stream shared by vimix"); + ICON_FA_CARET_RIGHT " stream shared by vimix on local network\n" + ICON_FA_CARET_RIGHT " SRT stream (e.g. broadcasted by vimix)"); if (custom_connected) { - ImGui::Text("\nCustom network SRT stream:"); + ImGui::Text("\nConnect to SRT broadcaster:"); ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); ImGuiToolkit::InputText("IP", &Settings::application.custom_connect_ip, ImGuiInputTextFlags_CharsDecimal | ImGuiInputTextFlags_CharsDecimal); @@ -5141,7 +5142,7 @@ void Navigator::RenderNewPannel() ImGui::InputText("##url", bufurl, IM_ARRAYSIZE(bufurl), ImGuiInputTextFlags_ReadOnly); ImGui::PopStyleColor(1); - ImGui::SameLine(0); ImGuiToolkit::Indication("URL for connecting to a stream on Secure Reliable Transport (SRT) protocol", ICON_FA_GLOBE); + ImGui::SameLine(0); ImGuiToolkit::Indication("URL for connecting to a stream on Secure Reliable Transport (SRT) protocol", ICON_SOURCE_SRT); if ( ImGui::Button("Try to connect", ImVec2(IMGUI_RIGHT_ALIGN, 0)) ) { new_source_preview_.setSource( Mixer::manager().createSourceSrt(Settings::application.custom_connect_ip, Settings::application.custom_connect_port), bufurl); @@ -5929,7 +5930,7 @@ void Navigator::RenderMainPannelSettings() ImFormatString(msg, IM_ARRAYSIZE(msg),"Port for broadcasting on Secure Reliable Transport (SRT) protocol\n" "You can e.g. connect to:\n srt://%s:%d", NetworkToolkit::host_ips()[1].c_str(), Settings::application.broadcast_port); - ImGuiToolkit::Indication(msg, ICON_FA_GLOBE); + ImGuiToolkit::Indication(msg, ICON_FA_PODCAST); ImGui::SameLine(0); ImGui::SetCursorPosX(-1.f * IMGUI_RIGHT_ALIGN); ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); diff --git a/VideoBroadcast.cpp b/VideoBroadcast.cpp index 9fc93ec..ab1e49a 100644 --- a/VideoBroadcast.cpp +++ b/VideoBroadcast.cpp @@ -188,7 +188,7 @@ std::string VideoBroadcast::info() const if (!initialized_) ret << "Starting"; else if (active_) - ret << "Streaming SRT on Port " << port_; + ret << "SRT Broadcast on Port " << port_; else ret << "Terminated"; diff --git a/rsc/images/icons.dds b/rsc/images/icons.dds index 1ae4622..2951e5e 100644 Binary files a/rsc/images/icons.dds and b/rsc/images/icons.dds differ diff --git a/rsc/mesh/icon_receive.ply b/rsc/mesh/icon_receive.ply new file mode 100644 index 0000000..795134a --- /dev/null +++ b/rsc/mesh/icon_receive.ply @@ -0,0 +1,640 @@ +ply +format ascii 1.0 +comment Created by Blender 2.93.3 - www.blender.org +element vertex 322 +property float x +property float y +property float z +property float nx +property float ny +property float nz +element face 305 +property list uchar uint vertex_indices +end_header +-0.074302 -0.110441 0.000000 -0.000000 0.000000 1.000000 +-0.046569 -0.091956 0.000000 -0.000000 0.000000 1.000000 +-0.074302 -0.091956 0.000000 -0.000000 0.000000 1.000000 +-0.046569 -0.110441 0.000000 0.000000 0.000000 1.000000 +-0.009591 -0.091956 0.000000 -0.000000 0.000000 1.000000 +0.008899 -0.005125 0.000000 -0.000000 0.000000 1.000000 +-0.009591 -0.005125 0.000000 -0.000000 0.000000 1.000000 +0.008899 -0.091956 0.000000 0.000000 0.000000 1.000000 +-0.037324 -0.110441 0.000000 -0.000000 0.000000 1.000000 +-0.037324 -0.091956 0.000000 -0.000000 0.000000 1.000000 +0.036632 -0.091956 0.000000 -0.000000 0.000000 1.000000 +0.036632 -0.110441 0.000000 0.000000 0.000000 1.000000 +0.045877 -0.110441 0.000000 -0.000000 0.000000 1.000000 +0.073610 -0.091956 0.000000 -0.000000 0.000000 1.000000 +0.045877 -0.091956 0.000000 -0.000000 0.000000 1.000000 +0.073610 -0.110441 0.000000 0.000000 0.000000 1.000000 +-0.003960 0.043868 0.000000 0.000000 0.000000 1.000000 +0.003268 0.043868 0.000000 0.000000 0.000000 1.000000 +-0.000346 0.044111 0.000000 0.000000 0.000000 1.000000 +-0.007427 0.043159 0.000000 0.000000 0.000000 1.000000 +0.006735 0.043159 0.000000 0.000000 0.000000 1.000000 +-0.010714 0.042018 0.000000 0.000000 0.000000 1.000000 +0.010022 0.042018 0.000000 0.000000 0.000000 1.000000 +-0.013790 0.040475 0.000000 0.000000 0.000000 1.000000 +0.013098 0.040475 0.000000 0.000000 0.000000 1.000000 +-0.016623 0.038562 0.000000 0.000000 0.000000 1.000000 +0.015931 0.038562 0.000000 0.000000 0.000000 1.000000 +-0.019181 0.036311 0.000000 0.000000 0.000000 1.000000 +0.018489 0.036311 0.000000 0.000000 0.000000 1.000000 +-0.021432 0.033753 0.000000 0.000000 0.000000 1.000000 +0.020740 0.033753 0.000000 0.000000 0.000000 1.000000 +-0.023346 0.030921 0.000000 0.000000 0.000000 1.000000 +0.022654 0.030921 0.000000 0.000000 0.000000 1.000000 +-0.024889 0.027846 0.000000 0.000000 0.000000 1.000000 +0.024197 0.027846 0.000000 0.000000 0.000000 1.000000 +-0.026031 0.024560 0.000000 0.000000 0.000000 1.000000 +0.025339 0.024560 0.000000 0.000000 0.000000 1.000000 +-0.026739 0.021094 0.000000 0.000000 0.000000 1.000000 +0.026047 0.021094 0.000000 0.000000 0.000000 1.000000 +-0.026982 0.017480 0.000000 0.000000 0.000000 1.000000 +0.026290 0.017480 0.000000 0.000000 0.000000 1.000000 +-0.026739 0.013866 0.000000 -0.000000 0.000000 1.000000 +0.026047 0.013866 0.000000 0.000000 0.000000 1.000000 +0.025339 0.010401 0.000000 0.000000 0.000000 1.000000 +-0.026031 0.010401 0.000000 0.000000 0.000000 1.000000 +0.024197 0.007114 0.000000 0.000000 0.000000 1.000000 +-0.024889 0.007114 0.000000 0.000000 0.000000 1.000000 +-0.023346 0.004039 0.000000 -0.000000 0.000000 1.000000 +0.022654 0.004039 0.000000 0.000000 0.000000 1.000000 +-0.021432 0.001207 0.000000 0.000000 0.000000 1.000000 +0.020740 0.001207 0.000000 0.000000 0.000000 1.000000 +-0.019181 -0.001351 0.000000 0.000000 0.000000 1.000000 +0.018489 -0.001351 0.000000 0.000000 0.000000 1.000000 +-0.016623 -0.003602 0.000000 0.000000 0.000000 1.000000 +0.015931 -0.003602 0.000000 0.000000 0.000000 1.000000 +-0.013790 -0.005515 0.000000 0.000000 0.000000 1.000000 +0.013098 -0.005515 0.000000 0.000000 0.000000 1.000000 +-0.010714 -0.007058 0.000000 0.000000 0.000000 1.000000 +0.010022 -0.007058 0.000000 0.000000 0.000000 1.000000 +-0.007427 -0.008199 0.000000 0.000000 0.000000 1.000000 +0.006735 -0.008199 0.000000 0.000000 0.000000 1.000000 +-0.003960 -0.008907 0.000000 0.000000 0.000000 1.000000 +0.003268 -0.008907 0.000000 0.000000 0.000000 1.000000 +-0.000346 -0.009151 0.000000 0.000000 0.000000 1.000000 +-0.012995 0.108281 0.000000 0.000000 0.000000 1.000000 +0.012322 0.108280 0.000000 0.000000 0.000000 1.000000 +-0.000337 0.109131 0.000000 0.000000 0.000000 1.000000 +-0.025133 0.105805 0.000000 0.000000 0.000000 1.000000 +0.024461 0.105804 0.000000 0.000000 0.000000 1.000000 +-0.036642 0.101813 0.000000 0.000000 0.000000 1.000000 +0.035968 0.101812 0.000000 0.000000 0.000000 1.000000 +-0.047409 0.096416 0.000000 0.000000 0.000000 1.000000 +0.046734 0.096414 0.000000 0.000000 0.000000 1.000000 +-0.057325 0.089725 0.000000 0.000000 0.000000 1.000000 +0.056647 0.089722 0.000000 0.000000 0.000000 1.000000 +-0.066278 0.081850 0.000000 0.000000 0.000000 1.000000 +-0.010382 0.088476 0.000000 0.000000 0.000000 1.000000 +-0.000536 0.089165 0.000000 0.000000 0.000000 1.000000 +0.009413 0.088519 0.000000 0.000000 0.000000 1.000000 +0.065598 0.081846 0.000000 0.000000 0.000000 1.000000 +0.018959 0.086586 0.000000 0.000000 0.000000 1.000000 +-0.019837 0.086518 0.000000 0.000000 0.000000 1.000000 +0.028015 0.083454 0.000000 0.000000 0.000000 1.000000 +-0.028813 0.083380 0.000000 0.000000 0.000000 1.000000 +0.036493 0.079213 0.000000 0.000000 0.000000 1.000000 +-0.037222 0.079147 0.000000 0.000000 0.000000 1.000000 +-0.074157 0.072901 0.000000 0.000000 0.000000 1.000000 +0.073475 0.072898 0.000000 0.000000 0.000000 1.000000 +0.044304 0.073950 0.000000 0.000000 0.000000 1.000000 +-0.044977 0.073908 0.000000 0.000000 0.000000 1.000000 +-0.000978 0.077515 0.000000 0.000000 0.000000 1.000000 +-0.000452 0.077516 0.000000 0.000000 0.000000 1.000000 +-0.000715 0.077517 0.000000 0.000000 0.000000 1.000000 +-0.000188 0.077515 0.000000 0.000000 0.000000 1.000000 +-0.001240 0.077513 0.000000 0.000000 0.000000 1.000000 +0.000076 0.077513 0.000000 0.000000 0.000000 1.000000 +-0.001502 0.077509 0.000000 0.000000 0.000000 1.000000 +0.000339 0.077509 0.000000 0.000000 0.000000 1.000000 +0.000604 0.077505 0.000000 0.000000 0.000000 1.000000 +-0.001763 0.077504 0.000000 0.000000 0.000000 1.000000 +0.000868 0.077499 0.000000 0.000000 0.000000 1.000000 +-0.009719 0.076788 0.000000 0.000000 0.000000 1.000000 +-0.001763 0.077504 0.000000 0.000000 0.000000 1.000000 +0.001132 0.077493 0.000000 0.000000 0.000000 1.000000 +0.001396 0.077486 0.000000 0.000000 0.000000 1.000000 +0.009188 0.076753 0.000000 0.000000 0.000000 1.000000 +-0.017345 0.075064 0.000000 0.000000 0.000000 1.000000 +0.016663 0.075050 0.000000 0.000000 0.000000 1.000000 +-0.024572 0.072402 0.000000 0.000000 0.000000 1.000000 +0.023757 0.072441 0.000000 0.000000 0.000000 1.000000 +0.051360 0.067754 0.000000 0.000000 0.000000 1.000000 +-0.051990 0.067750 0.000000 0.000000 0.000000 1.000000 +-0.080853 0.062990 0.000000 0.000000 0.000000 1.000000 +0.080167 0.062986 0.000000 0.000000 0.000000 1.000000 +0.030402 0.068992 0.000000 0.000000 0.000000 1.000000 +-0.031331 0.068870 0.000000 0.000000 0.000000 1.000000 +0.036534 0.064770 0.000000 0.000000 0.000000 1.000000 +-0.037554 0.064538 0.000000 0.000000 0.000000 1.000000 +0.057573 0.060713 0.000000 0.000000 0.000000 1.000000 +-0.058174 0.060760 0.000000 0.000000 0.000000 1.000000 +0.042087 0.059841 0.000000 0.000000 0.000000 1.000000 +-0.043170 0.059474 0.000000 0.000000 0.000000 1.000000 +-0.086253 0.052226 0.000000 0.000000 0.000000 1.000000 +0.085565 0.052223 0.000000 0.000000 0.000000 1.000000 +-0.063441 0.053025 0.000000 0.000000 0.000000 1.000000 +0.062854 0.052916 0.000000 0.000000 0.000000 1.000000 +0.003670 0.057332 0.000000 0.000000 0.000000 1.000000 +0.046995 0.054269 0.000000 0.000000 0.000000 1.000000 +-0.048111 0.053748 0.000000 0.000000 0.000000 1.000000 +-0.001926 0.057502 0.000000 0.000000 0.000000 1.000000 +-0.007012 0.056977 0.000000 0.000000 0.000000 1.000000 +0.009049 0.056417 0.000000 0.000000 0.000000 1.000000 +-0.011892 0.055830 0.000000 0.000000 0.000000 1.000000 +0.014159 0.054808 0.000000 0.000000 0.000000 1.000000 +-0.016527 0.054103 0.000000 0.000000 0.000000 1.000000 +0.018950 0.052557 0.000000 0.000000 0.000000 1.000000 +0.051194 0.048121 0.000000 0.000000 0.000000 1.000000 +-0.020872 0.051836 0.000000 0.000000 0.000000 1.000000 +-0.052309 0.047428 0.000000 0.000000 0.000000 1.000000 +-0.067703 0.044632 0.000000 0.000000 0.000000 1.000000 +0.067116 0.044450 0.000000 0.000000 0.000000 1.000000 +0.023371 0.049714 0.000000 0.000000 0.000000 1.000000 +-0.090248 0.040721 0.000000 0.000000 0.000000 1.000000 +0.089558 0.040718 0.000000 0.000000 0.000000 1.000000 +-0.024888 0.049072 0.000000 0.000000 0.000000 1.000000 +0.027368 0.046332 0.000000 0.000000 0.000000 1.000000 +-0.028533 0.045853 0.000000 0.000000 0.000000 1.000000 +0.054616 0.041463 0.000000 0.000000 0.000000 1.000000 +-0.055694 0.040583 0.000000 0.000000 0.000000 1.000000 +0.030892 0.042462 0.000000 0.000000 0.000000 1.000000 +-0.031764 0.042219 0.000000 0.000000 0.000000 1.000000 +-0.070874 0.035669 0.000000 0.000000 0.000000 1.000000 +0.070269 0.035405 0.000000 0.000000 0.000000 1.000000 +0.033891 0.038155 0.000000 0.000000 0.000000 1.000000 +-0.034539 0.038212 0.000000 0.000000 0.000000 1.000000 +0.057197 0.034361 0.000000 0.000000 0.000000 1.000000 +-0.092726 0.028585 0.000000 0.000000 0.000000 1.000000 +0.092035 0.028583 0.000000 0.000000 0.000000 1.000000 +-0.058197 0.033282 0.000000 0.000000 0.000000 1.000000 +-0.036819 0.033874 0.000000 0.000000 0.000000 1.000000 +0.036312 0.033463 0.000000 0.000000 0.000000 1.000000 +-0.072865 0.026222 0.000000 0.000000 0.000000 1.000000 +0.072225 0.025868 0.000000 0.000000 0.000000 1.000000 +0.058871 0.026881 0.000000 0.000000 0.000000 1.000000 +-0.038559 0.029246 0.000000 0.000000 0.000000 1.000000 +0.038106 0.028437 0.000000 0.000000 0.000000 1.000000 +-0.059749 0.025595 0.000000 0.000000 0.000000 1.000000 +-0.039720 0.024369 0.000000 0.000000 0.000000 1.000000 +-0.093577 0.015929 0.000000 0.000000 0.000000 1.000000 +0.092885 0.015929 0.000000 0.000000 0.000000 1.000000 +0.039220 0.023129 0.000000 0.000000 0.000000 1.000000 +0.059572 0.019088 0.000000 0.000000 0.000000 1.000000 +-0.073589 0.016380 0.000000 0.000000 0.000000 1.000000 +0.072897 0.015929 0.000000 0.000000 0.000000 1.000000 +-0.060282 0.017589 0.000000 0.000000 0.000000 1.000000 +-0.040258 0.019286 0.000000 0.000000 0.000000 1.000000 +0.039602 0.017589 0.000000 0.000000 0.000000 1.000000 +-0.040275 0.016406 0.000000 0.000000 0.000000 1.000000 +0.059528 0.014874 0.000000 0.000000 0.000000 1.000000 +-0.060144 0.013509 0.000000 0.000000 0.000000 1.000000 +0.039512 0.014887 0.000000 0.000000 0.000000 1.000000 +-0.040091 0.013575 0.000000 0.000000 0.000000 1.000000 +-0.073455 0.011449 0.000000 0.000000 0.000000 1.000000 +-0.093367 0.009601 0.000000 0.000000 0.000000 1.000000 +0.072736 0.011054 0.000000 -0.000000 0.000000 1.000000 +0.092675 0.009604 0.000000 0.000000 0.000000 1.000000 +0.039245 0.012233 0.000000 0.000000 0.000000 1.000000 +0.059197 0.010734 0.000000 0.000000 0.000000 1.000000 +-0.039713 0.010801 0.000000 0.000000 0.000000 1.000000 +-0.059737 0.009502 0.000000 0.000000 0.000000 1.000000 +0.038807 0.009632 0.000000 0.000000 0.000000 1.000000 +-0.072999 0.006604 0.000000 0.000000 0.000000 1.000000 +0.072262 0.006264 0.000000 0.000000 0.000000 1.000000 +-0.039148 0.008090 0.000000 0.000000 0.000000 1.000000 +0.058588 0.006678 0.000000 0.000000 0.000000 1.000000 +0.038203 0.007091 0.000000 0.000000 0.000000 1.000000 +0.092056 0.003409 0.000000 0.000000 0.000000 1.000000 +-0.092747 0.003401 0.000000 0.000000 0.000000 1.000000 +-0.059069 0.005577 0.000000 0.000000 0.000000 1.000000 +-0.038402 0.005450 0.000000 0.000000 0.000000 1.000000 +0.037440 0.004614 0.000000 0.000000 0.000000 1.000000 +0.057711 0.002714 0.000000 0.000000 0.000000 1.000000 +-0.072231 0.001856 0.000000 0.000000 0.000000 1.000000 +0.071483 0.001570 0.000000 0.000000 0.000000 1.000000 +-0.058150 0.001743 0.000000 0.000000 0.000000 1.000000 +-0.037482 0.002886 0.000000 0.000000 0.000000 1.000000 +0.036523 0.002209 0.000000 0.000000 0.000000 1.000000 +0.091043 -0.002646 0.000000 0.000000 0.000000 1.000000 +-0.091731 -0.002660 0.000000 0.000000 0.000000 1.000000 +-0.036396 0.000406 0.000000 0.000000 0.000000 1.000000 +0.056575 -0.001148 0.000000 0.000000 0.000000 1.000000 +0.035459 -0.000119 0.000000 0.000000 0.000000 1.000000 +-0.071162 -0.002784 0.000000 0.000000 0.000000 1.000000 +-0.056989 -0.001992 0.000000 0.000000 0.000000 1.000000 +0.070409 -0.003019 0.000000 0.000000 0.000000 1.000000 +-0.035149 -0.001984 0.000000 0.000000 0.000000 1.000000 +0.034252 -0.002366 0.000000 0.000000 0.000000 1.000000 +0.055192 -0.004897 0.000000 0.000000 0.000000 1.000000 +-0.033750 -0.004276 0.000000 0.000000 0.000000 1.000000 +-0.055594 -0.005619 0.000000 0.000000 0.000000 1.000000 +0.032909 -0.004523 0.000000 0.000000 0.000000 1.000000 +0.089650 -0.008548 0.000000 0.000000 0.000000 1.000000 +-0.090335 -0.008569 0.000000 0.000000 0.000000 1.000000 +-0.069802 -0.007308 0.000000 0.000000 0.000000 1.000000 +0.069053 -0.007492 0.000000 0.000000 0.000000 1.000000 +-0.032205 -0.006464 0.000000 0.000000 0.000000 1.000000 +0.031435 -0.006587 0.000000 0.000000 0.000000 1.000000 +0.053569 -0.008525 0.000000 0.000000 0.000000 1.000000 +-0.053974 -0.009129 0.000000 0.000000 0.000000 1.000000 +-0.030520 -0.008540 0.000000 0.000000 0.000000 1.000000 +0.029836 -0.008551 0.000000 0.000000 0.000000 1.000000 +-0.068163 -0.011704 0.000000 0.000000 0.000000 1.000000 +0.067422 -0.011841 0.000000 0.000000 0.000000 1.000000 +0.051718 -0.012022 0.000000 0.000000 0.000000 1.000000 +-0.028702 -0.010499 0.000000 0.000000 0.000000 1.000000 +0.087893 -0.014287 0.000000 0.000000 0.000000 1.000000 +0.028119 -0.010409 0.000000 0.000000 0.000000 1.000000 +-0.088573 -0.014316 0.000000 0.000000 0.000000 1.000000 +-0.052139 -0.012513 0.000000 0.000000 0.000000 1.000000 +0.028396 -0.010686 0.000000 0.000000 0.000000 1.000000 +-0.028980 -0.010777 0.000000 0.000000 0.000000 1.000000 +0.029163 -0.011453 0.000000 0.000000 0.000000 1.000000 +-0.029748 -0.011545 0.000000 0.000000 0.000000 1.000000 +0.030322 -0.012612 0.000000 0.000000 0.000000 1.000000 +-0.030909 -0.012705 0.000000 0.000000 0.000000 1.000000 +-0.066254 -0.015962 0.000000 0.000000 0.000000 1.000000 +0.065528 -0.016054 0.000000 0.000000 0.000000 1.000000 +0.049648 -0.015378 0.000000 0.000000 0.000000 1.000000 +-0.050097 -0.015763 0.000000 0.000000 0.000000 1.000000 +0.031775 -0.014064 0.000000 0.000000 0.000000 1.000000 +-0.032363 -0.014159 0.000000 0.000000 0.000000 1.000000 +0.033423 -0.015712 0.000000 0.000000 0.000000 1.000000 +-0.034014 -0.015809 0.000000 0.000000 0.000000 1.000000 +0.085786 -0.019851 0.000000 0.000000 0.000000 1.000000 +-0.086460 -0.019888 0.000000 0.000000 0.000000 1.000000 +0.047368 -0.018584 0.000000 0.000000 0.000000 1.000000 +0.035170 -0.017458 0.000000 0.000000 0.000000 1.000000 +-0.047858 -0.018869 0.000000 0.000000 0.000000 1.000000 +-0.035762 -0.017558 0.000000 0.000000 0.000000 1.000000 +-0.064086 -0.020073 0.000000 0.000000 0.000000 1.000000 +0.063380 -0.020122 0.000000 0.000000 0.000000 1.000000 +0.036916 -0.019204 0.000000 0.000000 0.000000 1.000000 +-0.037511 -0.019306 0.000000 0.000000 0.000000 1.000000 +0.044889 -0.021631 0.000000 0.000000 0.000000 1.000000 +-0.045430 -0.021823 0.000000 0.000000 0.000000 1.000000 +0.038564 -0.020852 0.000000 0.000000 0.000000 1.000000 +-0.039161 -0.020956 0.000000 0.000000 0.000000 1.000000 +0.083344 -0.025228 0.000000 0.000000 0.000000 1.000000 +-0.084010 -0.025274 0.000000 0.000000 0.000000 1.000000 +-0.061671 -0.024026 0.000000 0.000000 0.000000 1.000000 +0.060989 -0.024035 0.000000 0.000000 0.000000 1.000000 +0.040017 -0.022305 0.000000 0.000000 0.000000 1.000000 +-0.040616 -0.022410 0.000000 0.000000 0.000000 1.000000 +0.041943 -0.024230 0.000000 0.000000 0.000000 1.000000 +0.042220 -0.024508 0.000000 0.000000 0.000000 1.000000 +-0.042822 -0.024616 0.000000 0.000000 0.000000 1.000000 +-0.042544 -0.024338 0.000000 0.000000 0.000000 1.000000 +-0.041776 -0.023570 0.000000 0.000000 0.000000 1.000000 +0.041176 -0.023463 0.000000 0.000000 0.000000 -1.000000 +0.041943 -0.024230 0.000000 0.000000 0.000000 -1.000000 +0.040017 -0.022305 0.000000 0.000000 0.000000 -1.000000 +-0.059018 -0.027810 0.000000 0.000000 0.000000 1.000000 +0.058365 -0.027783 0.000000 0.000000 0.000000 1.000000 +0.080582 -0.030407 0.000000 0.000000 0.000000 1.000000 +-0.081239 -0.030462 0.000000 0.000000 0.000000 1.000000 +0.055518 -0.031355 0.000000 0.000000 0.000000 1.000000 +-0.056138 -0.031416 0.000000 0.000000 0.000000 1.000000 +0.077515 -0.035376 0.000000 0.000000 0.000000 1.000000 +-0.078161 -0.035441 0.000000 0.000000 0.000000 1.000000 +0.052458 -0.034743 0.000000 0.000000 0.000000 1.000000 +-0.053042 -0.034833 0.000000 0.000000 0.000000 1.000000 +0.052737 -0.035022 0.000000 0.000000 0.000000 1.000000 +-0.053321 -0.035112 0.000000 0.000000 0.000000 1.000000 +0.053508 -0.035793 0.000000 0.000000 0.000000 1.000000 +-0.054093 -0.035883 0.000000 0.000000 0.000000 1.000000 +0.074158 -0.040125 0.000000 0.000000 0.000000 1.000000 +-0.074791 -0.040199 0.000000 0.000000 0.000000 1.000000 +0.054673 -0.036957 0.000000 0.000000 0.000000 1.000000 +-0.055259 -0.037047 0.000000 0.000000 0.000000 1.000000 +0.056133 -0.038417 0.000000 0.000000 0.000000 1.000000 +-0.056721 -0.038507 0.000000 0.000000 0.000000 1.000000 +0.057789 -0.040073 0.000000 0.000000 0.000000 1.000000 +-0.058380 -0.040164 0.000000 0.000000 0.000000 1.000000 +0.059545 -0.041828 0.000000 0.000000 0.000000 1.000000 +0.070525 -0.044641 0.000000 0.000000 0.000000 1.000000 +-0.060137 -0.041919 0.000000 0.000000 0.000000 1.000000 +-0.071144 -0.044724 0.000000 0.000000 0.000000 1.000000 +0.061300 -0.043583 0.000000 0.000000 0.000000 1.000000 +-0.061895 -0.043674 0.000000 0.000000 0.000000 1.000000 +0.062957 -0.045240 0.000000 0.000000 0.000000 1.000000 +-0.063554 -0.045330 0.000000 0.000000 0.000000 1.000000 +0.064417 -0.046700 0.000000 0.000000 0.000000 1.000000 +0.066632 -0.048914 0.000000 0.000000 0.000000 1.000000 +-0.067233 -0.049004 0.000000 0.000000 0.000000 1.000000 +-0.066954 -0.048725 0.000000 0.000000 0.000000 1.000000 +-0.065016 -0.046790 0.000000 0.000000 0.000000 1.000000 +0.065582 -0.047864 0.000000 0.000000 0.000000 -1.000000 +0.066632 -0.048914 0.000000 0.000000 0.000000 -1.000000 +0.064417 -0.046700 0.000000 0.000000 0.000000 -1.000000 +-0.066182 -0.047954 0.000000 0.000000 0.000000 1.000000 +0.066353 -0.048635 0.000000 0.000000 0.000000 1.000000 +0.065582 -0.047864 0.000000 0.000000 0.000000 1.000000 +3 0 1 2 +3 0 3 1 +3 4 5 6 +3 4 7 5 +3 8 4 9 +3 8 7 4 +3 8 10 7 +3 8 11 10 +3 12 13 14 +3 12 15 13 +3 16 17 18 +3 19 17 16 +3 19 20 17 +3 21 20 19 +3 21 22 20 +3 23 22 21 +3 23 24 22 +3 25 24 23 +3 25 26 24 +3 27 26 25 +3 27 28 26 +3 29 28 27 +3 29 30 28 +3 31 30 29 +3 31 32 30 +3 33 32 31 +3 33 34 32 +3 35 34 33 +3 35 36 34 +3 37 36 35 +3 37 38 36 +3 39 38 37 +3 39 40 38 +3 41 40 39 +3 41 42 40 +3 41 43 42 +3 44 43 41 +3 44 45 43 +3 46 45 44 +3 47 45 46 +3 47 48 45 +3 49 48 47 +3 49 50 48 +3 51 50 49 +3 51 52 50 +3 53 52 51 +3 53 54 52 +3 55 54 53 +3 55 56 54 +3 57 56 55 +3 57 58 56 +3 59 58 57 +3 59 60 58 +3 61 60 59 +3 61 62 60 +3 63 62 61 +3 64 65 66 +3 67 65 64 +3 67 68 65 +3 69 68 67 +3 69 70 68 +3 71 70 69 +3 71 72 70 +3 73 72 71 +3 73 74 72 +3 75 76 73 +3 76 77 73 +3 77 74 73 +3 77 78 74 +3 78 79 74 +3 80 79 78 +3 75 81 76 +3 82 79 80 +3 75 83 81 +3 84 79 82 +3 75 85 83 +3 86 85 75 +3 84 87 79 +3 88 87 84 +3 86 89 85 +3 90 91 92 +3 90 93 91 +3 94 93 90 +3 94 95 93 +3 96 95 94 +3 96 97 95 +3 96 98 97 +3 99 98 96 +3 99 100 98 +3 101 99 102 +3 101 100 99 +3 101 103 100 +3 101 104 103 +3 101 105 104 +3 106 105 101 +3 106 107 105 +3 108 107 106 +3 108 109 107 +3 110 87 88 +3 86 111 89 +3 112 111 86 +3 110 113 87 +3 108 114 109 +3 115 114 108 +3 115 116 114 +3 117 116 115 +3 118 113 110 +3 112 119 111 +3 117 120 116 +3 121 120 117 +3 122 119 112 +3 118 123 113 +3 122 124 119 +3 125 123 118 +3 121 126 120 +3 126 127 120 +3 128 129 121 +3 129 126 121 +3 128 130 129 +3 131 127 126 +3 128 132 130 +3 133 127 131 +3 128 134 132 +3 135 127 133 +3 135 136 127 +3 128 137 134 +3 138 137 128 +3 122 139 124 +3 140 123 125 +3 141 136 135 +3 142 139 122 +3 140 143 123 +3 138 144 137 +3 145 136 141 +3 138 146 144 +3 145 147 136 +3 148 146 138 +3 149 147 145 +3 148 150 146 +3 142 151 139 +3 152 143 140 +3 153 147 149 +3 148 154 150 +3 153 155 147 +3 156 151 142 +3 152 157 143 +3 158 154 148 +3 158 159 154 +3 160 155 153 +3 156 161 151 +3 162 157 152 +3 160 163 155 +3 158 164 159 +3 165 163 160 +3 166 164 158 +3 166 167 164 +3 168 161 156 +3 162 169 157 +3 170 163 165 +3 170 171 163 +3 168 172 161 +3 173 169 162 +3 174 167 166 +3 174 175 167 +3 176 171 170 +3 174 177 175 +3 176 178 171 +3 179 177 174 +3 180 178 176 +3 179 181 177 +3 168 182 172 +3 183 182 168 +3 184 169 173 +3 184 185 169 +3 186 178 180 +3 186 187 178 +3 179 188 181 +3 189 188 179 +3 190 187 186 +3 183 191 182 +3 192 185 184 +3 189 193 188 +3 190 194 187 +3 195 194 190 +3 192 196 185 +3 197 191 183 +3 198 193 189 +3 198 199 193 +3 200 194 195 +3 200 201 194 +3 197 202 191 +3 203 196 192 +3 204 199 198 +3 204 205 199 +3 206 201 200 +3 203 207 196 +3 208 202 197 +3 204 209 205 +3 206 210 201 +3 211 210 206 +3 208 212 202 +3 213 209 204 +3 214 207 203 +3 213 215 209 +3 216 210 211 +3 216 217 210 +3 213 218 215 +3 219 218 213 +3 220 217 216 +3 214 221 207 +3 222 212 208 +3 222 223 212 +3 224 221 214 +3 219 225 218 +3 226 217 220 +3 226 227 217 +3 228 225 219 +3 228 229 225 +3 230 227 226 +3 222 231 223 +3 232 221 224 +3 230 233 227 +3 228 234 229 +3 232 235 221 +3 236 233 230 +3 237 231 222 +3 238 234 228 +3 239 233 236 +3 238 240 234 +3 241 233 239 +3 238 242 240 +3 243 233 241 +3 238 244 242 +3 237 245 231 +3 246 235 232 +3 243 247 233 +3 248 244 238 +3 249 247 243 +3 248 250 244 +3 251 247 249 +3 248 252 250 +3 246 253 235 +3 254 245 237 +3 251 255 247 +3 256 255 251 +3 257 252 248 +3 257 258 252 +3 254 259 245 +3 260 253 246 +3 261 255 256 +3 257 262 258 +3 261 263 255 +3 264 262 257 +3 265 263 261 +3 264 266 262 +3 260 267 253 +3 268 259 254 +3 268 269 259 +3 270 267 260 +3 271 263 265 +3 264 272 266 +3 271 273 263 +3 273 274 263 +3 275 276 264 +3 276 277 264 +3 277 272 264 +3 278 279 280 +3 268 281 269 +3 282 267 270 +3 282 283 267 +3 284 281 268 +3 285 283 282 +3 284 286 281 +3 285 287 283 +3 288 286 284 +3 289 287 285 +3 288 290 286 +3 291 287 289 +3 288 292 290 +3 293 287 291 +3 288 294 292 +3 293 295 287 +3 296 294 288 +3 297 295 293 +3 296 298 294 +3 299 295 297 +3 296 300 298 +3 301 295 299 +3 296 302 300 +3 303 295 301 +3 303 304 295 +3 296 305 302 +3 306 305 296 +3 307 304 303 +3 306 308 305 +3 309 304 307 +3 306 310 308 +3 309 311 304 +3 311 312 304 +3 313 314 306 +3 314 315 306 +3 315 310 306 +3 316 317 318 +3 314 319 315 +3 320 312 321