#include <TopTools_ListOfShape.hxx>
#include <TopTools_ListIteratorOfListOfShape.hxx>
-
+//#define DEB_CALCULATION 1
+#ifdef DEB_CALCULATION
+#include <BRepTools.hxx>
+#include <TopLoc_Location.hxx>
+#endif
#define CALCULATION_REGIONS_PREF GetName() + "_Reg"
#define CALCULATION_ZONES_PREF GetName() + "_Zone"
#define CALCULATION_GROUPS_PREF GetName() + "_"
-#define PYTHON_CALCULATION_ID "KIND_CALCULATION"
-
#define EXPORT_NAME "HYDRO_" + GetName()
IMPLEMENT_STANDARD_HANDLE(HYDROData_CalculationCase, HYDROData_Entity)
QStringList HYDROData_CalculationCase::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const
{
- QStringList aResList;
+ QStringList aResList = dumpObjectCreation( theTreatedObjects );
- Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
- if ( aDocument.IsNull() )
- return aResList;
-
- QString aDocName = aDocument->GetDocPyName();
- QString aCalculName = GetName();
-
- aResList << QString( "%1 = %2.CreateObject( %3 );" )
- .arg( aCalculName ).arg( aDocName ).arg( PYTHON_CALCULATION_ID );
- aResList << QString( "%1.SetName( \"%2\" );" )
- .arg( aCalculName ).arg( aCalculName );
- aResList << QString( "" );
+ QString aCalculName = GetObjPyName();
HYDROData_SequenceOfObjects aGeomObjects = GetGeometryObjects();
HYDROData_SequenceOfObjects::Iterator anIter( aGeomObjects );
{
Handle(HYDROData_Object) aRefGeomObj =
Handle(HYDROData_Object)::DownCast( anIter.Value() );
- if ( !aRefGeomObj.IsNull() )
- setPythonReferenceObject( theTreatedObjects, aResList, aRefGeomObj, "AddGeometryObject" );
+ setPythonReferenceObject( theTreatedObjects, aResList, aRefGeomObj, "AddGeometryObject" );
}
aResList << QString( "" );
- aResList << QString( "%1.SplitGeometryObjects();" ).arg( aCalculName );
+ QString aGroupName = HYDROData_Tool::GenerateNameForPython( theTreatedObjects, "case_geom_group" );
+
+ HYDROData_SequenceOfObjects aGeomGroups = GetGeometryGroups();
+ anIter.Init( aGeomGroups );
+ for ( ; anIter.More(); anIter.Next() )
+ {
+ Handle(HYDROData_ShapesGroup) aGeomGroup =
+ Handle(HYDROData_ShapesGroup)::DownCast( anIter.Value() );
+ if ( aGeomGroup.IsNull() )
+ continue;
+
+ Handle(HYDROData_Object) aFatherGeom =
+ Handle(HYDROData_Object)::DownCast( aGeomGroup->GetFatherObject() );
+ if ( aFatherGeom.IsNull() )
+ continue;
+
+ int aGroupId = aFatherGeom->GetGroupId( aGeomGroup );
+ aResList << QString( "%1 = %2.GetGroup( %3 );" )
+ .arg( aGroupName ).arg( aFatherGeom->GetObjPyName() ).arg( aGroupId );
+
+ aResList << QString( "%1.AddGeometryGroup( %2 );" ).arg( aCalculName ).arg( aGroupName );
+ }
+ aResList << QString( "" );
+
+ Handle(HYDROData_PolylineXY) aBoundaryPolyline = GetBoundaryPolyline();
+ setPythonReferenceObject( theTreatedObjects, aResList, aBoundaryPolyline, "SetBoundaryPolyline" );
+ aResList << QString( "" );
+
+ aResList << QString( "%1.Update();" ).arg( aCalculName );
aResList << QString( "" );
// Now we restore the regions and zones order
continue;
QString aRegionName = aRegion->GetName();
- // TODO
+
+ HYDROData_SequenceOfObjects aZones = aRegion->GetZones();
+ HYDROData_SequenceOfObjects::Iterator aZonesIter( aZones );
+ for ( ; aZonesIter.More(); aZonesIter.Next() )
+ {
+ Handle(HYDROData_Zone) aRegZone =
+ Handle(HYDROData_Zone)::DownCast( aZonesIter.Value() );
+ if ( aRegZone.IsNull() )
+ continue;
+
+ // TODO
+ }
}
+ aResList << QString( "" );
return aResList;
}
BRepTopAdaptor_FClass2d aClassifier( aZoneFace, Precision::Confusion() );
TopAbs_State State = aClassifier.Perform( gp_Pnt2d(thePoint), Standard_False );
if (State == TopAbs_OUT)
- aRes = POINT_OUT;
+ aRes = POINT_OUT;
else if(State == TopAbs_IN)
aRes = POINT_IN;
else if(State == TopAbs_ON)
- aRes = POINT_ON;
+ aRes = POINT_ON;
return aRes;
}
{
// Sew faces
BRepBuilderAPI_Sewing aSewing( Precision::Confusion() * 10.0 );
- aSewing.SetNonManifoldMode( Standard_True );
-
+ aSewing.SetNonManifoldMode( Standard_False );
+#ifdef DEB_CALCULATION
+ TCollection_AsciiString aNam("Sh_");
+ int i=1;
+#endif
TopTools_ListIteratorOfListOfShape aFaceIter( theFaces );
for ( ; aFaceIter.More(); aFaceIter.Next() )
{
if ( aShape.ShapeType() == TopAbs_FACE )
{
aSewing.Add( aShape );
+#ifdef DEB_CALCULATION
+ TCollection_AsciiString aName = aNam + ++i + ".brep";
+ BRepTools::Write(aShape ,aName.ToCString());
+#endif
}
else
{
+#ifdef DEB_CALCULATION
+ int j = 1;
+#endif
TopExp_Explorer anExp( aShape, TopAbs_FACE );
- for ( ; anExp.More(); anExp.Next() )
+ for (; anExp.More(); anExp.Next() ) {
aSewing.Add( anExp.Current() );
+#ifdef DEB_CALCULATION
+
+ TCollection_AsciiString aName = aNam + i + "_" + ++j + ".brep";
+ BRepTools::Write(anExp.Current() ,aName.ToCString());
+#endif
+ }
}
} // faces iterator
if ( aSewedShape.IsNull() || !TopoDS_Iterator( aSewedShape ).More() )
return false;
+#ifdef DEB_CALCULATION
+ BRepTools::Write(aSewedShape ,"Sew.brep");
+#endif
// Publish the sewed shape
QString aName = EXPORT_NAME;
GEOM::GEOM_Object_ptr aMainShape =
publishShapeInGEOM( theGeomEngine, theStudy, aSewedShape, aName );
- if ( aMainShape->_is_nil() )
+ if ( aMainShape->_is_nil() )
return false;
if ( theGroupsDefs.IsEmpty() )
for( int i = 1, n = aGroupDef.Shapes.Length(); i <= n; i++ )
{
const TopoDS_Shape& aShape = aGroupDef.Shapes.Value( i );
-
- const TopoDS_Shape& ModifiedShape = aSewing.Modified( aShape );
- if ( ModifiedShape.IsNull() )
+#ifdef DEB_CALCULATION
+ cout << "\nOld shape(" << i << ") = " << aShape.TShape() <<endl;
+#endif
+ const TopoDS_Shape& aModifiedShape = aSewing.Modified( aShape );
+ if ( aModifiedShape.IsNull() )
continue;
- int anIndex = aMapOfSubShapes.FindIndex( ModifiedShape );
- if ( anIndex > 0 ) aGroupIndexes.Append( anIndex );
+#ifdef DEB_CALCULATION
+ const TopLoc_Location& aL1 = aShape.Location();
+ const TopLoc_Location& aL2 = aModifiedShape.Location();
+ cout << "\nNew shape(" << i << ") = " << aModifiedShape.TShape() << " Location is Equal = " << aL1.IsEqual(aL2)<<endl;
+#endif
+
+ int anIndex = aMapOfSubShapes.FindIndex(aModifiedShape);
+ if ( anIndex > 0 ) {
+ aGroupIndexes.Append( anIndex );
+ } else {
+#ifdef DEB_CALCULATION
+ TCollection_AsciiString aNam("Lost_");
+ if(!aMapOfSubShapes.Contains(aModifiedShape)) {
+ for ( int anIndex = 1; anIndex <= aMapOfSubShapes.Extent(); anIndex++ )
+ {
+ const TopoDS_Shape& aS = aMapOfSubShapes.FindKey( anIndex );
+ if ( aModifiedShape.IsPartner( aS ) )
+ {
+ cout <<"\nIndex in Map = " << anIndex << "TShape = " << aS.TShape() <<endl;
+ TCollection_AsciiString aName = aNam + i + "_" + anIndex + ".brep";
+ BRepTools::Write(aS ,aName.ToCString());
+ break;
+ }
+ }
+ }
+#endif
+ }
}
-
if ( !aGroupIndexes.IsEmpty() )
aGroupsData.Bind( aGroupDef.Name, aGroupIndexes );
}
-
+
if ( !aGroupsData.IsEmpty() )
{
GEOM::GEOM_IGroupOperations_var aGroupOp =