0021459: EDF 1495 SMESH: Manipulation of discrete elements with attributes

+	SMDS_BallElement.hxx
This commit is contained in:
eap 2012-07-19 12:55:29 +00:00
parent 229db9cb6f
commit 1d17befa34
3 changed files with 167 additions and 5 deletions

View File

@ -74,14 +74,15 @@ salomeinclude_HEADERS = \
SMDS_UnstructuredGrid.hxx \ SMDS_UnstructuredGrid.hxx \
SMDS_Downward.hxx \ SMDS_Downward.hxx \
SMDS_StdIterator.hxx \ SMDS_StdIterator.hxx \
SMDS_IteratorOnIterators.hxx SMDS_IteratorOnIterators.hxx \
SMDS_BallElement.hxx
# Libraries targets # Libraries targets
lib_LTLIBRARIES = libSMDS.la lib_LTLIBRARIES = libSMDS.la
dist_libSMDS_la_SOURCES = \ dist_libSMDS_la_SOURCES = \
chrono.cxx \ chrono.cxx \
SMDS_MeshObject.cxx \ SMDS_MeshObject.cxx \
SMDS_MeshElement.cxx \ SMDS_MeshElement.cxx \
SMDS_MeshCell.cxx \ SMDS_MeshCell.cxx \
@ -117,7 +118,8 @@ dist_libSMDS_la_SOURCES = \
SMDS_QuadraticFaceOfNodes.cxx \ SMDS_QuadraticFaceOfNodes.cxx \
SMDS_QuadraticVolumeOfNodes.cxx \ SMDS_QuadraticVolumeOfNodes.cxx \
SMDS_UnstructuredGrid.cxx \ SMDS_UnstructuredGrid.cxx \
SMDS_Downward.cxx SMDS_Downward.cxx \
SMDS_BallElement.cxx
# additionnal information to compil and link file # additionnal information to compil and link file
libSMDS_la_CPPFLAGS = \ libSMDS_la_CPPFLAGS = \
@ -133,5 +135,3 @@ libSMDS_la_LDFLAGS = \
bin_PROGRAMS = SMDS_MemoryLimit bin_PROGRAMS = SMDS_MemoryLimit
dist_SMDS_MemoryLimit_SOURCES = \ dist_SMDS_MemoryLimit_SOURCES = \
SMDS_MemoryLimit.cxx SMDS_MemoryLimit.cxx
#libSMDS_la_LDFLAGS += -L/data/eap/S5_MV/INSTALL/SMESH/lib/salome -lPerfmeter

View File

@ -0,0 +1,102 @@
// Copyright (C) 2010-2012 CEA/DEN, EDF R&D, OPEN CASCADE
//
// 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
//
// SMESH SMDS : implementaion of Salome mesh data structure
// Module : SMESH
// File : SMDS_BallElement.cxx
// Author : Edward AGAPOV (eap)
#include "SMDS_BallElement.hxx"
#include "SMDS_ElemIterator.hxx"
#include "SMDS_Mesh.hxx"
#include "SMDS_MeshNode.hxx"
#include "SMDS_VtkCellIterator.hxx"
SMDS_BallElement::SMDS_BallElement()
{
SMDS_MeshCell::init();
}
SMDS_BallElement::SMDS_BallElement (const SMDS_MeshNode * node, double diameter)
{
init( node->getVtkId(), diameter, SMDS_Mesh::_meshList[ node->getMeshId() ] );
}
SMDS_BallElement::SMDS_BallElement(vtkIdType nodeId, double diameter, SMDS_Mesh* mesh)
{
init( nodeId, diameter, mesh );
}
void SMDS_BallElement::init(vtkIdType nodeId, double diameter, SMDS_Mesh* mesh)
{
SMDS_MeshCell::init();
SMDS_UnstructuredGrid* grid = mesh->getGrid();
myVtkID = grid->InsertNextLinkedCell( GetVtkType(), 1, &nodeId );
myMeshId = mesh->getMeshId();
grid->SetBallDiameter( myVtkID, diameter );
mesh->setMyModified();
}
double SMDS_BallElement::GetDiameter() const
{
return SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetBallDiameter( myVtkID );
}
void SMDS_BallElement::SetDiameter(double diameter)
{
SMDS_Mesh::_meshList[myMeshId]->getGrid()->SetBallDiameter( myVtkID, diameter );
}
bool SMDS_BallElement::ChangeNode (const SMDS_MeshNode * node)
{
vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
vtkIdType npts = 0;
vtkIdType* pts = 0;
grid->GetCellPoints(myVtkID, npts, pts);
pts[0] = node->getVtkId();
SMDS_Mesh::_meshList[myMeshId]->setMyModified();
return true;
}
void SMDS_BallElement::Print (std::ostream & OS) const
{
OS << "ball<" << GetID() << "> : ";
}
const SMDS_MeshNode* SMDS_BallElement::GetNode (const int ind) const
{
vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
vtkIdType npts, *pts;
grid->GetCellPoints( myVtkID, npts, pts );
return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ 0 ]);
}
SMDS_ElemIteratorPtr SMDS_BallElement::elementsIterator (SMDSAbs_ElementType type) const
{
switch (type)
{
case SMDSAbs_Node:
return SMDS_ElemIteratorPtr(new SMDS_VtkCellIterator(SMDS_Mesh::_meshList[myMeshId], myVtkID, GetEntityType()));
default:
;
return SMDS_ElemIteratorPtr((SMDS_ElemIterator*) NULL);
}
}

View File

@ -0,0 +1,60 @@
// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
//
// 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
//
// SMESH SMDS : implementaion of Salome mesh data structure
// File : SMDS_BallElement.hxx
// Module : SMESH
//
#ifndef _SMDS_BallElement_HeaderFile
#define _SMDS_BallElement_HeaderFile
#include "SMESH_SMDS.hxx"
#include "SMDS_MeshCell.hxx"
#include <iostream>
class SMDS_EXPORT SMDS_BallElement: public SMDS_MeshCell
{
public:
SMDS_BallElement();
SMDS_BallElement (const SMDS_MeshNode * node, double diameter);
SMDS_BallElement(vtkIdType nodeId, double diameter, SMDS_Mesh* mesh);
void init(vtkIdType nodeId, double diameter, SMDS_Mesh* mesh);
double GetDiameter() const;
void SetDiameter(double diameter);
bool ChangeNode (const SMDS_MeshNode * node);
virtual bool ChangeNodes(const SMDS_MeshNode* nodes[],
const int nbNodes) { return ChangeNode( nodes[0] ); }
virtual void Print (std::ostream & OS) const;
virtual SMDSAbs_ElementType GetType() const { return SMDSAbs_Ball; }
virtual vtkIdType GetVtkType() const { return VTK_POLY_VERTEX; }
virtual SMDSAbs_EntityType GetEntityType() const { return SMDSEntity_Ball; }
virtual SMDSAbs_GeometryType GetGeomType() const { return SMDSGeom_BALL; }
virtual int NbNodes() const { return 1; }
virtual int NbEdges() const { return 0; }
virtual int NbFaces() const { return 0; }
virtual const SMDS_MeshNode* GetNode (const int ind) const;
protected:
SMDS_ElemIteratorPtr elementsIterator (SMDSAbs_ElementType type) const;
};
#endif