diff --git a/modules/softwareintegration/network/softwareconnection.cpp b/modules/softwareintegration/network/softwareconnection.cpp index 2056ece211..0418cbaf8e 100644 --- a/modules/softwareintegration/network/softwareconnection.cpp +++ b/modules/softwareintegration/network/softwareconnection.cpp @@ -125,6 +125,8 @@ namespace openspace { return Message(MessageType::Opacity, messageBuffer); else if( type == "UPSI") return Message(MessageType::Size, messageBuffer); + else if (type == "TOVI") + return Message(MessageType::Visibility, messageBuffer); else if (type == "DISC") return Message(MessageType::Disconnection, messageBuffer); else { diff --git a/modules/softwareintegration/network/softwareconnection.h b/modules/softwareintegration/network/softwareconnection.h index 2b267d57fe..0a12f5cc90 100644 --- a/modules/softwareintegration/network/softwareconnection.h +++ b/modules/softwareintegration/network/softwareconnection.h @@ -45,6 +45,7 @@ public: Color, Opacity, Size, + Visibility, Disconnection }; diff --git a/modules/softwareintegration/rendering/renderablepointscloud.cpp b/modules/softwareintegration/rendering/renderablepointscloud.cpp index 12be64c4bd..10e379cdab 100644 --- a/modules/softwareintegration/rendering/renderablepointscloud.cpp +++ b/modules/softwareintegration/rendering/renderablepointscloud.cpp @@ -103,6 +103,12 @@ namespace openspace { new DoubleVerifier, Optional::Yes, SizeInfo.description + }, + { + ToggleVisibilityInfo.identifier, + new BoolVerifier, + Optional::Yes, + ToggleVisibilityInfo.description } } }; diff --git a/modules/softwareintegration/softwareintegrationmodule.cpp b/modules/softwareintegration/softwareintegrationmodule.cpp index 84752701d8..c0b3da610e 100644 --- a/modules/softwareintegration/softwareintegrationmodule.cpp +++ b/modules/softwareintegration/softwareintegrationmodule.cpp @@ -157,6 +157,7 @@ namespace openspace { properties::Property* colorProperty = myRenderable->property("Color"); properties::Property* opacityProperty = myRenderable->property("Opacity"); properties::Property* sizeProperty = myRenderable->property("Size"); + properties::Property* visibilityProperty = myRenderable->property("ToggleVisibility"); // Update color of renderable auto updateColor = [colorProperty, identifier, peer]() { @@ -211,6 +212,30 @@ namespace openspace { peer->connection.sendMessage(message); }; sizeProperty->onChange(updateSize); + + // Toggle visibility of renderable + auto toggleVisibility = [visibilityProperty, identifier, peer]() { + std::string lengthOfIdentifier = std::to_string(identifier.length()); + std::string messageType = "TOVI"; + + std::string propertyValue; + if (visibilityProperty->getStringValue() == "false") + propertyValue = "F"; + else + propertyValue = "T"; + + std::string subject = lengthOfIdentifier + identifier + propertyValue; + // We don't need a lengthOfValue here because it will always be 1 character + + // Format length of subject to always be 4 digits + std::ostringstream os; + os << std::setfill('0') << std::setw(4) << subject.length(); + std::string lengthOfSubject = os.str(); + + std::string message = messageType + lengthOfSubject + subject; + peer->connection.sendMessage(message); + }; + visibilityProperty->onChange(toggleVisibility); } void SoftwareIntegrationModule::handlePeerMessage(PeerMessage peerMessage) { @@ -320,6 +345,20 @@ namespace openspace { sizeProperty->set(size); break; } + case SoftwareConnection::MessageType::Visibility: { + std::string identifier = readIdentifier(message); + std::string visibility; + visibility.push_back(message[messageOffset]); + + // Update size of renderable + const Renderable* myrenderable = renderable(identifier); + properties::Property* visibilityProperty = myrenderable->property("ToggleVisibility"); + if(visibility == "F") + visibilityProperty->set(false); + else + visibilityProperty->set(true); + break; + } case SoftwareConnection::MessageType::Disconnection: { disconnect(*peer); break;