X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FVISU_I%2FVISU_Mesh_i.cc;h=6b9f866078d5d5492b0345dbd6013c52f94ce601;hb=716894d52739e56d77c5085e02b4cdfdbef60136;hp=0a5ad229b5f4f95a94cd5de6aa9b967844d6b8a7;hpb=17b175ff4b710fc93421509ffa7583edd1678a5d;p=modules%2Fvisu.git diff --git a/src/VISU_I/VISU_Mesh_i.cc b/src/VISU_I/VISU_Mesh_i.cc index 0a5ad229..6b9f8660 100644 --- a/src/VISU_I/VISU_Mesh_i.cc +++ b/src/VISU_I/VISU_Mesh_i.cc @@ -1,126 +1,445 @@ // VISU OBJECT : interactive object for VISU entities implementation // // Copyright (C) 2003 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// 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 : VISU_PrsObject_i.cxx // Author : Alexey PETROV // Module : VISU -#include "VISU_MeshPL.hxx" -#include "VISU_Result_i.hh" #include "VISU_Mesh_i.hh" +#include "VISU_Prs3dUtils.hh" + +#include "VISU_Result_i.hh" + #include "VISU_MeshAct.h" +#include "VISU_MeshPL.hxx" +#include "VISU_PipeLineUtils.hxx" +#include "VISU_Convertor.hxx" -using namespace VISU; -using namespace std; +#include "SALOME_Event.hxx" + +#include "SUIT_ResourceMgr.h" #ifdef _DEBUG_ static int MYDEBUG = 0; -static int MYDEBUGWITHFILES = 0; #else static int MYDEBUG = 0; -static int MYDEBUGWITHFILES = 0; #endif static int INCMEMORY = 4; +//---------------------------------------------------------------------------- +namespace +{ + bool + IsSameColor(const SALOMEDS::Color& theLeft, + const SALOMEDS::Color& theRight) + { + return + VISU::CheckIsSameValue(theLeft.R, theRight.R) && + VISU::CheckIsSameValue(theLeft.G, theRight.G) && + VISU::CheckIsSameValue(theLeft.B, theRight.B); + } +} + +//---------------------------------------------------------------------------- int VISU::Mesh_i::myNbPresent = 0; -QString VISU::Mesh_i::GenerateName() { return VISU::GenerateName("Mesh",myNbPresent++);} +//---------------------------------------------------------------------------- +QString +VISU::Mesh_i +::GenerateName() +{ + return VISU::GenerateName("Mesh", myNbPresent++); +} +//---------------------------------------------------------------------------- const string VISU::Mesh_i::myComment = "MESH"; -const char* VISU::Mesh_i::GetComment() const { return myComment.c_str();} - -VISU::Mesh_i::Mesh_i(Result_i* theResult) : - PrsObject_i(theResult->GetStudyDocument()), - Prs3d_i(theResult) -{ - myPipeLine = myMeshPL = VISU_MeshPL::New();; +//---------------------------------------------------------------------------- +const char* +VISU::Mesh_i +::GetComment() const +{ + return myComment.c_str(); } -void VISU::Mesh_i::SameAs(const Mesh_i* theOrigin){ - return; // "SameAs" command for mesh is not valid in current architecture +//---------------------------------------------------------------------------- +VISU::Mesh_i +::Mesh_i(): + myMeshPL(VISU_MeshPL::New()) +{ + SetPipeLine(myMeshPL); } -void VISU::Mesh_i::Destroy(){ - SALOMEDS::SObject_var aSObj = myStudy->FindObjectID(GetEntry()); - if(!aSObj->_is_nil()){ - SALOMEDS::StudyBuilder_var aStudyBuilder = myStudy->NewBuilder(); - aStudyBuilder->RemoveAttribute(aSObj,"AttributeIOR"); - } - Prs3d_i::Destroy(); -} -int VISU::Mesh_i::IsPossible(Result_i* theResult, const char* theMeshName, Entity theEntity, const char* theFamilyName){ +//---------------------------------------------------------------------------- +size_t +VISU::Mesh_i +::IsPossible(Result_i* theResult, + const std::string& theMeshName, + Entity theEntity, + const std::string& theFamilyName) +{ try{ - vtkIdType aSize = INCMEMORY* - theResult->GetInput()->GetMeshOnEntitySize(theMeshName,(VISU::TEntity)theEntity,theFamilyName); - if(MYDEBUG) MESSAGE("Mesh_i::IsPossible - CheckAvailableMemory = "<GetInput()->GetMeshOnEntitySize(theMeshName,(VISU::TEntity)theEntity); + size_t aResult = VISU_PipeLine::CheckAvailableMemory(aSize); + MESSAGE("Mesh_i::IsPossible - CheckAvailableMemory = "<GetInput()->GetMeshOnGroupSize(theMeshName,theGroupName); - if(MYDEBUG) MESSAGE("Mesh_i::IsPossible - CheckAvailableMemory = "<NewBuilder(); + aStudyBuilder->NewCommand(); // There is a transaction + try { + if (GetCResult()->GetInput() == NULL) + throw std::runtime_error("Mesh_i::Build - GetCResult()->GetInput() == NULL !!!"); + if (!theRestoring) { + myPresentType = VISU::PresentationType(VISU::GetResourceMgr()->integerValue("VISU" , "mesh_represent", 2)); + if(myEntity == VISU::NODE_ENTITY) + myPresentType = VISU::POINT; + SetName(GenerateName().latin1(), false); + myCellColor.R = 0.0; myCellColor.G = myCellColor.B = 1.0; + myNodeColor.R = myNodeColor.G = 1.0; myNodeColor.B = 1.0; + myLinkColor.R = myLinkColor.G = myLinkColor.B = 83/255.; + } + + if(myEntity >= 0) + if(mySubMeshName == "") + myType = VISU::TENTITY; + else + myType = VISU::TFAMILY; + else + myType = VISU::TGROUP; + + if(MYDEBUG) MESSAGE("Mesh_i::Build - myType = "<GetInput(); + switch(myType){ + case VISU::TENTITY : + anIDMapper = anInput->GetMeshOnEntity(aMeshName, + anEntity);//jfa IPAL9284 + aRestoringMap["myComment"] = "ENTITY"; + aRestoringMap["myId"] = QString::number(anEntity); + break; + case VISU::TFAMILY : + anIDMapper = anInput->GetFamilyOnEntity(aMeshName, + anEntity, + mySubMeshName); + aRestoringMap["myComment"] = "FAMILY"; + aRestoringMap["myEntityId"] = QString::number(anEntity); + aRestoringMap["myName"] = mySubMeshName; + break; + case VISU::TGROUP : + anIDMapper = anInput->GetMeshOnGroup(GetCMeshName(), + mySubMeshName); + aRestoringMap["myComment"] = "GROUP"; + aRestoringMap["myName"] = mySubMeshName; + break; + } + if(!anIDMapper) + throw std::runtime_error("Mesh_i::Build - !anIDMapper !!!"); + + myMeshPL->SetUnstructuredGridIDMapper(anIDMapper); + + string anEntry = GetCResult()->GetEntry(aRestoringMap); + if(anEntry == "") + throw std::runtime_error("Mesh_i::Build - anEntry was not found !!!"); + SALOMEDS::SObject_var aSObject = GetStudyDocument()->FindObjectID(anEntry.c_str()); + + if(!theRestoring) { //Setting IOR on the label + myMeshPL->Init(); + string aResultEntry = GetCResult()->GetEntry(); + SALOMEDS::StudyBuilder_var aStudyBuilder = GetStudyDocument()->NewBuilder(); + SALOMEDS::GenericAttribute_var anAttr = aStudyBuilder->FindOrCreateAttribute(aSObject,"AttributeIOR"); + SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); + CORBA::String_var aString = GetID(); + anIOR->SetValue(aString); + } + + // Set icon + SALOMEDS::GenericAttribute_var anAttr; + SALOMEDS::AttributePixMap_var aPixmap; + + anAttr = aStudyBuilder->FindOrCreateAttribute(aSObject, "AttributePixMap"); + aPixmap = SALOMEDS::AttributePixMap::_narrow( anAttr ); + aPixmap->SetPixMap("ICON_TREE_MESH"); + + }catch(std::exception& exc){ + INFOS("Follow exception was occured :\n"<CommitCommand(); + return this; +} + + +//--------------------------------------------------------------- +void +VISU::Mesh_i +::SameAs(const VISU::Prs3d_i* theOrigin) +{ + return; // "SameAs" command for mesh is not valid in current architecture +} + + +//--------------------------------------------------------------- +void +VISU::Mesh_i +::RemoveFromStudy() +{ + struct TRemoveFromStudy: public SALOME_Event + { + VISU::Mesh_i* myRemovable; + TRemoveFromStudy(VISU::Mesh_i* theRemovable): + myRemovable(theRemovable) + {} + + virtual + void + Execute() + { + VISU::RemoveFromStudy(myRemovable->GetSObject()); + myRemovable->TSuperClass::RemoveFromStudy(); + } + }; + + // Unset icon + SALOMEDS::StudyBuilder_var aStudyBuilder = GetStudyDocument()->NewBuilder(); + aStudyBuilder->RemoveAttribute(GetSObject(), "AttributePixMap"); + + ProcessVoidEvent(new TRemoveFromStudy(this)); +} - myMeshName = VISU::Storable::FindValue(theMap,"myMeshName").latin1(); - myEntity = (VISU::TEntity)VISU::Storable::FindValue(theMap,"myEntity").toInt(); + +//---------------------------------------------------------------------------- +void +VISU::Mesh_i +::SetCellColor(const SALOMEDS::Color& theColor) +{ + if(IsSameColor(myCellColor, theColor)) + return; + + VISU::TSetModified aModified(this); + + myCellColor = theColor; + myParamsTime.Modified(); +} + + +//---------------------------------------------------------------------------- +SALOMEDS::Color +VISU::Mesh_i +::GetCellColor() +{ + return myCellColor; +} + + +//---------------------------------------------------------------------------- +void +VISU::Mesh_i +::SetNodeColor(const SALOMEDS::Color& theColor) +{ + if(IsSameColor(myNodeColor, theColor)) + return; + + VISU::TSetModified aModified(this); + + myNodeColor = theColor; + myParamsTime.Modified(); +} + + +//---------------------------------------------------------------------------- +SALOMEDS::Color +VISU::Mesh_i +::GetNodeColor() +{ + return myNodeColor; +} + + +//---------------------------------------------------------------------------- +void +VISU::Mesh_i +::SetLinkColor(const SALOMEDS::Color& theColor) +{ + if(IsSameColor(myLinkColor, theColor)) + return; + + VISU::TSetModified aModified(this); + + myLinkColor = theColor; + myParamsTime.Modified(); +} + + +//---------------------------------------------------------------------------- +SALOMEDS::Color +VISU::Mesh_i +::GetLinkColor() +{ + return myLinkColor; +} + + +//---------------------------------------------------------------------------- +void +VISU::Mesh_i +::SetPresentationType(VISU::PresentationType theType) +{ + if(myPresentType == theType) + return; + + VISU::TSetModified aModified(this); + + myPresentType = theType; + myParamsTime.Modified(); +} + + +//---------------------------------------------------------------------------- +VISU::PresentationType +VISU::Mesh_i +::GetPresentationType() +{ + return myPresentType; +} + + +//---------------------------------------------------------------------------- +VISU::Entity +VISU::Mesh_i +::GetEntity() const +{ + return VISU::Entity(myEntity); +} + + +//---------------------------------------------------------------------------- +const std::string& +VISU::Mesh_i +::GetSubMeshName() const +{ + return mySubMeshName; +} + + +//---------------------------------------------------------------------------- +VISU::Storable* +VISU::Mesh_i +::Restore(SALOMEDS::SObject_ptr theSObject, + const Storable::TRestoringMap& theMap) +{ + if(!TSuperClass::Restore(theSObject, theMap)) + return NULL; + + myEntity = VISU::Storable::FindValue(theMap,"myEntity").toInt();//jfa IPAL9284 mySubMeshName = VISU::Storable::FindValue(theMap,"mySubMeshName").latin1(); myPresentType = VISU::PresentationType(VISU::Storable::FindValue(theMap,"myPresentType").toInt()); @@ -140,10 +459,27 @@ VISU::Storable* VISU::Mesh_i::Restore(const Storable::TRestoringMap& theMap) return Build(true); } -void VISU::Mesh_i::ToStream(std::ostringstream& theStr){ - Prs3d_i::ToStream(theStr); - Storable::DataToStream( theStr, "myMeshName", myMeshName.c_str() ); +//---------------------------------------------------------------------------- +VISU::Storable* +VISU::Mesh_i +::StorableEngine(SALOMEDS::SObject_ptr theSObject, + const Storable::TRestoringMap& theMap, + const std::string& thePrefix, + CORBA::Boolean theIsMultiFile) +{ + Mesh_i* aMesh = new Mesh_i(); + return aMesh->Restore(theSObject, theMap); +} + + +//---------------------------------------------------------------------------- +void +VISU::Mesh_i +::ToStream(std::ostringstream& theStr) +{ + TSuperClass::ToStream(theStr); + Storable::DataToStream( theStr, "myEntity", myEntity ); Storable::DataToStream( theStr, "mySubMeshName", mySubMeshName.c_str() ); @@ -162,109 +498,40 @@ void VISU::Mesh_i::ToStream(std::ostringstream& theStr){ Storable::DataToStream( theStr, "myLinkColor.B", myLinkColor.B ); } -VISU::Storable* VISU::Mesh_i::Restore(SALOMEDS::SObject_ptr theSObject, - const string& thePrefix, const Storable::TRestoringMap& theMap) - throw(std::logic_error&) -{ - VISU::Result_i* pResult = GetResult(theSObject); - if(pResult != NULL){ - VISU::Mesh_i* pResent = new VISU::Mesh_i(pResult); - return pResent->Restore(theMap); - } - return NULL; -} - - -VISU::Mesh_i::~Mesh_i(){ - if(MYDEBUG) MESSAGE("Mesh_i::~Mesh_i()"); -} - -VISU::Storable* VISU::Mesh_i::Build(int theRestoring){ - try{ - if(myResult->GetInput() == NULL) - throw std::runtime_error("Mesh_i::Build - myResult->GetInput() == NULL !!!"); - if(!theRestoring){ - myPresentType = VISU::SHADED; - myName = GenerateName().latin1(); - myCellColor.R = 0.0; myCellColor.G = myCellColor.B = 1.0; - myNodeColor.R = myNodeColor.G = 1.0; myNodeColor.B = 1.0; - myLinkColor.R = myLinkColor.G = myLinkColor.B = 83/255.; - } - if(int(myEntity) >= 0) - if(mySubMeshName == "") - myType = VISU::TENTITY; - else - myType = VISU::TFAMILY; - else - myType = VISU::TGROUP; - if(MYDEBUG) MESSAGE("Mesh_i::Build - myType = "<GetInput()->GetMeshOnEntity(myMeshName,myEntity); - aComment.sprintf("myComment=ENTITY;myType=%d;myMeshName=%s;myId=%d", - VISU::TENTITY,myMeshName.c_str(),myEntity); - break; - case VISU::TFAMILY : - anOutput = myResult->GetInput()->GetMeshOnEntity(myMeshName,myEntity,mySubMeshName); - aComment.sprintf("myComment=FAMILY;myType=%d;myMeshName=%s;myEntityId=%d;myName=%s", - VISU::TFAMILY,myMeshName.c_str(),myEntity,mySubMeshName.c_str()); - break; - case VISU::TGROUP : - anOutput = myResult->GetInput()->GetMeshOnGroup(myMeshName,mySubMeshName); - aComment.sprintf("myComment=GROUP;myType=%d;myMeshName=%s;myName=%s", - VISU::TGROUP,myMeshName.c_str(),mySubMeshName.c_str()); - break; - } - if(anOutput == NULL) throw std::runtime_error("Mesh_i::Build - anOutput == NULL !!!"); - myMeshPL->SetInput(anOutput); - myMeshPL->Build(); - if(!theRestoring) { //Setting IOR on the label - myMeshPL->Init(); - string aResultEntry = myResult->GetEntry(); - string anEntry = FindEntryWithComment(myStudy,aResultEntry.c_str(),aComment.latin1()); - if(anEntry == "") throw std::runtime_error("Mesh_i::Build - anEntry was not found !!!"); - SALOMEDS::SObject_var aSObj = myStudy->FindObjectID(anEntry.c_str()); - SALOMEDS::StudyBuilder_var aStudyBuilder = myStudy->NewBuilder(); - SALOMEDS::GenericAttribute_var anAttr = aStudyBuilder->FindOrCreateAttribute(aSObj,"AttributeIOR"); - SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); - CORBA::String_var aString = GetID(); - anIOR->SetValue(aString); - } - return this; - }catch(std::runtime_error& exc){ - INFOS("Follow exception was accured :\n"<booleanValue("VISU", "mesh_shrink", false); + if (toShrink) anActor->SetShrink(); UpdateActor(anActor); - }catch(std::runtime_error& exc){ + }catch (...) { anActor->Delete(); - throw exc; + throw ; } return anActor; } - -void VISU::Mesh_i::UpdateActor(VISU_Actor* theActor){ + + +//---------------------------------------------------------------------------- +void +VISU::Mesh_i +::UpdateActor(VISU_Actor* theActor) +{ if(VISU_MeshAct* anActor = dynamic_cast(theActor)){ if(MYDEBUG) MESSAGE("Mesh_i::UpdateActor"); VISU::Prs3d_i::UpdateActor(anActor); anActor->SetRepresentation(myPresentType); - anActor->GetProperty()->SetColor(myCellColor.R, myCellColor.G, myCellColor.B); + anActor->GetSurfaceProperty()->SetColor(myCellColor.R, myCellColor.G, myCellColor.B); anActor->GetEdgeProperty()->SetColor(myLinkColor.R, myLinkColor.G, myLinkColor.B); anActor->GetNodeProperty()->SetColor(myNodeColor.R, myNodeColor.G, myNodeColor.B); } } + +//----------------------------------------------------------------------------