diff --git a/src/Mod/Draft/App/DraftDxf.cpp b/src/Mod/Draft/App/DraftDxf.cpp index 2892e916e..674496f02 100644 --- a/src/Mod/Draft/App/DraftDxf.cpp +++ b/src/Mod/Draft/App/DraftDxf.cpp @@ -171,6 +171,12 @@ void DraftDxfRead::OnReadInsert(const double* point, const double* scale, const } +void DraftDxfRead::OnReadDimension(const double* s, const double* e, const double* point, double rotation) +{ + std::cout << "Dimension: " << std::endl; +} + + void DraftDxfRead::AddObject(Part::TopoShape *shape) { //std::cout << "layer:" << LayerName() << std::endl; diff --git a/src/Mod/Draft/App/DraftDxf.h b/src/Mod/Draft/App/DraftDxf.h index c289d45e5..3a89fd0a4 100644 --- a/src/Mod/Draft/App/DraftDxf.h +++ b/src/Mod/Draft/App/DraftDxf.h @@ -43,6 +43,7 @@ namespace DraftUtils void OnReadEllipse(const double* c, double major_radius, double minor_radius, double rotation, double start_angle, double end_angle, bool dir); void OnReadSpline(struct SplineData& sd); void OnReadInsert(const double* point, const double* scale, const char* name, double rotation); + void OnReadDimension(const double* s, const double* e, const double* point, double rotation); void AddGraphics() const; // FreeCAD-specific functions diff --git a/src/Mod/Draft/App/dxf.cpp b/src/Mod/Draft/App/dxf.cpp index 8c0cb51da..a81757dca 100644 --- a/src/Mod/Draft/App/dxf.cpp +++ b/src/Mod/Draft/App/dxf.cpp @@ -1407,6 +1407,108 @@ bool CDxfRead::ReadInsert() } +bool CDxfRead::ReadDimension() +{ + double s[3]; // startpoint + double e[3]; // endpoint + double p[3]; // dimpoint + double rot = 0.0; // rotation + + while(!((*m_ifs).eof())) + { + get_line(); + int n; + if(sscanf(m_str, "%d", &n) != 1) + { + printf("CDxfRead::ReadInsert() Failed to read integer from '%s'\n", m_str); + return false; + } + std::istringstream ss; + ss.imbue(std::locale("C")); + switch(n){ + case 0: + // next item found + DerefACI(); + OnReadDimension(s, e, p, rot * Pi/180); + return(true); + case 8: + // Layer name follows + get_line(); + strcpy(m_layer_name, m_str); + break; + case 12: + // start x + get_line(); + ss.str(m_str); ss >> s[0]; s[0] = mm(s[0]); if(ss.fail()) return false; + break; + case 22: + // start y + get_line(); + ss.str(m_str); ss >> s[1]; s[1] = mm(s[1]); if(ss.fail()) return false; + break; + case 32: + // start z + get_line(); + ss.str(m_str); ss >> s[2]; s[2] = mm(s[2]); if(ss.fail()) return false; + break; + case 13: + // end x + get_line(); + ss.str(m_str); ss >> e[0]; e[0] = mm(e[0]); if(ss.fail()) return false; + break; + case 23: + // end y + get_line(); + ss.str(m_str); ss >> e[1]; e[1] = mm(e[1]); if(ss.fail()) return false; + break; + case 33: + // end z + get_line(); + ss.str(m_str); ss >> e[2]; e[2] = mm(e[2]); if(ss.fail()) return false; + break; + case 14: + // dimline x + get_line(); + ss.str(m_str); ss >> p[0]; p[0] = mm(p[0]); if(ss.fail()) return false; + break; + case 24: + // dimline y + get_line(); + ss.str(m_str); ss >> p[1]; p[1] = mm(p[1]); if(ss.fail()) return false; + break; + case 34: + // dimline z + get_line(); + ss.str(m_str); ss >> p[2]; p[2] = mm(p[2]); if(ss.fail()) return false; + break; + case 50: + // rotation + get_line(); + ss.str(m_str); ss >> rot; if(ss.fail()) return false; + break; + case 62: + // color index + get_line(); + ss.str(m_str); ss >> m_aci; if(ss.fail()) return false; + break; + case 100: + case 39: + case 210: + case 220: + case 230: + // skip the next line + get_line(); + break; + default: + // skip the next line + get_line(); + break; + } + } + return false; +} + + void CDxfRead::get_line() { if (m_unused_line[0] != '\0') diff --git a/src/Mod/Draft/App/dxf.h b/src/Mod/Draft/App/dxf.h index 645ada294..4bf834f21 100644 --- a/src/Mod/Draft/App/dxf.h +++ b/src/Mod/Draft/App/dxf.h @@ -125,6 +125,7 @@ private: void OnReadCircle(const double* c, double radius, bool hidden); void OnReadEllipse(const double* c, const double* m, double ratio, double start_angle, double end_angle); bool ReadInsert(); + bool ReadDimension(); void get_line(); void put_line(const char *value); @@ -152,6 +153,7 @@ public: virtual void OnReadEllipse(const double* c, double major_radius, double minor_radius, double rotation, double start_angle, double end_angle, bool dir){} virtual void OnReadSpline(struct SplineData& sd){} virtual void OnReadInsert(const double* point, const double* scale, const char* name, double rotation){} + virtual void OnReadDimension(const double* s, const double* e, const double* point, double rotation){} virtual void AddGraphics() const { } std::string LayerName() const;