diff --git a/src/Mod/Import/App/ImpExpDxf.cpp b/src/Mod/Import/App/ImpExpDxf.cpp index 22d8b204af..357687757b 100644 --- a/src/Mod/Import/App/ImpExpDxf.cpp +++ b/src/Mod/Import/App/ImpExpDxf.cpp @@ -716,3 +716,22 @@ void ImpExpDxfWrite::exportRadialDim(Base::Vector3d centerPoint, Base::Vector3d WriteRadialDim(center, text, arc, dimText, getLayerName().c_str()); } + +void ImpExpDxfWrite::exportDiametricDim(Base::Vector3d textLocn, + Base::Vector3d arcPoint1, Base::Vector3d arcPoint2, + char* dimText) +{ + double text[3] = {0,0,0}; + text[0] = textLocn.x; + text[1] = textLocn.y; + text[2] = textLocn.z; + double arc1[3] = {0,0,0}; + arc1[0] = arcPoint1.x; + arc1[1] = arcPoint1.y; + arc1[2] = arcPoint1.z; + double arc2[3] = {0,0,0}; + arc2[0] = arcPoint2.x; + arc2[1] = arcPoint2.y; + arc2[2] = arcPoint2.z; + WriteDiametricDim(text, arc1, arc2, dimText, getLayerName().c_str()); +} diff --git a/src/Mod/Import/App/ImpExpDxf.h b/src/Mod/Import/App/ImpExpDxf.h index fe912407c9..b864c31a91 100644 --- a/src/Mod/Import/App/ImpExpDxf.h +++ b/src/Mod/Import/App/ImpExpDxf.h @@ -91,6 +91,10 @@ namespace Import void exportRadialDim(Base::Vector3d centerPoint, Base::Vector3d textLocn, Base::Vector3d arcPoint, char* dimText); + void exportDiametricDim(Base::Vector3d textLocn, + Base::Vector3d arcPoint1, Base::Vector3d arcPoint2, + char* dimText); + static bool gp_PntEqual(gp_Pnt p1, gp_Pnt p2); static bool gp_PntCompare(gp_Pnt p1, gp_Pnt p2); diff --git a/src/Mod/Import/App/dxf.cpp b/src/Mod/Import/App/dxf.cpp index 65bd08fd03..940f176824 100644 --- a/src/Mod/Import/App/dxf.cpp +++ b/src/Mod/Import/App/dxf.cpp @@ -396,17 +396,6 @@ void CDxfWrite::WriteLinearDim(const double* textMidPoint, const double* lineDef (*m_ofs) << extLine2[1] << endl; (*m_ofs) << 34 << endl; (*m_ofs) << extLine2[2] << endl; -////radial dims -// (*m_ofs) << 100 << endl; -// (*m_ofs) << "AcDbRadialDimension" << endl; -// (*m_ofs) << 15 << endl; -// (*m_ofs) << arcPoint[0] << endl; -// (*m_ofs) << 25 << endl; -// (*m_ofs) << arcPoint[1] << endl; -// (*m_ofs) << 35 << endl; -// (*m_ofs) << arcPoint[2] << endl; -// (*m_ofs) << 40 << endl; -// (*m_ofs) << lenLeader << endl; ////diametric dims // (*m_ofs) << 100 << endl; // (*m_ofs) << "AcDbRadialDimension" << endl; @@ -546,6 +535,57 @@ void CDxfWrite::WriteRadialDim(const double* centerPoint, const double* textMidP (*m_ofs) << 0 << endl; } +//*************************** +//WriteDiametricDim +//added by Wandererfan 2018 (wandererfan@gmail.com) for FreeCAD project +void CDxfWrite::WriteDiametricDim(const double* textMidPoint, + const double* arcPoint1, const double* arcPoint2, + const char* dimText, + const char* layer_name) +{ + (*m_ofs) << 0 << endl; + (*m_ofs) << "DIMENSION" << endl; + (*m_ofs) << 8 << endl; + (*m_ofs) << layer_name << endl; + (*m_ofs) << 100 << endl; + (*m_ofs) << "AcDbEntity" << endl; + (*m_ofs) << 100 << endl; + (*m_ofs) << "AcDbDimension" << endl; + (*m_ofs) << 2 << endl; + (*m_ofs) << "*D1" << endl; // blockName *D1 ?? + (*m_ofs) << 10 << endl; + (*m_ofs) << arcPoint1[0] << endl; + (*m_ofs) << 20 << endl; + (*m_ofs) << arcPoint1[1] << endl; + (*m_ofs) << 30 << endl; + (*m_ofs) << arcPoint1[2] << endl; + (*m_ofs) << 11 << endl; //text mid point + (*m_ofs) << textMidPoint[0] << endl; + (*m_ofs) << 21 << endl; + (*m_ofs) << textMidPoint[1] << endl; + (*m_ofs) << 31 << endl; + (*m_ofs) << textMidPoint[2] << endl; + (*m_ofs) << 70 << endl; + (*m_ofs) << 3 << endl; // dimType 3 = Diameter + (*m_ofs) << 71 << endl; + (*m_ofs) << 5 << endl; // attachPoint 5 = middle center + (*m_ofs) << 1 << endl; + (*m_ofs) << dimText << endl; + (*m_ofs) << 3 << endl; + (*m_ofs) << "STANDARD" << endl; //style +//diametric dims + (*m_ofs) << 100 << endl; + (*m_ofs) << "AcDbDiametricDimension" << endl; + (*m_ofs) << 15 << endl; + (*m_ofs) << arcPoint2[0] << endl; + (*m_ofs) << 25 << endl; + (*m_ofs) << arcPoint2[1] << endl; + (*m_ofs) << 35 << endl; + (*m_ofs) << arcPoint2[2] << endl; + (*m_ofs) << 40 << endl; // leader length???? + (*m_ofs) << 0 << endl; +} + CDxfRead::CDxfRead(const char* filepath) { diff --git a/src/Mod/Import/App/dxf.h b/src/Mod/Import/App/dxf.h index 11a0edcccd..fd55505799 100644 --- a/src/Mod/Import/App/dxf.h +++ b/src/Mod/Import/App/dxf.h @@ -150,6 +150,10 @@ public: const double* arcPoint, const char* dimText, const char* layer_name); + void WriteDiametricDim(const double* textMidPoint, + const double* arcPoint1, const double* arcPoint2, + const char* dimText, + const char* layer_name); }; // derive a class from this and implement it's virtual functions diff --git a/src/Mod/TechDraw/App/AppTechDrawPy.cpp b/src/Mod/TechDraw/App/AppTechDrawPy.cpp index 0b09e9d065..1f3a249366 100644 --- a/src/Mod/TechDraw/App/AppTechDrawPy.cpp +++ b/src/Mod/TechDraw/App/AppTechDrawPy.cpp @@ -631,7 +631,7 @@ private: Base::Vector3d extLine2Start = Base::Vector3d(pts.second.x, -pts.second.y, 0.0) + Base::Vector3d(parentX,parentY,0.0); writer.exportLinearDim(textLocn, lineLocn, extLine1Start, extLine2Start, dimText); - }else if (dvd->Type.isValue("Angle")) { + } else if (dvd->Type.isValue("Angle")) { Base::Vector3d textLocn(dvd->X.getValue() + parentX, dvd->Y.getValue() + parentY, 0.0); Base::Vector3d lineLocn(dvd->X.getValue() + parentX, dvd->Y.getValue() + parentY,0.0); anglePoints pts = dvd->getAnglePoints(); @@ -651,7 +651,7 @@ private: end1 = end1 + parentPos; end2 = end2 + parentPos; writer.exportAngularDim(textLocn, lineLocn, end1, end2, apex, dimText); - }else if (dvd->Type.isValue("Radius")) { + } else if (dvd->Type.isValue("Radius")) { Base::Vector3d textLocn(dvd->X.getValue() + parentX, dvd->Y.getValue() + parentY, 0.0); arcPoints pts = dvd->getArcPoints(); Base::Vector3d center = pts.center; @@ -661,6 +661,16 @@ private: center = center + parentPos; arcPoint = arcPoint + parentPos; writer.exportRadialDim(center, textLocn, arcPoint, dimText); + } else if(dvd->Type.isValue("Diameter")){ + Base::Vector3d textLocn(dvd->X.getValue() + parentX, dvd->Y.getValue() + parentY, 0.0); + arcPoints pts = dvd->getArcPoints(); + Base::Vector3d end1 = pts.onCurve.first; + end1.y = -end1.y; + Base::Vector3d end2 = pts.onCurve.second; + end2.y = -end2.y; + end1 = end1 + parentPos; + end2 = end2 + parentPos; + writer.exportDiametricDim(textLocn, end1, end2, dimText); } } }