X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_2smeshpy.hxx;h=aabba67dd2f004461c9c273069d755f4e0775dbc;hb=7cab0901cbf9895ce79a5af2390f310136a94802;hp=71500c7b5d6d590720c8a84c0bb4bcb974f993e1;hpb=7ba3124c8a4ba32308bbc40957ee9246374aa590;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_2smeshpy.hxx b/src/SMESH_I/SMESH_2smeshpy.hxx index 71500c7b5..aabba67dd 100644 --- a/src/SMESH_I/SMESH_2smeshpy.hxx +++ b/src/SMESH_I/SMESH_2smeshpy.hxx @@ -1,3 +1,22 @@ +// 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/ +// // File : SMESH_smesh.hxx // Created : Fri Nov 18 12:05:18 2005 // Author : Edward AGAPOV (eap) @@ -27,6 +46,8 @@ * * 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; @@ -71,23 +92,31 @@ DEFINE_STANDARD_HANDLE (_pyMesh ,_pyObject); 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 ) @@ -116,24 +145,31 @@ 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 ); } + 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) }; @@ -157,11 +193,13 @@ public: 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) @@ -170,24 +208,42 @@ private: /*! * \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 { @@ -245,6 +301,7 @@ public: _pyNumberOfSegmentsHyp(const Handle(_pyCommand)& theCrCmd): _pyHypothesis(theCrCmd) {} virtual bool Addition2Creation( const Handle(_pyCommand)& theAdditionCmd, const _pyID& theMesh); + void Flush(); DEFINE_STANDARD_RTTI (_pyNumberOfSegmentsHyp) }; @@ -259,6 +316,7 @@ 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) };