X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_NoteBook.cxx;h=9572cbe4ce8d989668f73a7b5401bed78efa8338;hb=6239bbad3bbae7a33e21494c43df258cd49a7f99;hp=57dd307c65c0590b98a6a36564d1f4e19b537af7;hpb=17fdea7a8c011245bb07f6c7cf51fbae85a893ac;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_NoteBook.cxx b/src/SMESH_I/SMESH_NoteBook.cxx index 57dd307c6..9572cbe4c 100644 --- a/src/SMESH_I/SMESH_NoteBook.cxx +++ b/src/SMESH_I/SMESH_NoteBook.cxx @@ -217,7 +217,6 @@ SMESH_NoteBook::~SMESH_NoteBook() //================================================================================ void SMESH_NoteBook::ReplaceVariables() { - for(int i=0;i<_commands.size();i++) { Handle(_pyCommand) aCmd = _commands[i]; TCollection_AsciiString aMethod = aCmd->GetMethod(); @@ -243,7 +242,7 @@ void SMESH_NoteBook::ReplaceVariables() } } - if(it != _objectMap.end() && !aMethod.IsEmpty()) { + if(it != _objectMap.end()) { ObjectStates *aStates = (*it).second; // Case for LocalLength hypothesis if(aStates->GetObjectType().IsEqual("LocalLength") && aStates->GetCurrectState().size() >= 2) { @@ -269,7 +268,9 @@ void SMESH_NoteBook::ReplaceVariables() } } - else if(aStates->GetObjectType().IsEqual("Arithmetic1D")) { + // Case for Arithmetic1D and StartEndLength hypothesis + else if(aStates->GetObjectType().IsEqual("Arithmetic1D") || + aStates->GetObjectType().IsEqual("StartEndLength")) { if(aMethod == "SetLength" && aStates->GetCurrectState().size() >= 2) { if(aCmd->GetArg(2) == "1" && !aStates->GetCurrectState().at(0).IsEmpty()) @@ -279,6 +280,16 @@ void SMESH_NoteBook::ReplaceVariables() aStates->IncrementState(); } } + + //Case for Deflection1D hypothesis + else if(aStates->GetObjectType().IsEqual("Deflection1D")){ + if(aMethod == "SetDeflection" && aStates->GetCurrectState().size() >= 1) { + if(!aStates->GetCurrectState().at(0).IsEmpty() ) + aCmd->SetArg(1,aStates->GetCurrectState().at(0)); + aStates->IncrementState(); + } + } + // Case for LayerDistribution hypothesis (not finished yet) else if(aStates->GetObjectType() == "LayerDistribution") { if(aMethod == "SetLayerDistribution"){ @@ -286,9 +297,76 @@ void SMESH_NoteBook::ReplaceVariables() aLDStates->AddDistribution(aCmd->GetArg(1)); } } + + // Case for MaxElementArea hypothesis + else if(aStates->GetObjectType().IsEqual("MaxElementArea")){ + if(aMethod == "SetMaxElementArea" && aStates->GetCurrectState().size() >= 1) { + if(!aStates->GetCurrectState().at(0).IsEmpty() ) + aCmd->SetArg(1,aStates->GetCurrectState().at(0)); + aStates->IncrementState(); + } + } + + // Case for MaxElementVolume hypothesis + else if(aStates->GetObjectType().IsEqual("MaxElementVolume")){ + if(aMethod == "SetMaxElementVolume" && aStates->GetCurrectState().size() >= 1) { + if(!aStates->GetCurrectState().at(0).IsEmpty() ) + aCmd->SetArg(1,aStates->GetCurrectState().at(0)); + aStates->IncrementState(); + } + } + // Case for NETGEN_Parameters_2D hypothesis + else if(aStates->GetObjectType().IsEqual("NETGEN_Parameters_2D")){ + if(aMethod == "SetMaxSize" && aStates->GetCurrectState().size() >= 1) { + if(!aStates->GetCurrectState().at(0).IsEmpty() ) + aCmd->SetArg(1,aStates->GetCurrectState().at(0)); + aStates->IncrementState(); + } + else if(aMethod == "SetGrowthRate" && aStates->GetCurrectState().size() >= 2) { + if(!aStates->GetCurrectState().at(1).IsEmpty() ) + aCmd->SetArg(1,aStates->GetCurrectState().at(1)); + aStates->IncrementState(); + } + else if(aMethod == "SetNbSegPerEdge" && aStates->GetCurrectState().size() >= 3) { + if(!aStates->GetCurrectState().at(2).IsEmpty() ) + aCmd->SetArg(1,aStates->GetCurrectState().at(2)); + aStates->IncrementState(); + } + else if(aMethod == "SetNbSegPerRadius" && aStates->GetCurrectState().size() >= 4) { + if(!aStates->GetCurrectState().at(3).IsEmpty() ) + aCmd->SetArg(1,aStates->GetCurrectState().at(3)); + aStates->IncrementState(); + } + } + + // Case for NumberOfLayers hypothesis + else if(aStates->GetObjectType().IsEqual("NumberOfLayers")){ + if(aMethod == "SetNumberOfLayers" && aStates->GetCurrectState().size() >= 1) { + if(!aStates->GetCurrectState().at(0).IsEmpty() ) + aCmd->SetArg(1,aStates->GetCurrectState().at(0)); + aStates->IncrementState(); + } + } + // Case for NumberOfSegments hypothesis + else if(aStates->GetObjectType().IsEqual("NumberOfSegments")){ + if(aMethod == "SetNumberOfSegments" && aStates->GetCurrectState().size() >= 1) { + if(!aStates->GetCurrectState().at(0).IsEmpty() ) + aCmd->SetArg(1,aStates->GetCurrectState().at(0)); + if(aStates->GetCurrectState().size()==1) + aStates->IncrementState(); + } + else if (aMethod == "SetScaleFactor" && aStates->GetCurrectState().size() >= 2) { + if(!aStates->GetCurrectState().at(1).IsEmpty() ) + aCmd->SetArg(1,aStates->GetCurrectState().at(1)); + aStates->IncrementState(); + } + } + else if(aStates->GetObjectType().IsEqual("Mesh")) { - if(aMethod.IsEqual("Translate") || + TState aCurrentState = aStates->GetCurrectState(); + int aCurrentStateSize = aCurrentState.size(); + if(aMethod.IsEqual("Translate") || aMethod.IsEqual("TranslateMakeGroups") || aMethod.IsEqual("TranslateMakeMesh")) { bool isVariableFound = false; @@ -300,19 +378,165 @@ void SMESH_NoteBook::ReplaceVariables() } } if(anArgIndex > 0) { - for(int j = 0; j <= 2; j++) { - if(!aStates->GetCurrectState().at(j).IsEmpty()) { - isVariableFound = true; - aCmd->SetArg(anArgIndex+j, aStates->GetCurrectState().at(j)); - } - } + if(aCurrentStateSize == 3) { // translation by dx, dy, dz + for(int j = 0; j < aCurrentStateSize; j++) { + if(!aCurrentState.at(j).IsEmpty()) { + isVariableFound = true; + aCmd->SetArg(anArgIndex+j, aCurrentState.at(j)); + } + } + } + else if(aCurrentStateSize == 6) { // translation by x1, x2, y1, y2, z1, z2 + isVariableFound = true; + for(int j = 0; j < 3; j++) { + TCollection_AsciiString anArg = aCmd->GetArg(anArgIndex+j); + TCollection_AsciiString aValue1 = aCurrentState.at(2*j), aValue2 = aCurrentState.at(2*j+1); + bool aV1 = !aValue1.IsEmpty(); + bool aV2 = !aValue2.IsEmpty(); + double aValue, aCurrentValue = anArg.IsRealValue() ? anArg.RealValue() : 0; + if(aV1 && !aV2) { + if(!GetReal(aValue1, aValue)) + aValue = 0; + aValue2 = TCollection_AsciiString( aValue + aCurrentValue ); + } + else if(!aV1 && aV2) { + if(!GetReal(aValue2, aValue)) + aValue = 0; + aValue1 = TCollection_AsciiString( aValue - aCurrentValue ); + } + else if(!aV1 && !aV2) { + aValue1 = TCollection_AsciiString( 0 ); + aValue2 = TCollection_AsciiString( aCurrentValue ); + } + aCmd->SetArg(anArgIndex+j, aValue1 + ", " + aValue2 ); + } + } } if(isVariableFound) { - aCmd->SetArg(anArgIndex - 1, TCollection_AsciiString(SMESH_2smeshpy::SmeshpyName())+".PointStructStr"); + TCollection_AsciiString aDim; + if(aCurrentStateSize == 6) + aDim = "6"; + aCmd->SetArg(anArgIndex - 1, TCollection_AsciiString(SMESH_2smeshpy::SmeshpyName())+".PointStructStr"+aDim); aCmd->SetArg(anArgIndex - 2, TCollection_AsciiString(SMESH_2smeshpy::SmeshpyName())+".DirStructStr"); } aStates->IncrementState(); } + else if(aMethod.IsEqual("Rotate") || + aMethod.IsEqual("RotateMakeGroups") || + aMethod.IsEqual("RotateMakeMesh") || + aMethod.IsEqual("RotationSweep") || + aMethod.IsEqual("RotationSweepMakeGroups") || + aMethod.IsEqual("Mirror") || + aMethod.IsEqual("MirrorMakeGroups")) { + bool isSubstitute = false; + int anArgIndex = 0; + for(int i = 1, n = aCmd->GetNbArgs(); i <= n; i++) { + if(aCmd->GetArg(i).IsEqual("SMESH.AxisStruct")) { + anArgIndex = i+1; + break; + } + } + if(anArgIndex > 0) { + for(int j = 0; j < aCurrentStateSize; j++) { + if(!aCurrentState.at(j).IsEmpty()) { + if(j < 6) // 0-5 - axis struct, 6 - angle (rotation & sweep), 7-8 - nbSteps and tolerance (sweep) + isSubstitute = true; + aCmd->SetArg(anArgIndex+j, aCurrentState.at(j)); + } + } + } + if(isSubstitute) + aCmd->SetArg(anArgIndex - 1, TCollection_AsciiString(SMESH_2smeshpy::SmeshpyName())+".AxisStructStr"); + aStates->IncrementState(); + } + else if(aMethod.IsEqual("AddNode") || + aMethod.IsEqual("MoveClosestNodeToPoint")) { + for(int j = 0; j < aCurrentStateSize; j++) { + if(!aCurrentState.at(j).IsEmpty()) + aCmd->SetArg(j+1, aCurrentState.at(j)); + } + aStates->IncrementState(); + } + else if(aMethod.IsEqual("MoveNode")) { + for(int j = 0; j < aCurrentStateSize; j++) { + if(!aCurrentState.at(j).IsEmpty()) + aCmd->SetArg(j+2, aCurrentState.at(j)); + } + aStates->IncrementState(); + } + else if(aMethod.IsEqual("ExtrusionSweep") || + aMethod.IsEqual("ExtrusionSweepMakeGroups")) { + bool isSubstitute = false; + int anArgIndex = 0; + for(int i = 1, n = aCmd->GetNbArgs(); i <= n; i++) { + if(aCmd->GetArg(i).IsEqual("SMESH.PointStruct")) { + anArgIndex = i+1; + break; + } + } + if(anArgIndex > 0) { + for(int j = 0; j < aCurrentStateSize; j++) { + if(!aCurrentState.at(j).IsEmpty()) { + if(j < 3) // 0-2 - dir struct, 3 - number of steps + isSubstitute = true; + aCmd->SetArg(anArgIndex+j, aCurrentState.at(j)); + } + } + } + if(isSubstitute) { + aCmd->SetArg(anArgIndex - 1, TCollection_AsciiString(SMESH_2smeshpy::SmeshpyName())+".PointStructStr"); + aCmd->SetArg(anArgIndex - 2, TCollection_AsciiString(SMESH_2smeshpy::SmeshpyName())+".DirStructStr"); + } + aStates->IncrementState(); + } + else if(aMethod.IsEqual("ExtrusionAlongPath") || + aMethod.IsEqual("ExtrusionAlongPathMakeGroups") || + /* workaround for a bug in the command parsing algorithm */ + aCmd->GetString().Search("ExtrusionAlongPathMakeGroups") != -1) { + int aNbAngles = aCurrentStateSize-3; // State looks like "Angle1:...:AngleN:X:Y:Z" + bool isSubstitute = false; + int anArgIndex = 0; + for(int i = 1, n = aCmd->GetNbArgs(); i <= n; i++) { + if(aCmd->GetArg(i).IsEqual("SMESH.PointStruct")) { + anArgIndex = i-1-aNbAngles; + break; + } + } + if(anArgIndex > 0) { + int j = 0; + for(; j < aNbAngles; j++) { + if(!aCurrentState.at(j).IsEmpty()) { + aCmd->SetArg(anArgIndex+j-1, aCurrentState.at(j)); + } + } + for(; j < aNbAngles+3; j++) { + if(!aCurrentState.at(j).IsEmpty()) { + isSubstitute = true; + aCmd->SetArg(anArgIndex+j+2, aCurrentState.at(j)); + } + } + } + if(isSubstitute) + aCmd->SetArg(anArgIndex + aNbAngles + 1, + TCollection_AsciiString(SMESH_2smeshpy::SmeshpyName())+".PointStructStr"); + aStates->IncrementState(); + } + else if(aMethod.IsEqual("TriToQuad") || + aMethod.IsEqual("Concatenate") || + aMethod.IsEqual("ConcatenateWithGroups")) { + if(aCurrentStateSize && !aCurrentState.at(0).IsEmpty()) + aCmd->SetArg(aCmd->GetNbArgs(), aCurrentState.at(0)); + aStates->IncrementState(); + } + else if(aMethod.IsEqual("Smooth") || + aMethod.IsEqual("SmoothParametric")) { + int anArgIndex = aCmd->GetNbArgs() - 2; + for(int j = 0; j < aCurrentStateSize; j++) { + if(!aCurrentState.at(j).IsEmpty()) + aCmd->SetArg(anArgIndex+j, aCurrentState.at(j)); + } + aStates->IncrementState(); + } } } if(MYDEBUG) { @@ -397,6 +621,8 @@ void SMESH_NoteBook::InitObjectMap() //================================================================================ void SMESH_NoteBook::AddCommand(const TCollection_AsciiString& theString) { + if(MYDEBUG) + cout<GetString()+"\n"; return aResult; } + +//================================================================================ +/*! + * \brief Return value of the variable + */ +//================================================================================ +bool SMESH_NoteBook::GetReal(const TCollection_AsciiString& theVarName, double& theValue) +{ + bool ok = false; + + SMESH_Gen_i *aGen = SMESH_Gen_i::GetSMESHGen(); + if(!aGen) + return ok; + + SALOMEDS::Study_ptr aStudy = aGen->GetCurrentStudy(); + if(aStudy->_is_nil()) + return ok; + + TCollection_AsciiString aVarName = theVarName; + aVarName.RemoveAll('\"'); + + if(aVarName.IsEmpty()) + return ok; + + const char* aName = aVarName.ToCString(); + if(aStudy->IsVariable(aName) && (aStudy->IsReal(aName) || aStudy->IsInteger(aName))) { + theValue = aStudy->GetReal(aVarName.ToCString()); + ok = true; + } + + return ok; +}