-// 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 <TColStd_HSequenceOfInteger.hxx>
#include <TCollection_AsciiString.hxx>
+#include <cstring>
+
#ifdef _DEBUG_
static int MYDEBUG = 0;
#else
TCollection_AsciiString aCollection(Standard_CString(aString.c_str()));
if(!aCollection.IsEmpty())
{
- const std::string & objEntry = SMESH_Gen_i::GetSMESHGen()->GetLastObjEntry();
+ const std::string & objEntry = aSMESHGen->GetLastObjEntry();
if ( !objEntry.empty() )
aCollection += (TVar::ObjPrefix() + objEntry ).c_str();
aSMESHGen->AddToPythonScript(aCollection);
isHistoricalDump );
bool importGeom = false;
- GEOM::GEOM_Gen_ptr geom = GetGeomEngine();
+ GEOM::GEOM_Gen_ptr geom[2];
+ for ( int isShaper = 0; isShaper < 2; ++isShaper )
{
+ geom[ isShaper ] = GetGeomEngine( isShaper );
+ if ( CORBA::is_nil( geom[ isShaper ]))
+ continue;
// Add names of GEOM objects to theObjectNames to exclude same names of SMESH objects
- GEOM::string_array_var aGeomNames = geom->GetAllDumpNames();
- int ign = 0, nbgn = aGeomNames->length();
- for (; ign < nbgn; ign++) {
+ GEOM::string_array_var aGeomNames = geom[ isShaper ]->GetAllDumpNames();
+ for ( CORBA::ULong ign = 0; ign < aGeomNames->length(); ign++) {
TCollection_AsciiString aName = aGeomNames[ign].in();
theObjectNames.Bind(aName, "1");
}
anUpdatedScript += aLine.SubString( aStart, aSeq->Value(i) - 1 ); // line part before i-th entry
anEntry = aLine.SubString( aSeq->Value(i), aSeq->Value(i + 1) );
// is a GEOM object?
- CORBA::String_var geomName = geom->GetDumpName( anEntry.ToCString() );
+ CORBA::String_var geomName;
+ if ( !CORBA::is_nil( geom[0] ))
+ geomName = geom[0]->GetDumpName( anEntry.ToCString() );
+ if (( !geomName.in() || !geomName.in()[0] ) && !CORBA::is_nil( geom[1] ))
+ geomName = geom[1]->GetDumpName( anEntry.ToCString() );
if ( !geomName.in() || !geomName.in()[0] ) {
// is a SMESH object
if ( theObjectNames.IsBound( anEntry )) {
myPythonScript->Clear();
}
}
+
+//================================================================================
+/*!
+ * \brief Count inclusions of a string in a raw Python dump script
+ */
+//================================================================================
+
+int SMESH_Gen_i::CountInPyDump(const TCollection_AsciiString& theText)
+{
+ int count = 0;
+
+ SALOMEDS::Study_var aStudy = getStudyServant();
+ if ( CORBA::is_nil( aStudy ))
+ return count;
+
+ SMESH_Gen_i* me = GetSMESHGen();
+ CORBA::String_var compDataType = me->ComponentDataType();
+ SALOMEDS::SObject_wrap aSO = aStudy->FindComponent( compDataType.in() );
+ if ( CORBA::is_nil( aSO ))
+ return count;
+
+ // Trace saved in the study
+ SALOMEDS::GenericAttribute_wrap attr;
+ if ( aSO->FindAttribute( attr.inout(), "AttributePythonObject" ))
+ {
+ SALOMEDS::AttributePythonObject_var pyAttr =
+ SALOMEDS::AttributePythonObject::_narrow( attr );
+ CORBA::String_var script = pyAttr->GetObject();
+ for ( const char * scriptPos = script.in(); true; ++scriptPos )
+ if (( scriptPos = strstr( scriptPos, theText.ToCString() )))
+ ++count;
+ else
+ break;
+ }
+
+ // New python commands
+ if ( !me->myPythonScript.IsNull() )
+ {
+ const int nbLines = me->myPythonScript->Length();
+ for ( int i = 1; i <= nbLines; ++i )
+ {
+ const TCollection_AsciiString& line = me->myPythonScript->Value( i );
+ for ( int loc = 1; loc <= line.Length(); ++loc )
+ if (( loc = line.Location( theText, loc, line.Length() )))
+ ++count;
+ else
+ break;
+ }
+ }
+
+ return count;
+}