+// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// 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/ or email : webmaster.salome@opencascade.com
+//
// File : SMESH_smesh.hxx
// Created : Fri Nov 18 12:05:18 2005
// Author : Edward AGAPOV (eap)
*
* The only API method here is SMESH_2smeshpy::ConvertScript(), the rest ones are
* for internal usage
+ *
+ * See comments to _pyHypothesis class to know how to assure convertion of a new hypothesis
*/
class Resource_DataMapOfAsciiStringAsciiString;
DEFINE_STANDARD_HANDLE (_pyHypothesis,_pyObject);
DEFINE_STANDARD_HANDLE (_pyAlgorithm ,_pyHypothesis);
+typedef TCollection_AsciiString _pyID;
+
+// ===========================================================
/*!
* \brief Class operating on a command string looking like
* ResultValue = Object.Method( Arg1, Arg2,...)
*/
+// ===========================================================
+
class _pyCommand: public Standard_Transient
{
- int myOrderNb; // position within the script
- TCollection_AsciiString myString;
- TCollection_AsciiString myRes, myObj, myMeth;
- TColStd_SequenceOfAsciiString myArgs;
- TColStd_SequenceOfInteger myBegPos; //!< where myRes, myObj, ... begin
+ int myOrderNb; //!< position within the script
+ TCollection_AsciiString myString; //!< command text
+ TCollection_AsciiString myRes, myObj, myMeth; //!< found parts of command
+ TColStd_SequenceOfAsciiString myArgs; //!< found arguments
+ TColStd_SequenceOfInteger myBegPos; //!< where myRes, myObj, ... begin
+ std::list< Handle(_pyCommand) > myDependentCmds; //!< commands that sould follow me in the script
+
enum { UNKNOWN=-1, EMPTY=0, RESULT_IND, OBJECT_IND, METHOD_IND, ARG1_IND };
int GetBegPos( int thePartIndex );
void SetBegPos( int thePartIndex, int thePosition );
void SetPart( int thePartIndex, const TCollection_AsciiString& theNewPart,
TCollection_AsciiString& theOldPart);
void FindAllArgs() { GetArg(1); }
+
public:
_pyCommand() {};
_pyCommand( const TCollection_AsciiString& theString, int theNb )
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 ); }
+ bool SetDependentCmdsAfter() const;
+
+ bool AddAccessorMethod( _pyID theObjectID, const char* theAcsMethod );
+
+ DEFINE_STANDARD_RTTI (_pyCommand)
};
/*!
* \brief Root of all objects
*/
-typedef TCollection_AsciiString _pyID;
class _pyObject: public Standard_Transient
{
- Handle(_pyCommand) myCreationCmd;
+ Handle(_pyCommand) myCreationCmd;
public:
_pyObject(const Handle(_pyCommand)& theCreationCmd): myCreationCmd(theCreationCmd) {}
const _pyID& GetID() { return myCreationCmd->GetResultValue(); }
const Handle(_pyCommand)& GetCreationCmd() { return myCreationCmd; }
+ void SetCreationCmd( Handle(_pyCommand) cmd ) { myCreationCmd = cmd; }
int GetCommandNb() { return myCreationCmd->GetOrderNb(); }
virtual void Process(const Handle(_pyCommand) & theCommand) = 0;
virtual void Flush() = 0;
+ virtual const char* AccessorMethod() const;
+
+ DEFINE_STANDARD_RTTI (_pyObject)
};
/*!
void SetCommandAfter( Handle(_pyCommand) theCmd, Handle(_pyCommand) theAfterCmd );
std::list< Handle(_pyCommand) >& GetCommands() { return myCommands; }
void SetAccessorMethod(const _pyID& theID, const char* theMethod );
+ const char* AccessorMethod() const { return SMESH_2smeshpy::GenName(); }
private:
std::map< _pyID, Handle(_pyMesh) > myMeshes;
std::list< Handle(_pyHypothesis) > myHypos;
std::list< Handle(_pyCommand) > myCommands;
int myNbCommands;
+ bool myHasPattern;
Resource_DataMapOfAsciiStringAsciiString& myID2AccessorMethod;
+
+ DEFINE_STANDARD_RTTI (_pyGen)
};
/*!
* \brief Contains commands concerning mesh substructures
*/
+#define _pyMesh_ACCESS_METHOD "GetMesh()"
class _pyMesh: public _pyObject
{
+ std::list< Handle(_pyHypothesis) > myHypos;
std::list< Handle(_pyCommand) > myAddHypCmds;
- std::list< Handle(_pyCommand) > mySubmeshes;
+ std::list< Handle(_pyCommand) > mySubmeshes;
+ bool myHasEditor;
public:
_pyMesh(const Handle(_pyCommand) theCreationCmd);
const _pyID& GetGeom() { return GetCreationCmd()->GetArg(1); }
void Process( const Handle(_pyCommand)& theCommand);
void Flush();
+ const char* AccessorMethod() const { return _pyMesh_ACCESS_METHOD; }
private:
static void AddMeshAccess( const Handle(_pyCommand)& theCommand )
- { theCommand->SetObject( theCommand->GetObject() + ".GetMesh()" ); }
+ { theCommand->SetObject( theCommand->GetObject() + "." _pyMesh_ACCESS_METHOD ); }
+
+ DEFINE_STANDARD_RTTI (_pyMesh)
};
+#undef _pyMesh_ACCESS_METHOD
/*!
- * \brief Root class for smesh.Mesh_Algorithm
+ * \brief Root class for hypothesis
+ *
+ * HOWTO assure convertion of a new hypothesis
+ * In NewHypothesis():
+ * 1. add a case for the name of the new hypothesis and
+ * 2. initialize _pyHypothesis fields:
+ * . myDim - hypothesis dimention;
+ * . myType - type name of the algorithm creating the hypothesis;
+ * . myCreationMethod - method name of the algorithm creating the hypothesis;
+ * . append to myArgMethods interface methods setting param values in the
+ * order they are used when myCreationMethod is called. It is supposed that
+ * each interface method sets only one parameter, if it is not so, you are
+ * to derive a specific class from _pyHypothesis that would redefine Process(),
+ * see _pyComplexParamHypo for example
*/
class _pyHypothesis: public _pyObject
{
// void SetGeom( const _pyID& theGeomID ) { myGeom = theGeomID; }
void Process( const Handle(_pyCommand)& theCommand);
void Flush();
+
+ DEFINE_STANDARD_RTTI (_pyHypothesis)
};
/*!
public:
_pyComplexParamHypo(const Handle(_pyCommand)& theCreationCmd): _pyHypothesis(theCreationCmd) {}
void Process( const Handle(_pyCommand)& theCommand);
+
+ DEFINE_STANDARD_RTTI (_pyComplexParamHypo)
};
DEFINE_STANDARD_HANDLE (_pyComplexParamHypo, _pyHypothesis);
_pyNumberOfSegmentsHyp(const Handle(_pyCommand)& theCrCmd): _pyHypothesis(theCrCmd) {}
virtual bool Addition2Creation( const Handle(_pyCommand)& theAdditionCmd,
const _pyID& theMesh);
+ void Flush();
+
+ DEFINE_STANDARD_RTTI (_pyNumberOfSegmentsHyp)
};
DEFINE_STANDARD_HANDLE (_pyNumberOfSegmentsHyp, _pyHypothesis);
_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)
};
#endif