diff --git a/ConnectorArchicad/AddOn/Sources/AddOn/Commands/GetElementTypes.cpp b/ConnectorArchicad/AddOn/Sources/AddOn/Commands/GetElementTypes.cpp index 377cccbd35..74ddda0f5f 100644 --- a/ConnectorArchicad/AddOn/Sources/AddOn/Commands/GetElementTypes.cpp +++ b/ConnectorArchicad/AddOn/Sources/AddOn/Commands/GetElementTypes.cpp @@ -27,8 +27,12 @@ GS::ObjectState GetElementTypes::Execute (const GS::ObjectState& parameters, GS: for (const GS::UniString& id : ids) { API_Guid guid = APIGuidFromString (id.ToCStr ()); API_ElemType elementType = Utility::GetElementType (guid); - GS::UniString elemType = elementNames.Get (elementType); - GS::ObjectState listElem{ElementBase::ApplicationId, id, ElementBase::ElementType, elemType}; + + GS::UniString elementTypeName; + if (NoError != GetElementTypeName (elementType, elementTypeName)) + continue; + + GS::ObjectState listElem{ElementBase::ApplicationId, id, ElementBase::ElementType, elementTypeName}; listAdder (listElem); } diff --git a/ConnectorArchicad/AddOn/Sources/AddOn/Commands/GetSubElementInfo.cpp b/ConnectorArchicad/AddOn/Sources/AddOn/Commands/GetSubElementInfo.cpp index 923055f18a..87383d8b16 100644 --- a/ConnectorArchicad/AddOn/Sources/AddOn/Commands/GetSubElementInfo.cpp +++ b/ConnectorArchicad/AddOn/Sources/AddOn/Commands/GetSubElementInfo.cpp @@ -39,11 +39,14 @@ GS::ObjectState GetSubElementInfo::Execute (const GS::ObjectState& parameters, G GS::UniString guid = APIGuidToString (currentGuid); API_ElemType elementType = Utility::GetElementType (currentGuid); - GS::UniString elemType = elementNames.Get (elementType); + + GS::UniString elementTypeName; + if (NoError != GetElementTypeName (elementType, elementTypeName)) + continue; GS::ObjectState subelementModel; subelementModel.Add (ElementBase::ApplicationId, guid); - subelementModel.Add (ElementBase::ElementType, elemType); + subelementModel.Add (ElementBase::ElementType, elementTypeName); listAdder (subelementModel); } } diff --git a/ConnectorArchicad/AddOn/Sources/AddOn/TypeNameTables.cpp b/ConnectorArchicad/AddOn/Sources/AddOn/TypeNameTables.cpp index 6b5a0f6a14..63652d462c 100644 --- a/ConnectorArchicad/AddOn/Sources/AddOn/TypeNameTables.cpp +++ b/ConnectorArchicad/AddOn/Sources/AddOn/TypeNameTables.cpp @@ -26,6 +26,27 @@ const GS::HashTable elementNames }; +GSErrCode GetElementTypeName (const API_ElemType& elementType, GS::UniString& elementTypeName) +{ + // check typeID and variationID first + if (elementNames.ContainsKey(elementType)) { + elementTypeName = elementNames.Get (elementType); + return NoError; + } + + // check only typeID + for (auto elementNameIt : elementNames) + { + if (elementNameIt.key->typeID == elementType.typeID) { + elementTypeName = *(elementNameIt.value); + return NoError; + } + } + + return Error; +} + + const GS::HashTable structureTypeNames { { API_BasicStructure, "Basic"}, diff --git a/ConnectorArchicad/AddOn/Sources/AddOn/TypeNameTables.hpp b/ConnectorArchicad/AddOn/Sources/AddOn/TypeNameTables.hpp index 6cb5b42930..b478c0ca60 100644 --- a/ConnectorArchicad/AddOn/Sources/AddOn/TypeNameTables.hpp +++ b/ConnectorArchicad/AddOn/Sources/AddOn/TypeNameTables.hpp @@ -7,6 +7,8 @@ #include "Utility.hpp" extern const GS::HashTable elementNames; +GSErrCode GetElementTypeName (const API_ElemType& elementType, GS::UniString& elementTypeName); + extern const GS::HashTable structureTypeNames; extern const GS::HashTable wallTypeNames;