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);