Files
ResInsight/ApplicationCode/GeoMech/GeoMechVisualization/RivFemPartGeometryGenerator.h
T

89 lines
2.7 KiB
C++
Raw Normal View History

#pragma once
#include "cvfObject.h"
#include "cvfArray.h"
#include "RigFemPart.h"
2015-06-05 15:17:02 +02:00
#include "cvfStructGrid.h"
namespace cvf
{
class DrawableGeo;
class ScalarMapper;
}
class RigFemPartScalarDataAccess;
2015-06-05 15:17:02 +02:00
class RivFemPartTriangleToElmMapper : public cvf::Object
{
public:
size_t triangleCount() const { return m_trianglesToElementIndex.size();}
2015-06-05 15:17:02 +02:00
int elementIndex(size_t triangleIdx) const { return m_trianglesToElementIndex[triangleIdx]; }
char elementFace(size_t triangleIdx) const { return m_trianglesToElmFace[triangleIdx]; }
// Interface for building the mappings
std::vector<int>& triangleToElmIndexMap() { return m_trianglesToElementIndex; }
std::vector<char>& triangleToElmFaceMap() { return m_trianglesToElmFace; }
private:
std::vector<int> m_trianglesToElementIndex;
std::vector<char> m_trianglesToElmFace;
};
//==================================================================================================
//
//
//
//==================================================================================================
class RivFemPartGeometryGenerator : public cvf::Object
{
public:
RivFemPartGeometryGenerator(const RigFemPart* part);
~RivFemPartGeometryGenerator();
// Setup methods
void setElementVisibility(const cvf::UByteArray* cellVisibility);
// Access, valid after generation is done
const RigFemPart* activePart() { return m_part.p(); }
// Generated geometry
2015-06-05 15:17:02 +02:00
cvf::ref<cvf::DrawableGeo> generateSurface();
cvf::ref<cvf::DrawableGeo> createMeshDrawable();
cvf::ref<cvf::DrawableGeo> createOutlineMeshDrawable(double creaseAngle);
2015-06-05 15:17:02 +02:00
const std::vector<size_t>& quadVerticesToNodeIdxMapping() const { return m_quadVerticesToNodeIdx;}
2015-05-06 16:07:30 +02:00
const std::vector<size_t>& quadVerticesToGlobalElmNodeIdx() const { return m_quadVerticesToGlobalElmNodeIdx;}
2015-05-04 18:16:57 +02:00
2015-06-05 15:17:02 +02:00
RivFemPartTriangleToElmMapper* triangleToElementMapper() { return m_triangleMapper.p();}
private:
static cvf::ref<cvf::UIntArray>
lineIndicesFromQuadVertexArray(const cvf::Vec3fArray* vertexArray);
void computeArrays();
private:
// Input
cvf::cref<RigFemPart> m_part; // The part being processed
2015-06-05 15:17:02 +02:00
cvf::cref<cvf::UByteArray> m_elmVisibility;
// Created arrays
cvf::ref<cvf::Vec3fArray> m_quadVertices;
2015-06-05 15:17:02 +02:00
//cvf::ref<cvf::Vec3fArray> m_triangleVertices; // If needed, we will do it like this, I think
std::vector<size_t> m_quadVerticesToNodeIdx;
std::vector<size_t> m_quadVerticesToGlobalElmNodeIdx;
// Mappings
cvf::ref<RivFemPartTriangleToElmMapper> m_triangleMapper;
};