From: ouv Date: Fri, 11 Dec 2009 13:43:46 +0000 (+0000) Subject: Debug X-Git-Tag: PHASE_17_Part1_V3 X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=commitdiff_plain;h=333415e6c9f744a167d1779d9e74e073f122e88c Debug --- diff --git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx index 67d78b4e6..3e7539353 100644 --- a/src/SMESH/SMESH_Mesh.cxx +++ b/src/SMESH/SMESH_Mesh.cxx @@ -1580,3 +1580,20 @@ SMESH_Group* SMESH_Mesh::ConvertToStandalone ( int theGroupID ) return aGroup; } +//======================================================================= +//function : SetParameters +//purpose : +//======================================================================= +void SMESH_Mesh::SetParameters(const std::list& theParameters) +{ + _parameters = theParameters; +} + +//======================================================================= +//function : GetParameters +//purpose : +//======================================================================= +std::list SMESH_Mesh::GetParameters() const +{ + return _parameters; +} diff --git a/src/SMESH/SMESH_Mesh.hxx b/src/SMESH/SMESH_Mesh.hxx index 26339eb09..313fbad50 100644 --- a/src/SMESH/SMESH_Mesh.hxx +++ b/src/SMESH/SMESH_Mesh.hxx @@ -248,6 +248,9 @@ public: SMDSAbs_ElementType GetElementType( const int id, const bool iselem ); + void SetParameters(const std::list& theParameters); + std::list GetParameters() const; + // ostream& Dump(ostream & save); @@ -274,6 +277,9 @@ protected: TopTools_IndexedDataMapOfShapeListOfShape _mapAncestors; +private: + std::list _parameters; + protected: SMESH_Mesh() {}; SMESH_Mesh(const SMESH_Mesh&) {}; diff --git a/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx b/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx index 7a4a55368..13535fe36 100644 --- a/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -293,8 +294,6 @@ bool SMESHGUI_BuildCompoundDlg::ClickOnApply() SMESH::SMESH_Mesh_var aCompoundMesh; if (!myMesh->_is_nil()) { - QStringList aParameters; - aParameters << (CheckBoxMerge->isChecked() ? SpinBoxTol->text() : QString(" ")); try { SUIT_OverrideCursor aWaitCursor; @@ -311,7 +310,8 @@ bool SMESHGUI_BuildCompoundDlg::ClickOnApply() CheckBoxMerge->isChecked(), SpinBoxTol->GetValue()); - //asl: aCompoundMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + if( CheckBoxMerge->isChecked() ) + getNotebook()->setParameters( aCompoundMesh, 1, SpinBoxTol ); SMESH::SetName( SMESH::FindSObject( aCompoundMesh ), LineEditName->text() ); mySMESHGUI->updateObjBrowser(); diff --git a/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx b/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx index 883071d4f..0da6cb99a 100644 --- a/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx @@ -54,6 +54,8 @@ #include #include +#include + #include // OCCT includes @@ -621,8 +623,8 @@ bool SMESHGUI_ExtrusionAlongPathDlg::ClickOnApply() } - //asl: if( retVal == SMESH::SMESH_MeshEditor::EXTR_OK ) - //asl: myMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + if( retVal == SMESH::SMESH_MeshEditor::EXTR_OK ) + getNotebook()->setParameters( myMesh, aParameters ); //wc.stop(); wc.suspend(); diff --git a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx index d37a1ca89..00fdf42e3 100644 --- a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx @@ -53,6 +53,7 @@ #include #include +#include #include // OCCT includes @@ -559,7 +560,7 @@ bool SMESHGUI_ExtrusionDlg::ClickOnApply() aMeshEditor->ExtrusionSweep(myElementsId.inout(), aVector, aNbSteps); } - //asl: myMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + getNotebook()->setParameters( myMesh, aParameters ); } catch (...) { } diff --git a/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx b/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx index 3c262d28a..d9ed467f1 100644 --- a/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #include @@ -410,11 +411,7 @@ bool SMESHGUI_MakeNodeAtPointOp::onApply() } if (aResult) { - QStringList aParameters; - aParameters << myDlg->myX->text(); - aParameters << myDlg->myY->text(); - aParameters << myDlg->myZ->text(); - //asl: aMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + getNotebook()->setParameters( aMesh, 3, myDlg->myX, myDlg->myY, myDlg->myZ ); myDlg->myId->setText(""); diff --git a/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx b/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx index 61bb79ad9..e572b7dc2 100755 --- a/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx @@ -49,6 +49,7 @@ #include #include +#include #include #include #include @@ -475,7 +476,7 @@ bool SMESHGUI_MeshPatternDlg::onApply() aParameters << myNode1->text(); if(myType == Type_3d ) aParameters << myNode2->text(); - //asl: myMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + getNotebook()->setParameters( myMesh, aParameters ); } else { // Applying a pattern to geometrical object if (myType == Type_2d) diff --git a/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx b/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx index 1d71b4208..8883b386c 100644 --- a/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx @@ -39,6 +39,7 @@ // SALOME GUI includes #include #include +#include #include #include #include @@ -326,12 +327,7 @@ bool SMESHGUI_MoveNodesDlg::onApply() bool aResult = false; try { aResult = aMeshEditor->MoveNode(anId, myX->GetValue(), myY->GetValue(), myZ->GetValue()); - - QStringList aParameters; - aParameters << myX->text(); - aParameters << myY->text(); - aParameters << myZ->text(); - //asl: aMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + getNotebook()->setParameters( aMesh, 3, myX, myY, myZ ); } catch (...) { } diff --git a/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx b/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx index f99522b8f..6124ab4d7 100755 --- a/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx @@ -46,6 +46,7 @@ #include #include +#include #include #include @@ -1184,9 +1185,7 @@ bool SMESHGUI_UnionOfTrianglesDlg::process (SMESH::SMESH_MeshEditor_ptr theEdito double aMaxAngle = myMaxAngleSpin->GetValue() * PI / 180.0; bool ok = theEditor->TriToQuad(theIds, aCriterion, aMaxAngle); if( ok ) { - QStringList aParameters; - aParameters << myMaxAngleSpin->text(); - //asl: myMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + getNotebook()->setParameters( myMesh, 1, myMaxAngleSpin ); } return ok; } diff --git a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx index 144791912..2300c93eb 100644 --- a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx @@ -49,6 +49,8 @@ #include #include +#include + #include #include #include @@ -88,14 +90,15 @@ namespace SMESH { - void AddNode( SMESH::SMESH_Mesh_ptr theMesh, float x, float y, float z, const QStringList& theParameters ) + void AddNode( SMESH::SMESH_Mesh_ptr theMesh, float x, float y, float z, + SalomeApp_Notebook* theNotebook, const QStringList& theParameters ) { SUIT_OverrideCursor wc; try { _PTR(SObject) aSobj = SMESH::FindSObject( theMesh ); SMESH::SMESH_MeshEditor_var aMeshEditor = theMesh->GetMeshEditor(); aMeshEditor->AddNode( x, y, z ); - //asl: theMesh->SetParameters( theParameters.join(":").toLatin1().constData() ); + theNotebook->setParameters( theMesh, theParameters ); _PTR(Study) aStudy = GetActiveStudyDocument(); CORBA::Long anId = aStudy->StudyId(); if (TVisualObjPtr aVisualObj = SMESH::GetVisualObj( anId, aSobj->GetID().c_str() ) ) { @@ -417,7 +420,7 @@ bool SMESHGUI_NodesDlg::ClickOnApply() aParameters << SpinBox_Z->text(); mySimulation->SetVisibility( false ); - SMESH::AddNode( myMesh, x, y, z, aParameters ); + SMESH::AddNode( myMesh, x, y, z, getNotebook(), aParameters ); SMESH::SetPointRepresentation( true ); // select myMesh diff --git a/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx b/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx index 0b73a2d99..557619a85 100644 --- a/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx @@ -50,6 +50,7 @@ #include #include #include +#include #include #include @@ -503,17 +504,6 @@ bool SMESHGUI_RevolutionDlg::ClickOnApply() if ( GroupAngle->checkedId() == 1 ) anAngle = anAngle/aNbSteps; - QStringList aParameters; - aParameters << SpinBox_X->text(); - aParameters << SpinBox_Y->text(); - aParameters << SpinBox_Z->text(); - aParameters << SpinBox_DX->text(); - aParameters << SpinBox_DY->text(); - aParameters << SpinBox_DZ->text(); - aParameters << SpinBox_Angle->text(); - aParameters << SpinBox_NbSteps->text(); - aParameters << SpinBox_Tolerance->text(); - try { SUIT_OverrideCursor aWaitCursor; SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); @@ -545,7 +535,10 @@ bool SMESHGUI_RevolutionDlg::ClickOnApply() aMeshEditor->RotationSweep(anElementsId.inout(), anAxis, anAngle, aNbSteps, aTolerance); } - //asl: myMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + getNotebook()->setParameters( myMesh, 9, + SpinBox_X, SpinBox_Y, SpinBox_Z, + SpinBox_DX, SpinBox_DY, SpinBox_DZ, + SpinBox_Angle, SpinBox_NbSteps, SpinBox_Tolerance ); } catch (...) { } diff --git a/src/SMESHGUI/SMESHGUI_RotationDlg.cxx b/src/SMESHGUI/SMESHGUI_RotationDlg.cxx index 0fe1d28a8..2a08cf5b0 100644 --- a/src/SMESHGUI/SMESHGUI_RotationDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_RotationDlg.cxx @@ -49,6 +49,8 @@ #include #include +#include + #include #include #include @@ -415,8 +417,8 @@ bool SMESHGUI_RotationDlg::ClickOnApply() aMeshEditor->RotateObject(mySelectedObject, anAxis, anAngle, false); else aMeshEditor->Rotate(anElementsId, anAxis, anAngle, false); - //asl: if( !myMesh->_is_nil()) - //asl: myMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + if( !myMesh->_is_nil()) + getNotebook()->setParameters( myMesh, aParameters ); break; case COPY_ELEMS_BUTTON: if ( makeGroups ) { @@ -432,8 +434,8 @@ bool SMESHGUI_RotationDlg::ClickOnApply() else aMeshEditor->Rotate(anElementsId, anAxis, anAngle, true); } - //asl: if( !myMesh->_is_nil()) - //asl: myMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + if( !myMesh->_is_nil()) + getNotebook()->setParameters( myMesh, aParameters ); break; case MAKE_MESH_BUTTON: SMESH::SMESH_Mesh_var mesh; @@ -443,8 +445,8 @@ bool SMESHGUI_RotationDlg::ClickOnApply() else mesh = aMeshEditor->RotateMakeMesh(anElementsId, anAxis, anAngle, makeGroups, LineEditNewMesh->text().toLatin1().data()); - //asl: if( !mesh->_is_nil()) - //asl: mesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + if( !mesh->_is_nil()) + getNotebook()->setParameters( mesh, aParameters ); } } catch (...) { } diff --git a/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx b/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx index 1f5bd1e04..224faca60 100644 --- a/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx @@ -50,6 +50,7 @@ #include #include +#include #include #include @@ -351,10 +352,6 @@ bool SMESHGUI_SmoothingDlg::ClickOnApply() long anIterationLimit = (long)SpinBox_IterationLimit->value(); double aMaxAspectRatio = SpinBox_AspectRatio->GetValue(); - QStringList aParameters; - aParameters << SpinBox_IterationLimit->text(); - aParameters << SpinBox_AspectRatio->text(); - SMESH::SMESH_MeshEditor::Smooth_Method aMethod = SMESH::SMESH_MeshEditor::LAPLACIAN_SMOOTH; if (ComboBoxMethod->currentIndex() > 0) aMethod = SMESH::SMESH_MeshEditor::CENTROIDAL_SMOOTH; @@ -381,7 +378,7 @@ bool SMESHGUI_SmoothingDlg::ClickOnApply() anIterationLimit, aMaxAspectRatio, aMethod); } - //asl: myMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + getNotebook()->setParameters( myMesh, 2, SpinBox_IterationLimit, SpinBox_AspectRatio ); } catch (...) { } diff --git a/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx b/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx index f611e8140..41f68875a 100644 --- a/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx @@ -49,6 +49,8 @@ #include #include +#include + #include #include #include @@ -500,8 +502,8 @@ bool SMESHGUI_SymmetryDlg::ClickOnApply() else aMeshEditor->Mirror(anElementsId, aMirror, aMirrorType, false ); - //asl: if( !myMesh->_is_nil()) - //asl: myMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + if( !myMesh->_is_nil()) + getNotebook()->setParameters( myMesh, aParameters ); break; } case COPY_ELEMS_BUTTON: { @@ -518,8 +520,8 @@ bool SMESHGUI_SymmetryDlg::ClickOnApply() else aMeshEditor->Mirror(anElementsId, aMirror, aMirrorType, true); } - //asl: if( !myMesh->_is_nil()) - //asl: myMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + if( !myMesh->_is_nil()) + getNotebook()->setParameters( myMesh, aParameters ); break; } case MAKE_MESH_BUTTON: { @@ -530,8 +532,8 @@ bool SMESHGUI_SymmetryDlg::ClickOnApply() else mesh = aMeshEditor->MirrorMakeMesh(anElementsId, aMirror, aMirrorType, makeGroups, LineEditNewMesh->text().toLatin1().data()); - //asl: if( !mesh->_is_nil()) - //asl: mesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + if( !mesh->_is_nil()) + getNotebook()->setParameters( mesh, aParameters ); break; } } diff --git a/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx b/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx index 74c5720df..6eb20f052 100644 --- a/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx @@ -49,6 +49,8 @@ #include #include +#include + #include #include #include @@ -488,8 +490,8 @@ bool SMESHGUI_TranslationDlg::ClickOnApply() aMeshEditor->TranslateObject(mySelectedObject, aVector, false); else aMeshEditor->Translate(anElementsId, aVector, false); - //asl: if( !myMesh->_is_nil()) - //asl: myMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + if( !myMesh->_is_nil()) + getNotebook()->setParameters( myMesh, aParameters ); break; case COPY_ELEMS_BUTTON: if ( makeGroups ) { @@ -505,8 +507,8 @@ bool SMESHGUI_TranslationDlg::ClickOnApply() else aMeshEditor->Translate(anElementsId, aVector, true); } - //asl: if( !myMesh->_is_nil()) - //asl: myMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + if( !myMesh->_is_nil()) + getNotebook()->setParameters( myMesh, aParameters ); break; case MAKE_MESH_BUTTON: SMESH::SMESH_Mesh_var mesh; @@ -516,8 +518,8 @@ bool SMESHGUI_TranslationDlg::ClickOnApply() else mesh = aMeshEditor->TranslateMakeMesh(anElementsId, aVector, makeGroups, LineEditNewMesh->text().toLatin1().data()); - //asl: if( !mesh->_is_nil()) - //asl: mesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + if( !mesh->_is_nil()) + getNotebook()->setParameters( mesh, aParameters ); } } catch (...) { } diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index c3123b3f5..2441aa14c 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -560,6 +560,10 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SALOMEDS::Study_ptr theStudy, } } + // Update string attribute (to display used variables) + if( SMESH_Mesh_i* aServant = dynamic_cast( GetServant( theMesh ).in() ) ) + aServant->UpdateStringAttribute(); + if(MYDEBUG) MESSAGE("PublishMesh_END"); return aMeshSO._retn(); } @@ -749,6 +753,7 @@ SALOMEDS::SObject_ptr SetName( aHypSO, theName, aHypName ); } + // Update string attribute (to display used variables) if( SMESH_Hypothesis_i* aServant = dynamic_cast( GetServant( theHyp ).in() ) ) aServant->UpdateStringAttribute(); diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index 643492dc1..66a53a4bc 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -3385,7 +3385,9 @@ void SMESH_Mesh_i::checkGroupNames() //============================================================================= char* SMESH_Mesh_i::GetEntry() { - return NULL; + char aBuf[100]; + sprintf( aBuf, "%i", GetId() ); + return CORBA::string_dup( aBuf ); } //============================================================================= @@ -3415,6 +3417,21 @@ CORBA::Boolean SMESH_Mesh_i::IsValid() //============================================================================= void SMESH_Mesh_i::SetParameters( SALOME::Notebook_ptr theNotebook, const SALOME::StringArray& theParameters ) { + theNotebook->ClearDependencies( _this(), SALOME::Parameters ); + std::list aParams; + int n = theParameters.length(); + for( int i=0; iGetParameter( aParam.c_str() ); + if( !CORBA::is_nil( aParamPtr ) ) + theNotebook->AddDependency( _this(), aParamPtr ); + } + _impl->SetParameters( aParams ); + + UpdateStringAttribute(); } //============================================================================= @@ -3424,7 +3441,13 @@ void SMESH_Mesh_i::SetParameters( SALOME::Notebook_ptr theNotebook, const SALOME //============================================================================= SALOME::StringArray* SMESH_Mesh_i::GetParameters() { - return NULL; + std::list aParams = _impl->GetParameters(); + SALOME::StringArray_var aRes = new SALOME::StringArray(); + aRes->length( aParams.size() ); + std::list::const_iterator it = aParams.begin(), last = aParams.end(); + for( int i=0; it!=last; it++, i++ ) + aRes[i] = CORBA::string_dup( it->c_str() ); + return aRes._retn(); } //============================================================================= @@ -3443,6 +3466,36 @@ void SMESH_Mesh_i::Update( SALOME::Notebook_ptr theNotebook ) //============================================================================= void SMESH_Mesh_i::UpdateStringAttribute() { + SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); + + SALOME::Notebook_ptr aNotebook = aSMESHGen->GetNotebook( GetStudyId() ); + + SALOME::StringArray* anObjectParameters = aNotebook->GetObjectParameters( GetComponent(), GetEntry() ); + int aParametersLength = anObjectParameters ? anObjectParameters->length() : 0; + if( aParametersLength == 0 ) + return; + + SALOMEDS::Study_ptr aStudy = aSMESHGen->GetStudy( GetStudyId() ); + SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder(); + SALOMEDS::SObject_var aSObject = SMESH_Gen_i::ObjectToSObject( aStudy, SMESH::SMESH_Mesh::_narrow( _this() ) ); + if( CORBA::is_nil( aSObject ) ) + return; + + SALOMEDS::GenericAttribute_var anAttr = aStudyBuilder->FindOrCreateAttribute( aSObject, "AttributeString" ); + SALOMEDS::AttributeString_var aStringAttrib = SALOMEDS::AttributeString::_narrow( anAttr ); + + std::string aString; + for( int i = 0, n = anObjectParameters->length(); i < n; i++ ) { + std::string aParameter = anObjectParameters->operator[](i).in(); + if( aParameter != "" ) + { + if( aString != "" ) + aString += ", "; + aString += aParameter; + } + } + aStringAttrib->SetValue( aString.c_str() ); + aStringAttrib->Destroy(); } //=============================================================================