Salome HOME
A patch by Paul RASCLE for ASTER cluster (64 bits).
[modules/smesh.git] / src / SMESH_I / SMESH_2smeshpy.hxx
index aabba67dd2f004461c9c273069d755f4e0775dbc..2f1bc027c5abed7015147b8c1b17f7433ea06565 100644 (file)
@@ -15,7 +15,7 @@
 // License along with this library; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 // File      : SMESH_smesh.hxx
 // Created   : Fri Nov 18 12:05:18 2005
@@ -34,6 +34,7 @@
 #include <list>
 #include <map>
 
+// ===========================================================================================
 /*!
  * \brief Tool converting SMESH engine calls into commands defined in smesh.py
  *
@@ -49,6 +50,7 @@
  *
  * See comments to _pyHypothesis class to know how to assure convertion of a new hypothesis
  */
+// ===========================================================================================
 
 class Resource_DataMapOfAsciiStringAsciiString;
 
@@ -74,9 +76,11 @@ public:
   static char* GenName() { return "smesh.smesh"; }
 };
 
+// ===========================================================================================
 // =====================
 //    INTERNAL STUFF
 // =====================
+// ===========================================================================================
 
 class _pyCommand;
 class _pyObject;
@@ -127,6 +131,7 @@ public:
   int Length() { return myString.Length(); }
   void Clear() { myString.Clear(); myBegPos.Clear(); }
   bool IsEmpty() const { return myString.IsEmpty(); }
+  TCollection_AsciiString GetIndentation();
   const TCollection_AsciiString & GetResultValue();
   const TCollection_AsciiString & GetObject();
   const TCollection_AsciiString & GetMethod();
@@ -145,8 +150,8 @@ public:
   static TCollection_AsciiString GetWord( const TCollection_AsciiString & theSring,
                                           int & theStartPos, const bool theForward,
                                           const bool dotIsWord = false);
-  void AddDependantCmd( Handle(_pyCommand) cmd)
-  { return myDependentCmds.push_back( cmd ); }
+  void AddDependantCmd( Handle(_pyCommand) cmd, bool prepend = false)
+  { if (prepend) myDependentCmds.push_front( cmd ); else myDependentCmds.push_back( cmd ); }
   bool SetDependentCmdsAfter() const;
 
   bool AddAccessorMethod( _pyID theObjectID, const char* theAcsMethod );
@@ -154,9 +159,11 @@ public:
   DEFINE_STANDARD_RTTI (_pyCommand)
 };
 
+// -------------------------------------------------------------------------------------
 /*!
  * \brief Root of all objects
  */
+// -------------------------------------------------------------------------------------
 
 class _pyObject: public Standard_Transient
 {
@@ -164,6 +171,7 @@ class _pyObject: public Standard_Transient
 public:
   _pyObject(const Handle(_pyCommand)& theCreationCmd): myCreationCmd(theCreationCmd) {}
   const _pyID& GetID() { return myCreationCmd->GetResultValue(); }
+  static _pyID FatherID(const _pyID & childID);
   const Handle(_pyCommand)& GetCreationCmd() { return myCreationCmd; }
   void  SetCreationCmd( Handle(_pyCommand) cmd ) { myCreationCmd = cmd; }
   int GetCommandNb() { return myCreationCmd->GetOrderNb(); }
@@ -174,16 +182,18 @@ public:
   DEFINE_STANDARD_RTTI (_pyObject)
 };
 
+// -------------------------------------------------------------------------------------
 /*!
  * \brief Class corresponding to SMESH_Gen. It holds info on existing
  *        meshes and hypotheses
  */
