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