changeset 2000:3e9ced39cd1b

simplification
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 02 Nov 2022 13:52:14 +0100
parents 709b90ae0f89
children e943a84da9ac
files OrthancStone/Sources/Scene2D/AnnotationsSceneLayer.cpp
diffstat 1 files changed, 38 insertions(+), 49 deletions(-) [+]
line wrap: on
line diff
--- a/OrthancStone/Sources/Scene2D/AnnotationsSceneLayer.cpp	Wed Nov 02 13:44:13 2022 +0100
+++ b/OrthancStone/Sources/Scene2D/AnnotationsSceneLayer.cpp	Wed Nov 02 13:52:14 2022 +0100
@@ -189,13 +189,10 @@
       
     AnnotationsSceneLayer&  that_;
     GeometricPrimitives     primitives_;
-    Units                   units_;
       
   public:
-    explicit Annotation(AnnotationsSceneLayer& that,
-                        Units units) :
-      that_(that),
-      units_(units)
+    explicit Annotation(AnnotationsSceneLayer& that) :
+      that_(that)
     {
       that.AddAnnotation(this);
     }
@@ -213,11 +210,6 @@
       return that_;
     }
 
-    Units GetUnits() const
-    {
-      return units_;
-    }
-
     GeometricPrimitive* AddPrimitive(GeometricPrimitive* primitive)
     {
       if (primitive == NULL)
@@ -1108,12 +1100,11 @@
 
   public:
     SegmentAnnotation(AnnotationsSceneLayer& that,
-                      Units units,
                       Handle::Shape shape1,
                       const ScenePoint2D& p1,
                       Handle::Shape shape2,
                       const ScenePoint2D& p2) :
-      Annotation(that, units),
+      Annotation(that),
       handle1_(AddTypedPrimitive<Handle>(new Handle(*this, shape1, p1))),
       handle2_(AddTypedPrimitive<Handle>(new Handle(*this, shape2, p2))),
       segment_(AddTypedPrimitive<Segment>(new Segment(*this, p1, p2))),
@@ -1170,7 +1161,8 @@
   class AnnotationsSceneLayer::LengthAnnotation : public SegmentAnnotation
   {
   private:
-    bool      showLabel_;
+    Units  units_;
+    bool   showLabel_;
 
     void UpdateLabel()
     {
@@ -1200,7 +1192,7 @@
         double dy = y1 - y2;
         char buf[32];
 
-        switch (GetUnits())
+        switch (units_)
         {
           case Units_Millimeters:
             sprintf(buf, "%0.2f cm", sqrt(dx * dx + dy * dy) / 10.0);
@@ -1226,7 +1218,8 @@
                      bool showLabel,
                      const ScenePoint2D& p1,
                      const ScenePoint2D& p2) :
-      SegmentAnnotation(that, units, Handle::Shape_Square, p1, Handle::Shape_Square, p2),
+      SegmentAnnotation(that, Handle::Shape_Square, p1, Handle::Shape_Square, p2),
+      units_(units),
       showLabel_(showLabel)
     {
       UpdateLabel();
@@ -1278,11 +1271,10 @@
   {
   public:
     TextAnnotation(AnnotationsSceneLayer& that,
-                   Units units,
                    const std::string& label,
                    const ScenePoint2D& p1,
                    const ScenePoint2D& p2) :
-      SegmentAnnotation(that, units, Handle::Shape_Invisible, p1, Handle::Shape_Square, p2)
+      SegmentAnnotation(that, Handle::Shape_Invisible, p1, Handle::Shape_Square, p2)
     {
       SetStartArrow(true);
       UpdateLabel(label);
@@ -1336,7 +1328,6 @@
     }
 
     static void Unserialize(AnnotationsSceneLayer& target,
-                            Units units,
                             const Json::Value& source)
     {
       if (source.isMember(KEY_X1) &&
@@ -1350,7 +1341,7 @@
           source[KEY_Y2].isNumeric() &&
           source[KEY_LABEL].isString())
       {
-        new TextAnnotation(target, units, source[KEY_LABEL].asString(),
+        new TextAnnotation(target, source[KEY_LABEL].asString(),
                            ScenePoint2D(source[KEY_X1].asDouble(), source[KEY_Y1].asDouble()),
                            ScenePoint2D(source[KEY_X2].asDouble(), source[KEY_Y2].asDouble()));
       }
@@ -1380,9 +1371,8 @@
     }
 
   public:
-    ProbingAnnotation(AnnotationsSceneLayer& that,
-                      Units units) :
-      Annotation(that, units),
+    ProbingAnnotation(AnnotationsSceneLayer& that) :
+      Annotation(that),
       probedLayer_(that.GetProbedLayer()),
       probeChanged_(true),
       lastLayerRevision_(0)
@@ -1468,9 +1458,8 @@
 
   public:
     PixelProbeAnnotation(AnnotationsSceneLayer& that,
-                         Units units,
                          const ScenePoint2D& p) :
-      ProbingAnnotation(that, units),
+      ProbingAnnotation(that),
       handle_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_CrossedSquare, p))),
       label_(AddTypedPrimitive<Text>(new Text(that, *this)))
     {
@@ -1517,7 +1506,6 @@
     }
 
     static void Unserialize(AnnotationsSceneLayer& target,
-                            Units units,
                             const Json::Value& source)
     {
       if (source.isMember(KEY_X) &&
@@ -1525,8 +1513,7 @@
           source[KEY_X].isNumeric() &&
           source[KEY_Y].isNumeric())
       {
-        new PixelProbeAnnotation(target, units,
-                                 ScenePoint2D(source[KEY_X].asDouble(), source[KEY_Y].asDouble()));
+        new PixelProbeAnnotation(target, ScenePoint2D(source[KEY_X].asDouble(), source[KEY_Y].asDouble()));
       }
       else
       {
@@ -1579,11 +1566,10 @@
 
   public:
     AngleAnnotation(AnnotationsSceneLayer& that,
-                    Units units,
                     const ScenePoint2D& start,
                     const ScenePoint2D& middle,
                     const ScenePoint2D& end) :
-      Annotation(that, units),
+      Annotation(that),
       startHandle_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, start))),
       middleHandle_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, middle))),
       endHandle_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, end))),
