From d05e9a938b7dd0e4da1a5d681feb1bc04c18e946 Mon Sep 17 00:00:00 2001 From: whitequark Date: Sat, 7 May 2016 05:17:23 +0000 Subject: [PATCH] DWG: implement import. Before this commit, the file filter suggested that DWG was readable, but it wasn't. Also, report any failures while reading DWG and DXF files. --- src/importdxf.cpp | 18 +++++++++++++++++- src/solvespace.cpp | 6 +++++- src/solvespace.h | 1 + 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/importdxf.cpp b/src/importdxf.cpp index 99059b9..dd582aa 100644 --- a/src/importdxf.cpp +++ b/src/importdxf.cpp @@ -1,5 +1,6 @@ #include "solvespace.h" #include "libdxfrw.h" +#include "libdwgr.h" #ifdef WIN32 // Conflicts with DRW::TEXT. @@ -882,11 +883,26 @@ void ImportDxf(const std::string &filename) { dxfRW dxf(filename.c_str()); DxfReadInterface interface; interface.clearBlockTransform(); - dxf.read(&interface, false); + if(!dxf.read(&interface, false)) { + Error("Corrupted DXF file!"); + } if(interface.unknownEntities > 0) { Message(ssprintf("%u DXF entities of unknown type were ignored.", interface.unknownEntities).c_str()); } } +void ImportDwg(const std::string &filename) { + dwgR dwg(filename.c_str()); + DxfReadInterface interface; + interface.clearBlockTransform(); + if(!dwg.read(&interface, false)) { + Error("Corrupted DWG file!"); + } + if(interface.unknownEntities > 0) { + Message(ssprintf("%u DWG entities of unknown type were ignored.", + interface.unknownEntities).c_str()); + } +} + } diff --git a/src/solvespace.cpp b/src/solvespace.cpp index 12acc28..0c6e761 100644 --- a/src/solvespace.cpp +++ b/src/solvespace.cpp @@ -547,7 +547,11 @@ void SolveSpaceUI::MenuFile(int id) { ImportableFileFilter)) break; CnfFreezeString(Extension(importFile), "ImportFormat"); - ImportDxf(importFile); + if(Extension(importFile) == "dxf") { + ImportDxf(importFile); + } else if(Extension(importFile) == "dwg") { + ImportDwg(importFile); + } else oops(); break; } diff --git a/src/solvespace.h b/src/solvespace.h index 46c597f..9c5fcc8 100644 --- a/src/solvespace.h +++ b/src/solvespace.h @@ -952,6 +952,7 @@ public: }; void ImportDxf(const std::string &file); +void ImportDwg(const std::string &file); extern SolveSpaceUI SS; extern Sketch SK;