diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index 4be863fc73..e670dfeb22 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -2828,13 +2828,12 @@ def open(filename): doc = FreeCAD.newDocument(docname) doc.Label = docname FreeCAD.setActiveDocument(doc.Name) - try: + if gui: import ImportGui - except Exception: + ImportGui.readDXF(filename) + else: import Import Import.readDXF(filename) - else: - ImportGui.readDXF(filename) Draft.convert_draft_texts() # convert annotations to Draft texts doc.recompute() @@ -2871,13 +2870,12 @@ def insert(filename, docname): else: errorDXFLib(gui) else: - try: + if gui: import ImportGui - except Exception: + ImportGui.readDXF(filename) + else: import Import Import.readDXF(filename) - else: - ImportGui.readDXF(filename) Draft.convert_draft_texts() # convert annotations to Draft texts doc.recompute() diff --git a/src/Mod/Import/App/dxf/ImpExpDxf.cpp b/src/Mod/Import/App/dxf/ImpExpDxf.cpp index 913d53aae6..ab9f87c2e9 100644 --- a/src/Mod/Import/App/dxf/ImpExpDxf.cpp +++ b/src/Mod/Import/App/dxf/ImpExpDxf.cpp @@ -462,7 +462,7 @@ void ImpExpDxfRead::ExpandInsert(const std::string& name, double rotation, const Base::Vector3d& scale) { - if (Blocks.count(name) == 0) { + if (!Blocks.contains(name)) { ImportError("Reference to undefined or external block '%s'\n", name); return; } @@ -607,15 +607,14 @@ ImpExpDxfRead::Layer::Layer(const std::string& name, std::string&& lineType, PyObject* drawingLayer) : CDxfRead::Layer(name, color, std::move(lineType)) - , DraftLayerView(drawingLayer == nullptr ? nullptr + , DraftLayerView(drawingLayer == nullptr ? Py_None : PyObject_GetAttrString(drawingLayer, "ViewObject")) - , GroupContents( - drawingLayer == nullptr - ? nullptr - : (App::PropertyLinkListHidden*)(((App::FeaturePythonPyT*) - drawingLayer) - ->getPropertyContainerPtr()) - ->getDynamicPropertyByName("Group")) + , GroupContents(drawingLayer == nullptr + ? nullptr + : dynamic_cast( + (((App::FeaturePythonPyT*)drawingLayer) + ->getPropertyContainerPtr()) + ->getDynamicPropertyByName("Group"))) {} ImpExpDxfRead::Layer::~Layer() { @@ -631,7 +630,7 @@ void ImpExpDxfRead::Layer::FinishLayer() const // App::FeaturePython, and its Proxy is a draftobjects.layer.Layer GroupContents->setValue(Contents); } - if (DraftLayerView != nullptr && Hidden) { + if (DraftLayerView != Py_None && Hidden) { // Hide the Hidden layers if possible (if GUI exists) // We do this now rather than when the layer is created so all objects // within the layers also become hidden. @@ -672,7 +671,7 @@ ImpExpDxfRead::MakeLayer(const std::string& name, ColorIndex_t color, std::strin "Solid"); } auto result = new Layer(name, color, std::move(lineType), layer); - if (result->DraftLayerView != nullptr) { + if (result->DraftLayerView != Py_None) { PyObject_SetAttrString(result->DraftLayerView, "OverrideLineColorChildren", Py_False); PyObject_SetAttrString(result->DraftLayerView, "OverrideShapeAppearanceChildren", diff --git a/src/Mod/Import/App/dxf/ImpExpDxf.h b/src/Mod/Import/App/dxf/ImpExpDxf.h index 3c71aa1f29..c7f86715d5 100644 --- a/src/Mod/Import/App/dxf/ImpExpDxf.h +++ b/src/Mod/Import/App/dxf/ImpExpDxf.h @@ -147,6 +147,7 @@ protected: void operator=(const Layer&) = delete; void operator=(Layer&&) = delete; ~Layer() override; + // The View object for the layer or Py_None (e.g. if no gui) PyObject* const DraftLayerView; std::vector Contents; void FinishLayer() const; @@ -334,7 +335,7 @@ protected: const std::string& name, double rotation) override { - InsertsList[Reader.m_entityAttributes].push_back( + InsertsList[Reader.m_entityAttributes].emplace_back( Block::Insert(name, point, rotation, scale)); } diff --git a/src/Mod/Import/App/dxf/dxf.cpp b/src/Mod/Import/App/dxf/dxf.cpp index 0799e021ba..2672b264b2 100644 --- a/src/Mod/Import/App/dxf/dxf.cpp +++ b/src/Mod/Import/App/dxf/dxf.cpp @@ -2950,9 +2950,6 @@ bool CDxfRead::ReadLayer() // TODO: Should have an import option to omit frozen layers. UnsupportedFeature("Frozen layers"); } - if (layerColor < 0) { - UnsupportedFeature("Hidden layers"); - } Layers[layername] = MakeLayer(layername, layerColor, std::move(lineTypeName)); return true; } diff --git a/src/Mod/Test/CMakeLists.txt b/src/Mod/Test/CMakeLists.txt index acc7140276..32dad5493e 100644 --- a/src/Mod/Test/CMakeLists.txt +++ b/src/Mod/Test/CMakeLists.txt @@ -25,6 +25,7 @@ SET(TestData_SRCS TestData/bad_xml.xml TestData/bad_version.xml TestData/content_items.xml + TestData/DXFSample.dxf ) SOURCE_GROUP("" FILES ${Test_SRCS} ${TestData_SRCS}) diff --git a/src/Mod/Test/Document.py b/src/Mod/Test/Document.py index 9ad30c9f28..bf48b4811d 100644 --- a/src/Mod/Test/Document.py +++ b/src/Mod/Test/Document.py @@ -21,6 +21,7 @@ # * * # ***************************************************************************/ +from plistlib import UID import FreeCAD, os, unittest, tempfile from FreeCAD import Base import math @@ -671,6 +672,49 @@ class DocumentBasicCases(unittest.TestCase): FreeCAD.closeDocument("CreateTest") +class DocumentImportCases(unittest.TestCase): + def testDXFImportCPPIssue20195(self): + import importDXF + from draftutils import params + + # Set options, doing our best to restore them: + wasShowDialog = params.get_param("dxfShowDialog") + wasUseLayers = params.get_param("dxfUseDraftVisGroups") + wasUseLegacyImporter = params.get_param("dxfUseLegacyImporter") + wasCreatePart = params.get_param("dxfCreatePart") + wasCreateDraft = params.get_param("dxfCreateDraft") + wasCreateSketch = params.get_param("dxfCreateSketch") + + try: + # disable Preferences dialog in gui mode (avoids popup prompt to user) + params.set_param("dxfShowDialog", False) + # Preserve the DXF layers (makes the checking of document contents easier) + params.set_param("dxfUseDraftVisGroups", True) + # Use the new C++ importer -- that's where the bug was + params.set_param("dxfUseLegacyImporter", False) + # create simple part shapes (3 params) + # This is required to display the bug because creation of Draft objects clears out the + # pending exception this test is looking for, whereas creation of the simple shape object + # actually throws on the pending exception so the entity is absent from the document. + params.set_param("dxfCreatePart", True) + params.set_param("dxfCreateDraft", False) + params.set_param("dxfCreateSketch", False) + importDXF.insert( + FreeCAD.getHomePath() + "Mod/Test/TestData/DXFSample.dxf", "ImportedDocName" + ) + finally: + params.set_param("dxfShowDialog", wasShowDialog) + params.set_param("dxfUseDraftVisGroups", wasUseLayers) + params.set_param("dxfUseLegacyImporter", wasUseLegacyImporter) + params.set_param("dxfCreatePart", wasCreatePart) + params.set_param("dxfCreateDraft", wasCreateDraft) + params.set_param("dxfCreateSketch", wasCreateSketch) + doc = FreeCAD.getDocument("ImportedDocName") + # This doc should ahve 3 objects: The Layers containter, the DXF layer called 0, and one Line + self.assertEqual(len(doc.Objects), 3) + FreeCAD.closeDocument("ImportedDocName") + + # class must be defined in global scope to allow it to be reloaded on document open class SaveRestoreSpecialGroup: def __init__(self, obj): diff --git a/src/Mod/Test/TestData/DXFSample.dxf b/src/Mod/Test/TestData/DXFSample.dxf new file mode 100644 index 0000000000..b889797b45 --- /dev/null +++ b/src/Mod/Test/TestData/DXFSample.dxf @@ -0,0 +1,2310 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1012 + 9 +$DWGCODEPAGE + 3 +ansi_1252 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMAX + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +420.0 + 20 +297.0 + 9 +$ORTHOMODE + 70 + 0 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$DRAGMODE + 70 + 2 + 9 +$LTSCALE + 40 +1.0 + 9 +$OSMODE + 70 + 0 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +2.5 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +STANDARD + 9 +$CLAYER + 8 +0 + 9 +$CELTYPE + 6 +BYLAYER + 9 +$CECOLOR + 62 + 256 + 9 +$CELTSCALE + 40 +1.0 + 9 +$DELOBJ + 70 + 1 + 9 +$DISPSILH + 70 + 0 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +2.5 + 9 +$DIMEXO + 40 +0.625 + 9 +$DIMDLI + 40 +3.75 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +1.25 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +2.5 + 9 +$DIMCEN + 40 +2.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 1 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 0 + 9 +$DIMSE2 + 70 + 0 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 8 + 9 +$DIMBLK + 1 + + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 1 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 2 + 9 +$DIMALTF + 40 +0.0394 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 + 1 + 9 +$DIMTVP + 40 +1.0 + 9 +$DIMTIX + 70 + 0 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +ISO-25 + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.625 + 9 +$DIMJUST + 70 + 0 + 9 +$DIMSD1 + 70 + 0 + 9 +$DIMSD2 + 70 + 0 + 9 +$DIMTOLJ + 70 + 1 + 9 +$DIMTZIN + 70 + 0 + 9 +$DIMALTZ + 70 + 0 + 9 +$DIMALTTZ + 70 + 0 + 9 +$DIMFIT + 70 + 3 + 9 +$DIMUPT + 70 + 0 + 9 +$DIMUNIT + 70 + 2 + 9 +$DIMDEC + 70 + 4 + 9 +$DIMTDEC + 70 + 4 + 9 +$DIMALTU + 70 + 2 + 9 +$DIMALTTD + 70 + 2 + 9 +$DIMTXSTY + 7 +STANDARD + 9 +$DIMAUNIT + 70 + 0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 4 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +0.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 0 + 9 +$MENU + 1 +. + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$BLIPMODE + 70 + 1 + 9 +$CHAMFERA + 40 +10.0 + 9 +$CHAMFERB + 40 +10.0 + 9 +$CHAMFERC + 40 +0.0 + 9 +$CHAMFERD + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2460755.400945150 + 9 +$TDUPDATE + 40 +2460755.402199340 + 9 +$TDINDWG + 40 +0.0012541898 + 9 +$TDUSRTIMER + 40 +0.0012541898 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$COORDS + 70 + 1 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$ATTDIA + 70 + 0 + 9 +$ATTREQ + 70 + 1 + 9 +$HANDLING + 70 + 1 + 9 +$HANDSEED + 5 +31 + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSNAME + 2 + + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 16 + 9 +$PINSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +1.000000E+20 + 20 +1.000000E+20 + 30 +1.000000E+20 + 9 +$PEXTMAX + 10 +-1.000000E+20 + 20 +-1.000000E+20 + 30 +-1.000000E+20 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +420.0 + 20 +297.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 0 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 1 + 9 +$TREEDEPTH + 70 + 3020 + 9 +$PICKSTYLE + 70 + 1 + 9 +$CMLSTYLE + 2 +STANDARD + 9 +$CMLJUST + 70 + 0 + 9 +$CMLSCALE + 40 +1.0 + 9 +$SAVEIMAGES + 70 + 0 + 0 +ENDSEC + 0 +SECTION + 2 +CLASSES + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +100 +AcDbSymbolTable + 70 + 3 + 0 +VPORT + 5 +30 +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*ACTIVE + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +11.892094 + 22 +1.953472 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +19.534714 + 41 +2.318293 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +5 +100 +AcDbSymbolTable + 70 + 1 + 0 +LTYPE + 5 +14 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYBLOCK + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +15 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYLAYER + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +16 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CONTINUOUS + 70 + 0 + 3 +Solid line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +2 +100 +AcDbSymbolTable + 70 + 1 + 0 +LAYER + 5 +F +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +3 +100 +AcDbSymbolTable + 70 + 1 + 0 +STYLE + 5 +10 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +STANDARD + 70 + 64 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +2.5 + 3 +ISOCP + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +6 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +7 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +9 +100 +AcDbSymbolTable + 70 + 1 + 0 +APPID + 5 +11 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +A +100 +AcDbSymbolTable + 70 + 8 + 0 +DIMSTYLE +105 +1D +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +STANDARD + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +1.0 + 41 +0.18 + 42 +0.0625 + 43 +0.38 + 44 +0.18 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +0.18 +141 +0.09 +142 +0.0 +143 +25.4 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.09 + 71 + 0 + 72 + 0 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 +170 + 0 +171 + 2 +172 + 0 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 +270 + 2 +271 + 4 +272 + 4 +273 + 2 +274 + 2 +340 +10 +275 + 0 +280 + 0 +281 + 0 +282 + 0 +283 + 1 +284 + 0 +285 + 0 +286 + 0 +287 + 3 +288 + 0 + 0 +DIMSTYLE +105 +24 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +ISO-25 + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +1.0 + 41 +2.5 + 42 +0.625 + 43 +3.75 + 44 +1.25 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +2.5 +141 +2.5 +142 +0.0 +143 +0.0394 +144 +1.0 +145 +1.0 +146 +1.0 +147 +0.625 + 71 + 0 + 72 + 0 + 73 + 1 + 74 + 0 + 75 + 0 + 76 + 0 + 77 + 1 + 78 + 8 +170 + 0 +171 + 2 +172 + 1 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 +270 + 2 +271 + 4 +272 + 4 +273 + 2 +274 + 2 +340 +10 +275 + 0 +280 + 0 +281 + 0 +282 + 0 +283 + 1 +284 + 0 +285 + 0 +286 + 0 +287 + 3 +288 + 0 + 0 +DIMSTYLE +105 +25 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +ISO-35 + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +1.0 + 41 +3.5 + 42 +0.875 + 43 +5.25 + 44 +1.75 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +3.5 +141 +3.5 +142 +0.0 +143 +0.0394 +144 +1.0 +145 +1.4 +146 +1.0 +147 +0.875 + 71 + 0 + 72 + 0 + 73 + 1 + 74 + 0 + 75 + 0 + 76 + 0 + 77 + 1 + 78 + 8 +170 + 0 +171 + 2 +172 + 1 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 +270 + 2 +271 + 4 +272 + 4 +273 + 2 +274 + 2 +340 +10 +275 + 0 +280 + 0 +281 + 0 +282 + 0 +283 + 1 +284 + 0 +285 + 0 +286 + 0 +287 + 3 +288 + 0 + 0 +DIMSTYLE +105 +26 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +ISO-5 + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +1.0 + 41 +5.0 + 42 +1.25 + 43 +7.5 + 44 +2.5 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +5.0 +141 +5.0 +142 +0.0 +143 +0.0394 +144 +1.0 +145 +2.0 +146 +1.0 +147 +1.25 + 71 + 0 + 72 + 0 + 73 + 1 + 74 + 0 + 75 + 0 + 76 + 0 + 77 + 1 + 78 + 8 +170 + 0 +171 + 2 +172 + 1 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 +270 + 2 +271 + 4 +272 + 4 +273 + 2 +274 + 2 +340 +10 +275 + 0 +280 + 0 +281 + 0 +282 + 0 +283 + 1 +284 + 0 +285 + 0 +286 + 0 +287 + 3 +288 + 0 + 0 +DIMSTYLE +105 +27 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +ISO-7 + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +1.0 + 41 +7.0 + 42 +1.75 + 43 +10.5 + 44 +3.5 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +7.0 +141 +7.0 +142 +0.0 +143 +0.0394 +144 +1.0 +145 +2.8 +146 +1.0 +147 +1.75 + 71 + 0 + 72 + 0 + 73 + 1 + 74 + 0 + 75 + 0 + 76 + 0 + 77 + 1 + 78 + 8 +170 + 0 +171 + 2 +172 + 1 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 +270 + 2 +271 + 4 +272 + 4 +273 + 2 +274 + 2 +340 +10 +275 + 0 +280 + 0 +281 + 0 +282 + 0 +283 + 1 +284 + 0 +285 + 0 +286 + 0 +287 + 3 +288 + 0 + 0 +DIMSTYLE +105 +28 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +ISO1 + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +1.0 + 41 +10.0 + 42 +2.5 + 43 +15.0 + 44 +5.0 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +10.0 +141 +10.0 +142 +0.0 +143 +0.0394 +144 +1.0 +145 +4.0 +146 +1.0 +147 +2.5 + 71 + 0 + 72 + 0 + 73 + 1 + 74 + 0 + 75 + 0 + 76 + 0 + 77 + 1 + 78 + 8 +170 + 0 +171 + 2 +172 + 1 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 +270 + 2 +271 + 4 +272 + 4 +273 + 2 +274 + 2 +340 +10 +275 + 0 +280 + 0 +281 + 0 +282 + 0 +283 + 1 +284 + 0 +285 + 0 +286 + 0 +287 + 3 +288 + 0 + 0 +DIMSTYLE +105 +29 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +ISO1-4 + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +1.0 + 41 +14.0 + 42 +3.5 + 43 +21.0 + 44 +7.0 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +14.0 +141 +14.0 +142 +0.0 +143 +0.0394 +144 +1.0 +145 +5.6 +146 +1.0 +147 +3.5 + 71 + 0 + 72 + 0 + 73 + 1 + 74 + 0 + 75 + 0 + 76 + 0 + 77 + 1 + 78 + 8 +170 + 0 +171 + 2 +172 + 1 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 +270 + 2 +271 + 4 +272 + 4 +273 + 2 +274 + 2 +340 +10 +275 + 0 +280 + 0 +281 + 0 +282 + 0 +283 + 1 +284 + 0 +285 + 0 +286 + 0 +287 + 3 +288 + 0 + 0 +DIMSTYLE +105 +2A +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +ISO2 + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +1.0 + 41 +20.0 + 42 +5.0 + 43 +30.0 + 44 +10.0 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +20.0 +141 +20.0 +142 +0.0 +143 +0.0394 +144 +1.0 +145 +8.0 +146 +1.0 +147 +5.0 + 71 + 0 + 72 + 0 + 73 + 1 + 74 + 0 + 75 + 0 + 76 + 0 + 77 + 1 + 78 + 8 +170 + 0 +171 + 2 +172 + 1 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 +270 + 2 +271 + 4 +272 + 4 +273 + 2 +274 + 2 +340 +10 +275 + 0 +280 + 0 +281 + 0 +282 + 0 +283 + 1 +284 + 0 +285 + 0 +286 + 0 +287 + 3 +288 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +1 +100 +AcDbSymbolTable + 70 + 0 + 0 +BLOCK_RECORD + 5 +1A +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*MODEL_SPACE + 0 +BLOCK_RECORD + 5 +17 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*PAPER_SPACE + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +1B +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*MODEL_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*MODEL_SPACE + 1 + + 0 +ENDBLK + 5 +1C +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +18 +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockBegin + 2 +*PAPER_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +19 +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +LINE + 5 +2E +100 +AcDbEntity + 8 +0 +100 +AcDbLine + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 0 +VIEWPORT + 5 +22 +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbViewport + 10 +261.517699 + 20 +148.5 + 30 +0.0 + 40 +523.035398 + 41 +297.0 + 68 + -1 + 69 + 1 +1001 +ACAD +1000 +MVIEW +1002 +{ +1070 + 16 +1010 +0.0 +1020 +0.0 +1030 +0.0 +1010 +0.0 +1020 +0.0 +1030 +1.0 +1040 +0.0 +1040 +297.0 +1040 +261.517699 +1040 +148.5 +1040 +50.0 +1040 +0.0 +1040 +0.0 +1070 + 0 +1070 + 100 +1070 + 1 +1070 + 1 +1070 + 0 +1070 + 0 +1070 + 0 +1070 + 0 +1040 +0.0 +1040 +0.0 +1040 +0.0 +1040 +1.0 +1040 +1.0 +1040 +10.0 +1040 +10.0 +1070 + 0 +1002 +{ +1002 +} +1002 +} + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +C +100 +AcDbDictionary + 3 +ACAD_GROUP +350 +D + 3 +ACAD_MLINESTYLE +350 +E + 0 +DICTIONARY + 5 +D +102 +{ACAD_REACTORS +330 +C +102 +} +100 +AcDbDictionary + 0 +DICTIONARY + 5 +E +102 +{ACAD_REACTORS +330 +C +102 +} +100 +AcDbDictionary + 3 +STANDARD +350 +13 + 0 +MLINESTYLE + 5 +13 +102 +{ACAD_REACTORS +330 +E +102 +} +100 +AcDbMlineStyle + 2 +STANDARD + 70 + 0 + 3 + + 62 + 0 + 51 +90.0 + 52 +90.0 + 71 + 2 + 49 +0.5 + 62 + 256 + 6 +BYLAYER + 49 +-0.5 + 62 + 256 + 6 +BYLAYER + 0 +ENDSEC + 0 +EOF