]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
+ string GetSubName(in long subID);
authoreap <eap@opencascade.com>
Fri, 12 Dec 2014 11:19:02 +0000 (14:19 +0300)
committermpa <mpa@opencascade.com>
Fri, 12 Dec 2014 13:43:38 +0000 (16:43 +0300)
idl/GEOM_Gen.idl
src/GEOM_I/GEOM_Object_i.cc
src/GEOM_I/GEOM_Object_i.hh

index 83faa46bb4cdf7783fe6d5a471be272331de08c6..cf576c3e940ec727010aa19e2bbad7f8d698d6c5 100644 (file)
@@ -382,6 +382,17 @@ module GEOM
      */
     shape_type GetMaxShapeType();
 
+    /*!
+     * \brief Returns a name of a sub-shape if the sub-shape is published in the study
+     *  \param subID - sub-shape ID
+     *  \return string - the found name or an empty string if the sub-shape does not
+     *          exits or is not published
+     *
+     * \note Only sub-shapes directly retirieved (using e.g. ExtractSubShapes() or
+     *       via group creation) can be found.
+     */
+    string GetSubName(in long subID);
+
     /*!
      *  \brief Set color of the object.
      *
index 54e5c458d28ab550dd224dbd783b89e8cd16ce22..1defacdf59bba0a4842538bee8ef8cede239f533 100644 (file)
@@ -36,6 +36,7 @@
 #include <TCollection_AsciiString.hxx>
 #include <TDF_Label.hxx>
 #include <TDF_Tool.hxx>
+#include <TDataStd_ListIteratorOfListOfExtendedString.hxx>
 #include <TopAbs.hxx>
 #include <TopoDS_Iterator.hxx>
 
@@ -158,6 +159,47 @@ GEOM::shape_type GEOM_Object_i::GetMaxShapeType()
   return getMinMaxShapeType( _impl->GetValue(), false );
 }
 
+//================================================================================
+/*!
+ * GetSubName
+ */
+//================================================================================
+
+char* GEOM_Object_i::GetSubName(CORBA::Long subID)
+{
+  CORBA::String_var name("");
+
+  Handle(GEOM_Function) aMainFun = _impl->GetLastFunction();
+  if ( aMainFun.IsNull() ) return name._retn();
+
+  const TDataStd_ListOfExtendedString& aListEntries = aMainFun->GetSubShapeReferences();
+  TDataStd_ListIteratorOfListOfExtendedString anIt( aListEntries );
+  for (; anIt.More(); anIt.Next())
+  {
+    TCollection_AsciiString anEntry = anIt.Value();
+    Handle(GEOM_BaseObject) anObj =
+      GEOM_Engine::GetEngine()->GetObject( _impl->GetDocID(), anEntry.ToCString(), false );
+    if ( anObj.IsNull() ) continue;
+
+    TCollection_AsciiString aSubName = anObj->GetName();
+    if ( aSubName.IsEmpty() ) continue;
+
+    Handle(GEOM_Function) aFun = anObj->GetLastFunction();
+    if ( aFun.IsNull() ) continue;
+  
+    GEOM_ISubShape ISS( aFun );
+    Handle(TColStd_HArray1OfInteger) subIDs = ISS.GetIndices();
+    if ( subIDs.IsNull() || subIDs->Length() != 1 ) continue;
+
+    if ( subIDs->Value( subIDs->Lower() ) == subID )
+    {
+      name = aSubName.ToCString();
+      break;
+    }
+  }
+  return name._retn();
+}
+
 //=============================================================================
 /*!
  *  SetColor
index da7f035edec011d7aefcd2b5efe1dd2e95464aa2..3aee7f0f4bd33aedd668ca9c1ea48b50e771654b 100644 (file)
@@ -47,6 +47,8 @@ class GEOM_I_EXPORT GEOM_Object_i : public virtual POA_GEOM::GEOM_Object, public
 
   virtual GEOM::shape_type GetMaxShapeType();
 
+  virtual char* GetSubName(CORBA::Long subID);
+
   virtual void SetColor(const SALOMEDS::Color& theColor);
 
   virtual SALOMEDS::Color GetColor();