From 70f09723de27c73af99b6b3366f46865eea2b5a5 Mon Sep 17 00:00:00 2001
From: Julien Michel <julien.michel@orfeo-toolbox.org>
Date: Tue, 8 Jun 2010 18:00:47 +0200
Subject: [PATCH] ENH: Adding origin/spacing in VectorDataModel

---
 Code/Visualization/otbVectorDataModel.cxx | 19 +++++++++++++------
 Code/Visualization/otbVectorDataModel.h   | 14 ++++++++++++++
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/Code/Visualization/otbVectorDataModel.cxx b/Code/Visualization/otbVectorDataModel.cxx
index bbf46b68c1..2b132f4bb9 100644
--- a/Code/Visualization/otbVectorDataModel.cxx
+++ b/Code/Visualization/otbVectorDataModel.cxx
@@ -22,8 +22,11 @@ namespace otb
 
 VectorDataModel::VectorDataModel() :
   m_VectorData(), m_CurrentNodeType(FEATURE_POLYGON), m_CurrentRootNode(),
-  m_CurrentGeometry()    //, m_UpperModel()
+  m_CurrentGeometry(), m_Origin(),m_Spacing()    //, m_UpperModel()
 {
+  m_Origin.Fill(0.);
+  m_Spacing.Fill(1.);
+
   m_VectorData = VectorDataType::New();
   m_CurrentRootNode = DataNodeType::New();
   m_CurrentRootNode->SetNodeId("DOCUMENT");
@@ -41,6 +44,10 @@ void VectorDataModel::Update(void)
 
 void VectorDataModel::AddPointToGeometry(VertexType& vertex)
 {
+  VertexType newPoint;
+  newPoint[0] = m_Origin[0] + vertex[0]/m_Spacing[0];
+  newPoint[1] = m_Origin[1] + vertex[1]/m_Spacing[1];
+
   // Check if current node type changed, and if so, close current geometry first
   if(m_CurrentGeometry.IsNotNull() && m_CurrentNodeType != m_CurrentGeometry->GetNodeType())
     {
@@ -55,7 +62,7 @@ void VectorDataModel::AddPointToGeometry(VertexType& vertex)
       m_CurrentGeometry = DataNodeType::New();
       m_CurrentGeometry->SetNodeId("FEATURE_POINT");
       m_CurrentGeometry->SetNodeType(FEATURE_POINT);
-      m_CurrentGeometry->SetPoint(vertex);
+      m_CurrentGeometry->SetPoint(newPoint);
       m_VectorData->GetDataTree()->Add(m_CurrentGeometry, m_CurrentRootNode);
       m_CurrentGeometry = NULL;
       this->Modified();
@@ -77,8 +84,8 @@ void VectorDataModel::AddPointToGeometry(VertexType& vertex)
       m_CurrentGeometry->SetPolygonExteriorRing(exteriorRing);
       m_VectorData->GetDataTree()->Add(m_CurrentGeometry, m_CurrentRootNode);
       }
-    otbMsgDevMacro(<< "VectorDataModel::AddPoint: Adding point " << vertex);
-    m_CurrentGeometry->GetPolygonExteriorRing()->AddVertex(vertex);
+    otbMsgDevMacro(<< "VectorDataModel::AddPoint: Adding point " << newPoint);
+    m_CurrentGeometry->GetPolygonExteriorRing()->AddVertex(newPoint);
     }
   else if (m_CurrentNodeType == FEATURE_LINE)
     {
@@ -92,8 +99,8 @@ void VectorDataModel::AddPointToGeometry(VertexType& vertex)
       m_CurrentGeometry->SetLine(line);
       m_VectorData->GetDataTree()->Add(m_CurrentGeometry,m_CurrentRootNode);
       }
-    otbMsgDevMacro(<< "VectorDataModel::AddPoint: Adding point " << vertex);
-    m_CurrentGeometry->GetLine()->AddVertex(vertex);
+    otbMsgDevMacro(<< "VectorDataModel::AddPoint: Adding point " << newPoint);
+    m_CurrentGeometry->GetLine()->AddVertex(newPoint);
     }
   else
     {
diff --git a/Code/Visualization/otbVectorDataModel.h b/Code/Visualization/otbVectorDataModel.h
index 6175d6ee7b..3617d75123 100644
--- a/Code/Visualization/otbVectorDataModel.h
+++ b/Code/Visualization/otbVectorDataModel.h
@@ -46,6 +46,8 @@ public:
 
   typedef otb::VectorData<double, 2>   VectorDataType;
   typedef VectorDataType::DataNodeType DataNodeType;
+  typedef VectorDataType::PointType    PointType;
+  typedef VectorDataType::SpacingType  SpacingType;
   typedef VectorDataType::PolygonType  PolygonType;
   typedef VectorDataType::LineType     LineType;
   typedef PolygonType::VertexType      VertexType;
@@ -75,6 +77,12 @@ public:
   void SetSelectedGeometry(int n);
   itkGetObjectMacro(SelectedGeometry, DataNodeType);
 
+  itkSetMacro(Origin,PointType);
+  itkGetConstReferenceMacro(Origin,PointType);
+
+  itkSetMacro(Spacing,SpacingType);
+  itkGetConstReferenceMacro(Spacing,SpacingType);
+
 protected:
   /** Constructor */
   VectorDataModel();
@@ -98,6 +106,12 @@ private:
   /** Currently selected node */
   DataNodeType::Pointer m_SelectedGeometry;
 
+  /** Origin of image used for vectorization */
+  PointType m_Origin;
+
+  /** Spacing of image used for vectorization */
+  SpacingType m_Spacing;
+
 }; // end class
 } // end namespace otb
 
-- 
GitLab