Salome HOME
Fixed the problem of imported color of higher level STEP shape.
authormpv <mpv@opencascade.com>
Mon, 20 Jun 2022 10:03:24 +0000 (13:03 +0300)
committermpv <mpv@opencascade.com>
Mon, 20 Jun 2022 10:03:24 +0000 (13:03 +0300)
src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp
src/Model/Model_ResultBody.cpp
src/Model/Model_ResultBody.h
src/ModelAPI/ModelAPI_ResultBody.h

index 91c6c188a00d5b18321ebabc99022ef2a647b93e..e73ccfbe3070d78754b669ca7b8234a6e55029ab 100644 (file)
@@ -214,7 +214,7 @@ void ExchangePlugin_ImportFeature::importFile(const std::string& theFileName)
     setColorGroups(aResult);
   }
 
-  // create Materiel group
+  // create Material group
   if (anMaterialsGroupSelected){
     setMaterielGroup(aResult,theMaterialShape);
   }
@@ -628,6 +628,15 @@ void ExchangePlugin_ImportFeatureBase::loadNamingDS(
   //load result
   theResultBody->store(theGeomShape);
 
+  // to store color of higher-level shape
+  std::wstring aName = theResultBody->findShapeName(theGeomShape);
+  if (!aName.empty())
+  {
+    std::vector<int> aColor = theResultBody->findShapeColor(aName);
+    if (!aColor.empty())
+      ModelAPI_Tools::setColor(theResultBody, aColor);
+  }
+
   std::string aNameMS = "Shape";
   theResultBody->loadFirstLevel(theGeomShape, aNameMS);
 }
index 5cbc3e4196962fee7650c787156d3b8b34af4af7..96f2aad2ef2ab280d2f9105894f2b92ebf7e8430 100644 (file)
@@ -281,6 +281,15 @@ std::wstring Model_ResultBody::findShapeName(std::shared_ptr<GeomAPI_Shape> theS
   return  L"material not found" ;
 }
 
+const std::vector<int>& Model_ResultBody::findShapeColor(const std::wstring& theShapeName)
+{
+  std::map<std::wstring, std::vector<int> >::iterator aColor = myColorsShape.find(theShapeName);
+  if (aColor != myColorsShape.end())
+    return aColor->second;
+  static std::vector<int> anEmptyVector;
+  return anEmptyVector;
+}
+
 void Model_ResultBody::setShapeName(
                 std::map< std::wstring, std::shared_ptr<GeomAPI_Shape>>& theShapeName,
                 std::map< std::wstring, std::vector<int>>& theColorsShape)
index 467eaebec347ee3b3eddced231d2f5b0e776b248..b6b88af233c7d8c1084d522e448a9c30fefb865e 100644 (file)
@@ -119,6 +119,9 @@ public:
   /// sets the texture file
   MODEL_EXPORT virtual bool hasTexture() override;
 
+  /// Find the imported color by the construction name of a shape.
+  /// Returns empty vector if not found.
+  MODEL_EXPORT virtual const std::vector<int>& findShapeColor(const std::wstring& theShapeName);
 
 protected:
   /// Makes a body on the given feature
@@ -154,7 +157,7 @@ protected:
                               std::map< std::wstring,
                               std::vector<int>>& theColorsShape) override;
 
-  /// find the name of shapp read in step file
+  /// Find the name of shape read in step file
   std::wstring findShapeName(std::shared_ptr<GeomAPI_Shape> theShape) override;
 
   /// Clear the map of name and color read shape in step file
@@ -163,7 +166,7 @@ protected:
   /// map with the name read in step file and shape
   std::map< std::wstring, std::shared_ptr<GeomAPI_Shape> > myNamesShape;
 
-  /// map with the name contruct and color read
+  /// map from the construction name to the imported color
   std::map< std::wstring, std::vector<int>> myColorsShape;
 
 };
index f0263d41f79fac693562227d2943fb6ad4d6eed7..b6c0e126ff09417b20dcc277cd9cdd48ddc16af3 100644 (file)
@@ -194,11 +194,11 @@ public:
 
   /// Add shape Name for read shape in step file
   MODELAPI_EXPORT virtual std::wstring addShapeName
-                              (std::shared_ptr<GeomAPI_Shape>,const std::wstring& theName) = 0;
+                              (std::shared_ptr<GeomAPI_Shape>, const std::wstring& theName) = 0;
 
   /// Add color for shape Name read shape in step file
   MODELAPI_EXPORT virtual void addShapeColor
-                              (const std::wstring& theName,std::vector<int>& theColor) = 0;
+                              (const std::wstring& theName, std::vector<int>& theColor) = 0;
 
   /// Set the map of name and color read shape in step file
   MODELAPI_EXPORT virtual void setShapeName
@@ -208,9 +208,14 @@ public:
   /// Clear the map of name and color read shape in step file
   MODELAPI_EXPORT virtual void clearShapeNameAndColor() = 0;
 
-  /// find the name of shapp read in step file
+  /// Find the name of shape read in step file
   MODELAPI_EXPORT virtual std::wstring findShapeName(std::shared_ptr<GeomAPI_Shape> theShape) = 0;
 
+  /// Find the imported color by the construction name of a shape.
+  /// Returns empty vector if not found.
+  MODELAPI_EXPORT virtual const std::vector<int>& findShapeColor(
+    const std::wstring& theShapeName) = 0;
+
 
 protected:
   /// Default constructor accessible only from Model_Objects