#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;
-
- Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
- if ( aDocument.IsNull() )
- return aResList;
-
- QString aDocName = aDocument->GetDocPyName();
+ QStringList aResList = dumpObjectCreation( theTreatedObjects );
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( "" );
-
HYDROData_SequenceOfObjects aGeomObjects = GetGeometryObjects();
HYDROData_SequenceOfObjects::Iterator anIter( aGeomObjects );
for ( ; anIter.More(); anIter.Next() )
{
// 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() )
NCollection_Sequence<int> aGroupIndexes;
for( int i = 1, n = aGroupDef.Shapes.Length(); i <= n; i++ )
- {
+ {
const TopoDS_Shape& aShape = aGroupDef.Shapes.Value( i );
-
+#ifdef DEB_CALCULATION
+ cout << "\nOld shape(" << i << ") = " << aShape.TShape() <<endl;
+#endif
const TopoDS_Shape& aModifiedShape = aSewing.Modified( aShape );
if ( aModifiedShape.IsNull() )
continue;
+#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
+
// Workaround for TopTools_IndexedMapOfShape::FindIndex()
- for ( int anIndex = 1; anIndex <= aMapOfSubShapes.Extent(); anIndex++ )
+ /*for ( int anIndex = 1; anIndex <= aMapOfSubShapes.Extent(); anIndex++ )
{
if ( aModifiedShape.IsPartner( aMapOfSubShapes.FindKey( anIndex ) ) )
{
break;
}
}
- }
-
+ */
+ int anIndex = aMapOfSubShapes.FindIndex(aModifiedShape);
+ if(anIndex > 0) {
+ aGroupIndexes.Append( anIndex );
+ //break;
+ } 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 =