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