-// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2020 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
#include <SALOMEDS_wrap.hxx>
#include <utilities.h>
+#include <Basics_OCCTVersion.hxx>
#include <Resource_DataMapOfAsciiStringAsciiString.hxx>
+#if OCC_VERSION_LARGE < 0x07050000
#include <Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString.hxx>
+#endif
#include "SMESH_Gen_i.hxx"
/* SALOME headers that include CORBA headers that include windows.h
#include <unistd.h>
#endif
-IMPLEMENT_STANDARD_RTTIEXT(_pyObject ,Standard_Transient);
-IMPLEMENT_STANDARD_RTTIEXT(_pyCommand ,Standard_Transient);
-IMPLEMENT_STANDARD_RTTIEXT(_pyHypothesisReader,Standard_Transient);
-IMPLEMENT_STANDARD_RTTIEXT(_pyGen ,_pyObject);
-IMPLEMENT_STANDARD_RTTIEXT(_pyMesh ,_pyObject);
-IMPLEMENT_STANDARD_RTTIEXT(_pySubMesh ,_pyObject);
-IMPLEMENT_STANDARD_RTTIEXT(_pyMeshEditor ,_pyObject);
-IMPLEMENT_STANDARD_RTTIEXT(_pyHypothesis ,_pyObject);
-IMPLEMENT_STANDARD_RTTIEXT(_pySelfEraser ,_pyObject);
-IMPLEMENT_STANDARD_RTTIEXT(_pyGroup ,_pyObject);
-IMPLEMENT_STANDARD_RTTIEXT(_pyFilter ,_pyObject);
-IMPLEMENT_STANDARD_RTTIEXT(_pyAlgorithm ,_pyHypothesis);
-IMPLEMENT_STANDARD_RTTIEXT(_pyComplexParamHypo,_pyHypothesis);
-IMPLEMENT_STANDARD_RTTIEXT(_pyNumberOfSegmentsHyp,_pyHypothesis);
-IMPLEMENT_STANDARD_RTTIEXT(_pyLayerDistributionHypo,_pyHypothesis);
-IMPLEMENT_STANDARD_RTTIEXT(_pySegmentLengthAroundVertexHyp,_pyHypothesis);
+IMPLEMENT_STANDARD_RTTIEXT(_pyObject ,Standard_Transient)
+IMPLEMENT_STANDARD_RTTIEXT(_pyCommand ,Standard_Transient)
+IMPLEMENT_STANDARD_RTTIEXT(_pyHypothesisReader,Standard_Transient)
+IMPLEMENT_STANDARD_RTTIEXT(_pyGen ,_pyObject)
+IMPLEMENT_STANDARD_RTTIEXT(_pyMesh ,_pyObject)
+IMPLEMENT_STANDARD_RTTIEXT(_pySubMesh ,_pyObject)
+IMPLEMENT_STANDARD_RTTIEXT(_pyMeshEditor ,_pyObject)
+IMPLEMENT_STANDARD_RTTIEXT(_pyHypothesis ,_pyObject)
+IMPLEMENT_STANDARD_RTTIEXT(_pySelfEraser ,_pyObject)
+IMPLEMENT_STANDARD_RTTIEXT(_pyGroup ,_pyObject)
+IMPLEMENT_STANDARD_RTTIEXT(_pyFilter ,_pyObject)
+IMPLEMENT_STANDARD_RTTIEXT(_pyAlgorithm ,_pyHypothesis)
+IMPLEMENT_STANDARD_RTTIEXT(_pyComplexParamHypo,_pyHypothesis)
+IMPLEMENT_STANDARD_RTTIEXT(_pyNumberOfSegmentsHyp,_pyHypothesis)
+IMPLEMENT_STANDARD_RTTIEXT(_pyLayerDistributionHypo,_pyHypothesis)
+IMPLEMENT_STANDARD_RTTIEXT(_pySegmentLengthAroundVertexHyp,_pyHypothesis)
using namespace std;
using SMESH::TPythonDump;
myRemovedObjIDs( theRemovedObjIDs ),
myNbFilters( 0 ),
myToKeepAllCommands( theToKeepAllCommands ),
- myGeomIDNb(0), myGeomIDIndex(-1)
+ myGeomIDNb(0), myGeomIDIndex(-1),
+ myShaperIDNb(0), myShaperIDIndex(-1)
{
// make that GetID() to return TPythonDump::SMESHGenName()
GetCreationCmd()->Clear();
GetCreationCmd()->GetString() += "=";
// Find 1st digit of study entry by which a GEOM object differs from a SMESH object
- if ( !theObjectNames.IsEmpty() )
+ if (!theObjectNames.IsEmpty())
{
- // find a GEOM entry
- _pyID geomID;
- SALOMEDS::SComponent_wrap geomComp = SMESH_Gen_i::getStudyServant()->FindComponent("GEOM");
- if ( geomComp->_is_nil() ) return;
- CORBA::String_var entry = geomComp->GetID();
- geomID = entry.in();
-
- // find a SMESH entry
- _pyID smeshID;
- Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString e2n( theObjectNames );
- for ( ; e2n.More() && smeshID.IsEmpty(); e2n.Next() )
- if ( _pyCommand::IsStudyEntry( e2n.Key() ))
- smeshID = e2n.Key();
-
- // find 1st difference between smeshID and geomID
- if ( !geomID.IsEmpty() && !smeshID.IsEmpty() )
- for ( int i = 1; i <= geomID.Length() && i <= smeshID.Length(); ++i )
- if ( geomID.Value( i ) != smeshID.Value( i ))
- {
- myGeomIDNb = geomID.Value( i );
- myGeomIDIndex = i;
- }
+ // find a GEOM (aPass == 0) and SHAPERSTUDY (aPass == 1) entries
+ for(int aPass = 0; aPass < 2; aPass++) {
+ _pyID geomID;
+ SALOMEDS::SComponent_wrap geomComp = SMESH_Gen_i::getStudyServant()->
+ FindComponent(aPass == 0 ? "GEOM" : "SHAPERSTUDY");
+ if (geomComp->_is_nil()) continue;
+ CORBA::String_var entry = geomComp->GetID();
+ geomID = entry.in();
+
+ // find a SMESH entry
+ _pyID smeshID;
+ Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString e2n(theObjectNames);
+ for (; e2n.More() && smeshID.IsEmpty(); e2n.Next())
+ if (_pyCommand::IsStudyEntry(e2n.Key()))
+ smeshID = e2n.Key();
+
+ // find 1st difference between smeshID and geomID
+ if (!geomID.IsEmpty() && !smeshID.IsEmpty())
+ for (int i = 1; i <= geomID.Length() && i <= smeshID.Length(); ++i)
+ if (geomID.Value(i) != smeshID.Value(i))
+ {
+ if (aPass == 0) {
+ myGeomIDNb = geomID.Value(i);
+ myGeomIDIndex = i;
+ } else {
+ myShaperIDNb = geomID.Value(i);
+ myShaperIDIndex = i;
+ }
+ }
+ }
}
}
if ( -1 < iGeom && iGeom < nbTypes )
Threshold = SMESH + types[ iGeom ];
#ifdef _DEBUG_
- // is types complete? (compilation failure mains that enum GeometryType changed)
- int _asrt[( sizeof(types) / sizeof(const char*) == nbTypes ) ? 2 : -1 ]; _asrt[0]=_asrt[1];
+ // is types complete? (compilation failure means that enum GeometryType changed)
+ static_assert( sizeof(types) / sizeof(const char*) == nbTypes,
+ "Update names of GeometryType's!!!" );
#endif
}
if (Type == "SMESH.FT_EntityType")
if ( -1 < iGeom && iGeom < nbTypes )
Threshold = SMESH + types[ iGeom ];
#ifdef _DEBUG_
- // is 'types' complete? (compilation failure mains that enum EntityType changed)
- int _asrt[( sizeof(types) / sizeof(const char*) == nbTypes ) ? 2 : -1 ]; _asrt[0]=_asrt[1];
+ // is 'types' complete? (compilation failure means that enum EntityType changed)
+ static_assert( sizeof(types) / sizeof(const char*) == nbTypes,
+ "Update names of EntityType's!!!" );
#endif
}
}
*/
//================================================================================
-void _pyGen::PlaceSubmeshAfterItsCreation( Handle(_pyCommand) theCmdUsingSubmesh ) const
+void _pyGen::PlaceSubmeshAfterItsCreation( Handle(_pyCommand) /*theCmdUsingSubmesh*/ ) const
{
// map< _pyID, Handle(_pyObject) >::const_iterator id_obj = myObjects.begin();
// for ( ; id_obj != myObjects.end(); ++id_obj )
bool _pyGen::IsGeomObject(const _pyID& theObjID) const
{
- if ( myGeomIDNb )
- {
- return ( myGeomIDIndex <= theObjID.Length() &&
- int( theObjID.Value( myGeomIDIndex )) == myGeomIDNb &&
- _pyCommand::IsStudyEntry( theObjID ));
- }
- return false;
+ bool isGeom = myGeomIDNb && myGeomIDIndex <= theObjID.Length() &&
+ int( theObjID.Value( myGeomIDIndex )) == myGeomIDNb;
+ bool isShaper = myShaperIDNb && myShaperIDIndex <= theObjID.Length() &&
+ int( theObjID.Value( myShaperIDIndex )) == myShaperIDNb;
+ return ((isGeom || isShaper) && _pyCommand::IsStudyEntry( theObjID ));
}
//================================================================================
"ExtrusionByNormal", "ExtrusionSweepObject2D","ExtrusionAlongPath","ExtrusionAlongPathObject",
"ExtrusionAlongPathX","ExtrusionAlongPathObject1D","ExtrusionAlongPathObject2D",
"ExtrusionSweepObjects","RotationSweepObjects","ExtrusionAlongPathObjects",
- "Mirror","MirrorObject","Translate","TranslateObject","Rotate","RotateObject",
+ "Mirror","MirrorObject","Translate","TranslateObject","Rotate","RotateObject","Offset",
"FindCoincidentNodes","MergeNodes","FindEqualElements","FillHole",
"MergeElements","MergeEqualElements","SewFreeBorders","SewConformFreeBorders",
"FindCoincidentFreeBorders", "SewCoincidentFreeBorders",
return false;
if ( myString.StartsWith("#") )
return false;
+ if ( myString.StartsWith("SHAPERSTUDY") ) // skip shaperstudy specific dump string analysis
+ return false;
const char* s = myString.ToCString() + GetBegPos( METHOD_IND ) + myMeth.Length() - 1;
return ( s[0] == '(' || s[1] == '(' );
}
if ( pos == UNKNOWN )
{
pos = GetBegPos( METHOD_IND ) + myMeth.Length();
- if ( pos < 1 )
+ if ( pos < 1 && Length() >= 4 )
pos = myString.Location( "(", 4, Length() ); // 4 = strlen("b.c(")
}
return pos;
}
theStartPos = beg;
//cout << theString << " ---- " << beg << " - " << end << endl;
+ if ( end > theString.Length() )
+ {
+ theStartPos = EMPTY;
+ return theEmptyString;
+ }
return theString.SubString( beg, end );
}
*/
//================================================================================
-bool _pySubMesh::CanBeArgOfMethod(const _AString& theMethodName)
+bool _pySubMesh::CanBeArgOfMethod(const _AString& /*theMethodName*/)
{
return false;
// names of all methods where a sub-mesh can be used as argument