+// -------------------------------------------------------------------------------------
 class _pyGen: public _pyObject
 {
 public:
   _pyGen(Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod);
   //~_pyGen();
-  void AddCommand( const TCollection_AsciiString& theCommand );
+  Handle(_pyCommand) AddCommand( const TCollection_AsciiString& theCommand );
   void Process( const Handle(_pyCommand)& theCommand );
   void Flush();
   Handle(_pyHypothesis) FindHyp( const _pyID& theHypID );
@@ -193,6 +203,8 @@ public:
   void SetCommandAfter( Handle(_pyCommand) theCmd, Handle(_pyCommand) theAfterCmd );
   std::list< Handle(_pyCommand) >& GetCommands() { return myCommands; }
   void SetAccessorMethod(const _pyID& theID, const char* theMethod );
+  bool AddMeshAccessorMethod( Handle(_pyCommand) theCmd ) const;
+  bool AddAlgoAccessorMethod( Handle(_pyCommand) theCmd ) const;
   const char* AccessorMethod() const { return SMESH_2smeshpy::GenName(); }
 private:
   std::map< _pyID, Handle(_pyMesh) > myMeshes;
@@ -205,9 +217,11 @@ private:
   DEFINE_STANDARD_RTTI (_pyGen)
 };
 
+// -------------------------------------------------------------------------------------
 /*!
  * \brief Contains commands concerning mesh substructures
  */
+// -------------------------------------------------------------------------------------
 #define _pyMesh_ACCESS_METHOD "GetMesh()"
 class _pyMesh: public _pyObject
 {
@@ -229,6 +243,7 @@ private:
 };
 #undef _pyMesh_ACCESS_METHOD 
 
+// -------------------------------------------------------------------------------------
 /*!
  * \brief Root class for hypothesis
  *
@@ -245,23 +260,35 @@ private:
  *    to derive a specific class from _pyHypothesis that would redefine Process(),
  *    see _pyComplexParamHypo for example
  */
+// -------------------------------------------------------------------------------------
 class _pyHypothesis: public _pyObject
 {
 protected:
-  bool    myIsAlgo, /*myIsLocal, */myIsWrapped, myIsConverted;
-  int     myDim, myAdditionCmdNb;
+  bool    myIsAlgo, myIsWrapped; //myIsLocal, myIsConverted;
+  //int     myDim/*, myAdditionCmdNb*/;
   _pyID    myGeom, myMesh;
   TCollection_AsciiString       myCreationMethod, myType;
   TColStd_SequenceOfAsciiString myArgs;
   TColStd_SequenceOfAsciiString myArgMethods;
+  TColStd_SequenceOfInteger     myNbArgsByMethod;
   std::list<Handle(_pyCommand)>  myArgCommands;
   std::list<Handle(_pyCommand)>  myUnknownCommands;
 public:
   _pyHypothesis(const Handle(_pyCommand)& theCreationCmd);
+  void SetConvMethodAndType(const char* creationMethod, const char* type=0)
+  { myCreationMethod = (char*)creationMethod; if ( type ) myType = (char*)type; }
+//   void SetDimMethodType(const int dim, const char* creationMethod, const char* type=0)
+//   { myDim = dim; myCreationMethod = (char*)creationMethod; if ( type ) myType = (char*)type; }
+  void AddArgMethod(const char* method, const int nbArgs = 1)
+  { myArgMethods.Append( (char*)method ); myNbArgsByMethod.Append( nbArgs ); }
+  const TColStd_SequenceOfAsciiString& GetArgs() const { return myArgs; }
+  const TCollection_AsciiString& GetCreationMethod() const { return myCreationMethod; }
+  const std::list<Handle(_pyCommand)>& GetArgCommands() const { return myArgCommands; }
+  void ClearAllCommands();
   virtual bool IsAlgo() const { return myIsAlgo; }
   bool IsWrapped() const { return myIsWrapped; }
-  bool & IsConverted() { return myIsConverted; }
-  int GetDim() const { return myDim; }
+  //bool & IsConverted() { return myIsConverted; }
+  //int GetDim() const { return myDim; }
   const _pyID & GetGeom() const { return myGeom; }
   void SetMesh( const _pyID& theMeshId) { if ( myMesh.IsEmpty() ) myMesh = theMeshId; }
   const _pyID & GetMesh() const { return myMesh; }
@@ -278,9 +305,27 @@ public:
   DEFINE_STANDARD_RTTI (_pyHypothesis)
 };
 
