+HYDROData_SequenceOfObjects HYDROData_Object::GetGroups() const
+{
+ return GetReferenceObjects( DataTag_EdgesGroup );
+}
+
+Handle(HYDROData_ShapesGroup) HYDROData_Object::GetGroup( const int theGroupId ) const
+{
+ Handle(HYDROData_ShapesGroup) aResGroup;
+
+ HYDROData_SequenceOfObjects aGroups = GetGroups();
+ if ( theGroupId < 0 || theGroupId >= aGroups.Length() )
+ return aResGroup;
+
+ aResGroup = Handle(HYDROData_ShapesGroup)::DownCast( aGroups.Value( theGroupId + 1 ) );
+
+ return aResGroup;
+}
+
+int HYDROData_Object::GetGroupId( const Handle(HYDROData_ShapesGroup)& theGroup ) const
+{
+ int aRes = -1;
+
+ HYDROData_SequenceOfObjects aGroups = GetGroups();
+ for ( int i = 1, n = aGroups.Length(); i <= n; ++i )
+ {
+ Handle(HYDROData_ShapesGroup) aGroup =
+ Handle(HYDROData_ShapesGroup)::DownCast( aGroups.Value( i ) );
+ if ( IsEqual( theGroup, aGroup ) )
+ {
+ aRes = i - 1;
+ break;
+ }
+ }
+
+ return aRes;
+}
+
+bool HYDROData_Object::SetAltitudeObject(
+ const Handle(HYDROData_IAltitudeObject)& theAltitude )
+{
+ if ( theAltitude.IsNull() )
+ return false;
+
+ Handle(HYDROData_IAltitudeObject) aPrevAltitude = GetAltitudeObject();
+ if ( IsEqual( aPrevAltitude, theAltitude ) )
+ return true;
+
+ SetReferenceObject( theAltitude, DataTag_AltitudeObject );
+
+ // #636: In the case of the altitude object change the geometry of the main object is not changed,
+ // to the object should not be marked as updated
+ //SetToUpdate( true );
+
+ return true;
+}
+
+Handle(HYDROData_IAltitudeObject) HYDROData_Object::GetAltitudeObject() const
+{
+ return Handle(HYDROData_IAltitudeObject)::DownCast(
+ GetReferenceObject( DataTag_AltitudeObject ) );
+}
+
+void HYDROData_Object::RemoveAltitudeObject()
+{
+ Handle(HYDROData_IAltitudeObject) aPrevAltitude = GetAltitudeObject();
+ if ( aPrevAltitude.IsNull() )
+ return;
+
+ ClearReferenceObjects( DataTag_AltitudeObject );
+
+ // #636: In the case of the altitude object change the geometry of the main object is not changed,
+ // to the object should not be marked as updated
+ //SetToUpdate( true );
+}
+
+void HYDROData_Object::SetFillingColor( const QColor& theColor )
+{
+ SetColor( theColor, DataTag_FillingColor );
+}
+
+QColor HYDROData_Object::GetFillingColor() const
+{
+ return GetColor( DefaultFillingColor(), DataTag_FillingColor );
+}
+
+void HYDROData_Object::SetBorderColor( const QColor& theColor )
+{
+ SetColor( theColor, DataTag_BorderColor );
+}
+
+QColor HYDROData_Object::GetBorderColor() const
+{
+ return GetColor( DefaultBorderColor(), DataTag_BorderColor );
+}
+
+QColor HYDROData_Object::DefaultFillingColor() const
+{
+ return QColor( Qt::yellow );
+}
+
+QColor HYDROData_Object::DefaultBorderColor() const
+{
+ return QColor( Qt::transparent );
+}
+
+QStringList HYDROData_Object::dumpObjectCreation( MapOfTreatedObjects& theTreatedObjects ) const
+{
+ QStringList aResList = HYDROData_Entity::dumpObjectCreation( theTreatedObjects );
+ if ( aResList.isEmpty() )
+ return aResList; //Object was not created
+
+ QStringList aColorsDef;
+
+ QColor aFillingColor = GetFillingColor();
+ setPythonObjectColor( aColorsDef, aFillingColor, DefaultFillingColor(), "SetFillingColor" );
+
+ QColor aBorderColor = GetBorderColor();
+ setPythonObjectColor( aColorsDef, aBorderColor, DefaultBorderColor(), "SetBorderColor" );
+
+ if ( !aColorsDef.isEmpty() )
+ {
+ aResList << aColorsDef;
+ aResList << QString( "" );
+ }
+
+ return aResList;
+}
+
+ObjectKind HYDROData_Object::getAltitudeObjectType() const
+{
+ return KIND_UNKNOWN;
+}
+
+Handle(HYDROData_IAltitudeObject) HYDROData_Object::getChildAltitudeObject() const
+{
+ Handle(HYDROData_IAltitudeObject) anObject;
+
+ TDF_Label aLabel = myLab.FindChild( DataTag_ChildAltitudeObject, false );
+ if ( !aLabel.IsNull() )
+ {
+ TDF_Label aChildLabel = aLabel.FindChild( 0, false );
+ if ( !aChildLabel.IsNull() )
+ {
+ anObject = Handle(HYDROData_IAltitudeObject)::DownCast(
+ HYDROData_Iterator::Object( aChildLabel ) );
+ }
+ }
+
+ return anObject;
+}
+
+void HYDROData_Object::checkAndSetAltitudeObject()
+{
+ Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
+
+ ObjectKind anAltitudeObjectType = getAltitudeObjectType();
+ //DEBTRACE("HYDROData_Object::checkAndSetAltitudeObject anAltitudeObjectType="<< anAltitudeObjectType);
+ if ( anAltitudeObjectType == KIND_UNKNOWN )
+ return; // No need to create altitude object
+
+ TDF_Label aLabel = myLab.FindChild( DataTag_ChildAltitudeObject, false );
+ if ( !aLabel.IsNull() )
+ return;
+
+ TDF_Label aChildLabel = myLab.FindChild( DataTag_ChildAltitudeObject ).FindChild( 0 );
+
+ Handle(HYDROData_IAltitudeObject) anAltitudeObject =
+ Handle(HYDROData_IAltitudeObject)::DownCast(
+ HYDROData_Iterator::CreateObject( aChildLabel, anAltitudeObjectType ) );
+
+ QString anAltitudePref = GetName() + "_Altitude";
+ //DEBTRACE("anAltitudePref " << anAltitudePref.toStdString());
+ QString anAltitudeName = HYDROData_Tool::GenerateObjectName( aDocument, anAltitudePref );
+ anAltitudeObject->SetName( anAltitudeName );
+
+ SetAltitudeObject( anAltitudeObject );
+}
+
+Handle(HYDROData_ShapesGroup) HYDROData_Object::createGroupObject()
+{
+ TDF_Label aNewLab = myLab.FindChild( DataTag_EdgesGroup ).NewChild();
+
+ Handle(HYDROData_ShapesGroup) aNewGroup =
+ Handle(HYDROData_ShapesGroup)::DownCast( HYDROData_Iterator::CreateObject( aNewLab, KIND_SHAPES_GROUP ) );
+ AddReferenceObject( aNewGroup, DataTag_EdgesGroup );
+
+ return aNewGroup;
+}
+
+void HYDROData_Object::RemoveGroupObjects()
+{
+ TDF_Label aLabel = myLab.FindChild( DataTag_EdgesGroup, false );
+ if ( !aLabel.IsNull() )
+ aLabel.ForgetAllAttributes();
+}
+
+void HYDROData_Object::RemoveTopShape()
+{
+ HYDROData_Entity::SetShape( DataTag_TopShape, TopoDS_Shape() );
+}
+
+void HYDROData_Object::RemoveShape3D()
+{
+ HYDROData_Entity::SetShape( DataTag_Shape3D, TopoDS_Shape() );
+}
+
+bool HYDROData_Object::IsSubmersible() const
+{
+ Handle(TDataStd_Integer) aSubMersibleAttr;
+
+ bool isSubmersible = true; //default
+ if( myLab.FindAttribute(TDataStd_Integer::GetID(), aSubMersibleAttr ) )
+ {
+ int aValue = aSubMersibleAttr->Get();
+ isSubmersible = ( aValue != 0 );
+ }
+ return isSubmersible;
+}
+
+void HYDROData_Object::SetIsSubmersible( bool isSubmersible ) const
+{
+ TDataStd_Integer::Set( myLab, isSubmersible ? 1 : 0 );
+}
+
+void HYDROData_Object::GetBoundaries( QList<TopoDS_Shape>& theBoundShapes,
+ QStringList& theBoundNames ) const
+{
+ HYDROData_SequenceOfObjects aGroups = GetGroups();
+ HYDROData_SequenceOfObjects::Iterator anIter( aGroups );
+ for ( ; anIter.More(); anIter.Next() )
+ {
+ Handle(HYDROData_ShapesGroup) aGroup =
+ Handle(HYDROData_ShapesGroup)::DownCast( anIter.Value() );
+ if( aGroup.IsNull() )
+ continue;
+
+ QString aName = aGroup->GetName();
+ TopTools_SequenceOfShape aShapes;
+ aGroup->GetShapes( aShapes );
+ for( int i=1, n=aShapes.Length(); i<=n; i++ )
+ {
+ theBoundShapes.append( aShapes( i ) );
+ theBoundNames.append( aName );
+ }
+ }
+}