@@ -1679,7 +1665,6 @@
     }
 
     static void Unserialize(AnnotationsSceneLayer& target,
-                            Units units,
                             const Json::Value& source)
     {
       if (source.isMember(KEY_X1) &&
@@ -1695,7 +1680,7 @@
           source[KEY_X3].isNumeric() &&
           source[KEY_Y3].isNumeric())
       {
-        new AngleAnnotation(target, units,
+        new AngleAnnotation(target,
                             ScenePoint2D(source[KEY_X1].asDouble(), source[KEY_Y1].asDouble()),
                             ScenePoint2D(source[KEY_X2].asDouble(), source[KEY_Y2].asDouble()),
                             ScenePoint2D(source[KEY_X3].asDouble(), source[KEY_Y3].asDouble()));
@@ -1711,6 +1696,7 @@
   class AnnotationsSceneLayer::CircleAnnotation : public Annotation
   {
   private:
+    Units     units_;
     Handle&   handle1_;
     Handle&   handle2_;
     Segment&  segment_;
@@ -1747,7 +1733,7 @@
         
       char buf[32];
 
-      switch (GetUnits())
+      switch (units_)
       {
         case Units_Millimeters:
           sprintf(buf, "%0.2f cm\n%0.2f cm%c%c",
@@ -1775,7 +1761,8 @@
                      Units units,
                      const ScenePoint2D& p1,
                      const ScenePoint2D& p2) :
-      Annotation(that, units),
+      Annotation(that),
+      units_(units),
       handle1_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, p1))),
       handle2_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, p2))),
       segment_(AddTypedPrimitive<Segment>(new Segment(*this, p1, p2))),
@@ -1877,6 +1864,7 @@
   class AnnotationsSceneLayer::RectangleProbeAnnotation : public ProbingAnnotation
   {
   private:
+    Units     units_;
     Handle&   handle1_;
     Handle&   handle2_;
     Segment&  segment1_;
@@ -1911,7 +1899,7 @@
       
       char buf[32];
 
-      if (GetUnits() == Units_Millimeters)
+      if (units_ == Units_Millimeters)
       {
         const double area = std::abs(x1 - x2) * std::abs(y1 - y2);
 
@@ -1979,7 +1967,8 @@
                              Units units,
                              const ScenePoint2D& p1,
                              const ScenePoint2D& p2) :
-      ProbingAnnotation(that, units),
+      ProbingAnnotation(that),
+      units_(units),
       handle1_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, p1))),
       handle2_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, p2))),
       segment1_(AddTypedPrimitive<Segment>(new Segment(*this, p1.GetX(), p1.GetY(), p2.GetX(), p1.GetY()))),
