From 7ffdc289d0f0be82054de9e57c2e970452bda15f Mon Sep 17 00:00:00 2001 From: Ralph Wessel Date: Fri, 8 Nov 2024 08:49:36 +0000 Subject: [PATCH] Added BaseBridge::HighlightObjects --- .../Connector.xcodeproj/project.pbxproj | 6 +++ .../Browser/Bridge/Base/HighlightModel.cpp | 10 +---- .../Browser/Bridge/Base/HighlightModel.h | 3 -- .../Browser/Bridge/Base/HighlightObjects.cpp | 39 +++++++++++++++++ .../Browser/Bridge/Base/HighlightObjects.h | 42 +++++++++++++++++++ 5 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightObjects.cpp create mode 100644 SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightObjects.h diff --git a/SpeckleConnector/Connector.xcodeproj/project.pbxproj b/SpeckleConnector/Connector.xcodeproj/project.pbxproj index 53b4ff2..f64172b 100644 --- a/SpeckleConnector/Connector.xcodeproj/project.pbxproj +++ b/SpeckleConnector/Connector.xcodeproj/project.pbxproj @@ -32,6 +32,7 @@ 215F08462C9633A800CD343B /* EverythingSendFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 215F08452C9633A800CD343B /* EverythingSendFilter.cpp */; }; 2192460D2CA3469D00CF5703 /* ProjectCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2192460B2CA3469D00CF5703 /* ProjectCollection.cpp */; }; 2199BB552CDA4B1700A4BEEC /* ConnectorProject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2199BB522CDA4B1700A4BEEC /* ConnectorProject.cpp */; }; + 2199BB7E2CDD3FA800A4BEEC /* HighlightObjects.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2199BB7C2CDD3FA800A4BEEC /* HighlightObjects.cpp */; }; 219F30422C769283009834E9 /* ConfigTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 219F30402C769282009834E9 /* ConfigTests.cpp */; }; 21A0FB982CB723240023F24E /* FinishProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21A0FB942CB723240023F24E /* FinishProxy.cpp */; }; 21A79EC92CCDA45C001754E4 /* HighlightModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21A79EC52CCDA45C001754E4 /* HighlightModel.cpp */; }; @@ -322,6 +323,8 @@ 2199BB532CDA4B1700A4BEEC /* ConnectorProject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConnectorProject.h; sourceTree = ""; }; 2199BB5C2CDA93CE00A4BEEC /* ConnectorImagesFix.grc */ = {isa = PBXFileReference; lastKnownFileType = text; name = ConnectorImagesFix.grc; path = RFIX/ConnectorImagesFix.grc; sourceTree = ""; }; 2199BB792CDCEA3900A4BEEC /* SendConversionResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SendConversionResult.h; sourceTree = ""; }; + 2199BB7C2CDD3FA800A4BEEC /* HighlightObjects.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HighlightObjects.cpp; sourceTree = ""; }; + 2199BB7D2CDD3FA800A4BEEC /* HighlightObjects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HighlightObjects.h; sourceTree = ""; }; 219F30352C768F0A009834E9 /* Connector-AC27-Test.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Connector-AC27-Test.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; 219F30402C769282009834E9 /* ConfigTests.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = ConfigTests.cpp; sourceTree = ""; }; 219F30432C7693B6009834E9 /* Connector-AC27-Debug.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = "Connector-AC27-Debug.xctestplan"; sourceTree = SOURCE_ROOT; }; @@ -1058,6 +1061,8 @@ 21B67CAA2C77329800FD64FC /* GetSourceApplicationVersion.h */, 21A79EC52CCDA45C001754E4 /* HighlightModel.cpp */, 21A79EC82CCDA45C001754E4 /* HighlightModel.h */, + 2199BB7C2CDD3FA800A4BEEC /* HighlightObjects.cpp */, + 2199BB7D2CDD3FA800A4BEEC /* HighlightObjects.h */, 21384BC92CD2EE7400D4602B /* OpenUrl.cpp */, 21384BCC2CD2EE7400D4602B /* OpenUrl.h */, 21D0BDD52C935DAE0077E104 /* RemoveModel.cpp */, @@ -1530,6 +1535,7 @@ 21B67CAE2C77329800FD64FC /* GetSourceApplicationVersion.cpp in Sources */, 21A0FB982CB723240023F24E /* FinishProxy.cpp in Sources */, 21B67CC32C77649F00FD64FC /* GetDocumentState.cpp in Sources */, + 2199BB7E2CDD3FA800A4BEEC /* HighlightObjects.cpp in Sources */, 21D0BD602C89BFEA0077E104 /* SendBridge.cpp in Sources */, 21D0BD972C8F13F30077E104 /* GetSendFilters.cpp in Sources */, 21B67CAC2C77329800FD64FC /* BaseBridge.cpp in Sources */, diff --git a/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightModel.cpp b/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightModel.cpp index 39bcefe..b59ef2d 100644 --- a/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightModel.cpp +++ b/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightModel.cpp @@ -43,19 +43,13 @@ void HighlightModel::run(const String& modelCardID) const { std::make_unique(connector()->getLocalString(errorString, modelCardNotFoundID), modelCardID)); return; } - if (auto senderCard = dynamic_cast(modelCard.get())) { auto modelCardSelection = senderCard->getFilter().getElementIDs(); - auto project = connector()->getActiveProject().lock(); - if (!project) { - // TODO: is this OK? should this throw? - return; - } - + if (!project) + return; // TODO: is this OK? should this throw? auto elementDatabase = project->getElementDatabase(); elementDatabase->clearSelection(); elementDatabase->setSelection(modelCardSelection); } - } //HighlightModel::run diff --git a/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightModel.h b/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightModel.h index b593463..cd64302 100644 --- a/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightModel.h +++ b/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightModel.h @@ -3,13 +3,10 @@ #include "Active/Serialise/CargoHold.h" #include "Active/Serialise/Item/Wrapper/ValueWrap.h" -#include "Connector/Interface/Browser/Bridge/Config/Arg/ConnectorConfig.h" #include "Speckle/Interface/Browser/Bridge/BridgeMethod.h" namespace connector::interfac::browser::bridge { - class ConnectorConfig; - ///Argument parameter for a string using StringHold = active::serialise::CargoHold, speckle::utility::String>; ///Argument type for this method diff --git a/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightObjects.cpp b/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightObjects.cpp new file mode 100644 index 0000000..c9cadfb --- /dev/null +++ b/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightObjects.cpp @@ -0,0 +1,39 @@ +#include "Connector/Interface/Browser/Bridge/Base/HighlightObjects.h" + +#include "Connector/Connector.h" +#include "Connector/Environment/ConnectorProject.h" +#include "Speckle/Database/BIMElementDatabase.h" +#include "Speckle/Environment/Project.h" + +using namespace connector::environment; +using namespace connector::interfac::browser::bridge; +using namespace speckle::database; +using namespace speckle::utility; + +/*-------------------------------------------------------------------- + Default constructor + --------------------------------------------------------------------*/ +HighlightObjects::HighlightObjects() : BridgeMethod{"HighlightObjects", [&](const SendArgs& args) { + run(args); +}} {} + + +/*-------------------------------------------------------------------- + Highlight specified objects + @param objectIDs List of object IDs to be highlighted + --------------------------------------------------------------------*/ +void HighlightObjects::run(const StringList& objectIDs) const { + BIMLinkList objectSelection; + for (const auto& text : objectIDs) + if (Guid guid{text}; !guid.empty()) + objectSelection.emplace_back(guid); + if (objectSelection.empty()) + return; + auto project = connector()->getActiveProject().lock(); + auto connectorProject = dynamic_cast(project.get()); + if (!connectorProject) + return; + auto elementDatabase = project->getElementDatabase(); + elementDatabase->clearSelection(); + elementDatabase->setSelection(objectSelection); +} //HighlightObjects::run diff --git a/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightObjects.h b/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightObjects.h new file mode 100644 index 0000000..15493dc --- /dev/null +++ b/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/HighlightObjects.h @@ -0,0 +1,42 @@ +#ifndef CONNECTOR_INTERFACE_BRIDGE_HIGHLIGHT_OBJECTS +#define CONNECTOR_INTERFACE_BRIDGE_HIGHLIGHT_OBJECTS + +#include "Active/Serialise/CargoHold.h" +#include "Active/Serialise/Item/Wrapper/ValueWrap.h" +#include "Active/Serialise/Package/Wrapper/ContainerWrap.h" +#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h" + +namespace connector::interfac::browser::bridge { + + ///List of strings + using StringList = std::vector; + ///Argument parameter for a string + using StringListHold = active::serialise::CargoHold, StringList>; + ///Argument type for this method + using SendArgs = speckle::interfac::browser::bridge::JSArgType; + + /*! + JS Function class to highlight objects using passed application IDs + */ + class HighlightObjects : public speckle::interfac::browser::bridge::BridgeMethod { + public: + + // MARK: - Constructors + + /*! + Constructor + */ + HighlightObjects(); + + // MARK: - Functions (const) + + /*! + Highlight specified objects + @param objectIDs List of object IDs to be highlighted + */ + void run(const StringList& objectIDs) const; + }; + +} + +#endif //CONNECTOR_INTERFACE_BRIDGE_HIGHLIGHT_OBJECTS