diff --git a/Code/IO/CMakeLists.txt b/Code/IO/CMakeLists.txt
index c678c371d324cea979272d5fe9ea03e00b0b835e..54cc874302720870751213a7ca50d27a73402078 100644
--- a/Code/IO/CMakeLists.txt
+++ b/Code/IO/CMakeLists.txt
@@ -30,7 +30,7 @@ ADD_LIBRARY(OTBIO ${OTBIO_SRCS})
 #    LINK_INTERFACE_LIBRARIES ""
 #  )
 TARGET_LINK_LIBRARIES (OTBIO  ${TIFF_LIBRARY} ${GEOTIFF_LIBRARY}  ${GDAL_LIBRARY} ${OGR_LIBRARY} ${JPEG_LIBRARY} OTBCommon)
-TARGET_LINK_LIBRARIES (OTBIO otbossim otbossimplugins ITKIO ITKCommon dxf otbkml tinyXML)
+TARGET_LINK_LIBRARIES (OTBIO otbossim otbossimplugins ITKIO ITKCommon otbkml tinyXML)
 
 IF (OTB_USE_LIBLAS)
 IF(OTB_USE_EXTERNAL_LIBLAS)
diff --git a/Code/IO/otbDXFToSpatialObjectGroupFilter.h b/Code/IO/otbDXFToSpatialObjectGroupFilter.h
deleted file mode 100644
index cf5924b2cb63d1d50c888eac368334e3b632bc83..0000000000000000000000000000000000000000
--- a/Code/IO/otbDXFToSpatialObjectGroupFilter.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*=========================================================================
-
-  Program:   ORFEO Toolbox
-  Language:  C++
-  Date:      $Date$
-  Version:   $Revision$
-
-
-  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
-  See OTBCopyright.txt for details.
-
-
-     This software is distributed WITHOUT ANY WARRANTY; without even
-     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-     PURPOSE.  See the above copyright notices for more information.
-
-=========================================================================*/
-#ifndef __otbDXFToSpatialObjectGroupFilter_h
-#define __otbDXFToSpatialObjectGroupFilter_h
-
-#include "dl_creationadapter.h"
-#include "itkGroupSpatialObject.h"
-#include "otbSpatialObjectSource.h"
-
-#include "itkEllipseSpatialObject.h"
-#include "itkGroupSpatialObject.h"
-#include "itkSpatialObjectPoint.h"
-#include "itkLandmarkSpatialObject.h"
-#include "otbLineSpatialObject.h"
-#include "itkLineSpatialObjectPoint.h"
-
-namespace otb
-{
-/** \class DXFToSpatialObjectGroupFilter
- *  \brief TODO
- *
- */
-template <class TSpatialObject>
-class ITK_EXPORT DXFToSpatialObjectGroupFilter
-  : public DL_CreationAdapter, public SpatialObjectSource<TSpatialObject>
-{
-public:
-  /** Standard typedefs */
-  typedef DXFToSpatialObjectGroupFilter       Self;
-  typedef SpatialObjectSource<TSpatialObject> Superclass;
-  typedef itk::SmartPointer<Self>             Pointer;
-  typedef itk::SmartPointer<const Self>       ConstPointer;
-
-  /** Method for creation through the object factory */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(SpatialObjectReader, SpatialObjectSource);
-
-  /** Spatial objects typedefs */
-  typedef TSpatialObject                                               GroupSpatialObjectType;
-  typedef typename GroupSpatialObjectType::Pointer                     GroupPointer;
-  typedef itk::SpatialObjectPoint<TSpatialObject::ObjectDimension>     PointType;
-  typedef itk::LandmarkSpatialObject<TSpatialObject::ObjectDimension>  LandmarkType;
-  typedef typename LandmarkType::Pointer                               LandmarkPointer;
-  typedef typename  LandmarkType::PointListType                        LandmarkListType;
-  typedef LineSpatialObject<TSpatialObject::ObjectDimension>           LineType;
-  typedef typename LineType::Pointer                                   LinePointer;
-  typedef itk::LineSpatialObjectPoint<TSpatialObject::ObjectDimension> LinePointType;
-  typedef typename LineType::PointListType                             LineListType;
-  typedef itk::EllipseSpatialObject<TSpatialObject::ObjectDimension>   EllipseType;
-  typedef typename EllipseType::Pointer                                EllipsePointer;
-  typedef std::vector<LinePointType>                                   PointListType;
-
-  virtual void addLayer(const DL_LayerData& data);
-  virtual void addPoint(const DL_PointData& data);
-  virtual void addLine(const DL_LineData& data);
-  virtual void add3DFace(const DL_3DFaceData& data);
-  virtual void addArc(const DL_ArcData& data);
-  virtual void addCircle(const DL_CircleData& data);
-  virtual void addPolyline(const DL_PolylineData& data);
-  virtual void addVertex(const DL_VertexData& data);
-  virtual void SetLayer(const char* layer);
-
-  /** Workaround while waiting for the SpatialObject bug to be fixed */
-  virtual void Update(void);
-
-protected:
-  /** Constructor */
-  DXFToSpatialObjectGroupFilter();
-  /** Destructor */
-  virtual ~DXFToSpatialObjectGroupFilter() {}
-
-  /** Main computation method */
-  virtual void GenerateData(void);
-
-  /** PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
-
-private:
-  DXFToSpatialObjectGroupFilter(const Self &); //purposely not implemented
-  void operator =(const Self&); //purposely not implemented
-  int           m_CurrentObjectType;
-  LineListType  m_PointList;
-  LinePointType m_PremierPoint;
-  int           m_PolylineClosed; //(=1 if the polyline is closed,else =0 );
-  const char*   m_layer;
-  bool          layerspecified;
-};
-}
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbDXFToSpatialObjectGroupFilter.txx"
-#endif
-
-#endif
diff --git a/Code/IO/otbDXFToSpatialObjectGroupFilter.txx b/Code/IO/otbDXFToSpatialObjectGroupFilter.txx
deleted file mode 100644
index 694a6d01a2796d0d7bb6fc1c0f6a3efe9d67fe3a..0000000000000000000000000000000000000000
--- a/Code/IO/otbDXFToSpatialObjectGroupFilter.txx
+++ /dev/null
@@ -1,431 +0,0 @@
-/*=========================================================================
-
-  Program:   ORFEO Toolbox
-  Language:  C++
-  Date:      $Date$
-  Version:   $Revision$
-
-
-  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
-  See OTBCopyright.txt for details.
-
-
-     This software is distributed WITHOUT ANY WARRANTY; without even
-     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-     PURPOSE.  See the above copyright notices for more information.
-
-=========================================================================*/
-#ifndef __otbDXFToSpatialObjectGroupFilter_txx
-#define __otbDXFToSpatialObjectGroupFilter_txx
-
-#include "otbDXFToSpatialObjectGroupFilter.h"
-
-namespace otb
-{
-/**
- * Constructor.
- */
-template <class TSpatialObject>
-DXFToSpatialObjectGroupFilter<TSpatialObject>
-::DXFToSpatialObjectGroupFilter()
-{
-  m_CurrentObjectType = 0;
-  m_PointList.clear();
-  m_layer = "";
-  layerspecified = false;
-  this->SetNumberOfRequiredOutputs(0);
-}
-/**
- * Set the layer to read
- */
-template <class TSpatialObject>
-void
-DXFToSpatialObjectGroupFilter<TSpatialObject>
-::SetLayer(const char* layer)
-{
-  m_layer = layer;
-  layerspecified = true;
-}
-/**
- * Sample implementation of the method which handles layers.
- */
-template <class TSpatialObject>
-void
-DXFToSpatialObjectGroupFilter<TSpatialObject>
-::addLayer(const DL_LayerData& data)
-{
-  GroupPointer grpPtr = this->GetOutput();
-  //If the previous object is a vertex we create the polyline:
-  if (m_CurrentObjectType == 6)
-    {
-    //If the polyline is closed then we add the first point at the end of the list:
-    if (m_PolylineClosed == 1)
-      {
-      m_PointList.push_back(m_PremierPoint);
-      }
-    LinePointer m_CurrentPolyLine = LineType::New();
-    m_CurrentPolyLine->SetPoints(m_PointList);
-    if (layerspecified)
-      {
-      if (!strcmp(attributes.getLayer().c_str(), m_layer))
-        {
-        grpPtr->AddSpatialObject(m_CurrentPolyLine);
-        }
-      }
-    else grpPtr->AddSpatialObject(m_CurrentPolyLine);
-    }
-  m_CurrentObjectType = 0;
-  otbMsgDebugMacro(<< "LAYER: " << data.name << " flags: " << data.flags);
-
-}
-/**
- * Sample implementation of the method which handles point entities.
- */
-template <class TSpatialObject>
-void
-DXFToSpatialObjectGroupFilter<TSpatialObject>
-::addPoint(const DL_PointData& data)
-{
-  GroupPointer grpPtr = this->GetOutput();
-  //If the previous object is a vertex we create the polyline:
-  if (m_CurrentObjectType == 6)
-    {
-    //If the polyline is closed then we add the first point at the end of the list:
-    if (m_PolylineClosed == 1)
-      {
-      m_PointList.push_back(m_PremierPoint);
-      }
-    LinePointer m_CurrentPolyLine = LineType::New();
-    m_CurrentPolyLine->SetPoints(m_PointList);
-    if (layerspecified)
-      {
-      if (!strcmp(attributes.getLayer().c_str(), m_layer))
-        {
-        grpPtr->AddSpatialObject(m_CurrentPolyLine);
-        }
-      }
-    else grpPtr->AddSpatialObject(m_CurrentPolyLine);
-    }
-  m_CurrentObjectType = 1;
-  LandmarkPointer  landmark = LandmarkType::New();
-  PointType        point;
-  LandmarkListType list;
-  point.SetPosition(data.x, data.y, data.z);
-  list.push_back(point);
-  landmark->SetPoints(list);
-  if (layerspecified)
-    {
-    if (!strcmp(attributes.getLayer().c_str(), m_layer))
-      {
-      grpPtr->AddSpatialObject(landmark);
-      }
-    }
-  else grpPtr->AddSpatialObject(landmark);
-  otbMsgDebugMacro(
-    << "POINT (" << data.x << ", " << data.y << ", " << data.z << ") ( nb objects " << grpPtr->GetNumberOfChildren() <<
-    ")");
-
-}
-/**
- * Sample implementation of the method which handles line entities.
- */
-template <class TSpatialObject>
-void
-DXFToSpatialObjectGroupFilter<TSpatialObject>
-::addLine(const DL_LineData& data)
-{
-  GroupPointer grpPtr = this->GetOutput();
-  //If the previous object is a vertex we create the polyline:
-  if (m_CurrentObjectType == 6)
-    {
-    //If the polyline is closed then we add the first point at the end of the list:
-    if (m_PolylineClosed == 1)
-      {
-      m_PointList.push_back(m_PremierPoint);
-      }
-    LinePointer m_CurrentPolyLine = LineType::New();
-    m_CurrentPolyLine->SetPoints(m_PointList);
-    if (layerspecified)
-      {
-      if (!strcmp(attributes.getLayer().c_str(), m_layer))
-        {
-        grpPtr->AddSpatialObject(m_CurrentPolyLine);
-        }
-      }
-    else grpPtr->AddSpatialObject(m_CurrentPolyLine);
-    }
-  m_CurrentObjectType = 2;
-  LinePointer   line = LineType::New();
-  LinePointType point1, point2;
-  LineListType  list, pointlist;
-  pointlist.clear();
-  point1.SetPosition(data.x1, data.y1, data.z1);
-  list.push_back(point1);
-  point2.SetPosition(data.x2, data.y2, data.z2);
-  list.push_back(point2);
-  line->SetPoints(list);
-  if (layerspecified)
-    {
-    if (!strcmp(attributes.getLayer().c_str(), m_layer))
-      {
-      grpPtr->AddSpatialObject(line);
-      }
-    }
-  else grpPtr->AddSpatialObject(line);
-  otbMsgDebugMacro(<< "LINE " << "(" << data.x1 << ", " << data.y1 << ", " << data.z1 << ") ("
-                   << data.x2 << ", " << data.y2 << ", " << data.z2 << grpPtr->GetNumberOfChildren() << ")");
-
-}
-/**
- * Sample implementation of the method which handles 3DFace entities.
- */
-template <class TSpatialObject>
-void
-DXFToSpatialObjectGroupFilter<TSpatialObject>
-::add3DFace(const DL_3DFaceData& data)
-{
-  GroupPointer grpPtr = this->GetOutput();
-  //If the previous object is a vertex we create the polyline:
-  if (m_CurrentObjectType == 6)
-    {
-    //If the polyline is closed then we add the first point at the end of the list:
-    if (m_PolylineClosed == 1)
-      {
-      m_PointList.push_back(m_PremierPoint);
-      }
-    LinePointer m_CurrentPolyLine = LineType::New();
-    m_CurrentPolyLine->SetPoints(m_PointList);
-    if (layerspecified)
-      {
-      if (!strcmp(attributes.getLayer().c_str(), m_layer))
-        {
-        grpPtr->AddSpatialObject(m_CurrentPolyLine);
-        }
-      }
-    else grpPtr->AddSpatialObject(m_CurrentPolyLine);
-    }
-  m_CurrentObjectType = 7;
-  LinePointer   line = LineType::New();
-  LinePointType point1, point2, point3, point4;
-  LineListType  list, pointlist;
-  pointlist.clear();
-  point1.SetPosition(data.x1, data.y1, data.z1);
-  list.push_back(point1);
-  point2.SetPosition(data.x2, data.y2, data.z2);
-  list.push_back(point2);
-  point3.SetPosition(data.x3, data.y3, data.z3);
-  list.push_back(point3);
-  point4.SetPosition(data.x4, data.y4, data.z4);
-  list.push_back(point4);
-  list.push_back(point1);
-  line->SetPoints(list);
-  if (layerspecified)
-    {
-    if (!strcmp(attributes.getLayer().c_str(), m_layer))
-      {
-      grpPtr->AddSpatialObject(line);
-      }
-    }
-  else grpPtr->AddSpatialObject(line);
-  otbMsgDebugMacro(<< "3D Face " << "(" << data.x1 << ", " << data.y1 << ", " << data.z1 << ") ("
-                   << data.x2 << ", " << data.y2 << ", " << data.z2 << ") ("
-                   << data.x3 << ", " << data.y3 << ", " << data.z3 << ") ("
-                   << data.x4 << ", " << data.y4 << ", " << data.z4 << ") ("
-                   << grpPtr->GetNumberOfChildren() << ")");
-
-}
-/**
- * Sample implementation of the method which handles arc entities.
- */
-template <class TSpatialObject>
-void
-DXFToSpatialObjectGroupFilter<TSpatialObject>
-::addArc(const DL_ArcData& data)
-{
-  GroupPointer grpPtr = this->GetOutput();
-  //If the previous object is a vertex we create the polyline:
-  if (m_CurrentObjectType == 6)
-    {
-    //If the polyline is closed then we add the first point at the end of the list:
-    if (m_PolylineClosed == 1)
-      {
-      m_PointList.push_back(m_PremierPoint);
-      }
-    LinePointer m_CurrentPolyLine = LineType::New();
-    m_CurrentPolyLine->SetPoints(m_PointList);
-    if (layerspecified)
-      {
-      if (!strcmp(attributes.getLayer().c_str(), m_layer))
-        {
-        grpPtr->AddSpatialObject(m_CurrentPolyLine);
-        }
-      }
-    else grpPtr->AddSpatialObject(m_CurrentPolyLine);
-    }
-  otbMsgDebugMacro(<< "ARC (" << data.cx << ", " << data.cy << ", " << data.cz << ") "
-                   << data.radius << ", " << data.angle1 << ", " << data.angle2
-                   << " (nb objects " << grpPtr->GetNumberOfChildren() << ")");
-
-}
-
-/**
- * Sample implementation of the method which handles circle entities.
- */
-template <class TSpatialObject>
-void
-DXFToSpatialObjectGroupFilter<TSpatialObject>
-::addCircle(const DL_CircleData& data)
-{
-  GroupPointer grpPtr = this->GetOutput();
-  //If the previous object is a vertex we create the polyline:
-  if (m_CurrentObjectType == 6)
-    {
-    //If the polyline is closed then we add the first point at the end of the list:
-    if (m_PolylineClosed == 1)
-      {
-      m_PointList.push_back(m_PremierPoint);
-      }
-    LinePointer m_CurrentPolyLine = LineType::New();
-    m_CurrentPolyLine->SetPoints(m_PointList);
-    if (layerspecified)
-      {
-      if (!strcmp(attributes.getLayer().c_str(), m_layer))
-        {
-        grpPtr->AddSpatialObject(m_CurrentPolyLine);
-        }
-      }
-    else grpPtr->AddSpatialObject(m_CurrentPolyLine);
-    }
-  m_CurrentObjectType = 4;
-  EllipsePointer ellipse = EllipseType::New();
-  ellipse->SetRadius(data.radius);
-  double offset[TSpatialObject::ObjectDimension];
-  offset[0] = data.cx;
-  offset[1] = data.cy;
-  if (TSpatialObject::ObjectDimension == 3)
-    {
-    offset[2] = data.cz;
-    }
-  ellipse->GetObjectToParentTransform()->SetOffset(offset);
-  ellipse->ComputeObjectToWorldTransform();
-  if (layerspecified)
-    {
-    if (!strcmp(attributes.getLayer().c_str(), m_layer))
-      {
-      grpPtr->AddSpatialObject(ellipse);
-      }
-    }
-  else grpPtr->AddSpatialObject(ellipse);
-
-  otbMsgDebugMacro(<< "CIRCLE (" << data.cx << ", " << data.cy << ", " << data.cz << ") "
-                   << data.radius
-                   << " (nb objects " << grpPtr->GetNumberOfChildren() << ")");
-
-}
-/**
- * Sample implementation of the method which handles polyline entities.
- */
-template <class TSpatialObject>
-void
-DXFToSpatialObjectGroupFilter<TSpatialObject>
-::addPolyline(const DL_PolylineData& data)
-{
-  GroupPointer grpPtr = this->GetOutput();
-  //If the previous object is a vertex we create the polyline:
-  if (m_CurrentObjectType == 6)
-    {
-    //If the polyline is closed then we add the first point at the end of the list:
-    if (m_PolylineClosed == 1)
-      {
-      m_PointList.push_back(m_PremierPoint);
-      }
-    LinePointer m_CurrentPolyLine = LineType::New();
-    m_CurrentPolyLine->SetPoints(m_PointList);
-    if (layerspecified)
-      {
-      if (!strcmp(attributes.getLayer().c_str(), m_layer))
-        {
-        grpPtr->AddSpatialObject(m_CurrentPolyLine);
-        }
-      }
-    else grpPtr->AddSpatialObject(m_CurrentPolyLine);
-    }
-  m_CurrentObjectType = 5;
-
-  m_PointList.clear(); //reset list
-
-  if ((int) data.flags == 1)
-    {
-    m_PolylineClosed = 1;
-    }
-  else m_PolylineClosed = 0;
-  otbMsgDebugMacro(<< "POLYLINE ");
-  otbMsgDebugMacro(<< "flags: " << data.flags << ",nombre de sommets: " << data.number);
-
-}
-
-/**
- * Sample implementation of the method which handles vertices.
- */
-template <class TSpatialObject>
-void
-DXFToSpatialObjectGroupFilter<TSpatialObject>
-::addVertex(const DL_VertexData& data)
-{
-  GroupPointer grpPtr = this->GetOutput();
-  m_CurrentObjectType = 6;
-  LinePointType point;
-  point.SetPosition(data.x, data.y, data.z);
-  m_PointList.push_back(point);
-  m_PremierPoint = m_PointList[0];
-  otbMsgDebugMacro(<< "VERTEX (" << data.x << ", " << data.y << ", " << data.z << ") "
-                   << data.bulge
-                   << " (nb objects " << grpPtr->GetNumberOfChildren() << ")");
-
-}
-
-template <class TSpatialObject>
-void
-DXFToSpatialObjectGroupFilter<TSpatialObject>
-::GenerateData()
-{
-  GroupPointer grpPtr = this->GetOutput();
-  //If the previous object is a vertex we create the polyline:
-  if (m_CurrentObjectType == 6)
-    {
-    //If the polyline is closed then we add the first point at the end of the list:
-    if (m_PolylineClosed == 1)
-      {
-      m_PointList.push_back(m_PremierPoint);
-      }
-    LinePointer m_CurrentPolyLine = LineType::New();
-    m_CurrentPolyLine->SetPoints(m_PointList);
-    if (layerspecified)
-      {
-      if (!strcmp(attributes.getLayer().c_str(), m_layer))
-        {
-        grpPtr->AddSpatialObject(m_CurrentPolyLine);
-        }
-      }
-    else grpPtr->AddSpatialObject(m_CurrentPolyLine);
-    }
-}
-
-template <class TSpatialObject>
-void
-DXFToSpatialObjectGroupFilter<TSpatialObject>
-::Update()
-{
-  this->GenerateData();
-}
-
-template <class TSpatialObject>
-void
-DXFToSpatialObjectGroupFilter<TSpatialObject>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} //namespace otb
-
-#endif
diff --git a/Code/IO/otbSpatialObjectDXFReader.h b/Code/IO/otbSpatialObjectDXFReader.h
deleted file mode 100644
index 6ffb4a054abe8c25fa39c868afe105457d2fdd7c..0000000000000000000000000000000000000000
--- a/Code/IO/otbSpatialObjectDXFReader.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*=========================================================================
-
-  Program:   ORFEO Toolbox
-  Language:  C++
-  Date:      $Date$
-  Version:   $Revision$
-
-
-  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
-  See OTBCopyright.txt for details.
-
-
-     This software is distributed WITHOUT ANY WARRANTY; without even
-     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-     PURPOSE.  See the above copyright notices for more information.
-
-=========================================================================*/
-#ifndef __otbSpatialObjectDXFReader_h
-#define __otbSpatialObjectDXFReader_h
-
-#include "itkGroupSpatialObject.h"
-#include "otbSpatialObjectSource.h"
-
-namespace otb
-{
-/** \class SpatialObjectDXFReader
- *  \brief This class reads the DXF file format to SpatialObjects.
- *
- *  \ingroup ObjectSource
- *
- * \example IO/DXFReaderExample.cxx
- *
- */
-template <class TSpatialObject>
-class ITK_EXPORT SpatialObjectDXFReader
-  : public SpatialObjectSource<TSpatialObject>
-{
-public:
-  typedef SpatialObjectDXFReader              Self;
-  typedef SpatialObjectSource<TSpatialObject> Superclass;
-  typedef itk::SmartPointer<Self>             Pointer;
-  typedef itk::SmartPointer<const Self>       ConstPointer;
-
-  /** Method for creation through the object factory */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(SpatialObjectDXFReader, SpatialObjectSource);
-
-  /** Superclass Typedefs */
-  typedef TSpatialObject                           GroupSpatialObjectType;
-  typedef typename GroupSpatialObjectType::Pointer GroupSpatialObjectPointerType;
-
-  /** Set the filename  */
-  void SetFileName(char * filename);
-
-  /** Get the filename */
-  itkGetStringMacro(FileName);
-
-  /** Set The layer name */
-  itkSetStringMacro(LayerName);
-
-  /** Get The layer name */
-  itkGetStringMacro(LayerName);
-
-  /** Workaround while waiting for the SpatialObject bug to be fixed */
-  virtual void Update(void);
-
-protected:
-  /** Constructor */
-  SpatialObjectDXFReader();
-  /** Destructor */
-  virtual ~SpatialObjectDXFReader();
-  /** Main computation method */
-  virtual void GenerateData();
-
-private:
-  SpatialObjectDXFReader(const Self &); //purposely not implemented
-  void operator =(const Self&); //purposely not implemented
-
-  /** Test whether the given filename exist and it is readable,
-      this is intended to be called before attempting to use
-      ImageIO classes for actually reading the file. If the file
-      doesn't exist or it is not readable, and exception with an
-      approriate message will be thrown. */
-  void TestFileExistanceAndReadability();
-
-  std::string m_FileName;
-  std::string m_LayerName;
-};
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbSpatialObjectDXFReader.txx"
-#endif
-
-#endif
diff --git a/Code/IO/otbSpatialObjectDXFReader.txx b/Code/IO/otbSpatialObjectDXFReader.txx
deleted file mode 100644
index df92b4891cf7126ea322fe194f4d1e4c3005030c..0000000000000000000000000000000000000000
--- a/Code/IO/otbSpatialObjectDXFReader.txx
+++ /dev/null
@@ -1,138 +0,0 @@
-/*=========================================================================
-
-  Program:   ORFEO Toolbox
-  Language:  C++
-  Date:      $Date$
-  Version:   $Revision$
-
-
-  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
-  See OTBCopyright.txt for details.
-
-
-     This software is distributed WITHOUT ANY WARRANTY; without even
-     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-     PURPOSE.  See the above copyright notices for more information.
-
-=========================================================================*/
-#ifndef __otbSpatialObjectDXFReader_txx
-#define __otbSpatialObjectDXFReader_txx
-
-#include "otbSpatialObjectDXFReader.h"
-#include "otbDXFToSpatialObjectGroupFilter.h"
-#include "dl_dxf.h"
-#include "dl_creationadapter.h"
-#include "itksys/SystemTools.hxx"
-#include "otbMacro.h"
-#include "otbSystem.h"
-#include "otbImageFileReader.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TSpatialObject>
-SpatialObjectDXFReader<TSpatialObject>
-::SpatialObjectDXFReader()
-{
-  m_FileName = "";
-  m_LayerName = "";
-  // this->itk::ProcessObject::ReleaseDataBeforeUpdateFlagOff();
-  this->GetOutput()->ReleaseData();
-  this->ResetPipeline();
-}
-/**
- * Destructor
- */
-template <class TSpatialObject>
-SpatialObjectDXFReader<TSpatialObject>
-::~SpatialObjectDXFReader()
-{}
-
-template <class TSpatialObject>
-void
-SpatialObjectDXFReader<TSpatialObject>
-::SetFileName(char * filename)
-{
-  m_FileName = filename;
-  this->Modified();
-}
-/** Test whether the given filename exist and it is readable,
-     this is intended to be called before attempting to use
-     ImageIO classes for actually reading the file. If the file
-     doesn't exist or it is not readable, and exception with an
-     approriate message will be thrown. */
-template <class TSpatialObject>
-void
-SpatialObjectDXFReader<TSpatialObject>
-::TestFileExistanceAndReadability()
-{
-  // Test if the file exists.
-  if (!itksys::SystemTools::FileExists(this->m_FileName.c_str()))
-    {
-    itk::ImageFileReaderException e(__FILE__, __LINE__);
-    itk::OStringStream msg;
-    msg << "The file doesn't exist. "
-        << std::endl << "Filename = " << this->m_FileName
-        << std::endl;
-    e.SetDescription(msg.str().c_str());
-    throw e;
-    return;
-    }
-
-  // Test if the file can be open for reading access.
-  //Only if m_FileName speciy a filname (not a dirname)
-  if (System::IsAFileName(this->m_FileName) == true)
-    {
-    std::ifstream readTester;
-    readTester.open(this->m_FileName.c_str());
-    if (readTester.fail())
-      {
-      readTester.close();
-      itk::OStringStream msg;
-      msg << "The file couldn't be opened for reading. "
-          << std::endl << "Filename: " << this->m_FileName
-          << std::endl;
-      itk::ImageFileReaderException e(__FILE__, __LINE__, msg.str().c_str(), ITK_LOCATION);
-      throw e;
-      return;
-
-      }
-    readTester.close();
-    }
-}
-
-/**
- * Main computation method
- */
-template <class TSpatialObject>
-void
-SpatialObjectDXFReader<TSpatialObject>
-::GenerateData()
-{
-  TestFileExistanceAndReadability();
-  typedef otb::DXFToSpatialObjectGroupFilter<TSpatialObject> CreationFilter;
-  typename CreationFilter::Pointer creationClass = CreationFilter::New();
-  if (m_LayerName.size() > 0)
-    {
-    creationClass->SetLayer(m_LayerName.c_str());
-    }
-  DL_Dxf dxf;
-  dxf.in(m_FileName, creationClass);
-  GroupSpatialObjectType * group = creationClass->GetOutput();
-  group->Update();
-  this->SetNthOutput(0, group);
-}
-
-template <class TSpatialObject>
-void
-SpatialObjectDXFReader<TSpatialObject>
-::Update(void)
-{
-  this->GenerateData();
-}
-
-} //namespace otb
-
-#endif
diff --git a/Examples/IO/CMakeLists.txt b/Examples/IO/CMakeLists.txt
index d901b5518a91128a26f9cde4aa8822b65e059234..0ea39073abedab9cd6984a874404aec260a13cd5 100644
--- a/Examples/IO/CMakeLists.txt
+++ b/Examples/IO/CMakeLists.txt
@@ -50,9 +50,6 @@ TARGET_LINK_LIBRARIES(ImageSeriesIOExample OTBCommon OTBIO)
 ADD_EXECUTABLE(MetadataExample MetadataExample.cxx )
 TARGET_LINK_LIBRARIES(MetadataExample OTBCommon OTBIO)
 
-ADD_EXECUTABLE(DXFReaderExample DXFReaderExample.cxx )
-TARGET_LINK_LIBRARIES(DXFReaderExample OTBCommon OTBIO)
-
 ADD_EXECUTABLE(VectorDataIOExample VectorDataIOExample.cxx )
 TARGET_LINK_LIBRARIES(VectorDataIOExample OTBCommon OTBIO)
 
diff --git a/Examples/IO/DXFReaderExample.cxx b/Examples/IO/DXFReaderExample.cxx
deleted file mode 100644
index 3bf59db272a5c5798418a4c48324a20797289b9b..0000000000000000000000000000000000000000
--- a/Examples/IO/DXFReaderExample.cxx
+++ /dev/null
@@ -1,222 +0,0 @@
-/*=========================================================================
-
-  Program:   ORFEO Toolbox
-  Language:  C++
-  Date:      $Date$
-  Version:   $Revision$
-
-
-  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
-  See OTBCopyright.txt for details.
-
-
-     This software is distributed WITHOUT ANY WARRANTY; without even
-     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-     PURPOSE.  See the above copyright notices for more information.
-
-=========================================================================*/
-
-//  Software Guide : BeginCommandLineArgs
-//  INPUTS: {Lalande.dxf}
-//  TOIT 1000
-//  OUTPUTS: {lalande.png}
-//  Software Guide : EndCommandLineArgs
-
-//  Software Guide : BeginLatex
-//
-//  \label{DXFExample}This example illustrates how to read a DXF file and how to draw objects
-//  on a $2D$ binary image. The graphical DXF objects which can be read are the following : Point, Line
-//  Polyline, Circle and 3DFace.
-//  The example begins by including the appropriate headers.
-//
-//
-//  Software Guide : EndLatex
-
-// Software Guide : BeginCodeSnippet
-#include "itkExceptionObject.h"
-#include "otbImage.h"
-#include "otbImageFileWriter.h"
-#include "otbSpatialObjectDXFReader.h"
-#include "otbSpatialObjectToImageDrawingFilter.h"
-#include "itkRescaleIntensityImageFilter.h"
-// Software Guide : EndCodeSnippet
-
-int main(int argc, char * argv[])
-{
-  // Verify the number of parameters in the command line
-  if (argc < 5)
-    {
-    std::cerr << "Usage: " << std::endl;
-    std::cerr << argv[0] <<
-    " inputFilename  LayerName outputSize outputFilename " << std::endl;
-    return EXIT_FAILURE;
-    }
-
-// Software Guide : BeginLatex
-//
-//  Then, as usual, we select the pixel types and the image
-//  dimension.
-// Software Guide : EndLatex
-
-  char * inputFilename = argv[1];
-  char * outputFilename = argv[4];
-
-// Software Guide : BeginCodeSnippet
-  const unsigned int Dimension = 2;
-  typedef double        PixelType;
-  typedef unsigned char OutputPixelType;
-// Software Guide : EndCodeSnippet
-
-// Software Guide : BeginLatex
-//
-// The DXF file reader and the image file writer types are instantiated.
-// We can then create objects for both of them.
-// Graphical DXF objects will be represented in a GroupSpatialObject.
-// Software Guide : EndLatex
-
-// Software Guide : BeginCodeSnippet
-  typedef itk::GroupSpatialObject<Dimension>     GroupType;
-  typedef otb::Image<PixelType, Dimension>       ImageType;
-  typedef otb::Image<OutputPixelType, Dimension> OutputImageType;
-  typedef otb::ImageFileWriter<OutputImageType>  WriterType;
-  typedef otb::SpatialObjectDXFReader<GroupType>
-  SpatialObjectDXFReaderType;
-  typedef otb::SpatialObjectToImageDrawingFilter<GroupType, ImageType>
-  SpatialObjectToImageDrawingFilterType;
-  typedef itk::RescaleIntensityImageFilter<ImageType,
-      OutputImageType>     CastFilterType;
-  typedef itk::SpatialObject<Dimension> SpatialObjectType;
-
-  // Instantiating object
-  SpatialObjectDXFReaderType::Pointer reader =
-    SpatialObjectDXFReaderType::New();
-  SpatialObjectToImageDrawingFilterType::Pointer imageGenerator =
-    SpatialObjectToImageDrawingFilterType::New();
-  WriterType::Pointer     writer = WriterType::New();
-  CastFilterType::Pointer castFilter = CastFilterType::New();
-// Software Guide : EndCodeSnippet
-
-// Software Guide : BeginLatex
-// Filenames should be provided for both the reader and the writer. In this
-// particular example we take those filenames from the command line arguments.
-// The size of the output image is also specified.
-// Thanks to the SetLayerName() method, a particular layer can be specified and other layers will not be read.
-// If no layer name is specified, all layers are read.
-// Software Guide : EndLatex
-
-// Software Guide : BeginCodeSnippet
-  reader->SetFileName(inputFilename);
-  reader->SetLayerName(argv[2]);
-  writer->SetFileName(outputFilename);
-  const unsigned int outputSize = atoi(argv[3]);
-// Software Guide : EndCodeSnippet
-
-// Software Guide : BeginLatex
-// The reading of the DXF file is performed with the Update() method. Consequently the group of Spatial Objects is created.
-// Software Guide : EndLatex
-// Software Guide : BeginCodeSnippet
-  reader->Update();
-  GroupType::Pointer group = reader->GetOutput();
-// Software Guide : EndCodeSnippet
-
-// Software Guide : BeginLatex
-// We check if the group is empty. If it is not the case we will represent the Spatial Object group on the output image.
-// To determine the minimum and maximum coordinates of the group we compute the bounding box of each element of the group.
-// Software Guide : EndLatex
-
-// Software Guide : BeginCodeSnippet
-  if (group->GetNumberOfChildren() != 0)
-    {
-    /** Writing image  **/
-    SpatialObjectType::ChildrenListType* children = group->GetChildren(
-      0);
-    SpatialObjectType::ChildrenListType::iterator it = children->begin();
-    SpatialObjectType::ChildrenListType::iterator end = children->end();
-    double                                        maximum[Dimension],
-                                                  minimum[Dimension];
-    (*it)->ComputeBoundingBox();
-    minimum[0] = (*it)->GetBoundingBox()->GetMinimum()[0];
-    minimum[1] = (*it)->GetBoundingBox()->GetMinimum()[1];
-
-    while (it != end)
-      {
-      (*it)->ComputeBoundingBox();
-
-      if ((*it)->GetBoundingBox()->GetMinimum()[0] < minimum[0])
-        {
-        minimum[0] = (*it)->GetBoundingBox()->GetMinimum()[0];
-        }
-      if ((*it)->GetBoundingBox()->GetMinimum()[1] < minimum[1])
-        {
-        minimum[1] = (*it)->GetBoundingBox()->GetMinimum()[1];
-        }
-      it++;
-      }
-// Software Guide : EndCodeSnippet
-
-// Software Guide : BeginLatex
-// Origin can be set at the minimum coordinate of the group and the spacing be adapted to the specified output image size in order to represent all
-// Spatial Objects in the output image.
-// Software Guide : EndLatex
-
-    ImageType::SizeType size;
-    size[0] = outputSize;
-    size[1] = outputSize;
-    imageGenerator->SetSize(size);
-    ImageType::PointType origin;
-    origin[0] = (int) minimum[0];
-    origin[1] = (int) minimum[1];
-    imageGenerator->SetOrigin(origin);
-
-    group->ComputeBoundingBox();
-
-    maximum[0] = group->GetBoundingBox()->GetMaximum()[0];
-    maximum[1] = group->GetBoundingBox()->GetMaximum()[1];
-// Software Guide : BeginCodeSnippet
-    ImageType::SpacingType spacing;
-    spacing[0] = (maximum[0] - origin[0]) / size[0];
-    spacing[1] = (maximum[1] - origin[1]) / size[1];
-    imageGenerator->SetSpacing(spacing);
-// Software Guide : EndCodeSnippet
-
-// Software Guide : BeginLatex
-// The output image is created with previously specified origin, spacing and size.
-// Software Guide : EndLatex
-// Software Guide : BeginCodeSnippet
-    imageGenerator->SetInput(group);
-    imageGenerator->Update();
-// Software Guide : EndCodeSnippet
-
-// Software Guide : BeginLatex
-// The output image is written by calling the Update() method.
-// Software Guide : EndLatex
-    castFilter->SetOutputMinimum(0);
-    castFilter->SetOutputMaximum(255);
-    castFilter->SetInput(imageGenerator->GetOutput());
-    writer->SetInput(castFilter->GetOutput());
-
-// Software Guide : BeginCodeSnippet
-    writer->Update();
-// Software Guide : EndCodeSnippet
-    }
-  else
-    {
-    std::cout << "No objects detected." << std::endl;
-    return EXIT_FAILURE;
-
-    }
-//  Software Guide : BeginLatex
-//
-// \begin{figure}
-// \center
-// \includegraphics[width=0.44\textwidth]{lalande.eps}
-// \itkcaption[DXF reader]{Representation of a DXF file on an image.}
-// \label{fig:lalande}
-// \end{figure}
-//
-//  Figure \ref{fig:lalande}
-//  represents Spatial Objects extracted from a DXF file.
-// Software Guide : EndLatex
-
-  return EXIT_SUCCESS;
-}
diff --git a/Examples/IO/VectorDataIOExample.cxx b/Examples/IO/VectorDataIOExample.cxx
index 056973712eabdd6678557eabdcc32c8755d4d080..2e690b2b158129f0528a32c2fb198b816115b5b1 100644
--- a/Examples/IO/VectorDataIOExample.cxx
+++ b/Examples/IO/VectorDataIOExample.cxx
@@ -18,21 +18,18 @@
 
 //  Software Guide : BeginLatex
 //
-//  Although specific vector data IO approaches, as the one
-//  presented in section \ref{sec:ReadDXF}, can be useful, it is even more
-//  interesting to have available approaches which are independent of
-//  the input format. Unfortunately, many vector data formats do not
+//  Unfortunately, many vector data formats do not
 //  share the models for the data they represent. However, in some
 //  cases, when simple data is stored, it can be decomposed in simple
 //  objects as for instance polylines, polygons and points. This is
-//  the case for the Shapefile and the KML (Keyhole Markup Language),
+//  the case for the Shapefile and the KML (Keyhole Markup Language) formats,
 //  for instance.
 //
 //  Even though specific reader/writer for Shapefile and the Google KML
 //  are available in OTB, we designed a generic approach for the IO of
 //  this kind of data.
 
-//  The reader/writer for VectorData in OTB is able to access to a variety of
+//  The reader/writer for VectorData in OTB is able to access a variety of
 //  vector file formats (all OGR supported formats)
 //
 //  In section \ref{sec:VectorDataProjection}, you will find more information on
diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
index 183a7588c961a00e6cad784f9d75477fa5132ce0..1e2e32ad369ec810f95c78448a5c7f9a6dd92c86 100644
--- a/RELEASE_NOTES.txt
+++ b/RELEASE_NOTES.txt
@@ -46,6 +46,7 @@ OTB-v.3.8.0 - Changes since version 3.6.0 (2010/12/16)
   * Internal ITK: removed compilation of medical image formats library and associated ImageIO
   * Internal ITK: removed dependency on libtiff, libjpeg, libpng and zlib, now handled by gdal
   * Support for gcc-4.5
+  * Remove dxflib from Utilities for licensing issues
 
 * Bug fix:
   * Monteverdi
diff --git a/Testing/Code/IO/CMakeLists.txt b/Testing/Code/IO/CMakeLists.txt
index f5162c580e9c02f053f2fb5d88b928dfd08430e9..d09c17e22c214d4b1a17e5a5a49931265192b477 100644
--- a/Testing/Code/IO/CMakeLists.txt
+++ b/Testing/Code/IO/CMakeLists.txt
@@ -1485,25 +1485,6 @@ ADD_TEST(ioTvPipelineMetadataHandlingTest ${IO_TESTS11}
 #	${TEMP}/temp.img
 #        )
 
-# -------            otb::DXFToSpatialObjectGroupFilter -------------------------------------------
-ADD_TEST(ioTuDXFToSpatialObjectGroupFilterNew ${IO_TESTS11}
-         otbDXFToSpatialObjectGroupFilterNew)
-
-# -------            otb::SpatialObjectDXFReader -------------------------------------------
-ADD_TEST(ioTuSpatialObjectDXFReaderNew ${IO_TESTS11}
-         otbSpatialObjectDXFReaderNew)
-
-ADD_TEST(ioTvSpatialObjectDXFReader ${IO_TESTS11}
---compare-image ${EPSILON_9}
-	 ${BASELINE}/ioTvSpatialObjectDXFReaderOutput.png
-	 ${TEMP}/ioTvSpatialObjectDXFReaderOutput.png
-         otbSpatialObjectDXFReader
-	 ${INPUTDATA}/Lardenne.dxf
-	 ${TEMP}/ioTvSpatialObjectDXFReaderOutput.png
-	 TOIT
-	 50
-)
-
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ otbIOTESTS12 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -2926,9 +2907,6 @@ otbImageMetadataFileWriterTest.cxx
 otbImageMetadataStreamingFileWriterTest.cxx
 otbPipelineMetadataHandlingTest.cxx
 otbPipelineMetadataHandlingWithUFFilterTest.cxx
-otbDXFToSpatialObjectGroupFilterNew.cxx
-otbSpatialObjectDXFReaderNew.cxx
-otbSpatialObjectDXFReader.cxx
 )
 SET(BasicIO_SRCS12
 otbIOTests12.cxx
diff --git a/Testing/Code/IO/otbDXFToSpatialObjectGroupFilterNew.cxx b/Testing/Code/IO/otbDXFToSpatialObjectGroupFilterNew.cxx
deleted file mode 100644
index 2c1451685b73b6db729933fed79585f524760d84..0000000000000000000000000000000000000000
--- a/Testing/Code/IO/otbDXFToSpatialObjectGroupFilterNew.cxx
+++ /dev/null
@@ -1,35 +0,0 @@
-/*=========================================================================
-
-  Program:   ORFEO Toolbox
-  Language:  C++
-  Date:      $Date$
-  Version:   $Revision$
-
-
-  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
-  See OTBCopyright.txt for details.
-
-
-  This software is distributed WITHOUT ANY WARRANTY; without even
-  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-  PURPOSE.  See the above copyright notices for more information.
-
-=========================================================================*/
-#include "itkExceptionObject.h"
-
-#include "otbDXFToSpatialObjectGroupFilter.h"
-#include "itkGroupSpatialObject.h"
-
-int otbDXFToSpatialObjectGroupFilterNew(int argc, char * argv[])
-{
-  const unsigned int Dimension = 2;
-  typedef itk::GroupSpatialObject<Dimension>            GroupType;
-  typedef otb::DXFToSpatialObjectGroupFilter<GroupType> DXFToSpatialObjectGroupFilterType;
-
-  // Instantiating object
-  DXFToSpatialObjectGroupFilterType::Pointer object = DXFToSpatialObjectGroupFilterType::New();
-
-  std::cout << object << std::endl;
-
-  return EXIT_SUCCESS;
-}
diff --git a/Testing/Code/IO/otbIOTests11.cxx b/Testing/Code/IO/otbIOTests11.cxx
index 10a2c1b71a39fc69f099b222867fc88a2a1759c8..24e1d85af5310c382a40c919de6fd59f0a988327 100644
--- a/Testing/Code/IO/otbIOTests11.cxx
+++ b/Testing/Code/IO/otbIOTests11.cxx
@@ -30,7 +30,4 @@ void RegisterTests()
   REGISTER_TEST(otbImageMetadataStreamingFileWriterTest);
   REGISTER_TEST(otbPipelineMetadataHandlingTest);
   REGISTER_TEST(otbPipelineMetadataHandlingWithUFFilterTest);
-  REGISTER_TEST(otbDXFToSpatialObjectGroupFilterNew);
-  REGISTER_TEST(otbSpatialObjectDXFReaderNew);
-  REGISTER_TEST(otbSpatialObjectDXFReader);
 }
diff --git a/Testing/Code/IO/otbSpatialObjectDXFReader.cxx b/Testing/Code/IO/otbSpatialObjectDXFReader.cxx
deleted file mode 100644
index c05ef2d3b936778f685b27b87e358cf01da4ca37..0000000000000000000000000000000000000000
--- a/Testing/Code/IO/otbSpatialObjectDXFReader.cxx
+++ /dev/null
@@ -1,119 +0,0 @@
-/*=========================================================================
-
-  Program:   ORFEO Toolbox
-  Language:  C++
-  Date:      $Date$
-  Version:   $Revision$
-
-
-  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
-  See OTBCopyright.txt for details.
-
-
-  This software is distributed WITHOUT ANY WARRANTY; without even
-  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-  PURPOSE.  See the above copyright notices for more information.
-
-=========================================================================*/
-#include "itkExceptionObject.h"
-#include "otbImage.h"
-#include "otbImageFileWriter.h"
-#include "otbSpatialObjectDXFReader.h"
-#include "otbSpatialObjectToImageDrawingFilter.h"
-#include "itkRescaleIntensityImageFilter.h"
-
-int otbSpatialObjectDXFReader(int argc, char * argv[])
-{
-  const unsigned int Dimension = 2;
-  char *             inputFilename = argv[1];
-  char *             outputFilename = argv[2];
-  const unsigned int outputSize = atoi(argv[4]);
-
-  typedef double                                                       PixelType;
-  typedef unsigned char                                                OutputPixelType;
-  typedef itk::GroupSpatialObject<Dimension>                           GroupType;
-  typedef otb::Image<PixelType, Dimension>                             ImageType;
-  typedef otb::Image<OutputPixelType, Dimension>                       OutputImageType;
-  typedef otb::ImageFileWriter<OutputImageType>                        WriterType;
-  typedef otb::SpatialObjectDXFReader<GroupType>                       SpatialObjectDXFReaderType;
-  typedef otb::SpatialObjectToImageDrawingFilter<GroupType, ImageType> SpatialObjectToImageDrawingFilterType;
-  typedef itk::RescaleIntensityImageFilter<ImageType, OutputImageType> CastFilterType;
-  typedef itk::SpatialObject<Dimension>                                SpatialObjectType;
-  // Instantiating object
-  SpatialObjectDXFReaderType::Pointer            reader = SpatialObjectDXFReaderType::New();
-  SpatialObjectToImageDrawingFilterType::Pointer imageGenerator = SpatialObjectToImageDrawingFilterType::New();
-  WriterType::Pointer                            writer = WriterType::New();
-  CastFilterType::Pointer                        castFilter = CastFilterType::New();
-
-  reader->SetFileName(inputFilename);
-  reader->SetLayerName(argv[3]);
-
-  reader->Update();
-  GroupType::Pointer group = reader->GetOutput();
-
-  if (group->GetNumberOfChildren() != 0)
-    {
-    /** Writing image  **/
-    SpatialObjectType::ChildrenListType*          children = group->GetChildren(0);
-    SpatialObjectType::ChildrenListType::iterator it = children->begin();
-    SpatialObjectType::ChildrenListType::iterator end = children->end();
-    double                                        maximum[Dimension], minimum[Dimension];
-    (*it)->ComputeBoundingBox();
-    minimum[0] = (*it)->GetBoundingBox()->GetMinimum()[0];
-    minimum[1] = (*it)->GetBoundingBox()->GetMinimum()[1];
-
-    while (it != end)
-      {
-      (*it)->ComputeBoundingBox();
-
-      if ((*it)->GetBoundingBox()->GetMinimum()[0] < minimum[0])
-        {
-        minimum[0] = (*it)->GetBoundingBox()->GetMinimum()[0];
-        }
-      if ((*it)->GetBoundingBox()->GetMinimum()[1] < minimum[1])
-        {
-        minimum[1] = (*it)->GetBoundingBox()->GetMinimum()[1];
-        }
-      it++;
-      }
-
-    ImageType::SizeType size;
-    size[0] = outputSize;
-    size[1] = outputSize;
-    imageGenerator->SetSize(size);
-    ImageType::PointType origin;
-    origin[0] = (int) minimum[0];
-    origin[1] = (int) minimum[1];
-    imageGenerator->SetOrigin(origin);
-
-    group->ComputeBoundingBox();
-
-    maximum[0] = group->GetBoundingBox()->GetMaximum()[0];
-    maximum[1] = group->GetBoundingBox()->GetMaximum()[1];
-
-    ImageType::SpacingType spacing;
-    spacing[0] = (maximum[0] - origin[0]) / size[0];
-    spacing[1] = (maximum[1] - origin[1]) / size[1];
-    imageGenerator->SetSpacing(spacing);
-
-    imageGenerator->SetInput(group);
-
-    imageGenerator->Update();
-
-    castFilter->SetOutputMinimum(0);
-    castFilter->SetOutputMaximum(255);
-    castFilter->SetInput(imageGenerator->GetOutput());
-    writer->SetInput(castFilter->GetOutput());
-
-    writer->SetFileName(outputFilename);
-    writer->Update();
-    }
-  else
-    {
-    std::cout << "No objects detected." << std::endl;
-    return EXIT_FAILURE;
-
-    }
-
-  return EXIT_SUCCESS;
-}
diff --git a/Testing/Code/IO/otbSpatialObjectDXFReaderNew.cxx b/Testing/Code/IO/otbSpatialObjectDXFReaderNew.cxx
deleted file mode 100644
index 8a4a27cd10631fe38948ffa44523d5039683ec1a..0000000000000000000000000000000000000000
--- a/Testing/Code/IO/otbSpatialObjectDXFReaderNew.cxx
+++ /dev/null
@@ -1,35 +0,0 @@
-/*=========================================================================
-
-  Program:   ORFEO Toolbox
-  Language:  C++
-  Date:      $Date$
-  Version:   $Revision$
-
-
-  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
-  See OTBCopyright.txt for details.
-
-
-     This software is distributed WITHOUT ANY WARRANTY; without even
-     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-     PURPOSE.  See the above copyright notices for more information.
-
-=========================================================================*/
-#include "itkExceptionObject.h"
-
-#include "otbSpatialObjectDXFReader.h"
-#include "itkGroupSpatialObject.h"
-
-int otbSpatialObjectDXFReaderNew(int argc, char * argv[])
-{
-  const unsigned int Dimension = 2;
-  typedef itk::GroupSpatialObject<Dimension>     GroupType;
-  typedef otb::SpatialObjectDXFReader<GroupType> SpatialObjectDXFReaderType;
-
-  // Instantiating object
-  SpatialObjectDXFReaderType::Pointer object = SpatialObjectDXFReaderType::New();
-
-  std::cout << object << std::endl;
-
-  return EXIT_SUCCESS;
-}
diff --git a/Utilities/CMakeLists.txt b/Utilities/CMakeLists.txt
index 8ef72a3fee71363408c343a7503c50c410a4ed12..0214f30e5b35373210adff8ed5b5bd4ea5e00d88 100644
--- a/Utilities/CMakeLists.txt
+++ b/Utilities/CMakeLists.txt
@@ -51,8 +51,6 @@ MESSAGE(STATUS "Configuring otbsvm...")
 ADD_SUBDIRECTORY(otbsvm )
 MESSAGE(STATUS "Configuring otbknn...")
 ADD_SUBDIRECTORY(otbknn )
-MESSAGE(STATUS "Configuring dxflib...")
-ADD_SUBDIRECTORY(dxflib)
 MESSAGE(STATUS "Configuring InsightJournal...")
 ADD_SUBDIRECTORY(InsightJournal)
 MESSAGE(STATUS "Configuring otbossim...")
diff --git a/Utilities/dxflib/.NoDartCoverage b/Utilities/dxflib/.NoDartCoverage
deleted file mode 100644
index 3c99729386edb290d6f07512fafee0faa0468b44..0000000000000000000000000000000000000000
--- a/Utilities/dxflib/.NoDartCoverage
+++ /dev/null
@@ -1 +0,0 @@
-# do not do coverage in this directory
diff --git a/Utilities/dxflib/CMakeLists.txt b/Utilities/dxflib/CMakeLists.txt
deleted file mode 100644
index 867243ef4ac995141157ebfa6dda69feb8464a08..0000000000000000000000000000000000000000
--- a/Utilities/dxflib/CMakeLists.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-PROJECT(dxflib)
-
-FILE(GLOB dxflib_SRCS "*.cpp")
-ADD_LIBRARY(dxf ${dxflib_SRCS})
-
-IF(OTB_LIBRARY_PROPERTIES)
-  SET_TARGET_PROPERTIES(dxf PROPERTIES ${OTB_LIBRARY_PROPERTIES})
-ENDIF(OTB_LIBRARY_PROPERTIES)
-
-IF(NOT OTB_INSTALL_NO_LIBRARIES)
-  INSTALL(TARGETS dxf
-    RUNTIME DESTINATION ${OTB_INSTALL_BIN_DIR_CM24} COMPONENT RuntimeLibraries
-    LIBRARY DESTINATION ${OTB_INSTALL_LIB_DIR_CM24} COMPONENT RuntimeLibraries
-    ARCHIVE DESTINATION ${OTB_INSTALL_LIB_DIR_CM24} COMPONENT Development)
-ENDIF(NOT OTB_INSTALL_NO_LIBRARIES)
-
-IF(NOT OTB_INSTALL_NO_DEVELOPMENT)
-  FILE(GLOB dxflib_HDRS "*.h")
-  INSTALL(FILES ${dxflib_HDRS}
-    DESTINATION ${OTB_INSTALL_INCLUDE_DIR_CM24}/Utilities/dxflib
-    COMPONENT Development)
-ENDIF(NOT OTB_INSTALL_NO_DEVELOPMENT)
diff --git a/Utilities/dxflib/dl_attributes.h b/Utilities/dxflib/dl_attributes.h
deleted file mode 100644
index d14212182c088a158e661450f697ffde81a76877..0000000000000000000000000000000000000000
--- a/Utilities/dxflib/dl_attributes.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/****************************************************************************
-** $Id: dl_attributes.h 2334 2005-03-27 23:37:52Z andrew $
-**
-** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
-**
-** This file is part of the dxflib project.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid dxflib Professional Edition licenses may use 
-** this file in accordance with the dxflib Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.ribbonsoft.com for further details.
-**
-** Contact info@ribbonsoft.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef DL_ATTRIBUTES_H
-#define DL_ATTRIBUTES_H
-
-#include <string>
-using std::string;
-
-#include "dl_codes.h"
-
-/**
- * Storing and passing around attributes. Attributes
- * are the layer name, color, width and line type.
- *
- * @author Andrew Mustun
- */
-class DL_Attributes {
-
-public:
-
-    /**
-     * Default constructor.
-     */
-    DL_Attributes() {
-        setLayer("");
-        setColor(0);
-        setWidth(0);
-        setLineType("BYLAYER");
-    }
-
-
-
-    /**
-     * Constructor for DXF attributes.
-     *
-     * @param layer Layer name for this entity or NULL for no layer
-     *              (every entity should be on a named layer!).
-     * @param color Color number (0..256). 0 = BYBLOCK, 256 = BYLAYER.
-     * @param width Line thickness. Defaults to zero. -1 = BYLAYER, 
-     *               -2 = BYBLOCK, -3 = default width
-     * @param lineType Line type name or "BYLAYER" or "BYBLOCK". Defaults
-     *              to "BYLAYER"
-     */
-    DL_Attributes(const string& layer,
-                  int color, int width,
-                  const string& lineType) {
-        setLayer(layer);
-        setColor(color);
-        setWidth(width);
-        setLineType(lineType);
-    }
-
-
-
-    /**
-     * Sets the layer. If the given pointer points to NULL, the
-     *  new layer name will be an empty but valid string.
-     */
-    void setLayer(const string& layer) {
-        this->layer = layer;
-    }
-
-
-
-    /**
-     * @return Layer name.
-     */
-    string getLayer() const {
-        return layer;
-    }
-
-
-
-    /**
-     * Sets the color.
-     *
-     * @see DL_Codes, dxfColors
-     */
-    void setColor(int color) {
-        this->color = color;
-    }
-
-
-
-    /**
-     * @return Color.
-     *
-     * @see DL_Codes, dxfColors
-     */
-    int getColor() const {
-        return color;
-    }
-
-
-
-    /**
-     * Sets the width.
-     */
-    void setWidth(int width) {
-        this->width = width;
-    }
-
-
-
-    /**
-     * @return Width.
-     */
-    int getWidth() const {
-        return width;
-    }
-
-
-
-    /**
-     * Sets the line type. This can be any string and is not
-     *  checked to be a valid line type. 
-     */
-    void setLineType(const string& lineType) {
-        this->lineType = lineType;
-    }
-
-
-
-    /**
-     * @return Line type.
-     */
-    string getLineType() const {
-        if (lineType.length()==0) {
-            return "BYLAYER";
-        } else {
-            return lineType;
-        }
-    }
-
-
-
-    /**
-     * Copies attributes (deep copies) from another attribute object.
-     */
-    DL_Attributes operator = (const DL_Attributes& attrib) {
-        setLayer(attrib.layer);
-        setColor(attrib.color);
-        setWidth(attrib.width);
-        setLineType(attrib.lineType);
-
-        return *this;
-    }
-
-private:
-    string layer;
-    int color;
-    int width;
-    string lineType;
-};
-
-#endif
-
-// EOF
diff --git a/Utilities/dxflib/dl_codes.h b/Utilities/dxflib/dl_codes.h
deleted file mode 100644
index 8aa0d7ab8120055a8670c05546748a54db41e2d1..0000000000000000000000000000000000000000
--- a/Utilities/dxflib/dl_codes.h
+++ /dev/null
@@ -1,542 +0,0 @@
-/****************************************************************************
-** $Id: dl_codes.h 273 2005-02-28 18:14:39Z andrew $
-**
-** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
-** Copyright (C) 2001 Robert J. Campbell Jr.
-**
-** This file is part of the dxflib project.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid dxflib Professional Edition licenses may use 
-** this file in accordance with the dxflib Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.ribbonsoft.com for further details.
-**
-** Contact info@ribbonsoft.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-/**
- * Defines common DXF codes and constants.
- */
-
-#ifndef DXF_CODES_H
-#define DXF_CODES_H
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#if defined(__OS2__)||defined(__EMX__)||defined(_WIN32)
-#define strcasecmp(s,t) stricmp(s,t)
-#endif
-
-#ifdef _WIN32
-#undef M_PI
-#define M_PI   3.14159265358979323846
-
-/* OTB Disable pragma for CYGWIN */
-#if !defined(__CYGWIN__)
-#pragma warning(disable : 4800)
-#endif
-
-#endif
-
-#ifndef M_PI
-#define M_PI 3.1415926535897932384626433832795
-#endif
-
-#define DL_DXF_MAXLINE 1024
-#define DL_DXF_MAXGROUPCODE 1100
-
-// used to mark invalid vectors:
-//#define DL_DXF_MAXDOUBLE 1.0E+10
-
-/**
- * Codes for colors and DXF versions.
- */
-class DL_Codes {
-public:
-    /**
-     * Standard DXF colors.
-     */
-    enum color {
-        black = 250,
-        green = 3,
-        red = 1,
-        brown = 15,
-        yellow = 2,
-        cyan = 4,
-        magenta = 6,
-        gray = 8,
-        blue = 5,
-        l_blue = 163,
-        l_green = 121,
-        l_cyan = 131,
-        l_red = 23,
-        l_magenta = 221,
-        l_gray = 252,
-        white = 7,
-        bylayer = 256,
-        byblock = 0
-    };
-
-    /**
-     * Version numbers for the DXF Format.
-     */
-    enum version {
-        AC1009, AC1012, AC1014, AC1015
-    };
-};
-
-
-// Extended color palette:
-// The first entry is only for direct indexing starting with [1]
-// Color 1 is red (1,0,0)
-const double dxfColors[][3] = {
-                                  {0,0,0},                // unused
-                                  {1,0,0},                // 1
-                                  {1,1,0},
-                                  {0,1,0},
-                                  {0,1,1},
-                                  {0,0,1},
-                                  {1,0,1},
-                                  {1,1,1},                // black or white
-                                  {0.5,0.5,0.5},
-                                  {0.75,0.75,0.75},
-                                  {1,0,0},                // 10
-                                  {1,0.5,0.5},
-                                  {0.65,0,0},
-                                  {0.65,0.325,0.325},
-                                  {0.5,0,0},
-                                  {0.5,0.25,0.25},
-                                  {0.3,0,0},
-                                  {0.3,0.15,0.15},
-                                  {0.15,0,0},
-                                  {0.15,0.075,0.075},
-                                  {1,0.25,0},             // 20
-                                  {1,0.625,0.5},
-                                  {0.65,0.1625,0},
-                                  {0.65,0.4063,0.325},
-                                  {0.5,0.125,0},
-                                  {0.5,0.3125,0.25},
-                                  {0.3,0.075,0},
-                                  {0.3,0.1875,0.15},
-                                  {0.15,0.0375,0},
-                                  {0.15,0.0938,0.075},
-                                  {1,0.5,0},              // 30
-                                  {1,0.75,0.5},
-                                  {0.65,0.325,0},
-                                  {0.65,0.4875,0.325},
-                                  {0.5,0.25,0},
-                                  {0.5,0.375,0.25},
-                                  {0.3,0.15,0},
-                                  {0.3,0.225,0.15},
-                                  {0.15,0.075,0},
-                                  {0.15,0.1125,0.075},
-                                  {1,0.75,0},             // 40
-                                  {1,0.875,0.5},
-                                  {0.65,0.4875,0},
-                                  {0.65,0.5688,0.325},
-                                  {0.5,0.375,0},
-                                  {0.5,0.4375,0.25},
-                                  {0.3,0.225,0},
-                                  {0.3,0.2625,0.15},
-                                  {0.15,0.1125,0},
-                                  {0.15,0.1313,0.075},
-                                  {1,1,0},                // 50
-                                  {1,1,0.5},
-                                  {0.65,0.65,0},
-                                  {0.65,0.65,0.325},
-                                  {0.5,0.5,0},
-                                  {0.5,0.5,0.25},
-                                  {0.3,0.3,0},
-                                  {0.3,0.3,0.15},
-                                  {0.15,0.15,0},
-                                  {0.15,0.15,0.075},
-                                  {0.75,1,0},             // 60
-                                  {0.875,1,0.5},
-                                  {0.4875,0.65,0},
-                                  {0.5688,0.65,0.325},
-                                  {0.375,0.5,0},
-                                  {0.4375,0.5,0.25},
-                                  {0.225,0.3,0},
-                                  {0.2625,0.3,0.15},
-                                  {0.1125,0.15,0},
-                                  {0.1313,0.15,0.075},
-                                  {0.5,1,0},              // 70
-                                  {0.75,1,0.5},
-                                  {0.325,0.65,0},
-                                  {0.4875,0.65,0.325},
-                                  {0.25,0.5,0},
-                                  {0.375,0.5,0.25},
-                                  {0.15,0.3,0},
-                                  {0.225,0.3,0.15},
-                                  {0.075,0.15,0},
-                                  {0.1125,0.15,0.075},
-                                  {0.25,1,0},             // 80
-                                  {0.625,1,0.5},
-                                  {0.1625,0.65,0},
-                                  {0.4063,0.65,0.325},
-                                  {0.125,0.5,0},
-                                  {0.3125,0.5,0.25},
-                                  {0.075,0.3,0},
-                                  {0.1875,0.3,0.15},
-                                  {0.0375,0.15,0},
-                                  {0.0938,0.15,0.075},
-                                  {0,1,0},                // 90
-                                  {0.5,1,0.5},
-                                  {0,0.65,0},
-                                  {0.325,0.65,0.325},
-                                  {0,0.5,0},
-                                  {0.25,0.5,0.25},
-                                  {0,0.3,0},
-                                  {0.15,0.3,0.15},
-                                  {0,0.15,0},
-                                  {0.075,0.15,0.075},
-                                  {0,1,0.25},             // 100
-                                  {0.5,1,0.625},
-                                  {0,0.65,0.1625},
-                                  {0.325,0.65,0.4063},
-                                  {0,0.5,0.125},
-                                  {0.25,0.5,0.3125},
-                                  {0,0.3,0.075},
-                                  {0.15,0.3,0.1875},
-                                  {0,0.15,0.0375},
-                                  {0.075,0.15,0.0938},
-                                  {0,1,0.5},              // 110
-                                  {0.5,1,0.75},
-                                  {0,0.65,0.325},
-                                  {0.325,0.65,0.4875},
-                                  {0,0.5,0.25},
-                                  {0.25,0.5,0.375},
-                                  {0,0.3,0.15},
-                                  {0.15,0.3,0.225},
-                                  {0,0.15,0.075},
-                                  {0.075,0.15,0.1125},
-                                  {0,1,0.75},             // 120
-                                  {0.5,1,0.875},
-                                  {0,0.65,0.4875},
-                                  {0.325,0.65,0.5688},
-                                  {0,0.5,0.375},
-                                  {0.25,0.5,0.4375},
-                                  {0,0.3,0.225},
-                                  {0.15,0.3,0.2625},
-                                  {0,0.15,0.1125},
-                                  {0.075,0.15,0.1313},
-                                  {0,1,1},                // 130
-                                  {0.5,1,1},
-                                  {0,0.65,0.65},
-                                  {0.325,0.65,0.65},
-                                  {0,0.5,0.5},
-                                  {0.25,0.5,0.5},
-                                  {0,0.3,0.3},
-                                  {0.15,0.3,0.3},
-                                  {0,0.15,0.15},
-                                  {0.075,0.15,0.15},
-                                  {0,0.75,1},             // 140
-                                  {0.5,0.875,1},
-                                  {0,0.4875,0.65},
-                                  {0.325,0.5688,0.65},
-                                  {0,0.375,0.5},
-                                  {0.25,0.4375,0.5},
-                                  {0,0.225,0.3},
-                                  {0.15,0.2625,0.3},
-                                  {0,0.1125,0.15},
-                                  {0.075,0.1313,0.15},
-                                  {0,0.5,1},              // 150
-                                  {0.5,0.75,1},
-                                  {0,0.325,0.65},
-                                  {0.325,0.4875,0.65},
-                                  {0,0.25,0.5},
-                                  {0.25,0.375,0.5},
-                                  {0,0.15,0.3},
-                                  {0.15,0.225,0.3},
-                                  {0,0.075,0.15},
-                                  {0.075,0.1125,0.15},
-                                  {0,0.25,1},             // 160
-                                  {0.5,0.625,1},
-                                  {0,0.1625,0.65},
-                                  {0.325,0.4063,0.65},
-                                  {0,0.125,0.5},
-                                  {0.25,0.3125,0.5},
-                                  {0,0.075,0.3},
-                                  {0.15,0.1875,0.3},
-                                  {0,0.0375,0.15},
-                                  {0.075,0.0938,0.15},
-                                  {0,0,1},                // 170
-                                  {0.5,0.5,1},
-                                  {0,0,0.65},
-                                  {0.325,0.325,0.65},
-                                  {0,0,0.5},
-                                  {0.25,0.25,0.5},
-                                  {0,0,0.3},
-                                  {0.15,0.15,0.3},
-                                  {0,0,0.15},
-                                  {0.075,0.075,0.15},
-                                  {0.25,0,1},             // 180
-                                  {0.625,0.5,1},
-                                  {0.1625,0,0.65},
-                                  {0.4063,0.325,0.65},
-                                  {0.125,0,0.5},
-                                  {0.3125,0.25,0.5},
-                                  {0.075,0,0.3},
-                                  {0.1875,0.15,0.3},
-                                  {0.0375,0,0.15},
-                                  {0.0938,0.075,0.15},
-                                  {0.5,0,1},              // 190
-                                  {0.75,0.5,1},
-                                  {0.325,0,0.65},
-                                  {0.4875,0.325,0.65},
-                                  {0.25,0,0.5},
-                                  {0.375,0.25,0.5},
-                                  {0.15,0,0.3},
-                                  {0.225,0.15,0.3},
-                                  {0.075,0,0.15},
-                                  {0.1125,0.075,0.15},
-                                  {0.75,0,1},             // 200
-                                  {0.875,0.5,1},
-                                  {0.4875,0,0.65},
-                                  {0.5688,0.325,0.65},
-                                  {0.375,0,0.5},
-                                  {0.4375,0.25,0.5},
-                                  {0.225,0,0.3},
-                                  {0.2625,0.15,0.3},
-                                  {0.1125,0,0.15},
-                                  {0.1313,0.075,0.15},
-                                  {1,0,1},                // 210
-                                  {1,0.5,1},
-                                  {0.65,0,0.65},
-                                  {0.65,0.325,0.65},
-                                  {0.5,0,0.5},
-                                  {0.5,0.25,0.5},
-                                  {0.3,0,0.3},
-                                  {0.3,0.15,0.3},
-                                  {0.15,0,0.15},
-                                  {0.15,0.075,0.15},
-                                  {1,0,0.75},             // 220
-                                  {1,0.5,0.875},
-                                  {0.65,0,0.4875},
-                                  {0.65,0.325,0.5688},
-                                  {0.5,0,0.375},
-                                  {0.5,0.25,0.4375},
-                                  {0.3,0,0.225},
-                                  {0.3,0.15,0.2625},
-                                  {0.15,0,0.1125},
-                                  {0.15,0.075,0.1313},
-                                  {1,0,0.5},              // 230
-                                  {1,0.5,0.75},
-                                  {0.65,0,0.325},
-                                  {0.65,0.325,0.4875},
-                                  {0.5,0,0.25},
-                                  {0.5,0.25,0.375},
-                                  {0.3,0,0.15},
-                                  {0.3,0.15,0.225},
-                                  {0.15,0,0.075},
-                                  {0.15,0.075,0.1125},
-                                  {1,0,0.25},             // 240
-                                  {1,0.5,0.625},
-                                  {0.65,0,0.1625},
-                                  {0.65,0.325,0.4063},
-                                  {0.5,0,0.125},
-                                  {0.5,0.25,0.3125},
-                                  {0.3,0,0.075},
-                                  {0.3,0.15,0.1875},
-                                  {0.15,0,0.0375},
-                                  {0.15,0.075,0.0938},
-                                  {0.33,0.33,0.33},       // 250
-                                  {0.464,0.464,0.464},
-                                  {0.598,0.598,0.598},
-                                  {0.732,0.732,0.732},
-                                  {0.866,0.866,0.866},
-                                  {1,1,1}                 // 255
-                              }
-                              ;
-
-
-// AutoCAD VERSION aliases
-#define VER_R12    DL_Codes::AC1009
-#define VER_LT2    DL_Codes::AC1009
-#define VER_R13    DL_Codes::AC1012   // not supported yet
-#define VER_LT95   DL_Codes::AC1012   // not supported yet
-#define VER_R14    DL_Codes::AC1014   // not supported yet
-#define VER_LT97   DL_Codes::AC1014   // not supported yet
-#define VER_LT98   DL_Codes::AC1014   // not supported yet
-#define VER_2000   DL_Codes::AC1015
-#define VER_2002   DL_Codes::AC1015
-
-
-// DXF Group Codes:
-
-// Strings
-#define STRGRP_START      0
-#define STRGRP_END        9
-
-// Coordinates
-#define CRDGRP_START     10
-#define CRDGRP_END       19
-
-// Real values
-#define RLGRP_START      38
-#define RLGRP_END        59
-
-// Short integer values
-#define SHOGRP_START     60
-#define SHOGRP_END       79
-
-// New in Release 13,
-#define SUBCLASS        100
-
-// More coordinates
-#define CRD2GRP_START   210
-#define CRD2GRP_END     239
-
-// Extended data strings
-#define ESTRGRP_START  1000
-#define ESTRGRP_END    1009
-
-// Extended data reals
-#define ERLGRP_START   1010
-#define ERLGRP_END     1059
-
-
-#define Y8_COORD_CODE       28
-#define Z0_COORD_CODE       30
-#define Z8_COORD_CODE       38
-
-#define POINT_COORD_CODE    10
-#define INSERT_COORD_CODE   10
-
-#define CRD2GRP_START      210
-#define CRD2GRP_END        239
-
-#define THICKNESS            39
-#define FIRST_REAL_CODE      THICKNESS
-#define LAST_REAL_CODE       59
-#define FIRST_INT_CODE       60
-#define ATTFLAGS_CODE        70
-#define PLINE_FLAGS_CODE     70
-#define LAYER_FLAGS_CODE     70
-#define FLD_LEN_CODE         73 // Inside ATTRIB resbuf
-#define LAST_INT_CODE        79
-#define X_EXTRU_CODE        210
-#define Y_EXTRU_CODE        220
-#define Z_EXTRU_CODE        230
-#define COMMENT_CODE        999
-
-// Start and endpoints of a line
-#define LINE_START_CODE      10  // Followed by x coord
-#define LINE_END_CODE        11  // Followed by x coord
-
-// Some codes used by blocks
-#define BLOCK_FLAGS_CODE     70  // An int containing flags
-#define BLOCK_BASE_CODE      10  // Origin of block definition
-#define XREF_DEPENDENT       16  // If a block contains an XREF
-#define XREF_RESOLVED        32  // If a XREF resolved ok
-#define REFERENCED           64  // If a block is ref'd in DWG
-
-#define XSCALE_CODE          41
-#define YSCALE_CODE          42
-#define ANGLE_CODE           50
-#define INS_POINT_CODE       10  // Followed by x of ins pnt
-#define NAME2_CODE            3  // Second appearance of name
-
-// Some codes used by circle entities
-#define CENTER_CODE          10  // Followed by x of center
-#define RADIUS_CODE          40  // Followd by radius of circle
-
-#define COND_OP_CODE         -4  // Conditional op,ads_ssget
-
-// When using ads_buildlist you MUST use RTDXF0 instead of these
-#define ENTITY_TYPE_CODE      0  // Then there is LINE, 3DFACE..
-#define SES_CODE              0  // Start End String Code
-#define FILE_SEP_CODE         0  // File separator
-#define SOT_CODE              0  // Start Of Table
-#define TEXTVAL_CODE          1
-#define NAME_CODE             2
-#define BLOCK_NAME_CODE       2
-#define SECTION_NAME_CODE     2
-#define ENT_HAND_CODE         5  // What follows is hexa string
-#define TXT_STYLE_CODE        7  // Inside attributes
-#define LAYER_NAME_CODE       8  // What follows is layer name
-#define FIRST_XCOORD_CODE    10  // Group code x of 1st coord
-#define FIRST_YCOORD_CODE    20  // Group code y of 1st coord
-#define FIRST_ZCOORD_CODE    30  // Group code z of 1st coord
-#define L_START_CODE         10
-#define L_END_CODE           11
-#define TXTHI_CODE           40
-#define SCALE_X_CODE         41
-#define SCALE_Y_CODE         42
-#define SCALE_Z_CODE         43
-#define BULGE_CODE           42  // Used in PLINE verts for arcs
-#define ROTATION_CODE        50
-#define COLOUR_CODE          62  // What follows is a color int
-#define LTYPE_CODE            6  // What follows is a linetype
-
-
-// Attribute flags
-#define ATTS_FOLLOW_CODE     66
-#define ATT_TAG_CODE          2
-#define ATT_VAL_CODE          1
-#define ATT_FLAGS_CODE       70  // 4 1 bit flags as follows...
-#define ATT_INVIS_FLAG        1
-#define ATT_CONST_FLAG        2
-#define ATT_VERIFY_FLAG       4 // Prompt and verify
-#define ATT_PRESET_FLAG       8 // No prompt and no verify
-
-// PLINE defines
-// Flags
-#define OPEN_PLINE       0x00
-#define CLOSED_PLINE     0x01
-#define POLYLINE3D       0x80
-#define PFACE_MESH       0x40
-#define PGON_MESH        0x10
-// Vertices follow entity, required in POLYLINES
-#define VERTS_FOLLOW_CODE   66 // Value should always be 1
-#define VERTEX_COORD_CODE   10
-
-
-// LAYER flags
-#define FROZEN           1
-#define FROZEN_BY_DEF    2
-#define LOCKED           4
-#define OBJECT_USED     64   // Object is ref'd in the dwg
-
-#define BLOCK_EN_CODE   -2   // Block entity definition
-#define E_NAME          -1   // Entity name
-
-// Extended data codes
-#define EXTD_SENTINEL    (-3)
-#define EXTD_STR         1000
-#define EXTD_APP_NAME    1001
-#define EXTD_CTL_STR     1002
-#define EXTD_LYR_STR     1003
-#define EXTD_CHUNK       1004
-#define EXTD_HANDLE      1005
-#define EXTD_POINT       1010
-#define EXTD_POS         1011
-#define EXTD_DISP        1012
-#define EXTD_DIR         1013
-#define EXTD_FLOAT       1040
-#define EXTD_DIST        1041
-#define EXTD_SCALE       1042
-#define EXTD_INT16       1070
-#define EXTD_INT32       1071
-
-// UCS codes for use in ads_trans
-#define WCS_TRANS_CODE      0
-#define UCS_TRANS_CODE      1
-#define DCS_TRANS_CODE      2
-#define PCS_TRANS_CODE      3
-
-#endif
-
diff --git a/Utilities/dxflib/dl_creationadapter.h b/Utilities/dxflib/dl_creationadapter.h
deleted file mode 100644
index a69573b8fef5ec4c468c5a249af95adb3d168899..0000000000000000000000000000000000000000
--- a/Utilities/dxflib/dl_creationadapter.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-** $Id: dl_creationadapter.h,v 1.3 2004/08/01 10:58:02 andrew Exp $
-**
-** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
-**
-** This file is part of the dxflib project.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid dxflib Professional Edition licenses may use 
-** this file in accordance with the dxflib Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.ribbonsoft.com for further details.
-**
-** Contact info@ribbonsoft.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef DL_CREATIONADAPTER_H
-#define DL_CREATIONADAPTER_H
-
-#include "dl_creationinterface.h"
-
-/**
- * An abstract adapter class for receiving DXF events when a DXF file is being read. 
- * The methods in this class are empty. This class exists as convenience for creating 
- * listener objects.
- *
- * @author Andrew Mustun
- */
-class DL_CreationAdapter : public DL_CreationInterface {
-public:
-    DL_CreationAdapter() {}
-    virtual ~DL_CreationAdapter() {}
-    virtual void addLayer(const DL_LayerData&) {}
-    virtual void addBlock(const DL_BlockData&) {}
-    virtual void endBlock() {}
-    virtual void addPoint(const DL_PointData&) {}
-    virtual void addLine(const DL_LineData&) {}
-	virtual void add3DFace(const DL_3DFaceData&) {}
-    virtual void addArc(const DL_ArcData&) {}
-    virtual void addCircle(const DL_CircleData&) {}
-    virtual void addEllipse(const DL_EllipseData&) {}
-	
-    virtual void addPolyline(const DL_PolylineData&) {}
-    virtual void addVertex(const DL_VertexData&) {}
-	
-    virtual void addSpline(const DL_SplineData&) {}
-    virtual void addControlPoint(const DL_ControlPointData&) {}
-    virtual void addKnot(const DL_KnotData&) {}
-	
-    virtual void addInsert(const DL_InsertData&) {}
-	
-    virtual void addMText(const DL_MTextData&) {}
-    virtual void addMTextChunk(const char*) {}
-    virtual void addText(const DL_TextData&) {}
-	
-    virtual void addDimAlign(const DL_DimensionData&,
-                             const DL_DimAlignedData&) {}
-    virtual void addDimLinear(const DL_DimensionData&,
-                              const DL_DimLinearData&) {}
-    virtual void addDimRadial(const DL_DimensionData&,
-                              const DL_DimRadialData&) {}
-    virtual void addDimDiametric(const DL_DimensionData&,
-                              const DL_DimDiametricData&) {}
-    virtual void addDimAngular(const DL_DimensionData&,
-                              const DL_DimAngularData&) {}
-    virtual void addDimAngular3P(const DL_DimensionData&,
-                              const DL_DimAngular3PData&) {}
-    virtual void addLeader(const DL_LeaderData&) {}
-    virtual void addLeaderVertex(const DL_LeaderVertexData&) {}
-	
-    virtual void addHatch(const DL_HatchData&) {}
-	
-    virtual void addImage(const DL_ImageData&) {}
-	virtual void linkImage(const DL_ImageDefData&) {}
-    virtual void addHatchLoop(const DL_HatchLoopData&) {}
-    virtual void addHatchEdge(const DL_HatchEdgeData&) {}
-    virtual void endEntity() {}
-    virtual void setVariableVector(const char*, 
-	               double, double, double, int) {}
-    virtual void setVariableString(const char*, const char*, int) {}
-    virtual void setVariableInt(const char*, int, int) {}
-    virtual void setVariableDouble(const char*, double, int) {}
-    virtual void endSequence() {}
-};
-
-#endif
diff --git a/Utilities/dxflib/dl_creationinterface.h b/Utilities/dxflib/dl_creationinterface.h
deleted file mode 100644
index fdafe5e1ca9d10ef405f4c3112732e491091ee8f..0000000000000000000000000000000000000000
--- a/Utilities/dxflib/dl_creationinterface.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/****************************************************************************
-** $Id: dl_creationinterface.h,v 1.5 2004/07/21 22:43:28 andrew Exp $
-**
-** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
-**
-** This file is part of the dxflib project.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid dxflib Professional Edition licenses may use 
-** this file in accordance with the dxflib Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.ribbonsoft.com for further details.
-**
-** Contact info@ribbonsoft.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef DL_CREATIONINTERFACE_H
-#define DL_CREATIONINTERFACE_H
-
-#include <string.h>
-
-#include "dl_attributes.h"
-#include "dl_codes.h"
-#include "dl_entities.h"
-#include "dl_extrusion.h"
-
-/**
- * Abstract class (interface) for the creation of new entities.
- * Inherit your class which takes care of the entities in the 
- * processed DXF file from this interface. 
- *
- * Double arrays passed to your implementation contain 3 double 
- * values for x, y, z coordinates unless stated differently.
- *
- * @author Andrew Mustun
- */
-class DL_CreationInterface {
-public:
-    DL_CreationInterface() {
-        extrusion = new DL_Extrusion;
-    }
-    virtual ~DL_CreationInterface() {
-        delete extrusion;
-    }
-
-    /**
-     * Called for every layer.
-     */
-    virtual void addLayer(const DL_LayerData& data) = 0;
-
-    /**
-     * Called for every block. Note: all entities added after this
-     * command go into this block until endBlock() is called.
-    *
-     * @see endBlock()
-     */
-    virtual void addBlock(const DL_BlockData& data) = 0;
-
-    /** Called to end the current block */
-    virtual void endBlock() = 0;
-
-    /** Called for every point */
-    virtual void addPoint(const DL_PointData& data) = 0;
-
-    /** Called for every line */
-    virtual void addLine(const DL_LineData& data) = 0;
-
-	/** Called for every 3Dface */
-    virtual void add3DFace(const DL_3DFaceData& data) = 0;
-	
-    /** Called for every arc */
-    virtual void addArc(const DL_ArcData& data) = 0;
-
-    /** Called for every circle */
-    virtual void addCircle(const DL_CircleData& data) = 0;
-
-    /** Called for every ellipse */
-    virtual void addEllipse(const DL_EllipseData& data) = 0;
-
-    /** Called for every polyline start */
-    virtual void addPolyline(const DL_PolylineData& data) = 0;
-
-    /** Called for every polyline vertex */
-    virtual void addVertex(const DL_VertexData& data) = 0;
-	
-	/** Called for every spline */
-    virtual void addSpline(const DL_SplineData& data) = 0;
-	
-	/** Called for every spline control point */
-    virtual void addControlPoint(const DL_ControlPointData& data) = 0;
-	
-	/** Called for every spline knot value */
-    virtual void addKnot(const DL_KnotData& data) = 0;
-
-    /** Called for every insert. */
-    virtual void addInsert(const DL_InsertData& data) = 0;
-
-    /** Called for every Multi Text entity. */
-    virtual void addMText(const DL_MTextData& data) = 0;
-
-    /**
-     * Called for additional text chunks for MTEXT entities.
-     * The chunks come at 250 character in size each. Note that 
-     * those chunks come <b>before</b> the actual MTEXT entity.
-     */
-    virtual void addMTextChunk(const char* text) = 0;
-
-    /** Called for every Text entity. */
-    virtual void addText(const DL_TextData& data) = 0;
-
-    /**
-     * Called for every aligned dimension entity. 
-     */
-    virtual void addDimAlign(const DL_DimensionData& data,
-                             const DL_DimAlignedData& edata) = 0;
-    /**
-     * Called for every linear or rotated dimension entity. 
-     */
-    virtual void addDimLinear(const DL_DimensionData& data,
-                              const DL_DimLinearData& edata) = 0;
-
-	/**
-     * Called for every radial dimension entity. 
-     */
-    virtual void addDimRadial(const DL_DimensionData& data,
-                              const DL_DimRadialData& edata) = 0;
-
-	/**
-     * Called for every diametric dimension entity. 
-     */
-    virtual void addDimDiametric(const DL_DimensionData& data,
-                              const DL_DimDiametricData& edata) = 0;
-
-	/**
-     * Called for every angular dimension (2 lines version) entity. 
-     */
-    virtual void addDimAngular(const DL_DimensionData& data,
-                              const DL_DimAngularData& edata) = 0;
-
-	/**
-     * Called for every angular dimension (3 points version) entity. 
-     */
-    virtual void addDimAngular3P(const DL_DimensionData& data,
-                              const DL_DimAngular3PData& edata) = 0;
-    
-    /** 
-	 * Called for every leader start. 
-	 */
-    virtual void addLeader(const DL_LeaderData& data) = 0;
-	
-	/** 
-	 * Called for every leader vertex 
-	 */
-    virtual void addLeaderVertex(const DL_LeaderVertexData& data) = 0;
-	
-	/** 
-	 * Called for every hatch entity. 
-	 */
-    virtual void addHatch(const DL_HatchData& data) = 0;
-	
-	/** 
-	 * Called for every image entity. 
-	 */
-    virtual void addImage(const DL_ImageData& data) = 0;
-
-	/**
-	 * Called for every image definition.
-	 */
-	virtual void linkImage(const DL_ImageDefData& data) = 0;
-
-	/** 
-	 * Called for every hatch loop. 
-	 */
-    virtual void addHatchLoop(const DL_HatchLoopData& data) = 0;
-
-	/** 
-	 * Called for every hatch edge entity. 
-	 */
-    virtual void addHatchEdge(const DL_HatchEdgeData& data) = 0;
-	
-	/** 
-	 * Called after an entity has been completed.  
-	 */
-    virtual void endEntity() = 0;
-
-    /**
-     * Called for every vector variable in the DXF file (e.g. "$EXTMIN").
-     */
-    virtual void setVariableVector(const char* key, 
-	               double v1, double v2, double v3, int code) = 0;
-	
-    /**
-     * Called for every string variable in the DXF file (e.g. "$ACADVER").
-     */
-    virtual void setVariableString(const char* key, const char* value, int code) = 0;
-	
-    /**
-     * Called for every int variable in the DXF file (e.g. "$ACADMAINTVER").
-     */
-    virtual void setVariableInt(const char* key, int value, int code) = 0;
-	
-    /**
-     * Called for every double variable in the DXF file (e.g. "$DIMEXO").
-     */
-    virtual void setVariableDouble(const char* key, double value, int code) = 0;
-	
-     /**
-      * Called when a SEQEND occurs (when a POLYLINE or ATTRIB is done)
-      */
-     virtual void endSequence() = 0;
-
-    /** Sets the current attributes for entities. */
-    void setAttributes(const DL_Attributes& attrib) {
-        attributes = attrib;
-    }
-
-    /** @return the current attributes used for new entities. */
-    DL_Attributes getAttributes() {
-        return attributes;
-    }
-
-    /** Sets the current attributes for entities. */
-    void setExtrusion(float dx, float dy, float dz, float elevation) {
-        extrusion->setDirection(dx, dy, dz);
-		extrusion->setElevation(elevation);
-    }
-
-    /** @return the current attributes used for new entities. */
-    DL_Extrusion* getExtrusion() {
-        return extrusion;
-    }
-
-protected:
-    DL_Attributes attributes;
-    DL_Extrusion *extrusion;
-};
-
-#endif
diff --git a/Utilities/dxflib/dl_dxf.cpp b/Utilities/dxflib/dl_dxf.cpp
deleted file mode 100644
index 19b7f1e8df512c8a9ef3f33a645d1f0f6ac1853e..0000000000000000000000000000000000000000
--- a/Utilities/dxflib/dl_dxf.cpp
+++ /dev/null
@@ -1,4921 +0,0 @@
-/****************************************************************************
-** $Id: dl_dxf.cpp,v 1.61 2004/12/09 01:10:35 andrew Exp $
-**
-** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
-**
-** This file is part of the dxflib project.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid dxflib Professional Edition licenses may use 
-** this file in accordance with the dxflib Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.ribbonsoft.com for further details.
-**
-** Contact info@ribbonsoft.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "dl_dxf.h"
-
-#include <algorithm>
-#include <string>
-#include <cstdio>
-#include <cassert>
-#include <cmath>
-
-#include "dl_attributes.h"
-#include "dl_codes.h"
-#include "dl_creationinterface.h"
-#include "dl_writer_ascii.h"
-
-#if defined(__OS2__)||defined(__EMX__)||defined(_WIN32)
-#define strcasecmp(s,t) stricmp(s,t)
-#endif
-
-#ifdef _WIN32
-#undef M_PI
-#define M_PI   3.14159265358979323846
-#pragma warning(disable : 4800)
-#endif
-
-#ifndef M_PI
-#define M_PI 3.1415926535897932384626433832795
-#endif
-
-/**
- * Default constructor.
- */
-DL_Dxf::DL_Dxf() {
-    styleHandleStd = 0;
-    version = VER_2000;
-
-    vertices = NULL;
-    maxVertices = 0;
-    vertexIndex = 0;
-
-    knots = NULL;
-    maxKnots = 0;
-    knotIndex = 0;
-
-    controlPoints = NULL;
-    maxControlPoints = 0;
-    controlPointIndex = 0;
-
-    leaderVertices = NULL;
-    maxLeaderVertices = 0;
-    leaderVertexIndex = 0;
-
-    hatchLoops = NULL;
-    maxHatchLoops = 0;
-    hatchLoopIndex = -1;
-    hatchEdges = NULL;
-    maxHatchEdges = NULL;
-    hatchEdgeIndex = NULL;
-    dropEdges = false;
-
-    //bulge = 0.0;
-}
-
-
-
-/**
- * Destructor.
- */
-DL_Dxf::~DL_Dxf() {
-    if (vertices!=NULL) {
-        delete[] vertices;
-    }
-    if (knots!=NULL) {
-        delete[] knots;
-    }
-    if (controlPoints!=NULL) {
-        delete[] controlPoints;
-    }
-    if (leaderVertices!=NULL) {
-        delete[] leaderVertices;
-    }
-    if (hatchLoops!=NULL) {
-        delete[] hatchLoops;
-    }
-    if (hatchEdges!=NULL) {
-        for (int i=0; i<maxHatchLoops; ++i) {
-            if (hatchEdges[i]!=NULL) {
-                delete[] hatchEdges[i];
-            }
-        }
-        delete[] hatchEdges;
-    }
-    if (maxHatchEdges!=NULL) {
-        delete[] maxHatchEdges;
-    }
-    if (hatchEdgeIndex!=NULL) {
-        delete[] hatchEdgeIndex;
-    }
-}
-
-
-
-/**
- * @brief Reads the given file and calls the appropriate functions in
- * the given creation interface for every entity found in the file.
- *
- * @param file Input
- *		Path and name of file to read
- * @param creationInterface
- *		Pointer to the class which takes care of the entities in the file.
- *
- * @retval true If \p file could be opened.
- * @retval false If \p file could not be opened.
- */
-bool DL_Dxf::in(const string& file, DL_CreationInterface* creationInterface) {
-    FILE *fp;
-    firstCall = true;
-    currentEntity = DL_UNKNOWN;
-    int errorCounter = 0;
-
-    fp = fopen(file.c_str(), "rt");
-    if (fp) {
-        while (readDxfGroups(fp, creationInterface, &errorCounter)) {}
-        fclose(fp);
-        if (errorCounter>0) {
-            std::cerr << "DXF Filter: There have been " << errorCounter <<
-            " errors. The drawing might be incomplete / incorrect.\n";
-        }
-        return true;
-    }
-
-    return false;
-}
-
-
-
-/**
- * Reads a DXF file from an existing stream.
- *
- * @param stream The string stream.
- * @param creationInterface
- *		Pointer to the class which takes care of the entities in the file.
- *
- * @retval true If \p file could be opened.
- * @retval false If \p file could not be opened.
- */
-#ifndef __GCC2x__
-bool DL_Dxf::in(std::stringstream& stream,
-                DL_CreationInterface* creationInterface) {
-
-    int errorCounter = 0;
-
-    if (stream.good()) {
-        firstCall=true;
-        currentEntity = DL_UNKNOWN;
-        while (readDxfGroups(stream, creationInterface, &errorCounter)) {}
-        if (errorCounter>0) {
-            std::cerr << "DXF Filter: There have been " << errorCounter <<
-            " errors. The drawing might be incomplete / incorrect.\n";
-        }
-        return true;
-    }
-    return false;
-}
-#endif
-
-
-
-/**
- * @brief Reads a group couplet from a DXF file.  Calls another function
- * to process it.
- *
- * A group couplet consists of two lines that represent a single
- * piece of data.  An integer constant on the first line indicates
- * the type of data.  The value is on the next line.\n
- *
- * This function reads a couplet, determines the type of data, and
- * passes the value to the the appropriate handler function of
- * \p creationInterface.\n
- * 
- * \p fp is advanced so that the next call to \p readDXFGroups() reads
- * the next couplet in the file.
- *
- * @param fp Handle of input file
- * @param creationInterface Handle of class which processes entities
- *		in the file
- *
- * @retval true If EOF not reached.
- * @retval false If EOF reached.
- */
-bool DL_Dxf::readDxfGroups(FILE *fp, DL_CreationInterface* creationInterface,
-                           int* errorCounter) {
-
-    bool ok = true;
-    static int line = 1;
-
-    // Read one group of the DXF file and chop the lines:
-    if (DL_Dxf::getChoppedLine(groupCodeTmp, DL_DXF_MAXLINE, fp) &&
-            DL_Dxf::getChoppedLine(groupValue, DL_DXF_MAXLINE, fp) ) {
-
-        groupCode = (unsigned int)stringToInt(groupCodeTmp, &ok);
-
-        if (ok) {
-            //std::cerr << groupCode << "\n";
-            //std::cerr << groupValue << "\n";
-            line+=2;
-            processDXFGroup(creationInterface, groupCode, groupValue);
-        } else {
-            std::cerr << "DXF read error: Line: " << line << "\n";
-            if (errorCounter!=NULL) {
-                (*errorCounter)++;
-            }
-            // try to fix:
-            std::cerr << "DXF read error: trying to fix..\n";
-            // drop a line to sync:
-            DL_Dxf::getChoppedLine(groupCodeTmp, DL_DXF_MAXLINE, fp);
-        }
-    }
-
-    return !feof(fp);
-}
-
-
-
-/**
- * Same as above but for stringstreams.
- */
-#ifndef __GCC2x__
-bool DL_Dxf::readDxfGroups(std::stringstream& stream,
-                           DL_CreationInterface* creationInterface,
-                           int* errorCounter) {
-
-    bool ok = true;
-    static int line = 1;
-
-    // Read one group of the DXF file and chop the lines:
-    if (DL_Dxf::getChoppedLine(groupCodeTmp, DL_DXF_MAXLINE, stream) &&
-            DL_Dxf::getChoppedLine(groupValue, DL_DXF_MAXLINE, stream) ) {
-
-        groupCode = (unsigned int)stringToInt(groupCodeTmp, &ok);
-
-        if (ok) {
-            //std::cout << groupCode << "\n";
-            //std::cout << groupValue << "\n";
-            line+=2;
-            processDXFGroup(creationInterface, groupCode, groupValue);
-        } else {
-            std::cerr << "DXF read error: Line: " << line << "\n";
-            if (errorCounter!=NULL) {
-                (*errorCounter)++;
-            }
-            // try to fix:
-            std::cerr << "DXF read error: trying to fix..\n";
-            // drop a line to sync:
-            DL_Dxf::getChoppedLine(groupCodeTmp, DL_DXF_MAXLINE, stream);
-        }
-    }
-    return !stream.eof();
-}
-#endif
-
-
-
-/**
- * @brief Reads line from file & strips whitespace at start and newline 
- * at end.
- *
- * @param s Output\n
- *		Pointer to character array that chopped line will be returned in.
- * @param size Size of \p s.  (Including space for NULL.)
- * @param fp Input\n
- *		Handle of input file.
- *
- * @retval true if line could be read
- * @retval false if \p fp is already at end of file
- *
- * @todo Change function to use safer FreeBSD strl* functions
- * @todo Is it a problem if line is blank (i.e., newline only)?
- *		Then, when function returns, (s==NULL).
- */
-bool DL_Dxf::getChoppedLine(char *s, unsigned int size, FILE *fp) {
-    if (!feof(fp)) {
-        // The whole line in the file.  Includes space for NULL.
-        char* wholeLine = new char[size];
-        // Only the useful part of the line
-        char* line;
-
-        line = fgets(wholeLine, size, fp);
-
-        if (line!=NULL && strlen(line)!=0) { // Evaluates to fgets() retval
-            // line == wholeLine at this point.
-            // Both guaranteed to be NULL terminated.
-
-            // Strip leading whitespace and trailing CR/LF.
-            stripWhiteSpace(&line);
-
-            strncpy(s, line, size);
-            s[size] = '\0';
-            // s should always be NULL terminated, because:
-            assert(size > strlen(line));
-        }
-
-        delete[] wholeLine; // Done with wholeLine
-
-        return true;
-    } else {
-        s[0] = '\0';
-        return false;
-    }
-}
-
-
-
-/**
- * Same as above but for stringstreams.
- */
-#ifndef __GCC2x__
-bool DL_Dxf::getChoppedLine(char *s, unsigned int size,
-                            std::stringstream& stream) {
-
-    if (!stream.eof()) {
-        // The whole line in the file.  Includes space for NULL.
-        char* wholeLine = new char[size];
-        // Only the useful part of the line
-        stream.getline(wholeLine, size);
-        stripWhiteSpace(&wholeLine);
-        strncpy(s, wholeLine, size);
-        assert(size > strlen(wholeLine));
-        delete[] wholeLine; // Done with wholeLine
-        return true;
-    } else {
-        s[0] = '\0';
-        return false;
-    }
-}
-#endif
-
-
-
-/**
- * @brief Strips leading whitespace and trailing Carriage Return (CR)
- * and Line Feed (LF) from NULL terminated string.
- *
- * @param s Input and output.
- *		NULL terminates string.
- *
- * @retval true if \p s is non-NULL
- * @retval false if \p s is NULL
- */
-bool DL_Dxf::stripWhiteSpace(char** s) {
-    // last non-NULL char:
-    int lastChar = strlen(*s) - 1;
-    //std::cout << "lastChar: " << lastChar << "\n";
-
-    // Is last character CR or LF?
-    while ( (lastChar >= 0) &&
-            (((*s)[lastChar] == 10) || ((*s)[lastChar] == 13) ||
-             ((*s)[lastChar] == ' ' || ((*s)[lastChar] == '\t'))) ) {
-        (*s)[lastChar] = '\0';
-        lastChar--;
-    }
-
-    // Skip whitespace, excluding \n, at beginning of line
-    while ((*s)[0]==' ' || (*s)[0]=='\t') {
-        ++(*s);
-    }
-
-    return ((*s) ? true : false);
-}
-
-
-
-/**
- * Processes a group (pair of group code and value).
- *
- * @param creationInterface Handle to class that creates entities and
- * other CAD data from DXF group codes
- *
- * @param groupCode Constant indicating the data type of the group.
- * @param groupValue The data value.
- *
- * @retval true if done processing current entity and new entity begun
- * @retval false if not done processing current entity
-*/
-bool DL_Dxf::processDXFGroup(DL_CreationInterface* creationInterface,
-                             int groupCode, const char *groupValue) {
-
-
-    //std::cout << "DL_Dxf::processDXFGroup: " << groupCode << ": "
-    //<< groupValue << "\n";
-
-    // Init on first call
-    if (firstCall) {
-        for (int i=0; i<DL_DXF_MAXGROUPCODE; ++i) {
-            values[i][0] = '\0';
-        }
-        settingValue[0] = '\0';
-        firstCall=false;
-    }
-
-    // Indicates comment or dxflib version:
-    if (groupCode==999) {
-        //std::cout << "999: " << groupValue << "\n";
-        if (groupValue!=NULL) {
-            if (!strncmp(groupValue, "dxflib", 6)) {
-                //std::cout << "dxflib version found" << "\n";
-                libVersion = getLibVersion(&groupValue[7]);
-            }
-        }
-    }
-
-    // Indicates start of new entity or var
-    else if (groupCode==0 || groupCode==9) {
-
-        // If new entity is encountered, the last one must be complete
-        // prepare attributes which can be used for most entities:
-        char name[DL_DXF_MAXLINE+1];
-        if (strlen(values[8])!=0) {
-            strcpy(name, values[8]);
-        }
-        // defaults to layer '0':
-        else {
-            strcpy(name, "0");
-        }
-
-        int width;
-        // Compatibillity with qcad1:
-        if (strlen(values[39])!=0 &&
-                strlen(values[370])==0) {
-            width = toInt(values[39], -1);
-        }
-        // since autocad 2002:
-        else if (strlen(values[370])!=0) {
-            width = toInt(values[370], -1);
-        }
-        // default to BYLAYER:
-        else {
-            width = -1;
-        }
-
-        int color;
-        color = toInt(values[62], 256);
-
-        char linetype[DL_DXF_MAXLINE+1];
-        strcpy(linetype, toString(values[6], "BYLAYER"));
-
-        attrib = DL_Attributes(values[8],          // layer
-                               color,              // color
-                               width,              // width
-                               linetype);          // linetype
-        creationInterface->setAttributes(attrib);
-
-        creationInterface->setExtrusion(static_cast<float>(toReal(values[210], 0.0)),
-                                        static_cast<float>(toReal(values[220], 0.0)),
-                                        static_cast<float>(toReal(values[230], 1.0)),
-                                        static_cast<float>(toReal(values[30], 0.0)));
-
-        // Add the last entity via creationInterface
-        switch (currentEntity) {
-        case DL_SETTING:
-            addSetting(creationInterface);
-            break;
-
-        case DL_LAYER:
-            addLayer(creationInterface);
-            break;
-
-        case DL_BLOCK:
-            addBlock(creationInterface);
-            break;
-
-        case DL_ENDBLK:
-            endBlock(creationInterface);
-            break;
-
-        case DL_ENTITY_POINT:
-            addPoint(creationInterface);
-            break;
-
-        case DL_ENTITY_LINE:
-            addLine(creationInterface);
-            break;
-
-        case DL_ENTITY_3DFACE:
-            add3DFace(creationInterface);
-            break;			
-			
-        case DL_ENTITY_POLYLINE:
-            //bulge = toReal(values[42]);
-            // fall through
-        case DL_ENTITY_LWPOLYLINE:
-            addPolyline(creationInterface);
-            break;
-
-        case DL_ENTITY_VERTEX:
-            addVertex(creationInterface);
-            break;
-
-        case DL_ENTITY_SPLINE:
-            addSpline(creationInterface);
-            break;
-
-        case DL_ENTITY_ARC:
-            addArc(creationInterface);
-            break;
-
-        case DL_ENTITY_CIRCLE:
-            addCircle(creationInterface);
-            break;
-
-        case DL_ENTITY_ELLIPSE:
-            addEllipse(creationInterface);
-            break;
-
-        case DL_ENTITY_INSERT:
-            addInsert(creationInterface);
-            break;
-
-        case DL_ENTITY_MTEXT:
-            addMText(creationInterface);
-            break;
-
-        case DL_ENTITY_TEXT:
-            addText(creationInterface);
-            break;
-
-        case DL_ENTITY_ATTRIB:
-            addAttrib(creationInterface);
-            break;
-
-        case DL_ENTITY_DIMENSION: {
-                int type = (toInt(values[70], 0)&0x07);
-
-                switch (type) {
-                case 0:
-                    addDimLinear(creationInterface);
-                    break;
-
-                case 1:
-                    addDimAligned(creationInterface);
-                    break;
-
-                case 2:
-                    addDimAngular(creationInterface);
-                    break;
-
-                case 3:
-                    addDimDiametric(creationInterface);
-                    break;
-
-                case 4:
-                    addDimRadial(creationInterface);
-                    break;
-
-                case 5:
-                    addDimAngular3P(creationInterface);
-                    break;
-
-                default:
-                    break;
-                }
-            }
-            break;
-
-        case DL_ENTITY_LEADER:
-            addLeader(creationInterface);
-            break;
-
-        case DL_ENTITY_HATCH:
-            addHatch(creationInterface);
-            break;
-
-        case DL_ENTITY_IMAGE:
-            addImage(creationInterface);
-            break;
-
-        case DL_ENTITY_IMAGEDEF:
-            addImageDef(creationInterface);
-            break;
-
-        case DL_ENTITY_SEQEND:
-            endSequence(creationInterface);
-            break;
-
-        default:
-            break;
-        }
-
-
-        // reset all values (they are not persistent and only this
-        //  way we can detect default values for unstored settings)
-        for (int i=0; i<DL_DXF_MAXGROUPCODE; ++i) {
-            values[i][0] = '\0';
-        }
-        settingValue[0] = '\0';
-        settingKey[0] = '\0';
-
-
-        // Last DXF entity or setting has been handled
-        // Now determine what the next entity or setting type is
-
-		int prevEntity = currentEntity;
-
-        // Read DXF settings:
-        if (groupValue[0]=='$') {
-            currentEntity = DL_SETTING;
-            strncpy(settingKey, groupValue, DL_DXF_MAXLINE);
-            settingKey[DL_DXF_MAXLINE] = '\0';
-        }
-        // Read Layers:
-        else if (!strcmp(groupValue, "LAYER")) {
-            currentEntity = DL_LAYER;
-
-        }
-        // Read Blocks:
-        else if (!strcmp(groupValue, "BLOCK")) {
-            currentEntity = DL_BLOCK;
-        } else if (!strcmp(groupValue, "ENDBLK")) {
-            currentEntity = DL_ENDBLK;
-
-        }
-        // Read entities:
-        else if (!strcmp(groupValue, "POINT")) {
-            currentEntity = DL_ENTITY_POINT;
-        } else if (!strcmp(groupValue, "LINE")) {
-            currentEntity = DL_ENTITY_LINE;
-        } else if (!strcmp(groupValue, "3DFACE")) {
-            currentEntity = DL_ENTITY_3DFACE;		
-        } else if (!strcmp(groupValue, "POLYLINE")) {
-            currentEntity = DL_ENTITY_POLYLINE;
-        } else if (!strcmp(groupValue, "LWPOLYLINE")) {
-            currentEntity = DL_ENTITY_LWPOLYLINE;
-        } else if (!strcmp(groupValue, "VERTEX")) {
-            currentEntity = DL_ENTITY_VERTEX;
-        } else if (!strcmp(groupValue, "SPLINE")) {
-            currentEntity = DL_ENTITY_SPLINE;
-        } else if (!strcmp(groupValue, "ARC")) {
-            currentEntity = DL_ENTITY_ARC;
-        } else if (!strcmp(groupValue, "ELLIPSE")) {
-            currentEntity = DL_ENTITY_ELLIPSE;
-        } else if (!strcmp(groupValue, "CIRCLE")) {
-            currentEntity = DL_ENTITY_CIRCLE;
-        } else if (!strcmp(groupValue, "INSERT")) {
-            currentEntity = DL_ENTITY_INSERT;
-        } else if (!strcmp(groupValue, "TEXT")) {
-            currentEntity = DL_ENTITY_TEXT;
-        } else if (!strcmp(groupValue, "MTEXT")) {
-            currentEntity = DL_ENTITY_MTEXT;
-        } else if (!strcmp(groupValue, "ATTRIB")) {
-            currentEntity = DL_ENTITY_ATTRIB;
-        } else if (!strcmp(groupValue, "DIMENSION")) {
-            currentEntity = DL_ENTITY_DIMENSION;
-        } else if (!strcmp(groupValue, "LEADER")) {
-            currentEntity = DL_ENTITY_LEADER;
-        } else if (!strcmp(groupValue, "HATCH")) {
-            currentEntity = DL_ENTITY_HATCH;
-        } else if (!strcmp(groupValue, "IMAGE")) {
-            currentEntity = DL_ENTITY_IMAGE;
-        } else if (!strcmp(groupValue, "IMAGEDEF")) {
-            currentEntity = DL_ENTITY_IMAGEDEF;
-        } else if (!strcmp(groupValue, "SEQEND")) {
-            currentEntity = DL_ENTITY_SEQEND;
-        } else {
-            currentEntity = DL_UNKNOWN;
-        }
-
-		// end of old style POLYLINE entity
-		if (prevEntity==DL_ENTITY_VERTEX && currentEntity!=DL_ENTITY_VERTEX) {
-			endEntity(creationInterface);
-		}
-
-        return true;
-
-    } else {
-        // Group code does not indicate start of new entity or setting,
-        // so this group must be continuation of data for the current
-        // one.
-        if (groupCode<DL_DXF_MAXGROUPCODE) {
-
-            bool handled = false;
-
-            switch (currentEntity) {
-            case DL_ENTITY_MTEXT:
-                handled = handleMTextData(creationInterface);
-                break;
-
-            case DL_ENTITY_LWPOLYLINE:
-                handled = handleLWPolylineData(creationInterface);
-                break;
-
-            case DL_ENTITY_SPLINE:
-                handled = handleSplineData(creationInterface);
-                break;
-
-            case DL_ENTITY_LEADER:
-                handled = handleLeaderData(creationInterface);
-                break;
-
-            case DL_ENTITY_HATCH:
-                handled = handleHatchData(creationInterface);
-                break;
-
-            default:
-                break;
-            }
-
-            if (!handled) {
-                // Normal group / value pair:
-                strncpy(values[groupCode], groupValue, DL_DXF_MAXLINE);
-                values[groupCode][DL_DXF_MAXLINE] = '\0';
-            }
-        }
-
-        return false;
-    }
-    return false;
-}
-
-
-
-/**
- * Adds a variable from the DXF file.
- */
-void DL_Dxf::addSetting(DL_CreationInterface* creationInterface) {
-    int c = -1;
-    for (int i=0; i<=380; ++i) {
-        if (values[i][0]!='\0') {
-            c = i;
-            break;
-        }
-    }
-
-    // string
-    if (c>=0 && c<=9) {
-        creationInterface->setVariableString(settingKey,
-                                             values[c], c);
-    }
-    // vector
-    else if (c>=10 && c<=39) {
-        if (c==10) {
-            creationInterface->setVariableVector(
-                settingKey,
-                toReal(values[c]),
-                toReal(values[c+10]),
-                toReal(values[c+20]),
-                c);
-        }
-    }
-    // double
-    else if (c>=40 && c<=59) {
-        creationInterface->setVariableDouble(settingKey,
-                                             toReal(values[c]),
-                                             c);
-    }
-    // int
-    else if (c>=60 && c<=99) {
-        creationInterface->setVariableInt(settingKey,
-                                          toInt(values[c]),
-                                          c);
-    }
-    // misc
-    else if (c>=0) {
-        creationInterface->setVariableString(settingKey,
-                                             values[c],
-                                             c);
-    }
-}
-
-
-
-/**
- * Adds a layer that was read from the file via the creation interface.
- */
-void DL_Dxf::addLayer(DL_CreationInterface* creationInterface) {
-    // correct some impossible attributes for layers:
-    attrib = creationInterface->getAttributes();
-    if (attrib.getColor()==256 || attrib.getColor()==0) {
-        attrib.setColor(7);
-    }
-    if (attrib.getWidth()<0) {
-        attrib.setWidth(1);
-    }
-    if (!strcasecmp(attrib.getLineType().c_str(), "BYLAYER") ||
-            !strcasecmp(attrib.getLineType().c_str(), "BYBLOCK")) {
-        attrib.setLineType("CONTINUOUS");
-    }
-
-    // add layer
-    creationInterface->addLayer(DL_LayerData(values[2],
-                                toInt(values[70])));
-}
-
-
-
-/**
- * Adds a block that was read from the file via the creation interface.
- */
-void DL_Dxf::addBlock(DL_CreationInterface* creationInterface) {
-    DL_BlockData d(
-        // Name:
-        values[2],
-        // flags:
-        toInt(values[70]),
-        // base point:
-        toReal(values[10]),
-        toReal(values[20]),
-        toReal(values[30]));
-
-    creationInterface->addBlock(d);
-}
-
-
-
-/**
- * Ends a block that was read from the file via the creation interface.
- */
-void DL_Dxf::endBlock(DL_CreationInterface* creationInterface) {
-    creationInterface->endBlock();
-}
-
-
-
-/**
- * Adds a point entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addPoint(DL_CreationInterface* creationInterface) {
-    DL_PointData d(toReal(values[10]),
-                   toReal(values[20]),
-                   toReal(values[30]));
-    creationInterface->addPoint(d);
-}
-
-
-
-/**
- * Adds a line entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addLine(DL_CreationInterface* creationInterface) {
-    DL_LineData d(toReal(values[10]),
-                  toReal(values[20]),
-                  toReal(values[30]),
-                  toReal(values[11]),
-                  toReal(values[21]),
-                  toReal(values[31]));
-
-    creationInterface->addLine(d);
-}
-
-
-
-/**
- * Adds a 3DFace entity that was read from the file via the creation interface.
- */
-void DL_Dxf::add3DFace(DL_CreationInterface* creationInterface) {
-    DL_3DFaceData d(toReal(values[10]),
-                  toReal(values[20]),
-                  toReal(values[30]),
-                  toReal(values[11]),
-                  toReal(values[21]),
-                  toReal(values[31]),
-				  toReal(values[12]),
-                  toReal(values[22]),
-                  toReal(values[32]),
-                  toReal(values[13]),
-                  toReal(values[23]),
-                  toReal(values[33]));
-
-    creationInterface->add3DFace(d);
-}
-
-
-
-/**
- * Adds a polyline entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addPolyline(DL_CreationInterface* creationInterface) {
-    DL_PolylineData pd(maxVertices, toInt(values[71], 0), toInt(values[72], 0), toInt(values[70], 0));
-    creationInterface->addPolyline(pd);
-
-    if (currentEntity==DL_ENTITY_LWPOLYLINE) {
-        for (int i=0; i<maxVertices; i++) {
-            DL_VertexData d(vertices[i*4],
-                            vertices[i*4+1],
-                            vertices[i*4+2],
-                            vertices[i*4+3]);
-
-            creationInterface->addVertex(d);
-        }
-		creationInterface->endEntity();
-    }
-}
-
-
-
-/**
- * Adds a polyline vertex entity that was read from the file 
- * via the creation interface.
- */
-void DL_Dxf::addVertex(DL_CreationInterface* creationInterface) {
-    DL_VertexData d(toReal(values[10]),
-                    toReal(values[20]),
-                    toReal(values[30]),
-                    //bulge);
-                    toReal(values[42]));
-
-    //bulge = toReal(values[42]);
-
-    creationInterface->addVertex(d);
-}
-
-
-
-/**
- * Adds a spline entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addSpline(DL_CreationInterface* creationInterface) {
-    DL_SplineData sd(toInt(values[71], 3), toInt(values[72], 0),
-                     toInt(values[73], 0), toInt(values[70], 4));
-    creationInterface->addSpline(sd);
-
-    for (int i=0; i<maxControlPoints; i++) {
-        DL_ControlPointData d(controlPoints[i*3],
-                              controlPoints[i*3+1],
-                              controlPoints[i*3+2]);
-
-        creationInterface->addControlPoint(d);
-    }
-}
-
-
-
-/**
- * Adds a knot to the previously added spline. 
- */
-/*
-void DL_Dxf::addKnot(DL_CreationInterface* creationInterface) {
-   std::cout << "DL_Dxf::addKnot\n";
-}
-*/
-
-
-
-/**
- * Adds a control point to the previously added spline. 
- */
-/*
-void DL_Dxf::addControlPoint(DL_CreationInterface* creationInterface) {
-    std::cout << "DL_Dxf::addControlPoint\n";
-}
-*/
-
-
-
-/**
- * Adds an arc entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addArc(DL_CreationInterface* creationInterface) {
-    DL_ArcData d(toReal(values[10]),
-                 toReal(values[20]),
-                 toReal(values[30]),
-                 toReal(values[40]),
-                 toReal(values[50]),
-                 toReal(values[51]));
-
-    creationInterface->addArc(d);
-}
-
-
-
-/**
- * Adds a circle entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addCircle(DL_CreationInterface* creationInterface) {
-    DL_CircleData d(toReal(values[10]),
-                    toReal(values[20]),
-                    toReal(values[30]),
-                    toReal(values[40]));
-
-    creationInterface->addCircle(d);
-}
-
-
-
-/**
- * Adds an ellipse entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addEllipse(DL_CreationInterface* creationInterface) {
-    DL_EllipseData d(toReal(values[10]),
-                     toReal(values[20]),
-                     toReal(values[30]),
-                     toReal(values[11]),
-                     toReal(values[21]),
-                     toReal(values[31]),
-                     toReal(values[40], 1.0),
-                     toReal(values[41], 0.0),
-                     toReal(values[42], 2*M_PI));
-
-    creationInterface->addEllipse(d);
-}
-
-
-
-/**
- * Adds an insert entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addInsert(DL_CreationInterface* creationInterface) {
-    DL_InsertData d(values[2],
-                    // insertion point
-                    toReal(values[10], 0.0),
-                    toReal(values[20], 0.0),
-                    toReal(values[30], 0.0),
-                    // scale:
-                    toReal(values[41], 1.0),
-                    toReal(values[42], 1.0),
-                    toReal(values[43], 1.0),
-                    // angle:
-                    toReal(values[50], 0.0),
-                    // cols / rows:
-                    toInt(values[70], 1),
-                    toInt(values[71], 1),
-                    // spacing:
-                    toReal(values[44], 0.0),
-                    toReal(values[45], 0.0));
-
-    creationInterface->addInsert(d);
-}
-
-
-
-/**
- * Adds an MText entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addMText(DL_CreationInterface* creationInterface) {
-    double angle = 0.0;
-
-    if (values[50][0]!='\0') {
-        if (libVersion<=0x02000200) {
-            // wrong but compatible with dxflib <=2.0.2.0:
-            angle = toReal(values[50], 0.0);
-        } else {
-            angle = (toReal(values[50], 0.0)*2*M_PI)/360.0;
-        }
-    } else if (values[11][0]!='\0' && values[21][0]!='\0') {
-        double x = toReal(values[11], 0.0);
-        double y = toReal(values[21], 0.0);
-
-        if (fabs(x)<1.0e-6) {
-            if (y>0.0) {
-                angle = M_PI/2.0;
-            } else {
-                angle = M_PI/2.0*3.0;
-            }
-        } else {
-            angle = atan(y/x);
-        }
-    }
-
-    DL_MTextData d(
-        // insertion point
-        toReal(values[10], 0.0),
-        toReal(values[20], 0.0),
-        toReal(values[30], 0.0),
-        // height
-        toReal(values[40], 2.5),
-        // width
-        toReal(values[41], 100.0),
-        // attachment point
-        toInt(values[71], 1),
-        // drawing direction
-        toInt(values[72], 1),
-        // line spacing style
-        toInt(values[73], 1),
-        // line spacing factor
-        toReal(values[44], 1.0),
-        // text
-        values[1],
-        // style
-        values[7],
-        // angle
-        angle);
-    creationInterface->addMText(d);
-}
-
-
-
-/**
- * Handles additional MText data.
- */
-bool DL_Dxf::handleMTextData(DL_CreationInterface* creationInterface) {
-    // Special handling of text chunks for MTEXT entities:
-    if (groupCode==3) {
-        creationInterface->addMTextChunk(groupValue);
-        return true;
-    }
-
-    return false;
-}
-
-
-
-/**
- * Handles additional polyline data.
- */
-bool DL_Dxf::handleLWPolylineData(DL_CreationInterface* /*creationInterface*/) {
-    // Allocate LWPolyline vertices (group code 90):
-    if (groupCode==90) {
-        maxVertices = toInt(groupValue);
-        if (maxVertices>0) {
-            if (vertices!=NULL) {
-                delete[] vertices;
-            }
-            vertices = new double[4*maxVertices];
-            for (int i=0; i<maxVertices; ++i) {
-                vertices[i*4] = 0.0;
-                vertices[i*4+1] = 0.0;
-                vertices[i*4+2] = 0.0;
-                vertices[i*4+3] = 0.0;
-            }
-        }
-        vertexIndex=-1;
-        return true;
-    }
-
-    // Compute LWPolylines vertices (group codes 10/20/30/42):
-    else if (groupCode==10 || groupCode==20 ||
-             groupCode==30 || groupCode==42) {
-
-        if (vertexIndex<maxVertices-1 && groupCode==10) {
-            vertexIndex++;
-        }
-
-        if (groupCode<=30) {
-            if (vertexIndex>=0 && vertexIndex<maxVertices) {
-                vertices[4*vertexIndex + (groupCode/10-1)]
-                = toReal(groupValue);
-            }
-        } else if (groupCode==42 && vertexIndex<maxVertices) {
-            vertices[4*vertexIndex + 3] = toReal(groupValue);
-        }
-        return true;
-    }
-    return false;
-}
-
-
-
-/**
- * Handles additional spline data.
- */
-bool DL_Dxf::handleSplineData(DL_CreationInterface* /*creationInterface*/) {
-    // Allocate Spline knots (group code 72):
-    if (groupCode==72) {
-        maxKnots = toInt(groupValue);
-        if (maxKnots>0) {
-            if (knots!=NULL) {
-                delete[] knots;
-            }
-            knots = new double[maxKnots];
-            for (int i=0; i<maxKnots; ++i) {
-                knots[i] = 0.0;
-            }
-        }
-        knotIndex=-1;
-        return true;
-    }
-
-    // Allocate Spline control points (group code 73):
-    else if (groupCode==73) {
-        maxControlPoints = toInt(groupValue);
-        if (maxControlPoints>0) {
-            if (controlPoints!=NULL) {
-                delete[] controlPoints;
-            }
-            controlPoints = new double[3*maxControlPoints];
-            for (int i=0; i<maxControlPoints; ++i) {
-                controlPoints[i*3] = 0.0;
-                controlPoints[i*3+1] = 0.0;
-                controlPoints[i*3+2] = 0.0;
-            }
-        }
-        controlPointIndex=-1;
-        return true;
-    }
-
-    // Compute spline knot vertices (group code 40):
-    else if (groupCode==40) {
-        if (knotIndex<maxKnots-1) {
-            knotIndex++;
-            knots[knotIndex] = toReal(groupValue);
-        }
-        return true;
-    }
-
-    // Compute spline control points (group codes 10/20/30):
-    else if (groupCode==10 || groupCode==20 ||
-             groupCode==30) {
-
-        if (controlPointIndex<maxControlPoints-1 && groupCode==10) {
-            controlPointIndex++;
-        }
-
-        if (controlPointIndex>=0 && controlPointIndex<maxControlPoints) {
-            controlPoints[3*controlPointIndex + (groupCode/10-1)]
-            = toReal(groupValue);
-        }
-        return true;
-    }
-    return false;
-}
-
-
-
-/**
- * Handles additional leader data.
- */
-bool DL_Dxf::handleLeaderData(DL_CreationInterface* /*creationInterface*/) {
-    // Allocate Leader vertices (group code 76):
-    if (groupCode==76) {
-        maxLeaderVertices = toInt(groupValue);
-        if (maxLeaderVertices>0) {
-            if (leaderVertices!=NULL) {
-                delete[] leaderVertices;
-            }
-            leaderVertices = new double[3*maxLeaderVertices];
-            for (int i=0; i<maxLeaderVertices; ++i) {
-                leaderVertices[i*3] = 0.0;
-                leaderVertices[i*3+1] = 0.0;
-                leaderVertices[i*3+2] = 0.0;
-            }
-        }
-        leaderVertexIndex=-1;
-        return true;
-    }
-
-    // Compute Leader vertices (group codes 10/20/30):
-    else if (groupCode==10 || groupCode==20 || groupCode==30) {
-
-        if (leaderVertexIndex<maxLeaderVertices-1 && groupCode==10) {
-            leaderVertexIndex++;
-        }
-
-        if (groupCode<=30) {
-            if (leaderVertexIndex>=0 &&
-                    leaderVertexIndex<maxLeaderVertices) {
-                leaderVertices[3*leaderVertexIndex + (groupCode/10-1)]
-                = toReal(groupValue);
-            }
-        }
-        return true;
-    }
-
-    return false;
-}
-
-
-
-/**
- * Handles additional hatch data.
- */
-bool DL_Dxf::handleHatchData(DL_CreationInterface* /*creationInterface*/) {
-
-    static int firstPolylineStatus = 0;
-
-    // Allocate hatch loops (group code 91):
-    if (groupCode==91 && toInt(groupValue)>0) {
-
-        //std::cout << "allocating " << toInt(groupValue) << " loops\n";
-
-        if (hatchLoops!=NULL) {
-            delete[] hatchLoops;
-            hatchLoops = NULL;
-        }
-        if (maxHatchEdges!=NULL) {
-            delete[] maxHatchEdges;
-            maxHatchEdges = NULL;
-        }
-        if (hatchEdgeIndex!=NULL) {
-            delete[] hatchEdgeIndex;
-            hatchEdgeIndex = NULL;
-        }
-        if (hatchEdges!=NULL) {
-            for (int i=0; i<maxHatchLoops; ++i) {
-                delete[] hatchEdges[i];
-            }
-            delete[] hatchEdges;
-            hatchEdges = NULL;
-        }
-        maxHatchLoops = toInt(groupValue);
-
-        //std::cout << "maxHatchLoops: " << maxHatchLoops << "\n";
-
-        if (maxHatchLoops>0) {
-            hatchLoops = new DL_HatchLoopData[maxHatchLoops];
-            maxHatchEdges = new int[maxHatchLoops];
-            hatchEdgeIndex = new int[maxHatchLoops];
-            hatchEdges = new DL_HatchEdgeData*[maxHatchLoops];
-            //std::cout << "new hatchEdges[" << maxHatchLoops << "]\n";
-            for (int i=0; i<maxHatchLoops; ++i) {
-                hatchEdges[i] = NULL;
-                //std::cout << "hatchEdges[" << i << "] = NULL\n";
-                maxHatchEdges[i] = 0;
-            }
-            hatchLoopIndex = -1;
-            dropEdges = false;
-        }
-        //std::cout << "done\n";
-        return true;
-    }
-
-    // Allocate hatch edges, group code 93
-    if (groupCode==93 && toInt(groupValue)>0) {
-        if (hatchLoopIndex<maxHatchLoops-1 && hatchLoops!=NULL &&
-                maxHatchEdges!=NULL && hatchEdgeIndex!=NULL &&
-                hatchEdges!=NULL) {
-
-            //std::cout << "  allocating " << toInt(groupValue) << " edges\n";
-            dropEdges = false;
-
-            hatchLoopIndex++;
-            hatchLoops[hatchLoopIndex]
-            = DL_HatchLoopData(toInt(groupValue));
-
-            maxHatchEdges[hatchLoopIndex] = toInt(groupValue);
-            hatchEdgeIndex[hatchLoopIndex] = -1;
-            hatchEdges[hatchLoopIndex]
-            = new DL_HatchEdgeData[toInt(groupValue)];
-
-            //std::cout << "hatchEdges[" << hatchLoopIndex << "] = new "
-            //  << toInt(groupValue) << "\n";
-            firstPolylineStatus = 0;
-        } else {
-            //std::cout << "dropping " << toInt(groupValue) << " edges\n";
-            dropEdges = true;
-        }
-        //std::cout << "done\n";
-        return true;
-    }
-
-    // Init hatch edge for non-polyline boundary (group code 72)
-    if (hatchEdges!=NULL &&
-            hatchEdgeIndex!=NULL &&
-            maxHatchEdges!=NULL &&
-            hatchLoopIndex>=0 &&
-            hatchLoopIndex<maxHatchLoops &&
-            hatchEdgeIndex[hatchLoopIndex] <
-            maxHatchEdges[hatchLoopIndex] &&
-            (atoi(values[92])&2)==0 &&   // not a polyline
-            groupCode==72 &&
-            !dropEdges) {
-
-        //std::cout << "Init hatch edge for non-polyline boundary\n";
-        //std::cout << "hatchLoopIndex: " << hatchLoopIndex << "\n";
-        //std::cout << "maxHatchLoops: " << maxHatchLoops << "\n";
-
-        hatchEdgeIndex[hatchLoopIndex]++;
-
-        //std::cout << "  init edge: type: "
-        //<< toInt(groupValue)
-        //<< " index: " << hatchEdgeIndex[hatchLoopIndex] << "\n";
-
-        hatchEdges[hatchLoopIndex][hatchEdgeIndex[hatchLoopIndex]]
-        .type = toInt(groupValue);
-        hatchEdges[hatchLoopIndex][hatchEdgeIndex[hatchLoopIndex]]
-        .defined = false;
-
-        //std::cout << "done\n";
-        return true;
-    }
-
-    // Handle hatch edges for non-polyline boundaries
-    //   (group codes 10, 20, 11, 21, 40, 50, 51, 73)
-    if (!dropEdges &&
-            hatchEdges!=NULL &&
-            hatchEdgeIndex!=NULL &&
-            hatchLoopIndex>=0 &&
-            hatchLoopIndex<maxHatchLoops &&
-            hatchEdges[hatchLoopIndex]!=NULL &&
-            hatchEdgeIndex[hatchLoopIndex]>=0 &&
-            hatchEdgeIndex[hatchLoopIndex] <
-            maxHatchEdges[hatchLoopIndex] &&
-            ((atoi(values[92])&2)==0) &&        // not a polyline
-            (groupCode==10 || groupCode==20 ||
-             groupCode==11 || groupCode==21 ||
-             groupCode==40 || groupCode==50 ||
-             groupCode==51 || groupCode==73)) {
-
-        //std::cout << "Handle hatch edge for non-polyline boundary\n";
-        //std::cout << "  found edge data: " << groupCode << "\n";
-        //std::cout << "     value: " << toReal(groupValue) << "\n";
-
-        // can crash:
-        //std::cout << "     defined: "
-        //   << (int)hatchEdges[hatchLoopIndex]
-        //   [hatchEdgeIndex[hatchLoopIndex]].defined << "\n";
-
-        //std::cout << "92 flag: '" << values[92] << "'\n";
-        //std::cout << "92 flag (int): '" << atoi(values[92]) << "'\n";
-
-        if (hatchEdges[hatchLoopIndex]
-                [hatchEdgeIndex[hatchLoopIndex]].defined==false) {
-            if (hatchEdges[hatchLoopIndex]
-                    [hatchEdgeIndex[hatchLoopIndex]].type==1) {
-                switch (groupCode) {
-                case 10:
-                    hatchEdges[hatchLoopIndex]
-                    [hatchEdgeIndex[hatchLoopIndex]].x1
-                    = toReal(groupValue);
-                    break;
-                case 20:
-                    hatchEdges[hatchLoopIndex]
-                    [hatchEdgeIndex[hatchLoopIndex]].y1
-                    = toReal(groupValue);
-                    break;
-                case 11:
-                    hatchEdges[hatchLoopIndex]
-                    [hatchEdgeIndex[hatchLoopIndex]].x2
-                    = toReal(groupValue);
-                    break;
-                case 21:
-                    hatchEdges[hatchLoopIndex]
-                    [hatchEdgeIndex[hatchLoopIndex]].y2
-                    = toReal(groupValue);
-                    hatchEdges[hatchLoopIndex]
-                    [hatchEdgeIndex[hatchLoopIndex]].defined = true;
-                    break;
-                default:
-                    break;
-                }
-            }
-
-            if (hatchEdges[hatchLoopIndex]
-                    [hatchEdgeIndex[hatchLoopIndex]].type==2) {
-                switch (groupCode) {
-                case 10:
-                    hatchEdges[hatchLoopIndex]
-                    [hatchEdgeIndex[hatchLoopIndex]].cx
-                    = toReal(groupValue);
-                    break;
-                case 20:
-                    hatchEdges[hatchLoopIndex]
-                    [hatchEdgeIndex[hatchLoopIndex]].cy
-                    = toReal(groupValue);
-                    break;
-                case 40:
-                    hatchEdges[hatchLoopIndex]
-                    [hatchEdgeIndex[hatchLoopIndex]].radius
-                    = toReal(groupValue);
-                    break;
-                case 50:
-                    hatchEdges[hatchLoopIndex]
-                    [hatchEdgeIndex[hatchLoopIndex]].angle1
-                    = toReal(groupValue)/360.0*2*M_PI;
-                    break;
-                case 51:
-                    hatchEdges[hatchLoopIndex]
-                    [hatchEdgeIndex[hatchLoopIndex]].angle2
-                    = toReal(groupValue)/360.0*2*M_PI;
-                    break;
-                case 73:
-                    hatchEdges[hatchLoopIndex]
-                    [hatchEdgeIndex[hatchLoopIndex]].ccw
-                    = (bool)toInt(groupValue);
-                    hatchEdges[hatchLoopIndex]
-                    [hatchEdgeIndex[hatchLoopIndex]].defined = true;
-                    break;
-                default:
-                    break;
-                }
-            }
-        }
-        return true;
-    }
-
-    /*
-    // 2003/12/31: polyline hatches can be extremely slow and are rarely used
-    //
-       // Handle hatch edges for polyline boundaries
-       //  (group codes 10, 20, 42)
-       if (!dropEdges &&
-               hatchEdges!=NULL &&
-               hatchEdgeIndex!=NULL &&
-               hatchLoopIndex>=0 &&
-               hatchLoopIndex<maxHatchLoops &&
-               hatchEdges[hatchLoopIndex]!=NULL &&
-               //hatchEdgeIndex[hatchLoopIndex]>=0 &&
-               hatchEdgeIndex[hatchLoopIndex] <
-               maxHatchEdges[hatchLoopIndex] &&
-               ((atoi(values[92])&2)==2)) {        // a polyline
-
-           if (groupCode==10 || groupCode==20 ||
-                   groupCode==42) {
-
-               std::cout << "  found polyline edge data: " << groupCode << "\n";
-               std::cout << "     value: " << toReal(groupValue) << "\n";
-
-               static double lastX = 0.0;
-               static double lastY = 0.0;
-               static double lastB = 0.0;
-
-               if (firstPolylineStatus<2) {
-                   switch (groupCode) {
-                   case 10:
-                       firstPolylineStatus++;
-                       if (firstPolylineStatus==1) {
-                           lastX = toReal(groupValue);
-                           std::cout << "     firstX: " << lastX << "\n";
-                       }
-                       break;
-
-                   case 20:
-                       lastY = toReal(groupValue);
-                       std::cout << "     firstY: " << lastY << "\n";
-                       break;
-
-                   case 42:
-                       lastB = toReal(groupValue);
-                       break;
-
-                   default:
-                       break;
-                   }
-
-                   if (firstPolylineStatus!=2) {
-                       return true;
-                   }
-               }
-
-
-               switch (groupCode) {
-               case 10:
-                   hatchEdgeIndex[hatchLoopIndex]++;
-                   hatchEdges[hatchLoopIndex]
-                   [hatchEdgeIndex[hatchLoopIndex]].type = 1;
-                   hatchEdges[hatchLoopIndex]
-                   [hatchEdgeIndex[hatchLoopIndex]].x1
-                   = lastX;
-                   hatchEdges[hatchLoopIndex]
-                   [hatchEdgeIndex[hatchLoopIndex]].x2
-                   = lastX = toReal(groupValue);
-                   std::cout << "     X: " << lastX << "\n";
-                   break;
-               case 20:
-                   hatchEdges[hatchLoopIndex]
-                   [hatchEdgeIndex[hatchLoopIndex]].y1
-                   = lastY;
-                   hatchEdges[hatchLoopIndex]
-                   [hatchEdgeIndex[hatchLoopIndex]].y2
-                   = lastY = toReal(groupValue);
-                   std::cout << "     Y: " << lastY << "\n";
-                   break;
-                   / *
-                               case 42: {
-                   	// convert to arc:
-                   	double x1 = hatchEdges[hatchLoopIndex]
-                   		[hatchEdgeIndex[hatchLoopIndex]].x1;
-                   	double y1 = hatchEdges[hatchLoopIndex]
-                   		[hatchEdgeIndex[hatchLoopIndex]].y1;
-                   	double x2 = hatchEdges[hatchLoopIndex]
-                   		[hatchEdgeIndex[hatchLoopIndex]].x2;
-                   	double y2 = hatchEdges[hatchLoopIndex]
-                   		[hatchEdgeIndex[hatchLoopIndex]].y2;
-
-                   	double bulge = toReal(groupValue);
-
-                   	bool reversed = (bulge<0.0);
-                   	double alpha = atan(bulge)*4.0;
-                   	double radius;
-                             double cx;
-                             double cy;
-                   	double a1;
-                   	double a2;
-                             double mx = (x2+x1)/2.0;
-                             double my = (y2+y1)/2.0;
-                   	double dist = sqrt(pow(x2-x1,2) + pow(y2-y1,2)) / 2.0;
-
-                   	// alpha can't be 0.0 at this point
-                             radius = fabs(dist / sin(alpha/2.0));
-
-                             double wu = fabs(pow(radius, 2.0) - pow(dist, 2.0));
-                             double h = sqrt(wu);
-                   	double angle = acos((x2-x1) / dist);
-
-                             if (bulge>0.0) {
-                       		        angle+=M_PI/2.0;
-                             } else {
-                                 angle-=M_PI/2.0;
-                             }
-
-                             if (fabs(alpha)>M_PI) {
-                                 h*=-1.0;
-                             }
-
-                   	cx = mx + cos(angle) * h;
-                   	cy = my + sin(angle) * h;
-
-                   	a1 = hatchEdges[hatchLoopIndex]
-                                   	[hatchEdgeIndex[hatchLoopIndex]].type = 2;
-                                   hatchEdges[hatchLoopIndex]
-                                   	[hatchEdgeIndex[hatchLoopIndex]].ccw = (toReal(groupValue)>0.0);
-                                   hatchEdges[hatchLoopIndex]
-                                   	[hatchEdgeIndex[hatchLoopIndex]].cx = cx;
-                                   hatchEdges[hatchLoopIndex]
-                                   	[hatchEdgeIndex[hatchLoopIndex]].cy = cy;
-                                   hatchEdges[hatchLoopIndex]
-                                   	[hatchEdgeIndex[hatchLoopIndex]].radius = radius;
-                                   } break;
-                   	* /
-
-               default:
-                   break;
-               }
-           } else {
-               // end polyline boundary
-               dropEdges = true;
-           }
-
-           return true;
-       }
-    */
-
-    return false;
-}
-
-
-
-
-/**
- * Adds an text entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addText(DL_CreationInterface* creationInterface) {
-    DL_TextData d(
-        // insertion point
-        toReal(values[10], 0.0),
-        toReal(values[20], 0.0),
-        toReal(values[30], 0.0),
-        // alignment point
-        toReal(values[11], 0.0),
-        toReal(values[21], 0.0),
-        toReal(values[31], 0.0),
-        // height
-        toReal(values[40], 2.5),
-        // x scale
-        toReal(values[41], 1.0),
-        // generation flags
-        toInt(values[71], 0),
-        // h just
-        toInt(values[72], 0),
-        // v just
-        toInt(values[73], 0),
-        // text
-        values[1],
-        // style
-        values[7],
-        // angle
-        (toReal(values[50], 0.0)*2*M_PI)/360.0);
-
-    creationInterface->addText(d);
-}
-
-
-
-/**
- * Adds an attrib entity that was read from the file via the creation interface.
- * @todo add attrib instead of normal text
- */
-void DL_Dxf::addAttrib(DL_CreationInterface* creationInterface) {
-    DL_TextData d(
-        // insertion point
-        toReal(values[10], 0.0),
-        toReal(values[20], 0.0),
-        toReal(values[30], 0.0),
-        // alignment point
-        toReal(values[11], 0.0),
-        toReal(values[21], 0.0),
-        toReal(values[31], 0.0),
-        // height
-        toReal(values[40], 2.5),
-        // x scale
-        toReal(values[41], 1.0),
-        // generation flags
-        toInt(values[71], 0),
-        // h just
-        toInt(values[72], 0),
-        // v just
-        toInt(values[74], 0),
-        // text
-        values[1],
-        // style
-        values[7],
-        // angle
-        (toReal(values[50], 0.0)*2*M_PI)/360.0);
-
-    creationInterface->addText(d);
-}
-
-
-
-/**
- * @return dimension data from current values.
- */
-DL_DimensionData DL_Dxf::getDimData() {
-    // generic dimension data:
-    return DL_DimensionData(
-               // def point
-               toReal(values[10], 0.0),
-               toReal(values[20], 0.0),
-               toReal(values[30], 0.0),
-               // text middle point
-               toReal(values[11], 0.0),
-               toReal(values[21], 0.0),
-               toReal(values[31], 0.0),
-               // type
-               toInt(values[70], 0),
-               // attachment point
-               toInt(values[71], 5),
-               // line sp. style
-               toInt(values[72], 1),
-               // line sp. factor
-               toReal(values[41], 1.0),
-               // text
-               values[1],
-               // style
-               values[3],
-               // angle
-               toReal(values[53], 0.0));
-}
-
-
-
-/**
- * Adds a linear dimension entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addDimLinear(DL_CreationInterface* creationInterface) {
-    DL_DimensionData d = getDimData();
-
-    // horizontal / vertical / rotated dimension:
-    DL_DimLinearData dl(
-        // definition point 1
-        toReal(values[13], 0.0),
-        toReal(values[23], 0.0),
-        toReal(values[33], 0.0),
-        // definition point 2
-        toReal(values[14], 0.0),
-        toReal(values[24], 0.0),
-        toReal(values[34], 0.0),
-        // angle
-        toReal(values[50], 0.0),
-        // oblique
-        toReal(values[52], 0.0));
-    creationInterface->addDimLinear(d, dl);
-}
-
-
-
-/**
- * Adds an aligned dimension entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addDimAligned(DL_CreationInterface* creationInterface) {
-    DL_DimensionData d = getDimData();
-
-    // aligned dimension:
-    DL_DimAlignedData da(
-        // extension point 1
-        toReal(values[13], 0.0),
-        toReal(values[23], 0.0),
-        toReal(values[33], 0.0),
-        // extension point 2
-        toReal(values[14], 0.0),
-        toReal(values[24], 0.0),
-        toReal(values[34], 0.0));
-    creationInterface->addDimAlign(d, da);
-}
-
-
-
-/**
- * Adds a radial dimension entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addDimRadial(DL_CreationInterface* creationInterface) {
-    DL_DimensionData d = getDimData();
-
-    DL_DimRadialData dr(
-        // definition point
-        toReal(values[15], 0.0),
-        toReal(values[25], 0.0),
-        toReal(values[35], 0.0),
-        // leader length:
-        toReal(values[40], 0.0));
-    creationInterface->addDimRadial(d, dr);
-}
-
-
-
-/**
- * Adds a diametric dimension entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addDimDiametric(DL_CreationInterface* creationInterface) {
-    DL_DimensionData d = getDimData();
-
-    // diametric dimension:
-    DL_DimDiametricData dr(
-        // definition point
-        toReal(values[15], 0.0),
-        toReal(values[25], 0.0),
-        toReal(values[35], 0.0),
-        // leader length:
-        toReal(values[40], 0.0));
-    creationInterface->addDimDiametric(d, dr);
-}
-
-
-
-/**
- * Adds an angular dimension entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addDimAngular(DL_CreationInterface* creationInterface) {
-    DL_DimensionData d = getDimData();
-
-    // angular dimension:
-    DL_DimAngularData da(
-        // definition point 1
-        toReal(values[13], 0.0),
-        toReal(values[23], 0.0),
-        toReal(values[33], 0.0),
-        // definition point 2
-        toReal(values[14], 0.0),
-        toReal(values[24], 0.0),
-        toReal(values[34], 0.0),
-        // definition point 3
-        toReal(values[15], 0.0),
-        toReal(values[25], 0.0),
-        toReal(values[35], 0.0),
-        // definition point 4
-        toReal(values[16], 0.0),
-        toReal(values[26], 0.0),
-        toReal(values[36], 0.0));
-    creationInterface->addDimAngular(d, da);
-}
-
-
-/**
- * Adds an angular dimension entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addDimAngular3P(DL_CreationInterface* creationInterface) {
-    DL_DimensionData d = getDimData();
-
-    // angular dimension (3P):
-    DL_DimAngular3PData da(
-        // definition point 1
-        toReal(values[13], 0.0),
-        toReal(values[23], 0.0),
-        toReal(values[33], 0.0),
-        // definition point 2
-        toReal(values[14], 0.0),
-        toReal(values[24], 0.0),
-        toReal(values[34], 0.0),
-        // definition point 3
-        toReal(values[15], 0.0),
-        toReal(values[25], 0.0),
-        toReal(values[35], 0.0));
-    creationInterface->addDimAngular3P(d, da);
-}
-
-
-
-/**
- * Adds a leader entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addLeader(DL_CreationInterface* creationInterface) {
-    // leader (arrow)
-    DL_LeaderData le(
-        // arrow head flag
-        toInt(values[71], 1),
-        // leader path type
-        toInt(values[72], 0),
-        // Leader creation flag
-        toInt(values[73], 3),
-        // Hookline direction flag
-        toInt(values[74], 1),
-        // Hookline flag
-        toInt(values[75], 0),
-        // Text annotation height
-        toReal(values[40], 1.0),
-        // Text annotation width
-        toReal(values[41], 1.0),
-        // Number of vertices in leader
-        toInt(values[76], 0)
-    );
-    creationInterface->addLeader(le);
-
-    for (int i=0; i<maxLeaderVertices; i++) {
-        DL_LeaderVertexData d(leaderVertices[i*3],
-                              leaderVertices[i*3+1],
-                              leaderVertices[i*3+2]);
-
-        creationInterface->addLeaderVertex(d);
-    }
-}
-
-
-
-/**
- * Adds a hatch entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addHatch(DL_CreationInterface* creationInterface) {
-    DL_HatchData hd(toInt(values[91], 1),
-                    toInt(values[70], 0),
-                    toReal(values[41], 1.0),
-                    toReal(values[52], 0.0),
-                    values[2]);
-    creationInterface->addHatch(hd);
-
-    for (int l=0; l<maxHatchLoops; l++) {
-        DL_HatchLoopData ld(maxHatchEdges[l]);
-        creationInterface->addHatchLoop(ld);
-        for (int b=0; b<maxHatchEdges[l]; b++) {
-            creationInterface->addHatchEdge(hatchEdges[l][b]);
-        }
-    }
-    creationInterface->endEntity();
-    currentEntity = DL_UNKNOWN;
-}
-
-
-
-/**
- * Adds an image entity that was read from the file via the creation interface.
- */
-void DL_Dxf::addImage(DL_CreationInterface* creationInterface) {
-    DL_ImageData id(// pass ref insead of name we don't have yet
-        values[340],
-        // ins point:
-        toReal(values[10], 0.0),
-        toReal(values[20], 0.0),
-        toReal(values[30], 0.0),
-        // u vector:
-        toReal(values[11], 1.0),
-        toReal(values[21], 0.0),
-        toReal(values[31], 0.0),
-        // v vector:
-        toReal(values[12], 0.0),
-        toReal(values[22], 1.0),
-        toReal(values[32], 0.0),
-        // image size (pixel):
-        toInt(values[13], 1),
-        toInt(values[23], 1),
-        // brightness, contrast, fade
-        toInt(values[281], 50),
-        toInt(values[282], 50),
-        toInt(values[283], 0));
-
-    creationInterface->addImage(id);
-    creationInterface->endEntity();
-    currentEntity = DL_UNKNOWN;
-}
-
-
-
-/**
- * Adds an image definition that was read from the file via the creation interface.
- */
-void DL_Dxf::addImageDef(DL_CreationInterface* creationInterface) {
-    DL_ImageDefData id(// handle
-        values[5],
-        values[1]);
-
-    creationInterface->linkImage(id);
-    creationInterface->endEntity();
-    currentEntity = DL_UNKNOWN;
-}
-
-
-
-/**
- * Ends some special entities like hatches or old style polylines.
- */
-void DL_Dxf::endEntity(DL_CreationInterface* creationInterface) {
-	creationInterface->endEntity();
-}
-
-
-/**
- * Ends a sequence and notifies the creation interface.
- */
-void DL_Dxf::endSequence(DL_CreationInterface* creationInterface) {
-    creationInterface->endSequence();
-}
-
-
-/**
- * Converts the given string into an int.
- * ok is set to false if there was an error.
- */
-int DL_Dxf::stringToInt(const char* s, bool* ok) {
-    if (ok!=NULL) {
-        // check string:
-        *ok = true;
-        int i=0;
-        bool dot = false;
-        do {
-            if (s[i]=='\0') {
-                break;
-            } else if (s[i]=='.') {
-                if (dot==true) {
-                    //std::cerr << "two dots\n";
-                    *ok = false;
-                } else {
-                    dot = true;
-                }
-            } else if (s[i]<'0' || s[i]>'9') {
-                //std::cerr << "NaN: '" << s[i] << "'\n";
-                *ok = false;
-            }
-            i++;
-        } while(s[i]!='\0' && *ok==true);
-    }
-
-    return atoi(s);
-}
-
-
-/**
- * @brief Opens the given file for writing and returns a pointer
- * to the dxf writer. This pointer needs to be passed on to other
- * writing functions.
- *
- * @param file Full path of the file to open.
- *
- * @return Pointer to an ascii dxf writer object.
- */
-DL_WriterA* DL_Dxf::out(const char* file, DL_Codes::version version) {
-    char* f = new char[strlen(file)+1];
-    strcpy(f, file);
-    this->version = version;
-
-    DL_WriterA* dw = new DL_WriterA(f, version);
-    if (dw->openFailed()) {
-        delete dw;
-        return NULL;
-    } else {
-        return dw;
-    }
-}
-
-
-
-/**
- * @brief Writes a DXF header to the file currently opened 
- * by the given DXF writer object.
- */
-void DL_Dxf::writeHeader(DL_WriterA& dw) {
-    dw.comment("dxflib " DL_VERSION);
-    dw.sectionHeader();
-
-    dw.dxfString(9, "$ACADVER");
-    switch (version) {
-    case DL_Codes::AC1009:
-        dw.dxfString(1, "AC1009");
-        break;
-    case DL_Codes::AC1012:
-        dw.dxfString(1, "AC1012");
-        break;
-    case DL_Codes::AC1014:
-        dw.dxfString(1, "AC1014");
-        break;
-    case DL_Codes::AC1015:
-        dw.dxfString(1, "AC1015");
-        break;
-    }
-
-    // Newer version require that (otherwise a*cad crashes..)
-    if (version==VER_2000) {
-        dw.dxfString(9, "$HANDSEED");
-        dw.dxfHex(5, 0xFFFF);
-    }
-
-    //dw.sectionEnd();
-}
-
-
-
-
-/**
- * Writes a point entity to the file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writePoint(DL_WriterA& dw,
-                        const DL_PointData& data,
-                        const DL_Attributes& attrib) {
-    dw.entity("POINT");
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-        dw.dxfString(100, "AcDbPoint");
-    }
-    dw.entityAttributes(attrib);
-    dw.coord(POINT_COORD_CODE, data.x, data.y);
-}
-
-
-
-/**
- * Writes a line entity to the file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeLine(DL_WriterA& dw,
-                       const DL_LineData& data,
-                       const DL_Attributes& attrib) {
-    dw.entity("LINE");
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-        dw.dxfString(100, "AcDbLine");
-    }
-    dw.entityAttributes(attrib);
-    dw.coord(LINE_START_CODE, data.x1, data.y1);
-    dw.coord(LINE_END_CODE, data.x2, data.y2);
-}
-
-
-
-/**
- * Writes a polyline entity to the file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- * @see writeVertex
- */
-void DL_Dxf::writePolyline(DL_WriterA& dw,
-                           const DL_PolylineData& data,
-                           const DL_Attributes& attrib) {
-    if (version==VER_2000) {
-        dw.entity("LWPOLYLINE");
-        dw.entityAttributes(attrib);
-        dw.dxfString(100, "AcDbEntity");
-        dw.dxfString(100, "AcDbPolyline");
-        dw.dxfInt(90, (int)data.number);
-        dw.dxfInt(70, data.flags);
-    } else {
-        dw.entity("POLYLINE");
-        dw.entityAttributes(attrib);
-		polylineLayer = attrib.getLayer();
-        dw.dxfInt(66, 1);
-        dw.dxfInt(70, data.flags);
-        dw.coord(VERTEX_COORD_CODE, 0.0, 0.0);
-    }
-}
-
-
-
-/**
- * Writes a single vertex of a polyline to the file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeVertex(DL_WriterA& dw,
-                         const DL_VertexData& data) {
-
-
-    if (version==VER_2000) {
-        dw.dxfReal(10, data.x);
-        dw.dxfReal(20, data.y);
-        if (fabs(data.bulge)>1.0e-10) {
-            dw.dxfReal(42, data.bulge);
-        }
-    } else {
-        dw.entity("VERTEX");
-        //dw.entityAttributes(attrib);
-    	dw.dxfString(8, polylineLayer);
-        dw.coord(VERTEX_COORD_CODE, data.x, data.y);
-        if (fabs(data.bulge)>1.0e-10) {
-            dw.dxfReal(42, data.bulge);
-        }
-    }
-}
-
-    
-	
-/**
- * Writes the polyline end. Only needed for DXF R12.
- */
-void DL_Dxf::writePolylineEnd(DL_WriterA& dw) {
-    if (version==VER_2000) {
-    } else {
-        dw.entity("SEQEND");
-    }
-}
-
-
-/**
- * Writes a spline entity to the file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- * @see writeControlPoint
- */
-void DL_Dxf::writeSpline(DL_WriterA& dw,
-                         const DL_SplineData& data,
-                         const DL_Attributes& attrib) {
-
-    dw.entity("SPLINE");
-    dw.entityAttributes(attrib);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-        dw.dxfString(100, "AcDbSpline");
-    }
-    dw.dxfInt(70, data.flags);
-    dw.dxfInt(71, data.degree);
-    dw.dxfInt(72, data.nKnots);            // number of knots
-    dw.dxfInt(73, data.nControl);          // number of control points
-    dw.dxfInt(74, 0);                      // number of fit points
-}
-
-
-
-/**
- * Writes a single control point of a spline to the file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeControlPoint(DL_WriterA& dw,
-                               const DL_ControlPointData& data) {
-
-    dw.dxfReal(10, data.x);
-    dw.dxfReal(20, data.y);
-    dw.dxfReal(30, data.z);
-}
-
-
-
-/**
- * Writes a single knot of a spline to the file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeKnot(DL_WriterA& dw,
-                       const DL_KnotData& data) {
-
-    dw.dxfReal(40, data.k);
-}
-
-
-
-/**
- * Writes a circle entity to the file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeCircle(DL_WriterA& dw,
-                         const DL_CircleData& data,
-                         const DL_Attributes& attrib) {
-    dw.entity("CIRCLE");
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-        dw.dxfString(100, "AcDbCircle");
-    }
-    dw.entityAttributes(attrib);
-    dw.coord(10, data.cx, data.cy);
-    dw.dxfReal(40, data.radius);
-}
-
-
-
-/**
- * Writes an arc entity to the file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeArc(DL_WriterA& dw,
-                      const DL_ArcData& data,
-                      const DL_Attributes& attrib) {
-    dw.entity("ARC");
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-    }
-    dw.entityAttributes(attrib);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbCircle");
-    }
-    dw.coord(10, data.cx, data.cy);
-    dw.dxfReal(40, data.radius);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbArc");
-    }
-    dw.dxfReal(50, data.angle1);
-    dw.dxfReal(51, data.angle2);
-}
-
-
-
-/**
- * Writes an ellipse entity to the file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeEllipse(DL_WriterA& dw,
-                          const DL_EllipseData& data,
-                          const DL_Attributes& attrib) {
-
-    if (version>VER_R12) {
-        dw.entity("ELLIPSE");
-        if (version==VER_2000) {
-            dw.dxfString(100, "AcDbEntity");
-            dw.dxfString(100, "AcDbEllipse");
-        }
-        dw.entityAttributes(attrib);
-        dw.coord(10, data.cx, data.cy);
-        dw.coord(11, data.mx, data.my);
-        dw.dxfReal(40, data.ratio);
-        dw.dxfReal(41, data.angle1);
-        dw.dxfReal(42, data.angle2);
-    }
-}
-
-
-
-/**
- * Writes an insert to the file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeInsert(DL_WriterA& dw,
-                         const DL_InsertData& data,
-                         const DL_Attributes& attrib) {
-
-    if (data.name.empty()) {
-        std::cerr << "DL_Dxf::writeInsert: "
-        << "Block name must not be empty\n";
-        return;
-    }
-
-    dw.entity("INSERT");
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-        dw.dxfString(100, "AcDbBlockReference");
-    }
-    dw.entityAttributes(attrib);
-    dw.dxfString(2, data.name);
-    dw.dxfReal(10, data.ipx);
-    dw.dxfReal(20, data.ipy);
-    dw.dxfReal(30, 0.0);
-    if (data.sx!=1.0 || data.sy!=1.0) {
-        dw.dxfReal(41, data.sx);
-        dw.dxfReal(42, data.sy);
-        dw.dxfReal(43, 1.0);
-    }
-    if (data.angle!=0.0) {
-        dw.dxfReal(50, data.angle);
-    }
-    if (data.cols!=1 || data.rows!=1) {
-        dw.dxfInt(70, data.cols);
-        dw.dxfInt(71, data.rows);
-    }
-    if (data.colSp!=0.0 || data.rowSp!=0.0) {
-        dw.dxfReal(44, data.colSp);
-        dw.dxfReal(45, data.rowSp);
-    }
-
-}
-
-
-
-/**
- * Writes a multi text entity to the file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeMText(DL_WriterA& dw,
-                        const DL_MTextData& data,
-                        const DL_Attributes& attrib) {
-
-    dw.entity("MTEXT");
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-        dw.dxfString(100, "AcDbMText");
-    }
-    dw.entityAttributes(attrib);
-    dw.dxfReal(10, data.ipx);
-    dw.dxfReal(20, data.ipy);
-    dw.dxfReal(30, 0.0);
-    dw.dxfReal(40, data.height);
-    dw.dxfReal(41, data.width);
-
-    dw.dxfInt(71, data.attachmentPoint);
-    dw.dxfInt(72, data.drawingDirection);
-
-    // Creare text chunks of 250 characters each:
-    int length = data.text.length();
-    char chunk[251];
-    int i;
-    for (i=250; i<length; i+=250) {
-        strncpy(chunk, &data.text.c_str()[i-250], 250);
-        chunk[250]='\0';
-        dw.dxfString(3, chunk);
-    }
-    strncpy(chunk, &data.text.c_str()[i-250], 250);
-    chunk[250]='\0';
-    dw.dxfString(1, chunk);
-
-    dw.dxfString(7, data.style);
-
-    // since dxflib 2.0.2.1: degrees not rad (error in autodesk dxf doc)
-    dw.dxfReal(50, data.angle/(2.0*M_PI)*360.0);
-
-    dw.dxfInt(73, data.lineSpacingStyle);
-    dw.dxfReal(44, data.lineSpacingFactor);
-}
-
-
-
-/**
- * Writes a text entity to the file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeText(DL_WriterA& dw,
-                       const DL_TextData& data,
-                       const DL_Attributes& attrib) {
-
-    dw.entity("TEXT");
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-        dw.dxfString(100, "AcDbText");
-    }
-    dw.entityAttributes(attrib);
-    dw.dxfReal(10, data.ipx);
-    dw.dxfReal(20, data.ipy);
-    dw.dxfReal(30, 0.0);
-    dw.dxfReal(40, data.height);
-    dw.dxfString(1, data.text);
-    dw.dxfReal(50, data.angle/(2*M_PI)*360.0);
-    dw.dxfReal(41, data.xScaleFactor);
-    dw.dxfString(7, data.style);
-
-    dw.dxfInt(71, data.textGenerationFlags);
-    dw.dxfInt(72, data.hJustification);
-
-    dw.dxfReal(11, data.apx);
-    dw.dxfReal(21, data.apy);
-    dw.dxfReal(31, 0.0);
-
-    dw.dxfInt(73, data.vJustification);
-}
-
-
-/**
- * Writes an aligned dimension entity to the file.
- *
- * @param dw DXF writer
- * @param data Generic dimension data for from the file
- * @param data Specific aligned dimension data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeDimAligned(DL_WriterA& dw,
-                             const DL_DimensionData& data,
-                             const DL_DimAlignedData& edata,
-                             const DL_Attributes& attrib) {
-
-    dw.entity("DIMENSION");
-
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-    }
-    dw.entityAttributes(attrib);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbDimension");
-    }
-
-    dw.dxfReal(10, data.dpx);
-    dw.dxfReal(20, data.dpy);
-    dw.dxfReal(30, 0.0);
-
-    dw.dxfReal(11, data.mpx);
-    dw.dxfReal(21, data.mpy);
-    dw.dxfReal(31, 0.0);
-
-    dw.dxfInt(70, 1);
-    if (version>VER_R12) {
-        dw.dxfInt(71, data.attachmentPoint);
-        dw.dxfInt(72, data.lineSpacingStyle); // opt
-        dw.dxfReal(41, data.lineSpacingFactor); // opt
-    }
-
-    dw.dxfReal(42, data.angle);
-
-    dw.dxfString(1, data.text);   // opt
-    //dw.dxfString(3, data.style);
-    dw.dxfString(3, "Standard");
-
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbAlignedDimension");
-    }
-
-    dw.dxfReal(13, edata.epx1);
-    dw.dxfReal(23, edata.epy1);
-    dw.dxfReal(33, 0.0);
-
-    dw.dxfReal(14, edata.epx2);
-    dw.dxfReal(24, edata.epy2);
-    dw.dxfReal(34, 0.0);
-}
-
-
-
-/**
- * Writes a linear dimension entity to the file.
- *
- * @param dw DXF writer
- * @param data Generic dimension data for from the file
- * @param data Specific linear dimension data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeDimLinear(DL_WriterA& dw,
-                            const DL_DimensionData& data,
-                            const DL_DimLinearData& edata,
-                            const DL_Attributes& attrib) {
-
-    dw.entity("DIMENSION");
-
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-    }
-    dw.entityAttributes(attrib);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbDimension");
-    }
-
-    dw.dxfReal(10, data.dpx);
-    dw.dxfReal(20, data.dpy);
-    dw.dxfReal(30, 0.0);
-
-    dw.dxfReal(11, data.mpx);
-    dw.dxfReal(21, data.mpy);
-    dw.dxfReal(31, 0.0);
-
-    dw.dxfInt(70, 0);
-    if (version>VER_R12) {
-        dw.dxfInt(71, data.attachmentPoint);
-        dw.dxfInt(72, data.lineSpacingStyle); // opt
-        dw.dxfReal(41, data.lineSpacingFactor); // opt
-    }
-
-    dw.dxfReal(42, data.angle);
-
-    dw.dxfString(1, data.text);   // opt
-    //dw.dxfString(3, data.style);
-    dw.dxfString(3, "Standard");
-
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbAlignedDimension");
-    }
-
-    dw.dxfReal(13, edata.dpx1);
-    dw.dxfReal(23, edata.dpy1);
-    dw.dxfReal(33, 0.0);
-
-    dw.dxfReal(14, edata.dpx2);
-    dw.dxfReal(24, edata.dpy2);
-    dw.dxfReal(34, 0.0);
-
-    dw.dxfReal(50, edata.angle/(2.0*M_PI)*360.0);
-
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbRotatedDimension");
-        /*
-        dw.dxfString(1001, "ACAD");
-        dw.dxfString(1000, "DSTYLE");
-        dw.dxfString(1002, "{");
-        dw.dxfInt(1070, 340);
-        dw.dxfInt(1005, 11);
-        dw.dxfString(1002, "}");
-        */
-    }
-}
-
-
-
-/**
- * Writes a radial dimension entity to the file.
- *
- * @param dw DXF writer
- * @param data Generic dimension data for from the file
- * @param data Specific radial dimension data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeDimRadial(DL_WriterA& dw,
-                            const DL_DimensionData& data,
-                            const DL_DimRadialData& edata,
-                            const DL_Attributes& attrib) {
-
-    dw.entity("DIMENSION");
-
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-    }
-    dw.entityAttributes(attrib);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbDimension");
-    }
-
-    dw.dxfReal(10, data.dpx);
-    dw.dxfReal(20, data.dpy);
-    dw.dxfReal(30, 0.0);
-
-    dw.dxfReal(11, data.mpx);
-    dw.dxfReal(21, data.mpy);
-    dw.dxfReal(31, 0.0);
-
-    dw.dxfInt(70, 4);
-    if (version>VER_R12) {
-        dw.dxfInt(71, data.attachmentPoint);
-        dw.dxfInt(72, data.lineSpacingStyle); // opt
-        dw.dxfReal(41, data.lineSpacingFactor); // opt
-    }
-
-    dw.dxfReal(42, data.angle);
-
-    dw.dxfString(1, data.text);   // opt
-    //dw.dxfString(3, data.style);
-    dw.dxfString(3, "Standard");
-
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbRadialDimension");
-    }
-
-    dw.dxfReal(15, edata.dpx);
-    dw.dxfReal(25, edata.dpy);
-    dw.dxfReal(35, 0.0);
-
-    dw.dxfReal(40, edata.leader);
-}
-
-
-
-/**
- * Writes a diametric dimension entity to the file.
- *
- * @param dw DXF writer
- * @param data Generic dimension data for from the file
- * @param data Specific diametric dimension data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeDimDiametric(DL_WriterA& dw,
-                               const DL_DimensionData& data,
-                               const DL_DimDiametricData& edata,
-                               const DL_Attributes& attrib) {
-
-    dw.entity("DIMENSION");
-
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-    }
-    dw.entityAttributes(attrib);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbDimension");
-    }
-
-    dw.dxfReal(10, data.dpx);
-    dw.dxfReal(20, data.dpy);
-    dw.dxfReal(30, 0.0);
-
-    dw.dxfReal(11, data.mpx);
-    dw.dxfReal(21, data.mpy);
-    dw.dxfReal(31, 0.0);
-
-    dw.dxfInt(70, 3);
-    if (version>VER_R12) {
-        dw.dxfInt(71, data.attachmentPoint);
-        dw.dxfInt(72, data.lineSpacingStyle); // opt
-        dw.dxfReal(41, data.lineSpacingFactor); // opt
-    }
-
-    dw.dxfReal(42, data.angle);
-
-    dw.dxfString(1, data.text);   // opt
-    //dw.dxfString(3, data.style);
-    dw.dxfString(3, "Standard");
-
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbDiametricDimension");
-    }
-
-    dw.dxfReal(15, edata.dpx);
-    dw.dxfReal(25, edata.dpy);
-    dw.dxfReal(35, 0.0);
-
-    dw.dxfReal(40, edata.leader);
-}
-
-
-
-/**
- * Writes an angular dimension entity to the file.
- *
- * @param dw DXF writer
- * @param data Generic dimension data for from the file
- * @param data Specific angular dimension data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeDimAngular(DL_WriterA& dw,
-                             const DL_DimensionData& data,
-                             const DL_DimAngularData& edata,
-                             const DL_Attributes& attrib) {
-
-    dw.entity("DIMENSION");
-
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-    }
-    dw.entityAttributes(attrib);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbDimension");
-    }
-
-    dw.dxfReal(10, data.dpx);
-    dw.dxfReal(20, data.dpy);
-    dw.dxfReal(30, 0.0);
-
-    dw.dxfReal(11, data.mpx);
-    dw.dxfReal(21, data.mpy);
-    dw.dxfReal(31, 0.0);
-
-    dw.dxfInt(70, 2);
-    if (version>VER_R12) {
-        dw.dxfInt(71, data.attachmentPoint);
-        dw.dxfInt(72, data.lineSpacingStyle); // opt
-        dw.dxfReal(41, data.lineSpacingFactor); // opt
-    }
-
-    dw.dxfReal(42, data.angle);
-
-    dw.dxfString(1, data.text);   // opt
-    //dw.dxfString(3, data.style);
-    dw.dxfString(3, "Standard");
-
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDb2LineAngularDimension");
-    }
-
-    dw.dxfReal(13, edata.dpx1);
-    dw.dxfReal(23, edata.dpy1);
-    dw.dxfReal(33, 0.0);
-
-    dw.dxfReal(14, edata.dpx2);
-    dw.dxfReal(24, edata.dpy2);
-    dw.dxfReal(34, 0.0);
-
-    dw.dxfReal(15, edata.dpx3);
-    dw.dxfReal(25, edata.dpy3);
-    dw.dxfReal(35, 0.0);
-
-    dw.dxfReal(16, edata.dpx4);
-    dw.dxfReal(26, edata.dpy4);
-    dw.dxfReal(36, 0.0);
-}
-
-
-
-/**
- * Writes an angular dimension entity (3 points version) to the file.
- *
- * @param dw DXF writer
- * @param data Generic dimension data for from the file
- * @param data Specific angular dimension data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeDimAngular3P(DL_WriterA& dw,
-                               const DL_DimensionData& data,
-                               const DL_DimAngular3PData& edata,
-                               const DL_Attributes& attrib) {
-
-    dw.entity("DIMENSION");
-
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-    }
-    dw.entityAttributes(attrib);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbDimension");
-    }
-
-    dw.dxfReal(10, data.dpx);
-    dw.dxfReal(20, data.dpy);
-    dw.dxfReal(30, 0.0);
-
-    dw.dxfReal(11, data.mpx);
-    dw.dxfReal(21, data.mpy);
-    dw.dxfReal(31, 0.0);
-
-    dw.dxfInt(70, 5);
-    if (version>VER_R12) {
-        dw.dxfInt(71, data.attachmentPoint);
-        dw.dxfInt(72, data.lineSpacingStyle); // opt
-        dw.dxfReal(41, data.lineSpacingFactor); // opt
-    }
-
-    dw.dxfReal(42, data.angle);
-
-    dw.dxfString(1, data.text);   // opt
-    //dw.dxfString(3, data.style);
-    dw.dxfString(3, "Standard");
-
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDb3PointAngularDimension");
-    }
-
-    dw.dxfReal(13, edata.dpx1);
-    dw.dxfReal(23, edata.dpy1);
-    dw.dxfReal(33, 0.0);
-
-    dw.dxfReal(14, edata.dpx2);
-    dw.dxfReal(24, edata.dpy2);
-    dw.dxfReal(34, 0.0);
-
-    dw.dxfReal(15, edata.dpx3);
-    dw.dxfReal(25, edata.dpy3);
-    dw.dxfReal(35, 0.0);
-}
-
-
-
-/**
- * Writes a leader entity to the file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- * @see writeVertex
- */
-void DL_Dxf::writeLeader(DL_WriterA& dw,
-                         const DL_LeaderData& data,
-                         const DL_Attributes& attrib) {
-    if (version>VER_R12) {
-        dw.entity("LEADER");
-        dw.entityAttributes(attrib);
-        if (version==VER_2000) {
-            dw.dxfString(100, "AcDbEntity");
-            dw.dxfString(100, "AcDbLeader");
-        }
-        dw.dxfString(3, "Standard");
-        dw.dxfInt(71, data.arrowHeadFlag);
-        dw.dxfInt(72, data.leaderPathType);
-        dw.dxfInt(73, data.leaderCreationFlag);
-        dw.dxfInt(74, data.hooklineDirectionFlag);
-        dw.dxfInt(75, data.hooklineFlag);
-        dw.dxfReal(40, data.textAnnotationHeight);
-        dw.dxfReal(41, data.textAnnotationWidth);
-        dw.dxfInt(76, data.number);
-    }
-}
-
-
-
-/**
- * Writes a single vertex of a leader to the file.
- *
- * @param dw DXF writer
- * @param data Entity data
- */
-void DL_Dxf::writeLeaderVertex(DL_WriterA& dw,
-                               const DL_LeaderVertexData& data) {
-    if (version>VER_R12) {
-        dw.dxfReal(10, data.x);
-        dw.dxfReal(20, data.y);
-    }
-}
-
-
-
-/**
- * Writes the beginning of a hatch entity to the file.
- * This must be followed by one or more writeHatchLoop()
- * calls and a writeHatch2() call.
- *
- * @param dw DXF writer
- * @param data Entity data.
- * @param attrib Attributes
- */
-void DL_Dxf::writeHatch1(DL_WriterA& dw,
-                         const DL_HatchData& data,
-                         const DL_Attributes& attrib) {
-
-    dw.entity("HATCH");
-    dw.entityAttributes(attrib);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-        dw.dxfString(100, "AcDbHatch");
-    }
-    dw.dxfReal(10, 0.0);             // elevation
-    dw.dxfReal(20, 0.0);
-    dw.dxfReal(30, 0.0);
-    dw.dxfReal(210, 0.0);             // extrusion dir.
-    dw.dxfReal(220, 0.0);
-    dw.dxfReal(230, 1.0);
-    if (data.solid==false) {
-        dw.dxfString(2, data.pattern);
-    } else {
-        dw.dxfString(2, "SOLID");
-    }
-    dw.dxfInt(70, (int)data.solid);
-    dw.dxfInt(71, 0);                // associative
-    dw.dxfInt(91, data.numLoops);
-}
-
-
-
-/**
- * Writes the end of a hatch entity to the file.
- *
- * @param dw DXF writer
- * @param data Entity data.
- * @param attrib Attributes
- */
-void DL_Dxf::writeHatch2(DL_WriterA& dw,
-                         const DL_HatchData& data,
-                         const DL_Attributes& /*attrib*/) {
-
-    dw.dxfInt(75, 0);                // odd parity
-    dw.dxfInt(76, 1);                // pattern type
-    if (data.solid==false) {
-        dw.dxfReal(52, data.angle);
-        dw.dxfReal(41, data.scale);
-        dw.dxfInt(77, 0);            // not double
-        //dw.dxfInt(78, 0);
-        dw.dxfInt(78, 1);
-        dw.dxfReal(53, 45.0);
-        dw.dxfReal(43, 0.0);
-        dw.dxfReal(44, 0.0);
-        dw.dxfReal(45, -0.0883883476483184);
-        dw.dxfReal(46, 0.0883883476483185);
-        dw.dxfInt(79, 0);
-    }
-    dw.dxfInt(98, 0);
-}
-
-
-
-/**
- * Writes the beginning of a hatch loop to the file. This
- * must happen after writing the beginning of a hatch entity.
- *
- * @param dw DXF writer
- * @param data Entity data.
- * @param attrib Attributes
- */
-void DL_Dxf::writeHatchLoop1(DL_WriterA& dw,
-                             const DL_HatchLoopData& data) {
-
-    dw.dxfInt(92, 1);
-    dw.dxfInt(93, data.numEdges);
-    //dw.dxfInt(97, 0);
-}
-
-
-
-/**
- * Writes the end of a hatch loop to the file.
- *
- * @param dw DXF writer
- * @param data Entity data.
- * @param attrib Attributes
- */
-void DL_Dxf::writeHatchLoop2(DL_WriterA& dw,
-                             const DL_HatchLoopData& /*data*/) {
-
-    dw.dxfInt(97, 0);
-}
-
-
-/**
- * Writes the beginning of a hatch entity to the file.
- *
- * @param dw DXF writer
- * @param data Entity data.
- * @param attrib Attributes
- */
-void DL_Dxf::writeHatchEdge(DL_WriterA& dw,
-                            const DL_HatchEdgeData& data) {
-
-    dw.dxfInt(72, data.type);
-
-    switch (data.type) {
-    case 1:
-        dw.dxfReal(10, data.x1);
-        dw.dxfReal(20, data.y1);
-        dw.dxfReal(11, data.x2);
-        dw.dxfReal(21, data.y2);
-        break;
-    case 2:
-        dw.dxfReal(10, data.cx);
-        dw.dxfReal(20, data.cy);
-        dw.dxfReal(40, data.radius);
-        dw.dxfReal(50, data.angle1/(2*M_PI)*360.0);
-        dw.dxfReal(51, data.angle2/(2*M_PI)*360.0);
-        dw.dxfInt(73, (int)(data.ccw));
-        break;
-    default:
-        break;
-    }
-}
-
-
-
-/**
- * Writes an image entity.
- *
- * @return IMAGEDEF handle. Needed for the IMAGEDEF counterpart.
- */
-int DL_Dxf::writeImage(DL_WriterA& dw,
-                       const DL_ImageData& data,
-                       const DL_Attributes& attrib) {
-
-    /*if (data.file.empty()) {
-        std::cerr << "DL_Dxf::writeImage: "
-        << "Image file must not be empty\n";
-        return;
-}*/
-
-    dw.entity("IMAGE");
-
-    dw.entityAttributes(attrib);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbEntity");
-        dw.dxfString(100, "AcDbRasterImage");
-        dw.dxfInt(90, 0);
-    }
-    // insertion point
-    dw.dxfReal(10, data.ipx);
-    dw.dxfReal(20, data.ipy);
-    dw.dxfReal(30, 0.0);
-
-    // vector along bottom side (1 pixel long)
-    dw.dxfReal(11, data.ux);
-    dw.dxfReal(21, data.uy);
-    dw.dxfReal(31, 0.0);
-
-    // vector along left side (1 pixel long)
-    dw.dxfReal(12, data.vx);
-    dw.dxfReal(22, data.vy);
-    dw.dxfReal(32, 0.0);
-
-    // image size in pixel
-    dw.dxfReal(13, data.width);
-    dw.dxfReal(23, data.height);
-
-    // handle of IMAGEDEF object
-    int handle = dw.incHandle();
-    dw.dxfHex(340, handle);
-
-    // flags
-    dw.dxfInt(70, 15);
-
-    // clipping:
-    dw.dxfInt(280, 0);
-
-    // brightness, contrast, fade
-    dw.dxfInt(281, data.brightness);
-    dw.dxfInt(282, data.contrast);
-    dw.dxfInt(283, data.fade);
-
-    return handle;
-}
-
-
-
-/**
- * Writes an image definiition entity.
- */
-void DL_Dxf::writeImageDef(DL_WriterA& dw,
-                           int handle,
-                           const DL_ImageData& data) {
-
-    /*if (data.file.empty()) {
-        std::cerr << "DL_Dxf::writeImage: "
-        << "Image file must not be empty\n";
-        return;
-}*/
-
-    dw.dxfString(0, "IMAGEDEF");
-    if (version==VER_2000) {
-    	dw.dxfHex(5, handle);
-	}
-
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbRasterImageDef");
-        dw.dxfInt(90, 0);
-    }
-    // file name:
-    dw.dxfString(1, data.ref);
-
-    // image size in pixel
-    dw.dxfReal(10, data.width);
-    dw.dxfReal(20, data.height);
-
-    dw.dxfReal(11, 1.0);
-    dw.dxfReal(21, 1.0);
-
-    // loaded:
-    dw.dxfInt(280, 1);
-    // units:
-    dw.dxfInt(281, 0);
-}
-
-
-/**
- * Writes a layer to the file. Layers are stored in the 
- * tables section of a DXF file.
- *
- * @param dw DXF writer
- * @param data Entity data from the file
- * @param attrib Attributes
- */
-void DL_Dxf::writeLayer(DL_WriterA& dw,
-                        const DL_LayerData& data,
-                        const DL_Attributes& attrib) {
-
-    if (data.name.empty()) {
-        std::cerr << "DL_Dxf::writeLayer: "
-        << "Layer name must not be empty\n";
-        return;
-    }
-
-    int color = attrib.getColor();
-    if (color==0) {
-        std::cerr << "Layer color cannot be 0. Corrected to 7.\n";
-        color = 7;
-    }
-
-    if (data.name == "0") {
-        dw.tableLayerEntry(0x10);
-    } else {
-        dw.tableLayerEntry();
-    }
-
-    dw.dxfString(2, data.name);
-    dw.dxfInt(70, data.flags);
-    dw.dxfInt(62, color);
-
-    dw.dxfString(6, (attrib.getLineType().length()==0 ?
-                     string("CONTINUOUS") : attrib.getLineType()));
-
-    if (version>=VER_2000) {
-        // layer defpoints cannot be plotted
-        std::string lstr = data.name;
-        std::transform(lstr.begin(), lstr.end(), lstr.begin(), tolower);
-        if (lstr=="defpoints") {
-            dw.dxfInt(290, 0);
-        }
-    }
-    if (version>=VER_2000 && attrib.getWidth()!=-1) {
-        dw.dxfInt(370, attrib.getWidth());
-    }
-    if (version>=VER_2000) {
-        dw.dxfHex(390, 0xF);
-    }
-}
-
-
-
-/**
- * Writes a line type to the file. Line types are stored in the 
- * tables section of a DXF file.
- */
-void DL_Dxf::writeLineType(DL_WriterA& dw,
-                           const DL_LineTypeData& data) {
-    //const char* description,
-    //int elements,
-    //double patternLength) {
-
-    if (data.name.empty()) {
-        std::cerr << "DL_Dxf::writeLineType: "
-        << "Line type name must not be empty\n";
-        return;
-    }
-
-	// ignore BYLAYER, BYBLOCK for R12
-	if (version<VER_2000) {
-		if (!strcasecmp(data.name.c_str(), "BYBLOCK") ||
-		    !strcasecmp(data.name.c_str(), "BYLAYER")) {
-			return;
-		}
-	}
-
-	// write id (not for R12)
-    if (!strcasecmp(data.name.c_str(), "BYBLOCK")) {
-        dw.tableLineTypeEntry(0x14);
-    } else if (!strcasecmp(data.name.c_str(), "BYLAYER")) {
-        dw.tableLineTypeEntry(0x15);
-    } else if (!strcasecmp(data.name.c_str(), "CONTINUOUS")) {
-        dw.tableLineTypeEntry(0x16);
-    } else {
-        dw.tableLineTypeEntry();
-    }
-
-    dw.dxfString(2, data.name);
-	//if (version>=VER_2000) {
-    	dw.dxfInt(70, data.flags);
-	//}
-
-    if (!strcasecmp(data.name.c_str(), "BYBLOCK")) {
-        dw.dxfString(3, "");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 0);
-        dw.dxfReal(40, 0.0);
-    } else if (!strcasecmp(data.name.c_str(), "BYLAYER")) {
-        dw.dxfString(3, "");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 0);
-        dw.dxfReal(40, 0.0);
-    } else if (!strcasecmp(data.name.c_str(), "CONTINUOUS")) {
-        dw.dxfString(3, "Solid line");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 0);
-        dw.dxfReal(40, 0.0);
-    } else if (!strcasecmp(data.name.c_str(), "ACAD_ISO02W100")) {
-        dw.dxfString(3, "ISO Dashed __ __ __ __ __ __ __ __ __ __ _");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 2);
-        dw.dxfReal(40, 15.0);
-        dw.dxfReal(49, 12.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "ACAD_ISO03W100")) {
-        dw.dxfString(3, "ISO Dashed with Distance __    __    __    _");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 2);
-        dw.dxfReal(40, 30.0);
-        dw.dxfReal(49, 12.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -18.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "ACAD_ISO04W100")) {
-        dw.dxfString(3, "ISO Long Dashed Dotted ____ . ____ . __");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 4);
-        dw.dxfReal(40, 30.0);
-        dw.dxfReal(49, 24.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "ACAD_ISO05W100")) {
-        dw.dxfString(3, "ISO Long Dashed Double Dotted ____ .. __");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 6);
-        dw.dxfReal(40, 33.0);
-        dw.dxfReal(49, 24.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "BORDER")) {
-        dw.dxfString(3, "Border __ __ . __ __ . __ __ . __ __ . __ __ .");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 6);
-        dw.dxfReal(40, 44.45);
-        dw.dxfReal(49, 12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "BORDER2")) {
-        dw.dxfString(3, "Border (.5x) __.__.__.__.__.__.__.__.__.__.__.");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 6);
-        dw.dxfReal(40, 22.225);
-        dw.dxfReal(49, 6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.175);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.175);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.175);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "BORDERX2")) {
-        dw.dxfString(3, "Border (2x) ____  ____  .  ____  ____  .  ___");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 6);
-        dw.dxfReal(40, 88.9);
-        dw.dxfReal(49, 25.4);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 25.4);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "CENTER")) {
-        dw.dxfString(3, "Center ____ _ ____ _ ____ _ ____ _ ____ _ ____");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 4);
-        dw.dxfReal(40, 50.8);
-        dw.dxfReal(49, 31.75);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "CENTER2")) {
-        dw.dxfString(3, "Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 4);
-        dw.dxfReal(40, 28.575);
-        dw.dxfReal(49, 19.05);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.175);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 3.175);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.175);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "CENTERX2")) {
-        dw.dxfString(3, "Center (2x) ________  __  ________  __  _____");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 4);
-        dw.dxfReal(40, 101.6);
-        dw.dxfReal(49, 63.5);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "DASHDOT")) {
-        dw.dxfString(3, "Dash dot __ . __ . __ . __ . __ . __ . __ . __");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 4);
-        dw.dxfReal(40, 25.4);
-        dw.dxfReal(49, 12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "DASHDOT2")) {
-        dw.dxfString(3, "Dash dot (.5x) _._._._._._._._._._._._._._._.");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 4);
-        dw.dxfReal(40, 12.7);
-        dw.dxfReal(49, 6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.175);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.175);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "DASHDOTX2")) {
-        dw.dxfString(3, "Dash dot (2x) ____  .  ____  .  ____  .  ___");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 4);
-        dw.dxfReal(40, 50.8);
-        dw.dxfReal(49, 25.4);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "DASHED")) {
-        dw.dxfString(3, "Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 2);
-        dw.dxfReal(40, 19.05);
-        dw.dxfReal(49, 12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "DASHED2")) {
-        dw.dxfString(3, "Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 2);
-        dw.dxfReal(40, 9.525);
-        dw.dxfReal(49, 6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.175);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "DASHEDX2")) {
-        dw.dxfString(3, "Dashed (2x) ____  ____  ____  ____  ____  ___");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 2);
-        dw.dxfReal(40, 38.1);
-        dw.dxfReal(49, 25.4);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "DIVIDE")) {
-        dw.dxfString(3, "Divide ____ . . ____ . . ____ . . ____ . . ____");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 6);
-        dw.dxfReal(40, 31.75);
-        dw.dxfReal(49, 12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "DIVIDE2")) {
-        dw.dxfString(3, "Divide (.5x) __..__..__..__..__..__..__..__.._");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 6);
-        dw.dxfReal(40, 15.875);
-        dw.dxfReal(49, 6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.175);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.175);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.175);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "DIVIDEX2")) {
-        dw.dxfString(3, "Divide (2x) ________  .  .  ________  .  .  _");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 6);
-        dw.dxfReal(40, 63.5);
-        dw.dxfReal(49, 25.4);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "DOT")) {
-        dw.dxfString(3, "Dot . . . . . . . . . . . . . . . . . . . . . .");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 2);
-        dw.dxfReal(40, 6.35);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -6.35);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "DOT2")) {
-        dw.dxfString(3, "Dot (.5x) .....................................");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 2);
-        dw.dxfReal(40, 3.175);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -3.175);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else if (!strcasecmp(data.name.c_str(), "DOTX2")) {
-        dw.dxfString(3, "Dot (2x) .  .  .  .  .  .  .  .  .  .  .  .  .");
-        dw.dxfInt(72, 65);
-        dw.dxfInt(73, 2);
-        dw.dxfReal(40, 12.7);
-        dw.dxfReal(49, 0.0);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-        dw.dxfReal(49, -12.7);
-        if (version>=VER_R13)
-            dw.dxfInt(74, 0);
-    } else {
-        std::cerr << "dxflib warning: DL_Dxf::writeLineType: Unknown Line Type\n";
-    }
-}
-
-
-
-/**
- * Writes the APPID section to the DXF file.
- *
- * @param name Application name
- */
-void DL_Dxf::writeAppid(DL_WriterA& dw, const string& name) {
-    if (name.empty()) {
-        std::cerr << "DL_Dxf::writeAppid: "
-        << "Application  name must not be empty\n";
-        return;
-    }
-
-    if (!strcasecmp(name.c_str(), "ACAD")) {
-        dw.tableAppidEntry(0x12);
-    } else {
-        dw.tableAppidEntry();
-    }
-    dw.dxfString(2, name);
-    dw.dxfInt(70, 0);
-}
-
-
-
-/**
- * Writes a block's definition (no entities) to the DXF file.
- */
-void DL_Dxf::writeBlock(DL_WriterA& dw, const DL_BlockData& data) {
-    if (data.name.empty()) {
-        std::cerr << "DL_Dxf::writeBlock: "
-        << "Block name must not be empty\n";
-        return;
-    }
-
-    //bool paperSpace = !strcasecmp(name, "*paper_space");
-    //!strcasecmp(name, "*paper_space0");
-
-    if (!strcasecmp(data.name.c_str(), "*paper_space")) {
-        dw.sectionBlockEntry(0x1C);
-    } else if (!strcasecmp(data.name.c_str(), "*model_space")) {
-        dw.sectionBlockEntry(0x20);
-    } else if (!strcasecmp(data.name.c_str(), "*paper_space0")) {
-        dw.sectionBlockEntry(0x24);
-    } else {
-        dw.sectionBlockEntry();
-    }
-    dw.dxfString(2, data.name);
-    dw.dxfInt(70, 0);
-    dw.coord(10, data.bpx, data.bpy);
-    dw.dxfString(3, data.name);
-    dw.dxfString(1, "");
-}
-
-
-
-/**
- * Writes a block end.
- *
- * @param name Block name
- */
-void DL_Dxf::writeEndBlock(DL_WriterA& dw, const string& name) {
-    if (!strcasecmp(name.c_str(), "*paper_space")) {
-        dw.sectionBlockEntryEnd(0x1D);
-    } else if (!strcasecmp(name.c_str(), "*model_space")) {
-        dw.sectionBlockEntryEnd(0x21);
-    } else if (!strcasecmp(name.c_str(), "*paper_space0")) {
-        dw.sectionBlockEntryEnd(0x25);
-    } else {
-        dw.sectionBlockEntryEnd();
-    }
-}
-
-
-
-/**
- * Writes a viewport section. This section is needed in VER_R13.
- * Note that this method currently only writes a faked VPORT section
- * to make the file readable by Aut*cad.
- */
-void DL_Dxf::writeVPort(DL_WriterA& dw) {
-    dw.dxfString(0, "TABLE");
-    dw.dxfString(2, "VPORT");
-    if (version==VER_2000) {
-        dw.dxfHex(5, 0x8);
-    }
-    //dw.dxfHex(330, 0);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbSymbolTable");
-    }
-    dw.dxfInt(70, 1);
-    dw.dxfString(0, "VPORT");
-    //dw.dxfHex(5, 0x2F);
-    if (version==VER_2000) {
-        dw.handle();
-    }
-    //dw.dxfHex(330, 8);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbSymbolTableRecord");
-        dw.dxfString(100, "AcDbViewportTableRecord");
-    }
-    dw.dxfString(  2, "*Active");
-    dw.dxfInt( 70, 0);
-    dw.dxfReal( 10, 0.0);
-    dw.dxfReal( 20, 0.0);
-    dw.dxfReal( 11, 1.0);
-    dw.dxfReal( 21, 1.0);
-    dw.dxfReal( 12, 286.3055555555555);
-    dw.dxfReal( 22, 148.5);
-    dw.dxfReal( 13, 0.0);
-    dw.dxfReal( 23, 0.0);
-    dw.dxfReal( 14, 10.0);
-    dw.dxfReal( 24, 10.0);
-    dw.dxfReal( 15, 10.0);
-    dw.dxfReal( 25, 10.0);
-    dw.dxfReal( 16, 0.0);
-    dw.dxfReal( 26, 0.0);
-    dw.dxfReal( 36, 1.0);
-    dw.dxfReal( 17, 0.0);
-    dw.dxfReal( 27, 0.0);
-    dw.dxfReal( 37, 0.0);
-    dw.dxfReal( 40, 297.0);
-    dw.dxfReal( 41, 1.92798353909465);
-    dw.dxfReal( 42, 50.0);
-    dw.dxfReal( 43, 0.0);
-    dw.dxfReal( 44, 0.0);
-    dw.dxfReal( 50, 0.0);
-    dw.dxfReal( 51, 0.0);
-    dw.dxfInt( 71, 0);
-    dw.dxfInt( 72, 100);
-    dw.dxfInt( 73, 1);
-    dw.dxfInt( 74, 3);
-    dw.dxfInt( 75, 1);
-    dw.dxfInt( 76, 1);
-    dw.dxfInt( 77, 0);
-    dw.dxfInt( 78, 0);
-
-    if (version==VER_2000) {
-        dw.dxfInt(281, 0);
-        dw.dxfInt( 65, 1);
-        dw.dxfReal(110, 0.0);
-        dw.dxfReal(120, 0.0);
-        dw.dxfReal(130, 0.0);
-        dw.dxfReal(111, 1.0);
-        dw.dxfReal(121, 0.0);
-        dw.dxfReal(131, 0.0);
-        dw.dxfReal(112, 0.0);
-        dw.dxfReal(122, 1.0);
-        dw.dxfReal(132, 0.0);
-        dw.dxfInt( 79, 0);
-        dw.dxfReal(146, 0.0);
-    }
-    dw.dxfString(  0, "ENDTAB");
-}
-
-
-
-/**
- * Writes a style section. This section is needed in VER_R13.
- * Note that this method currently only writes a faked STYLE section
- * to make the file readable by Aut*cad.
- */
-void DL_Dxf::writeStyle(DL_WriterA& dw) {
-    dw.dxfString(  0, "TABLE");
-    dw.dxfString(  2, "STYLE");
-    if (version==VER_2000) {
-    	dw.dxfHex(5, 3);
-	}
-    //dw.dxfHex(330, 0);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbSymbolTable");
-    }
-    dw.dxfInt( 70, 1);
-    dw.dxfString(  0, "STYLE");
-    if (version==VER_2000) {
-    	dw.dxfHex(5, 0x11);
-	}
-    //styleHandleStd = dw.handle();
-    //dw.dxfHex(330, 3);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbSymbolTableRecord");
-        dw.dxfString(100, "AcDbTextStyleTableRecord");
-    }
-    dw.dxfString(  2, "Standard");
-    dw.dxfInt( 70, 0);
-    dw.dxfReal( 40, 0.0);
-    dw.dxfReal( 41, 1.0);
-    dw.dxfReal( 50, 0.0);
-    dw.dxfInt( 71, 0);
-    dw.dxfReal( 42, 2.5);
-    dw.dxfString(  3, "txt");
-    dw.dxfString(  4, "");
-    dw.dxfString(  0, "ENDTAB");
-}
-
-
-
-/**
- * Writes a view section. This section is needed in VER_R13.
- * Note that this method currently only writes a faked VIEW section
- * to make the file readable by Aut*cad.
- */
-void DL_Dxf::writeView(DL_WriterA& dw) {
-    dw.dxfString(  0, "TABLE");
-    dw.dxfString(  2, "VIEW");
-    if (version==VER_2000) {
-    	dw.dxfHex(5, 6);
-	}
-    //dw.dxfHex(330, 0);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbSymbolTable");
-    }
-    dw.dxfInt( 70, 0);
-    dw.dxfString(  0, "ENDTAB");
-}
-
-
-
-/**
- * Writes a ucs section. This section is needed in VER_R13.
- * Note that this method currently only writes a faked UCS section
- * to make the file readable by Aut*cad.
- */
-void DL_Dxf::writeUcs(DL_WriterA& dw) {
-    dw.dxfString(  0, "TABLE");
-    dw.dxfString(  2, "UCS");
-    if (version==VER_2000) {
-    	dw.dxfHex(5, 7);
-	}
-    //dw.dxfHex(330, 0);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbSymbolTable");
-    }
-    dw.dxfInt( 70, 0);
-    dw.dxfString(  0, "ENDTAB");
-}
-
-
-
-/**
- * Writes a dimstyle section. This section is needed in VER_R13.
- * Note that this method currently only writes a faked DIMSTYLE section
- * to make the file readable by Aut*cad.
- */
-void DL_Dxf::writeDimStyle(DL_WriterA& dw, 
-					double dimasz, double dimexe, double dimexo,
-                       double dimgap, double dimtxt) {
-
-    dw.dxfString(  0, "TABLE");
-    dw.dxfString(  2, "DIMSTYLE");
-    if (version==VER_2000) {
-        dw.dxfHex(5, 0xA);
-        dw.dxfString(100, "AcDbSymbolTable");
-    }
-    dw.dxfInt( 70, 1);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbDimStyleTable");
-        dw.dxfInt( 71, 0);
-    }
-
-
-    dw.dxfString(  0, "DIMSTYLE");
-    if (version==VER_2000) {
-        dw.dxfHex(105, 0x27);
-    }
-    //dw.handle(105);
-    //dw.dxfHex(330, 0xA);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbSymbolTableRecord");
-        dw.dxfString(100, "AcDbDimStyleTableRecord");
-    }
-    dw.dxfString(  2, "Standard");
-    if (version==VER_R12) {
-        dw.dxfString(  3, "");
-        dw.dxfString(  4, "");
-        dw.dxfString(  5, "");
-        dw.dxfString(  6, "");
-        dw.dxfString(  7, "");
-        dw.dxfReal( 40, 1.0);
-    }
-
-    dw.dxfReal( 41, dimasz);
-    dw.dxfReal( 42, dimexo);
-    dw.dxfReal( 43, 3.75);
-    dw.dxfReal( 44, dimexe);
-    if (version==VER_R12) {
-        dw.dxfReal( 45, 0.0);
-        dw.dxfReal( 46, 0.0);
-        dw.dxfReal( 47, 0.0);
-        dw.dxfReal( 48, 0.0);
-    }
-    dw.dxfInt( 70, 0);
-    if (version==VER_R12) {
-        dw.dxfInt( 71, 0);
-        dw.dxfInt( 72, 0);
-    }
-    dw.dxfInt( 73, 0);
-    dw.dxfInt( 74, 0);
-    if (version==VER_R12) {
-        dw.dxfInt( 75, 0);
-        dw.dxfInt( 76, 0);
-    }
-    dw.dxfInt( 77, 1);
-    dw.dxfInt( 78, 8);
-    dw.dxfReal(140, dimtxt);
-    dw.dxfReal(141, 2.5);
-    if (version==VER_R12) {
-        dw.dxfReal(142, 0.0);
-    }
-    dw.dxfReal(143, 0.03937007874016);
-    if (version==VER_R12) {
-        dw.dxfReal(144, 1.0);
-        dw.dxfReal(145, 0.0);
-        dw.dxfReal(146, 1.0);
-    }
-    dw.dxfReal(147, dimgap);
-    if (version==VER_R12) {
-        dw.dxfInt(170, 0);
-    }
-    dw.dxfInt(171, 3);
-    dw.dxfInt(172, 1);
-    if (version==VER_R12) {
-        dw.dxfInt(173, 0);
-        dw.dxfInt(174, 0);
-        dw.dxfInt(175, 0);
-        dw.dxfInt(176, 0);
-        dw.dxfInt(177, 0);
-        dw.dxfInt(178, 0);
-    }
-    if (version==VER_2000) {
-        dw.dxfInt(271, 2);
-        dw.dxfInt(272, 2);
-        dw.dxfInt(274, 3);
-        dw.dxfInt(278, 44);
-        dw.dxfInt(283, 0);
-        dw.dxfInt(284, 8);
-        //dw.dxfHex(340, styleHandleStd);
-        dw.dxfHex(340, 0x11);
-    }
-    // * /
-    dw.dxfString(  0, "ENDTAB");
-}
-
-
-
-/**
- * Writes a blockrecord section. This section is needed in VER_R13.
- * Note that this method currently only writes a faked BLOCKRECORD section
- * to make the file readable by Aut*cad.
- */
-void DL_Dxf::writeBlockRecord(DL_WriterA& dw) {
-    dw.dxfString(  0, "TABLE");
-    dw.dxfString(  2, "BLOCK_RECORD");
-    if (version==VER_2000) {
-    	dw.dxfHex(5, 1);
-	}
-    //dw.dxfHex(330, 0);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbSymbolTable");
-    }
-    dw.dxfInt( 70, 1);
-
-    dw.dxfString(  0, "BLOCK_RECORD");
-    if (version==VER_2000) {
-    	dw.dxfHex(5, 0x1F);
-	}
-    //int msh = dw.handle();
-    //dw.setModelSpaceHandle(msh);
-    //dw.dxfHex(330, 1);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbSymbolTableRecord");
-        dw.dxfString(100, "AcDbBlockTableRecord");
-    }
-    dw.dxfString(  2, "*Model_Space");
-    dw.dxfHex(340, 0x22);
-
-    dw.dxfString(  0, "BLOCK_RECORD");
-    if (version==VER_2000) {
-    	dw.dxfHex(5, 0x1B);
-	}
-    //int psh = dw.handle();
-    //dw.setPaperSpaceHandle(psh);
-    //dw.dxfHex(330, 1);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbSymbolTableRecord");
-        dw.dxfString(100, "AcDbBlockTableRecord");
-    }
-    dw.dxfString(  2, "*Paper_Space");
-    dw.dxfHex(340, 0x1E);
-
-    dw.dxfString(  0, "BLOCK_RECORD");
-    if (version==VER_2000) {
-    	dw.dxfHex(5, 0x23);
-	}
-    //int ps0h = dw.handle();
-    //dw.setPaperSpace0Handle(ps0h);
-    //dw.dxfHex(330, 1);
-    if (version==VER_2000) {
-        dw.dxfString(100, "AcDbSymbolTableRecord");
-        dw.dxfString(100, "AcDbBlockTableRecord");
-    }
-    dw.dxfString(  2, "*Paper_Space0");
-    dw.dxfHex(340, 0x26);
-
-    //dw.dxfString(  0, "ENDTAB");
-}
-
-
-
-/**
- * Writes a objects section. This section is needed in VER_R13.
- * Note that this method currently only writes a faked OBJECTS section
- * to make the file readable by Aut*cad.
- */
-void DL_Dxf::writeObjects(DL_WriterA& dw) {
-    //int dicId, dicId2, dicId3, dicId4, dicId5;
-    //int dicId5;
-
-    dw.dxfString(  0, "SECTION");
-    dw.dxfString(  2, "OBJECTS");
-    dw.dxfString(  0, "DICTIONARY");
-    dw.dxfHex(5, 0xC);                            // C
-    //dw.dxfHex(330, 0);
-    dw.dxfString(100, "AcDbDictionary");
-    dw.dxfInt(280, 0);
-    dw.dxfInt(281, 1);
-    dw.dxfString(  3, "ACAD_GROUP");
-    //dw.dxfHex(350, dw.getNextHandle());          // D
-    dw.dxfHex(350, 0xD);          // D
-    dw.dxfString(  3, "ACAD_LAYOUT");
-    dw.dxfHex(350, 0x1A);
-    //dw.dxfHex(350, dw.getNextHandle()+0);        // 1A
-    dw.dxfString(  3, "ACAD_MLINESTYLE");
-    dw.dxfHex(350, 0x17);
-    //dw.dxfHex(350, dw.getNextHandle()+1);        // 17
-    dw.dxfString(  3, "ACAD_PLOTSETTINGS");
-    dw.dxfHex(350, 0x19);
-    //dw.dxfHex(350, dw.getNextHandle()+2);        // 19
-    dw.dxfString(  3, "ACAD_PLOTSTYLENAME");
-    dw.dxfHex(350, 0xE);
-    //dw.dxfHex(350, dw.getNextHandle()+3);        // E
-    dw.dxfString(  3, "AcDbVariableDictionary");
-    dw.dxfHex(350, dw.getNextHandle());        // 2C
-    dw.dxfString(  0, "DICTIONARY");
-    dw.dxfHex(5, 0xD);
-    //dw.handle();                                    // D
-    //dw.dxfHex(330, 0xC);
-    dw.dxfString(100, "AcDbDictionary");
-    dw.dxfInt(280, 0);
-    dw.dxfInt(281, 1);
-    dw.dxfString(  0, "ACDBDICTIONARYWDFLT");
-    dw.dxfHex(5, 0xE);
-    //dicId4 = dw.handle();                           // E
-    //dw.dxfHex(330, 0xC);                       // C
-    dw.dxfString(100, "AcDbDictionary");
-    dw.dxfInt(281, 1);
-    dw.dxfString(  3, "Normal");
-    dw.dxfHex(350, 0xF);
-    //dw.dxfHex(350, dw.getNextHandle()+5);        // F
-    dw.dxfString(100, "AcDbDictionaryWithDefault");
-    dw.dxfHex(340, 0xF);
-    //dw.dxfHex(340, dw.getNextHandle()+5);        // F
-    dw.dxfString(  0, "ACDBPLACEHOLDER");
-    dw.dxfHex(5, 0xF);
-    //dw.handle();                                    // F
-    //dw.dxfHex(330, dicId4);                      // E
-    dw.dxfString(  0, "DICTIONARY");
-    //dicId3 = dw.handle();                           // 17
-    dw.dxfHex(5, 0x17);
-    //dw.dxfHex(330, 0xC);                       // C
-    dw.dxfString(100, "AcDbDictionary");
-    dw.dxfInt(280, 0);
-    dw.dxfInt(281, 1);
-    dw.dxfString(  3, "Standard");
-    dw.dxfHex(350, 0x18);
-    //dw.dxfHex(350, dw.getNextHandle()+5);        // 18
-    dw.dxfString(  0, "MLINESTYLE");
-    dw.dxfHex(5, 0x18);
-    //dw.handle();                                    // 18
-    //dw.dxfHex(330, dicId3);                      // 17
-    dw.dxfString(100, "AcDbMlineStyle");
-    dw.dxfString(  2, "STANDARD");
-    dw.dxfInt( 70, 0);
-    dw.dxfString(  3, "");
-    dw.dxfInt( 62, 256);
-    dw.dxfReal( 51, 90.0);
-    dw.dxfReal( 52, 90.0);
-    dw.dxfInt( 71, 2);
-    dw.dxfReal( 49, 0.5);
-    dw.dxfInt( 62, 256);
-    dw.dxfString(  6, "BYLAYER");
-    dw.dxfReal( 49, -0.5);
-    dw.dxfInt( 62, 256);
-    dw.dxfString(  6, "BYLAYER");
-    dw.dxfString(  0, "DICTIONARY");
-    dw.dxfHex(5, 0x19);
-    //dw.handle();                           // 17
-    //dw.dxfHex(330, 0xC);                       // C
-    dw.dxfString(100, "AcDbDictionary");
-    dw.dxfInt(280, 0);
-    dw.dxfInt(281, 1);
-    dw.dxfString(  0, "DICTIONARY");
-    //dicId2 = dw.handle();                           // 1A
-    dw.dxfHex(5, 0x1A);
-    //dw.dxfHex(330, 0xC);
-    dw.dxfString(100, "AcDbDictionary");
-    dw.dxfInt(281, 1);
-    dw.dxfString(  3, "Layout1");
-    dw.dxfHex(350, 0x1E);
-    //dw.dxfHex(350, dw.getNextHandle()+2);        // 1E
-    dw.dxfString(  3, "Layout2");
-    dw.dxfHex(350, 0x26);
-    //dw.dxfHex(350, dw.getNextHandle()+4);        // 26
-    dw.dxfString(  3, "Model");
-    dw.dxfHex(350, 0x22);
-    //dw.dxfHex(350, dw.getNextHandle()+5);        // 22
-
-    dw.dxfString(  0, "LAYOUT");
-    dw.dxfHex(5, 0x1E);
-    //dw.handle();                                    // 1E
-    //dw.dxfHex(330, dicId2);                      // 1A
-    dw.dxfString(100, "AcDbPlotSettings");
-    dw.dxfString(  1, "");
-    dw.dxfString(  2, "C:\\Program Files\\AutoCAD 2002\\plotters\\DWF ePlot (optimized for plotting).pc3");
-    dw.dxfString(  4, "");
-    dw.dxfString(  6, "");
-    dw.dxfReal( 40, 0.0);
-    dw.dxfReal( 41, 0.0);
-    dw.dxfReal( 42, 0.0);
-    dw.dxfReal( 43, 0.0);
-    dw.dxfReal( 44, 0.0);
-    dw.dxfReal( 45, 0.0);
-    dw.dxfReal( 46, 0.0);
-    dw.dxfReal( 47, 0.0);
-    dw.dxfReal( 48, 0.0);
-    dw.dxfReal( 49, 0.0);
-    dw.dxfReal(140, 0.0);
-    dw.dxfReal(141, 0.0);
-    dw.dxfReal(142, 1.0);
-    dw.dxfReal(143, 1.0);
-    dw.dxfInt( 70, 688);
-    dw.dxfInt( 72, 0);
-    dw.dxfInt( 73, 0);
-    dw.dxfInt( 74, 5);
-    dw.dxfString(  7, "");
-    dw.dxfInt( 75, 16);
-    dw.dxfReal(147, 1.0);
-    dw.dxfReal(148, 0.0);
-    dw.dxfReal(149, 0.0);
-    dw.dxfString(100, "AcDbLayout");
-    dw.dxfString(  1, "Layout1");
-    dw.dxfInt( 70, 1);
-    dw.dxfInt( 71, 1);
-    dw.dxfReal( 10, 0.0);
-    dw.dxfReal( 20, 0.0);
-    dw.dxfReal( 11, 420.0);
-    dw.dxfReal( 21, 297.0);
-    dw.dxfReal( 12, 0.0);
-    dw.dxfReal( 22, 0.0);
-    dw.dxfReal( 32, 0.0);
-    dw.dxfReal( 14, 1.000000000000000E+20);
-    dw.dxfReal( 24, 1.000000000000000E+20);
-    dw.dxfReal( 34, 1.000000000000000E+20);
-    dw.dxfReal( 15, -1.000000000000000E+20);
-    dw.dxfReal( 25, -1.000000000000000E+20);
-    dw.dxfReal( 35, -1.000000000000000E+20);
-    dw.dxfReal(146, 0.0);
-    dw.dxfReal( 13, 0.0);
-    dw.dxfReal( 23, 0.0);
-    dw.dxfReal( 33, 0.0);
-    dw.dxfReal( 16, 1.0);
-    dw.dxfReal( 26, 0.0);
-    dw.dxfReal( 36, 0.0);
-    dw.dxfReal( 17, 0.0);
-    dw.dxfReal( 27, 1.0);
-    dw.dxfReal( 37, 0.0);
-    dw.dxfInt( 76, 0);
-    //dw.dxfHex(330, dw.getPaperSpaceHandle());    // 1B
-    dw.dxfHex(330, 0x1B);
-    dw.dxfString(  0, "LAYOUT");
-    dw.dxfHex(5, 0x22);
-    //dw.handle();                                    // 22
-    //dw.dxfHex(330, dicId2);                      // 1A
-    dw.dxfString(100, "AcDbPlotSettings");
-    dw.dxfString(  1, "");
-    dw.dxfString(  2, "C:\\Program Files\\AutoCAD 2002\\plotters\\DWF ePlot (optimized for plotting).pc3");
-    dw.dxfString(  4, "");
-    dw.dxfString(  6, "");
-    dw.dxfReal( 40, 0.0);
-    dw.dxfReal( 41, 0.0);
-    dw.dxfReal( 42, 0.0);
-    dw.dxfReal( 43, 0.0);
-    dw.dxfReal( 44, 0.0);
-    dw.dxfReal( 45, 0.0);
-    dw.dxfReal( 46, 0.0);
-    dw.dxfReal( 47, 0.0);
-    dw.dxfReal( 48, 0.0);
-    dw.dxfReal( 49, 0.0);
-    dw.dxfReal(140, 0.0);
-    dw.dxfReal(141, 0.0);
-    dw.dxfReal(142, 1.0);
-    dw.dxfReal(143, 1.0);
-    dw.dxfInt( 70, 1712);
-    dw.dxfInt( 72, 0);
-    dw.dxfInt( 73, 0);
-    dw.dxfInt( 74, 0);
-    dw.dxfString(  7, "");
-    dw.dxfInt( 75, 0);
-    dw.dxfReal(147, 1.0);
-    dw.dxfReal(148, 0.0);
-    dw.dxfReal(149, 0.0);
-    dw.dxfString(100, "AcDbLayout");
-    dw.dxfString(  1, "Model");
-    dw.dxfInt( 70, 1);
-    dw.dxfInt( 71, 0);
-    dw.dxfReal( 10, 0.0);
-    dw.dxfReal( 20, 0.0);
-    dw.dxfReal( 11, 12.0);
-    dw.dxfReal( 21, 9.0);
-    dw.dxfReal( 12, 0.0);
-    dw.dxfReal( 22, 0.0);
-    dw.dxfReal( 32, 0.0);
-    dw.dxfReal( 14, 0.0);
-    dw.dxfReal( 24, 0.0);
-    dw.dxfReal( 34, 0.0);
-    dw.dxfReal( 15, 0.0);
-    dw.dxfReal( 25, 0.0);
-    dw.dxfReal( 35, 0.0);
-    dw.dxfReal(146, 0.0);
-    dw.dxfReal( 13, 0.0);
-    dw.dxfReal( 23, 0.0);
-    dw.dxfReal( 33, 0.0);
-    dw.dxfReal( 16, 1.0);
-    dw.dxfReal( 26, 0.0);
-    dw.dxfReal( 36, 0.0);
-    dw.dxfReal( 17, 0.0);
-    dw.dxfReal( 27, 1.0);
-    dw.dxfReal( 37, 0.0);
-    dw.dxfInt( 76, 0);
-    //dw.dxfHex(330, dw.getModelSpaceHandle());    // 1F
-    dw.dxfHex(330, 0x1F);
-    dw.dxfString(  0, "LAYOUT");
-    //dw.handle();                                    // 26
-    dw.dxfHex(5, 0x26);
-    //dw.dxfHex(330, dicId2);                      // 1A
-    dw.dxfString(100, "AcDbPlotSettings");
-    dw.dxfString(  1, "");
-    dw.dxfString(  2, "C:\\Program Files\\AutoCAD 2002\\plotters\\DWF ePlot (optimized for plotting).pc3");
-    dw.dxfString(  4, "");
-    dw.dxfString(  6, "");
-    dw.dxfReal( 40, 0.0);
-    dw.dxfReal( 41, 0.0);
-    dw.dxfReal( 42, 0.0);
-    dw.dxfReal( 43, 0.0);
-    dw.dxfReal( 44, 0.0);
-    dw.dxfReal( 45, 0.0);
-    dw.dxfReal( 46, 0.0);
-    dw.dxfReal( 47, 0.0);
-    dw.dxfReal( 48, 0.0);
-    dw.dxfReal( 49, 0.0);
-    dw.dxfReal(140, 0.0);
-    dw.dxfReal(141, 0.0);
-    dw.dxfReal(142, 1.0);
-    dw.dxfReal(143, 1.0);
-    dw.dxfInt( 70, 688);
-    dw.dxfInt( 72, 0);
-    dw.dxfInt( 73, 0);
-    dw.dxfInt( 74, 5);
-    dw.dxfString(  7, "");
-    dw.dxfInt( 75, 16);
-    dw.dxfReal(147, 1.0);
-    dw.dxfReal(148, 0.0);
-    dw.dxfReal(149, 0.0);
-    dw.dxfString(100, "AcDbLayout");
-    dw.dxfString(  1, "Layout2");
-    dw.dxfInt( 70, 1);
-    dw.dxfInt( 71, 2);
-    dw.dxfReal( 10, 0.0);
-    dw.dxfReal( 20, 0.0);
-    dw.dxfReal( 11, 12.0);
-    dw.dxfReal( 21, 9.0);
-    dw.dxfReal( 12, 0.0);
-    dw.dxfReal( 22, 0.0);
-    dw.dxfReal( 32, 0.0);
-    dw.dxfReal( 14, 0.0);
-    dw.dxfReal( 24, 0.0);
-    dw.dxfReal( 34, 0.0);
-    dw.dxfReal( 15, 0.0);
-    dw.dxfReal( 25, 0.0);
-    dw.dxfReal( 35, 0.0);
-    dw.dxfReal(146, 0.0);
-    dw.dxfReal( 13, 0.0);
-    dw.dxfReal( 23, 0.0);
-    dw.dxfReal( 33, 0.0);
-    dw.dxfReal( 16, 1.0);
-    dw.dxfReal( 26, 0.0);
-    dw.dxfReal( 36, 0.0);
-    dw.dxfReal( 17, 0.0);
-    dw.dxfReal( 27, 1.0);
-    dw.dxfReal( 37, 0.0);
-    dw.dxfInt( 76, 0);
-    //dw.dxfHex(330, dw.getPaperSpace0Handle());   // 23
-    dw.dxfHex(330, 0x23);
-    dw.dxfString(  0, "DICTIONARY");
-    //dw.dxfHex(5, 0x2C);
-    //dicId5 =
-    dw.handle();                           // 2C
-    //dw.dxfHex(330, 0xC);                       // C
-    dw.dxfString(100, "AcDbDictionary");
-    dw.dxfInt(281, 1);
-    dw.dxfString(  3, "DIMASSOC");
-    //dw.dxfHex(350, 0x2F);
-    dw.dxfHex(350, dw.getNextHandle()+1);        // 2E
-    dw.dxfString(  3, "HIDETEXT");
-    //dw.dxfHex(350, 0x2E);
-    dw.dxfHex(350, dw.getNextHandle());        // 2D
-    dw.dxfString(  0, "DICTIONARYVAR");
-    //dw.dxfHex(5, 0x2E);
-    dw.handle();                                    // 2E
-    //dw.dxfHex(330, dicId5);                      // 2C
-    dw.dxfString(100, "DictionaryVariables");
-    dw.dxfInt(280, 0);
-    dw.dxfInt(  1, 2);
-    dw.dxfString(  0, "DICTIONARYVAR");
-    //dw.dxfHex(5, 0x2D);
-    dw.handle();                                    // 2D
-    //dw.dxfHex(330, dicId5);                      // 2C
-    dw.dxfString(100, "DictionaryVariables");
-    dw.dxfInt(280, 0);
-    dw.dxfInt(  1, 1);
-}
-
-
-/**
- * Writes the end of the objects section. This section is needed in VER_R13.
- * Note that this method currently only writes a faked OBJECTS section
- * to make the file readable by Aut*cad.
- */
-void DL_Dxf::writeObjectsEnd(DL_WriterA& dw) {
-    dw.dxfString(  0, "ENDSEC");
-}
-
-
-
-/**
- * Checks if the given variable is known by the given DXF version.
- */
-bool DL_Dxf::checkVariable(const char* var, DL_Codes::version version) {
-    if (version>=VER_2000) {
-        return true;
-    } else if (version==VER_R12) {
-        // these are all the variables recognized by dxf r12:
-        if (!strcmp(var, "$ACADVER")) {
-            return true;
-        }
-        if (!strcmp(var, "$ACADVER")) {
-            return true;
-        }
-        if (!strcmp(var, "$ANGBASE")) {
-            return true;
-        }
-        if (!strcmp(var, "$ANGDIR")) {
-            return true;
-        }
-        if (!strcmp(var, "$ATTDIA")) {
-            return true;
-        }
-        if (!strcmp(var, "$ATTMODE")) {
-            return true;
-        }
-        if (!strcmp(var, "$ATTREQ")) {
-            return true;
-        }
-        if (!strcmp(var, "$AUNITS")) {
-            return true;
-        }
-        if (!strcmp(var, "$AUPREC")) {
-            return true;
-        }
-        if (!strcmp(var, "$AXISMODE")) {
-            return true;
-        }
-        if (!strcmp(var, "$AXISUNIT")) {
-            return true;
-        }
-        if (!strcmp(var, "$BLIPMODE")) {
-            return true;
-        }
-        if (!strcmp(var, "$CECOLOR")) {
-            return true;
-        }
-        if (!strcmp(var, "$CELTYPE")) {
-            return true;
-        }
-        if (!strcmp(var, "$CHAMFERA")) {
-            return true;
-        }
-        if (!strcmp(var, "$CHAMFERB")) {
-            return true;
-        }
-        if (!strcmp(var, "$CLAYER")) {
-            return true;
-        }
-        if (!strcmp(var, "$COORDS")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMALT")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMALTD")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMALTF")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMAPOST")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMASO")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMASZ")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMBLK")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMBLK1")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMBLK2")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMCEN")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMCLRD")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMCLRE")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMCLRT")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMDLE")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMDLI")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMEXE")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMEXO")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMGAP")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMLFAC")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMLIM")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMPOST")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMRND")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMSAH")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMSCALE")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMSE1")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMSE2")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMSHO")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMSOXD")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMSTYLE")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMTAD")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMTFAC")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMTIH")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMTIX")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMTM")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMTOFL")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMTOH")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMTOL")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMTP")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMTSZ")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMTVP")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMTXT")) {
-            return true;
-        }
-        if (!strcmp(var, "$DIMZIN")) {
-            return true;
-        }
-        if (!strcmp(var, "$DWGCODEPAGE")) {
-            return true;
-        }
-        if (!strcmp(var, "$DRAGMODE")) {
-            return true;
-        }
-        if (!strcmp(var, "$ELEVATION")) {
-            return true;
-        }
-        if (!strcmp(var, "$EXTMAX")) {
-            return true;
-        }
-        if (!strcmp(var, "$EXTMIN")) {
-            return true;
-        }
-        if (!strcmp(var, "$FILLETRAD")) {
-            return true;
-        }
-        if (!strcmp(var, "$FILLMODE")) {
-            return true;
-        }
-        if (!strcmp(var, "$HANDLING")) {
-            return true;
-        }
-        if (!strcmp(var, "$HANDSEED")) {
-            return true;
-        }
-        if (!strcmp(var, "$INSBASE")) {
-            return true;
-        }
-        if (!strcmp(var, "$LIMCHECK")) {
-            return true;
-        }
-        if (!strcmp(var, "$LIMMAX")) {
-            return true;
-        }
-        if (!strcmp(var, "$LIMMIN")) {
-            return true;
-        }
-        if (!strcmp(var, "$LTSCALE")) {
-            return true;
-        }
-        if (!strcmp(var, "$LUNITS")) {
-            return true;
-        }
-        if (!strcmp(var, "$LUPREC")) {
-            return true;
-        }
-        if (!strcmp(var, "$MAXACTVP")) {
-            return true;
-        }
-        if (!strcmp(var, "$MENU")) {
-            return true;
-        }
-        if (!strcmp(var, "$MIRRTEXT")) {
-            return true;
-        }
-        if (!strcmp(var, "$ORTHOMODE")) {
-            return true;
-        }
-        if (!strcmp(var, "$OSMODE")) {
-            return true;
-        }
-        if (!strcmp(var, "$PDMODE")) {
-            return true;
-        }
-        if (!strcmp(var, "$PDSIZE")) {
-            return true;
-        }
-        if (!strcmp(var, "$PELEVATION")) {
-            return true;
-        }
-        if (!strcmp(var, "$PEXTMAX")) {
-            return true;
-        }
-        if (!strcmp(var, "$PEXTMIN")) {
-            return true;
-        }
-        if (!strcmp(var, "$PLIMCHECK")) {
-            return true;
-        }
-        if (!strcmp(var, "$PLIMMAX")) {
-            return true;
-        }
-        if (!strcmp(var, "$PLIMMIN")) {
-            return true;
-        }
-        if (!strcmp(var, "$PLINEGEN")) {
-            return true;
-        }
-        if (!strcmp(var, "$PLINEWID")) {
-            return true;
-        }
-        if (!strcmp(var, "$PSLTSCALE")) {
-            return true;
-        }
-        if (!strcmp(var, "$PUCSNAME")) {
-            return true;
-        }
-        if (!strcmp(var, "$PUCSORG")) {
-            return true;
-        }
-        if (!strcmp(var, "$PUCSXDIR")) {
-            return true;
-        }
-        if (!strcmp(var, "$PUCSYDIR")) {
-            return true;
-        }
-        if (!strcmp(var, "$QTEXTMODE")) {
-            return true;
-        }
-        if (!strcmp(var, "$REGENMODE")) {
-            return true;
-        }
-        if (!strcmp(var, "$SHADEDGE")) {
-            return true;
-        }
-        if (!strcmp(var, "$SHADEDIF")) {
-            return true;
-        }
-        if (!strcmp(var, "$SKETCHINC")) {
-            return true;
-        }
-        if (!strcmp(var, "$SKPOLY")) {
-            return true;
-        }
-        if (!strcmp(var, "$SPLFRAME")) {
-            return true;
-        }
-        if (!strcmp(var, "$SPLINESEGS")) {
-            return true;
-        }
-        if (!strcmp(var, "$SPLINETYPE")) {
-            return true;
-        }
-        if (!strcmp(var, "$SURFTAB1")) {
-            return true;
-        }
-        if (!strcmp(var, "$SURFTAB2")) {
-            return true;
-        }
-        if (!strcmp(var, "$SURFTYPE")) {
-            return true;
-        }
-        if (!strcmp(var, "$SURFU")) {
-            return true;
-        }
-        if (!strcmp(var, "$SURFV")) {
-            return true;
-        }
-        if (!strcmp(var, "$TDCREATE")) {
-            return true;
-        }
-        if (!strcmp(var, "$TDINDWG")) {
-            return true;
-        }
-        if (!strcmp(var, "$TDUPDATE")) {
-            return true;
-        }
-        if (!strcmp(var, "$TDUSRTIMER")) {
-            return true;
-        }
-        if (!strcmp(var, "$TEXTSIZE")) {
-            return true;
-        }
-        if (!strcmp(var, "$TEXTSTYLE")) {
-            return true;
-        }
-        if (!strcmp(var, "$THICKNESS")) {
-            return true;
-        }
-        if (!strcmp(var, "$TILEMODE")) {
-            return true;
-        }
-        if (!strcmp(var, "$TRACEWID")) {
-            return true;
-        }
-        if (!strcmp(var, "$UCSNAME")) {
-            return true;
-        }
-        if (!strcmp(var, "$UCSORG")) {
-            return true;
-        }
-        if (!strcmp(var, "$UCSXDIR")) {
-            return true;
-        }
-        if (!strcmp(var, "$UCSYDIR")) {
-            return true;
-        }
-        if (!strcmp(var, "$UNITMODE")) {
-            return true;
-        }
-        if (!strcmp(var, "$USERI1")) {
-            return true;
-        }
-        if (!strcmp(var, "$USERR1")) {
-            return true;
-        }
-        if (!strcmp(var, "$USRTIMER")) {
-            return true;
-        }
-        if (!strcmp(var, "$VISRETAIN")) {
-            return true;
-        }
-        if (!strcmp(var, "$WORLDVIEW")) {
-            return true;
-        }
-        if (!strcmp(var, "$FASTZOOM")) {
-            return true;
-        }
-        if (!strcmp(var, "$GRIDMODE")) {
-            return true;
-        }
-        if (!strcmp(var, "$GRIDUNIT")) {
-            return true;
-        }
-        if (!strcmp(var, "$SNAPANG")) {
-            return true;
-        }
-        if (!strcmp(var, "$SNAPBASE")) {
-            return true;
-        }
-        if (!strcmp(var, "$SNAPISOPAIR")) {
-            return true;
-        }
-        if (!strcmp(var, "$SNAPMODE")) {
-            return true;
-        }
-        if (!strcmp(var, "$SNAPSTYLE")) {
-            return true;
-        }
-        if (!strcmp(var, "$SNAPUNIT")) {
-            return true;
-        }
-        if (!strcmp(var, "$VIEWCTR")) {
-            return true;
-        }
-        if (!strcmp(var, "$VIEWDIR")) {
-            return true;
-        }
-        if (!strcmp(var, "$VIEWSIZE")) {
-            return true;
-        }
-        return false;
-    }
-
-    return false;
-}
-
-
-
-/**
- * @returns the library version as int (4 bytes, each byte one version number).
- * e.g. if str = "2.0.2.0" getLibVersion returns 0x02000200
- */
-int DL_Dxf::getLibVersion(const char* str) {
-    int d[4];
-    int idx = 0;
-    char v[4][5];
-    int ret = 0;
-
-    for (unsigned int i=0; i<strlen(str) && idx<3; ++i) {
-        if (str[i]=='.') {
-            d[idx] = i;
-            idx++;
-        }
-    }
-
-    if (idx==3) {
-        d[3] = strlen(str);
-
-        strncpy(v[0], str, d[0]);
-        v[0][d[0]] = '\0';
-        //std::cout << "v[0]: " << atoi(v[0]) << "\n";
-
-        strncpy(v[1], &str[d[0]+1], d[1]-d[0]-1);
-        v[1][d[1]-d[0]-1] = '\0';
-        //std::cout << "v[1]: " << atoi(v[1]) << "\n";
-
-        strncpy(v[2], &str[d[1]+1], d[2]-d[1]-1);
-        v[2][d[2]-d[1]-1] = '\0';
-        //std::cout << "v[2]: " << atoi(v[2]) << "\n";
-
-        strncpy(v[3], &str[d[2]+1], d[3]-d[2]-1);
-        v[3][d[3]-d[2]-1] = '\0';
-        //std::cout << "v[3]: " << atoi(v[3]) << "\n";
-
-        ret = (atoi(v[0])<<(3*8)) +
-              (atoi(v[1])<<(2*8)) +
-              (atoi(v[2])<<(1*8)) +
-              (atoi(v[3])<<(0*8));
-
-        return ret;
-    } else {
-        std::cerr << "DL_Dxf::getLibVersion: invalid version number: " << str << "\n";
-        return 0;
-    }
-}
-
-
-
-/**
- * Some test routines.
- */
-void DL_Dxf::test() {
-    char* buf1;
-    char* buf2;
-    char* buf3;
-    char* buf4;
-    char* buf5;
-    char* buf6;
-
-    buf1 = new char[10];
-    buf2 = new char[10];
-    buf3 = new char[10];
-    buf4 = new char[10];
-    buf5 = new char[10];
-    buf6 = new char[10];
-
-    strcpy(buf1, "  10\n");
-    strcpy(buf2, "10");
-    strcpy(buf3, "10\n");
-    strcpy(buf4, "  10 \n");
-    strcpy(buf5, "  10 \r");
-    strcpy(buf6, "\t10 \n");
-
-    std::cout << "1 buf1: '" << buf1 << "'\n";
-    stripWhiteSpace(&buf1);
-    std::cout << "2 buf1: '" << buf1 << "'\n";
-    //assert(!strcmp(buf1, "10"));
-
-    std::cout << "1 buf2: '" << buf2 << "'\n";
-    stripWhiteSpace(&buf2);
-    std::cout << "2 buf2: '" << buf2 << "'\n";
-
-    std::cout << "1 buf3: '" << buf3 << "'\n";
-    stripWhiteSpace(&buf3);
-    std::cout << "2 buf3: '" << buf3 << "'\n";
-
-    std::cout << "1 buf4: '" << buf4 << "'\n";
-    stripWhiteSpace(&buf4);
-    std::cout << "2 buf4: '" << buf4 << "'\n";
-
-    std::cout << "1 buf5: '" << buf5 << "'\n";
-    stripWhiteSpace(&buf5);
-    std::cout << "2 buf5: '" << buf5 << "'\n";
-
-    std::cout << "1 buf6: '" << buf6 << "'\n";
-    stripWhiteSpace(&buf6);
-    std::cout << "2 buf6: '" << buf6 << "'\n";
-
-}
-
-
diff --git a/Utilities/dxflib/dl_dxf.h b/Utilities/dxflib/dl_dxf.h
deleted file mode 100644
index 7cde072415dce61136e499093832ceff44360c03..0000000000000000000000000000000000000000
--- a/Utilities/dxflib/dl_dxf.h
+++ /dev/null
@@ -1,395 +0,0 @@
-/****************************************************************************
-** $Id: dl_dxf.h,v 1.33 2005/01/07 15:19:55 andrew Exp $
-**
-** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
-**
-** This file is part of the dxflib project.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid dxflib Professional Edition licenses may use 
-** this file in accordance with the dxflib Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.ribbonsoft.com for further details.
-**
-** Contact info@ribbonsoft.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef DL_DXF_H
-#define DL_DXF_H
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#ifndef __GCC2x__
-#include <sstream>
-#endif
-
-#include "dl_attributes.h"
-#include "dl_codes.h"
-#include "dl_entities.h"
-#include "dl_writer_ascii.h"
-
-class DL_CreationInterface;
-class DL_WriterA;
-
-
-#define DL_VERSION     "2.0.4.6"
-
-#define DL_UNKNOWN               0
-#define DL_LAYER                10
-#define DL_BLOCK                11
-#define DL_ENDBLK               12
-#define DL_LINETYPE             13
-#define DL_SETTING              50
-#define DL_ENTITY_POINT        100
-#define DL_ENTITY_LINE         101
-#define DL_ENTITY_POLYLINE     102
-#define DL_ENTITY_LWPOLYLINE   103
-#define DL_ENTITY_VERTEX       104
-#define DL_ENTITY_SPLINE       105
-#define DL_ENTITY_KNOT         106
-#define DL_ENTITY_CONTROLPOINT 107
-#define DL_ENTITY_ARC          108
-#define DL_ENTITY_CIRCLE       109
-#define DL_ENTITY_ELLIPSE      110
-#define DL_ENTITY_INSERT       111
-#define DL_ENTITY_TEXT         112
-#define DL_ENTITY_MTEXT        113
-#define DL_ENTITY_DIMENSION    114
-#define DL_ENTITY_LEADER       115
-#define DL_ENTITY_HATCH        116
-#define DL_ENTITY_ATTRIB       117
-#define DL_ENTITY_IMAGE        118
-#define DL_ENTITY_IMAGEDEF     119
-#define DL_ENTITY_SEQEND       120
-#define DL_ENTITY_3DFACE       121
-
-
-/**
- * Reading and writing of DXF files.
- *
- * This class can read in a DXF file and calls methods from the 
- * interface DL_EntityContainer to add the entities to the
- * contianer provided by the user of the library.
- *
- * It can also be used to write DXF files to a certain extent.
- *
- * When saving entities, special values for colors and linetypes 
- * can be used:
- *
- * Special colors are 0 (=BYBLOCK) and 256 (=BYLAYER).
- * Special linetypes are "BYLAYER" and "BYBLOCK".
- *
- * @author Andrew Mustun
- */
-class DL_Dxf {
-public:
-    DL_Dxf();
-    ~DL_Dxf();
-
-    bool in(const string& file,
-            DL_CreationInterface* creationInterface);
-    bool readDxfGroups(FILE* fp,
-                       DL_CreationInterface* creationInterface,
-					   int* errorCounter = NULL);
-    static bool getChoppedLine(char* s, unsigned int size,
-                               FILE *stream);
-
-#ifndef __GCC2x__
-
-    bool readDxfGroups(std::stringstream &stream,
-                       DL_CreationInterface* creationInterface,
-					   int* errorCounter = NULL);
-    bool in(std::stringstream &stream,
-            DL_CreationInterface* creationInterface);
-    static bool getChoppedLine(char *s, unsigned int size,
-                               std::stringstream &stream);
-#endif
-
-    static bool stripWhiteSpace(char** s);
-
-    bool processDXFGroup(DL_CreationInterface* creationInterface,
-                         int groupCode, const char* groupValue);
-    void addSetting(DL_CreationInterface* creationInterface);
-    void addLayer(DL_CreationInterface* creationInterface);
-    void addBlock(DL_CreationInterface* creationInterface);
-    void endBlock(DL_CreationInterface* creationInterface);
-
-    void addPoint(DL_CreationInterface* creationInterface);
-    void addLine(DL_CreationInterface* creationInterface);
-	void add3DFace(DL_CreationInterface* creationInterface);
-	
-    void addPolyline(DL_CreationInterface* creationInterface);
-    void addVertex(DL_CreationInterface* creationInterface);
-	
-    void addSpline(DL_CreationInterface* creationInterface);
-    //void addKnot(DL_CreationInterface* creationInterface);
-    //void addControlPoint(DL_CreationInterface* creationInterface);
-	
-    void addArc(DL_CreationInterface* creationInterface);
-    void addCircle(DL_CreationInterface* creationInterface);
-    void addEllipse(DL_CreationInterface* creationInterface);
-    void addInsert(DL_CreationInterface* creationInterface);
-
-    void addMText(DL_CreationInterface* creationInterface);
-	bool handleMTextData(DL_CreationInterface* creationInterface);
-	bool handleLWPolylineData(DL_CreationInterface* creationInterface);
-	bool handleSplineData(DL_CreationInterface* creationInterface);
-	bool handleLeaderData(DL_CreationInterface* creationInterface);
-	bool handleHatchData(DL_CreationInterface* creationInterface);
-	
-    void addText(DL_CreationInterface* creationInterface);
-    void addAttrib(DL_CreationInterface* creationInterface);
-    DL_DimensionData getDimData();
-    void addDimLinear(DL_CreationInterface* creationInterface);
-    void addDimAligned(DL_CreationInterface* creationInterface);
-    void addDimRadial(DL_CreationInterface* creationInterface);
-    void addDimDiametric(DL_CreationInterface* creationInterface);
-    void addDimAngular(DL_CreationInterface* creationInterface);
-    void addDimAngular3P(DL_CreationInterface* creationInterface);
-    void addLeader(DL_CreationInterface* creationInterface);
-    void addHatch(DL_CreationInterface* creationInterface);
-    void addImage(DL_CreationInterface* creationInterface);
-    void addImageDef(DL_CreationInterface* creationInterface);
-
-	void endEntity(DL_CreationInterface* creationInterface);
-	
-    void endSequence(DL_CreationInterface* creationInterface);
-	
-	int  stringToInt(const char* s, bool* ok=NULL);	
-
-    DL_WriterA* out(const char* file,
-                    DL_Codes::version version=VER_2000);
-
-    void writeHeader(DL_WriterA& dw);
-
-    void writePoint(DL_WriterA& dw,
-                    const DL_PointData& data,
-                    const DL_Attributes& attrib);
-    void writeLine(DL_WriterA& dw,
-                   const DL_LineData& data,
-                   const DL_Attributes& attrib);
-    void writePolyline(DL_WriterA& dw,
-                       const DL_PolylineData& data,
-                       const DL_Attributes& attrib);
-    void writeVertex(DL_WriterA& dw,
-                     const DL_VertexData& data);
-    void writePolylineEnd(DL_WriterA& dw);
-    void writeSpline(DL_WriterA& dw,
-                       const DL_SplineData& data,
-                       const DL_Attributes& attrib);
-    void writeControlPoint(DL_WriterA& dw,
-                     const DL_ControlPointData& data);
-    void writeKnot(DL_WriterA& dw,
-                     const DL_KnotData& data);
-    void writeCircle(DL_WriterA& dw,
-                     const DL_CircleData& data,
-                     const DL_Attributes& attrib);
-    void writeArc(DL_WriterA& dw,
-                  const DL_ArcData& data,
-                  const DL_Attributes& attrib);
-    void writeEllipse(DL_WriterA& dw,
-                      const DL_EllipseData& data,
-                      const DL_Attributes& attrib);
-    void writeInsert(DL_WriterA& dw,
-                     const DL_InsertData& data,
-                     const DL_Attributes& attrib);
-    void writeMText(DL_WriterA& dw,
-                    const DL_MTextData& data,
-                    const DL_Attributes& attrib);
-    void writeText(DL_WriterA& dw,
-                    const DL_TextData& data,
-                    const DL_Attributes& attrib);
-    void writeDimAligned(DL_WriterA& dw,
-                         const DL_DimensionData& data,
-                         const DL_DimAlignedData& edata,
-                         const DL_Attributes& attrib);
-    void writeDimLinear(DL_WriterA& dw,
-                        const DL_DimensionData& data,
-                        const DL_DimLinearData& edata,
-                        const DL_Attributes& attrib);
-    void writeDimRadial(DL_WriterA& dw,
-                        const DL_DimensionData& data,
-                        const DL_DimRadialData& edata,
-                        const DL_Attributes& attrib);
-    void writeDimDiametric(DL_WriterA& dw,
-                           const DL_DimensionData& data,
-                           const DL_DimDiametricData& edata,
-                           const DL_Attributes& attrib);
-    void writeDimAngular(DL_WriterA& dw,
-                         const DL_DimensionData& data,
-                         const DL_DimAngularData& edata,
-                         const DL_Attributes& attrib);
-    void writeDimAngular3P(DL_WriterA& dw,
-                           const DL_DimensionData& data,
-                           const DL_DimAngular3PData& edata,
-                           const DL_Attributes& attrib);
-    void writeLeader(DL_WriterA& dw,
-                     const DL_LeaderData& data,
-                     const DL_Attributes& attrib);
-    void writeLeaderVertex(DL_WriterA& dw,
-                           const DL_LeaderVertexData& data);
-    void writeHatch1(DL_WriterA& dw,
-                     const DL_HatchData& data,
-                     const DL_Attributes& attrib);
-    void writeHatch2(DL_WriterA& dw,
-                     const DL_HatchData& data,
-                     const DL_Attributes& attrib);
-    void writeHatchLoop1(DL_WriterA& dw,
-                         const DL_HatchLoopData& data);
-    void writeHatchLoop2(DL_WriterA& dw,
-                         const DL_HatchLoopData& data);
-    void writeHatchEdge(DL_WriterA& dw,
-                        const DL_HatchEdgeData& data);
-
-    int writeImage(DL_WriterA& dw,
-                   const DL_ImageData& data,
-                   const DL_Attributes& attrib);
-
-    void writeImageDef(DL_WriterA& dw, int handle,
-                       const DL_ImageData& data);
-
-    void writeLayer(DL_WriterA& dw,
-                    const DL_LayerData& data,
-                    const DL_Attributes& attrib);
-
-    void writeLineType(DL_WriterA& dw,
-                       const DL_LineTypeData& data);
-
-    void writeAppid(DL_WriterA& dw, const string& name);
-
-    void writeBlock(DL_WriterA& dw,
-                    const DL_BlockData& data);
-    void writeEndBlock(DL_WriterA& dw, const string& name);
-
-    void writeVPort(DL_WriterA& dw);
-    void writeStyle(DL_WriterA& dw);
-    void writeView(DL_WriterA& dw);
-    void writeUcs(DL_WriterA& dw);
-    void writeDimStyle(DL_WriterA& dw, 
-	                   double dimasz, double dimexe, double dimexo,
-					   double dimgap, double dimtxt);
-    void writeBlockRecord(DL_WriterA& dw);
-    void writeObjects(DL_WriterA& dw);
-    void writeObjectsEnd(DL_WriterA& dw);
-
-    /**
-     * Converts the given string into a double or returns the given 
-     * default valud (def) if value is NULL or empty.
-     */
-    static double toReal(const char* value, double def=0.0) {
-        if (value!=NULL && strlen(value)!=0) {
-            char* tmp = new char[strlen(value)+1];
-            strcpy(tmp, value);
-            DL_WriterA::strReplace(tmp, ',', '.');
-            double ret = atof(tmp);
-			delete[] tmp;
-			return ret;
-        } else {
-            return def;
-        }
-    }
-    /**
-     * Converts the given string into an int or returns the given 
-     * default valud (def) if value is NULL or empty.
-     */
-    static int toInt(const char* value, int def=0) {
-        if (value!=NULL && strlen(value)!=0) {
-            return atoi(value);
-        } else {
-            return def;
-        }
-      return def;
-    }
-    /**
-     * Converts the given string into a string or returns the given 
-     * default valud (def) if value is NULL or empty.
-     */
-    static const char* toString(const char* value, const char* def="") {
-        if (value!=NULL && strlen(value)!=0) {
-            return value;
-        } else {
-            return def;
-        }
-    }
-
-	static bool checkVariable(const char* var, DL_Codes::version version);
-
-	DL_Codes::version getVersion() {
-		return version;
-	}
-
-	int getLibVersion(const char* str);
-
-	static void test();
-
-private:
-    DL_Codes::version version;
-    unsigned long styleHandleStd;
-
-	string polylineLayer;
-    double* vertices;
-    int maxVertices;
-    int vertexIndex;
-	
-    double* knots;
-    int maxKnots;
-    int knotIndex;
-	
-    double* controlPoints;
-    int maxControlPoints;
-    int controlPointIndex;
-
-    double* leaderVertices;
-    int maxLeaderVertices;
-    int leaderVertexIndex;
-
-    // array of hatch loops
-    DL_HatchLoopData* hatchLoops;
-    int maxHatchLoops;
-    int hatchLoopIndex;
-    // array in format [loop#][edge#]
-    DL_HatchEdgeData** hatchEdges;
-    int* maxHatchEdges;
-    int* hatchEdgeIndex;
-    bool dropEdges;
-
-    // Bulge for the next vertex.
-    double bulge;
-
-    // Only the useful part of the group code
-    char groupCodeTmp[DL_DXF_MAXLINE+1];
-    // ...same as integer
-    unsigned int groupCode;
-    // Only the useful part of the group value
-    char groupValue[DL_DXF_MAXLINE+1];
-    // Current entity type
-    int currentEntity;
-    // Value of the current setting
-    char settingValue[DL_DXF_MAXLINE+1];
-    // Key of the current setting (e.g. "$ACADVER")
-    char settingKey[DL_DXF_MAXLINE+1];
-    // Stores the group codes
-    char values[DL_DXF_MAXGROUPCODE][DL_DXF_MAXLINE+1];
-    // First call of this method. We initialize all group values in
-    //  the first call.
-    bool firstCall;
-    // Attributes of the current entity (layer, color, width, line type)
-    DL_Attributes attrib;
-	// library version. hex: 0x20003001 = 2.0.3.1
-	int libVersion;
-};
-
-#endif
-
-// EOF
diff --git a/Utilities/dxflib/dl_entities.h b/Utilities/dxflib/dl_entities.h
deleted file mode 100644
index 39c724dc816e6a16acf08e3f8d1c8834244494d5..0000000000000000000000000000000000000000
--- a/Utilities/dxflib/dl_entities.h
+++ /dev/null
@@ -1,1399 +0,0 @@
-/****************************************************************************
-** $Id: dl_entities.h,v 1.9 2004/08/07 08:19:25 andrew Exp $
-**
-** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
-**
-** This file is part of the dxflib project.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid dxflib Professional Edition licenses may use 
-** this file in accordance with the dxflib Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.ribbonsoft.com for further details.
-**
-** Contact info@ribbonsoft.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef DL_ENTITIES_H
-#define DL_ENTITIES_H
-
-
-#include <string>
-using std::string;
-
-/**
- * Layer Data.
- *
- * @author Andrew Mustun
- */
-struct DL_LayerData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_LayerData(const string& lName,
-                 int lFlags) {
-        name = lName;
-        flags = lFlags;
-    }
-
-    /** Layer name. */
-    string name;
-    /** Layer flags. (1 = frozen, 2 = frozen by default, 4 = locked) */
-    int flags;
-};
-
-
-
-/**
- * Block Data.
- *
- * @author Andrew Mustun
- */
-struct DL_BlockData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_BlockData(const string& bName,
-                 int bFlags,
-                 double bbpx, double bbpy, double bbpz) {
-        name = bName;
-        flags = bFlags;
-        bpx = bbpx;
-        bpy = bbpy;
-        bpz = bbpz;
-    }
-
-    /** Block name. */
-    string name;
-    /** Block flags. (not used currently) */
-    int flags;
-    /** X Coordinate of base point. */
-    double bpx;
-    /** Y Coordinate of base point. */
-    double bpy;
-    /** Z Coordinate of base point. */
-    double bpz;
-};
-
-
-
-/**
- * Line Type Data.
- *
- * @author Andrew Mustun
- */
-struct DL_LineTypeData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_LineTypeData(const string& lName,
-                    int lFlags) {
-        name = lName;
-        flags = lFlags;
-    }
-
-    /** Line type name. */
-    string name;
-    /** Line type flags. */
-    int flags;
-};
-
-
-
-/**
- * Point Data.
- *
- * @author Andrew Mustun
- */
-struct DL_PointData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_PointData(double px=0.0, double py=0.0, double pz=0.0) {
-        x = px;
-        y = py;
-        z = pz;
-    }
-
-    /*! X Coordinate of the point. */
-    double x;
-    /*! Y Coordinate of the point. */
-    double y;
-    /*! Z Coordinate of the point. */
-    double z;
-};
-
-
-
-/**
- * Line Data.
- *
- * @author Andrew Mustun
- */
-struct DL_LineData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_LineData(double lx1, double ly1, double lz1,
-                double lx2, double ly2, double lz2) {
-        x1 = lx1;
-        y1 = ly1;
-        z1 = lz1;
-
-        x2 = lx2;
-        y2 = ly2;
-        z2 = lz2;
-    }
-
-    /*! X Start coordinate of the point. */
-    double x1;
-    /*! Y Start coordinate of the point. */
-    double y1;
-    /*! Z Start coordinate of the point. */
-    double z1;
-
-    /*! X End coordinate of the point. */
-    double x2;
-    /*! Y End coordinate of the point. */
-    double y2;
-    /*! Z End coordinate of the point. */
-    double z2;
-};
-
-/**
- * 3DFace Data.
- *
- * @author Vincent Poulain
- */
-struct DL_3DFaceData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_3DFaceData(double Dx1, double Dy1, double Dz1,
-                double Dx2, double Dy2, double Dz2,
-				double Dx3, double Dy3, double Dz3,
-                double Dx4, double Dy4, double Dz4
-				) {
-        x1 = Dx1;
-        y1 = Dy1;
-        z1 = Dz1;
-
-        x2 = Dx2;
-        y2 = Dy2;
-        z2 = Dz2;
-		
-		x3 = Dx3;
-        y3 = Dy3;
-        z3 = Dz3;
-
-        x4 = Dx4;
-        y4 = Dy4;
-        z4 = Dz4;
-		
-    }
-
-    /*! X Start coordinate of the point. */
-    double x1;
-    /*! Y Start coordinate of the point. */
-    double y1;
-    /*! Z Start coordinate of the point. */
-    double z1;
-
-    /*! X End coordinate of the point. */
-    double x2;
-    /*! Y End coordinate of the point. */
-    double y2;
-    /*! Z End coordinate of the point. */
-    double z2;
-	
-	    /*! X Start coordinate of the point. */
-    double x3;
-    /*! Y Start coordinate of the point. */
-    double y3;
-    /*! Z Start coordinate of the point. */
-    double z3;
-
-    /*! X End coordinate of the point. */
-    double x4;
-    /*! Y End coordinate of the point. */
-    double y4;
-    /*! Z End coordinate of the point. */
-    double z4;
-};
-
-
-
-
-/**
- * Arc Data.
- *
- * @author Andrew Mustun
- */
-struct DL_ArcData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_ArcData(double acx, double acy, double acz,
-               double aRadius,
-               double aAngle1, double aAngle2) {
-
-        cx = acx;
-        cy = acy;
-        cz = acz;
-        radius = aRadius;
-        angle1 = aAngle1;
-        angle2 = aAngle2;
-    }
-
-    /*! X Coordinate of center point. */
-    double cx;
-    /*! Y Coordinate of center point. */
-    double cy;
-    /*! Z Coordinate of center point. */
-    double cz;
-
-    /*! Radius of arc. */
-    double radius;
-    /*! Startangle of arc in degrees. */
-    double angle1;
-    /*! Endangle of arc in degrees. */
-    double angle2;
-};
-
-
-
-/**
- * Circle Data.
- *
- * @author Andrew Mustun
- */
-struct DL_CircleData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_CircleData(double acx, double acy, double acz,
-                  double aRadius) {
-
-        cx = acx;
-        cy = acy;
-        cz = acz;
-        radius = aRadius;
-    }
-
-    /*! X Coordinate of center point. */
-    double cx;
-    /*! Y Coordinate of center point. */
-    double cy;
-    /*! Z Coordinate of center point. */
-    double cz;
-
-    /*! Radius of arc. */
-    double radius;
-};
-
-
-
-/**
- * Polyline Data.
- *
- * @author Andrew Mustun
- */
-struct DL_PolylineData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_PolylineData(int pNumber, int pMVerteces, int pNVerteces, int pFlags) {
-        number = pNumber;
-        m = pMVerteces;
-        n = pNVerteces;
-        flags = pFlags;
-    }
-
-    /*! Number of vertices in this polyline. */
-    unsigned int number;
-
-    /*! Number of vertices in m direction if polyline is a polygon mesh. */
-    unsigned int m;
-
-    /*! Number of vertices in n direction if polyline is a polygon mesh. */
-    unsigned int n;
-
-    /*! Flags */
-    int flags;
-};
-
-
-
-/**
- * Vertex Data.
- *
- * @author Andrew Mustun
- */
-struct DL_VertexData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_VertexData(double px=0.0, double py=0.0, double pz=0.0,
-                  double pBulge=0.0) {
-        x = px;
-        y = py;
-        z = pz;
-        bulge = pBulge;
-    }
-
-    /*! X Coordinate of the vertex. */
-    double x;
-    /*! Y Coordinate of the vertex. */
-    double y;
-    /*! Z Coordinate of the vertex. */
-    double z;
-    /*! Bulge of vertex.
-     * (The tangent of 1/4 of the arc angle or 0 for lines) */
-    double bulge;
-};
-
-
-
-/**
- * Spline Data.
- *
- * @author Andrew Mustun
- */
-struct DL_SplineData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_SplineData(int pDegree, int pNKnots, int pNControl, int pFlags) {
-		degree = pDegree;
-		nKnots = pNKnots;
-		nControl = pNControl;
-        flags = pFlags;
-    }
-
-    /*! Degree of the spline curve. */
-    unsigned int degree;
-
-    /*! Number of knots. */
-    unsigned int nKnots;
-
-    /*! Number of control points. */
-    unsigned int nControl;
-
-    /*! Flags */
-    int flags;
-};
-
-
-
-/**
- * Spline knot data.
- *
- * @author Andrew Mustun
- */
-struct DL_KnotData {
-    DL_KnotData() {}
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_KnotData(double pk) {
-        k = pk;
-    }
-
-    /*! Knot value. */
-    double k;
-};
-
-
-
-/**
- * Spline control point data.
- *
- * @author Andrew Mustun
- */
-struct DL_ControlPointData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_ControlPointData(double px, double py, double pz) {
-        x = px;
-        y = py;
-        z = pz;
-    }
-
-    /*! X coordinate of the control point. */
-    double x;
-    /*! Y coordinate of the control point. */
-    double y;
-    /*! Z coordinate of the control point. */
-    double z;
-};
-
-
-/**
- * Ellipse Data.
- *
- * @author Andrew Mustun
- */
-struct DL_EllipseData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_EllipseData(double ecx, double ecy, double ecz,
-                   double emx, double emy, double emz,
-                   double eRatio,
-                   double eAngle1, double eAngle2) {
-
-        cx = ecx;
-        cy = ecy;
-        cz = ecz;
-        mx = emx;
-        my = emy;
-        mz = emz;
-        ratio = eRatio;
-        angle1 = eAngle1;
-        angle2 = eAngle2;
-    }
-
-    /*! X Coordinate of center point. */
-    double cx;
-    /*! Y Coordinate of center point. */
-    double cy;
-    /*! Z Coordinate of center point. */
-    double cz;
-
-    /*! X coordinate of the endpoint of the major axis. */
-    double mx;
-    /*! Y coordinate of the endpoint of the major axis. */
-    double my;
-    /*! Z coordinate of the endpoint of the major axis. */
-    double mz;
-
-    /*! Ratio of minor axis to major axis.. */
-    double ratio;
-    /*! Startangle of ellipse in rad. */
-    double angle1;
-    /*! Endangle of ellipse in rad. */
-    double angle2;
-};
-
-
-
-/**
- * Insert Data.
- *
- * @author Andrew Mustun
- */
-struct DL_InsertData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_InsertData(const string& iName,
-                  double iipx, double iipy, double iipz,
-                  double isx, double isy, double isz,
-                  double iAngle,
-                  int iCols, int iRows,
-                  double iColSp, double iRowSp) {
-        name = iName;
-        ipx = iipx;
-        ipy = iipy;
-        ipz = iipz;
-        sx = isx;
-        sy = isy;
-        sz = isz;
-        angle = iAngle;
-        cols = iCols;
-        rows = iRows;
-        colSp = iColSp;
-        rowSp = iRowSp;
-    }
-
-    /*! Name of the referred block. */
-    string name;
-    /*! X Coordinate of insertion point. */
-    double ipx;
-    /*! Y Coordinate of insertion point. */
-    double ipy;
-    /*! Z Coordinate of insertion point. */
-    double ipz;
-    /*! X Scale factor. */
-    double sx;
-    /*! Y Scale factor. */
-    double sy;
-    /*! Z Scale factor. */
-    double sz;
-    /*! Rotation angle in rad. */
-    double angle;
-    /*! Number of colums if we insert an array of the block or 1. */
-    int cols;
-    /*! Number of rows if we insert an array of the block or 1. */
-    int rows;
-    /*! Values for the spacing between cols. */
-    double colSp;
-    /*! Values for the spacing between rows. */
-    double rowSp;
-};
-
-
-
-/**
- * MText Data.
- *
- * @author Andrew Mustun
- */
-struct DL_MTextData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_MTextData(double tipx, double tipy, double tipz,
-                 double tHeight, double tWidth,
-                 int tAttachmentPoint,
-                 int tDrawingDirection,
-                 int tLineSpacingStyle,
-                 double tLineSpacingFactor,
-                 const string& tText,
-                 const string& tStyle,
-                 double tAngle) {
-        ipx = tipx;
-        ipy = tipy;
-        ipz = tipz;
-
-        height = tHeight;
-        width = tWidth;
-        attachmentPoint = tAttachmentPoint;
-        drawingDirection = tDrawingDirection;
-        lineSpacingStyle = tLineSpacingStyle;
-        lineSpacingFactor = tLineSpacingFactor;
-        text = tText;
-        style = tStyle;
-        angle = tAngle;
-    }
-
-    /*! X Coordinate of insertion point. */
-    double ipx;
-    /*! Y Coordinate of insertion point. */
-    double ipy;
-    /*! Z Coordinate of insertion point. */
-    double ipz;
-    /*! Text height */
-    double height;
-    /*! Width of the text box. */
-    double width;
-    /**
-     * Attachment point.
-     *
-     * 1 = Top left, 2 = Top center, 3 = Top right,
-     * 4 = Middle left, 5 = Middle center, 6 = Middle right,
-     * 7 = Bottom left, 8 = Bottom center, 9 = Bottom right
-     */
-    int attachmentPoint;
-    /**
-     * Drawing direction.
-     *
-     * 1 = left to right, 3 = top to bottom, 5 = by style
-     */
-    int drawingDirection;
-    /**
-     * Line spacing style.
-     *
-     * 1 = at least, 2 = exact
-     */
-    int lineSpacingStyle;
-    /**
-     * Line spacing factor. 0.25 .. 4.0  
-     */
-    double lineSpacingFactor;
-    /*! Text string. */
-    string text;
-    /*! Style string. */
-    string style;
-    /*! Rotation angle. */
-    double angle;
-};
-
-
-
-/**
- * Text Data.
- *
- * @author Andrew Mustun
- */
-struct DL_TextData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_TextData(double tipx, double tipy, double tipz,
-                double tapx, double tapy, double tapz,
-                double tHeight, double tXScaleFactor,
-                int tTextGenerationFlags,
-                int tHJustification,
-                int tVJustification,
-                const string& tText,
-                const string& tStyle,
-                double tAngle) {
-        ipx = tipx;
-        ipy = tipy;
-        ipz = tipz;
-
-        apx = tapx;
-        apy = tapy;
-        apz = tapz;
-
-        height = tHeight;
-        xScaleFactor = tXScaleFactor;
-        textGenerationFlags = tTextGenerationFlags;
-        hJustification = tHJustification;
-        vJustification = tVJustification;
-        text = tText;
-        style = tStyle;
-        angle = tAngle;
-    }
-
-    /*! X Coordinate of insertion point. */
-    double ipx;
-    /*! Y Coordinate of insertion point. */
-    double ipy;
-    /*! Z Coordinate of insertion point. */
-    double ipz;
-
-    /*! X Coordinate of alignment point. */
-    double apx;
-    /*! Y Coordinate of alignment point. */
-    double apy;
-    /*! Z Coordinate of alignment point. */
-    double apz;
-
-    /*! Text height */
-    double height;
-    /*! Relative X scale factor. */
-    double xScaleFactor;
-    /*! 0 = default, 2 = Backwards, 4 = Upside down */
-    int textGenerationFlags;
-    /**
-     * Horizontal justification.
-     * 
-     * 0 = Left (default), 1 = Center, 2 = Right,
-     * 3 = Aligned, 4 = Middle, 5 = Fit
-     * For 3, 4, 5 the vertical alignment has to be 0.
-     */
-    int hJustification;
-    /**
-     * Vertical justification. 
-     *
-     * 0 = Baseline (default), 1 = Bottom, 2 = Middle, 3= Top
-     */
-    int vJustification;
-    /*! Text string. */
-    string text;
-    /*! Style (font). */
-    string style;
-    /*! Rotation angle of dimension text away from default orientation. */
-    double angle;
-};
-
-
-
-/**
- * Generic Dimension Data.
- *
- * @author Andrew Mustun
- */
-struct DL_DimensionData {
-    /**
-    * Constructor.
-    * Parameters: see member variables.
-    */
-    DL_DimensionData(double ddpx, double ddpy, double ddpz,
-                     double dmpx, double dmpy, double dmpz,
-                     int dType,
-                     int dAttachmentPoint,
-                     int dLineSpacingStyle,
-                     double dLineSpacingFactor,
-                     const string& dText,
-                     const string& dStyle,
-                     double dAngle) {
-
-        dpx = ddpx;
-        dpy = ddpy;
-        dpz = ddpz;
-
-        mpx = dmpx;
-        mpy = dmpy;
-        mpz = dmpz;
-
-        type = dType;
-
-        attachmentPoint = dAttachmentPoint;
-        lineSpacingStyle = dLineSpacingStyle;
-        lineSpacingFactor = dLineSpacingFactor;
-        text = dText;
-        style = dStyle;
-        angle = dAngle;
-    }
-
-    /*! X Coordinate of definition point. */
-    double dpx;
-    /*! Y Coordinate of definition point. */
-    double dpy;
-    /*! Z Coordinate of definition point. */
-    double dpz;
-    /*! X Coordinate of middle point of the text. */
-    double mpx;
-    /*! Y Coordinate of middle point of the text. */
-    double mpy;
-    /*! Z Coordinate of middle point of the text. */
-    double mpz;
-    /**
-     * Dimension type.
-     *
-     * 0   Rotated, horizontal, or vertical            
-     * 1   Aligned                                     
-     * 2   Angular                                     
-     * 3   Diametric                                    
-     * 4   Radius                                      
-     * 5   Angular 3-point                             
-     * 6   Ordinate                                    
-     * 64  Ordinate type. This is a bit value (bit 7)  
-     *     used only with integer value 6. If set,     
-     *     ordinate is X-type; if not set, ordinate is 
-     *     Y-type                                      
-     * 128 This is a bit value (bit 8) added to the    
-     *     other group 70 values if the dimension text 
-     *     has been positioned at a user-defined       
-     *    location rather than at the default location
-     */
-    int type;
-    /**
-     * Attachment point.
-     *
-     * 1 = Top left, 2 = Top center, 3 = Top right,
-     * 4 = Middle left, 5 = Middle center, 6 = Middle right,
-     * 7 = Bottom left, 8 = Bottom center, 9 = Bottom right,
-     */
-    int attachmentPoint;
-    /**
-     * Line spacing style.
-     *
-     * 1 = at least, 2 = exact
-     */
-    int lineSpacingStyle;
-    /**
-     * Line spacing factor. 0.25 .. 4.0  
-     */
-    double lineSpacingFactor;
-    /**
-     * Text string. 
-     *
-     * Text string entered explicitly by user or null
-     * or "<>" for the actual measurement or " " (one blank space).
-     * for supressing the text.
-     */
-    string text;
-    /*! Dimension style (font name). */
-    string style;
-    /**
-    * Rotation angle of dimension text away from
-     * default orientation.
-    */
-    double angle;
-};
-
-
-
-/**
- * Aligned Dimension Data.
- *
- * @author Andrew Mustun
- */
-struct DL_DimAlignedData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_DimAlignedData(double depx1, double depy1, double depz1,
-                      double depx2, double depy2, double depz2) {
-
-        epx1 = depx1;
-        epy1 = depy1;
-        epz1 = depz1;
-
-        epx2 = depx2;
-        epy2 = depy2;
-        epz2 = depz2;
-    }
-
-    /*! X Coordinate of Extension point 1. */
-    double epx1;
-    /*! Y Coordinate of Extension point 1. */
-    double epy1;
-    /*! Z Coordinate of Extension point 1. */
-    double epz1;
-
-    /*! X Coordinate of Extension point 2. */
-    double epx2;
-    /*! Y Coordinate of Extension point 2. */
-    double epy2;
-    /*! Z Coordinate of Extension point 2. */
-    double epz2;
-};
-
-
-
-/**
- * Linear Dimension Data.
- *
- * @author Andrew Mustun
- */
-struct DL_DimLinearData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_DimLinearData(double ddpx1, double ddpy1, double ddpz1,
-                     double ddpx2, double ddpy2, double ddpz2,
-                     double dAngle, double dOblique) {
-
-        dpx1 = ddpx1;
-        dpy1 = ddpy1;
-        dpz1 = ddpz1;
-
-        dpx2 = ddpx2;
-        dpy2 = ddpy2;
-        dpz2 = ddpz2;
-
-        angle = dAngle;
-        oblique = dOblique;
-    }
-
-    /*! X Coordinate of Extension point 1. */
-    double dpx1;
-    /*! Y Coordinate of Extension point 1. */
-    double dpy1;
-    /*! Z Coordinate of Extension point 1. */
-    double dpz1;
-
-    /*! X Coordinate of Extension point 2. */
-    double dpx2;
-    /*! Y Coordinate of Extension point 2. */
-    double dpy2;
-    /*! Z Coordinate of Extension point 2. */
-    double dpz2;
-
-    /*! Rotation angle (angle of dimension line) in degrees. */
-    double angle;
-    /*! Oblique angle in degrees. */
-    double oblique;
-};
-
-
-
-/**
- * Radial Dimension Data.
- *
- * @author Andrew Mustun
- */
-struct DL_DimRadialData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_DimRadialData(double ddpx, double ddpy, double ddpz, double dleader) {
-        dpx = ddpx;
-        dpy = ddpy;
-        dpz = ddpz;
-
-        leader = dleader;
-    }
-
-    /*! X Coordinate of definition point. */
-    double dpx;
-    /*! Y Coordinate of definition point. */
-    double dpy;
-    /*! Z Coordinate of definition point. */
-    double dpz;
-
-    /*! Leader length */
-    double leader;
-};
-
-
-
-/**
- * Diametric Dimension Data.
- *
- * @author Andrew Mustun
- */
-struct DL_DimDiametricData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_DimDiametricData(double ddpx, double ddpy, double ddpz, double dleader) {
-        dpx = ddpx;
-        dpy = ddpy;
-        dpz = ddpz;
-
-        leader = dleader;
-    }
-
-    /*! X Coordinate of definition point. */
-    double dpx;
-    /*! Y Coordinate of definition point. */
-    double dpy;
-    /*! Z Coordinate of definition point. */
-    double dpz;
-
-    /*! Leader length */
-    double leader;
-};
-
-
-
-/**
- * Angular Dimension Data.
- *
- * @author Andrew Mustun
- */
-struct DL_DimAngularData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_DimAngularData(double ddpx1, double ddpy1, double ddpz1,
-                      double ddpx2, double ddpy2, double ddpz2,
-                      double ddpx3, double ddpy3, double ddpz3,
-                      double ddpx4, double ddpy4, double ddpz4) {
-
-        dpx1 = ddpx1;
-        dpy1 = ddpy1;
-        dpz1 = ddpz1;
-
-        dpx2 = ddpx2;
-        dpy2 = ddpy2;
-        dpz2 = ddpz2;
-
-        dpx3 = ddpx3;
-        dpy3 = ddpy3;
-        dpz3 = ddpz3;
-
-        dpx4 = ddpx4;
-        dpy4 = ddpy4;
-        dpz4 = ddpz4;
-    }
-
-    /*! X Coordinate of definition point 1. */
-    double dpx1;
-    /*! Y Coordinate of definition point 1. */
-    double dpy1;
-    /*! Z Coordinate of definition point 1. */
-    double dpz1;
-
-    /*! X Coordinate of definition point 2. */
-    double dpx2;
-    /*! Y Coordinate of definition point 2. */
-    double dpy2;
-    /*! Z Coordinate of definition point 2. */
-    double dpz2;
-
-    /*! X Coordinate of definition point 3. */
-    double dpx3;
-    /*! Y Coordinate of definition point 3. */
-    double dpy3;
-    /*! Z Coordinate of definition point 3. */
-    double dpz3;
-
-    /*! X Coordinate of definition point 4. */
-    double dpx4;
-    /*! Y Coordinate of definition point 4. */
-    double dpy4;
-    /*! Z Coordinate of definition point 4. */
-    double dpz4;
-};
-
-
-/**
- * Angular Dimension Data (3 points version).
- *
- * @author Andrew Mustun
- */
-struct DL_DimAngular3PData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_DimAngular3PData(double ddpx1, double ddpy1, double ddpz1,
-                        double ddpx2, double ddpy2, double ddpz2,
-                        double ddpx3, double ddpy3, double ddpz3) {
-
-        dpx1 = ddpx1;
-        dpy1 = ddpy1;
-        dpz1 = ddpz1;
-
-        dpx2 = ddpx2;
-        dpy2 = ddpy2;
-        dpz2 = ddpz2;
-
-        dpx3 = ddpx3;
-        dpy3 = ddpy3;
-        dpz3 = ddpz3;
-    }
-
-    /*! X Coordinate of definition point 1. */
-    double dpx1;
-    /*! Y Coordinate of definition point 1. */
-    double dpy1;
-    /*! Z Coordinate of definition point 1. */
-    double dpz1;
-
-    /*! X Coordinate of definition point 2. */
-    double dpx2;
-    /*! Y Coordinate of definition point 2. */
-    double dpy2;
-    /*! Z Coordinate of definition point 2. */
-    double dpz2;
-
-    /*! X Coordinate of definition point 3. */
-    double dpx3;
-    /*! Y Coordinate of definition point 3. */
-    double dpy3;
-    /*! Z Coordinate of definition point 3. */
-    double dpz3;
-};
-
-
-
-/**
- * Leader (arrow).
- *
- * @author Andrew Mustun
- */
-struct DL_LeaderData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_LeaderData(int lArrowHeadFlag,
-                  int lLeaderPathType,
-                  int lLeaderCreationFlag,
-                  int lHooklineDirectionFlag,
-                  int lHooklineFlag,
-                  double lTextAnnotationHeight,
-                  double lTextAnnotationWidth,
-                  int lNumber) {
-
-        arrowHeadFlag = lArrowHeadFlag;
-        leaderPathType = lLeaderPathType;
-        leaderCreationFlag = lLeaderCreationFlag;
-        hooklineDirectionFlag = lHooklineDirectionFlag;
-        hooklineFlag = lHooklineFlag;
-        textAnnotationHeight = lTextAnnotationHeight;
-        textAnnotationWidth = lTextAnnotationWidth;
-        number = lNumber;
-    }
-
-    /*! Arrow head flag (71). */
-    int arrowHeadFlag;
-    /*! Leader path type (72). */
-    int leaderPathType;
-    /*! Leader creation flag (73). */
-    int leaderCreationFlag;
-    /*! Hookline direction flag (74). */
-    int hooklineDirectionFlag;
-    /*! Hookline flag (75) */
-    int hooklineFlag;
-    /*! Text annotation height (40). */
-    double textAnnotationHeight;
-    /*! Text annotation width (41) */
-    double textAnnotationWidth;
-    /*! Number of vertices in leader (76). */
-    int number;
-};
-
-
-
-/**
- * Leader Vertex Data.
- *
- * @author Andrew Mustun
- */
-struct DL_LeaderVertexData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_LeaderVertexData(double px=0.0, double py=0.0, double pz=0.0) {
-        x = px;
-        y = py;
-        z = pz;
-    }
-
-    /*! X Coordinate of the vertex. */
-    double x;
-    /*! Y Coordinate of the vertex. */
-    double y;
-    /*! Z Coordinate of the vertex. */
-    double z;
-};
-
-
-
-/**
- * Hatch data.
- */
-struct DL_HatchData {
-    /**
-     * Default constructor.
-     */
-    DL_HatchData() {}
-
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_HatchData(int hNumLoops,
-                 bool hSolid,
-                 double hScale,
-                 double hAngle,
-                 const string& hPattern) {
-        numLoops = hNumLoops;
-        solid = hSolid;
-        scale = hScale;
-        angle = hAngle;
-        pattern = hPattern;
-    }
-
-    /*! Number of boundary paths (loops). */
-    int numLoops;
-    /*! Solid fill flag (true=solid, false=pattern). */
-    bool solid;
-    /*! Pattern scale or spacing */
-    double scale;
-    /*! Pattern angle */
-    double angle;
-    /*! Pattern name. */
-    string pattern;
-};
-
-
-
-/**
- * Hatch boundary path (loop) data.
- */
-struct DL_HatchLoopData {
-    /**
-     * Default constructor.
-     */
-    DL_HatchLoopData() {}
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_HatchLoopData(int hNumEdges) {
-        numEdges = hNumEdges;
-    }
-
-    /*! Number of edges in this loop. */
-    int numEdges;
-};
-
-
-
-/**
- * Hatch edge data.
- */
-struct DL_HatchEdgeData {
-    /**
-     * Default constructor.
-     */
-    DL_HatchEdgeData() {
-        defined = false;
-    }
-
-    /**
-     * Constructor for a line edge.
-     * Parameters: see member variables.
-     */
-    DL_HatchEdgeData(double lx1, double ly1,
-                     double lx2, double ly2) {
-        x1 = lx1;
-        y1 = ly1;
-        x2 = lx2;
-        y2 = ly2;
-        type = 1;
-        defined = true;
-    }
-
-    /**
-     * Constructor for an arc edge.
-     * Parameters: see member variables.
-     */
-    DL_HatchEdgeData(double acx, double acy,
-                     double aRadius,
-                     double aAngle1, double aAngle2,
-                     bool aCcw) {
-        cx = acx;
-        cy = acy;
-        radius = aRadius;
-        angle1 = aAngle1;
-        angle2 = aAngle2;
-        ccw = aCcw;
-        type = 2;
-        defined = true;
-    }
-
-    /**
-     * Edge type. 1=line, 2=arc.
-     */
-    int type;
-
-    /**
-     * Set to true if this edge is fully defined.
-     */
-    bool defined;
-
-    /*! Start point (X). */
-    double x1;
-    /*! Start point (Y). */
-    double y1;
-    /*! End point (X). */
-    double x2;
-    /*! End point (Y). */
-    double y2;
-    /*! Center point of arc (X). */
-    double cx;
-    /*! Center point of arc (Y). */
-    double cy;
-    /*! Arc radius. */
-    double radius;
-    /*! Start angle. */
-    double angle1;
-    /*! End angle. */
-    double angle2;
-    /*! Counterclockwise flag. */
-    bool ccw;
-};
-
-
-
-/**
- * Image Data.
- *
- * @author Andrew Mustun
- */
-struct DL_ImageData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_ImageData(const string& iref,
-                  double iipx, double iipy, double iipz,
-				  double iux, double iuy, double iuz,
-				  double ivx, double ivy, double ivz,
-				  int iwidth, int iheight,
-				  int ibrightness, int icontrast, int ifade) {
-        ref = iref;
-        ipx = iipx;
-        ipy = iipy;
-        ipz = iipz;
-		ux = iux;
-		uy = iuy;
-		uz = iuz;
-		vx = ivx;
-		vy = ivy;
-		vz = ivz;
-		width = iwidth;
-		height = iheight;
-		brightness = ibrightness;
-		contrast = icontrast;
-		fade = ifade;
-    }
-
-    /*! Reference to the image file 
-	    (unique, used to refer to the image def object). */
-    string ref;
-    /*! X Coordinate of insertion point. */
-    double ipx;
-    /*! Y Coordinate of insertion point. */
-    double ipy;
-    /*! Z Coordinate of insertion point. */
-    double ipz;
-	/*! X Coordinate of u vector along bottom of image. */
-	double ux;
-	/*! Y Coordinate of u vector along bottom of image. */
-	double uy;
-	/*! Z Coordinate of u vector along bottom of image. */
-	double uz;
-	/*! X Coordinate of v vector along left side of image. */
-	double vx;
-	/*! Y Coordinate of v vector along left side of image. */
-	double vy;
-	/*! Z Coordinate of v vector along left side of image. */
-	double vz;
-	/*! Width of image in pixel. */
-	int width;
-	/*! Height of image in pixel. */
-	int height;
-	/*! Brightness (0..100, default = 50). */
-	int brightness;
-	/*! Contrast (0..100, default = 50). */
-	int contrast;
-	/*! Fade (0..100, default = 0). */
-	int fade;
-};
-
-
-
-/**
- * Image Definition Data.
- *
- * @author Andrew Mustun
- */
-struct DL_ImageDefData {
-    /**
-     * Constructor.
-     * Parameters: see member variables.
-     */
-    DL_ImageDefData(const string& iref,
-				 const string& ifile) {
-        ref = iref;
-		file = ifile;
-    }
-
-    /*! Reference to the image file 
-	    (unique, used to refer to the image def object). */
-    string ref;
-
-	/*! Image file */
-	string file;
-};
-
-#endif
-
-// EOF
-
diff --git a/Utilities/dxflib/dl_exception.h b/Utilities/dxflib/dl_exception.h
deleted file mode 100644
index 6f8fbd49b44fe65744c2911337c3830a76ee354b..0000000000000000000000000000000000000000
--- a/Utilities/dxflib/dl_exception.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/****************************************************************************
-** $Id: dl_exception.h 163 2003-07-01 15:51:48Z andrew $
-**
-** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
-** Copyright (C) 2001 Robert J. Campbell Jr.
-**
-** This file is part of the dxflib project.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid dxflib Professional Edition licenses may use 
-** this file in accordance with the dxflib Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.ribbonsoft.com for further details.
-**
-** Contact info@ribbonsoft.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef DL_EXCEPTION_H
-#define DL_EXCEPTION_H
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-/**
- * Used for exception handling.
- */
-class DL_Exception {}
-;
-
-/**
- * Used for exception handling.
- */
-class DL_NullStrExc : public DL_Exception {}
-;
-
-/**
- * Used for exception handling.
- */
-class DL_GroupCodeExc : public DL_Exception {
-    DL_GroupCodeExc(int gc=0) : groupCode(gc) {}
-    int groupCode;
-};
-#endif
-
diff --git a/Utilities/dxflib/dl_extrusion.h b/Utilities/dxflib/dl_extrusion.h
deleted file mode 100644
index fd235e61b7fbdcd2a1981eb6d8abb3c22e3a8a2b..0000000000000000000000000000000000000000
--- a/Utilities/dxflib/dl_extrusion.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/****************************************************************************
-** $Id: dl_extrusion.h 273 2005-02-28 18:14:39Z andrew $
-**
-** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
-**
-** This file is part of the dxflib project.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid dxflib Professional Edition licenses may use 
-** this file in accordance with the dxflib Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.ribbonsoft.com for further details.
-**
-** Contact info@ribbonsoft.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef DL_EXTRUSION_H
-#define DL_EXTRUSION_H
-
-#include <math.h>
-
-
-/**
- * Storing and passing around attributes. Attributes
- * are the layer name, color, width and line type.
- *
- * @author Andrew Mustun
- */
-class DL_Extrusion {
-
-public:
-
-    /**
-     * Default constructor.
-     */
-    DL_Extrusion() {
-		direction = new double[3];
-        setDirection(0.0, 0.0, 1.0);
-        setElevation(0.0);
-    }
-
-
-    /**
-     * Destructor.
-     */
-	~DL_Extrusion() {
-		delete direction ;
-    }
-
-
-    /**
-     * Constructor for DXF extrusion.
-     *
-     * @param direction Vector of axis along which the entity shall be extruded
-	 *                  this is also the Z axis of the Entity coordinate system
-     * @param elevation Distance of the entities XY plane from the origin of the
-	 *                  world coordinate system
-     */
-    DL_Extrusion(double dx, double dy, double dz, double elevation) {
-		direction = new double[3];
-		setDirection(dx, dy, dz);
-        setElevation(elevation);
-    }
-
-
-
-    /**
-     * Sets the direction vector. 
-     */
-    void setDirection(double dx, double dy, double dz) {
-		direction[0]=dx;
-        direction[1]=dy;
-        direction[2]=dz;
-    }
-
-
-
-    /**
-     * @return direction vector.
-     */
-    double* getDirection() const {
-        return direction;
-    }
-
-
-
-    /**
-     * @return direction vector.
-     */
-    void getDirection(double dir[]) const {
-        dir[0]=direction[0];
-        dir[1]=direction[1];
-        dir[2]=direction[2];
-    }
-
-
-
-    /**
-     * Sets the elevation.
-     */
-    void setElevation(double elevation) {
-        this->elevation = elevation;
-    }
-
-
-
-    /**
-     * @return Elevation.
-     */
-    double getElevation() const {
-        return elevation;
-    }
-
-
-
-    /**
-     * Copies extrusion (deep copies) from another extrusion object.
-     */
-    DL_Extrusion operator = (const DL_Extrusion& extru) {
-        setDirection(extru.direction[0], extru.direction[1], extru.direction[2]);
-        setElevation(extru.elevation);
-
-        return *this;
-    }
-
-
-
-private:
-	double *direction;
-	double elevation;
-};
-
-#endif
-
-// EOF
diff --git a/Utilities/dxflib/dl_writer.h b/Utilities/dxflib/dl_writer.h
deleted file mode 100644
index e32c7758d3ffd9ecb56bed4df35797b4567476a0..0000000000000000000000000000000000000000
--- a/Utilities/dxflib/dl_writer.h
+++ /dev/null
@@ -1,615 +0,0 @@
-/****************************************************************************
-** $Id: dl_writer.h 2398 2005-06-06 18:12:14Z andrew $
-**
-** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
-** Copyright (C) 2001 Robert J. Campbell Jr.
-**
-** This file is part of the dxflib project.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid dxflib Professional Edition licenses may use 
-** this file in accordance with the dxflib Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.ribbonsoft.com for further details.
-**
-** Contact info@ribbonsoft.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef DL_WRITER_H
-#define DL_WRITER_H
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#if defined(__OS2__)||defined(__EMX__)||defined(_WIN32)
-#define strcasecmp(s,t) stricmp(s,t)
-#endif
-
-#include <iostream>
-#include <cstring>
-
-#include "dl_attributes.h"
-#include "dl_codes.h"
-
-
-
-/**
- * Defines interface for writing low level DXF constructs to
- * a file. Implementation is defined in derived classes that write
- * to binary or ASCII files.
- * 
- * Implements functions that write higher level constructs in terms of
- * the low level ones.
- *
- * @todo Add error checking for string/entry length.
- */
-class DL_Writer {
-public:
-    /**
-     * @para version DXF version. Defaults to VER_2002.
-     */
-    DL_Writer(DL_Codes::version version) : m_handle(0x30) {
-        this->version = version;
-        modelSpaceHandle = 0;
-        paperSpaceHandle = 0;
-        paperSpace0Handle = 0;
-    }
-
-    virtual ~DL_Writer() {}
-    ;
-
-    /** Generic section for section 'name'.
-     *
-     * <pre>
-     *   0
-     *  SECTION
-     *   2
-     *  name
-     * </pre>
-     */
-    void section(const char* name) const {
-        dxfString(0, "SECTION");
-        dxfString(2, name);
-    }
-
-    /**
-     * Section HEADER
-     *
-     * <pre>
-     *   0
-     *  SECTION
-     *   2
-     *  HEADER
-     * </pre>
-     */
-    void sectionHeader() const {
-        section("HEADER");
-    }
-
-    /**
-     * Section TABLES
-     *
-     * <pre>
-     *   0
-     *  SECTION
-     *   2
-     *  TABLES
-     * </pre>
-     */
-    void sectionTables() const {
-        section("TABLES");
-    }
-
-    /**
-     * Section BLOCKS
-     *
-     * <pre>
-     *   0
-     *  SECTION
-     *   2
-     *  BLOCKS
-     * </pre>
-     */
-    void sectionBlocks() const {
-        section("BLOCKS");
-    }
-
-    /**
-     * Section ENTITIES
-     *
-     * <pre>
-     *   0
-     *  SECTION
-     *   2
-     *  ENTITIES
-     * </pre>
-     */
-    void sectionEntities() const {
-        section("ENTITIES");
-    }
-
-    /**
-     * Section CLASSES
-     *
-     * <pre>
-     *   0
-     *  SECTION
-     *   2
-     *  CLASSES
-     * </pre>
-     */
-    void sectionClasses() const {
-        section("CLASSES");
-    }
-
-    /**
-     * Section OBJECTS
-     *
-     * <pre>
-     *   0
-     *  SECTION
-     *   2
-     *  OBJECTS
-     * </pre>
-     */
-    void sectionObjects() const {
-        section("OBJECTS");
-    }
-
-    /**
-     * End of a section.
-     *
-     * <pre>
-     *   0
-     *  ENDSEC
-     * </pre>
-     */
-    void sectionEnd() const {
-        dxfString(0, "ENDSEC");
-    }
-
-    /**
-     * Generic table for table 'name' with 'num' entries:
-     *
-     * <pre>
-     *   0
-     *  TABLE
-     *   2
-     *  name
-     *  70
-     *   num
-     * </pre>
-     */
-    void table(const char* name, int num, int handle) const {
-        dxfString(0, "TABLE");
-        dxfString(2, name);
-        if (version>=VER_2000) {
-            dxfHex(5, handle);
-            dxfString(100, "AcDbSymbolTable");
-        }
-        dxfInt(70, num);
-    }
-
-    /** Table for layers.
-     *
-     * @param num Number of layers in total.
-     *
-     * <pre>
-     *   0
-     *  TABLE
-     *   2
-     *  LAYER
-     *   70
-     *      num
-     * </pre>
-     */
-    void tableLayers(int num) const {
-        table("LAYER", num, 2);
-    }
-
-    /** Table for line types.
-     *
-     * @param num Number of line types in total.
-     *
-     * <pre>
-     *   0
-     *  TABLE
-     *   2
-     *  LTYPE
-     *   70
-     *      num
-     * </pre>
-     */
-    void tableLineTypes(int num) const {
-        //lineTypeHandle = 5;
-        table("LTYPE", num, 5);
-    }
-
-    /** Table for application id.
-     *
-     * @param num Number of registered applications in total.
-     *
-     * <pre>
-     *   0
-     *  TABLE
-     *   2
-     *  APPID
-     *   70
-     *      num
-     * </pre>
-     */
-    void tableAppid(int num) const {
-        table("APPID", num, 9);
-    }
-
-    /**
-     * End of a table.
-     *
-     * <pre>
-     *   0
-     *  ENDTAB
-     * </pre>
-     */
-    void tableEnd() const {
-        dxfString(0, "ENDTAB");
-    }
-
-    /**
-     * End of the DXF file.
-     *
-     * <pre>
-     *   0
-     *  EOF
-     * </pre>
-     */
-    void dxfEOF() const {
-        dxfString(0, "EOF");
-    }
-
-    /**
-     * Comment.
-     *
-     * <pre>
-     *  999
-     *  text
-     * </pre>
-     */
-    void comment(const char* text) const {
-        dxfString(999, text);
-    }
-
-    /**
-     * Entity.
-     *
-     * <pre>
-     *   0
-     *  entTypeName
-     * </pre>
-	 *
-	 * @return Unique handle or 0.
-     */
-    void entity(const char* entTypeName) const {
-        dxfString(0, entTypeName);
-        if (version>=VER_2000) {
-            handle();
-        }
-    }
-
-    /**
-     * Attributes of an entity.
-     *
-     * <pre>
-     *   8
-     *  layer
-     *  62
-     *  color
-     *  39
-     *  width
-     *   6
-     *  linetype
-     * </pre>
-     */
-    void entityAttributes(const DL_Attributes& attrib) const {
-	
-		// layer name:
-        dxfString(8, attrib.getLayer());
-		
-		// R12 doesn't accept BYLAYER values. The value has to be missing
-		//   in that case.
-        if (version>=VER_2000 || 
-			attrib.getColor()!=256) {
-        	dxfInt(62, attrib.getColor());
-		}
-        if (version>=VER_2000) {
-            dxfInt(370, attrib.getWidth());
-        }
-        if (version>=VER_2000 || 
-			strcasecmp(attrib.getLineType().c_str(), "BYLAYER")) {
-	        dxfString(6, attrib.getLineType());
-		}
-    }
-
-    /**
-     * Subclass.
-     */
-    void subClass(const char* sub) const {
-        dxfString(100, sub);
-    }
-
-    /**
-     * Layer (must be in the TABLES section LAYER).
-     *
-     * <pre>
-     *   0
-     *  LAYER
-     * </pre>
-     */
-    void tableLayerEntry(unsigned long int h=0)  const {
-        dxfString(0, "LAYER");
-        if (version>=VER_2000) {
-            if (h==0) {
-                handle();
-            } else {
-                dxfHex(5, h);
-            }
-            dxfString(100, "AcDbSymbolTableRecord");
-            dxfString(100, "AcDbLayerTableRecord");
-        }
-    }
-
-    /**
-     * Line type (must be in the TABLES section LTYPE).
-     *
-     * <pre>
-     *   0
-     *  LTYPE
-     * </pre>
-     */
-    void tableLineTypeEntry(unsigned long int h=0)  const {
-        dxfString(0, "LTYPE");
-        if (version>=VER_2000) {
-            if (h==0) {
-                handle();
-            } else {
-                dxfHex(5, h);
-            }
-            //dxfHex(330, 0x5);
-            dxfString(100, "AcDbSymbolTableRecord");
-            dxfString(100, "AcDbLinetypeTableRecord");
-        }
-    }
-
-    /**
-     * Appid (must be in the TABLES section APPID).
-     *
-     * <pre>
-     *   0
-     *  APPID
-     * </pre>
-     */
-    void tableAppidEntry(unsigned long int h=0)  const {
-        dxfString(0, "APPID");
-        if (version>=VER_2000) {
-            if (h==0) {
-                handle();
-            } else {
-                dxfHex(5, h);
-            }
-            //dxfHex(330, 0x9);
-            dxfString(100, "AcDbSymbolTableRecord");
-            dxfString(100, "AcDbRegAppTableRecord");
-        }
-    }
-
-    /**
-     * Block (must be in the section BLOCKS).
-     *
-     * <pre>
-     *   0
-     *  BLOCK
-     * </pre>
-     */
-    void sectionBlockEntry(unsigned long int h=0)  const {
-        dxfString(0, "BLOCK");
-        if (version>=VER_2000) {
-            if (h==0) {
-                handle();
-            } else {
-                dxfHex(5, h);
-            }
-            //dxfHex(330, blockHandle);
-            dxfString(100, "AcDbEntity");
-            if (h==0x1C) {
-                dxfInt(67, 1);
-            }
-            dxfString(8, "0");                 // TODO: Layer for block
-            dxfString(100, "AcDbBlockBegin");
-        }
-    }
-
-    /**
-     * End of Block (must be in the section BLOCKS).
-     *
-     * <pre>
-     *   0
-     *  ENDBLK
-     * </pre>
-     */
-    void sectionBlockEntryEnd(unsigned long int h=0)  const {
-        dxfString(0, "ENDBLK");
-        if (version>=VER_2000) {
-            if (h==0) {
-                handle();
-            } else {
-                dxfHex(5, h);
-            }
-            //dxfHex(330, blockHandle);
-            dxfString(100, "AcDbEntity");
-            if (h==0x1D) {
-                dxfInt(67, 1);
-            }
-            dxfString(8, "0");                 // TODO: Layer for block
-            dxfString(100, "AcDbBlockEnd");
-        }
-    }
-
-    void color(int col=256) const {
-        dxfInt(62, col);
-    }
-    void lineType(const char *lt) const {
-        dxfString(6, lt);
-    }
-    void lineTypeScale(double scale) const {
-        dxfReal(48, scale);
-    }
-    void lineWeight(int lw) const {
-        dxfInt(370, lw);
-    }
-
-    void coord(int gc, double x, double y, double z=0) const {
-        dxfReal(gc, x);
-        dxfReal(gc+10, y);
-        dxfReal(gc+20, z);
-    }
-
-    void coordTriplet(int gc, const double* value) const {
-        if (value) {
-            dxfReal(gc, *value++);
-            dxfReal(gc+10, *value++);
-            dxfReal(gc+20, *value++);
-        }
-    }
-
-    void resetHandle() const {
-        m_handle = 1;
-    }
-
-    /**
-     * Writes a unique handle and returns it.
-     */
-    unsigned long handle(int gc=5) const {
-        // handle has to be hex
-        dxfHex(gc, m_handle);
-        return m_handle++;
-    }
-
-    /**
-     * @return Next handle that will be written.
-     */
-    unsigned long getNextHandle() const {
-        return m_handle;
-    }
-	
-    /**
-     * Increases handle, so that the handle returned remains available.
-     */
-    unsigned long incHandle() const {
-        return m_handle++;
-    }
-
-    /**
-     * Sets the handle of the model space. Entities refer to 
-     * this handle.
-     */
-    void setModelSpaceHandle(unsigned long h) {
-        modelSpaceHandle = h;
-    }
-
-    unsigned long getModelSpaceHandle() {
-        return modelSpaceHandle;
-    }
-
-    /**
-     * Sets the handle of the paper space. Some special blocks refer to 
-     * this handle.
-     */
-    void setPaperSpaceHandle(unsigned long h) {
-        paperSpaceHandle = h;
-    }
-
-    unsigned long getPaperSpaceHandle() {
-        return paperSpaceHandle;
-    }
-
-    /**
-     * Sets the handle of the paper space 0. Some special blocks refer to 
-     * this handle.
-     */
-    void setPaperSpace0Handle(unsigned long h) {
-        paperSpace0Handle = h;
-    }
-
-    unsigned long getPaperSpace0Handle() {
-        return paperSpace0Handle;
-    }
-
-    /**
-     * Must be overwritten by the implementing class to write a
-     * real value to the file.
-     *
-     * @param gc Group code.
-     * @param value The real value.
-     */
-    virtual void dxfReal(int gc, double value) const = 0;
-
-    /**
-     * Must be overwritten by the implementing class to write an
-     * int value to the file.
-     *
-     * @param gc Group code.
-     * @param value The int value.
-     */
-    virtual void dxfInt(int gc, int value) const = 0;
-
-    /**
-     * Must be overwritten by the implementing class to write an
-     * int value (hex) to the file.
-     *
-     * @param gc Group code.
-     * @param value The int value.
-     */
-    virtual void dxfHex(int gc, int value) const = 0;
-
-    /**
-     * Must be overwritten by the implementing class to write a
-     * string to the file.
-     *
-     * @param gc Group code.
-     * @param value The string.
-     */
-    virtual void dxfString(int gc, const char* value) const = 0;
-
-    /**
-     * Must be overwritten by the implementing class to write a
-     * string to the file.
-     *
-     * @param gc Group code.
-     * @param value The string.
-     */
-    virtual void dxfString(int gc, const string& value) const = 0;
-
-protected:
-    mutable unsigned long m_handle;
-    mutable unsigned long modelSpaceHandle;
-    mutable unsigned long paperSpaceHandle;
-    mutable unsigned long paperSpace0Handle;
-
-    /**
-     * DXF version to be created.
-     */
-    DL_Codes::version version;
-private:
-};
-
-#endif
diff --git a/Utilities/dxflib/dl_writer_ascii.cpp b/Utilities/dxflib/dl_writer_ascii.cpp
deleted file mode 100644
index 476197eb821fd07944d8b40a50de78d7b61f6988..0000000000000000000000000000000000000000
--- a/Utilities/dxflib/dl_writer_ascii.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
-/****************************************************************************
-** $Id: dl_writer_ascii.cpp 242 2004-04-12 22:39:43Z andrew $
-**
-** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
-** Copyright (C) 2001 Robert J. Campbell Jr.
-**
-** This file is part of the dxflib project.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid dxflib Professional Edition licenses may use 
-** this file in accordance with the dxflib Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.ribbonsoft.com for further details.
-**
-** Contact info@ribbonsoft.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#include <stdio.h>
-
-#include "dl_writer_ascii.h"
-#include "dl_exception.h"
-
-
-/**
- * Closes the output file.
- */
-void DL_WriterA::close() const {
-    m_ofile.close();
-}
-
-
-/**
- * @retval true Opening file has failed.
- * @retval false Otherwise.
- */
-bool DL_WriterA::openFailed() const {
-	return m_ofile.fail();
-}
-
-
-
-/**
- * Writes a real (double) variable to the DXF file.
- *
- * @param gc Group code.
- * @param value Double value
- */
-void DL_WriterA::dxfReal(int gc, double value) const {
-    char str[256];
-    sprintf(str, "%.16lf", value);
-	
-	// fix for german locale:
-	strReplace(str, ',', '.');
-
-    // Cut away those zeros at the end:
-    bool dot = false;
-    int end = -1;
-    for (unsigned int i=0; i<strlen(str); ++i) {
-        if (str[i]=='.') {
-            dot = true;
-            end = i+2;
-            continue;
-        } else if (dot && str[i]!='0') {
-            end = i+1;
-        }
-    }
-    if (end>0 && end<(int)strlen(str)) {
-        str[end] = '\0';
-    }
-
-    dxfString(gc, str);
-    m_ofile.flush();
-}
-
-
-
-/**
- * Writes an int variable to the DXF file.
- *
- * @param gc Group code.
- * @param value Int value
- */
-void DL_WriterA::dxfInt(int gc, int value) const {
-    m_ofile << (gc<10 ? "  " : (gc<100 ? " " : "")) << gc << "\n"
-    << value << "\n";
-}
-
-
-
-/**
- * Writes a hex int variable to the DXF file.
- *
- * @param gc Group code.
- * @param value Int value
- */
-void DL_WriterA::dxfHex(int gc, int value) const {
-    char str[12];
-    sprintf(str, "%0X", value);
-    dxfString(gc, str);
-}
-
-
-
-/**
- * Writes a string variable to the DXF file.
- *
- * @param gc Group code.
- * @param value String
- */
-void DL_WriterA::dxfString(int gc, const char* value) const {
-    if (value==NULL) {
-#ifndef __GCC2x__
-        throw DL_NullStrExc();
-#endif
-    }
-    m_ofile << (gc<10 ? "  " : (gc<100 ? " " : "")) << gc << "\n"
-    << value << "\n";
-}
-
-
-
-void DL_WriterA::dxfString(int gc, const string& value) const {
-    m_ofile << (gc<10 ? "  " : (gc<100 ? " " : "")) << gc << "\n"
-    << value << "\n";
-}
-
-
-/**
- * Replaces every occurence of src with dest in the null terminated str.
- */
-void DL_WriterA::strReplace(char* str, char src, char dest) {
-	size_t i;
-	for	(i=0; i<strlen(str); i++) {
-		if (str[i]==src) {
-			str[i] = dest;
-		}
-	}
-}
-
diff --git a/Utilities/dxflib/dl_writer_ascii.h b/Utilities/dxflib/dl_writer_ascii.h
deleted file mode 100644
index c3d0fe7b3e4d33428f21b432de310869a3922b74..0000000000000000000000000000000000000000
--- a/Utilities/dxflib/dl_writer_ascii.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-** $Id: dl_writer_ascii.h 2719 2005-09-24 20:41:23Z andrew $
-**
-** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
-** Copyright (C) 2001 Robert J. Campbell Jr.
-**
-** This file is part of the dxflib project.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid dxflib Professional Edition licenses may use 
-** this file in accordance with the dxflib Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.ribbonsoft.com for further details.
-**
-** Contact info@ribbonsoft.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef DL_WRITER_ASCII_H
-#define DL_WRITER_ASCII_H
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#include "dl_writer.h"
-#include <fstream>
-#include <string>
-using std::string;
-
-/**
- * Implements functions defined in DL_Writer for writing low
- *   level DXF constructs to an ASCII format DXF file.
- * 
- * @para fname File name of the file to be created.
- * @para version DXF version. Defaults to VER_2002.
- *
- * @todo What if \c fname is NULL?  Or \c fname can't be opened for
- * another reason?
- */
-class DL_WriterA : public DL_Writer {
-public:
-    DL_WriterA(const char* fname, DL_Codes::version version=VER_2000)
-            : DL_Writer(version), m_ofile(fname) {}
-    virtual ~DL_WriterA() {}
-
-	bool openFailed() const;
-    void close() const;
-    void dxfReal(int gc, double value) const;
-    void dxfInt(int gc, int value) const;
-    void dxfHex(int gc, int value) const;
-    void dxfString(int gc, const char* value) const;
-    void dxfString(int gc, const string& value) const;
-
-	static void strReplace(char* str, char src, char dest);
-
-private:
-    /**
-     * DXF file to be created.
-     */
-    mutable std::ofstream m_ofile;
-
-};
-
-#endif
-
diff --git a/otbIncludeDirectories.cmake b/otbIncludeDirectories.cmake
index 8a477ca04097c4ba2f7ce35f8672d42baa642f53..dde819c55336a9505b9f8fff52cbf81995feb37b 100644
--- a/otbIncludeDirectories.cmake
+++ b/otbIncludeDirectories.cmake
@@ -53,7 +53,6 @@ SET(OTB_INCLUDE_DIRS_BUILD_TREE ${OTB_INCLUDE_DIRS_BUILD_TREE}
   ${OTB_BINARY_DIR}/Utilities/otbossim/include/ossim
   ${OTB_SOURCE_DIR}/Utilities/otbossimplugins
   ${OTB_SOURCE_DIR}/Utilities/otbossimplugins/ossim
-  ${OTB_SOURCE_DIR}/Utilities/dxflib
   ${OTB_SOURCE_DIR}/Utilities/InsightJournal
   ${OTB_SOURCE_DIR}/Utilities/otb6S
   ${OTB_SOURCE_DIR}/Utilities/tinyXMLlib
@@ -323,7 +322,6 @@ SET(OTB_INCLUDE_RELATIVE_DIRS ${OTB_INCLUDE_RELATIVE_DIRS}
   Utilities/otbliblas/include
   Utilities/otbedison
   Utilities/otbsiftfast
-  Utilities/dxflib
   Utilities/otbconfigfile
   Utilities/otbknn
   Utilities/otbmuparser