From 69ddc698d811aa7d91ca824552732885bf9576ef Mon Sep 17 00:00:00 2001 From: adam-urbanczyk Date: Thu, 16 Jul 2020 08:58:03 +0200 Subject: [PATCH 1/6] Initial support for importing dxf splines --- cadquery/occ_impl/importers.py | 55 ++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/cadquery/occ_impl/importers.py b/cadquery/occ_impl/importers.py index 325f21b93..df9e4dbb0 100644 --- a/cadquery/occ_impl/importers.py +++ b/cadquery/occ_impl/importers.py @@ -1,3 +1,5 @@ +from collections import OrderedDict + from .. import cq from .geom import Vector from .shapes import Shape, Edge, Face, sortWiresByBuildOrder @@ -7,6 +9,12 @@ from OCP.STEPControl import STEPControl_Reader from OCP.ShapeAnalysis import ShapeAnalysis_FreeBounds from OCP.TopTools import TopTools_HSequenceOfShape +from OCP.gp import gp_Pnt +from OCP.Geom import Geom_BSplineCurve +from OCP.TColgp import TColgp_Array1OfPnt +from OCP.TColStd import TColStd_Array1OfReal, TColStd_Array1OfInteger +from OCP.BRepBuilderAPI import BRepBuilderAPI_MakeEdge + import OCP.IFSelect @@ -104,12 +112,59 @@ def _dxf_polyline(el): return (e[0] for e in rv if e) +def _dxf_spline(el): + + try: + degree = el.dxf.degree + periodic = el.closed + rational = False + + knots_unique = OrderedDict() + for k in el.knots: + if k in knots_unique: + knots_unique[k] += 1 + else: + knots_unique[k] = 1 + + # assmble knots + knots = TColStd_Array1OfReal(1, len(knots_unique)) + multiplicities = TColStd_Array1OfInteger(1, len(knots_unique)) + for i, (k, m) in enumerate(knots_unique.items()): + knots.SetValue(i + 1, k) + multiplicities.SetValue(i + 1, m) + + # assemble wieghts if present: + if el.weights: + rational = True + + weights = OCP.TColStd.TColStd_Array1OfReal(1, len(el.weights)) + for i, w in enumerate(el.weights): + weights.SetValue(i + 1, w) + + # assmeble conotrol points + pts = TColgp_Array1OfPnt(1, len(el.control_points)) + for i, p in enumerate(el.control_points): + pts.SetValue(i + 1, gp_Pnt(*p)) + + if rational: + spline = Geom_BSplineCurve(pts, knots, multiplicities, degree, periodic) + else: + spline = Geom_BSplineCurve( + pts, knots, weights, multiplicities, degree, periodic + ) + + return (Edge(BRepBuilderAPI_MakeEdge(spline).Edge()),) + except Exception: + return () + + DXF_CONVERTERS = { "LINE": _dxf_line, "CIRCLE": _dxf_circle, "ARC": _dxf_arc, "POLYLINE": _dxf_polyline, "LWPOLYLINE": _dxf_polyline, + "SPLINE": _dxf_spline, } From 32a6c5f54fb8e7ad4878dc550348da472f4b11f6 Mon Sep 17 00:00:00 2001 From: adam-urbanczyk Date: Thu, 16 Jul 2020 18:40:43 +0200 Subject: [PATCH 2/6] Added ellipse handling and reworked spline --- cadquery/occ_impl/importers.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/cadquery/occ_impl/importers.py b/cadquery/occ_impl/importers.py index df9e4dbb0..f22ff7f2b 100644 --- a/cadquery/occ_impl/importers.py +++ b/cadquery/occ_impl/importers.py @@ -1,8 +1,9 @@ from collections import OrderedDict +from math import pi from .. import cq from .geom import Vector -from .shapes import Shape, Edge, Face, sortWiresByBuildOrder +from .shapes import Shape, Edge, Face, sortWiresByBuildOrder, DEG2RAD import ezdxf @@ -18,6 +19,7 @@ import OCP.IFSelect +RAD2DEG = 360.0 / (2 * pi) class ImportTypes: STEP = "STEP" @@ -147,16 +149,32 @@ def _dxf_spline(el): pts.SetValue(i + 1, gp_Pnt(*p)) if rational: - spline = Geom_BSplineCurve(pts, knots, multiplicities, degree, periodic) - else: spline = Geom_BSplineCurve( pts, knots, weights, multiplicities, degree, periodic ) + else: + spline = Geom_BSplineCurve(pts, knots, multiplicities, degree, periodic) return (Edge(BRepBuilderAPI_MakeEdge(spline).Edge()),) except Exception: return () +def _dxf_ellipse(el): + + try: + + return ( + Edge.makeEllipse( + el.dxf.major_axis.magnitude, + el.minor_axis.magnitude, + pnt=Vector(el.dxf.center.xyz), + xdir=Vector(el.dxf.major_axis.xyz), + angle1=el.dxf.start_param * RAD2DEG, + angle2=el.dxf.end_param * RAD2DEG, + ), + ) + except Exception: + return () DXF_CONVERTERS = { "LINE": _dxf_line, @@ -165,6 +183,7 @@ def _dxf_spline(el): "POLYLINE": _dxf_polyline, "LWPOLYLINE": _dxf_polyline, "SPLINE": _dxf_spline, + "ELLIPSE": _dxf_ellipse } From 5c0b972287fa1ecf492849860bd923aee29c2bb0 Mon Sep 17 00:00:00 2001 From: adam-urbanczyk Date: Thu, 16 Jul 2020 19:24:04 +0200 Subject: [PATCH 3/6] Fix formatting --- cadquery/occ_impl/importers.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cadquery/occ_impl/importers.py b/cadquery/occ_impl/importers.py index f22ff7f2b..2196349eb 100644 --- a/cadquery/occ_impl/importers.py +++ b/cadquery/occ_impl/importers.py @@ -21,6 +21,7 @@ RAD2DEG = 360.0 / (2 * pi) + class ImportTypes: STEP = "STEP" DXF = "DXF" @@ -159,10 +160,11 @@ def _dxf_spline(el): except Exception: return () + def _dxf_ellipse(el): try: - + return ( Edge.makeEllipse( el.dxf.major_axis.magnitude, @@ -176,6 +178,7 @@ def _dxf_ellipse(el): except Exception: return () + DXF_CONVERTERS = { "LINE": _dxf_line, "CIRCLE": _dxf_circle, @@ -183,7 +186,7 @@ def _dxf_ellipse(el): "POLYLINE": _dxf_polyline, "LWPOLYLINE": _dxf_polyline, "SPLINE": _dxf_spline, - "ELLIPSE": _dxf_ellipse + "ELLIPSE": _dxf_ellipse, } From 633eb7b92b682ef644e473ff66dba08d7ec0ad9d Mon Sep 17 00:00:00 2001 From: adam-urbanczyk Date: Thu, 16 Jul 2020 20:04:05 +0200 Subject: [PATCH 4/6] Test for spline+ellipse import --- tests/test_importers.py | 8 + tests/testdata/spline.dxf | 892 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 900 insertions(+) create mode 100644 tests/testdata/spline.dxf diff --git a/tests/test_importers.py b/tests/test_importers.py index 09a195c34..5c559f030 100644 --- a/tests/test_importers.py +++ b/tests/test_importers.py @@ -109,6 +109,14 @@ def testImportDXF(self): obj = importers.importDXF(filename) self.assertTrue(obj.val().isValid()) + # test spline import + + filename = os.path.join(testdataDir, "spline.dxf") + obj = importers.importDXF(filename, tol=1) + self.assertTrue(obj.val().isValid()) + self.assertEqual(obj.faces().size(), 1) + self.assertEqual(obj.wires().size(), 2) + if __name__ == "__main__": import unittest diff --git a/tests/testdata/spline.dxf b/tests/testdata/spline.dxf new file mode 100644 index 000000000..c0e879de9 --- /dev/null +++ b/tests/testdata/spline.dxf @@ -0,0 +1,892 @@ +999 +FreeCAD v0.19 + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1014 + 9 +$ACADMAINTVER + 70 + 9 + 9 +$DWGCODEPAGE + 3 +ANSI_1252 + 9 +$TEXTSTYLE + 7 +STANDARD + 9 +$DIMSTYLE + 2 +STANDARD + 9 +$DIMTXSTY + 7 +STANDARD + 9 +$CMLSTYLE + 2 +STANDARD + 9 +$PEXTMAX + 10 +50 + 20 +50 + 30 +50 + 9 +$PEXTMIN + 10 +0 + 20 +0 + 30 +0 + 9 +$HANDSEED + 5 +FFFF + 0 +ENDSEC + 0 +SECTION + 2 +CLASSES + 0 +CLASS + 1 +ACDBDICTIONARYWDFLT + 2 +AcDbDictionaryWithDefault + 3 +ObjectDBX Classes + 90 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +XRECORD + 2 +AcDbXrecord + 3 +ObjectDBX Classes + 90 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +LWPOLYLINE + 2 +AcDbPolyline + 3 +ObjectDBX Classes + 90 + 0 +280 + 0 +281 + 1 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +20 +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +VPORT + 5 +21 +330 +20 +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*ACTIVE + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +22 +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +LTYPE + 5 +23 +330 +21 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYBLOCK + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +24 +330 +21 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYLAYER + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +25 +330 +21 +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 +A0B +330 +0 +100 +AcDbSymbolTable + 70 +3 + 0 +LAYER + 5 +A0C +330 +A0B +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 5 +A0D +330 +A0B +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +none + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 5 +A0E +330 +A0B +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +Sketch + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +70 +330 +0 +100 +AcDbSymbolTable + 70 + 2 + 0 +STYLE + 5 +71 +330 +70 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +STANDARD + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +2.5 + 3 +arial.ttf + 4 + + 0 +STYLE + 5 +72 +330 +70 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +ANNOTATIVE + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +2.5 + 3 +arial.ttf + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +73 +330 +0 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +74 +330 +0 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +75 +330 +0 +100 +AcDbSymbolTable + 70 + 2 + 0 +APPID + 5 +76 +330 +75 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 + 0 + 0 +APPID + 5 +77 +330 +75 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACADANNOTATIVE + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +78 +330 +0 +100 +AcDbSymbolTable + 70 + 2 + 0 +DIMSTYLE +105 +79 +330 +78 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +STANDARD + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +0.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.03937007874016 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.625 + 71 + 0 + 72 + 0 + 73 + 0 + 74 + 0 + 75 + 0 + 76 + 0 + 77 + 1 + 78 + 8 +170 + 0 +171 + 3 +172 + 1 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 +270 + 2 +271 + 2 +272 + 2 +273 + 2 +274 + 3 +340 +71 +275 + 0 +280 + 0 +281 + 0 +282 + 0 +283 + 0 +284 + 8 +285 + 0 +286 + 0 +287 + 3 +288 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +A01 +330 +0 +100 +AcDbSymbolTable + 70 +5 + 0 +BLOCK_RECORD + 5 +A02 +330 +A01 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*MODEL_SPACE + 0 +BLOCK_RECORD + 5 +A03 +330 +A01 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*PAPER_SPACE + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +A04 +330 +A02 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*MODEL_SPACE + 70 + 0 + 10 +0 + 20 +0 + 30 +0 + 3 +*MODEL_SPACE + 1 + + 0 +ENDBLK + 5 +A05 +330 +A02 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +A06 +330 +A03 +100 +AcDbEntity + 67 +1 + 8 +0 +100 +AcDbBlockBegin + 2 +*PAPER_SPACE + 70 + 0 + 10 +0 + 20 +0 + 30 +0 + 3 +*PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +A07 +330 +A03 +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +ELLIPSE + 5 +A08 +330 +A02 +100 +AcDbEntity + 8 +Sketch +100 +AcDbEllipse + 10 +0 + 20 +0 + 30 +0 + 11 +8.77715 + 21 +7.66376 + 31 +0 + 40 +0.286616 + 41 +0 + 42 +6.28318 + 0 +SPLINE + 5 +A09 +330 +A02 +100 +AcDbEntity + 8 +Sketch +100 +AcDbSpline +210 +0 +220 +0 +230 +1 + 70 +8 + 71 +3 + 72 +14 + 73 +10 + 74 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +0.333333 + 40 +0.333333 + 40 +0.333333 + 40 +0.666667 + 40 +0.666667 + 40 +0.666667 + 40 +1 + 40 +1 + 40 +1 + 40 +1 + 10 +-12.2216 + 20 +0.381723 + 30 +0 + 10 +-14.6312 + 20 +-12.4864 + 30 +0 + 10 +-9.5151 + 20 +-15.1609 + 30 +0 + 10 +-3.10078 + 20 +-14.5598 + 30 +0 + 10 +3.31354 + 20 +-13.9586 + 30 +0 + 10 +11.0261 + 20 +-10.0818 + 30 +0 + 10 +13.905 + 20 +-2.90622 + 30 +0 + 10 +16.7839 + 20 +4.26941 + 30 +0 + 10 +14.8292 + 20 +14.7439 + 30 +0 + 10 +3.47066 + 20 +13.0779 + 30 +0 + 0 +LINE + 5 +A0A +330 +A02 +100 +AcDbEntity + 8 +Sketch +100 +AcDbLine + 10 +-12.1368 + 20 +0.367987 + 30 +0 + 11 +3.46911 + 21 +13.0773 + 31 +0 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +F000 +330 +0 +100 +AcDbDictionary + 3 +ACAD_GROUP +350 +F001 + 0 +DICTIONARY + 5 +F001 +330 +F000 +100 +AcDbDictionary + 0 +ENDSEC + 0 +EOF \ No newline at end of file From 88092b2a097dc52602b72bc7aeafcbb6ec937021 Mon Sep 17 00:00:00 2001 From: adam-urbanczyk Date: Fri, 17 Jul 2020 16:58:49 +0200 Subject: [PATCH 5/6] Fixed rational spline dxf import --- cadquery/occ_impl/importers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cadquery/occ_impl/importers.py b/cadquery/occ_impl/importers.py index 2196349eb..e5f074cd9 100644 --- a/cadquery/occ_impl/importers.py +++ b/cadquery/occ_impl/importers.py @@ -151,12 +151,13 @@ def _dxf_spline(el): if rational: spline = Geom_BSplineCurve( - pts, knots, weights, multiplicities, degree, periodic + pts, weights, knots, multiplicities, degree, periodic ) else: spline = Geom_BSplineCurve(pts, knots, multiplicities, degree, periodic) return (Edge(BRepBuilderAPI_MakeEdge(spline).Edge()),) + except Exception: return () From 6d6da05d0d8204742ccb4cf9d1f013ad1ff8f1b9 Mon Sep 17 00:00:00 2001 From: adam-urbanczyk Date: Fri, 17 Jul 2020 16:59:21 +0200 Subject: [PATCH 6/6] More dxf spline tests --- tests/test_importers.py | 13 + tests/testdata/genshi.dxf | 1468 +++++++++++++++ tests/testdata/rational_spline.dxf | 2686 ++++++++++++++++++++++++++++ 3 files changed, 4167 insertions(+) create mode 100644 tests/testdata/genshi.dxf create mode 100644 tests/testdata/rational_spline.dxf diff --git a/tests/test_importers.py b/tests/test_importers.py index 5c559f030..2b5ae8f04 100644 --- a/tests/test_importers.py +++ b/tests/test_importers.py @@ -117,6 +117,19 @@ def testImportDXF(self): self.assertEqual(obj.faces().size(), 1) self.assertEqual(obj.wires().size(), 2) + # test rational spline import + filename = os.path.join(testdataDir, "rational_spline.dxf") + obj = importers.importDXF(filename) + self.assertTrue(obj.val().isValid()) + self.assertEqual(obj.faces().size(), 1) + self.assertEqual(obj.edges().size(), 1) + + # importing of a complex shape exported from Inkscape + filename = os.path.join(testdataDir, "genshi.dxf") + obj = importers.importDXF(filename) + self.assertTrue(obj.val().isValid()) + self.assertEqual(obj.faces().size(), 1) + if __name__ == "__main__": import unittest diff --git a/tests/testdata/genshi.dxf b/tests/testdata/genshi.dxf new file mode 100644 index 000000000..9662e95ec --- /dev/null +++ b/tests/testdata/genshi.dxf @@ -0,0 +1,1468 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1014 + 9 +$HANDSEED + 5 +FFFF + 9 +$MEASUREMENT + 70 + 1 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +330 +0 +100 +AcDbSymbolTable + 70 + 4 + 0 +VPORT + 5 +2E +330 +8 +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*ACTIVE + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +210.0 + 22 +148.5 + 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 +341.0 + 41 +1.24 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 3 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +5 +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +LTYPE + 5 +14 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYBLOCK + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +15 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYLAYER + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +16 +330 +5 +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 +50 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 +0 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +3 +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +STYLE + 5 +11 +330 +3 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +STANDARD + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +2.5 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +6 +330 +0 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +7 +330 +0 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +9 +330 +0 +100 +AcDbSymbolTable + 70 + 2 + 0 +APPID + 5 +12 +330 +9 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +A +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +DIMSTYLE +105 +27 +330 +A +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.03937007874016 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.625 + 71 + 0 + 72 + 0 + 73 + 0 + 74 + 0 + 75 + 0 + 76 + 0 + 77 + 1 + 78 + 8 +170 + 0 +171 + 3 +172 + 1 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 +270 + 2 +271 + 2 +272 + 2 +273 + 2 +274 + 3 +340 +11 +275 + 0 +280 + 0 +281 + 0 +282 + 0 +283 + 0 +284 + 8 +285 + 0 +286 + 0 +287 + 3 +288 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +1 +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +BLOCK_RECORD + 5 +1F +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*MODEL_SPACE + 0 +BLOCK_RECORD + 5 +1B +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*PAPER_SPACE + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +20 +330 +1F +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 +21 +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +1C +330 +1B +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockBegin + 2 +*PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +1D +330 +1B +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +SPLINE + 5 +100 +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +8 + 73 +4 + 74 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +1 + 40 +1 + 40 +1 + 40 +1 + 10 +21.600000 + 20 +76.000000 + 30 +0.0 + 10 +9.600000 + 20 +69.600000 + 30 +0.0 + 10 +3.200000 + 20 +55.200000 + 30 +0.0 + 10 +2.400000 + 20 +45.600000 + 30 +0.0 + 0 +SPLINE + 5 +101 +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +8 + 73 +4 + 74 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +1 + 40 +1 + 40 +1 + 40 +1 + 10 +2.400000 + 20 +45.600000 + 30 +0.0 + 10 +1.600000 + 20 +36.000000 + 30 +0.0 + 10 +3.200000 + 20 +32.000000 + 30 +0.0 + 10 +5.600000 + 20 +27.200000 + 30 +0.0 + 0 +SPLINE + 5 +102 +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +8 + 73 +4 + 74 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +1 + 40 +1 + 40 +1 + 40 +1 + 10 +5.600000 + 20 +27.200000 + 30 +0.0 + 10 +11.200000 + 20 +16.800000 + 30 +0.0 + 10 +18.400000 + 20 +13.600000 + 30 +0.0 + 10 +29.600000 + 20 +13.600000 + 30 +0.0 + 0 +SPLINE + 5 +103 +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +8 + 73 +4 + 74 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +1 + 40 +1 + 40 +1 + 40 +1 + 10 +40.000000 + 20 +4.000000 + 30 +0.0 + 10 +40.000000 + 20 +0.800000 + 30 +0.0 + 10 +46.400000 + 20 +0.800000 + 30 +0.0 + 10 +46.400000 + 20 +4.000000 + 30 +0.0 + 0 +LWPOLYLINE + 5 +104 +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbPolyline + 90 +3 + 70 +0 + 10 +29.600000 + 20 +13.600000 + 30 +0.0 + 10 +40.000000 + 20 +14.400000 + 30 +0.0 + 10 +40.000000 + 20 +4.000000 + 30 +0.0 + 0 +SPLINE + 5 +105 +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +8 + 73 +4 + 74 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +1 + 40 +1 + 40 +1 + 40 +1 + 10 +46.400000 + 20 +29.600000 + 30 +0.0 + 10 +46.400000 + 20 +36.800000 + 30 +0.0 + 10 +45.600000 + 20 +36.000000 + 30 +0.0 + 10 +43.200000 + 20 +36.000000 + 30 +0.0 + 0 +SPLINE + 5 +106 +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +8 + 73 +4 + 74 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +1 + 40 +1 + 40 +1 + 40 +1 + 10 +43.200000 + 20 +36.000000 + 30 +0.0 + 10 +40.800000 + 20 +36.000000 + 30 +0.0 + 10 +40.000000 + 20 +35.200000 + 30 +0.0 + 10 +40.000000 + 20 +32.000000 + 30 +0.0 + 0 +SPLINE + 5 +107 +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +8 + 73 +4 + 74 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +1 + 40 +1 + 40 +1 + 40 +1 + 10 +40.000000 + 20 +32.000000 + 30 +0.0 + 10 +40.000000 + 20 +26.400000 + 30 +0.0 + 10 +41.600000 + 20 +19.200000 + 30 +0.0 + 10 +27.200000 + 20 +19.200000 + 30 +0.0 + 0 +SPLINE + 5 +108 +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +8 + 73 +4 + 74 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +1 + 40 +1 + 40 +1 + 40 +1 + 10 +27.200000 + 20 +19.200000 + 30 +0.0 + 10 +20.800000 + 20 +19.200000 + 30 +0.0 + 10 +14.400000 + 20 +21.600000 + 30 +0.0 + 10 +12.800000 + 20 +25.600000 + 30 +0.0 + 0 +SPLINE + 5 +109 +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +8 + 73 +4 + 74 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +1 + 40 +1 + 40 +1 + 40 +1 + 10 +12.800000 + 20 +25.600000 + 30 +0.0 + 10 +5.600000 + 20 +39.200000 + 30 +0.0 + 10 +14.400000 + 20 +65.600000 + 30 +0.0 + 10 +28.800000 + 20 +72.000000 + 30 +0.0 + 0 +SPLINE + 5 +10a +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +8 + 73 +4 + 74 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +1 + 40 +1 + 40 +1 + 40 +1 + 10 +28.800000 + 20 +72.000000 + 30 +0.0 + 10 +34.400000 + 20 +74.400000 + 30 +0.0 + 10 +35.200000 + 20 +74.400000 + 30 +0.0 + 10 +39.200000 + 20 +71.200000 + 30 +0.0 + 0 +SPLINE + 5 +10b +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +8 + 73 +4 + 74 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +1 + 40 +1 + 40 +1 + 40 +1 + 10 +39.200000 + 20 +71.200000 + 30 +0.0 + 10 +44.000000 + 20 +67.200000 + 30 +0.0 + 10 +49.600000 + 20 +68.800000 + 30 +0.0 + 10 +49.600000 + 20 +73.600000 + 30 +0.0 + 0 +SPLINE + 5 +10c +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +8 + 73 +4 + 74 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +0 + 40 +1 + 40 +1 + 40 +1 + 40 +1 + 10 +49.600000 + 20 +73.600000 + 30 +0.0 + 10 +49.600000 + 20 +80.000000 + 30 +0.0 + 10 +32.000000 + 20 +81.600000 + 30 +0.0 + 10 +21.600000 + 20 +76.000000 + 30 +0.0 + 0 +LWPOLYLINE + 5 +10d +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbPolyline + 90 +2 + 70 +0 + 10 +46.400000 + 20 +4.000000 + 30 +0.0 + 10 +46.400000 + 20 +29.600000 + 30 +0.0 + 0 +LWPOLYLINE + 5 +10e +100 +AcDbEntity + 8 +0 + 62 +7 +100 +AcDbPolyline + 90 +1 + 70 +1 + 10 +21.600000 + 20 +76.000000 + 30 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +C +330 +0 +100 +AcDbDictionary + 3 +ACAD_GROUP +350 +D + 3 +ACAD_MLINESTYLE +350 +17 + 0 +DICTIONARY + 5 +D +330 +C +100 +AcDbDictionary + 0 +DICTIONARY + 5 +1A +330 +C +100 +AcDbDictionary + 0 +DICTIONARY + 5 +17 +330 +C +100 +AcDbDictionary + 3 +STANDARD +350 +18 + 0 +DICTIONARY + 5 +19 +330 +C +100 +AcDbDictionary + 0 +ENDSEC + 0 +EOF diff --git a/tests/testdata/rational_spline.dxf b/tests/testdata/rational_spline.dxf new file mode 100644 index 000000000..e277e0562 --- /dev/null +++ b/tests/testdata/rational_spline.dxf @@ -0,0 +1,2686 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1015 + 9 +$ACADMAINTVER + 70 +6 + 9 +$DWGCODEPAGE + 3 +ANSI_1252 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +-100 + 20 +-100 + 30 +-100 + 9 +$EXTMAX + 10 +100 + 20 +100 + 30 +100 + 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 +$LTSCALE + 40 +1.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 +$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 +0 + 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 +3 + 9 +$DIMALTF + 40 +0.03937007874 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 +1 + 9 +$DIMTVP + 40 +0.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 +0 + 9 +$DIMTZIN + 70 +8 + 9 +$DIMALTZ + 70 +0 + 9 +$DIMALTTZ + 70 +0 + 9 +$DIMUPT + 70 +0 + 9 +$DIMDEC + 70 +2 + 9 +$DIMTDEC + 70 +2 + 9 +$DIMALTU + 70 +2 + 9 +$DIMALTTD + 70 +3 + 9 +$DIMTXSTY + 7 +Standard + 9 +$DIMAUNIT + 70 +0 + 9 +$DIMADEC + 70 +0 + 9 +$DIMALTRND + 40 +0.0 + 9 +$DIMAZIN + 70 +0 + 9 +$DIMDSEP + 70 +44 + 9 +$DIMATFIT + 70 +3 + 9 +$DIMFRAC + 70 +0 + 9 +$DIMLDRBLK + 1 + + 9 +$DIMLUNIT + 70 +2 + 9 +$DIMLWD + 70 +-2 + 9 +$DIMLWE + 70 +-2 + 9 +$DIMTMOVE + 70 +0 + 9 +$LUNITS + 70 +2 + 9 +$LUPREC + 70 +4 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +10.0 + 9 +$AUNITS + 70 +0 + 9 +$AUPREC + 70 +2 + 9 +$MENU + 1 +. + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 +0 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$CHAMFERC + 40 +0.0 + 9 +$CHAMFERD + 40 +0.0 + 9 +$SKPOLY + 70 +0 + 9 +$TDCREATE + 40 +2459047.8392592594 + 9 +$TDUCREATE + 40 +2458532.153996898 + 9 +$TDUPDATE + 40 +2459047.8408680554 + 9 +$TDUUPDATE + 40 +2458532.1544311 + 9 +$TDINDWG + 40 +0.0 + 9 +$TDUSRTIMER + 40 +0.0 + 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 +$SPLFRAME + 70 +0 + 9 +$SPLINETYPE + 70 +6 + 9 +$SPLINESEGS + 70 +8 + 9 +$HANDSEED + 5 +2E + 9 +$SURFTAB1 + 70 +6 + 9 +$SURFTAB2 + 70 +6 + 9 +$SURFTYPE + 70 +6 + 9 +$SURFU + 70 +6 + 9 +$SURFV + 70 +6 + 9 +$UCSBASE + 2 + + 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 +$UCSORTHOREF + 2 + + 9 +$UCSORTHOVIEW + 70 +0 + 9 +$UCSORGTOP + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGBOTTOM + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGLEFT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGRIGHT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGFRONT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGBACK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSBASE + 2 + + 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 +$PUCSORTHOREF + 2 + + 9 +$PUCSORTHOVIEW + 70 +0 + 9 +$PUCSORGTOP + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGBOTTOM + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGLEFT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGRIGHT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGFRONT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGBACK + 10 +0.0 + 20 +0.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 +64 + 9 +$PINSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMCHECK + 70 +0 + 9 +$PEXTMIN + 10 +1e+20 + 20 +1e+20 + 30 +1e+20 + 9 +$PEXTMAX + 10 +-1e+20 + 20 +-1e+20 + 30 +-1e+20 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +420.0 + 20 +297.0 + 9 +$UNITMODE + 70 +0 + 9 +$VISRETAIN + 70 +1 + 9 +$PLINEGEN + 70 +0 + 9 +$PSLTSCALE + 70 +1 + 9 +$TREEDEPTH + 70 +3020 + 9 +$CMLSTYLE + 2 +Standard + 9 +$CMLJUST + 70 +0 + 9 +$CMLSCALE + 40 +20.0 + 9 +$PROXYGRAPHICS + 70 +1 + 9 +$MEASUREMENT + 70 +1 + 9 +$CELWEIGHT +370 +-1 + 9 +$ENDCAPS +280 +0 + 9 +$JOINSTYLE +280 +0 + 9 +$LWDISPLAY +290 +0 + 9 +$INSUNITS + 70 +6 + 9 +$HYPERLINKBASE + 1 + + 9 +$STYLESHEET + 1 + + 9 +$XEDIT +290 +1 + 9 +$CEPSNTYPE +380 +0 + 9 +$PSTYLEMODE +290 +1 + 9 +$FINGERPRINTGUID + 2 +5BFBF574-C78F-11EA-9B37-00E04C680268 + 9 +$VERSIONGUID + 2 +AECB58EE-C78F-11EA-9B37-00E04C680268 + 9 +$EXTNAMES +290 +1 + 9 +$PSVPSCALE + 40 +0.0 + 9 +$OLESTARTUP +290 +0 + 0 +ENDSEC + 0 +SECTION + 2 +CLASSES + 0 +CLASS + 1 +ACDBDICTIONARYWDFLT + 2 +AcDbDictionaryWithDefault + 3 +ObjectDBX Classes + 90 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +SUN + 2 +AcDbSun + 3 +SCENEOE + 90 +1153 +280 +0 +281 +0 + 0 +CLASS + 1 +VISUALSTYLE + 2 +AcDbVisualStyle + 3 +ObjectDBX Classes + 90 +4095 +280 +0 +281 +0 + 0 +CLASS + 1 +MATERIAL + 2 +AcDbMaterial + 3 +ObjectDBX Classes + 90 +1153 +280 +0 +281 +0 + 0 +CLASS + 1 +SCALE + 2 +AcDbScale + 3 +ObjectDBX Classes + 90 +1153 +280 +0 +281 +0 + 0 +CLASS + 1 +TABLESTYLE + 2 +AcDbTableStyle + 3 +ObjectDBX Classes + 90 +4095 +280 +0 +281 +0 + 0 +CLASS + 1 +MLEADERSTYLE + 2 +AcDbMLeaderStyle + 3 +ACDB_MLEADERSTYLE_CLASS + 90 +4095 +280 +0 +281 +0 + 0 +CLASS + 1 +DICTIONARYVAR + 2 +AcDbDictionaryVar + 3 +ObjectDBX Classes + 90 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +CELLSTYLEMAP + 2 +AcDbCellStyleMap + 3 +ObjectDBX Classes + 90 +1152 +280 +0 +281 +0 + 0 +CLASS + 1 +MENTALRAYRENDERSETTINGS + 2 +AcDbMentalRayRenderSettings + 3 +SCENEOE + 90 +1024 +280 +0 +281 +0 + 0 +CLASS + 1 +ACDBDETAILVIEWSTYLE + 2 +AcDbDetailViewStyle + 3 +ObjectDBX Classes + 90 +1025 +280 +0 +281 +0 + 0 +CLASS + 1 +ACDBSECTIONVIEWSTYLE + 2 +AcDbSectionViewStyle + 3 +ObjectDBX Classes + 90 +1025 +280 +0 +281 +0 + 0 +CLASS + 1 +RASTERVARIABLES + 2 +AcDbRasterVariables + 3 +ISM + 90 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +ACDBPLACEHOLDER + 2 +AcDbPlaceHolder + 3 +ObjectDBX Classes + 90 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +LAYOUT + 2 +AcDbLayout + 3 +ObjectDBX Classes + 90 +0 +280 +0 +281 +0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +330 +0 +100 +AcDbSymbolTable + 70 +1 + 0 +VPORT + 5 +23 +330 +8 +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*Active + 70 +0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +70.0 + 22 +50.0 + 13 +0.0 + 23 +0.0 + 14 +0.5 + 24 +0.5 + 15 +0.5 + 25 +0.5 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +1.0 + 41 +1.34 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 +0 + 72 +1000 + 73 +1 + 74 +3 + 75 +0 + 76 +0 + 77 +0 + 78 +0 +281 +0 + 65 +0 +146 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +2 +330 +0 +100 +AcDbSymbolTable + 70 +3 + 0 +LTYPE + 5 +24 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByBlock + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +25 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByLayer + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +26 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +Continuous + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +1 +330 +0 +100 +AcDbSymbolTable + 70 +2 + 0 +LAYER + 5 +27 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 +0 + 62 +7 + 6 +Continuous +370 +-3 +390 +13 + 0 +LAYER + 5 +28 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +Defpoints + 70 +0 + 62 +7 + 6 +Continuous +290 +0 +370 +-3 +390 +13 + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +5 +330 +0 +100 +AcDbSymbolTable + 70 +1 + 0 +STYLE + 5 +29 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +Standard + 70 +0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +2.5 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +7 +330 +0 +100 +AcDbSymbolTable + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +6 +330 +0 +100 +AcDbSymbolTable + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +3 +330 +0 +100 +AcDbSymbolTable + 70 +1 + 0 +APPID + 5 +2A +330 +3 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +4 +330 +0 +100 +AcDbSymbolTable + 70 +1 +100 +AcDbDimStyleTable + 0 +DIMSTYLE +105 +2B +330 +4 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +Standard + 70 +0 + 3 + + 4 + + 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.03937007874 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.625 +148 +0.0 + 71 +0 + 72 +0 + 73 +0 + 74 +0 + 75 +0 + 76 +0 + 77 +1 + 78 +8 + 79 +0 +170 +0 +171 +3 +172 +1 +173 +0 +174 +0 +175 +0 +176 +0 +177 +0 +178 +0 +179 +0 +271 +0 +272 +2 +273 +2 +274 +3 +275 +0 +276 +0 +277 +2 +278 +44 +279 +0 +280 +0 +281 +0 +282 +0 +283 +0 +284 +8 +285 +0 +286 +0 +288 +0 +289 +3 +371 +-2 +372 +-2 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +9 +330 +0 +100 +AcDbSymbolTable + 70 +2 + 0 +BLOCK_RECORD + 5 +17 +330 +9 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Model_Space +340 +1A + 0 +BLOCK_RECORD + 5 +1B +330 +9 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space +340 +1E + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +18 +330 +17 +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 +19 +330 +17 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +1C +330 +1B +100 +AcDbEntity + 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 +1D +330 +1B +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +SPLINE + 5 +2D +330 +17 +100 +AcDbEntity + 8 +0 +100 +AcDbSpline + 70 +7 + 71 +3 + 72 +5 + 73 +4 + 74 +0 + 40 +0.0 + 40 +1.0 + 40 +2.0 + 40 +3.0 + 40 +4.0 + 41 +3.0 + 41 +1.0 + 41 +1.0 + 41 +1.0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 10 +1250.0 + 20 +1560.0 + 30 +0.0 + 10 +3130.0 + 20 +610.0 + 30 +0.0 + 10 +2250.0 + 20 +1250.0 + 30 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +A +330 +0 +100 +AcDbDictionary +281 +1 + 3 +ACAD_COLOR +350 +B + 3 +ACAD_GROUP +350 +C + 3 +ACAD_LAYOUT +350 +D + 3 +ACAD_MATERIAL +350 +E + 3 +ACAD_MLEADERSTYLE +350 +F + 3 +ACAD_MLINESTYLE +350 +10 + 3 +ACAD_PLOTSETTINGS +350 +11 + 3 +ACAD_PLOTSTYLENAME +350 +12 + 3 +ACAD_SCALELIST +350 +14 + 3 +ACAD_TABLESTYLE +350 +15 + 3 +ACAD_VISUALSTYLE +350 +16 + 0 +DICTIONARY + 5 +B +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +C +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +D +330 +A +100 +AcDbDictionary +281 +1 + 3 +Model +350 +1A + 3 +Layout1 +350 +1E + 0 +DICTIONARY + 5 +E +330 +A +100 +AcDbDictionary +281 +1 + 3 +ByBlock +350 +1F + 3 +ByLayer +350 +20 + 3 +Global +350 +21 + 0 +DICTIONARY + 5 +F +330 +A +100 +AcDbDictionary +281 +1 + 3 +Standard +350 +2C + 0 +DICTIONARY + 5 +10 +330 +A +100 +AcDbDictionary +281 +1 + 3 +Standard +350 +22 + 0 +DICTIONARY + 5 +11 +330 +A +100 +AcDbDictionary +281 +1 + 0 +ACDBDICTIONARYWDFLT + 5 +12 +330 +A +100 +AcDbDictionary +281 +1 + 3 +Normal +350 +13 +100 +AcDbDictionaryWithDefault +340 +13 + 0 +ACDBPLACEHOLDER + 5 +13 +330 +12 + 0 +DICTIONARY + 5 +14 +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +15 +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +16 +330 +A +100 +AcDbDictionary +281 +1 + 0 +LAYOUT + 5 +1A +330 +D +100 +AcDbPlotSettings + 1 + + 2 +Adobe PDF + 4 +A4 + 6 + + 40 +3.175 + 41 +3.175 + 42 +3.175 + 43 +3.175 + 44 +209.91 + 45 +297.03 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +1024 + 72 +0 + 73 +1 + 74 +5 + 7 + + 75 +16 + 76 +0 + 77 +2 + 78 +300 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Model + 70 +1 + 71 +0 + 10 +-3.175 + 20 +-3.175 + 11 +293.857 + 21 +206.735 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +29.068 + 24 +20.356 + 34 +0.0 + 15 +261.614 + 25 +183.204 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +1 +330 +17 + 0 +LAYOUT + 5 +1E +330 +D +100 +AcDbPlotSettings + 1 + + 2 +Adobe PDF + 4 +A4 + 6 + + 40 +3.175 + 41 +3.175 + 42 +3.175 + 43 +3.175 + 44 +209.91 + 45 +297.03 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +0 + 72 +0 + 73 +1 + 74 +5 + 7 + + 75 +16 + 76 +0 + 77 +2 + 78 +300 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout1 + 70 +1 + 71 +1 + 10 +-3.175 + 20 +-3.175 + 11 +293.857 + 21 +206.735 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +29.068 + 24 +20.356 + 34 +0.0 + 15 +261.614 + 25 +183.204 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +1 +330 +1B + 0 +MATERIAL + 5 +1F +102 +{ACAD_REACTORS +330 +E +102 +} +330 +E +100 +AcDbMaterial + 1 +ByBlock + 2 + + 70 +0 + 40 +1.0 + 71 +1 + 41 +1.0 + 91 +-1023410177 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 44 +0.5 + 73 +0 + 45 +1.0 + 46 +1.0 + 77 +1 + 4 + + 78 +1 + 79 +1 +170 +1 + 48 +1.0 +171 +1 + 6 + +172 +1 +173 +1 +174 +1 +140 +1.0 +141 +1.0 +175 +1 + 7 + +176 +1 +177 +1 +178 +1 +143 +1.0 +179 +1 + 8 + +270 +1 +271 +1 +272 +1 +145 +1.0 +146 +1.0 +273 +1 + 9 + +274 +1 +275 +1 +276 +1 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 94 +63 + 0 +MATERIAL + 5 +20 +102 +{ACAD_REACTORS +330 +E +102 +} +330 +E +100 +AcDbMaterial + 1 +ByLayer + 2 + + 70 +0 + 40 +1.0 + 71 +1 + 41 +1.0 + 91 +-1023410177 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 44 +0.5 + 73 +0 + 45 +1.0 + 46 +1.0 + 77 +1 + 4 + + 78 +1 + 79 +1 +170 +1 + 48 +1.0 +171 +1 + 6 + +172 +1 +173 +1 +174 +1 +140 +1.0 +141 +1.0 +175 +1 + 7 + +176 +1 +177 +1 +178 +1 +143 +1.0 +179 +1 + 8 + +270 +1 +271 +1 +272 +1 +145 +1.0 +146 +1.0 +273 +1 + 9 + +274 +1 +275 +1 +276 +1 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 94 +63 + 0 +MATERIAL + 5 +21 +102 +{ACAD_REACTORS +330 +E +102 +} +330 +E +100 +AcDbMaterial + 1 +Global + 2 + + 70 +0 + 40 +1.0 + 71 +1 + 41 +1.0 + 91 +-1023410177 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 44 +0.5 + 73 +0 + 45 +1.0 + 46 +1.0 + 77 +1 + 4 + + 78 +1 + 79 +1 +170 +1 + 48 +1.0 +171 +1 + 6 + +172 +1 +173 +1 +174 +1 +140 +1.0 +141 +1.0 +175 +1 + 7 + +176 +1 +177 +1 +178 +1 +143 +1.0 +179 +1 + 8 + +270 +1 +271 +1 +272 +1 +145 +1.0 +146 +1.0 +273 +1 + 9 + +274 +1 +275 +1 +276 +1 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 94 +63 + 0 +MLINESTYLE + 5 +22 +102 +{ACAD_REACTORS +330 +10 +102 +} +330 +10 +100 +AcDbMlineStyle + 2 +Standard + 70 +0 + 3 + + 62 +256 + 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