From c25d4953df5bb104530db8331e9ca0cbca893086 Mon Sep 17 00:00:00 2001 From: astridkbjorke <abjorke@emgs.com> Date: Mon, 6 Mar 2017 13:32:42 +0100 Subject: [PATCH] #1276 - pre-proto - Adding dip rotation angle to fractures. --- ApplicationCode/ProjectDataModel/RimFracture.cpp | 12 ++++++++---- ApplicationCode/ProjectDataModel/RimFracture.h | 2 ++ .../ProjectDataModel/RimSimWellFracture.cpp | 1 + .../ProjectDataModel/RimWellPathFracture.cpp | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimFracture.cpp b/ApplicationCode/ProjectDataModel/RimFracture.cpp index 139b2a9b37..ee305b102d 100644 --- a/ApplicationCode/ProjectDataModel/RimFracture.cpp +++ b/ApplicationCode/ProjectDataModel/RimFracture.cpp @@ -83,6 +83,7 @@ RimFracture::RimFracture(void) CAF_PDM_InitField(&azimuth, "Azimuth", 0.0, "Azimuth", "", "", ""); azimuth.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName()); CAF_PDM_InitField(&perforationLength, "PerforationLength", 0.0, "Perforation Length", "", "", ""); + CAF_PDM_InitField(&dip, "Dip", 0.0, "Dip", "", "", ""); CAF_PDM_InitField(&showPolygonFractureOutline, "showPolygonFractureOutline", true, "Show Polygon Outline", "", "", ""); CAF_PDM_InitField(&fractureUnit, "fractureUnit", caf::AppEnum<RimDefines::UnitSystem>(RimDefines::UNITS_METRIC), "Fracture Unit System", "", "", ""); @@ -184,7 +185,8 @@ void RimFracture::fieldChangedByUi(const caf::PdmFieldHandle* changedField, cons changedField == &stimPlanTimeIndexToPlot || changedField == this->objectToggleField() || changedField == &showPolygonFractureOutline || - changedField == &fractureUnit) + changedField == &fractureUnit || + changedField == &dip) { setRecomputeGeometryFlag(); @@ -258,14 +260,16 @@ cvf::Mat4f RimFracture::transformMatrix() { cvf::Vec3d center = anchorPosition(); + // Dip (in XY plane) + cvf::Mat4f dipRotation = cvf::Mat4f::fromRotation(cvf::Vec3f::Z_AXIS, cvf::Math::toRadians(dip())); + // Ellipsis geometry is produced in XY-plane, rotate 90 deg around X to get zero azimuth along Y cvf::Mat4f rotationFromTesselator = cvf::Mat4f::fromRotation(cvf::Vec3f::X_AXIS, cvf::Math::toRadians(90.0f)); - - + // Azimuth rotation cvf::Mat4f azimuthRotation = cvf::Mat4f::fromRotation(cvf::Vec3f::Z_AXIS, cvf::Math::toRadians(-azimuth()-90)); - cvf::Mat4f m = azimuthRotation * rotationFromTesselator; + cvf::Mat4f m = azimuthRotation * rotationFromTesselator * dipRotation; m.setTranslation(cvf::Vec3f(center)); return m; diff --git a/ApplicationCode/ProjectDataModel/RimFracture.h b/ApplicationCode/ProjectDataModel/RimFracture.h index 17119b1e56..51b4f1ef90 100644 --- a/ApplicationCode/ProjectDataModel/RimFracture.h +++ b/ApplicationCode/ProjectDataModel/RimFracture.h @@ -54,6 +54,8 @@ public: caf::PdmField<double> azimuth; caf::PdmField<double> perforationLength; + caf::PdmField<double> dip; + caf::PdmField<int> stimPlanTimeIndexToPlot; caf::PdmField<bool> showPolygonFractureOutline; diff --git a/ApplicationCode/ProjectDataModel/RimSimWellFracture.cpp b/ApplicationCode/ProjectDataModel/RimSimWellFracture.cpp index 5972ad96e6..3c6c144950 100644 --- a/ApplicationCode/ProjectDataModel/RimSimWellFracture.cpp +++ b/ApplicationCode/ProjectDataModel/RimSimWellFracture.cpp @@ -171,6 +171,7 @@ void RimSimWellFracture::defineUiOrdering(QString uiConfigName, caf::PdmUiOrderi locationGroup->add(&m_location); locationGroup->add(&m_branchIndex); locationGroup->add(&azimuth); + locationGroup->add(&dip); caf::PdmUiGroup* propertyGroup = uiOrdering.addNewGroup("Properties"); propertyGroup->add(&m_fractureTemplate); diff --git a/ApplicationCode/ProjectDataModel/RimWellPathFracture.cpp b/ApplicationCode/ProjectDataModel/RimWellPathFracture.cpp index 071d84b482..75f5554535 100644 --- a/ApplicationCode/ProjectDataModel/RimWellPathFracture.cpp +++ b/ApplicationCode/ProjectDataModel/RimWellPathFracture.cpp @@ -156,7 +156,7 @@ void RimWellPathFracture::defineUiOrdering(QString uiConfigName, caf::PdmUiOrder caf::PdmUiGroup* locationGroup = uiOrdering.addNewGroup("Location / Orientation"); locationGroup->add(&m_measuredDepth); locationGroup->add(&azimuth); - + locationGroup->add(&dip); caf::PdmUiGroup* propertyGroup = uiOrdering.addNewGroup("Properties"); propertyGroup->add(&m_fractureTemplate);