X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_DumpPython.cxx;h=3a5af32a34f7fb84e8440e8ecc89c176e988e979;hb=6a962cf2a35e59c3896791f15a981f2b5643452d;hp=8736356acfe23c534f4d7da058e6dff63fe743fc;hpb=54182913fbb9df65a3f4cc96f55db3618835ecd8;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_DumpPython.cxx b/src/SMESH_I/SMESH_DumpPython.cxx index 8736356ac..3a5af32a3 100644 --- a/src/SMESH_I/SMESH_DumpPython.cxx +++ b/src/SMESH_I/SMESH_DumpPython.cxx @@ -36,6 +36,7 @@ #include #include +#include #ifdef _DEBUG_ static int MYDEBUG = 0; @@ -208,6 +209,7 @@ namespace SMESH case Entity_Quad_Edge: myStream<<"Entity_Quad_Edge"; break; case Entity_Triangle: myStream<<"Entity_Triangle"; break; case Entity_Quad_Triangle: myStream<<"Entity_Quad_Triangle"; break; + case Entity_BiQuad_Triangle: myStream<<"Entity_BiQuad_Triangle"; break; case Entity_Quadrangle: myStream<<"Entity_Quadrangle"; break; case Entity_Quad_Quadrangle: myStream<<"Entity_Quad_Quadrangle"; break; case Entity_BiQuad_Quadrangle: myStream<<"Entity_BiQuad_Quadrangle"; break; @@ -377,9 +379,9 @@ namespace SMESH { if ( theArg ) { FunctorType aFunctorType = theArg->GetFunctorType(); - switch(aFunctorType){ - case FT_AspectRatio: myStream<< "anAspectRatio"; break; - case FT_AspectRatio3D: myStream<< "anAspectRatio3D"; break; + switch(aFunctorType) { + case FT_AspectRatio: myStream<< "aAspectRatio"; break; + case FT_AspectRatio3D: myStream<< "aAspectRatio3D"; break; case FT_Warping: myStream<< "aWarping"; break; case FT_MinimumAngle: myStream<< "aMinimumAngle"; break; case FT_Taper: myStream<< "aTaper"; break; @@ -392,6 +394,10 @@ namespace SMESH case FT_FreeEdges: myStream<< "aFreeEdges"; break; case FT_FreeNodes: myStream<< "aFreeNodes"; break; case FT_FreeFaces: myStream<< "aFreeFaces"; break; + case FT_EqualNodes: myStream<< "aEqualNodes"; break; + case FT_EqualEdges: myStream<< "aEqualEdges"; break; + case FT_EqualFaces: myStream<< "aEqualFaces"; break; + case FT_EqualVolumes: myStream<< "aEqualVolumes"; break; case FT_MultiConnection: myStream<< "aMultiConnection"; break; case FT_MultiConnection2D: myStream<< "aMultiConnection2D"; break; case FT_Length: myStream<< "aLength"; break; @@ -401,7 +407,6 @@ namespace SMESH case FT_BelongToCylinder: myStream<< "aBelongToCylinder"; break; case FT_BelongToGenSurface: myStream<< "aBelongToGenSurface"; break; case FT_LyingOnGeom: myStream<< "aLyingOnGeom"; break; - case FT_CoplanarFaces: myStream<< "aCoplanarFaces"; break; case FT_RangeOfIds: myStream<< "aRangeOfIds"; break; case FT_BadOrientedVolume: myStream<< "aBadOrientedVolume"; break; case FT_BareBorderVolume: myStream<< "aBareBorderVolume"; break; @@ -410,10 +415,14 @@ namespace SMESH case FT_OverConstrainedFace: myStream<< "aOverConstrainedFace"; break; case FT_LinearOrQuadratic: myStream<< "aLinearOrQuadratic"; break; case FT_GroupColor: myStream<< "aGroupColor"; break; - case FT_ElemGeomType: myStream<< "anElemGeomType"; break; + case FT_ElemGeomType: myStream<< "aElemGeomType"; break; + case FT_EntityType: myStream<< "aEntityType"; break; + case FT_CoplanarFaces: myStream<< "aCoplanarFaces"; break; + case FT_BallDiameter: myStream<< "aBallDiameter"; break; + case FT_ConnectedElements: myStream<< "aConnectedElements"; break; case FT_LessThan: myStream<< "aLessThan"; break; case FT_MoreThan: myStream<< "aMoreThan"; break; - case FT_EqualTo: myStream<< "anEqualTo"; break; + case FT_EqualTo: myStream<< "aEqualTo"; break; case FT_LogicalNOT: myStream<< "aLogicalNOT"; break; case FT_LogicalAND: myStream<< "aLogicalAND"; break; case FT_LogicalOR: myStream<< "aLogicalOR"; break; @@ -838,6 +847,45 @@ namespace { } return isValidName; } + + //================================================================================ + /*! + * \brief Return Python module names of available plug-ins. + */ + //================================================================================ + + std::vector getPluginNames() + { + std::vector pluginNames; + std::vector< std::string > xmlPaths = SMESH_Gen::GetPluginXMLPaths(); + LDOMParser xmlParser; + for ( size_t i = 0; i < xmlPaths.size(); ++i ) + { + bool error = xmlParser.parse( xmlPaths[i].c_str() ); + if ( error ) + { + TCollection_AsciiString data; + INFOS( xmlParser.GetError(data) ); + continue; + } + // + LDOM_Document xmlDoc = xmlParser.getDocument(); + LDOM_NodeList nodeList = xmlDoc.getElementsByTagName( "meshers-group" ); + for ( int i = 0; i < nodeList.getLength(); ++i ) + { + LDOM_Node node = nodeList.item( i ); + LDOM_Element& elem = (LDOM_Element&) node; + LDOMString idlModule = elem.getAttribute( "idl-module" ); + if ( strlen( idlModule.GetString() ) > 0 ) + pluginNames.push_back( idlModule.GetString() ); + } + } + return pluginNames; + } } //============================================================================= @@ -865,23 +913,14 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl TCollection_AsciiString aScript; if( isMultiFile ) aScript += "def RebuildData(theStudy):"; + aScript += "\n\t"; - aScript += helper + "aFilterManager = " + aSMESHGen + ".CreateFilterManager()\n\t"; - aScript += helper + "aMeasurements = " + aSMESHGen + ".CreateMeasurements()\n\t"; if ( isPublished ) - aScript += aSMESHGen + " = smeshBuilder.New(theStudy)"; + aScript += aSMESHGen + " = smeshBuilder.New(theStudy)\n\t"; else - aScript += aSMESHGen + " = smeshBuilder.New(None)"; - - // import python files corresponding to plugins - set moduleNameSet; - map::iterator hyp_creator = myHypCreatorMap.begin(); - for ( ; hyp_creator != myHypCreatorMap.end(); ++hyp_creator ) { - string moduleName = hyp_creator->second->GetModuleName(); - bool newModule = moduleNameSet.insert( moduleName ).second; - if ( newModule ) - aScript += helper + "\n\t" + "from salome." + (char*) moduleName.c_str() + " import " + (char*) moduleName.c_str() +"Builder"; - } + aScript += aSMESHGen + " = smeshBuilder.New(None)\n\t"; + aScript += helper + "aFilterManager = " + aSMESHGen + ".CreateFilterManager()\n\t"; + aScript += helper + "aMeasurements = " + aSMESHGen + ".CreateMeasurements()\n\t"; // Dump trace of restored study if (theSavedTrace.Length() > 0) { @@ -915,6 +954,30 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl aScript += helper + "\n" + aNewLines; } + // import python files corresponding to plugins if they are used in aScript + { + TCollection_AsciiString importStr; + std::vector pluginNames = getPluginNames(); + for ( size_t i = 0; i < pluginNames.size(); ++i ) + { + // Convert access to plugin members: + // e.g. StdMeshers.QUAD_REDUCED -> StdMeshersBuilder.QUAD_REDUCED + TCollection_AsciiString pluginAccess = (pluginNames[i] + ".").c_str() ; + int iFrom = 1, iPos; + while (( iPos = aScript.Location( pluginAccess, iFrom, aScript.Length() ))) + { + aScript.Insert( iPos + pluginNames[i].size(), "Builder" ); + iFrom = iPos + pluginNames[i].size() + 8; + } + // if any plugin member is used, import the plugin + if ( iFrom > 1 ) + importStr += ( helper + "\n\t" + "from salome." + (char*) pluginNames[i].c_str() + + " import " + (char*) pluginNames[i].c_str() +"Builder" ); + } + if ( !importStr.IsEmpty() ) + aScript.Insert( 1, importStr + "\n\t" ); + } + // Convert IDL API calls into smeshBuilder.py API. // Some objects are wrapped with python classes and // Resource_DataMapOfAsciiStringAsciiString holds methods returning wrapped objects @@ -985,7 +1048,8 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl do { aName = aBaseName + (++objectCounter); } while (theObjectNames.IsBound(aName)); - seqRemoved.Append(aName); + if ( !aRemovedObjIDs.count( anEntry )) + seqRemoved.Append(aName); mapRemoved.Bind(anEntry, "1"); theObjectNames.Bind(anEntry, aName); } @@ -1024,7 +1088,6 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl anUpdatedScript += "\n\taStudyBuilder = theStudy.NewBuilder()"; } for (int ir = 1; ir <= seqRemoved.Length(); ir++) { - if ( aRemovedObjIDs.count( seqRemoved.Value(ir) )) continue; anUpdatedScript += "\n\tSO = theStudy.FindObjectIOR(theStudy.ConvertObjectToIOR("; anUpdatedScript += seqRemoved.Value(ir); // for object wrapped by class of smeshBuilder.py @@ -1035,12 +1098,8 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl } // Set object names - anUpdatedScript += "\n\t## set object names"; -// anUpdatedScript += "\n\t\tsmeshgui = salome.ImportComponentGUI(\"SMESH\")"; -// anUpdatedScript += "\n\t\tsmeshgui.Init(theStudy._get_StudyId())"; -// anUpdatedScript += "\n"; - TCollection_AsciiString aGUIName; + TCollection_AsciiString aGUIName, aSetNameScriptPart; Resource_DataMapOfAsciiStringAsciiString mapEntries; for (Standard_Integer i = 1; i <= aLen; i += 2) { @@ -1048,23 +1107,24 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl aName = geom->GetDumpName( anEntry.ToCString() ); if (aName.IsEmpty() && // Not a GEOM object theNames.IsBound(anEntry) && - !aRemovedObjIDs.count(anEntry) && // a command creating anEntry was erased + !aRemovedObjIDs.count(anEntry) && // A command creating anEntry was erased !mapEntries.IsBound(anEntry) && // Not yet processed !mapRemoved.IsBound(anEntry)) // Was not removed { aName = theObjectNames.Find(anEntry); aGUIName = theNames.Find(anEntry); mapEntries.Bind(anEntry, aName); - anUpdatedScript += helper + "\n\t" + aSMESHGen + ".SetName(" + aName; + aSetNameScriptPart += helper + "\n\t" + aSMESHGen + ".SetName(" + aName; if ( anEntry2AccessorMethod.IsBound( anEntry ) ) - anUpdatedScript += helper + "." + anEntry2AccessorMethod( anEntry ); - anUpdatedScript += helper + ", '" + aGUIName + "')"; + aSetNameScriptPart += helper + "." + anEntry2AccessorMethod( anEntry ); + aSetNameScriptPart += helper + ", '" + aGUIName + "')"; } } - - // Issue 0021249: removed (a similar block is dumped by SALOMEDSImpl_Study) - //anUpdatedScript += "\n\tif salome.sg.hasDesktop():"; - //anUpdatedScript += "\n\t\tsalome.sg.updateObjBrowser(0)"; + if ( !aSetNameScriptPart.IsEmpty() ) + { + anUpdatedScript += "\n\t## set object names"; + anUpdatedScript += aSetNameScriptPart; + } // ----------------------------------------------------------------- // store visual properties of displayed objects