@@ -2134,6 +2123,7 @@
   class AnnotationsSceneLayer::EllipseProbeAnnotation : public ProbingAnnotation
   {
   private:
+    Units     units_;
     Handle&   handle1_;
     Handle&   handle2_;
     Ellipse&  ellipse_;
@@ -2165,7 +2155,7 @@
       
       char buf[32];
 
-      if (GetUnits() == Units_Millimeters)
+      if (units_ == Units_Millimeters)
       {
         sprintf(buf, "Area: %0.2f cm%c%c",
                 ellipse_.GetArea() / 100.0,
@@ -2237,7 +2227,8 @@
                            Units units,
                            const ScenePoint2D& p1,
                            const ScenePoint2D& p2) :
-      ProbingAnnotation(that, units),
+      ProbingAnnotation(that),
+      units_(units),
       handle1_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, p1))),
       handle2_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, p2))),
       ellipse_(AddTypedPrimitive<Ellipse>(new Ellipse(*this, p1, p2))),
@@ -2397,7 +2388,6 @@
       
   public:
     CreateAngleTracker(AnnotationsSceneLayer& that,
-                       Units units,
                        const ScenePoint2D& sceneClick,
                        const AffineTransform2D& canvasToScene) :
       that_(that),
@@ -2405,7 +2395,7 @@
       angle_(NULL),
       canvasToScene_(canvasToScene)
     {
-      length_ = new LengthAnnotation(that, units, false /* no length label */, sceneClick, sceneClick);
+      length_ = new LengthAnnotation(that, that.GetUnits(), false /* no length label */, sceneClick, sceneClick);
     }
 
     virtual void PointerMove(const PointerEvent& event,
@@ -2433,7 +2423,7 @@
       {
         // End of first step: The first segment is available, now create the angle
 
-        angle_ = new AngleAnnotation(that_, length_->GetUnits(), length_->GetHandle(0).GetCenter(),
+        angle_ = new AngleAnnotation(that_, length_->GetHandle(0).GetCenter(),
                                      length_->GetHandle(1).GetCenter(),
                                      length_->GetHandle(1).GetCenter());
           
@@ -2482,11 +2472,10 @@
   {
   public:
     CreatePixelProbeTracker(AnnotationsSceneLayer& that,
-                            Units units,
                             const ScenePoint2D& sceneClick,
                             const Scene2D& scene)
     {
-      PixelProbeAnnotation* annotation = new PixelProbeAnnotation(that, units, sceneClick);
+      PixelProbeAnnotation* annotation = new PixelProbeAnnotation(that, sceneClick);
       annotation->UpdateProbe(scene);
       that.BroadcastMessage(AnnotationAddedMessage(that));
     }
@@ -2641,7 +2630,7 @@
                                                  const ScenePoint2D& p2,
                                                  const ScenePoint2D& p3)
   {
-    annotations_.insert(new AngleAnnotation(*this, units_, p1, p2, p3));
+    annotations_.insert(new AngleAnnotation(*this, p1, p2, p3));
   }
   
 
@@ -2803,10 +2792,10 @@
           }
 
           case Tool_Angle:
-            return new CreateAngleTracker(*this, units_, s, scene.GetCanvasToSceneTransform());
+            return new CreateAngleTracker(*this, s, scene.GetCanvasToSceneTransform());
 
           case Tool_PixelProbe:
-            return new CreatePixelProbeTracker(*this, units_, s, scene);
+            return new CreatePixelProbeTracker(*this, s, scene);
 
           case Tool_RectangleProbe:
           {
@@ -2822,7 +2811,7 @@
 
           case Tool_TextAnnotation:
           {
-            Annotation* annotation = new TextAnnotation(*this, units_, "" /* empty label */, s, s);
+            Annotation* annotation = new TextAnnotation(*this, "" /* empty label */, s, s);
             return new CreateTwoHandlesTracker(*annotation, scene.GetCanvasToSceneTransform());
           }
 
@@ -2909,7 +2898,7 @@
 
       if (type == VALUE_ANGLE)
       {
-        AngleAnnotation::Unserialize(*this, units_, annotations[i]);
+        AngleAnnotation::Unserialize(*this, annotations[i]);
       }
       else if (type == VALUE_CIRCLE)
       {
@@ -2921,7 +2910,7 @@
       }
       else if (type == VALUE_PIXEL_PROBE)
       {
-        PixelProbeAnnotation::Unserialize(*this, units_, annotations[i]);
+        PixelProbeAnnotation::Unserialize(*this, annotations[i]);
       }
       else if (type == VALUE_RECTANGLE_PROBE)
       {
@@ -2933,7 +2922,7 @@
       }
       else if (type == VALUE_TEXT_ANNOTATION)
       {
-        TextAnnotation::Unserialize(*this, units_, annotations[i]);
+        TextAnnotation::Unserialize(*this, annotations[i]);
       }
       else
       {