#2940 Geomech: Use display offset for FEM parts

This commit is contained in:
Jacob Støren 2018-05-18 13:39:20 +02:00
parent 2c2a2c6102
commit 439b8e22ad
3 changed files with 21 additions and 11 deletions

View File

@ -188,7 +188,7 @@ void RivFemPartGeometryGenerator::computeArrays()
trianglesToElements.reserve(estimatedQuadVxCount/2); trianglesToElements.reserve(estimatedQuadVxCount/2);
trianglesToElementFaces.reserve(estimatedQuadVxCount/2); trianglesToElementFaces.reserve(estimatedQuadVxCount/2);
cvf::Vec3d offset = Vec3d::ZERO; //m_part->displayModelOffset(); cvf::Vec3d displayOffset = m_part->boundingBox().min();
const std::vector<cvf::Vec3f>& nodeCoordinates = m_part->nodes().coordinates; const std::vector<cvf::Vec3f>& nodeCoordinates = m_part->nodes().coordinates;
#pragma omp parallel for schedule(dynamic) #pragma omp parallel for schedule(dynamic)
@ -217,12 +217,10 @@ void RivFemPartGeometryGenerator::computeArrays()
if (faceNodeCount == 4) if (faceNodeCount == 4)
{ {
const cvf::Vec3f* quadVxs[4]; cvf::Vec3f quadVxs0 ( cvf::Vec3d(nodeCoordinates[ elmNodeIndices[localElmNodeIndicesForFace[0]] ]) - displayOffset);
cvf::Vec3f quadVxs1 ( cvf::Vec3d(nodeCoordinates[ elmNodeIndices[localElmNodeIndicesForFace[1]] ]) - displayOffset);
quadVxs[0] = &(nodeCoordinates[ elmNodeIndices[localElmNodeIndicesForFace[0]] ]); cvf::Vec3f quadVxs2 ( cvf::Vec3d(nodeCoordinates[ elmNodeIndices[localElmNodeIndicesForFace[2]] ]) - displayOffset);
quadVxs[1] = &(nodeCoordinates[ elmNodeIndices[localElmNodeIndicesForFace[1]] ]); cvf::Vec3f quadVxs3 ( cvf::Vec3d(nodeCoordinates[ elmNodeIndices[localElmNodeIndicesForFace[3]] ]) - displayOffset);
quadVxs[2] = &(nodeCoordinates[ elmNodeIndices[localElmNodeIndicesForFace[2]] ]);
quadVxs[3] = &(nodeCoordinates[ elmNodeIndices[localElmNodeIndicesForFace[3]] ]);
int qNodeIdx[4]; int qNodeIdx[4];
qNodeIdx[0] = elmNodeIndices[localElmNodeIndicesForFace[0]]; qNodeIdx[0] = elmNodeIndices[localElmNodeIndicesForFace[0]];
@ -238,10 +236,10 @@ void RivFemPartGeometryGenerator::computeArrays()
#pragma omp critical #pragma omp critical
{ {
vertices.push_back(*quadVxs[0]); vertices.push_back(quadVxs0);
vertices.push_back(*quadVxs[1]); vertices.push_back(quadVxs1);
vertices.push_back(*quadVxs[2]); vertices.push_back(quadVxs2);
vertices.push_back(*quadVxs[3]); vertices.push_back(quadVxs3);
m_quadVerticesToNodeIdx.push_back(qNodeIdx[0]); m_quadVerticesToNodeIdx.push_back(qNodeIdx[0]);
m_quadVerticesToNodeIdx.push_back(qNodeIdx[1]); m_quadVerticesToNodeIdx.push_back(qNodeIdx[1]);

View File

@ -399,6 +399,14 @@ double RimGeoMechCase::frictionAngleDeg() const
return m_frictionAngleDeg; return m_frictionAngleDeg;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
cvf::Vec3d RimGeoMechCase::displayModelOffset() const
{
return this->allCellsBoundingBox().min();
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -78,7 +78,11 @@ public:
caf::PdmChildArrayField<RimGeoMechView*> geoMechViews; caf::PdmChildArrayField<RimGeoMechView*> geoMechViews;
private: private:
virtual cvf::Vec3d displayModelOffset() const override;
static std::vector<QDateTime> dateTimeVectorFromTimeStepStrings(const QStringList& timeStepStrings); static std::vector<QDateTime> dateTimeVectorFromTimeStepStrings(const QStringList& timeStepStrings);
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;