-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
#include <TCollection_AsciiString.hxx>
#include <TDF_Label.hxx>
#include <TDF_Tool.hxx>
+#include <TDataStd_ListIteratorOfListOfExtendedString.hxx>
#include <TopAbs.hxx>
#include <TopoDS_Iterator.hxx>
//=============================================================================
GEOM_Object_i::GEOM_Object_i (PortableServer::POA_ptr thePOA, GEOM::GEOM_Gen_ptr theEngine,
- Handle(GEOM_Object) theImpl) :
+ Handle(::GEOM_Object) theImpl) :
SALOME::GenericObj_i( thePOA ),
GEOM_BaseObject_i( thePOA, theEngine, theImpl ),
_impl( theImpl )
GEOM_Object_i::~GEOM_Object_i()
{
- MESSAGE("GEOM_Object_i::~GEOM_Object_i");
+ //MESSAGE("GEOM_Object_i::~GEOM_Object_i");
}
//=============================================================================
return getMinMaxShapeType( _impl->GetValue(), false );
}
+//================================================================================
+/*!
+ * GetSubShapeName
+ */
+//================================================================================
+
+char* GEOM_Object_i::GetSubShapeName(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( 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
GEOM::ListOfLong_var anIndices = new GEOM::ListOfLong;
if(!_impl->IsMainShape()) {
- Handle(GEOM_Function) aFunction = _impl->GetLastFunction(); //Get Sub-shape function (always the first (and last) one)
+ Handle(::GEOM_Function) aFunction = _impl->GetLastFunction(); //Get Sub-shape function (always the first (and last) one)
if(aFunction.IsNull()) return anIndices._retn();
GEOM_ISubShape ISS(aFunction);
Handle(TColStd_HArray1OfInteger) anArray = ISS.GetIndices();
{
GEOM::GEOM_Object_var obj;
if(!_impl->IsMainShape()) {
- Handle(GEOM_Function) aFunction = _impl->GetFunction(1); //Get Sub-shape function (always the first (and last) one)
+ Handle(::GEOM_Function) aFunction = _impl->GetFunction(1); //Get Sub-shape function (always the first (and last) one)
if(aFunction.IsNull()) return obj._retn();
GEOM_ISubShape ISS(aFunction);
TCollection_AsciiString anEntry;
TDF_Tool::Entry(aLabel, anEntry);
return GEOM::GEOM_Object::_narrow
- ( _engine->GetObject(_impl->GetDocID(), anEntry.ToCString()) );
+ ( _engine->GetObject( anEntry.ToCString()) );
}
return obj._retn();
return !_impl->GetValue().IsNull() && _impl->GetType() != GEOM_MARKER;
}
-bool GEOM_Object_i::IsSame(GEOM::GEOM_Object_ptr other)
+bool GEOM_Object_i::IsSame(GEOM::GEOM_BaseObject_ptr other)
{
- TopoDS_Shape thisShape = _impl->GetValue();
- TopoDS_Shape otherShape;
- if ( !CORBA::is_nil( other ) ) {
- Handle(GEOM_Object) otherObject = Handle(GEOM_Object)::DownCast
- ( GEOM_Engine::GetEngine()->GetObject( other->GetStudyID(), other->GetEntry(), false ));
- if ( !otherObject.IsNull() )
- otherShape = otherObject->GetValue();
+ bool result = false;
+
+ GEOM::GEOM_Object_var shapePtr = GEOM::GEOM_Object::_narrow( other );
+ if ( !CORBA::is_nil( shapePtr ) ) {
+ CORBA::String_var entry = shapePtr->GetEntry();
+ Handle(::GEOM_Object) otherObject = Handle(::GEOM_Object)::DownCast
+ ( GEOM_Engine::GetEngine()->GetObject( entry, false ));
+ if ( !otherObject.IsNull() ) {
+ TopoDS_Shape thisShape = _impl->GetValue();
+ TopoDS_Shape otherShape = otherObject->GetValue();
+ result = !thisShape.IsNull() && !otherShape.IsNull() && thisShape.IsSame( otherShape );
+ }
}
- return thisShape.IsSame( otherShape );
+ return result;
}