+// -------------------------------------------------------------------------------------
+/*!
+ * \brief Class representing smesh.Mesh_Algorithm
+ */
+// -------------------------------------------------------------------------------------
+class _pyAlgorithm: public _pyHypothesis
+{
+public:
+  _pyAlgorithm(const Handle(_pyCommand)& theCreationCmd);
+  virtual bool Addition2Creation( const Handle(_pyCommand)& theAdditionCmd,
+                                  const _pyID&              theMesh);
+  const char* AccessorMethod() const { return "GetAlgorithm()"; }
+
+  DEFINE_STANDARD_RTTI (_pyAlgorithm)
+};
+
+// -------------------------------------------------------------------------------------
 /*!
  * \brief Class for hypotheses having several parameters modified by one method
  */
+// -------------------------------------------------------------------------------------
 class _pyComplexParamHypo: public _pyHypothesis
 {
 public:
@@ -291,10 +336,31 @@ public:
 };
 DEFINE_STANDARD_HANDLE (_pyComplexParamHypo, _pyHypothesis);
 
+// -------------------------------------------------------------------------------------
+/*!
+ * \brief Class for LayerDistribution hypothesis conversion
+ */
+// -------------------------------------------------------------------------------------
+class _pyLayerDistributionHypo: public _pyHypothesis
+{
+  Handle(_pyHypothesis) my1dHyp;
+public:
+  _pyLayerDistributionHypo(const Handle(_pyCommand)& theCreationCmd):
+    _pyHypothesis(theCreationCmd) {}
+  void Process( const Handle(_pyCommand)& theCommand);
+  void Flush();
+  bool Addition2Creation( const Handle(_pyCommand)& theAdditionCmd,
+                          const _pyID&              theMesh);
+
+  DEFINE_STANDARD_RTTI (_pyLayerDistributionHypo)
+};
+DEFINE_STANDARD_HANDLE (_pyLayerDistributionHypo, _pyHypothesis);
 
+// -------------------------------------------------------------------------------------
 /*!
  * \brief Class representing NumberOfSegments hypothesis
  */
+// -------------------------------------------------------------------------------------
 class _pyNumberOfSegmentsHyp: public _pyHypothesis
 {
 public:
@@ -307,18 +373,19 @@ public:
 };
 DEFINE_STANDARD_HANDLE (_pyNumberOfSegmentsHyp, _pyHypothesis);
 
+// -------------------------------------------------------------------------------------
 /*!
- * \brief Class representing smesh.Mesh_Algorithm
+ * \brief Class representing SegmentLengthAroundVertex hypothesis
  */
-class _pyAlgorithm: public _pyHypothesis
+// -------------------------------------------------------------------------------------
+class _pySegmentLengthAroundVertexHyp: public _pyHypothesis
 {
 public:
-  _pyAlgorithm(const Handle(_pyCommand)& theCreationCmd);
+  _pySegmentLengthAroundVertexHyp(const Handle(_pyCommand)& theCrCmd): _pyHypothesis(theCrCmd) {}
   virtual bool Addition2Creation( const Handle(_pyCommand)& theAdditionCmd,
                                   const _pyID&              theMesh);
-  const char* AccessorMethod() const { return "GetAlgorithm()"; }
-
-  DEFINE_STANDARD_RTTI (_pyAlgorithm)
+  DEFINE_STANDARD_RTTI (_pySegmentLengthAroundVertexHyp)
 };
+DEFINE_STANDARD_HANDLE (_pySegmentLengthAroundVertexHyp, _pyHypothesis);
 
 #endif