From 3e65bcfa88efca7e5c58854d0988cca75c5bf412 Mon Sep 17 00:00:00 2001 From: astridkbjorke Date: Wed, 1 Feb 2017 10:49:50 +0100 Subject: [PATCH] #1144 - pre-proto - Updating azimuth angles for fractures for connected fractures with this angle when angle is update in template. --- .../RimEllipseFractureTemplate.cpp | 28 +++++++++++++++++++ .../ProjectDataModel/RimFracture.cpp | 2 ++ .../ProjectDataModel/RimSimWellFracture.h | 2 +- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/ApplicationCode/ProjectDataModel/RimEllipseFractureTemplate.cpp b/ApplicationCode/ProjectDataModel/RimEllipseFractureTemplate.cpp index 71351abf5e..8c1f7b5403 100644 --- a/ApplicationCode/ProjectDataModel/RimEllipseFractureTemplate.cpp +++ b/ApplicationCode/ProjectDataModel/RimEllipseFractureTemplate.cpp @@ -107,6 +107,34 @@ void RimEllipseFractureTemplate::fieldChangedByUi(const caf::PdmFieldHandle* cha proj->createDisplayModelAndRedrawAllViews(); } } + + if (changedField == &azimuthAngle) + { + RimProject* proj; + this->firstAncestorOrThisOfType(proj); + if (proj) + { + std::vector fractures; + proj->descendantsIncludingThisOfType(fractures); + + for (RimFracture* fracture : fractures) + { + if (fracture->attachedFractureDefinition() == this) + { + if (abs(oldValue.toDouble() - fracture->azimuth()) < 1e-5 ) + { + fracture->azimuth = azimuthAngle; + fracture->setRecomputeGeometryFlag(); + } + } + } + + proj->createDisplayModelAndRedrawAllViews(); + } + + } + + } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimFracture.cpp b/ApplicationCode/ProjectDataModel/RimFracture.cpp index 227a428fe7..11832ea257 100644 --- a/ApplicationCode/ProjectDataModel/RimFracture.cpp +++ b/ApplicationCode/ProjectDataModel/RimFracture.cpp @@ -245,8 +245,10 @@ cvf::Mat4f RimFracture::transformMatrix() // 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())); + //TODO: Adjust angle with 90 deg cvf::Mat4f m = azimuthRotation * rotationFromTesselator; m.setTranslation(cvf::Vec3f(center)); diff --git a/ApplicationCode/ProjectDataModel/RimSimWellFracture.h b/ApplicationCode/ProjectDataModel/RimSimWellFracture.h index 0ccc3c7009..bcf9d8b656 100644 --- a/ApplicationCode/ProjectDataModel/RimSimWellFracture.h +++ b/ApplicationCode/ProjectDataModel/RimSimWellFracture.h @@ -40,6 +40,7 @@ public: virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; void recomputeWellCenterlineCoordinates(); + void updateFracturePositionFromLocation(); protected: @@ -48,7 +49,6 @@ protected: virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override; private: - void updateFracturePositionFromLocation(); void updateBranchGeometry(); void setBranchGeometry();