ElementsQuery.h
1 //##################################################################################################
2 //
3 // Ceetron Desktop Components
4 // Component: UnstructGrid
5 //
6 // --------------------------------------------------------------------------------------------
7 // Copyright (C) 2012, Ceetron AS
8 // This is UNPUBLISHED PROPRIETARY SOURCE CODE of Ceetron AS. The contents of this file may
9 // not be disclosed to third parties, copied or duplicated in any form, in whole or in part,
10 // without the prior written permission of Ceetron AS.
11 //##################################################################################################
12 
13 #pragma once
14 
15 #include "CeeUnstructGrid/Base.h"
16 #include "CeeCore/Vec3d.h"
17 
18 #include <vector>
19 
20 namespace cee {
21 namespace ug {
22 class DataElements;
23 class DataNodes;
24 class DataPartDisplacement;
25 class DataPartScalar;
26 class UnstructGridModel;
27 
28 //==================================================================================================
29 //
30 //
31 //
32 //==================================================================================================
33 class CEE_UG_EXPORT ElementsQuery
34 {
35 public:
36  ElementsQuery(const DataElements* elements, const DataNodes* nodes);
37  ElementsQuery(const DataElements* elements, const DataPartDisplacement* displacements);
38  ElementsQuery(const UnstructGridModel* model, size_t frameIndex, size_t geometryIndex, int partId);
39  ~ElementsQuery();
40 
41  void setDisplacements(const DataPartDisplacement* displacements);
42 
43  Vec3d nodeCoordinate(size_t nodeIndex);
44 
45  Vec3d elementCentroid(size_t elementIndex) const;
46  std::vector<Vec3d> elementCoordinates(size_t elementIndex) const;
47  std::vector<unsigned int> elementVertices(size_t elementIndex) const;
48  bool elementContainingCoordinate(const Vec3d& coordinate, size_t* elementIndex);
49  bool elementsContainingEdge(size_t nodeIndex1, size_t nodeIndex2, std::vector<size_t>* elementIndices);
50  bool elementsContainingNode(size_t nodeIndex1, std::vector<size_t>* elementIndices);
51  std::vector<unsigned int> elementEdges(size_t elementIndex);
52  double elementVolume(size_t elementIndex) const;
53  std::vector<double> elementVolumes() const;
54  void allElementCentroids(std::vector<double>* values) const;
55 
56  Vec3d elementSurfaceCentroid(size_t elementIndex, size_t localSurfaceIndex) const;
57  std::vector<Vec3d> elementSurfaceCoordinates(size_t elementIndex, size_t localSurfaceIndex) const;
58  std::vector<unsigned int> elementSurfaceVertices(size_t elementIndex, size_t localSurfaceIndex) const;
59  std::vector<Vec3d> elementSurfaceTriangles(size_t elementIndex, size_t localSurfaceIndex) const;
60 
61  size_t nodeIndexFromElementNodeIndex(size_t elementNodeIdx) const;
62  size_t elementNodeFromElementAndNodeIndex(size_t elementIndex, size_t nodeIndex) const;
63  size_t elementLocalNodeIndexFromElementAndNodeIndex(size_t elementIndex, size_t nodeIndex) const;
64 
65  size_t elementStartIndex(size_t elementIndex) const;
66  void elementAndSurfaceIndexFromElementSurfaceIndex(size_t elementSurfaceIndex, size_t* elementIndex, size_t* localSurfaceIndex) const;
67  size_t elementSurfaceIndex(size_t elementIndex, size_t localSurfaceIndex) const;
68  bool elementNeighbor(size_t elementIndex, size_t localSurfaceIndex, size_t* neighborElementIndex = NULL, size_t* neighborLocalSurfaceIndex = NULL) const;
69 
70  double mapScalarResult(size_t elementIndex, const Vec3d& coordinate, const DataPartScalar* scalarPart, ResultMapping scalarResultMappingType) const;
71  void mapScalarResults(const std::vector<Vec3d>& coords, const DataPartScalar* scalarPart, ResultMapping scalarResultMappingType, std::vector<double>* mappedResultValues);
72 
73 private:
74  CEE_PRIVATE_IMPL(ElementsQuery);
75  CEE_DISALLOW_COPY_AND_ASSIGN(ElementsQuery);
76 };
77 
78 } // namespace ug
79 } // namespace cee
Namespace cee contains all functionality and structures under the Core component. ...
Definition: AppComponent.cpp:26
A query object for extracting data and information from data elements.
Definition: ElementsQuery.h:33
Scalar result values for a part.
Definition: DataPartScalar.h:31
Displacement results for a part.
Definition: DataPartDisplacement.h:31
Collection of coordinates (and optionally ids) of the element nodes in a part.
Definition: DataNodes.h:32
ResultMapping
Available scalar and vector result mappings.
Definition: Base.h:47
Vector class for a 3D double vector.
Definition: Vec3d.h:26
UnstructGridModel is a subclass of Model which adds specific model structure and functionality for re...
Definition: UnstructGridModel.h:72
Collection of elements in a part. Examples of element types are points, triangles or hexahedrons...
Definition: DataElements.h:31