From: ema Date: Tue, 25 Nov 2014 12:56:20 +0000 (+0300) Subject: Implementation of 2.6.3/2.6.4 improvements X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=ff2e6c820b2d4f2dcc06e23979b2de228a60f832;p=modules%2Fsmesh.git Implementation of 2.6.3/2.6.4 improvements --- diff --git a/idl/SMESH_Mesh.idl b/idl/SMESH_Mesh.idl index 593272ab0..ead2ef3ef 100644 --- a/idl/SMESH_Mesh.idl +++ b/idl/SMESH_Mesh.idl @@ -313,6 +313,10 @@ module SMESH * happen if mesh data is not yet fully loaded from the file of study. */ boolean IsMeshInfoCorrect(); + /*! + * Returns mesh unstructed grid information. + */ + SALOMEDS::TMPFile GetVtkUgStream(); }; interface SMESH_Group; diff --git a/src/SMESH_I/SMESH_Filter_i.hxx b/src/SMESH_I/SMESH_Filter_i.hxx index 92c4618df..14769b088 100644 --- a/src/SMESH_I/SMESH_Filter_i.hxx +++ b/src/SMESH_I/SMESH_Filter_i.hxx @@ -952,7 +952,7 @@ namespace SMESH virtual SMESH::array_of_ElementType* GetTypes(); virtual SMESH::SMESH_Mesh_ptr GetMesh(); virtual bool IsMeshInfoCorrect() { return true; } - + virtual SALOMEDS::TMPFile* GetVtkUgStream(){ return NULL; } /*! * \brief Object notified on change of predicate */ diff --git a/src/SMESH_I/SMESH_Group_i.hxx b/src/SMESH_I/SMESH_Group_i.hxx index f08e51b24..6c6df5e32 100644 --- a/src/SMESH_I/SMESH_Group_i.hxx +++ b/src/SMESH_I/SMESH_Group_i.hxx @@ -95,6 +95,10 @@ class SMESH_I_EXPORT SMESH_GroupBase_i: * happen if mesh data is not yet fully loaded from the file of study. */ virtual bool IsMeshInfoCorrect(); + /*! + * Returns mesh unstructed grid information. + */ + virtual SALOMEDS::TMPFile* GetVtkUgStream(){ return NULL; } // Internal C++ interface int GetLocalID() const { return myLocalID; } diff --git a/src/SMESH_I/SMESH_MeshEditor_i.cxx b/src/SMESH_I/SMESH_MeshEditor_i.cxx index 763f976e4..d3ef48332 100644 --- a/src/SMESH_I/SMESH_MeshEditor_i.cxx +++ b/src/SMESH_I/SMESH_MeshEditor_i.cxx @@ -779,6 +779,7 @@ struct SMESH_MeshEditor_i::_IDSource : public virtual POA_SMESH::SMESH_IDSource, } return types._retn(); } + SALOMEDS::TMPFile* GetVtkUgStream(){ return NULL; } }; SMESH::SMESH_IDSource_ptr SMESH_MeshEditor_i::MakeIDSource(const SMESH::long_array& ids, diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index a5ed1ac3c..e8febe231 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -79,6 +79,8 @@ #include #include +#include + // to pass CORBA exception through SMESH_TRY #define SMY_OWN_CATCH catch( SALOME::SALOME_Exception& se ) { throw se; } @@ -5048,6 +5050,43 @@ void SMESH_Mesh_i::CollectMeshInfo(const SMDS_ElemIteratorPtr theItr, while (theItr->more()) theInfo[ theItr->next()->GetEntityType() ]++; } +//============================================================================= +/* + * Returns mesh unstructed grid information. + */ +//============================================================================= + +SALOMEDS::TMPFile* SMESH_Mesh_i::GetVtkUgStream() +{ + if ( SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS() ) + { + vtkUnstructuredGrid* aCopy; + SMDS_UnstructuredGrid* aGrid = aMeshDS->getGrid(); + if(aGrid) + { + aCopy = aGrid->NewInstance(); + aCopy->ShallowCopy(aGrid); + vtkUnstructuredGridWriter* aWriter = vtkUnstructuredGridWriter::New(); + aWriter->WriteToOutputStringOn(); + aWriter->SetInputData(aCopy); + aWriter->SetFileTypeToBinary(); + aWriter->Write(); + char* str = aWriter->GetOutputString(); + int size = aWriter->GetOutputStringLength(); + + //Allocate octect buffer of required size + CORBA::Octet* OctetBuf = SALOMEDS::TMPFile::allocbuf(size); + //Copy ostrstream content to the octect buffer + memcpy(OctetBuf, str, size); + //Create and return TMPFile + SALOMEDS::TMPFile_var SeqFile = new SALOMEDS::TMPFile(size, size, OctetBuf, 1); + + aWriter->Delete(); + return SeqFile._retn(); + } + } + return NULL; +} //============================================================================= namespace /* Iterators used in SMESH_Mesh_i::GetElements(SMESH::SMESH_IDSource_var obj, diff --git a/src/SMESH_I/SMESH_Mesh_i.hxx b/src/SMESH_I/SMESH_Mesh_i.hxx index e4c1b634a..9c36bb40e 100644 --- a/src/SMESH_I/SMESH_Mesh_i.hxx +++ b/src/SMESH_I/SMESH_Mesh_i.hxx @@ -650,6 +650,10 @@ public: * happen if mesh data is not yet fully loaded from the file of study. */ bool IsMeshInfoCorrect(); + /*! + * Returns mesh unstructed grid information. + */ + virtual SALOMEDS::TMPFile* GetVtkUgStream(); std::map _mapSubMesh_i; //NRI std::map _mapSubMesh; //NRI diff --git a/src/SMESH_I/SMESH_subMesh_i.hxx b/src/SMESH_I/SMESH_subMesh_i.hxx index 69fdcd72e..bd8a9846e 100644 --- a/src/SMESH_I/SMESH_subMesh_i.hxx +++ b/src/SMESH_I/SMESH_subMesh_i.hxx @@ -110,6 +110,10 @@ public: * happen if mesh data is not yet fully loaded from the file of study. */ virtual bool IsMeshInfoCorrect(); + /*! + * Returns mesh unstructed grid information. + */ + virtual SALOMEDS::TMPFile* GetVtkUgStream(){ return NULL; } protected: