-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015 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
// 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.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
#include <LDOMParser.hxx>
-#ifdef WNT
+#ifdef WIN32
#include <windows.h>
#else
#include <unistd.h>
_AString comment;
_pyID obj = cmd->GetObject();
+ if ( obj.Search( "print " ) == 1 )
+ return; // print statement
+
if ( !obj.IsEmpty() && obj.Value( obj.Length() ) == ')' )
// remove an accessor method
obj = _pyCommand( obj ).GetObject();
// - FT_EntityType = 36
// v 7.3.0: FT_Undefined == 46, new items:
// - FT_ConnectedElements = 39
+ // v 7.6.0: FT_Undefined == 47, new items:
+ // - FT_BelongToMeshGroup = 22
//
// It's necessary to continue recording this history and to fill
// undef2newItems (see below) accordingly.
undef2newItems[ 44 ].push_back( 37 );
undef2newItems[ 45 ].push_back( 36 );
undef2newItems[ 46 ].push_back( 39 );
+ undef2newItems[ 47 ].push_back( 22 );
ASSERT( undef2newItems.rbegin()->first == SMESH::FT_Undefined );
}
*/
//================================================================================
- void StructToList( Handle( _pyCommand)& theCommand )
+ void StructToList( Handle( _pyCommand)& theCommand, const bool checkMethod=true )
{
static TStringSet methodsAcceptingList;
if ( methodsAcceptingList.empty() ) {
"ExtrusionSweepObjectMakeGroups","ExtrusionSweepObject0D",
"ExtrusionSweepObject1D","ExtrusionSweepObject1DMakeGroups",
"ExtrusionSweepObject2D","ExtrusionSweepObject2DMakeGroups",
+ "ExtrusionSweepObjects","RotationSweepObjects","ExtrusionAlongPathObjects",
"Translate","TranslateMakeGroups","TranslateMakeMesh",
"TranslateObject","TranslateObjectMakeGroups", "TranslateObjectMakeMesh",
- "ExtrusionAlongPathX","ExtrusionAlongPathObjX"
+ "ExtrusionAlongPathX","ExtrusionAlongPathObjX","SplitHexahedraIntoPrisms"
,"" }; // <- mark of the end
methodsAcceptingList.Insert( methodNames );
}
- if ( methodsAcceptingList.Contains( theCommand->GetMethod() ))
+ if ( !checkMethod || methodsAcceptingList.Contains( theCommand->GetMethod() ))
{
for ( int i = theCommand->GetNbArgs(); i > 0; --i )
{
"ExportCGNS","ExportGMF",
"Create0DElementsOnAllNodes","Reorient2D","QuadTo4Tri",
"ScaleMakeGroups","Scale","ScaleMakeMesh",
- "FindCoincidentNodesOnPartBut","DoubleElements"
+ "FindCoincidentNodesOnPartBut","DoubleElements",
+ "ExtrusionSweepObjects","RotationSweepObjects","ExtrusionAlongPathObjects"
,"" }; // <- mark of the end
methodsAcceptingList.Insert( methodNames );
}
if ( Type == "SMESH.FT_ElemGeomType" )
{
// set SMESH.GeometryType instead of a numerical Threshold
- const int nbTypes = SMESH::Geom_BALL+1;
+ const int nbTypes = SMESH::Geom_LAST;
const char* types[nbTypes] = {
"Geom_POINT", "Geom_EDGE", "Geom_TRIANGLE", "Geom_QUADRANGLE", "Geom_POLYGON",
"Geom_TETRA", "Geom_PYRAMID", "Geom_HEXA", "Geom_PENTA", "Geom_HEXAGONAL_PRISM",
"Geom_POLYHEDRA", "Geom_BALL" };
if ( -1 < iGeom && iGeom < nbTypes )
Threshold = SMESH + types[ iGeom ];
+#ifdef _DEBUG_
+ // is types complete? (compilation failure mains that enum GeometryType changed)
+ int _assert[( sizeof(types) / sizeof(const char*) == nbTypes ) ? 1 : -1 ];
+#endif
}
if (Type == "SMESH.FT_EntityType")
{
// set SMESH.EntityType instead of a numerical Threshold
- const int nbTypes = SMESH::Entity_Ball+1;
+ const int nbTypes = SMESH::Entity_Last;
const char* types[nbTypes] = {
"Entity_Node", "Entity_0D", "Entity_Edge", "Entity_Quad_Edge",
"Entity_Triangle", "Entity_Quad_Triangle", "Entity_BiQuad_Triangle",
"Entity_Polyhedra", "Entity_Quad_Polyhedra", "Entity_Ball" };
if ( -1 < iGeom && iGeom < nbTypes )
Threshold = SMESH + types[ iGeom ];
+#ifdef _DEBUG_
+ // is types complete? (compilation failure mains that enum EntityType changed)
+ int _assert[( sizeof(types) / sizeof(const char*) == nbTypes ) ? 1 : -1 ];
+#endif
}
}
if ( ThresholdID.Length() != 2 ) // neither '' nor ""
list< Handle(_pyHypothesis) >::iterator hyp;
if ( !myLastComputeCmd.IsNull() )
{
- for ( hyp = myHypos.begin(); hyp != myHypos.end(); ++hyp )
- (*hyp)->ComputeDiscarded( myLastComputeCmd );
+ // check if the previously computed mesh has been edited,
+ // if so then we do not clear the previous Compute()
+ bool toClear = true;
+ if ( myLastComputeCmd->GetMethod() == "Compute" )
+ {
+ list< Handle(_pyMeshEditor)>::iterator e = myEditors.begin();
+ for ( ; e != myEditors.end() && toClear; ++e )
+ {
+ list< Handle(_pyCommand)>& cmds = (*e)->GetProcessedCmds();
+ list< Handle(_pyCommand) >::reverse_iterator cmd = cmds.rbegin();
+ if ( cmd != cmds.rend() &&
+ (*cmd)->GetOrderNb() > myLastComputeCmd->GetOrderNb() )
+ toClear = false;
+ }
+ }
+ if ( toClear )
+ {
+ // clear hyp commands called before myLastComputeCmd
+ for ( hyp = myHypos.begin(); hyp != myHypos.end(); ++hyp )
+ (*hyp)->ComputeDiscarded( myLastComputeCmd );
- myLastComputeCmd->Clear();
+ myLastComputeCmd->Clear();
+ }
}
myLastComputeCmd = theCommand;
//
// remove "PartTo" from the method
TCollection_AsciiString newMethod = method;
- newMethod.Remove( 7, 6 );
+ newMethod.Remove( /*where=*/7, /*howmany=*/6 );
theCommand->SetMethod( newMethod );
- // make the 1st arg be the last one (or last but one for ExportMED())
+ // make the 1st arg be the last one (or last but three for ExportMED())
_pyID partID = theCommand->GetArg( 1 );
- int nbArgs = theCommand->GetNbArgs() - (newMethod == "ExportMED");
+ int nbArgs = theCommand->GetNbArgs() - 3 * (newMethod == "ExportMED");
for ( int i = 2; i <= nbArgs; ++i )
theCommand->SetArg( i-1, theCommand->GetArg( i ));
theCommand->SetArg( nbArgs, partID );
addCmd->Clear();
theCommand->Clear();
}
+ else
+ {
+ // mesh.AddHypothesis(geom, hyp) --> mesh.AddHypothesis(hyp, geom=0)
+ addCmd->RemoveArgs();
+ addCmd->SetArg( 1, hypID );
+ if ( isLocal )
+ addCmd->SetArg( 2, geomID );
+ }
}
else
{
if ( sameMethods.empty() ) {
const char * names[] =
{ "ExportDAT","ExportUNV","ExportSTL","ExportSAUV", "RemoveGroup","RemoveGroupWithContents",
- "GetGroups","UnionGroups","IntersectGroups","CutGroups","GetLog","GetId","ClearLog",
- "GetStudyId","HasDuplicatedGroupNamesMED","GetMEDMesh","NbNodes","NbElements",
+ "GetGroups","UnionGroups","IntersectGroups","CutGroups","CreateDimGroup","GetLog","GetId",
+ "ClearLog","GetStudyId","HasDuplicatedGroupNamesMED","GetMEDMesh","NbNodes","NbElements",
"NbEdges","NbEdgesOfOrder","NbFaces","NbFacesOfOrder","NbTriangles",
"NbTrianglesOfOrder","NbQuadrangles","NbQuadranglesOfOrder","NbPolygons","NbVolumes",
"NbVolumesOfOrder","NbTetras","NbTetrasOfOrder","NbHexas","NbHexasOfOrder",
"GetSubMeshElementsId","GetSubMeshNodesId","GetSubMeshElementType","Dump","GetNodeXYZ",
"GetNodeInverseElements","GetShapeID","GetShapeIDForElem","GetElemNbNodes",
"GetElemNode","IsMediumNode","IsMediumNodeOfAnyElem","ElemNbEdges","ElemNbFaces",
+ "GetElemFaceNodes", "GetFaceNormal", "FindElementByNodes",
"IsPoly","IsQuadratic","BaryCenter","GetHypothesisList", "SetAutoColor", "GetAutoColor",
"Clear", "ConvertToStandalone", "GetMeshOrder", "SetMeshOrder"
,"" }; // <- mark of end
"AddNode","Add0DElement","AddEdge","AddFace","AddPolygonalFace","AddBall",
"AddVolume","AddPolyhedralVolume","AddPolyhedralVolumeByFaces",
"MoveNode", "MoveClosestNodeToPoint",
- "InverseDiag","DeleteDiag","Reorient","ReorientObject",
+ "InverseDiag","DeleteDiag","Reorient","ReorientObject","Reorient2DBy3D",
"TriToQuad","TriToQuadObject", "QuadTo4Tri", "SplitQuad","SplitQuadObject",
"BestSplit","Smooth","SmoothObject","SmoothParametric","SmoothParametricObject",
"ConvertToQuadratic","ConvertFromQuadratic","RenumberNodes","RenumberElements",
"RotationSweep","RotationSweepObject","RotationSweepObject1D","RotationSweepObject2D",
"ExtrusionSweep","AdvancedExtrusion","ExtrusionSweepObject","ExtrusionSweepObject1D",
- "ExtrusionSweepObject2D","ExtrusionAlongPath","ExtrusionAlongPathObject",
+ "ExtrusionByNormal", "ExtrusionSweepObject2D","ExtrusionAlongPath","ExtrusionAlongPathObject",
"ExtrusionAlongPathX","ExtrusionAlongPathObject1D","ExtrusionAlongPathObject2D",
+ "ExtrusionSweepObjects","RotationSweepObjects","ExtrusionAlongPathObjects",
"Mirror","MirrorObject","Translate","TranslateObject","Rotate","RotateObject",
"FindCoincidentNodes","MergeNodes","FindEqualElements",
"MergeElements","MergeEqualElements","SewFreeBorders","SewConformFreeBorders",
"GetLastCreatedElems",
"MirrorMakeMesh","MirrorObjectMakeMesh","TranslateMakeMesh","TranslateObjectMakeMesh",
"Scale","ScaleMakeMesh","RotateMakeMesh","RotateObjectMakeMesh","MakeBoundaryMesh",
- "MakeBoundaryElements", "SplitVolumesIntoTetra",
+ "MakeBoundaryElements", "SplitVolumesIntoTetra","SplitHexahedraIntoPrisms",
"DoubleElements","DoubleNodes","DoubleNode","DoubleNodeGroup","DoubleNodeGroups",
"DoubleNodeElem","DoubleNodeElemInRegion","DoubleNodeElemGroup",
"DoubleNodeElemGroupInRegion","DoubleNodeElemGroups","DoubleNodeElemGroupsInRegion",
hyp->SetConvMethodAndType( "SetGrid", "Cartesian_3D");
for ( int iArg = 0; iArg < 4; ++iArg )
hyp->setCreationArg( iArg+1, "[]");
+ hyp->AddAccumulativeMethod( "SetGrid" );
+ hyp->AddAccumulativeMethod( "SetGridSpacing" );
}
else
{
myArgCommands.push_back( theCommand );
usedCommand = true;
while ( crMethod.myArgs.size() < i+1 )
- crMethod.myArgs.push_back( "[]" );
+ crMethod.myArgs.push_back( "None" );
crMethod.myArgs[ i ] = theCommand->GetArg( crMethod.myArgNb[i] );
}
}
{
// CartesianParameters3D hyp
- if ( theCommand->GetMethod() == "SetSizeThreshold" )
+ if ( theCommand->GetMethod() == "SetSizeThreshold" ||
+ theCommand->GetMethod() == "SetToAddEdges" )
{
- setCreationArg( 4, theCommand->GetArg( 1 ));
+ int iEdges = ( theCommand->GetMethod().Value( 4 ) == 'T' );
+ setCreationArg( 4+iEdges, theCommand->GetArg( 1 ));
myArgCommands.push_back( theCommand );
return;
}
myCurCrMethod->myArgs[ iArg ] += "]";
}
myArgCommands.push_back( theCommand );
- rememberCmdOfParameter( theCommand );
+ //rememberCmdOfParameter( theCommand ); -- these commands are marked as
+ // accumulative, else, if the creation
+ // is not converted, commands for axes 1 and 2 are lost
return;
}
}
void _pyComplexParamHypo::Flush()
{
+ list < Handle(_pyCommand) >::iterator cmd;
if ( IsWrapped() )
{
- list < Handle(_pyCommand) >::iterator cmd = myUnusedCommands.begin();
- for ( ; cmd != myUnusedCommands.end(); ++cmd )
+ for ( cmd = myUnusedCommands.begin(); cmd != myUnusedCommands.end(); ++cmd )
if ((*cmd)->GetMethod() == "SetObjectEntry" )
(*cmd)->Clear();
}
+
+ // if ( GetAlgoType() == "Cartesian_3D" )
+ // {
+ // _pyID algo = myCreationCmd->GetObject();
+ // for ( cmd = myProcessedCmds.begin(); cmd != myProcessedCmds.end(); ++cmd )
+ // {
+ // if ( IsWrapped() )
+ // {
+ // StructToList( *cmd, /*checkMethod=*/false );
+ // const _AString & method = (*cmd)->GetMethod();
+ // if ( method == "SetFixedPoint" )
+ // (*cmd)->SetObject( algo );
+ // }
+ // }
+ // }
}
//================================================================================
/*!
* \brief Convert methods of 1D hypotheses to my own methods
- * \param theCommand - The called hypothesis method
+ * \param theCommand - The called hypothesis method
*/
//================================================================================
{
int nbCalls = 0;
std::list< Handle(_pyCommand) >& cmds = GetProcessedCmds();
- std::list< Handle(_pyCommand) >::const_iterator cmd = cmds.begin();
- for ( ; cmd != cmds.end(); ++cmd )
+ std::list< Handle(_pyCommand) >::iterator cmd = cmds.begin();
+ for ( ; cmd != cmds.end(); )
// check of cmd emptiness is not enough as object can change
- nbCalls += ( ( *cmd )->GetString().Search( GetID() ) > 0 );
+ if (( *cmd )->GetString().Search( GetID() ) > 0 )
+ ++nbCalls, ++cmd;
+ else
+ cmd = cmds.erase( cmd ); // save the cmd from clearing
toErase = ( nbCalls < 1 );
}
theCommand->SetMethod( "GetFilterFromCriteria" );
// Swap "aFilterManager.CreateFilter()" and "smesh.GetFilterFromCriteria(criteria)"
- // GetCreationCmd()->Clear();
- // GetCreationCmd()->GetString() = theCommand->GetString();
- // theCommand->Clear();
- // theCommand->AddDependantCmd( GetCreationCmd() );
- // why swap?
GetCreationCmd()->Clear();
+ GetCreationCmd()->GetString() = theCommand->GetString();
+ theCommand->Clear();
+ theCommand->AddDependantCmd( GetCreationCmd() );
+ // why swap? -- it's needed
+ //GetCreationCmd()->Clear();
}
else if ( theCommand->GetMethod() == "SetMesh" )
{