From 67436d81a57dc7f38a25df33d755a0bf4b37d3c4 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 14 Jul 2023 22:04:38 +0200 Subject: [PATCH 1/7] Add default extension to file names unless one is given --- src/layui/layui/gsiDeclLayDialogs.cc | 34 ++- src/layui/layui/layFileDialog.cc | 204 ++++-------------- src/layui/layui/layFileDialog.h | 23 +- src/plugins/streamers/cif/db_plugin/dbCIF.cc | 2 +- src/plugins/streamers/dxf/db_plugin/dbDXF.cc | 2 +- .../streamers/gds2/db_plugin/dbGDS2.cc | 2 +- .../streamers/magic/db_plugin/dbMAG.cc | 2 +- .../streamers/oasis/db_plugin/dbOASIS.cc | 2 +- .../pcb/db_plugin/dbGerberImporter.cc | 2 +- 9 files changed, 102 insertions(+), 171 deletions(-) diff --git a/src/layui/layui/gsiDeclLayDialogs.cc b/src/layui/layui/gsiDeclLayDialogs.cc index e6e4bad67..c08a774fe 100644 --- a/src/layui/layui/gsiDeclLayDialogs.cc +++ b/src/layui/layui/gsiDeclLayDialogs.cc @@ -26,6 +26,7 @@ #include "gsiDeclBasic.h" #include "layBrowserDialog.h" #include "layBrowserPanel.h" +#include "layFileDialog.h" #include #include @@ -926,11 +927,30 @@ static tl::Variant ask_open_file_name (const std::string &title, const std::stri static tl::Variant ask_save_file_name (const std::string &title, const std::string &dir, const std::string &filter) { - QString f = QFileDialog::getSaveFileName (QApplication::activeWindow (), tl::to_qstring (title), tl::to_qstring (dir), tl::to_qstring (filter)); + QString selected_filter; + + QString f = QFileDialog::getSaveFileName (QApplication::activeWindow (), tl::to_qstring (title), tl::to_qstring (dir), tl::to_qstring (filter), &selected_filter); if (f.isEmpty ()) { return tl::Variant (); } else { - return tl::Variant (tl::to_string (f)); + return tl::Variant (lay::FileDialog::add_default_extension (tl::to_string (f), selected_filter)); + } +} + +static tl::Variant ask_save_file_name2 (const std::string &title, const std::string &dir, const std::string &filter) +{ + QString selected_filter; + QString qfilter = tl::to_qstring (filter); + + QString f = QFileDialog::getSaveFileName (QApplication::activeWindow (), tl::to_qstring (title), tl::to_qstring (dir), qfilter, &selected_filter); + if (f.isEmpty ()) { + return tl::Variant (); + } else { + tl::Variant v; + v.set_list (); + v.push (lay::FileDialog::add_default_extension (tl::to_string (f), selected_filter)); + v.push (lay::FileDialog::find_selected_filter (qfilter, selected_filter)); + return v; } } @@ -1012,6 +1032,16 @@ Class decl_FileDialog ("lay", "FileDialog", "@return The path of the file chosen or \"nil\" if \"Cancel\" was pressed\n" "\n" "This method has been introduced in version 0.23. It is somewhat easier to use than the get_... equivalent.\n" + ) + + gsi::method ("ask_save_file_name_with_filter", &ask_save_file_name2, gsi::arg ("title"), gsi::arg ("dir"), gsi::arg ("filter"), + "@brief Select one file for writing\n" + "\n" + "@param title The title of the dialog\n" + "@param dir The directory selected initially\n" + "@param filter The filters available, for example \"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)\"\n" + "@return \"nil\" if \"Cancel\" was pressed, otherwise a pair: The path of the file chosen and the index selected file type (-1 if no specific type was selected)\n" + "\n" + "This method has been introduced in version 0.28.11.\n" ), "@brief Various methods to request a file name\n" "\n" diff --git a/src/layui/layui/layFileDialog.cc b/src/layui/layui/layFileDialog.cc index 2a9ad2615..4e7280bcd 100644 --- a/src/layui/layui/layFileDialog.cc +++ b/src/layui/layui/layFileDialog.cc @@ -32,6 +32,8 @@ #include "layFileDialog.h" #include "tlInternational.h" +#include "tlString.h" +#include "tlFileUtils.h" namespace lay { @@ -60,32 +62,53 @@ FileDialog::~FileDialog () // .. nothing yet .. } -// not used if standard dialogs are used (disabled to avoid compiler warning): -#if 0 -static void -split_filters (const QString &filters, QStringList &slist) +int +FileDialog::find_selected_filter (const QString &fs, const QString &selected_filter) { - QString s; - for (const char *cp = filters.ascii (); *cp; ++cp) { - if (cp[0] == ';' && cp[1] == ';') { - slist << s; - ++cp; - s = ""; - } else { - s += *cp; + QStringList filters = fs.split (tl::to_qstring (";;")); + + for (auto f = filters.begin (); f != filters.end (); ++f) { + if (*f == selected_filter) { + return int (f - filters.begin ()); } } - if (s != "") { - slist << s; - } + return -1; +} + +std::string +FileDialog::add_default_extension (const std::string &path, const QString &selected_filter) +{ + if (tl::extension (path).empty ()) { + + std::string sf = tl::to_string (selected_filter); + + auto star = sf.find ("*."); + if (star != std::string::npos) { + + tl::Extractor ex (sf.c_str () + star + 2); + std::string ext; + + if (ex.try_read_word (ext)) { + return path + "." + ext; + } + + } + + } + + return path; +} + +int +FileDialog::selected_filter () const +{ + return find_selected_filter (m_filters, m_sel_filter); } -#endif bool FileDialog::get_open (std::string &fp, const std::string &title) { -#if 1 // Use the standard (system) dialogs: QString file_name; @@ -107,54 +130,11 @@ FileDialog::get_open (std::string &fp, const std::string &title) } else { return false; } -#else - QString file_name; - if (! fp.empty ()) { - QFileInfo fi (fp.c_str ()); - m_dir = fi.absoluteDir (); - file_name = fi.fileName (); - } - - QFileDialog fdia (QApplication::activeWindow ()); - - fdia.setDirectory (m_dir); - if (m_def_suffix != "") { - fdia.setDefaultSuffix (m_def_suffix); - } - - QStringList types; - split_filters (m_filters, types); - fdia.setFilters (types); - - fdia.setReadOnly (true); - fdia.setViewMode (QFileDialog::Detail); - fdia.setFileMode (QFileDialog::ExistingFile); - fdia.setAcceptMode (QFileDialog::AcceptOpen); - fdia.setConfirmOverwrite (true); - fdia.setCaption (QString (tl::to_string (QObject::tr ("Open ")).c_str ()) + (title.empty () ? m_title : tl::to_qstring (title))); - if (! file_name.isEmpty ()) { - fdia.selectFile (file_name); - } - - QStringList files; - if (fdia.exec ()) { - files = fdia.selectedFiles(); - if (files.size () > 0) { - fp = tl::to_string (files [0]); - QFileInfo fi (files [0]); - m_dir = fi.absoluteDir (); - return true; - } - } - - return false; -#endif } bool FileDialog::get_open (std::vector &fp, const std::string &dir, const std::string &title) { -#if 1 // Use the standard (system) dialogs: if (! dir.empty ()) { @@ -175,68 +155,11 @@ FileDialog::get_open (std::vector &fp, const std::string &dir, cons } else { return false; } -#else - if (! dir.empty ()) { - QDir fi (dir.c_str ()); - m_dir = fi.absolutePath (); - } - - QStringList file_names; - for (std::vector::const_iterator f = fp.begin (); f != fp.end (); ++f) { - QFileInfo fi (f->c_str ()); - m_dir = fi.absoluteDir (); - file_names << QString (f->c_str ()); - } - - QFileDialog fdia (QApplication::activeWindow ()); - - fdia.setDirectory (m_dir); - if (m_def_suffix != "") { - fdia.setDefaultSuffix (m_def_suffix); - } - - QStringList types; - split_filters (m_filters, types); - fdia.setFilters (types); - - fdia.setReadOnly (true); - fdia.setViewMode (QFileDialog::Detail); - fdia.setFileMode (QFileDialog::ExistingFiles); - fdia.setAcceptMode (QFileDialog::AcceptOpen); - fdia.setConfirmOverwrite (true); - fdia.setCaption (QString (tl::to_string (QObject::tr ("Open ")).c_str ()) + (title.empty () ? m_title : tl::to_qstring (title))); - - for (QStringList::iterator f = file_names.begin (); f != file_names.end (); ++f) { - fdia.selectFile (*f); - } - - QStringList files; - if (fdia.exec ()) { - - files = fdia.selectedFiles(); - if (! files.isEmpty ()) { - - fp.clear (); - for (QStringList::iterator f = files.begin (); f != files.end (); ++f) { - fp.push_back (tl::to_string (*f)); - QFileInfo fi (*f); - m_dir = fi.absoluteDir (); - } - - return true; - - } - - } - - return false; -#endif } bool FileDialog::get_save (std::string &fp, const std::string &title) { -#if 1 // Use the standard (system) dialogs: QString file_name; @@ -251,55 +174,16 @@ FileDialog::get_save (std::string &fp, const std::string &title) QString f = QFileDialog::getSaveFileName (QApplication::activeWindow (), (title.empty () ? m_title : tl::to_qstring (title)), file_name, m_filters, &m_sel_filter); if (! f.isEmpty ()) { - fp = tl::to_string (f); + + fp = add_default_extension (tl::to_string (f), m_sel_filter); + QFileInfo fi (f); m_dir = fi.absoluteDir (); return true; + } else { return false; } -#else - QString file_name; - if (! fp.empty ()) { - QFileInfo fi (fp.c_str ()); - m_dir = fi.absoluteDir (); - file_name = fi.fileName (); - } - - QFileDialog fdia (QApplication::activeWindow ()); - - fdia.setDirectory (m_dir); - if (m_def_suffix != "") { - fdia.setDefaultSuffix (m_def_suffix); - } - - QStringList types; - split_filters (m_filters, types); - fdia.setFilters (types); - - fdia.setReadOnly (false); - fdia.setViewMode (QFileDialog::Detail); - fdia.setFileMode (QFileDialog::AnyFile); - fdia.setAcceptMode (QFileDialog::AcceptSave); - fdia.setConfirmOverwrite (true); - fdia.setCaption (QString (tl::to_string (QObject::tr ("Save ")).c_str ()) + (title.empty () ? m_title : tl::to_qstring (title))); - if (! file_name.isEmpty ()) { - fdia.selectFile (file_name); - } - - QStringList files; - if (fdia.exec ()) { - files = fdia.selectedFiles(); - if (files.size () > 0) { - fp = tl::to_string (files [0]); - QFileInfo fi (files [0]); - m_dir = fi.absoluteDir (); - return true; - } - } - - return false; -#endif } } // namespace lay diff --git a/src/layui/layui/layFileDialog.h b/src/layui/layui/layFileDialog.h index b1cd0d626..823d23b27 100644 --- a/src/layui/layui/layFileDialog.h +++ b/src/layui/layui/layFileDialog.h @@ -65,20 +65,27 @@ public: ~FileDialog (); /** - * @brief Get a file name to read + * @brief Gets a file name to read */ bool get_open (std::string &file_name, const std::string &title = std::string ()); /** - * @brief Read multiple files names + * @brief Reads multiple files names */ bool get_open (std::vector &file_names, const std::string &dir = std::string (), const std::string &title = std::string ()); /** - * @brief Get a file name to save + * @brief Gets a file name to save */ bool get_save (std::string &file_name, const std::string &title = std::string ()); + /** + * @brief Gets the selected filter or -1 if no specific filter was selected + * + * This value is only set after get_open or get_save returned true + */ + int selected_filter () const; + /** * @brief Make the file names use UTF8 encoding * @@ -87,6 +94,16 @@ public: */ static void set_utf8 (bool utf); + /** + * @brief Gets the index of the selected filter from the filter list + */ + static int find_selected_filter (const QString &filters, const QString &selected_filter); + + /** + * @brief Adds the default extension unless there is one already + */ + static std::string add_default_extension (const std::string &path, const QString &selected_filter); + private: QDir m_dir; QString m_title; diff --git a/src/plugins/streamers/cif/db_plugin/dbCIF.cc b/src/plugins/streamers/cif/db_plugin/dbCIF.cc index f56600e25..abf5f4edc 100644 --- a/src/plugins/streamers/cif/db_plugin/dbCIF.cc +++ b/src/plugins/streamers/cif/db_plugin/dbCIF.cc @@ -54,7 +54,7 @@ public: virtual std::string format_name () const { return "CIF"; } virtual std::string format_desc () const { return "CIF"; } virtual std::string format_title () const { return "CIF (Caltech interchange format)"; } - virtual std::string file_format () const { return "CIF files (*.CIF *.cif *.cif.gz *.CIF.gz)"; } + virtual std::string file_format () const { return "CIF files (*.cif *.CIF *.cif.gz *.CIF.gz)"; } static tl::Extractor &skip_blanks (tl::Extractor &ex) { diff --git a/src/plugins/streamers/dxf/db_plugin/dbDXF.cc b/src/plugins/streamers/dxf/db_plugin/dbDXF.cc index 18b0a7525..3954d4916 100644 --- a/src/plugins/streamers/dxf/db_plugin/dbDXF.cc +++ b/src/plugins/streamers/dxf/db_plugin/dbDXF.cc @@ -54,7 +54,7 @@ public: virtual std::string format_name () const { return "DXF"; } virtual std::string format_desc () const { return "DXF"; } virtual std::string format_title () const { return "DXF (AutoCAD)"; } - virtual std::string file_format () const { return "DXF files (*.DXF *.dxf *.dxf.gz *.DXF.gz)"; } + virtual std::string file_format () const { return "DXF files (*.dxf *.DXF *.dxf.gz *.DXF.gz)"; } virtual bool detect (tl::InputStream &s) const { diff --git a/src/plugins/streamers/gds2/db_plugin/dbGDS2.cc b/src/plugins/streamers/gds2/db_plugin/dbGDS2.cc index f5ee8efc7..3ed9e49e5 100644 --- a/src/plugins/streamers/gds2/db_plugin/dbGDS2.cc +++ b/src/plugins/streamers/gds2/db_plugin/dbGDS2.cc @@ -38,7 +38,7 @@ class GDS2FormatDeclaration virtual std::string format_name () const { return "GDS2"; } virtual std::string format_desc () const { return "GDS2"; } virtual std::string format_title () const { return "GDS2"; } - virtual std::string file_format () const { return "GDS2 files (*.GDS *.gds *.gds.gz *.GDS.gz *.GDS2 *.gds2 *.gds2.gz *.GDS2.gz)"; } + virtual std::string file_format () const { return "GDS2 files (*.gds *.GDS *.gds.gz *.GDS.gz *.GDS2 *.gds2 *.gds2.gz *.GDS2.gz)"; } virtual bool detect (tl::InputStream &stream) const { diff --git a/src/plugins/streamers/magic/db_plugin/dbMAG.cc b/src/plugins/streamers/magic/db_plugin/dbMAG.cc index 521d89673..7a30a6222 100644 --- a/src/plugins/streamers/magic/db_plugin/dbMAG.cc +++ b/src/plugins/streamers/magic/db_plugin/dbMAG.cc @@ -54,7 +54,7 @@ public: virtual std::string format_name () const { return "MAG"; } virtual std::string format_desc () const { return "Magic"; } virtual std::string format_title () const { return "MAG (Magic layout format)"; } - virtual std::string file_format () const { return "Magic files (*.MAG *.mag *.mag.gz *.MAG.gz)"; } + virtual std::string file_format () const { return "Magic files (*.mag *.MAG *.mag.gz *.MAG.gz)"; } virtual bool detect (tl::InputStream &s) const { diff --git a/src/plugins/streamers/oasis/db_plugin/dbOASIS.cc b/src/plugins/streamers/oasis/db_plugin/dbOASIS.cc index fd015e448..a89456ef1 100644 --- a/src/plugins/streamers/oasis/db_plugin/dbOASIS.cc +++ b/src/plugins/streamers/oasis/db_plugin/dbOASIS.cc @@ -436,7 +436,7 @@ public: virtual std::string format_name () const { return "OASIS"; } virtual std::string format_desc () const { return "OASIS"; } virtual std::string format_title () const { return "OASIS"; } - virtual std::string file_format () const { return "OASIS files (*.OAS *.oas *.oas.gz *.OAS.gz)"; } + virtual std::string file_format () const { return "OASIS files (*.oas *.OAS *.oas.gz *.OAS.gz)"; } virtual bool detect (tl::InputStream &stream) const { diff --git a/src/plugins/streamers/pcb/db_plugin/dbGerberImporter.cc b/src/plugins/streamers/pcb/db_plugin/dbGerberImporter.cc index 8b8982d24..69e79f597 100644 --- a/src/plugins/streamers/pcb/db_plugin/dbGerberImporter.cc +++ b/src/plugins/streamers/pcb/db_plugin/dbGerberImporter.cc @@ -1168,7 +1168,7 @@ class GerberFormatDeclaration virtual std::string format_name () const { return "GerberPCB"; } virtual std::string format_desc () const { return "Gerber PCB"; } virtual std::string format_title () const { return "Gerber PCB (project files)"; } - virtual std::string file_format () const { return "Gerber PCB project files (*.pcb)"; } + virtual std::string file_format () const { return "Gerber PCB project files (*.pcb *.PCB)"; } virtual bool detect (tl::InputStream &stream) const { From c831ed15f8ee8dd8946783e288d230db30167e92 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 15 Jul 2023 00:22:17 +0200 Subject: [PATCH 2/7] Enhance the selection behavior of partial edit mode: allow selection of edge ends if edges overlap, graphical indicator for selected partial --- src/edt/edt/edtPartialService.cc | 242 ++++++++++-------- src/laybasic/laybasic/layEditorServiceBase.cc | 19 ++ src/laybasic/laybasic/layEditorServiceBase.h | 13 +- src/laybasic/laybasic/layFinder.cc | 69 +++-- src/laybasic/laybasic/layFinder.h | 9 +- 5 files changed, 220 insertions(+), 132 deletions(-) diff --git a/src/edt/edt/edtPartialService.cc b/src/edt/edt/edtPartialService.cc index 649be7f3f..765c6d2a7 100644 --- a/src/edt/edt/edtPartialService.cc +++ b/src/edt/edt/edtPartialService.cc @@ -774,7 +774,6 @@ PartialShapeFinder::visit_cell (const db::Cell &cell, const db::Box &hit_box, co checkpoint (); - // in point mode just store that found that has the least "distance" m_founds.push_back (founds_vector_type::value_type ()); lay::ObjectInstPath &inst_path = m_founds.back ().first; @@ -786,7 +785,8 @@ PartialShapeFinder::visit_cell (const db::Cell &cell, const db::Box &hit_box, co inst_path.set_layer (*l); inst_path.set_shape (*shape); - // in point mode, test the edges and use a "closest" criterion + // in box mode, select the edges depending on whether an endpoint is inside the + // box or not if (shape->is_polygon ()) { for (unsigned int c = 0; c < shape->holes () + 1; ++c) { @@ -897,155 +897,164 @@ PartialShapeFinder::visit_cell (const db::Cell &cell, const db::Box &hit_box, co const db::Shapes &shapes = cell.shapes (*l); std::vector edge_sel; - db::ShapeIterator shape = shapes.begin_touching (scan_box, flags (), prop_sel (), inv_prop_sel ()); - while (! shape.at_end ()) { + // two passes - one with points, second with edges - bool match = false; - double d = std::numeric_limits::max (); + bool any = false; + for (int pass = 0; pass < 2 && ! any; ++pass) { - edge_sel.clear (); + db::ShapeIterator shape = shapes.begin_touching (scan_box, flags (), prop_sel (), inv_prop_sel ()); + while (! shape.at_end ()) { - checkpoint (); + bool match = false; + double d = std::numeric_limits::max (); - // in point mode, test the edges and use a "closest" criterion - if (shape->is_polygon ()) { + edge_sel.clear (); - for (unsigned int c = 0; c < shape->holes () + 1; ++c) { + checkpoint (); + + // in point mode, test the edges and use a "closest" criterion + if (shape->is_polygon ()) { + + for (unsigned int c = 0; c < shape->holes () + 1; ++c) { + + unsigned int n = 0; + db::Shape::polygon_edge_iterator ee; + for (db::Shape::polygon_edge_iterator e = shape->begin_edge (c); ! e.at_end (); e = ee, ++n) { + + ee = e; + ++ee; + unsigned int nn = ee.at_end () ? 0 : n + 1; + + unsigned int r = test_edge (t, *e, pass == 0, d, match); + if (r) { + edge_sel.clear (); + if ((r & 1) != 0) { + edge_sel.push_back (EdgeWithIndex (db::Edge ((*e).p1 (), (*e).p1 ()), n, n, c)); + } + if ((r & 2) != 0) { + edge_sel.push_back (EdgeWithIndex (db::Edge ((*e).p2 (), (*e).p2 ()), nn, nn, c)); + } + if (r == 3) { + edge_sel.push_back (EdgeWithIndex (*e, n, nn, c)); + } + } + + } + + } + + } else if (shape->is_path ()) { + + // test the "spine" + db::Shape::point_iterator pt = shape->begin_point (); + if (pt != shape->end_point ()) { + db::Point p (*pt); + ++pt; + unsigned int n = 0; + for (; pt != shape->end_point (); ++pt, ++n) { + unsigned int r = test_edge (t, db::Edge (p, *pt), pass == 0, d, match); + if (r) { + edge_sel.clear (); + if ((r & 1) != 0) { + edge_sel.push_back (EdgeWithIndex (db::Edge (p, p), n, n, 0)); + } + if ((r & 2) != 0) { + edge_sel.push_back (EdgeWithIndex (db::Edge (*pt, *pt), n + 1, n + 1, 0)); + } + if (r == 3) { + edge_sel.push_back (EdgeWithIndex (db::Edge (p, *pt), n, n + 1, 0)); + } + } + p = *pt; + } + } + + } else if (shape->is_box ()) { + + const db::Box &box = shape->box (); + + // convert to polygon and test those edges + db::Polygon poly (box); unsigned int n = 0; db::Shape::polygon_edge_iterator ee; - for (db::Shape::polygon_edge_iterator e = shape->begin_edge (c); ! e.at_end (); e = ee, ++n) { + for (db::Shape::polygon_edge_iterator e = poly.begin_edge (); ! e.at_end (); e = ee, ++n) { ee = e; ++ee; unsigned int nn = ee.at_end () ? 0 : n + 1; - unsigned int r = test_edge (t, *e, d, match); + unsigned int r = test_edge (t, *e, pass == 0, d, match); if (r) { edge_sel.clear (); - if ((r & 1) == 1) { - edge_sel.push_back (EdgeWithIndex (db::Edge ((*e).p1 (), (*e).p1 ()), n, n, c)); + if ((r & 1) != 0) { + edge_sel.push_back (EdgeWithIndex (db::Edge ((*e).p1 (), (*e).p1 ()), n, n, 0)); } - if ((r & 2) == 2) { - edge_sel.push_back (EdgeWithIndex (db::Edge ((*e).p2 (), (*e).p2 ()), nn, nn, c)); + if ((r & 2) != 0) { + edge_sel.push_back (EdgeWithIndex (db::Edge ((*e).p2 (), (*e).p2 ()), nn, nn, 0)); } if (r == 3) { - edge_sel.push_back (EdgeWithIndex (*e, n, nn, c)); + edge_sel.push_back (EdgeWithIndex (*e, n, nn, 0)); } } } - } + } else if (shape->is_text ()) { - } else if (shape->is_path ()) { + db::Point tp (shape->text_trans () * db::Point ()); - // test the "spine" - db::Shape::point_iterator pt = shape->begin_point (); - if (pt != shape->end_point ()) { - db::Point p (*pt); - ++pt; - unsigned int n = 0; - for (; pt != shape->end_point (); ++pt, ++n) { - unsigned int r = test_edge (t, db::Edge (p, *pt), d, match); - if (r) { + if (text_info ()) { + + db::CplxTrans t_dbu = db::CplxTrans (layout ().dbu ()) * t; + db::Text text; + shape->text (text); + db::Box tb (t_dbu.inverted () * text_info ()->bbox (t_dbu * text, vp)); + if (tb.contains (hit_box.center ())) { + d = tp.distance (hit_box.center ()); edge_sel.clear (); - if ((r & 1) == 1) { - edge_sel.push_back (EdgeWithIndex (db::Edge (p, p), n, n, 0)); - } - if ((r & 2) == 2) { - edge_sel.push_back (EdgeWithIndex (db::Edge (*pt, *pt), n + 1, n + 1, 0)); - } - if (r == 3) { - edge_sel.push_back (EdgeWithIndex (db::Edge (p, *pt), n, n + 1, 0)); - } + edge_sel.push_back (EdgeWithIndex (db::Edge (tp, tp), 0, 0, 0)); + match = true; } - p = *pt; - } - } - } else if (shape->is_box ()) { + } else { - const db::Box &box = shape->box (); - - // convert to polygon and test those edges - db::Polygon poly (box); - - unsigned int n = 0; - db::Shape::polygon_edge_iterator ee; - for (db::Shape::polygon_edge_iterator e = poly.begin_edge (); ! e.at_end (); e = ee, ++n) { - - ee = e; - ++ee; - unsigned int nn = ee.at_end () ? 0 : n + 1; - - unsigned int r = test_edge (t, *e, d, match); - if (r) { - edge_sel.clear (); - if ((r & 1) == 1) { - edge_sel.push_back (EdgeWithIndex (db::Edge ((*e).p1 (), (*e).p1 ()), n, n, 0)); - } - if ((r & 2) == 2) { - edge_sel.push_back (EdgeWithIndex (db::Edge ((*e).p2 (), (*e).p2 ()), nn, nn, 0)); - } - if (r == 3) { - edge_sel.push_back (EdgeWithIndex (*e, n, nn, 0)); + if (hit_box.contains (tp)) { + d = tp.distance (hit_box.center ()); + edge_sel.clear (); + edge_sel.push_back (EdgeWithIndex (db::Edge (tp, tp), 0, 0, 0)); + match = true; } + } } - } else if (shape->is_text ()) { + if (match && closer (d)) { - db::Point tp (shape->text_trans () * db::Point ()); - - if (text_info ()) { - - db::CplxTrans t_dbu = db::CplxTrans (layout ().dbu ()) * t; - db::Text text; - shape->text (text); - db::Box tb (t_dbu.inverted () * text_info ()->bbox (t_dbu * text, vp)); - if (tb.contains (hit_box.center ())) { - d = tp.distance (hit_box.center ()); - edge_sel.clear (); - edge_sel.push_back (EdgeWithIndex (db::Edge (tp, tp), 0, 0, 0)); - match = true; + // in point mode just store that found that has the least "distance" + if (m_founds.empty ()) { + m_founds.push_back (founds_vector_type::value_type ()); } - } else { + lay::ObjectInstPath &inst_path = m_founds.back ().first; - if (hit_box.contains (tp)) { - d = tp.distance (hit_box.center ()); - edge_sel.clear (); - edge_sel.push_back (EdgeWithIndex (db::Edge (tp, tp), 0, 0, 0)); - match = true; - } + inst_path.set_cv_index (cv_index ()); + inst_path.set_topcell (topcell ()); + inst_path.assign_path (path ().begin (), path ().end ()); + inst_path.set_layer (*l); + inst_path.set_shape (*shape); + + m_founds.back ().second = edge_sel; + + any = true; } + ++shape; + } - if (match && closer (d)) { - - // in point mode just store that found that has the least "distance" - if (m_founds.empty ()) { - m_founds.push_back (founds_vector_type::value_type ()); - } - - lay::ObjectInstPath &inst_path = m_founds.back ().first; - - inst_path.set_cv_index (cv_index ()); - inst_path.set_topcell (topcell ()); - inst_path.assign_path (path ().begin (), path ().end ()); - inst_path.set_layer (*l); - inst_path.set_shape (*shape); - - m_founds.back ().second = edge_sel; - - } - - ++shape; - } } @@ -1153,6 +1162,7 @@ PartialService::timeout () m_hover = true; mp_view->clear_transient_selection (); + clear_mouse_cursors (); // compute search box double l = catch_distance (); @@ -2413,6 +2423,10 @@ PartialService::enter_edge (const EdgeWithIndex &e, size_t &nmarker, partial_obj db::DEdge ee = db::DEdge (db::DPoint (ep2) + ((db::DPoint (ep1) - db::DPoint (ep2)) * 0.25), db::DPoint (ep2)); marker->set (ee, db::DCplxTrans (gt), tv); + if (transient && sel->second.size () == 1) { + add_mouse_cursor (ep2, sel->first.cv_index (), gt, tv, true); + } + } if (p1_sel && !p12_sel) { @@ -2423,12 +2437,22 @@ PartialService::enter_edge (const EdgeWithIndex &e, size_t &nmarker, partial_obj db::DEdge ee = db::DEdge (db::DPoint (ep1), db::DPoint (ep1) + ((db::DPoint (ep2) - db::DPoint (ep1)) * 0.25)); marker->set (ee, db::DCplxTrans (gt), tv); - } + if (transient && sel->second.size () == 1) { + add_mouse_cursor (ep1, sel->first.cv_index (), gt, tv, true); + } + + } if (p12_sel) { + lay::Marker *marker = new_marker (nmarker, sel->first.cv_index (), transient); marker->set_vertex_size (0); marker->set (enew, gt, tv); + + if (transient) { + add_edge_marker (enew, sel->first.cv_index (), gt, tv, true); + } + } } diff --git a/src/laybasic/laybasic/layEditorServiceBase.cc b/src/laybasic/laybasic/layEditorServiceBase.cc index e3539d6e3..ea44746d3 100644 --- a/src/laybasic/laybasic/layEditorServiceBase.cc +++ b/src/laybasic/laybasic/layEditorServiceBase.cc @@ -210,6 +210,7 @@ EditorServiceBase::EditorServiceBase (LayoutViewBase *view) : lay::ViewService (view->canvas ()), lay::Editable (view), lay::Plugin (view), + mp_view (view), m_cursor_enabled (true), m_has_tracking_position (false) { @@ -229,12 +230,30 @@ EditorServiceBase::add_mouse_cursor (const db::DPoint &pt, bool emphasize) m_mouse_cursor_markers.push_back (new MouseCursorViewObject (this, ui (), pt, emphasize)); } +void +EditorServiceBase::add_mouse_cursor (const db::Point &pt, unsigned int cv_index, const db::ICplxTrans >, const std::vector &tv, bool emphasize) +{ + double dbu = mp_view->cellview (cv_index)->layout ().dbu (); + for (auto t = tv.begin (); t != tv.end (); ++t) { + add_mouse_cursor (*t * db::CplxTrans (dbu) * gt * pt, emphasize); + } +} + void EditorServiceBase::add_edge_marker (const db::DEdge &e, bool emphasize) { m_mouse_cursor_markers.push_back (new EdgeMarkerViewObject (this, ui (), e, emphasize)); } +void +EditorServiceBase::add_edge_marker (const db::Edge &e, unsigned int cv_index, const db::ICplxTrans >, const std::vector &tv, bool emphasize) +{ + double dbu = mp_view->cellview (cv_index)->layout ().dbu (); + for (auto t = tv.begin (); t != tv.end (); ++t) { + add_edge_marker (*t * db::CplxTrans (dbu) * gt * e, emphasize); + } +} + void EditorServiceBase::clear_mouse_cursors () { diff --git a/src/laybasic/laybasic/layEditorServiceBase.h b/src/laybasic/laybasic/layEditorServiceBase.h index 68cc0290d..36af9f8ed 100644 --- a/src/laybasic/laybasic/layEditorServiceBase.h +++ b/src/laybasic/laybasic/layEditorServiceBase.h @@ -74,10 +74,20 @@ public: */ void add_mouse_cursor (const db::DPoint &pt, bool emphasize = false); + /** + * @brief Adds a mouse cursor to the given point in layout space + */ + void add_mouse_cursor (const db::Point &pt, unsigned int cv_index, const db::ICplxTrans >, const std::vector &tv, bool emphasize = false); + /** * @brief Adds an edge marker for the given edge */ - void add_edge_marker (const db::DEdge &e, bool emphasize); + void add_edge_marker (const db::DEdge &e, bool emphasize = false); + + /** + * @brief Adds an edge marker for the given edge in layout space + */ + void add_edge_marker (const db::Edge &e, unsigned int cv_index, const db::ICplxTrans >, const std::vector &tv, bool emphasize = false); /** * @brief Resets the mouse cursor @@ -132,6 +142,7 @@ protected: private: // The marker representing the mouse cursor + lay::LayoutViewBase *mp_view; std::vector m_mouse_cursor_markers; tl::Color m_cursor_color; bool m_cursor_enabled; diff --git a/src/laybasic/laybasic/layFinder.cc b/src/laybasic/laybasic/layFinder.cc index 168efce12..df2cdcc36 100644 --- a/src/laybasic/laybasic/layFinder.cc +++ b/src/laybasic/laybasic/layFinder.cc @@ -123,47 +123,74 @@ Finder::start (lay::LayoutViewBase *view, unsigned int cv_index, const std::vect } } +void +Finder::test_edge (const db::ICplxTrans &trans, const db::Edge &edge, double &distance, bool &match) +{ + if (test_edge (trans, edge, true, distance, match) == 0) { + test_edge (trans, edge, false, distance, match); + } +} + unsigned int -Finder::test_edge (const db::ICplxTrans &trans, const db::Edge &edg, double &distance, bool &match) +Finder::test_edge (const db::ICplxTrans &trans, const db::Edge &edg, bool points, double &distance, bool &match) { db::Point p1 = trans * edg.p1 (); db::Point p2 = trans * edg.p2 (); unsigned int ret = 0; - // we hit the region with the edge end points - take the closest vertex - if (m_region.contains (p1) || m_region.contains (p2)) { + if (points) { - double d1 = p1.double_distance (m_region.center ()); - double d2 = p2.double_distance (m_region.center ()); + // we hit the region with the edge end points - take the closest vertex + if (m_region.contains (p1) || m_region.contains (p2)) { + + double d1 = p1.double_distance (m_region.center ()); + double d2 = p2.double_distance (m_region.center ()); + if (d1 < d2) { + ret = 1; + } else { + ret = 2; + } + + double d = std::min (d1, d2); + // add a penalty of 1 DBU for being on the wrong + // side of the edge - this favors the right edge + // in case of butting corners + if (ret == 1) { + if (db::sprod_sign (m_region.center () - p1, p2 - p1) < 0) { + d += trans.ctrans (1); + } + } else { + if (db::sprod_sign (m_region.center () - p2, p1 - p2) < 0) { + d += trans.ctrans (1); + } + } + + if (! match || d < distance) { + distance = d; + } + + match = true; - double d = std::min (d1, d2); - if (! match || d < distance) { - distance = d; } - if (d1 < d2) { - ret = 1; - } else { - ret = 2; - } - - match = true; - - } + } else { - // if the edge cuts through the active region: test the - // edge as a whole - if (ret == 0) { + // if the edge cuts through the active region: test the + // edge as a whole db::Edge edg_trans (p1, p2); if (edg_trans.clipped (m_region).first) { + double d = edg_trans.distance_abs (m_region.center ()); if (! match || d < distance) { distance = d; - ret = 3; } + + ret = 3; match = true; + } + } return ret; diff --git a/src/laybasic/laybasic/layFinder.h b/src/laybasic/laybasic/layFinder.h index 065e69741..6ef4bc00b 100644 --- a/src/laybasic/laybasic/layFinder.h +++ b/src/laybasic/laybasic/layFinder.h @@ -176,11 +176,18 @@ protected: * * "trans" is the transformation to be applied to the edge before the test. * + * If "points" is true, only points are tested, otherwise edges are tested. + * * This method returns a mask indicating which point of the edge was matching. * Bit 0 of this mask indicates the first point is matching, bit 1 indicates the * second point is matching. */ - unsigned int test_edge (const db::ICplxTrans &trans, const db::Edge &edge, double &distance, bool &match); + unsigned int test_edge (const db::ICplxTrans &trans, const db::Edge &edge, bool points, double &distance, bool &match); + + /** + * @brief Tests an edge in point mode and edge mode (later) + */ + void test_edge (const db::ICplxTrans &trans, const db::Edge &edge, double &distance, bool &match); private: void do_find (const db::Cell &cell, int level, const db::DCplxTrans &vp, const db::ICplxTrans &t); From b4502d1766799fcd43778db11f750100b5c14b10 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 15 Jul 2023 12:37:31 +0200 Subject: [PATCH 3/7] Enhancement: wheel events do no longer change combo box entries --- src/lay/lay/layApplication.cc | 32 ++++++++++++++++++++++---------- src/lay/lay/layApplication.h | 5 +---- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/lay/lay/layApplication.cc b/src/lay/lay/layApplication.cc index e23d5c50d..aef4d5042 100644 --- a/src/lay/lay/layApplication.cc +++ b/src/lay/lay/layApplication.cc @@ -1480,6 +1480,18 @@ GuiApplication::initialize () bool GuiApplication::notify (QObject *receiver, QEvent *e) { + QWheelEvent *wheel_event = dynamic_cast(e); + if (wheel_event) { + // intercept wheel events targeting QComboBox objects to avoid + // changing them through wheel actions. + for (auto r = receiver; r != 0; r = r->parent ()) { + if (dynamic_cast(r)) { + // stop further processing + return true; + } + } + } + if (dynamic_cast (e)) { // NOTE: we don't want recursive paint events - the painters are not reentrant. // Hence we disable process_events_impl (specifically for progress reporters). @@ -1543,18 +1555,18 @@ GuiApplication::force_update_app_menu () #endif } -#if defined(__APPLE__) -// By Thomas Lima (March 7, 2018) -// -// This event interceptor catches MacOS "Open With" event, and KLayout should respond -// similarly to the Drop event in MainWindow::dropEvent. -// -// This particular implementation always creates a new window. -// -// This was implemented with the inspiration of http://doc.qt.io/qt-5/qfileopenevent.html bool GuiApplication::event (QEvent *event) { +#if defined(__APPLE__) + // By Thomas Lima (March 7, 2018) + // + // This event interceptor catches MacOS "Open With" event, and KLayout should respond + // similarly to the Drop event in MainWindow::dropEvent. + // + // This particular implementation always creates a new window. + // + // This was implemented with the inspiration of http://doc.qt.io/qt-5/qfileopenevent.html if (event->type() == QEvent::FileOpen) { QFileOpenEvent *openEvent = static_cast(event); if (mp_mw) @@ -1566,10 +1578,10 @@ GuiApplication::event (QEvent *event) mp_mw->add_mru (file, tech); } } +#endif return QApplication::event(event); } -#endif int diff --git a/src/lay/lay/layApplication.h b/src/lay/lay/layApplication.h index e57d87d52..f7103c419 100644 --- a/src/lay/lay/layApplication.h +++ b/src/lay/lay/layApplication.h @@ -459,12 +459,9 @@ public: void force_update_app_menu (); /** - * @brief Handles MacOS file open - * This function is used to process the "Open With" event sent by MacOS. + * @brief Handles events */ -#ifdef __APPLE__ bool event (QEvent *event); -#endif protected: virtual void setup (); From 0b50d9e87aa51e09a4c5defbc536625c65272a64 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 15 Jul 2023 12:58:09 +0200 Subject: [PATCH 4/7] Performance improvement of DRC in the small layout case (log view overhead reduced) --- src/lay/lay/layLogViewerDialog.cc | 10 +++++++++- src/lay/lay/layLogViewerDialog.h | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lay/lay/layLogViewerDialog.cc b/src/lay/lay/layLogViewerDialog.cc index a4f4c31a8..f24354477 100644 --- a/src/lay/lay/layLogViewerDialog.cc +++ b/src/lay/lay/layLogViewerDialog.cc @@ -120,6 +120,8 @@ LogFile::LogFile (size_t max_entries, bool register_global) { connect (&m_timer, SIGNAL (timeout ()), this, SLOT (timeout ())); + m_last_yield = tl::Clock::current (); + m_timer.setSingleShot (true); m_timer.setInterval (0); @@ -190,6 +192,9 @@ LogFile::timeout () bool attn = false, last_attn = false; m_lock.lock (); + + m_last_yield = tl::Clock::current (); + if (m_generation_id != m_last_generation_id) { attn = m_has_errors || m_has_warnings; last_attn = m_last_attn; @@ -197,6 +202,7 @@ LogFile::timeout () m_last_generation_id = m_generation_id; changed = true; } + m_lock.unlock (); if (changed) { @@ -254,7 +260,9 @@ LogFile::yield () { // will update on next processEvents if (lay::ApplicationBase::instance ()->qapp_gui () && QThread::currentThread () == lay::ApplicationBase::instance ()->qapp_gui ()->thread ()) { - m_timer.start (); + if ((tl::Clock::current () - m_last_yield).seconds () > 0.2) { + m_timer.start (); + } } } diff --git a/src/lay/lay/layLogViewerDialog.h b/src/lay/lay/layLogViewerDialog.h index b5e1b6188..7057f857b 100644 --- a/src/lay/lay/layLogViewerDialog.h +++ b/src/lay/lay/layLogViewerDialog.h @@ -26,6 +26,7 @@ #include "ui_LogViewerDialog.h" #include "tlLog.h" +#include "tlTimer.h" #include "layCommon.h" #include @@ -220,6 +221,7 @@ signals: void attention_changed (bool f); private: + tl::Clock m_last_yield; QTimer m_timer; mutable QMutex m_lock; LogReceiver m_error_receiver; From 563f1026e85279900cc280da1d43457c9aa6de61 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 15 Jul 2023 13:37:07 +0200 Subject: [PATCH 5/7] Bugfix: tilde expansion wasn't working on layout write --- src/tl/tl/tlStream.cc | 36 +++++++++++++++++------------------- src/tl/tl/tlStream.h | 18 ++++++++++++++++-- 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/tl/tl/tlStream.cc b/src/tl/tl/tlStream.cc index 442a78122..5686990b8 100644 --- a/src/tl/tl/tlStream.cc +++ b/src/tl/tl/tlStream.cc @@ -1034,8 +1034,8 @@ OutputStream::seek (size_t pos) // --------------------------------------------------------------- // OutputFileBase implementation -OutputFileBase::OutputFileBase (const std::string &path, int keep_backups) - : m_keep_backups (keep_backups), m_path (tl::absolute_file_path (path)), m_has_error (false) +OutputFileBase::OutputFileBase (const std::string &p, int keep_backups) + : m_keep_backups (keep_backups), m_path (tl::absolute_file_path (p)), m_has_error (false) { if (tl::file_exists (m_path)) { m_backup_path = m_path + ".~backup"; @@ -1133,20 +1133,19 @@ void OutputFileBase::reject () // --------------------------------------------------------------- // OutputFile implementation -OutputFile::OutputFile (const std::string &path, int keep_backups) - : OutputFileBase (path, keep_backups), m_fd (-1) +OutputFile::OutputFile (const std::string &p, int keep_backups) + : OutputFileBase (p, keep_backups), m_fd (-1) { - m_source = path; #if defined(_WIN32) - int fd = _wopen (tl::to_wstring (path).c_str (), _O_CREAT | _O_TRUNC | _O_BINARY | _O_WRONLY | _O_SEQUENTIAL, _S_IREAD | _S_IWRITE ); + int fd = _wopen (tl::to_wstring (path ()).c_str (), _O_CREAT | _O_TRUNC | _O_BINARY | _O_WRONLY | _O_SEQUENTIAL, _S_IREAD | _S_IWRITE ); if (fd < 0) { - throw FileOpenErrorException (m_source, errno); + throw FileOpenErrorException (path (), errno); } m_fd = fd; #else - int fd = open (path.c_str (), O_WRONLY | O_CREAT | O_TRUNC, 0666); + int fd = open (path ().c_str (), O_WRONLY | O_CREAT | O_TRUNC, 0666); if (fd < 0) { - throw FileOpenErrorException (m_source, errno); + throw FileOpenErrorException (path (), errno); } m_fd = fd; #endif @@ -1187,28 +1186,27 @@ OutputFile::write_file (const char *b, size_t n) ptrdiff_t ret = ::write (m_fd, b, (unsigned int) n); #endif if (ret < 0) { - throw FileWriteErrorException (m_source, errno); + throw FileWriteErrorException (path (), errno); } } // --------------------------------------------------------------- // OutputZLibFile implementation -OutputZLibFile::OutputZLibFile (const std::string &path, int keep_backups) - : OutputFileBase (path, keep_backups), mp_d (new ZLibFilePrivate ()) +OutputZLibFile::OutputZLibFile (const std::string &p, int keep_backups) + : OutputFileBase (p, keep_backups), mp_d (new ZLibFilePrivate ()) { - m_source = path; #if defined(_WIN32) - FILE *file = _wfopen (tl::to_wstring (path).c_str (), L"wb"); + FILE *file = _wfopen (tl::to_wstring (path ()).c_str (), L"wb"); if (file == NULL) { - throw FileOpenErrorException (m_source, errno); + throw FileOpenErrorException (path (), errno); } mp_d->zs = gzdopen (_fileno (file), "wb"); #else - mp_d->zs = gzopen (tl::string_to_system (path).c_str (), "wb"); + mp_d->zs = gzopen (tl::string_to_system (path ()).c_str (), "wb"); #endif if (mp_d->zs == NULL) { - throw FileOpenErrorException (m_source, errno); + throw FileOpenErrorException (path (), errno); } } @@ -1231,9 +1229,9 @@ OutputZLibFile::write_file (const char *b, size_t n) int gz_err = 0; const char *em = gzerror (mp_d->zs, &gz_err); if (gz_err == Z_ERRNO) { - throw FileWriteErrorException (m_source, errno); + throw FileWriteErrorException (path (), errno); } else { - throw ZLibWriteErrorException (m_source, em); + throw ZLibWriteErrorException (path (), em); } } } diff --git a/src/tl/tl/tlStream.h b/src/tl/tl/tlStream.h index 2515f7f8e..9c1309ad2 100644 --- a/src/tl/tl/tlStream.h +++ b/src/tl/tl/tlStream.h @@ -928,6 +928,22 @@ public: */ virtual void reject (); + /** + * @brief Gets the actual path + */ + const std::string &path () const + { + return m_path; + } + + /** + * @brief Gets the path of the backup file + */ + const std::string &backup_path () const + { + return m_backup_path; + } + protected: virtual void seek_file (size_t s) = 0; virtual void write_file (const char *b, size_t n) = 0; @@ -990,7 +1006,6 @@ private: OutputZLibFile (const OutputZLibFile &); OutputZLibFile &operator= (const OutputZLibFile &); - std::string m_source; ZLibFilePrivate *mp_d; }; @@ -1051,7 +1066,6 @@ private: OutputFile (const OutputFile &); OutputFile &operator= (const OutputFile &); - std::string m_source; int m_fd; }; From 35e42a81178aa3fe071a7f656a4c026eeb596679 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 15 Jul 2023 16:05:40 +0200 Subject: [PATCH 6/7] Fixed issue-1422 (DXF file parsing error) Problem were two spline interpolation issues: 1. wrong stop criterion for recursion 2. wrong implementation of single-point interpolation --- .../streamers/dxf/db_plugin/dbDXFReader.cc | 20 +- .../dxf/unit_tests/dbDXFReaderTests.cc | 15 +- testdata/dxf/issue_1422a.dxf | 5434 +++++++ testdata/dxf/issue_1422a_au.gds.gz | Bin 0 -> 7872 bytes testdata/dxf/issue_1422b.dxf | 7516 ++++++++++ testdata/dxf/issue_1422b_au.gds.gz | Bin 0 -> 3568 bytes testdata/dxf/issue_1422c.dxf | 12252 ++++++++++++++++ testdata/dxf/issue_1422c_au.gds.gz | Bin 0 -> 2000 bytes 8 files changed, 25225 insertions(+), 12 deletions(-) create mode 100644 testdata/dxf/issue_1422a.dxf create mode 100644 testdata/dxf/issue_1422a_au.gds.gz create mode 100644 testdata/dxf/issue_1422b.dxf create mode 100644 testdata/dxf/issue_1422b_au.gds.gz create mode 100644 testdata/dxf/issue_1422c.dxf create mode 100644 testdata/dxf/issue_1422c_au.gds.gz diff --git a/src/plugins/streamers/dxf/db_plugin/dbDXFReader.cc b/src/plugins/streamers/dxf/db_plugin/dbDXFReader.cc index 0e513e82c..2f5bacb89 100644 --- a/src/plugins/streamers/dxf/db_plugin/dbDXFReader.cc +++ b/src/plugins/streamers/dxf/db_plugin/dbDXFReader.cc @@ -814,10 +814,10 @@ De Boor algorithm for NURBS */ static db::DPoint -b_spline_point (double x, const std::vector > &control_points, int p, const std::vector &t) +b_spline_point (double x, const std::vector > &control_points, int p, const std::vector &t, int &k) { - int k = (int) (std::lower_bound (t.begin (), t.end (), x + 1e-6) - t.begin ()); - if (k <= p) { + k = (int) (std::lower_bound (t.begin (), t.end (), x - 1e-6) - t.begin ()); + if (k < p) { return control_points.front ().first; } else if (k > (int) control_points.size ()) { return control_points.back ().first; @@ -878,14 +878,16 @@ spline_interpolate (std::list &curve_points, std::list::iterator pe = pm; ++pe; - db::DPoint s1 = b_spline_point (t_start + 0.5 * dt, control_points, degree, knots); - db::DPoint s2 = b_spline_point (t_start + 1.5 * dt, control_points, degree, knots); + int k1 = 0, k2 = 0; + + db::DPoint s1 = b_spline_point (t_start + 0.5 * dt, control_points, degree, knots, k1); + db::DPoint s2 = b_spline_point (t_start + 1.5 * dt, control_points, degree, knots, k2); db::DVector p1 (s1, *current_curve_point); db::DVector p2 (*pm, s1); double pl1 = p1.length(), pl2 = p2.length(); - if (curve_points.size () < control_points.size () - degree - 1) { + if (k1 != k2) { curve_points.insert (pm, s1); spline_interpolate (curve_points, current_curve_point, t_start, dt * 0.5, control_points, degree, knots, sin_da, accu); @@ -958,12 +960,12 @@ DXFReader::spline_interpolation (std::vector > &co double accu = std::max (m_circle_accuracy, m_dbu / m_unit); std::list new_points; - new_points.push_back (control_points.front ().first); double dt = 0.5 * (tn - t0); - for (double t = t0 + dt; t < tn + 1e-6; t += dt) { - db::DPoint s = b_spline_point (t, control_points, degree, knots); + for (double t = t0; t < tn + 1e-6; t += dt) { + int k = 0; + db::DPoint s = b_spline_point (t, control_points, degree, knots, k); new_points.push_back (s); } diff --git a/src/plugins/streamers/dxf/unit_tests/dbDXFReaderTests.cc b/src/plugins/streamers/dxf/unit_tests/dbDXFReaderTests.cc index 578d78706..a9e7d9c7b 100644 --- a/src/plugins/streamers/dxf/unit_tests/dbDXFReaderTests.cc +++ b/src/plugins/streamers/dxf/unit_tests/dbDXFReaderTests.cc @@ -182,7 +182,7 @@ TEST(15) db::DXFReaderOptions opt; opt.layer_map = string2lm ("TEXT:4,IGBT:5,Wire:7,Ceramic:11,LAYER_1:14,Diode:18,'DBC TOP Plate':19,'Terminal Position':20"); opt.create_other_layers = true; - run_test (_this, "t15.dxf.gz", "t15_au2.gds.gz", opt); + run_test (_this, "t15.dxf.gz", "t15_au2_2.gds.gz", opt); } TEST(16) @@ -190,7 +190,7 @@ TEST(16) db::DXFReaderOptions opt; opt.layer_map = string2lm ("TEXT:4,IGBT:5,Wire:7,Ceramic:11,LAYER_1:14,Diode:18,'DBC TOP Plate':19,'Terminal Position':20"); opt.create_other_layers = true; - run_test (_this, "t16.dxf.gz", "t16_au2.gds.gz", opt); + run_test (_this, "t16.dxf.gz", "t16_au2_2.gds.gz", opt); } TEST(17) @@ -198,7 +198,7 @@ TEST(17) db::DXFReaderOptions opt; opt.layer_map = string2lm ("TEXT:4,IGBT:5,Wire:7,Ceramic:11,LAYER_1:14,Diode:18,'DBC TOP Plate':19,'Terminal Position':20"); opt.create_other_layers = true; - run_test (_this, "t17.dxf.gz", "t17_au2.gds.gz", opt); + run_test (_this, "t17.dxf.gz", "t17_au2_2.gds.gz", opt); } TEST(18) @@ -515,3 +515,12 @@ TEST(34) run_test_public (_this, "issue_1173.dxf", "issue_1173_au.gds.gz", opt); } + +// issue #1422 +TEST(35) +{ + db::DXFReaderOptions opt; + run_test_public (_this, "issue_1422a.dxf", "issue_1422a_au.gds.gz", opt); + run_test_public (_this, "issue_1422b.dxf", "issue_1422b_au.gds.gz", opt); + run_test_public (_this, "issue_1422c.dxf", "issue_1422c_au.gds.gz", opt); +} diff --git a/testdata/dxf/issue_1422a.dxf b/testdata/dxf/issue_1422a.dxf new file mode 100644 index 000000000..3caae8f36 --- /dev/null +++ b/testdata/dxf/issue_1422a.dxf @@ -0,0 +1,5434 @@ +999 +dxflib 3.26.4.0 + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1015 + 9 +$HANDSEED + 5 +FFFF + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 +0 + 9 +$ATTMODE + 70 +1 + 9 +$AUNITS + 70 +0 + 9 +$AUPREC + 70 +0 + 9 +$CECOLOR + 62 +256 + 9 +$CELTSCALE + 40 +1.0 + 9 +$CHAMFERA + 40 +0.5 + 9 +$CHAMFERB + 40 +0.5 + 9 +$CHAMFERC + 40 +1.0 + 9 +$CHAMFERD + 40 +0.0 + 9 +$CMLJUST + 70 +0 + 9 +$CMLSCALE + 40 +1.0 + 9 +$DIMADEC + 70 +0 + 9 +$DIMALT + 70 +0 + 9 +$DIMALTD + 70 +2 + 9 +$DIMALTF + 40 +25.3999999999999986 + 9 +$DIMALTRND + 40 +0.0 + 9 +$DIMALTTD + 70 +2 + 9 +$DIMALTTZ + 70 +0 + 9 +$DIMALTU + 70 +2 + 9 +$DIMALTZ + 70 +0 + 9 +$DIMAPOST + 1 + + 9 +$DIMASZ + 40 +0.18 + 9 +$DIMATFIT + 70 +3 + 9 +$DIMAUNIT + 70 +0 + 9 +$DIMAZIN + 70 +0 + 9 +$DIMBLK + 1 +0 + 9 +$DIMBLK1 + 1 +0 + 9 +$DIMBLK2 + 1 +0 + 9 +$DIMCEN + 40 +0.09 + 9 +$DIMCLRD + 70 +0 + 9 +$DIMCLRE + 70 +0 + 9 +$DIMDEC + 70 +4 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMDLI + 40 +0.38 + 9 +$DIMDSEP + 70 +46 + 9 +$DIMEXE + 40 +0.18 + 9 +$DIMEXO + 40 +0.0625 + 9 +$DIMFRAC + 70 +0 + 9 +$DIMGAP + 40 +0.09 + 9 +$DIMJUST + 70 +0 + 9 +$DIMLDRBLK + 1 + + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMLIM + 70 +0 + 9 +$DIMLUNIT + 70 +2 + 9 +$DIMLWD + 70 +-2 + 9 +$DIMLWE + 70 +-2 + 9 +$DIMPOST + 1 + + 9 +$DIMRND + 40 +0.0 + 9 +$DIMSAH + 70 +0 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMSD1 + 70 +0 + 9 +$DIMSD2 + 70 +0 + 9 +$DIMSE1 + 70 +0 + 9 +$DIMSE2 + 70 +0 + 9 +$DIMSOXD + 70 +0 + 9 +$DIMTAD + 70 +0 + 9 +$DIMTDEC + 70 +4 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMTIH + 70 +1 + 9 +$DIMTIX + 70 +0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTOFL + 70 +0 + 9 +$DIMTOH + 70 +1 + 9 +$DIMTOL + 70 +0 + 9 +$DIMTOLJ + 70 +1 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTXSTY + 7 +Standard + 9 +$DIMTXT + 40 +0.18 + 9 +$DIMTZIN + 70 +0 + 9 +$DIMUPT + 70 +0 + 9 +$DIMZIN + 70 +0 + 9 +$DISPSILH + 70 +0 + 9 +$DWGCODEPAGE + 3 +ANSI_1252 + 9 +$ELEVATION + 40 +0.0 + 9 +$EXTMAX + 10 +-81.9739000000000004 + 20 +-27.2106999999999992 + 30 +0.0 + 9 +$EXTMIN + 10 +-118.4291999999999945 + 20 +-47.9290999999999983 + 30 +0.0 + 9 +$FILLETRAD + 40 +0.5 + 9 +$FILLMODE + 70 +1 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$INSUNITS + 70 +4 + 9 +$LIMCHECK + 70 +0 + 9 +$LIMMAX + 10 +12.0 + 20 +9.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LTSCALE + 40 +1.0 + 9 +$LUNITS + 70 +2 + 9 +$LUPREC + 70 +4 + 9 +$MAXACTVP + 70 +64 + 9 +$MEASUREMENT + 70 +0 + 9 +$MIRRTEXT + 70 +1 + 9 +$ORTHOMODE + 70 +0 + 9 +$PDMODE + 70 +0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$PEXTMAX + 10 +-100000000000000000000.0 + 20 +-100000000000000000000.0 + 30 +-100000000000000000000.0 + 9 +$PEXTMIN + 10 +100000000000000000000.0 + 20 +100000000000000000000.0 + 30 +100000000000000000000.0 + 9 +$PINSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMCHECK + 70 +0 + 9 +$PLIMMAX + 10 +12.0 + 20 +9.0 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLINEGEN + 70 +0 + 9 +$PLINEWID + 40 +0.0 + 9 +$PROXYGRAPHICS + 70 +1 + 9 +$PSLTSCALE + 70 +1 + 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 +$QTEXTMODE + 70 +0 + 9 +$REGENMODE + 70 +1 + 9 +$SHADEDGE + 70 +3 + 9 +$SHADEDIF + 70 +70 + 9 +$SKETCHINC + 40 +0.1 + 9 +$SKPOLY + 70 +0 + 9 +$SPLFRAME + 70 +0 + 9 +$SPLINESEGS + 70 +8 + 9 +$SPLINETYPE + 70 +6 + 9 +$SURFTAB1 + 70 +6 + 9 +$SURFTAB2 + 70 +6 + 9 +$SURFTYPE + 70 +6 + 9 +$SURFU + 70 +6 + 9 +$SURFV + 70 +6 + 9 +$TEXTSIZE + 40 +0.2 + 9 +$TEXTSTYLE + 7 +Standard + 9 +$THICKNESS + 40 +0.0 + 9 +$TILEMODE + 70 +1 + 9 +$TRACEWID + 40 +0.05 + 9 +$TREEDEPTH + 70 +3020 + 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 +$UNITMODE + 70 +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 +$USRTIMER + 70 +1 + 9 +$VISRETAIN + 70 +1 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +100 +AcDbSymbolTable + 70 +1 + 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 +286.3055555555554861 + 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 +297.0 + 41 +1.92798353909465 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 +0 + 72 +100 + 73 +1 + 74 +3 + 75 +1 + 76 +1 + 77 +0 + 78 +0 +281 +0 + 65 +1 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 +0 +146 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +5 +100 +AcDbSymbolTable + 70 +41 + 0 +LTYPE + 5 +16 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +Continuous + 70 +0 + 3 +Solid line + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +31 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO10W100 + 70 +0 + 3 +ISO dash dot __ . __ . __ . __ . __ . __ . __ . + 72 +65 + 73 +4 + 40 +18.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +32 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHEDX2 + 70 +0 + 3 +Dashed (2x) ____ ____ ____ ____ ____ ___ + 72 +65 + 73 +2 + 40 +38.0999999999999943 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +33 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTER2 + 70 +0 + 3 +Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ + 72 +65 + 73 +4 + 40 +28.5750000000000028 + 49 +19.0500000000000007 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +3.1749999999999998 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +34 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOTX2 + 70 +0 + 3 +Dash dot (2x) ____ . ____ . ____ . ___ + 72 +65 + 73 +4 + 40 +50.7999999999999972 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +35 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHED + 70 +0 + 3 +Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ + 72 +65 + 73 +2 + 40 +19.0499999999999972 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +36 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHED2 + 70 +0 + 3 +Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 +65 + 73 +2 + 40 +9.5249999999999986 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +15 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByLayer + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +37 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +HIDDEN2 + 70 +0 + 3 +Hidden (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 +65 + 73 +2 + 40 +4.7624999999999993 + 49 +3.1749999999999998 + 74 +0 + 49 +-1.5874999999999999 + 74 +0 + 0 +LTYPE + 5 +38 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDER + 70 +0 + 3 +Border __ __ . __ __ . __ __ . __ __ . __ __ . + 72 +65 + 73 +6 + 40 +44.4499999999999957 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +39 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +HIDDEN + 70 +0 + 3 +Hidden __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 +65 + 73 +2 + 40 +9.5249999999999986 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +3A +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDE + 70 +0 + 3 +Divide ____ . . ____ . . ____ . . ____ . . ____ + 72 +65 + 73 +6 + 40 +31.75 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +3B +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +PHANTOM2 + 70 +0 + 3 +Phantom (.5x) ___ _ _ ___ _ _ ___ _ _ ___ _ _ + 72 +65 + 73 +6 + 40 +31.7500000000000036 + 49 +15.875 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +3.1749999999999998 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +3.1749999999999998 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +3C +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDERX2 + 70 +0 + 3 +Border (2x) ____ ____ . ____ ____ . ___ + 72 +65 + 73 +6 + 40 +88.8999999999999915 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +3D +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +HIDDENX2 + 70 +0 + 3 +Hidden (2x) ____ ____ ____ ____ ____ ____ ____ + 72 +65 + 73 +2 + 40 +19.0499999999999972 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +3E +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO07W100 + 70 +0 + 3 +ISO dot . . . . . . . . . . . . . . . . . . . . + 72 +65 + 73 +2 + 40 +3.0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +3F +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO05W100 + 70 +0 + 3 +ISO long-dash double-dot ____ .. ____ .. ____ . + 72 +65 + 73 +6 + 40 +33.0 + 49 +24.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +40 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO15W100 + 70 +0 + 3 +ISO double-dash triple-dot __ __ . . . __ __ . . + 72 +65 + 73 +10 + 40 +39.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +41 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO04W100 + 70 +0 + 3 +ISO long-dash dot ____ . ____ . ____ . ____ . _ + 72 +65 + 73 +4 + 40 +30.0 + 49 +24.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +42 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDER2 + 70 +0 + 3 +Border (.5x) __.__.__.__.__.__.__.__.__.__.__. + 72 +65 + 73 +6 + 40 +22.2249999999999979 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +43 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO09W100 + 70 +0 + 3 +ISO long-dash double-short-dash ____ __ __ ____ + 72 +65 + 73 +6 + 40 +45.0 + 49 +24.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +6.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +6.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +44 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDEX2 + 70 +0 + 3 +Divide (2x) ________ . . ________ . . _ + 72 +65 + 73 +6 + 40 +63.5 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +45 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOT + 70 +0 + 3 +Dash dot __ . __ . __ . __ . __ . __ . __ . __ + 72 +65 + 73 +4 + 40 +25.3999999999999986 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +46 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOTX2 + 70 +0 + 3 +Dot (2x) . . . . . . . . . . . . . . + 72 +65 + 73 +2 + 40 +12.6999999999999993 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +47 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOT2 + 70 +0 + 3 +Dash dot (.5x) _._._._._._._._._._._._._._._. + 72 +65 + 73 +4 + 40 +12.6999999999999993 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +48 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +PHANTOM + 70 +0 + 3 +Phantom ______ __ __ ______ __ __ ______ + 72 +65 + 73 +6 + 40 +63.5000000000000071 + 49 +31.75 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +6.3499999999999996 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +6.3499999999999996 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +49 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO13W100 + 70 +0 + 3 +ISO double-dash double-dot __ __ . . __ __ . . _ + 72 +65 + 73 +8 + 40 +36.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +4A +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOT2 + 70 +0 + 3 +Dot (.5x) ........................................ + 72 +65 + 73 +2 + 40 +3.1749999999999998 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +4B +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO12W100 + 70 +0 + 3 +ISO dash double-dot __ . . __ . . __ . . __ . . + 72 +65 + 73 +6 + 40 +21.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +4C +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO06W100 + 70 +0 + 3 +ISO long-dash triple-dot ____ ... ____ ... ____ + 72 +65 + 73 +8 + 40 +36.0 + 49 +24.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +14 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByBlock + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +4D +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +PHANTOMX2 + 70 +0 + 3 +Phantom (2x) ____________ ____ ____ _ + 72 +65 + 73 +6 + 40 +127.0000000000000142 + 49 +63.5 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +12.6999999999999993 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +12.6999999999999993 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +4E +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTER + 70 +0 + 3 +Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ + 72 +65 + 73 +4 + 40 +50.8000000000000043 + 49 +31.75 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +6.3499999999999996 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +4F +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO02W100 + 70 +0 + 3 +ISO dash __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 +65 + 73 +2 + 40 +15.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +50 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO08W100 + 70 +0 + 3 +ISO long-dash short-dash ____ __ ____ __ ____ _ + 72 +65 + 73 +4 + 40 +36.0 + 49 +24.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +6.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +51 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO11W100 + 70 +0 + 3 +ISO double-dash dot __ __ . __ __ . __ __ . __ _ + 72 +65 + 73 +6 + 40 +33.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +52 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTERX2 + 70 +0 + 3 +Center (2x) ________ __ ________ __ _____ + 72 +65 + 73 +4 + 40 +101.6000000000000085 + 49 +63.5 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +12.6999999999999993 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +53 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO14W100 + 70 +0 + 3 +ISO dash triple-dot __ . . . __ . . . __ . . . _ + 72 +65 + 73 +8 + 40 +24.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +54 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO03W100 + 70 +0 + 3 +ISO dash space __ __ __ __ __ __ + 72 +65 + 73 +2 + 40 +30.0 + 49 +12.0 + 74 +0 + 49 +-18.0 + 74 +0 + 0 +LTYPE + 5 +55 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOT + 70 +0 + 3 +Dot . . . . . . . . . . . . . . . . . . . . . . . . + 72 +65 + 73 +2 + 40 +6.3499999999999996 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +56 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDE2 + 70 +0 + 3 +Divide (.5x) __..__..__..__..__..__..__..__.._ + 72 +65 + 73 +6 + 40 +15.875 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +2 +100 +AcDbSymbolTable + 70 +2 + 0 +LAYER + 5 +10 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 +0 + 62 +7 +420 +16777215 + 6 +Continuous +370 +-3 +390 +F + 0 +LAYER + 5 +57 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +layer 1 + 70 +0 + 62 +7 +420 +16777215 + 6 +Continuous +370 +-3 +390 +F + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +3 +100 +AcDbSymbolTable + 70 +1 + 0 +STYLE + 5 +58 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +Standard + 70 +0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +2.5 + 3 + + 4 + +1001 +ACAD +1000 +txt +1071 +0 + 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 +12 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 +0 + 0 +APPID + 5 +59 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +QCAD + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +A +100 +AcDbSymbolTable + 70 +1 +100 +AcDbDimStyleTable + 71 +0 + 0 +DIMSTYLE +105 +27 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +Standard + 41 +0.18 + 42 +0.0625 + 43 +3.75 + 44 +0.18 + 70 +0 + 73 +1 + 74 +0 + 77 +0 + 78 +8 +140 +0.18 +141 +2.5 +143 +0.03937007874016 +147 +0.09 +171 +3 +172 +1 +271 +2 +272 +2 +274 +3 +278 +44 +283 +0 +284 +8 +340 +58 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +1 +100 +AcDbSymbolTable + 70 +1 + 0 +BLOCK_RECORD + 5 +1F +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Model_Space +340 +22 + 0 +BLOCK_RECORD + 5 +1B +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space +340 +1E + 0 +BLOCK_RECORD + 5 +23 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space0 +340 +26 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +20 +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 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +1C +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 +1D +100 +AcDbEntity + 67 +1 + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +24 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space0 + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space0 + 1 + + 0 +ENDBLK + 5 +25 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +SPLINE + 5 +5A +100 +AcDbEntity + 8 +layer 1 + 62 +22 +420 +10823936 +370 +9 + 48 +1.0 + 6 +ByLayer +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +16 + 73 +12 + 74 +0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.3333333333333333 + 40 +0.3333333333333333 + 40 +0.3333333333333333 + 40 +0.3333333333333333 + 40 +0.6666666666666666 + 40 +0.6666666666666666 + 40 +0.6666666666666666 + 40 +0.6666666666666666 + 40 +1.0 + 40 +1.0 + 40 +1.0 + 40 +1.0 + 10 +-111.2409999999999997 + 20 +-32.1672000000000011 + 30 +0.0 + 10 +-110.6367000000000047 + 20 +-32.9513000000000034 + 30 +0.0 + 10 +-109.9324000000000012 + 20 +-31.3948 + 30 +0.0 + 10 +-110.3203000000000031 + 20 +-30.9133999999999993 + 30 +0.0 + 10 +-110.3203000000000031 + 20 +-30.9133999999999993 + 30 +0.0 + 10 +-110.5762 + 20 +-30.5958000000000006 + 30 +0.0 + 10 +-112.8046999999999969 + 20 +-29.3503000000000007 + 30 +0.0 + 10 +-112.295100000000005 + 20 +-30.5507999999999988 + 30 +0.0 + 10 +-112.295100000000005 + 20 +-30.5507999999999988 + 30 +0.0 + 10 +-112.111699999999999 + 20 +-30.9829000000000008 + 30 +0.0 + 10 +-111.5409999999999968 + 20 +-31.8672000000000004 + 30 +0.0 + 10 +-111.2409999999999997 + 20 +-32.1672000000000011 + 30 +0.0 + 0 +SPLINE + 5 +5B +100 +AcDbEntity + 8 +layer 1 + 62 +22 +420 +10823936 +370 +9 + 48 +1.0 + 6 +ByLayer +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +28 + 73 +24 + 74 +0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.1666666666666667 + 40 +0.1666666666666667 + 40 +0.1666666666666667 + 40 +0.1666666666666667 + 40 +0.3333333333333333 + 40 +0.3333333333333333 + 40 +0.3333333333333333 + 40 +0.3333333333333333 + 40 +0.5 + 40 +0.5 + 40 +0.5 + 40 +0.5 + 40 +0.6666666666666666 + 40 +0.6666666666666666 + 40 +0.6666666666666666 + 40 +0.6666666666666666 + 40 +0.8333333333333333 + 40 +0.8333333333333333 + 40 +0.8333333333333333 + 40 +0.8333333333333333 + 40 +1.0 + 40 +1.0 + 40 +1.0 + 40 +1.0 + 10 +-109.3637999999999977 + 20 +-32.6681000000000026 + 30 +0.0 + 10 +-109.3637999999999977 + 20 +-32.6681000000000026 + 30 +0.0 + 10 +-108.5859999999999985 + 20 +-32.2715999999999994 + 30 +0.0 + 10 +-108.5859999999999985 + 20 +-32.2715999999999994 + 30 +0.0 + 10 +-108.5859999999999985 + 20 +-32.2715999999999994 + 30 +0.0 + 10 +-108.6813999999999965 + 20 +-33.3472999999999971 + 30 +0.0 + 10 +-108.7325000000000017 + 20 +-33.0366 + 30 +0.0 + 10 +-108.7856000000000023 + 20 +-33.5183000000000035 + 30 +0.0 + 10 +-108.7856000000000023 + 20 +-33.5183000000000035 + 30 +0.0 + 10 +-108.8451000000000022 + 20 +-34.0583999999999989 + 30 +0.0 + 10 +-108.4802999999999997 + 20 +-34.253300000000003 + 30 +0.0 + 10 +-107.8536000000000001 + 20 +-33.7674000000000021 + 30 +0.0 + 10 +-107.8536000000000001 + 20 +-33.7674000000000021 + 30 +0.0 + 10 +-106.7386000000000053 + 20 +-32.9029999999999987 + 30 +0.0 + 10 +-106.6941000000000059 + 20 +-33.5696999999999974 + 30 +0.0 + 10 +-107.6384000000000043 + 20 +-34.5176999999999978 + 30 +0.0 + 10 +-107.6384000000000043 + 20 +-34.5176999999999978 + 30 +0.0 + 10 +-108.0575999999999937 + 20 +-34.9384999999999977 + 30 +0.0 + 10 +-107.9699999999999989 + 20 +-34.4868000000000023 + 30 +0.0 + 10 +-109.7356999999999942 + 20 +-34.4701000000000022 + 30 +0.0 + 10 +-109.7356999999999942 + 20 +-34.4701000000000022 + 30 +0.0 + 10 +-109.4275999999999982 + 20 +-33.4562999999999988 + 30 +0.0 + 10 +-109.5079999999999956 + 20 +-33.2999999999999972 + 30 +0.0 + 10 +-109.3637999999999977 + 20 +-32.6681000000000026 + 30 +0.0 + 0 +SPLINE + 5 +5C +100 +AcDbEntity + 8 +layer 1 + 62 +22 +420 +10823936 +370 +9 + 48 +1.0 + 6 +ByLayer +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +124 + 73 +120 + 74 +0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0333333333333333 + 40 +0.0333333333333333 + 40 +0.0333333333333333 + 40 +0.0333333333333333 + 40 +0.0666666666666667 + 40 +0.0666666666666667 + 40 +0.0666666666666667 + 40 +0.0666666666666667 + 40 +0.1 + 40 +0.1 + 40 +0.1 + 40 +0.1 + 40 +0.1333333333333333 + 40 +0.1333333333333333 + 40 +0.1333333333333333 + 40 +0.1333333333333333 + 40 +0.1666666666666667 + 40 +0.1666666666666667 + 40 +0.1666666666666667 + 40 +0.1666666666666667 + 40 +0.2 + 40 +0.2 + 40 +0.2 + 40 +0.2 + 40 +0.2333333333333333 + 40 +0.2333333333333333 + 40 +0.2333333333333333 + 40 +0.2333333333333333 + 40 +0.2666666666666667 + 40 +0.2666666666666667 + 40 +0.2666666666666667 + 40 +0.2666666666666667 + 40 +0.3 + 40 +0.3 + 40 +0.3 + 40 +0.3 + 40 +0.3333333333333333 + 40 +0.3333333333333333 + 40 +0.3333333333333333 + 40 +0.3333333333333333 + 40 +0.3666666666666666 + 40 +0.3666666666666666 + 40 +0.3666666666666666 + 40 +0.3666666666666666 + 40 +0.4 + 40 +0.4 + 40 +0.4 + 40 +0.4 + 40 +0.4333333333333333 + 40 +0.4333333333333333 + 40 +0.4333333333333333 + 40 +0.4333333333333333 + 40 +0.4666666666666666 + 40 +0.4666666666666666 + 40 +0.4666666666666666 + 40 +0.4666666666666666 + 40 +0.4999999999999999 + 40 +0.4999999999999999 + 40 +0.4999999999999999 + 40 +0.4999999999999999 + 40 +0.5333333333333333 + 40 +0.5333333333333333 + 40 +0.5333333333333333 + 40 +0.5333333333333333 + 40 +0.5666666666666667 + 40 +0.5666666666666667 + 40 +0.5666666666666667 + 40 +0.5666666666666667 + 40 +0.6 + 40 +0.6 + 40 +0.6 + 40 +0.6 + 40 +0.6333333333333333 + 40 +0.6333333333333333 + 40 +0.6333333333333333 + 40 +0.6333333333333333 + 40 +0.6666666666666666 + 40 +0.6666666666666666 + 40 +0.6666666666666666 + 40 +0.6666666666666666 + 40 +0.7 + 40 +0.7 + 40 +0.7 + 40 +0.7 + 40 +0.7333333333333333 + 40 +0.7333333333333333 + 40 +0.7333333333333333 + 40 +0.7333333333333333 + 40 +0.7666666666666666 + 40 +0.7666666666666666 + 40 +0.7666666666666666 + 40 +0.7666666666666666 + 40 +0.7999999999999999 + 40 +0.7999999999999999 + 40 +0.7999999999999999 + 40 +0.7999999999999999 + 40 +0.8333333333333333 + 40 +0.8333333333333333 + 40 +0.8333333333333333 + 40 +0.8333333333333333 + 40 +0.8666666666666666 + 40 +0.8666666666666666 + 40 +0.8666666666666666 + 40 +0.8666666666666666 + 40 +0.8999999999999999 + 40 +0.8999999999999999 + 40 +0.8999999999999999 + 40 +0.8999999999999999 + 40 +0.9333333333333332 + 40 +0.9333333333333332 + 40 +0.9333333333333332 + 40 +0.9333333333333332 + 40 +0.9666666666666666 + 40 +0.9666666666666666 + 40 +0.9666666666666666 + 40 +0.9666666666666666 + 40 +1.0 + 40 +1.0 + 40 +1.0 + 40 +1.0 + 10 +-112.5198000000000036 + 20 +-32.2443999999999988 + 30 +0.0 + 10 +-112.6935000000000002 + 20 +-31.7270000000000003 + 30 +0.0 + 10 +-111.4882000000000062 + 20 +-32.4035999999999973 + 30 +0.0 + 10 +-111.4017999999999944 + 20 +-32.7090000000000032 + 30 +0.0 + 10 +-111.4017999999999944 + 20 +-32.7090000000000032 + 30 +0.0 + 10 +-111.1898000000000053 + 20 +-33.4585000000000008 + 30 +0.0 + 10 +-112.5488 + 20 +-33.929000000000002 + 30 +0.0 + 10 +-112.6602000000000032 + 20 +-34.4161000000000001 + 30 +0.0 + 10 +-112.6602000000000032 + 20 +-34.4161000000000001 + 30 +0.0 + 10 +-112.9474000000000018 + 20 +-35.6719000000000008 + 30 +0.0 + 10 +-110.914599999999993 + 20 +-33.1330999999999989 + 30 +0.0 + 10 +-110.3564999999999969 + 20 +-32.8382000000000005 + 30 +0.0 + 10 +-110.3564999999999969 + 20 +-32.8382000000000005 + 30 +0.0 + 10 +-110.3564999999999969 + 20 +-32.8382000000000005 + 30 +0.0 + 10 +-110.2206999999999937 + 20 +-32.7316000000000003 + 30 +0.0 + 10 +-110.2206999999999937 + 20 +-32.7316000000000003 + 30 +0.0 + 10 +-110.2206999999999937 + 20 +-32.7316000000000003 + 30 +0.0 + 10 +-109.9545999999999992 + 20 +-33.1191000000000031 + 30 +0.0 + 10 +-112.2176000000000045 + 20 +-35.315800000000003 + 30 +0.0 + 10 +-112.2703999999999951 + 20 +-35.5608999999999966 + 30 +0.0 + 10 +-112.2703999999999951 + 20 +-35.5608999999999966 + 30 +0.0 + 10 +-112.4333000000000027 + 20 +-36.3171000000000035 + 30 +0.0 + 10 +-110.0694000000000017 + 20 +-34.9859999999999971 + 30 +0.0 + 10 +-109.9098999999999933 + 20 +-33.0399000000000029 + 30 +0.0 + 10 +-109.9098999999999933 + 20 +-33.0399000000000029 + 30 +0.0 + 10 +-109.8949000000000069 + 20 +-32.8569000000000031 + 30 +0.0 + 10 +-109.8641999999999967 + 20 +-32.6886999999999972 + 30 +0.0 + 10 +-110.0280999999999949 + 20 +-32.5641000000000034 + 30 +0.0 + 10 +-110.0280999999999949 + 20 +-32.5641000000000034 + 30 +0.0 + 10 +-110.1718999999999937 + 20 +-32.629800000000003 + 30 +0.0 + 10 +-110.1470999999999947 + 20 +-31.6556999999999995 + 30 +0.0 + 10 +-109.5563999999999965 + 20 +-32.0268000000000015 + 30 +0.0 + 10 +-109.5563999999999965 + 20 +-32.0268000000000015 + 30 +0.0 + 10 +-109.3380999999999972 + 20 +-31.9085999999999999 + 30 +0.0 + 10 +-108.7339000000000055 + 20 +-31.5412999999999997 + 30 +0.0 + 10 +-108.4953000000000003 + 20 +-31.5412999999999997 + 30 +0.0 + 10 +-108.4953000000000003 + 20 +-31.5412999999999997 + 30 +0.0 + 10 +-108.4953000000000003 + 20 +-30.4975999999999985 + 30 +0.0 + 10 +-108.0190999999999946 + 20 +-29.5066999999999986 + 30 +0.0 + 10 +-108.1890999999999963 + 20 +-28.458400000000001 + 30 +0.0 + 10 +-108.1890999999999963 + 20 +-28.458400000000001 + 30 +0.0 + 10 +-108.2746000000000066 + 20 +-27.9310000000000009 + 30 +0.0 + 10 +-106.8755000000000024 + 20 +-27.5620000000000012 + 30 +0.0 + 10 +-106.7511999999999972 + 20 +-28.4538000000000011 + 30 +0.0 + 10 +-106.7511999999999972 + 20 +-28.4538000000000011 + 30 +0.0 + 10 +-106.704899999999995 + 20 +-28.7861000000000011 + 30 +0.0 + 10 +-106.7152999999999992 + 20 +-28.8987000000000016 + 30 +0.0 + 10 +-107.045100000000005 + 20 +-30.1294000000000004 + 30 +0.0 + 10 +-107.045100000000005 + 20 +-30.1294000000000004 + 30 +0.0 + 10 +-107.1805999999999983 + 20 +-30.6351000000000013 + 30 +0.0 + 10 +-107.2925999999999931 + 20 +-31.1172000000000004 + 30 +0.0 + 10 +-107.2256 + 20 +-31.2055000000000007 + 30 +0.0 + 10 +-107.2256 + 20 +-31.2055000000000007 + 30 +0.0 + 10 +-107.109499999999997 + 20 +-31.3582000000000001 + 30 +0.0 + 10 +-106.3580000000000041 + 20 +-30.7684999999999995 + 30 +0.0 + 10 +-106.493300000000005 + 20 +-31.4213999999999984 + 30 +0.0 + 10 +-106.493300000000005 + 20 +-31.4213999999999984 + 30 +0.0 + 10 +-106.5685000000000002 + 20 +-31.7844000000000015 + 30 +0.0 + 10 +-107.3225000000000051 + 20 +-31.4309000000000012 + 30 +0.0 + 10 +-107.6927000000000021 + 20 +-32.1942999999999984 + 30 +0.0 + 10 +-107.6927000000000021 + 20 +-32.1942999999999984 + 30 +0.0 + 10 +-107.7378999999999962 + 20 +-32.2875000000000014 + 30 +0.0 + 10 +-108.1503000000000014 + 20 +-32.8586000000000027 + 30 +0.0 + 10 +-107.7788000000000039 + 20 +-32.8586000000000027 + 30 +0.0 + 10 +-107.7788000000000039 + 20 +-32.8586000000000027 + 30 +0.0 + 10 +-107.752600000000001 + 20 +-32.8586000000000027 + 30 +0.0 + 10 +-106.5206000000000017 + 20 +-32.0927999999999969 + 30 +0.0 + 10 +-106.0353999999999957 + 20 +-32.9739999999999966 + 30 +0.0 + 10 +-106.0353999999999957 + 20 +-32.9739999999999966 + 30 +0.0 + 10 +-105.8924999999999983 + 20 +-33.2334999999999994 + 30 +0.0 + 10 +-105.9481999999999999 + 20 +-33.5763999999999996 + 30 +0.0 + 10 +-106.1306000000000012 + 20 +-33.7927999999999997 + 30 +0.0 + 10 +-106.1306000000000012 + 20 +-33.7927999999999997 + 30 +0.0 + 10 +-106.2793000000000063 + 20 +-33.9692000000000007 + 30 +0.0 + 10 +-107.1510999999999996 + 20 +-34.8765000000000001 + 30 +0.0 + 10 +-106.8923000000000059 + 20 +-35.0482999999999976 + 30 +0.0 + 10 +-106.8923000000000059 + 20 +-35.0482999999999976 + 30 +0.0 + 10 +-106.3265999999999991 + 20 +-35.4239000000000033 + 30 +0.0 + 10 +-104.4281000000000006 + 20 +-34.8352000000000004 + 30 +0.0 + 10 +-103.2467000000000041 + 20 +-34.9575999999999993 + 30 +0.0 + 10 +-103.2467000000000041 + 20 +-34.9575999999999993 + 30 +0.0 + 10 +-103.7497000000000043 + 20 +-35.7697000000000003 + 30 +0.0 + 10 +-104.6564999999999941 + 20 +-36.3988999999999976 + 30 +0.0 + 10 +-105.5411000000000001 + 20 +-36.5970000000000013 + 30 +0.0 + 10 +-105.5411000000000001 + 20 +-36.5970000000000013 + 30 +0.0 + 10 +-106.3256999999999977 + 20 +-36.7727000000000004 + 30 +0.0 + 10 +-107.4925000000000068 + 20 +-35.5671999999999997 + 30 +0.0 + 10 +-107.7177999999999969 + 20 +-35.5655000000000001 + 30 +0.0 + 10 +-107.7177999999999969 + 20 +-35.5655000000000001 + 30 +0.0 + 10 +-107.9337000000000018 + 20 +-35.5638999999999967 + 30 +0.0 + 10 +-108.4059000000000026 + 20 +-36.6769000000000034 + 30 +0.0 + 10 +-109.4565999999999946 + 20 +-36.463000000000001 + 30 +0.0 + 10 +-109.4565999999999946 + 20 +-36.463000000000001 + 30 +0.0 + 10 +-109.7105999999999995 + 20 +-36.4112999999999971 + 30 +0.0 + 10 +-110.247399999999999 + 20 +-35.9530999999999992 + 30 +0.0 + 10 +-109.5631000000000057 + 20 +-35.9168999999999983 + 30 +0.0 + 10 +-109.5631000000000057 + 20 +-35.9168999999999983 + 30 +0.0 + 10 +-109.0208999999999975 + 20 +-35.8881999999999977 + 30 +0.0 + 10 +-107.7725999999999971 + 20 +-35.198599999999999 + 30 +0.0 + 10 +-108.9669999999999987 + 20 +-35.0165999999999968 + 30 +0.0 + 10 +-108.9669999999999987 + 20 +-35.0165999999999968 + 30 +0.0 + 10 +-108.9669999999999987 + 20 +-35.0165999999999968 + 30 +0.0 + 10 +-109.9646000000000043 + 20 +-34.8665999999999983 + 30 +0.0 + 10 +-109.9646000000000043 + 20 +-34.8665999999999983 + 30 +0.0 + 10 +-109.9646000000000043 + 20 +-34.8665999999999983 + 30 +0.0 + 10 +-110.1243000000000052 + 20 +-35.232999999999997 + 30 +0.0 + 10 +-110.9376000000000033 + 20 +-36.6582000000000008 + 30 +0.0 + 10 +-111.4495000000000005 + 20 +-36.3288999999999973 + 30 +0.0 + 10 +-111.4495000000000005 + 20 +-36.3288999999999973 + 30 +0.0 + 10 +-111.7240000000000038 + 20 +-36.1522999999999968 + 30 +0.0 + 10 +-112.7754999999999939 + 20 +-35.696399999999997 + 30 +0.0 + 10 +-112.5444999999999993 + 20 +-36.4466999999999999 + 30 +0.0 + 10 +-112.5444999999999993 + 20 +-36.4466999999999999 + 30 +0.0 + 10 +-112.4030999999999949 + 20 +-36.9057999999999993 + 30 +0.0 + 10 +-113.4736000000000047 + 20 +-36.6186999999999969 + 30 +0.0 + 10 +-113.565100000000001 + 20 +-35.8145000000000024 + 30 +0.0 + 10 +-113.565100000000001 + 20 +-35.8145000000000024 + 30 +0.0 + 10 +-113.7501000000000033 + 20 +-34.1884000000000015 + 30 +0.0 + 10 +-112.392399999999995 + 20 +-33.7370999999999981 + 30 +0.0 + 10 +-112.5198000000000036 + 20 +-32.2443999999999988 + 30 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +C +100 +AcDbDictionary +280 +0 +281 +1 + 3 +ACAD_GROUP +350 +D + 3 +ACAD_LAYOUT +350 +1A + 3 +ACAD_MLINESTYLE +350 +17 + 3 +ACAD_PLOTSETTINGS +350 +19 + 3 +ACAD_PLOTSTYLENAME +350 +E + 3 +AcDbVariableDictionary +350 +5D + 3 +QCAD_OBJECTS +350 +5E + 0 +DICTIONARY + 5 +D +100 +AcDbDictionary +280 +0 +281 +1 + 0 +ACDBDICTIONARYWDFLT + 5 +E +100 +AcDbDictionary +281 +1 + 3 +Normal +350 +F +100 +AcDbDictionaryWithDefault +340 +F + 0 +ACDBPLACEHOLDER + 5 +F + 0 +DICTIONARY + 5 +17 +100 +AcDbDictionary +280 +0 +281 +1 + 3 +Standard +350 +18 + 0 +MLINESTYLE + 5 +18 +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 +DICTIONARY + 5 +19 +100 +AcDbDictionary +280 +0 +281 +1 + 0 +DICTIONARY + 5 +1A +100 +AcDbDictionary +281 +1 + 3 +Layout1 +350 +1E + 3 +Layout2 +350 +26 + 3 +Model +350 +22 + 0 +LAYOUT + 5 +1E +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 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 +688 + 72 +0 + 73 +0 + 74 +5 + 7 + + 75 +16 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout1 + 70 +1 + 71 +1 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +100000000000000000000.0 + 24 +100000000000000000000.0 + 34 +100000000000000000000.0 + 15 +-100000000000000000000.0 + 25 +-100000000000000000000.0 + 35 +-100000000000000000000.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 +0 +330 +1B + 0 +LAYOUT + 5 +22 +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 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 +1712 + 72 +0 + 73 +0 + 74 +0 + 7 + + 75 +0 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Model + 70 +1 + 71 +0 + 10 +0.0 + 20 +0.0 + 11 +12.0 + 21 +9.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +0.0 + 24 +0.0 + 34 +0.0 + 15 +0.0 + 25 +0.0 + 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 +0 +330 +1F + 0 +LAYOUT + 5 +26 +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 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 +688 + 72 +0 + 73 +0 + 74 +5 + 7 + + 75 +16 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout2 + 70 +1 + 71 +2 + 10 +0.0 + 20 +0.0 + 11 +12.0 + 21 +9.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +0.0 + 24 +0.0 + 34 +0.0 + 15 +0.0 + 25 +0.0 + 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 +0 +330 +23 + 0 +DICTIONARY + 5 +5D +100 +AcDbDictionary +281 +1 + 3 +DIMASSOC +350 +60 + 3 +HIDETEXT +350 +5F + 0 +DICTIONARYVAR + 5 +5F +100 +DictionaryVariables +280 +0 + 1 +2 + 0 +DICTIONARYVAR + 5 +60 +100 +DictionaryVariables +280 +0 + 1 +1 + 0 +DICTIONARY + 5 +5E +100 +AcDbDictionary +281 +1 + 3 +ColorSettings/BackgroundColor +350 +61 + 3 +ColorSettings/ColorMode +350 +62 + 3 +Grid/DisplayGrid00 +350 +63 + 3 +Grid/DisplayGrid01 +350 +64 + 3 +Grid/DisplayGrid02 +350 +65 + 3 +Grid/DisplayGrid03 +350 +66 + 3 +Grid/GridSpacingX00 +350 +67 + 3 +Grid/GridSpacingX01 +350 +68 + 3 +Grid/GridSpacingX02 +350 +69 + 3 +Grid/GridSpacingX03 +350 +6A + 3 +Grid/GridSpacingY00 +350 +6B + 3 +Grid/GridSpacingY01 +350 +6C + 3 +Grid/GridSpacingY02 +350 +6D + 3 +Grid/GridSpacingY03 +350 +6E + 3 +Grid/IsometricGrid00 +350 +6F + 3 +Grid/IsometricGrid01 +350 +70 + 3 +Grid/IsometricGrid02 +350 +71 + 3 +Grid/IsometricGrid03 +350 +72 + 3 +Grid/IsometricProjection00 +350 +73 + 3 +Grid/IsometricProjection01 +350 +74 + 3 +Grid/IsometricProjection02 +350 +75 + 3 +Grid/IsometricProjection03 +350 +76 + 3 +Grid/MetaGridSpacingX00 +350 +77 + 3 +Grid/MetaGridSpacingX01 +350 +78 + 3 +Grid/MetaGridSpacingX02 +350 +79 + 3 +Grid/MetaGridSpacingX03 +350 +7A + 3 +Grid/MetaGridSpacingY00 +350 +7B + 3 +Grid/MetaGridSpacingY01 +350 +7C + 3 +Grid/MetaGridSpacingY02 +350 +7D + 3 +Grid/MetaGridSpacingY03 +350 +7E + 3 +MultiPageSettings/Columns +350 +7F + 3 +MultiPageSettings/GlueMarginsBottom +350 +80 + 3 +MultiPageSettings/GlueMarginsLeft +350 +81 + 3 +MultiPageSettings/GlueMarginsRight +350 +82 + 3 +MultiPageSettings/GlueMarginsTop +350 +83 + 3 +MultiPageSettings/PrintCropMarks +350 +84 + 3 +MultiPageSettings/Rows +350 +85 + 3 +PageSettings/OffsetX +350 +86 + 3 +PageSettings/OffsetY +350 +87 + 3 +PageSettings/PageOrientation +350 +88 + 3 +PageSettings/PaperHeight +350 +89 + 3 +PageSettings/PaperWidth +350 +8A + 3 +PageSettings/Scale +350 +8B + 3 +PageSettings/ShowPaperBorders +350 +8C + 3 +PageTagSettings/EnablePageTags +350 +8D + 3 +PageTagSettings/TagAlignment +350 +8E + 3 +PageTagSettings/TagFont +350 +8F + 3 +PageTagSettings/TagPosition +350 +90 + 3 +UnitSettings/PaperUnit +350 +91 + 3 +ViewportCenter +350 +92 + 3 +ViewportHeight +350 +93 + 3 +ViewportWidth +350 +94 + 0 +XRECORD + 5 +61 +330 +5E +100 +AcDbXrecord +280 +1 +1000 +\U+767d\U+8272 + 0 +XRECORD + 5 +62 +330 +5E +100 +AcDbXrecord +280 +1 +1000 +FullColor + 0 +XRECORD + 5 +63 +330 +5E +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +64 +330 +5E +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +65 +330 +5E +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +66 +330 +5E +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +67 +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +68 +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +69 +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +6A +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +6B +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +6C +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +6D +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +6E +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +6F +330 +5E +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +70 +330 +5E +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +71 +330 +5E +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +72 +330 +5E +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +73 +330 +5E +100 +AcDbXrecord +280 +1 + 90 +65537 + 0 +XRECORD + 5 +74 +330 +5E +100 +AcDbXrecord +280 +1 + 90 +65537 + 0 +XRECORD + 5 +75 +330 +5E +100 +AcDbXrecord +280 +1 + 90 +65537 + 0 +XRECORD + 5 +76 +330 +5E +100 +AcDbXrecord +280 +1 + 90 +65537 + 0 +XRECORD + 5 +77 +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +78 +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +79 +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +7A +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +7B +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +7C +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +7D +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +7E +330 +5E +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +7F +330 +5E +100 +AcDbXrecord +280 +1 + 90 +1 + 0 +XRECORD + 5 +80 +330 +5E +100 +AcDbXrecord +280 +1 + 40 +10.0 + 0 +XRECORD + 5 +81 +330 +5E +100 +AcDbXrecord +280 +1 + 40 +10.0 + 0 +XRECORD + 5 +82 +330 +5E +100 +AcDbXrecord +280 +1 + 40 +10.0 + 0 +XRECORD + 5 +83 +330 +5E +100 +AcDbXrecord +280 +1 + 40 +10.0 + 0 +XRECORD + 5 +84 +330 +5E +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +85 +330 +5E +100 +AcDbXrecord +280 +1 + 90 +1 + 0 +XRECORD + 5 +86 +330 +5E +100 +AcDbXrecord +280 +1 + 40 +0.0 + 0 +XRECORD + 5 +87 +330 +5E +100 +AcDbXrecord +280 +1 + 40 +0.0 + 0 +XRECORD + 5 +88 +330 +5E +100 +AcDbXrecord +280 +1 +1000 +Portrait + 0 +XRECORD + 5 +89 +330 +5E +100 +AcDbXrecord +280 +1 + 40 +297.0 + 0 +XRECORD + 5 +8A +330 +5E +100 +AcDbXrecord +280 +1 + 40 +210.0 + 0 +XRECORD + 5 +8B +330 +5E +100 +AcDbXrecord +280 +1 +1000 +1:1 + 0 +XRECORD + 5 +8C +330 +5E +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +8D +330 +5E +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +8E +330 +5E +100 +AcDbXrecord +280 +1 +1000 +Inside + 0 +XRECORD + 5 +8F +330 +5E +100 +AcDbXrecord +280 +1 +1000 +Arial,10,-1,5,50,0,0,0,0,0 + 0 +XRECORD + 5 +90 +330 +5E +100 +AcDbXrecord +280 +1 +1000 +TopLeft + 0 +XRECORD + 5 +91 +330 +5E +100 +AcDbXrecord +280 +1 + 90 +4 + 0 +XRECORD + 5 +93 +330 +5E +100 +AcDbXrecord +280 +1 + 40 +15.47437654040856 + 0 +XRECORD + 5 +94 +330 +5E +100 +AcDbXrecord +280 +1 + 40 +30.7550543480442826 + 0 +ENDSEC + 0 +EOF diff --git a/testdata/dxf/issue_1422a_au.gds.gz b/testdata/dxf/issue_1422a_au.gds.gz new file mode 100644 index 0000000000000000000000000000000000000000..0459c4446ebbf1e7e3d885e887dbb172839bd72b GIT binary patch literal 7872 zcmaLccX*Zcy#Vk7B11(%p)MR$Eow#7T2~zv10*3pauPC5HXtHJB`154LlVL$Lcm!^ zwJsc0t5>C3C-u5lU9GFF3+t$R*Ph?~yeH}Nc%S<`xBq!$!tp!$%K|4T%lkacC^IO~sgPLVEU7AuLbvO0Hll*K;;6=YHHA z(zCwi3w)B_@`@0;4`4IPIDvPEblx2y^c=%%J{Hn5UksslaY*NW62glA=EM+IP7LXs zNBIC#A*?FoQZ{lP&tnxYVL7j28Lu7mdX~EWk2kn3aeWhu`8&q>2hO7B=A6iX^6(H= z@4~$(?wql_fTQ{J;C0~m5Y~*RbFDdu^04N3PUb8g!wOEL^W_w>iQ-?goP9ipH}NvQ z%1zF{Bd=rD;Po=fbM7B_KELBidFy43JVtR$<_+TeSe{Rz^Uiviem?t5jt%KK?z5^c zr1LA}^%dUA3;8LlnPxns3r2A|ci<@$&&r>3r|)@^>oKnX zB+AFiA`bS*~^g*w_C{WK{ zc`rDg`|%)s_8!I6bE|Xyo9%p?&YAxh)jMAux?g8MJulz=yL*|>1P|pA+>SfS=T?2L zU*_D;XZS0cgE>iF$y}=M9OqxIUbDZZx)01#Y}nZUGjDrb63yETaV&j^tN18u=zKGd z;$P_bOWzLZ>96q%-W)=mJWOBCy{XUY%-8h&IX9%IeaS{XO7)(0Det9x*U9fRaVDLA zn*L3yx3&vOpU?U$%}>^Se1lhqP(OiZQ$DiPss17^;cKi7p+O&J&E@ZDz8X&$xNf|M zRUtHqE9*?&%$^XMCsI7k>v=c7<=;bSsTI!%n#*av*V;#UZqsMeC-GCNQ@cD*m)DLW zc~Sq)5nRLhyo2}iZy_w(C#187QU0?J;8sozp=%Zs6mRw!A*6mp`z`e=rqpYvL4Qeo z*S!OsxBDob#&YW4?p7|PdS`cX6W8+&Uc(3Y03YV-RM#BwbgOgD!4zjs5%o{B@4BPC z74@V1=8mDc&26GN%vJa9;pSib%iVA0mDHy*zoU7~Q_s}DD9)5Q%af0k`{rFmdo1rx zw(v2EKko%b-+Plo`M!K?;RkfzysezUm$*G2mOuTTC%$F&QQiht@hr+;wAVZBp}f6$ zm$*J=AN5gZA=h$W=lHFKN_sV$PHwpKtqYAYW~d@O;;oP~Wu4L-tHg=ONUO z**oixPt^I}e25?MV!p~OzQ`Z&Px{Hc&Ul9Io4LN0&fl_@KHt(nd!eO<;%Lcdn(mW5 zn#Xe=9?c{9Q_6SddfwpAJ2=gMzkt4<{XEZdzFn!Wa%%Xb{QSguE9{3U@-`==3x><@ zQ`GONag6#=-$r{ewLkS=YA@=q%+Gs$KDf3gy58k#s!PF2-p+1%UO_wCxPa!bAj|VU zU4?%pTjYn`Wl7nxIe&RuMd7dy{Y<~&Ky zZ_J_hedB>_r1{Pff8(CC7aQFtywp4^h-;3s_QJ>Gs;j_F&eh!eo-PuL^x#{ne?`HEfXEtx+ zt@>e-{O`icDG#mcp8p8#w}J`!{1D1Rn|Ug5-*)j8e8RUvI)0FPxqrM&{p|m^csjT6 zVs%|abJn#DZ{~iyjq@lkUBBk-e2F*eEBTLK!^yma@)hrA^m*~8+NnM%doFHoru?1} zcaD@j7eATNbMacWJ*FQDKA=1m*hkBI z_z@rEm$Y9>%x%Ue>H8(o9(<7%yfvifs$c5$kS_EyGnmby+*KW3DtR()4^FH89~OFUP+t@?1T zytYma>EaKmUM0@mV&9cMN^zB`bBnr^y~FO1PRLt}`Ay8Cy`2zei#jAWQNJag<%J<# z?p!VZ#l!e#E^vSSS#B;{59XTh`D54W+Il$8qdiux5285B<-gVaDyHx+6mMHGzoYzA zs(1TIJcrluas9Ug-{5gnpAPd^HJt0IuRHWdm2-5w%pdYQdJlKn-x-hLMArq}o%*(F zM>=Pfb9MeQq$}0GQ(ToV@i%;co9OqF&M1yPUd#Esf+x^^sPz2KwIN-xmF`#JoSo`f zp-!E7%;lksp0~a8KNCWSxhl`*D)}{^9lNu_dCf^;6y3k&*yXK)(NqdK(zk@ijdmmDje z==0k#`kXoHxP{{Cc%D1(8xEc)qq#2G$@z8}RD304Tzj9Cn8(h^jPi5>_hcj0sq<=z zyHkIboE*Zk!#I!5U(!hLk&;#RM-eaO-)O(2F5>;>a5SU&?5FcC*PkWNQ-5aW*L-Gt zkKWUnIgT{n|C#fGZ~eYA(w=axZuyDt#wGj_^+o(BUQhLkexHh~Q@1@EH;>(4QQ!B- zcU+(JIB$Fl%|rYR9%(*@@mL--XgQ|@_qx%-gd-pq3hwiQ1 zo^LaXGjjCce^-ah&*eY!`EhjKqP_VMkED4h%5(ow)K@+B-rS#YJs;((_J#e^JBjac zv3%)^-j!U+%XlNB{JzaC`t1jNl z@6sMyov**Q_2?CN-c9|mQJm#xQyk@wQ5+TK zZKL~E%%FHG`uGJO9rIfOnJ?V*k8SJ_1Qt-Oi1)1KI9PO75kv@wfwc_t6$dE)+- zckn?zNBgKs{WnbKXY@X=`j@h)tp%0w5@;-g>7B^BpE6v}^uegW) z`IMg1=l;?D?UUDxr*T);)2RRZeoXz@H<1T%R~|+4TB*X`7<)OC_D$yJ zFVKFgDy06a@_y)>?>yckef2D12kW_v>jtkkvBkA>^f_Pka};0oRyt?(7nJ9kp`1eV z-8YV7&585ZIM)h&k-5Hd;O8rn^!XJh`u;a`uIhhsIOVhVBRvDTF z`g!>gypKy5&ExMqPd`+sM@m0c*juS$+S92ndHMy_r}DS-oJ#dbJ)lqQ!PFD1=kwf5 za}&)|>gABGK9S#}C^T%5IX>44n}0%c z(7Z3t-~_5u^KR^-d{nLFD4OG@Zz+zZ55#5unqHviGi(lj;80=h_~q? z=Zz0IZ$DlY((|M5Z>G6xdOD;}v+tX;L;Cc)*cj5k=w}b*yIFrN@qe0I*+=zQayjK~ z$u)z@dvm?(-wk>T?TICk_D<%%N8arEEZ)Q=yp{`i1-(C)MCU!4=CpYn^?TDAahRVb zefEoELueG&Vtv|Z-z=8bhV|l>mxjHlpX+Z4=|#8F9$4hON%=ZW9+KyT^uq6WG8cqU z_hm?*`Z)E^sph24xfYzqEO{}Pb^2!hvm8U`i~jy`{u-LY`KN`j^xxcv>N4*Ie#hwN z;+!XrI(<|73HRq!Jf6k0cWXz`^J>g>-NjtYsE$vGZ#<8r{8e4X=V)H)e;U#ilbv&; zeefKk_qBO%*veJ>hWfElpO?>}xXVwWILfCCdH{EF?S9ec65sls_!Ii3;U9d2&$6HT zCZTT{?3uFrJYSy5cBJ!{n!DtSRKKJ-ElskU$1xGo+B+o8N68k7qomvUKH|^m{>AE0 zx0$!`H`HHs>R7xtmxuJ+r>WoOcCv{FvL&R8o*DRg(Un~3x{3WRzSyM_rogkvxEt==Xqlnw}ev&UZD%k@S9u>#yXWcn{?}u5L;7j(fk= zJ74@xs&m}^>yM#4)|>PAi`3Wgcd6eCV{GRH`aP%c1fI+J6mQ{rM)BI8^*4$C5Z=KW z-op#{Fy*2Cd3o8MZ?ZRp277j{yf+*xk1brv_j#kdPvnyiJW)Onf~@h4QTQgv%u$?YhgCHgGd zS0%rrI+Qf<3+n6U?L)fwW!i_u`nvfb+Oy5#D?W?*sdyfbVioO);<73uL;J(4GJA5Qf5Y3`S_ z?`Lh+pI=g4>)vMp_1!G-*S*V;RL8uJ`8i*reU!Jw_ebzj+J|||c_`&A`E%~Uh5mj| zea>XU-~$H>ZMAdHA5C2L5~YTU3W^anw(y zIgRp=9er;!m%9H~tQ>e=wmwSU?OOjNFXTx)llm>nOSb)x zcmr<7=kZlMfWINWvG_~88gIm9n80^&0v_f){ZSB(!oT6A_!3@k&UB(B5?+{nB> z$3NgIq|S}k;2vb2A@6P2jm)p%A!Pi9TKpQRXZT<8{55`ok0bTYT#B2ik3L_Hh+{kp8S&hc6?28oq5- zI}@pI%}oPpp6_#Ai92v2{t?Z8p8N;yG)r#9PjMyw8}Gs{ye#;z6wLXIz2V{LE=qKeTS%Svdoj8*GjK(r#-Q{yQ59y1P*6nAw0hxDd2hwM$y|@DVkaeFPj>Mg2 zUir(B_p1NX)H}y`=|&_!Y5Fnu3Nn6<^^(2?>5KGjNStZboA#kW-9F{^D=V(}-hNiT zK>Jzm60^!f15)4P2f6M-@>Llz9`&mliPLa$6dWb~D&jf%V`Lrm(4SQ=;i>qqDCk~g zHiLY0pN?%&(Dee+CtXwUNECE#H;dCxos1u+-W^Af_jUZrteSBU;<7gt~-d76L; z{2f-YPE!85exLtd`>*cTzN+UlzedJuATEvH@FMcQM)IQfH*WUvG|{Juujw@;-sZD? z{LO3qd|E1y`L*2Z=i5Tun*S`;kMc2Vlh03fsLxlH{_GlOmZgt+R}M(Nv(Hke=kRHy zf3x)4v2A!eGOuiwI{h8#r=zUzEPd8fVEiwU{+mU-J?G&))axUx!Uf2DyV?I+-s8P* z;N3U}&qF?M-b-BX;UoA9ya+E~zW*ft4rIIz_PwStNPjnO!)jE0e@NcGV*cMCb!q=I z4nz7Rvl^G7@^u&c;uf5b>~HO}sSoR}{aRlqU8i^Z@6+^|?oaJUo=^P@8Ly6h(fD)&6?xQeHidMmz~14z6z_aX7ujPvtJ?(p+Vat>;~+HW-fgz`c@5_cf^Nu1&H zRZU)$ziQ^8d{(o6DZkYde7@ryNdDvR`g+8d`})M`SJf*{JgQ&(d|%J_DZak(6R11& zo)P)_&j|Q^K^(g7dyxD2zONs-KX<2pK6elqFMl;Mex7|Tk_g{jT|||CJA|2jxfW zL;2ErQU0`kluxZEw0>1jt!LF&>s$5KdLLZ> zgZqK@)hy#`pUu(_+IO!?;40*K?aNnf$2HhXzp+oXo{1YVL%*@Fw`#v&pKoQK)xO`l z4vDArRo=G*w+_g@+`EbELHWF|(%;wjDe_!y9x_gjx@p|}Qsg~BIkHZI$9xO}G_jQpc0YyXv_R@5P;15rsvkQKz+d z3(^lotZ(+?u&4*8MqzBS+pohI@v?u1vE^<*4`XlRXT>Od1 z&xiBR%`Y()nXk@A&0puG@}cun`O$f*eCd2u{&e0dpE`e)U!BLwx6WtfU+1;zq4Qhy z(Rr?V>3moHbl$6;I{#H){T@)g_4`15PxpLrh*2TBKD-QYJAN=(E&fim3 fIxc20D<46m{2S$djj$W&uclt7f2xdMF2(jgKN#dT literal 0 HcmV?d00001 diff --git a/testdata/dxf/issue_1422c.dxf b/testdata/dxf/issue_1422c.dxf new file mode 100644 index 000000000..5372a94d2 --- /dev/null +++ b/testdata/dxf/issue_1422c.dxf @@ -0,0 +1,12252 @@ +999 +dxflib 3.26.4.0 + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1015 + 9 +$HANDSEED + 5 +FFFF + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 +0 + 9 +$ATTMODE + 70 +1 + 9 +$AUNITS + 70 +0 + 9 +$AUPREC + 70 +0 + 9 +$CECOLOR + 62 +178 + 9 +$CELTSCALE + 40 +1.0 + 9 +$CHAMFERA + 40 +0.5 + 9 +$CHAMFERB + 40 +0.5 + 9 +$CHAMFERC + 40 +1.0 + 9 +$CHAMFERD + 40 +0.0 + 9 +$CMLJUST + 70 +0 + 9 +$CMLSCALE + 40 +1.0 + 9 +$DIMADEC + 70 +0 + 9 +$DIMALT + 70 +0 + 9 +$DIMALTD + 70 +2 + 9 +$DIMALTF + 40 +25.3999999999999986 + 9 +$DIMALTRND + 40 +0.0 + 9 +$DIMALTTD + 70 +2 + 9 +$DIMALTTZ + 70 +0 + 9 +$DIMALTU + 70 +2 + 9 +$DIMALTZ + 70 +0 + 9 +$DIMAPOST + 1 + + 9 +$DIMASZ + 40 +2.5 + 9 +$DIMATFIT + 70 +3 + 9 +$DIMAUNIT + 70 +0 + 9 +$DIMAZIN + 70 +3 + 9 +$DIMBLK + 1 +0 + 9 +$DIMBLK1 + 1 +0 + 9 +$DIMBLK2 + 1 +0 + 9 +$DIMCEN + 40 +0.09 + 9 +$DIMCLRD + 70 +178 + 9 +$DIMCLRE + 70 +178 + 9 +$DIMDEC + 70 +4 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMDLI + 40 +0.38 + 9 +$DIMDSEP + 70 +46 + 9 +$DIMEXE + 40 +1.25 + 9 +$DIMEXO + 40 +0.625 + 9 +$DIMFRAC + 70 +0 + 9 +$DIMGAP + 40 +0.625 + 9 +$DIMJUST + 70 +0 + 9 +$DIMLDRBLK + 1 + + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMLIM + 70 +0 + 9 +$DIMLUNIT + 70 +2 + 9 +$DIMLWD + 70 +-2 + 9 +$DIMLWE + 70 +-2 + 9 +$DIMPOST + 1 + + 9 +$DIMRND + 40 +0.0 + 9 +$DIMSAH + 70 +0 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMSD1 + 70 +0 + 9 +$DIMSD2 + 70 +0 + 9 +$DIMSE1 + 70 +0 + 9 +$DIMSE2 + 70 +0 + 9 +$DIMSOXD + 70 +0 + 9 +$DIMTAD + 70 +0 + 9 +$DIMTDEC + 70 +4 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMTIH + 70 +1 + 9 +$DIMTIX + 70 +0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTOFL + 70 +0 + 9 +$DIMTOH + 70 +1 + 9 +$DIMTOL + 70 +0 + 9 +$DIMTOLJ + 70 +1 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTXSTY + 7 +Standard + 9 +$DIMTXT + 40 +2.5 + 9 +$DIMTZIN + 70 +0 + 9 +$DIMUPT + 70 +0 + 9 +$DIMZIN + 70 +8 + 9 +$DISPSILH + 70 +0 + 9 +$DWGCODEPAGE + 3 +ANSI_1252 + 9 +$ELEVATION + 40 +0.0 + 9 +$EXTMAX + 10 +-100000000000000000000.0 + 20 +-100000000000000000000.0 + 30 +-100000000000000000000.0 + 9 +$EXTMIN + 10 +100000000000000000000.0 + 20 +100000000000000000000.0 + 30 +100000000000000000000.0 + 9 +$FILLETRAD + 40 +0.5 + 9 +$FILLMODE + 70 +1 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$INSUNITS + 70 +0 + 9 +$LIMCHECK + 70 +0 + 9 +$LIMMAX + 10 +12.0 + 20 +9.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LTSCALE + 40 +1.0 + 9 +$LUNITS + 70 +2 + 9 +$LUPREC + 70 +4 + 9 +$MAXACTVP + 70 +64 + 9 +$MEASUREMENT + 70 +1 + 9 +$MIRRTEXT + 70 +1 + 9 +$ORTHOMODE + 70 +0 + 9 +$PDMODE + 70 +0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$PEXTMAX + 10 +-100000000000000000000.0 + 20 +-100000000000000000000.0 + 30 +-100000000000000000000.0 + 9 +$PEXTMIN + 10 +100000000000000000000.0 + 20 +100000000000000000000.0 + 30 +100000000000000000000.0 + 9 +$PINSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMCHECK + 70 +0 + 9 +$PLIMMAX + 10 +12.0 + 20 +9.0 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLINEGEN + 70 +0 + 9 +$PLINEWID + 40 +0.0 + 9 +$PROXYGRAPHICS + 70 +1 + 9 +$PSLTSCALE + 70 +1 + 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 +$QTEXTMODE + 70 +0 + 9 +$REGENMODE + 70 +1 + 9 +$SHADEDGE + 70 +3 + 9 +$SHADEDIF + 70 +70 + 9 +$SKETCHINC + 40 +0.1 + 9 +$SKPOLY + 70 +0 + 9 +$SPLFRAME + 70 +0 + 9 +$SPLINESEGS + 70 +8 + 9 +$SPLINETYPE + 70 +6 + 9 +$SURFTAB1 + 70 +6 + 9 +$SURFTAB2 + 70 +6 + 9 +$SURFTYPE + 70 +6 + 9 +$SURFU + 70 +6 + 9 +$SURFV + 70 +6 + 9 +$TEXTSIZE + 40 +0.2 + 9 +$TEXTSTYLE + 7 +Standard + 9 +$THICKNESS + 40 +0.0 + 9 +$TILEMODE + 70 +1 + 9 +$TRACEWID + 40 +0.05 + 9 +$TREEDEPTH + 70 +3020 + 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 +$UNITMODE + 70 +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 +$USRTIMER + 70 +1 + 9 +$VISRETAIN + 70 +1 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +100 +AcDbSymbolTable + 70 +1 + 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 +286.3055555555554861 + 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 +297.0 + 41 +1.92798353909465 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 +0 + 72 +100 + 73 +1 + 74 +3 + 75 +1 + 76 +1 + 77 +0 + 78 +0 +281 +0 + 65 +1 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 +0 +146 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +5 +100 +AcDbSymbolTable + 70 +41 + 0 +LTYPE + 5 +16 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +Continuous + 70 +0 + 3 +Solid line + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +31 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +PHANTOM + 70 +0 + 3 +Phantom ______ __ __ ______ __ __ ______ + 72 +65 + 73 +6 + 40 +63.5000000000000071 + 49 +31.75 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +6.3499999999999996 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +6.3499999999999996 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +32 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOT + 70 +0 + 3 + + 72 +65 + 73 +4 + 40 +24.0 + 49 +12.0 + 74 +0 + 49 +-5.9500000000000002 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-5.9500000000000002 + 74 +0 + 0 +LTYPE + 5 +33 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO02W100 + 70 +0 + 3 +ISO dash __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 +65 + 73 +2 + 40 +15.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +34 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +PHANTOM2 + 70 +0 + 3 +Phantom (.5x) ___ _ _ ___ _ _ ___ _ _ ___ _ _ + 72 +65 + 73 +6 + 40 +31.7500000000000036 + 49 +15.875 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +3.1749999999999998 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +3.1749999999999998 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +35 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHEDX2 + 70 +0 + 3 + + 72 +65 + 73 +2 + 40 +36.0 + 49 +24.0 + 74 +0 + 49 +-12.0 + 74 +0 + 0 +LTYPE + 5 +36 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO11W100 + 70 +0 + 3 +ISO double-dash dot __ __ . __ __ . __ __ . __ _ + 72 +65 + 73 +6 + 40 +33.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +37 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOTX2 + 70 +0 + 3 + + 72 +65 + 73 +2 + 40 +12.5 + 49 +0.1 + 74 +0 + 49 +-12.4000000000000004 + 74 +0 + 0 +LTYPE + 5 +38 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHED + 70 +0 + 3 + + 72 +65 + 73 +2 + 40 +18.0 + 49 +12.0 + 74 +0 + 49 +-6.0 + 74 +0 + 0 +LTYPE + 5 +39 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO10W100 + 70 +0 + 3 +ISO dash dot __ . __ . __ . __ . __ . __ . __ . + 72 +65 + 73 +4 + 40 +18.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +3A +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDER2 + 70 +0 + 3 + + 72 +65 + 73 +6 + 40 +21.0 + 49 +6.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +6.0 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 0 +LTYPE + 5 +3B +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDER + 70 +0 + 3 + + 72 +65 + 73 +6 + 40 +42.0000000000000071 + 49 +12.0 + 74 +0 + 49 +-6.0 + 74 +0 + 49 +12.0 + 74 +0 + 49 +-5.9500000000000002 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-5.9500000000000002 + 74 +0 + 0 +LTYPE + 5 +15 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByLayer + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +3C +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTER2 + 70 +0 + 3 + + 72 +65 + 73 +4 + 40 +25.0 + 49 +16.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +3.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +3D +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +HIDDENX2 + 70 +0 + 3 +Hidden (2x) ____ ____ ____ ____ ____ ____ ____ + 72 +65 + 73 +2 + 40 +19.0499999999999972 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +3E +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDERX2 + 70 +0 + 3 + + 72 +65 + 73 +6 + 40 +84.0 + 49 +24.0 + 74 +0 + 49 +-12.0 + 74 +0 + 49 +24.0 + 74 +0 + 49 +-11.9499999999999993 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-11.9499999999999993 + 74 +0 + 0 +LTYPE + 5 +3F +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO03W100 + 70 +0 + 3 +ISO dash space __ __ __ __ __ __ + 72 +65 + 73 +2 + 40 +30.0 + 49 +12.0 + 74 +0 + 49 +-18.0 + 74 +0 + 0 +LTYPE + 5 +40 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTER + 70 +0 + 3 + + 72 +65 + 73 +4 + 40 +50.0 + 49 +32.0 + 74 +0 + 49 +-6.0 + 74 +0 + 49 +6.0 + 74 +0 + 49 +-6.0 + 74 +0 + 0 +LTYPE + 5 +41 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO14W100 + 70 +0 + 3 +ISO dash triple-dot __ . . . __ . . . __ . . . _ + 72 +65 + 73 +8 + 40 +24.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +42 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO12W100 + 70 +0 + 3 +ISO dash double-dot __ . . __ . . __ . . __ . . + 72 +65 + 73 +6 + 40 +21.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +43 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOT + 70 +0 + 3 + + 72 +65 + 73 +2 + 40 +6.2999999999999998 + 49 +0.1 + 74 +0 + 49 +-6.2000000000000002 + 74 +0 + 0 +LTYPE + 5 +14 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByBlock + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +44 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +HIDDEN + 70 +0 + 3 +Hidden __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 +65 + 73 +2 + 40 +9.5249999999999986 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +45 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO05W100 + 70 +0 + 3 +ISO long-dash double-dot ____ .. ____ .. ____ . + 72 +65 + 73 +6 + 40 +33.0 + 49 +24.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +46 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHED2 + 70 +0 + 3 + + 72 +65 + 73 +2 + 40 +9.0 + 49 +6.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +47 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTERX2 + 70 +0 + 3 + + 72 +65 + 73 +4 + 40 +100.0 + 49 +64.0 + 74 +0 + 49 +-12.0 + 74 +0 + 49 +12.0 + 74 +0 + 49 +-12.0 + 74 +0 + 0 +LTYPE + 5 +48 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOT2 + 70 +0 + 3 + + 72 +65 + 73 +2 + 40 +3.2000000000000002 + 49 +0.1 + 74 +0 + 49 +-3.1000000000000001 + 74 +0 + 0 +LTYPE + 5 +49 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO04W100 + 70 +0 + 3 +ISO long-dash dot ____ . ____ . ____ . ____ . _ + 72 +65 + 73 +4 + 40 +30.0 + 49 +24.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +4A +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO07W100 + 70 +0 + 3 +ISO dot . . . . . . . . . . . . . . . . . . . . + 72 +65 + 73 +2 + 40 +3.0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +4B +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDE2 + 70 +0 + 3 + + 72 +65 + 73 +6 + 40 +15.0000000000000018 + 49 +6.0 + 74 +0 + 49 +-2.8999999999999999 + 74 +0 + 49 +0.15 + 74 +0 + 49 +-2.8999999999999999 + 74 +0 + 49 +0.15 + 74 +0 + 49 +-2.8999999999999999 + 74 +0 + 0 +LTYPE + 5 +4C +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +HIDDEN2 + 70 +0 + 3 +Hidden (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 +65 + 73 +2 + 40 +4.7624999999999993 + 49 +3.1749999999999998 + 74 +0 + 49 +-1.5874999999999999 + 74 +0 + 0 +LTYPE + 5 +4D +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO08W100 + 70 +0 + 3 +ISO long-dash short-dash ____ __ ____ __ ____ _ + 72 +65 + 73 +4 + 40 +36.0 + 49 +24.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +6.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +4E +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO09W100 + 70 +0 + 3 +ISO long-dash double-short-dash ____ __ __ ____ + 72 +65 + 73 +6 + 40 +45.0 + 49 +24.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +6.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +6.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +4F +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO15W100 + 70 +0 + 3 +ISO double-dash triple-dot __ __ . . . __ __ . . + 72 +65 + 73 +10 + 40 +39.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +50 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO13W100 + 70 +0 + 3 +ISO double-dash double-dot __ __ . . __ __ . . _ + 72 +65 + 73 +8 + 40 +36.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +51 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOTX2 + 70 +0 + 3 + + 72 +65 + 73 +4 + 40 +48.0 + 49 +24.0 + 74 +0 + 49 +-11.9499999999999993 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-11.9499999999999993 + 74 +0 + 0 +LTYPE + 5 +52 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOT2 + 70 +0 + 3 + + 72 +65 + 73 +4 + 40 +12.0 + 49 +6.0 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 0 +LTYPE + 5 +53 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +PHANTOMX2 + 70 +0 + 3 +Phantom (2x) ____________ ____ ____ _ + 72 +65 + 73 +6 + 40 +127.0000000000000142 + 49 +63.5 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +12.6999999999999993 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +12.6999999999999993 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +54 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO06W100 + 70 +0 + 3 +ISO long-dash triple-dot ____ ... ____ ... ____ + 72 +65 + 73 +8 + 40 +36.0 + 49 +24.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +55 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDEX2 + 70 +0 + 3 + + 72 +65 + 73 +6 + 40 +59.9999999999999929 + 49 +24.0 + 74 +0 + 49 +-11.9000000000000004 + 74 +0 + 49 +0.15 + 74 +0 + 49 +-11.9000000000000004 + 74 +0 + 49 +0.15 + 74 +0 + 49 +-11.9000000000000004 + 74 +0 + 0 +LTYPE + 5 +56 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDE + 70 +0 + 3 + + 72 +65 + 73 +6 + 40 +29.9999999999999929 + 49 +12.0 + 74 +0 + 49 +-5.9000000000000004 + 74 +0 + 49 +0.15 + 74 +0 + 49 +-5.9000000000000004 + 74 +0 + 49 +0.15 + 74 +0 + 49 +-5.9000000000000004 + 74 +0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +2 +100 +AcDbSymbolTable + 70 +4 + 0 +LAYER + 5 +57 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +entities + 70 +0 + 62 +7 +420 +16777215 + 6 +Continuous +370 +13 +390 +F + 0 +LAYER + 5 +58 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +boxes + 70 +0 + 62 +7 +420 +16777215 + 6 +Continuous +370 +-3 +390 +F + 0 +LAYER + 5 +59 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +Defpoints + 70 +0 + 62 +7 +420 +16777215 + 6 +Continuous +290 +0 +370 +-3 +390 +F + 0 +LAYER + 5 +10 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 +0 + 62 +7 +420 +16777215 + 6 +Continuous +370 +9 +390 +F + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +3 +100 +AcDbSymbolTable + 70 +4 + 0 +STYLE + 5 +5A +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +Standard + 70 +0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +2.5 + 3 + + 4 + +1001 +ACAD +1000 +txt +1071 +0 + 0 +STYLE + 5 +5B +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +textstyle0 + 70 +0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +10.0 + 3 + + 4 + +1001 +ACAD +1000 +Standard +1071 +0 + 0 +STYLE + 5 +5C +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +textstyle1 + 70 +0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +10.0 + 3 + + 4 + +1001 +ACAD +1000 +Standard +1071 +0 + 0 +STYLE + 5 +5D +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +textstyle2 + 70 +0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +5.0 + 3 + + 4 + +1001 +ACAD +1000 +Arial +1071 +0 + 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 +12 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 +0 + 0 +APPID + 5 +5E +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +QCAD + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +A +100 +AcDbSymbolTable + 70 +1 +100 +AcDbDimStyleTable + 71 +0 + 0 +DIMSTYLE +105 +27 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +Standard + 41 +2.5 + 42 +0.625 + 43 +3.75 + 44 +1.25 + 70 +0 + 73 +1 + 74 +0 + 77 +0 + 78 +8 +140 +2.5 +141 +2.5 +143 +0.03937007874016 +147 +0.625 +171 +3 +172 +1 +271 +2 +272 +2 +274 +3 +278 +44 +283 +0 +284 +8 +340 +5A + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +1 +100 +AcDbSymbolTable + 70 +1 + 0 +BLOCK_RECORD + 5 +1F +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Model_Space +340 +22 + 0 +BLOCK_RECORD + 5 +1B +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space +340 +1E + 0 +BLOCK_RECORD + 5 +23 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space0 +340 +26 + 0 +BLOCK_RECORD + 5 +5F +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +circle +340 +0 + 0 +BLOCK_RECORD + 5 +60 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +dim_diametric_arc +340 +0 + 0 +BLOCK_RECORD + 5 +61 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +dim_radial_arc +340 +0 + 0 +BLOCK_RECORD + 5 +62 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +block_insert +340 +0 + 0 +BLOCK_RECORD + 5 +63 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +dim_ordinate +340 +0 + 0 +BLOCK_RECORD + 5 +64 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +spline_fp_closed +340 +0 + 0 +BLOCK_RECORD + 5 +65 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +arc +340 +0 + 0 +BLOCK_RECORD + 5 +66 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +dim_horizontal +340 +0 + 0 +BLOCK_RECORD + 5 +67 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +ellispe_arc +340 +0 + 0 +BLOCK_RECORD + 5 +68 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +hatch_pattern +340 +0 + 0 +BLOCK_RECORD + 5 +69 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +block02 +340 +0 + 0 +BLOCK_RECORD + 5 +6A +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +spline_cp_2deg_closed +340 +0 + 0 +BLOCK_RECORD + 5 +6B +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +dim_leader +340 +0 + 0 +BLOCK_RECORD + 5 +6C +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +ellipse +340 +0 + 0 +BLOCK_RECORD + 5 +6D +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +spline_fp +340 +0 + 0 +BLOCK_RECORD + 5 +6E +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +dim_rotated +340 +0 + 0 +BLOCK_RECORD + 5 +6F +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +spline_cp_3deg +340 +0 + 0 +BLOCK_RECORD + 5 +70 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +text +340 +0 + 0 +BLOCK_RECORD + 5 +71 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +spline_cp_2deg +340 +0 + 0 +BLOCK_RECORD + 5 +72 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +line +340 +0 + 0 +BLOCK_RECORD + 5 +73 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +polyline +340 +0 + 0 +BLOCK_RECORD + 5 +74 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +dim_diametric_circle +340 +0 + 0 +BLOCK_RECORD + 5 +75 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +dim_radial_circle +340 +0 + 0 +BLOCK_RECORD + 5 +76 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +dim_angular_line +340 +0 + 0 +BLOCK_RECORD + 5 +77 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +spline_cp_3deg_closed +340 +0 + 0 +BLOCK_RECORD + 5 +78 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +points +340 +0 + 0 +BLOCK_RECORD + 5 +79 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +block01 +340 +0 + 0 +BLOCK_RECORD + 5 +7A +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +dim_aligned +340 +0 + 0 +BLOCK_RECORD + 5 +7B +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +hatch_solid +340 +0 + 0 +BLOCK_RECORD + 5 +7C +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +dim_vertical +340 +0 + 0 +BLOCK_RECORD + 5 +7D +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +dim_angular_arc +340 +0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +20 +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 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +1C +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 +1D +100 +AcDbEntity + 67 +1 + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +24 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space0 + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space0 + 1 + + 0 +ENDBLK + 5 +25 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +7E +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +circle + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +circle + 1 + + 0 +CIRCLE + 5 +7F +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +50.0 + 20 +50.0 + 30 +0.0 + 40 +40.0 + 0 +ENDBLK + 5 +80 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +81 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +dim_diametric_arc + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +dim_diametric_arc + 1 + + 0 +ARC + 5 +82 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +50.0 + 20 +50.0 + 30 +0.0 + 40 +40.0 +100 +AcDbArc + 50 +0.0 + 51 +345.9637565320734893 + 0 +ARC + 5 +83 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +50.0 + 20 +50.0 + 30 +0.0 + 40 +30.0 +100 +AcDbArc + 50 +0.0 + 51 +270.0 + 0 +ARC + 5 +84 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +50.0 + 20 +50.0 + 30 +0.0 + 40 +20.0 +100 +AcDbArc + 50 +0.0 + 51 +180.0 + 0 +ARC + 5 +85 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +50.0 + 20 +50.0 + 30 +0.0 + 40 +10.0 +100 +AcDbArc + 50 +0.0 + 51 +90.0 + 0 +DIMENSION + 5 +86 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +88.8057000058132644 + 20 +40.2985749985466413 + 30 +0.0 + 11 +80.0 + 21 +40.0000000000000071 + 31 +0.0 + 70 +131 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 + + 3 +Standard +100 +AcDbDiametricDimension + 15 +11.1942999941867303 + 25 +59.7014250014533729 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +279 +1070 +2 +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +87 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +36.2408016867936027 + 20 +23.3413342085944215 + 30 +0.0 + 11 +37.1658127719297795 + 21 +32.051729684210521 + 31 +0.0 + 70 +131 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\U+2300<> + 3 +Standard +100 +AcDbDiametricDimension + 15 +63.7591983132064115 + 25 +76.6586657914055678 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +279 +1070 +2 +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +88 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +33.7599153114531703 + 20 +61.6730308535884078 + 30 +0.0 + 11 +40.0 + 21 +60.0 + 31 +0.0 + 70 +131 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +text + 3 +Standard +100 +AcDbDiametricDimension + 15 +66.2400846885468297 + 25 +38.3269691464116207 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +279 +1070 +2 +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +89 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +59.3966924725874321 + 20 +53.4208435473752488 + 30 +0.0 + 11 +36.0037075087718819 + 21 +48.0306770526315603 + 31 +0.0 + 70 +131 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\A1;<>\S0.01^ 0.02; + 3 +Standard +100 +AcDbDiametricDimension + 15 +40.6033075274125679 + 25 +46.5791564526247726 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +279 +1070 +2 +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +ENDBLK + 5 +8A +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +8B +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +dim_radial_arc + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +dim_radial_arc + 1 + + 0 +ARC + 5 +8C +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +50.0 + 20 +50.0 + 30 +0.0 + 40 +40.0 +100 +AcDbArc + 50 +90.0 + 51 +180.0 + 0 +ARC + 5 +8D +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +90.0 + 20 +90.0 + 30 +0.0 + 40 +40.0 +100 +AcDbArc + 50 +180.0 + 51 +270.0 + 0 +ARC + 5 +8E +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +10.0 + 20 +10.0 + 30 +0.0 + 40 +40.0000000000000071 +100 +AcDbArc + 50 +0.0 + 51 +90.0 + 0 +ARC + 5 +8F +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +50.0 + 20 +50.0 + 30 +0.0 + 40 +39.9999999999999929 +100 +AcDbArc + 50 +270.0 + 51 +0.0 + 0 +DIMENSION + 5 +90 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +50.0 + 20 +50.0000000000000071 + 30 +0.0 + 11 +35.8578643762690561 + 21 +64.142135623730951 + 31 +0.0 + 70 +4 + 71 +8 + 72 +1 + 74 +0 + 41 +1.0 + 42 +0.0 + 1 + + 3 +Standard +100 +AcDbRadialDimension + 15 +21.7157287525381086 + 25 +78.284271247461902 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +91 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +90.0 + 20 +90.0000000000000142 + 30 +0.0 + 11 +71.0263340389897166 + 21 +83.6754446796632436 + 31 +0.0 + 70 +4 + 71 +8 + 72 +1 + 74 +0 + 41 +1.0 + 42 +0.0 + 1 +\U+2300<> + 3 +Standard +100 +AcDbRadialDimension + 15 +52.0526680779794475 + 25 +77.350889359326473 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +92 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +50.0 + 20 +50.0000000000000071 + 30 +0.0 + 11 +56.8588526647918684 + 21 +31.2128730210636931 + 31 +0.0 + 70 +4 + 71 +8 + 72 +1 + 74 +0 + 41 +1.0 + 42 +0.0 + 1 +text + 3 +Standard +100 +AcDbRadialDimension + 15 +63.717705329583751 + 25 +12.4257460421273809 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +93 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +10.0 + 20 +10.0 + 30 +0.0 + 11 +18.6074235782577198 + 21 +28.053040169025639 + 31 +0.0 + 70 +4 + 71 +8 + 72 +1 + 74 +0 + 41 +1.0 + 42 +0.0 + 1 +\A1;<>\S0.01^ 0.02; + 3 +Standard +100 +AcDbRadialDimension + 15 +27.2148471565154395 + 25 +46.106080338051278 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +ENDBLK + 5 +94 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +95 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +block_insert + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +block_insert + 1 + + 0 +INSERT + 5 +96 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbBlockReference + 2 +block01 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +INSERT + 5 +97 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbBlockReference + 2 +block02 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +ENDBLK + 5 +98 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +99 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +dim_ordinate + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +dim_ordinate + 1 + + 0 +DIMENSION + 5 +9A +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +31.874989817232823 + 21 +20.0 + 31 +0.0 + 70 +6 + 71 +8 + 72 +1 + 41 +1.0 + 1 + + 3 +Standard +100 +AcDbOrdinateDimension + 13 +10.0 + 23 +10.0 + 33 +0.0 + 14 +30.0 + 24 +20.0 + 34 +0.0 + 0 +DIMENSION + 5 +9B +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +53.4027680389901747 + 21 +39.9999999999999929 + 31 +0.0 + 70 +6 + 71 +8 + 72 +1 + 41 +1.0 + 1 +\U+2300<> + 3 +Standard +100 +AcDbOrdinateDimension + 13 +10.0 + 23 +30.0 + 33 +0.0 + 14 +50.0 + 24 +39.9999999999999929 + 34 +0.0 + 0 +DIMENSION + 5 +9C +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +73.8194444444444429 + 21 +60.0 + 31 +0.0 + 70 +6 + 71 +8 + 72 +1 + 41 +1.0 + 1 +text + 3 +Standard +100 +AcDbOrdinateDimension + 13 +9.9999999999999982 + 23 +50.0 + 33 +0.0 + 14 +70.0 + 24 +60.0 + 34 +0.0 + 0 +DIMENSION + 5 +9D +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +83.7360751940457106 + 21 +80.0000000000000142 + 31 +0.0 + 70 +6 + 71 +8 + 72 +1 + 41 +1.0 + 1 +\A1;<>\S0.01^ 0.02; + 3 +Standard +100 +AcDbOrdinateDimension + 13 +9.9999999999999964 + 23 +70.0 + 33 +0.0 + 14 +80.0 + 24 +80.0000000000000142 + 34 +0.0 + 0 +ENDBLK + 5 +9E +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +9F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +spline_fp_closed + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +spline_fp_closed + 1 + + 0 +SPLINE + 5 +A0 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbSpline + 70 +11 + 71 +3 + 72 +0 + 73 +0 + 74 +6 + 11 +20.0 + 21 +20.0 + 31 +0.0 + 11 +20.0 + 21 +80.0 + 31 +0.0 + 11 +80.0 + 21 +80.0 + 31 +0.0 + 11 +60.0 + 21 +50.0 + 31 +0.0 + 11 +90.0 + 21 +20.0 + 31 +0.0 + 11 +20.0 + 21 +20.0 + 31 +0.0 + 0 +ENDBLK + 5 +A1 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +A2 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +arc + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +arc + 1 + + 0 +ARC + 5 +A3 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +90.0 + 20 +10.0 + 30 +0.0 + 40 +80.0 +100 +AcDbArc + 50 +90.0 + 51 +180.0 + 0 +ENDBLK + 5 +A4 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +A5 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +dim_horizontal + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +dim_horizontal + 1 + + 0 +DIMENSION + 5 +A6 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +90.0 + 20 +90.0000000000000142 + 30 +0.0 + 11 +50.0000000000000071 + 21 +90.0000000000000142 + 31 +0.0 + 70 +0 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 + + 3 +Standard +100 +AcDbAlignedDimension + 13 +10.0000000000000107 + 23 +80.0 + 33 +0.0 + 14 +90.0 + 24 +79.9999999999999858 + 34 +0.0 + 50 +0.0 +100 +AcDbRotatedDimension +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +A7 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +80.0 + 20 +70.0 + 30 +0.0 + 11 +45.0 + 21 +70.0 + 31 +0.0 + 70 +0 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\U+2300<> + 3 +Standard +100 +AcDbAlignedDimension + 13 +9.9999999999999947 + 23 +60.0 + 33 +0.0 + 14 +80.0 + 24 +59.9999999999999929 + 34 +0.0 + 50 +0.0 +100 +AcDbRotatedDimension +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +A8 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +70.0 + 20 +50.0000000000000071 + 30 +0.0 + 11 +40.0 + 21 +50.0000000000000071 + 31 +0.0 + 70 +0 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +text + 3 +Standard +100 +AcDbAlignedDimension + 13 +9.9999999999999964 + 23 +40.0 + 33 +0.0 + 14 +70.0 + 24 +39.9999999999999787 + 34 +0.0 + 50 +0.0 +100 +AcDbRotatedDimension +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +A9 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +60.0 + 20 +29.9999999999999893 + 30 +0.0 + 11 +35.0 + 21 +29.9999999999999893 + 31 +0.0 + 70 +0 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\A1;<>\S0.01^ 0.02; + 3 +Standard +100 +AcDbAlignedDimension + 13 +10.0 + 23 +20.0 + 33 +0.0 + 14 +60.0 + 24 +20.0000000000000107 + 34 +0.0 + 50 +0.0 +100 +AcDbRotatedDimension +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +ENDBLK + 5 +AA +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +AB +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +ellispe_arc + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +ellispe_arc + 1 + + 0 +ELLIPSE + 5 +AC +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbEllipse + 10 +50.0 + 20 +50.0 + 30 +0.0 + 11 +-40.0000000000000071 + 21 +-40.0000000000000071 + 31 +0.0 + 40 +0.25 + 41 +1.815774989921761 + 42 +7.038393146846551 + 0 +ENDBLK + 5 +AD +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +AE +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +hatch_pattern + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +hatch_pattern + 1 + + 0 +LWPOLYLINE + 5 +AF +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPolyline + 90 +18 + 70 +1 + 10 +20.0 + 20 +90.0 + 10 +10.0 + 20 +80.0 + 10 +10.0 + 20 +30.0 + 42 +0.9999999999999999 + 10 +50.0 + 20 +30.0 + 10 +50.0 + 20 +50.0 + 10 +60.0 + 20 +50.0 + 10 +60.0 + 20 +20.0 + 10 +70.0 + 20 +10.0 + 10 +90.0 + 20 +10.0 + 10 +90.0 + 20 +70.0 + 10 +80.0 + 20 +70.0 + 10 +80.0 + 20 +80.0 + 10 +90.0 + 20 +80.0 + 10 +90.0 + 20 +90.0 + 10 +50.0 + 20 +90.0 + 10 +50.0 + 20 +80.0 + 10 +40.0 + 20 +80.0 + 10 +40.0 + 20 +90.0 + 0 +HATCH + 5 +B0 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +STARS + 70 +0 + 71 +0 + 91 +1 + 92 +1 + 93 +18 + 72 +1 + 10 +20.0 + 20 +90.0 + 11 +10.0 + 21 +80.0 + 72 +1 + 10 +10.0 + 20 +80.0 + 11 +10.0 + 21 +30.0 + 72 +2 + 10 +30.0 + 20 +30.0 + 40 +20.0 + 50 +180.0 + 51 +0.0 + 73 +1 + 72 +1 + 10 +50.0 + 20 +30.0 + 11 +50.0 + 21 +50.0 + 72 +1 + 10 +50.0 + 20 +50.0 + 11 +60.0 + 21 +50.0 + 72 +1 + 10 +60.0 + 20 +50.0 + 11 +60.0 + 21 +20.0 + 72 +1 + 10 +60.0 + 20 +20.0 + 11 +70.0 + 21 +10.0 + 72 +1 + 10 +70.0 + 20 +10.0 + 11 +90.0 + 21 +10.0 + 72 +1 + 10 +90.0 + 20 +10.0 + 11 +90.0 + 21 +70.0 + 72 +1 + 10 +90.0 + 20 +70.0 + 11 +80.0 + 21 +70.0 + 72 +1 + 10 +80.0 + 20 +70.0 + 11 +80.0 + 21 +80.0 + 72 +1 + 10 +80.0 + 20 +80.0 + 11 +90.0 + 21 +80.0 + 72 +1 + 10 +90.0 + 20 +80.0 + 11 +90.0 + 21 +90.0 + 72 +1 + 10 +90.0 + 20 +90.0 + 11 +50.0 + 21 +90.0 + 72 +1 + 10 +50.0 + 20 +90.0 + 11 +50.0 + 21 +80.0 + 72 +1 + 10 +50.0 + 20 +80.0 + 11 +40.0 + 21 +80.0 + 72 +1 + 10 +40.0 + 20 +80.0 + 11 +40.0 + 21 +90.0 + 72 +1 + 10 +40.0 + 20 +90.0 + 11 +20.0 + 21 +90.0 + 97 +0 + 75 +0 + 76 +1 + 52 +0.0 + 41 +4.0 + 77 +0 + 78 +1 + 53 +45.0 + 43 +0.0 + 44 +0.0 + 45 +-0.0883883476483184 + 46 +0.0883883476483185 + 79 +0 + 98 +0 +1001 +ACAD +1010 +0.0 +1020 +0.0 +1030 +0 + 0 +ENDBLK + 5 +B1 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +B2 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +block02 + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +block02 + 1 + + 0 +LINE + 5 +B3 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLine + 10 +30.0 + 20 +30.0 + 30 +0.0 + 11 +90.0 + 21 +30.0 + 31 +0.0 + 0 +LINE + 5 +B4 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLine + 10 +90.0 + 20 +30.0 + 30 +0.0 + 11 +90.0 + 21 +10.0 + 31 +0.0 + 0 +LINE + 5 +B5 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLine + 10 +90.0 + 20 +10.0 + 30 +0.0 + 11 +30.0 + 21 +10.0 + 31 +0.0 + 0 +MTEXT + 5 +B6 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbMText + 10 +35.7171200000000226 + 20 +24.9036800000000191 + 30 +0.0 + 40 +10.0 + 41 +100.0 + 71 +1 + 72 +1 + 1 +block02 + 7 +textstyle1 + 50 +0.0 + 73 +1 + 44 +1.0 + 0 +ELLIPSE + 5 +B7 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbEllipse + 10 +30.0 + 20 +20.0 + 30 +0.0 + 11 +20.0 + 21 +0.0 + 31 +0.0 + 40 +0.5 + 41 +1.570796326794897 + 42 +4.7123889803846897 + 0 +ENDBLK + 5 +B8 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +B9 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +spline_cp_2deg_closed + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +spline_cp_2deg_closed + 1 + + 0 +SPLINE + 5 +BA +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbSpline + 70 +8 + 71 +2 + 72 +10 + 73 +7 + 74 +0 + 40 +-1.0 + 40 +-1.0 + 40 +0.0 + 40 +1.0 + 40 +2.0 + 40 +3.0 + 40 +4.0 + 40 +5.0 + 40 +6.0 + 40 +6.0 + 10 +10.0 + 20 +10.0 + 30 +0.0 + 10 +10.0 + 20 +90.0 + 30 +0.0 + 10 +90.0 + 20 +90.0 + 30 +0.0 + 10 +50.0 + 20 +60.0 + 30 +0.0 + 10 +90.0 + 20 +10.0 + 30 +0.0 + 10 +10.0 + 20 +10.0 + 30 +0.0 + 10 +10.0 + 20 +90.0 + 30 +0.0 + 0 +ENDBLK + 5 +BB +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +BC +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +dim_leader + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +dim_leader + 1 + + 0 +LEADER + 5 +BD +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLeader + 3 +Standard + 71 +0 + 72 +0 + 73 +3 + 74 +0 + 75 +0 + 40 +1.0 + 41 +10.0 + 76 +3 + 10 +10.0 + 20 +70.0 + 10 +40.0 + 20 +90.0 + 10 +90.0 + 20 +90.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +40 +1040 +1.0 +1002 +} + 0 +LEADER + 5 +BE +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLeader + 3 +Standard + 71 +0 + 72 +0 + 73 +3 + 74 +0 + 75 +0 + 40 +1.0 + 41 +10.0 + 76 +3 + 10 +10.0 + 20 +50.0 + 10 +40.0 + 20 +70.0 + 10 +70.0 + 20 +70.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +40 +1040 +1.0 +1002 +} + 0 +LEADER + 5 +BF +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLeader + 3 +Standard + 71 +0 + 72 +0 + 73 +3 + 74 +0 + 75 +0 + 40 +1.0 + 41 +10.0 + 76 +4 + 10 +90.0 + 20 +10.0 + 10 +80.0 + 20 +30.0 + 10 +50.0 + 20 +40.0 + 10 +20.0 + 20 +40.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +40 +1040 +1.0 +1002 +} + 0 +ENDBLK + 5 +C0 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +C1 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +ellipse + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +ellipse + 1 + + 0 +ELLIPSE + 5 +C2 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbEllipse + 10 +50.0 + 20 +50.0 + 30 +0.0 + 11 +40.0 + 21 +30.0 + 31 +0.0 + 40 +0.28 + 41 +0.0 + 42 +6.2831853071795862 + 0 +ENDBLK + 5 +C3 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +C4 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +spline_fp + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +spline_fp + 1 + + 0 +SPLINE + 5 +C5 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +0 + 73 +0 + 74 +4 + 11 +20.0 + 21 +10.0 + 31 +0.0 + 11 +20.0 + 21 +80.0 + 31 +0.0 + 11 +80.0 + 21 +80.0 + 31 +0.0 + 11 +80.0 + 21 +10.0 + 31 +0.0 + 0 +ENDBLK + 5 +C6 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +C7 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +dim_rotated + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +dim_rotated + 1 + + 0 +DIMENSION + 5 +C8 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +29.1537958399999901 + 20 +90.8462041600000134 + 30 +0.0 + 11 +19.1537958399999866 + 21 +80.8462041599998997 + 31 +0.0 + 70 +0 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 + + 3 +Standard +100 +AcDbAlignedDimension + 13 +20.0 + 23 +60.0 + 33 +0.0 + 14 +40.0000000000000071 + 24 +80.0 + 34 +0.0 + 50 +45.0 +100 +AcDbRotatedDimension +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +C9 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +75.9151834849652118 + 20 +87.0751097436367019 + 30 +0.0 + 11 +64.0850564660430138 + 21 +80.2449827247144611 + 31 +0.0 + 70 +0 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\U+2300<> + 3 +Standard +100 +AcDbAlignedDimension + 13 +60.0 + 23 +60.0000000000000071 + 33 +0.0 + 14 +80.0 + 24 +80.0000000000000142 + 34 +0.0 + 50 +30.0 +100 +AcDbRotatedDimension +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +CA +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +9.9999999999999982 + 20 +50.0 + 30 +0.0 + 11 +10.0 + 21 +30.0 + 31 +0.0 + 70 +0 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +text + 3 +Standard +100 +AcDbAlignedDimension + 13 +30.0 + 23 +10.0 + 33 +0.0 + 14 +30.0 + 24 +50.0 + 34 +0.0 + 50 +90.0 +100 +AcDbRotatedDimension +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +CB +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +74.7489270808782464 + 20 +51.0189322670162397 + 30 +0.0 + 11 +82.1803568779808984 + 21 +34.327667660036262 + 31 +0.0 + 70 +0 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\A1;<>\S0.01^ 0.02; + 3 +Standard +100 +AcDbAlignedDimension + 13 +73.1144319999999652 + 23 +10.2913075200000108 + 33 +0.0 + 14 +50.0 + 24 +39.9999999999999929 + 34 +0.0 + 50 +-66.0 +100 +AcDbRotatedDimension +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +ENDBLK + 5 +CC +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +CD +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +spline_cp_3deg + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +spline_cp_3deg + 1 + + 0 +SPLINE + 5 +CE +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +8 + 73 +4 + 74 +0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +1.0 + 40 +1.0 + 40 +1.0 + 10 +10.0 + 20 +10.0 + 30 +0.0 + 10 +10.0 + 20 +90.0 + 30 +0.0 + 10 +90.0 + 20 +90.0 + 30 +0.0 + 10 +90.0 + 20 +10.0 + 30 +0.0 + 0 +ENDBLK + 5 +CF +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +D0 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +text + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +text + 1 + + 0 +MTEXT + 5 +D1 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbMText + 10 +10.0000000000000107 + 20 +90.0 + 30 +0.0 + 40 +5.0 + 41 +0.0 + 71 +1 + 72 +1 + 3 +text, Arial, h5\P\fArial|b1|i0|c0|p0;text, Arial, h5, bold\P\fArial|b0|i1|c0|p0;text, Arial, h5, italic\P\fArial|b0|i0|c0|p0;\C1;text, Arial, h5, red\P\c0;special characters:\P%%d %%p %%c \U+2248 \U+00d7 \U+00f7 \U+0394 \U+03c0 \U+2261 \U+2260 \U+212 + 1 +6 \U+03a9 \U+00b2\U+00b3\P\fTimes New Roman|b0|i0|c0|p0;\C256;text, Times New Roman, h5\fArial|b0|i0|c0|p0;\c0;\P\H7.85714;text, Arial, h8 + 7 +textstyle2 + 50 +0.0 + 73 +1 + 44 +1.0 + 0 +ENDBLK + 5 +D2 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +D3 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +spline_cp_2deg + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +spline_cp_2deg + 1 + + 0 +SPLINE + 5 +D4 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbSpline + 70 +8 + 71 +2 + 72 +7 + 73 +4 + 74 +0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +2.0 + 40 +2.0 + 40 +2.0 + 10 +10.0 + 20 +10.0 + 30 +0.0 + 10 +10.0 + 20 +90.0 + 30 +0.0 + 10 +90.0 + 20 +90.0 + 30 +0.0 + 10 +90.0 + 20 +10.0 + 30 +0.0 + 0 +ENDBLK + 5 +D5 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +D6 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +line + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +line + 1 + + 0 +LINE + 5 +D7 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLine + 10 +10.0 + 20 +10.0 + 30 +0.0 + 11 +90.0 + 21 +90.0 + 31 +0.0 + 0 +ENDBLK + 5 +D8 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +D9 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +polyline + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +polyline + 1 + + 0 +LWPOLYLINE + 5 +DA +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPolyline + 90 +6 + 70 +0 + 10 +10.0 + 20 +10.0 + 10 +10.0 + 20 +90.0 + 10 +90.0 + 20 +90.0 + 10 +90.0 + 20 +10.0 + 10 +60.0 + 20 +50.0 + 42 +1.9534367339647389 + 10 +50.3245553203367493 + 20 +19.0263340389897309 + 0 +ENDBLK + 5 +DB +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +DC +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +dim_diametric_circle + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +dim_diametric_circle + 1 + + 0 +DIMENSION + 5 +DD +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +45.0000000000000071 + 20 +70.0 + 30 +0.0 + 11 +30.0000000000000036 + 21 +70.0 + 31 +0.0 + 70 +3 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 + + 3 +Standard +100 +AcDbDiametricDimension + 15 +15.0 + 25 +70.0 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +DE +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +80.6066017177982133 + 20 +80.6066017177982275 + 30 +0.0 + 11 +70.0 + 21 +70.0 + 31 +0.0 + 70 +3 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\U+2300<> + 3 +Standard +100 +AcDbDiametricDimension + 15 +59.3933982822017867 + 25 +59.3933982822017867 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +DF +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +30.0 + 20 +15.0 + 30 +0.0 + 11 +30.0 + 21 +30.0 + 31 +0.0 + 70 +3 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +text + 3 +Standard +100 +AcDbDiametricDimension + 15 +30.0 + 25 +45.0 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +E0 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +59.3933982822017867 + 20 +40.606601717798199 + 30 +0.0 + 11 +70.0 + 21 +29.9999999999999751 + 31 +0.0 + 70 +3 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\A1;<>\S0.01^ 0.02; + 3 +Standard +100 +AcDbDiametricDimension + 15 +80.6066017177982133 + 25 +19.3933982822017512 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +CIRCLE + 5 +E1 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +30.0 + 20 +70.0 + 30 +0.0 + 40 +15.0 + 0 +CIRCLE + 5 +E2 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +70.0 + 20 +70.0 + 30 +0.0 + 40 +15.0 + 0 +CIRCLE + 5 +E3 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +30.0 + 20 +30.0 + 30 +0.0 + 40 +15.0 + 0 +CIRCLE + 5 +E4 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +70.0 + 20 +30.0 + 30 +0.0 + 40 +15.0 + 0 +ENDBLK + 5 +E5 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +E6 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +dim_radial_circle + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +dim_radial_circle + 1 + + 0 +CIRCLE + 5 +E7 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +30.0 + 20 +70.0 + 30 +0.0 + 40 +15.0 + 0 +CIRCLE + 5 +E8 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +70.0 + 20 +70.0 + 30 +0.0 + 40 +15.0 + 0 +CIRCLE + 5 +E9 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +30.0 + 20 +30.0 + 30 +0.0 + 40 +15.0 + 0 +CIRCLE + 5 +EA +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +70.0 + 20 +30.0 + 30 +0.0 + 40 +15.0 + 0 +DIMENSION + 5 +EB +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +30.0 + 20 +70.0 + 30 +0.0 + 11 +37.5 + 21 +70.0 + 31 +0.0 + 70 +4 + 71 +8 + 72 +1 + 74 +0 + 41 +1.0 + 42 +0.0 + 1 + + 3 +Standard +100 +AcDbRadialDimension + 15 +45.0000000000000071 + 25 +70.0 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +EC +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +70.0 + 20 +70.0000000000000142 + 30 +0.0 + 11 +76.3887622694415143 + 21 +73.9285769261350225 + 31 +0.0 + 70 +4 + 71 +8 + 72 +1 + 74 +0 + 41 +1.0 + 42 +0.0 + 1 +\U+2300<> + 3 +Standard +100 +AcDbRadialDimension + 15 +82.7775245388830427 + 25 +77.8571538522700308 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +ED +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +30.0 + 20 +30.0 + 30 +0.0 + 11 +23.6683370254654051 + 21 +25.9800442817230319 + 31 +0.0 + 70 +4 + 71 +8 + 72 +1 + 74 +0 + 41 +1.0 + 42 +0.0 + 1 +text + 3 +Standard +100 +AcDbRadialDimension + 15 +17.3366740509308102 + 25 +21.9600885634460603 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +EE +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +70.0 + 20 +30.0000000000000213 + 30 +0.0 + 11 +70.0 + 21 +37.5000000000000142 + 31 +0.0 + 70 +4 + 71 +8 + 72 +1 + 74 +0 + 41 +1.0 + 42 +0.0 + 1 +\A1;<>\S0.01^ 0.02; + 3 +Standard +100 +AcDbRadialDimension + 15 +70.0 + 25 +45.0000000000000071 + 35 +0.0 + 40 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +ENDBLK + 5 +EF +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +F0 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +dim_angular_line + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +dim_angular_line + 1 + + 0 +DIMENSION + 5 +F1 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +90.0 + 20 +39.9999999999999929 + 30 +0.0 + 11 +31.3078612085926551 + 21 +30.1210233931595752 + 31 +0.0 + 70 +2 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +text + 3 +Standard +100 +AcDb2LineAngularDimension + 13 +10.0000000000000107 + 23 +80.0 + 33 +0.0 + 14 +20.0 + 24 +10.0 + 34 +0.0 + 15 +20.0 + 25 +10.0 + 35 +0.0 + 16 +35.3913800005498018 + 26 +27.1996723567498506 + 36 +0.0 + 0 +DIMENSION + 5 +F2 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +89.9999999999999858 + 20 +71.3133005288857902 + 30 +0.0 + 11 +75.4932433384754091 + 21 +49.565699607368181 + 31 +0.0 + 70 +2 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\A1;<>\S0.01^ 0.02; + 3 +Standard +100 +AcDb2LineAngularDimension + 13 +42.3635334754523285 + 23 +19.5843714894795689 + 33 +0.0 + 14 +90.5744656437612861 + 24 +40.2461995616119879 + 34 +0.0 + 15 +89.9999999999999858 + 25 +39.3750000000000071 + 35 +0.0 + 16 +79.3658132711661608 + 26 +53.7427315491275621 + 36 +0.0 + 0 +LINE + 5 +F3 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLine + 10 +90.0 + 20 +90.0 + 30 +0.0 + 11 +10.0 + 21 +80.0 + 31 +0.0 + 0 +LINE + 5 +F4 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLine + 10 +10.0 + 20 +80.0 + 30 +0.0 + 11 +20.0 + 21 +10.0 + 31 +0.0 + 0 +LINE + 5 +F5 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLine + 10 +20.0 + 20 +10.0 + 30 +0.0 + 11 +90.0 + 21 +40.0 + 31 +0.0 + 0 +LINE + 5 +F6 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLine + 10 +90.0 + 20 +40.0 + 30 +0.0 + 11 +90.0 + 21 +90.0 + 31 +0.0 + 0 +DIMENSION + 5 +F7 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +20.0 + 20 +10.0 + 30 +0.0 + 11 +25.9622135893443939 + 21 +67.8081276473175905 + 31 +0.0 + 70 +2 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 + + 3 +Standard +100 +AcDb2LineAngularDimension + 13 +90.0 + 23 +90.0000000000000142 + 33 +0.0 + 14 +10.0000000000000107 + 24 +80.0 + 34 +0.0 + 15 +10.0000000000000107 + 25 +80.0 + 35 +0.0 + 16 +22.3092822874641392 + 26 +64.1281512197389532 + 36 +0.0 + 0 +DIMENSION + 5 +F8 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +90.0 + 20 +39.9999999999999929 + 30 +0.0 + 11 +78.4603475956453451 + 21 +76.9280869482455643 + 31 +0.0 + 70 +2 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\U+2300<> + 3 +Standard +100 +AcDb2LineAngularDimension + 13 +31.170910232960761 + 23 +82.6463637791200796 + 33 +0.0 + 14 +90.6201736729460379 + 24 +90.0775217091181872 + 34 +0.0 + 15 +90.0 + 25 +90.0000000000000142 + 35 +0.0 + 16 +75.6731911623925129 + 26 +80.0611350257382242 + 36 +0.0 + 0 +ENDBLK + 5 +F9 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +FA +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +spline_cp_3deg_closed + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +spline_cp_3deg_closed + 1 + + 0 +SPLINE + 5 +FB +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbSpline + 70 +8 + 71 +3 + 72 +14 + 73 +10 + 74 +0 + 40 +-2.0 + 40 +-2.0 + 40 +-1.0 + 40 +0.0 + 40 +1.0 + 40 +2.0 + 40 +3.0 + 40 +4.0 + 40 +5.0 + 40 +6.0 + 40 +7.0 + 40 +8.0 + 40 +9.0 + 40 +9.0 + 10 +10.0 + 20 +90.0 + 30 +0.0 + 10 +10.0 + 20 +10.0 + 30 +0.0 + 10 +90.0 + 20 +10.0 + 30 +0.0 + 10 +90.0 + 20 +50.0 + 30 +0.0 + 10 +60.0 + 20 +40.0 + 30 +0.0 + 10 +50.0 + 20 +50.0 + 30 +0.0 + 10 +40.0 + 20 +90.0 + 30 +0.0 + 10 +10.0 + 20 +90.0 + 30 +0.0 + 10 +10.0 + 20 +10.0 + 30 +0.0 + 10 +90.0 + 20 +10.0 + 30 +0.0 + 0 +ENDBLK + 5 +FC +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +FD +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +points + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +points + 1 + + 0 +POINT + 5 +FE +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +30.0 + 20 +63.3333333333333286 + 30 +0.0 + 0 +POINT + 5 +FF +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +50.0 + 20 +63.3333333333333286 + 30 +0.0 + 0 +POINT + 5 +100 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +70.0 + 20 +63.3333333333333286 + 30 +0.0 + 0 +POINT + 5 +101 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +90.0 + 20 +63.3333333333333286 + 30 +0.0 + 0 +POINT + 5 +102 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +10.0 + 20 +36.6666666666666572 + 30 +0.0 + 0 +POINT + 5 +103 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +30.0 + 20 +36.6666666666666572 + 30 +0.0 + 0 +POINT + 5 +104 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +50.0 + 20 +36.6666666666666572 + 30 +0.0 + 0 +POINT + 5 +105 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +70.0 + 20 +36.6666666666666572 + 30 +0.0 + 0 +POINT + 5 +106 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +90.0 + 20 +36.6666666666666572 + 30 +0.0 + 0 +POINT + 5 +107 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +90.0 + 20 +10.0 + 30 +0.0 + 0 +POINT + 5 +108 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +70.0 + 20 +10.0 + 30 +0.0 + 0 +POINT + 5 +109 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +50.0 + 20 +10.0 + 30 +0.0 + 0 +POINT + 5 +10A +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +30.0 + 20 +10.0 + 30 +0.0 + 0 +POINT + 5 +10B +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +10.0 + 20 +10.0 + 30 +0.0 + 0 +POINT + 5 +10C +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +10.0 + 20 +90.0 + 30 +0.0 + 0 +POINT + 5 +10D +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +30.0 + 20 +90.0 + 30 +0.0 + 0 +POINT + 5 +10E +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +50.0 + 20 +90.0 + 30 +0.0 + 0 +POINT + 5 +10F +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +70.0 + 20 +90.0 + 30 +0.0 + 0 +POINT + 5 +110 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +90.0 + 20 +90.0 + 30 +0.0 + 0 +POINT + 5 +111 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPoint + 10 +10.0 + 20 +63.3333333333333286 + 30 +0.0 + 0 +ENDBLK + 5 +112 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +113 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +block01 + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +block01 + 1 + + 0 +LINE + 5 +114 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLine + 10 +20.0 + 20 +90.0 + 30 +0.0 + 11 +90.0 + 21 +90.0 + 31 +0.0 + 0 +LINE + 5 +115 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLine + 10 +30.0 + 20 +60.0 + 30 +0.0 + 11 +90.0 + 21 +60.0 + 31 +0.0 + 0 +LINE + 5 +116 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLine + 10 +90.0 + 20 +60.0 + 30 +0.0 + 11 +90.0 + 21 +90.0 + 31 +0.0 + 0 +LINE + 5 +117 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbLine + 10 +30.0 + 20 +80.0 + 30 +0.0 + 11 +30.0 + 21 +60.0 + 31 +0.0 + 0 +ARC + 5 +118 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +20.0 + 20 +80.0 + 30 +0.0 + 40 +10.0 +100 +AcDbArc + 50 +90.0 + 51 +0.0 + 0 +MTEXT + 5 +119 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbMText + 10 +40.0000000000000071 + 20 +80.0 + 30 +0.0 + 40 +10.0 + 41 +100.0 + 71 +1 + 72 +1 + 1 +block01 + 7 +textstyle0 + 50 +0.0 + 73 +1 + 44 +1.0 + 0 +ENDBLK + 5 +11A +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +11B +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +dim_aligned + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +dim_aligned + 1 + + 0 +DIMENSION + 5 +11C +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +92.4253562503633361 + 20 +69.7014250014533161 + 30 +0.0 + 11 +52.4253562503633432 + 21 +79.7014250014533161 + 31 +0.0 + 70 +1 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 + + 3 +Standard +100 +AcDbAlignedDimension + 13 +10.0000000000000107 + 23 +80.0 + 33 +0.0 + 14 +90.0 + 24 +59.9999999999999929 + 34 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +11D +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +50.0 + 20 +70.0 + 30 +0.0 + 11 +30.0 + 21 +70.0 + 31 +0.0 + 70 +1 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\U+2300<> + 3 +Standard +100 +AcDbAlignedDimension + 13 +9.9999999999999947 + 23 +60.0 + 33 +0.0 + 14 +50.0 + 24 +59.9999999999999929 + 34 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +11E +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +68.3560101269464298 + 20 +59.8639392383214428 + 30 +0.0 + 11 +38.3560101269464298 + 21 +54.8639392383214357 + 31 +0.0 + 70 +1 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +text + 3 +Standard +100 +AcDbAlignedDimension + 13 +9.9999999999999964 + 23 +40.0 + 33 +0.0 + 14 +70.0 + 24 +50.0000000000000071 + 34 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +11F +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +81.4142135623731065 + 20 +19.8994949366116209 + 30 +0.0 + 11 +46.4142135623731065 + 21 +24.8994949366116529 + 31 +0.0 + 70 +1 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\A1;<>\S0.01^ 0.02; + 3 +Standard +100 +AcDbAlignedDimension + 13 +10.0 + 23 +20.0 + 33 +0.0 + 14 +80.0 + 24 +9.9999999999999414 + 34 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +ENDBLK + 5 +120 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +121 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +hatch_solid + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +hatch_solid + 1 + + 0 +LWPOLYLINE + 5 +122 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbPolyline + 90 +18 + 70 +1 + 10 +20.0 + 20 +90.0 + 10 +10.0 + 20 +80.0 + 10 +10.0 + 20 +30.0 + 42 +0.9999999999999999 + 10 +50.0 + 20 +30.0 + 10 +50.0 + 20 +50.0 + 10 +60.0 + 20 +50.0 + 10 +60.0 + 20 +20.0 + 10 +70.0 + 20 +10.0 + 10 +90.0 + 20 +10.0 + 10 +90.0 + 20 +70.0 + 10 +80.0 + 20 +70.0 + 10 +80.0 + 20 +80.0 + 10 +90.0 + 20 +80.0 + 10 +90.0 + 20 +90.0 + 10 +50.0 + 20 +90.0 + 10 +50.0 + 20 +80.0 + 10 +40.0 + 20 +80.0 + 10 +40.0 + 20 +90.0 + 0 +HATCH + 5 +123 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +SOLID + 70 +1 + 71 +0 + 91 +1 + 92 +1 + 93 +18 + 72 +1 + 10 +20.0 + 20 +90.0 + 11 +10.0 + 21 +80.0 + 72 +1 + 10 +10.0 + 20 +80.0 + 11 +10.0 + 21 +30.0 + 72 +2 + 10 +30.0 + 20 +30.0 + 40 +20.0 + 50 +180.0 + 51 +0.0 + 73 +1 + 72 +1 + 10 +50.0 + 20 +30.0 + 11 +50.0 + 21 +50.0 + 72 +1 + 10 +50.0 + 20 +50.0 + 11 +60.0 + 21 +50.0 + 72 +1 + 10 +60.0 + 20 +50.0 + 11 +60.0 + 21 +20.0 + 72 +1 + 10 +60.0 + 20 +20.0 + 11 +70.0 + 21 +10.0 + 72 +1 + 10 +70.0 + 20 +10.0 + 11 +90.0 + 21 +10.0 + 72 +1 + 10 +90.0 + 20 +10.0 + 11 +90.0 + 21 +70.0 + 72 +1 + 10 +90.0 + 20 +70.0 + 11 +80.0 + 21 +70.0 + 72 +1 + 10 +80.0 + 20 +70.0 + 11 +80.0 + 21 +80.0 + 72 +1 + 10 +80.0 + 20 +80.0 + 11 +90.0 + 21 +80.0 + 72 +1 + 10 +90.0 + 20 +80.0 + 11 +90.0 + 21 +90.0 + 72 +1 + 10 +90.0 + 20 +90.0 + 11 +50.0 + 21 +90.0 + 72 +1 + 10 +50.0 + 20 +90.0 + 11 +50.0 + 21 +80.0 + 72 +1 + 10 +50.0 + 20 +80.0 + 11 +40.0 + 21 +80.0 + 72 +1 + 10 +40.0 + 20 +80.0 + 11 +40.0 + 21 +90.0 + 72 +1 + 10 +40.0 + 20 +90.0 + 11 +20.0 + 21 +90.0 + 97 +0 + 75 +0 + 76 +1 + 98 +0 +1001 +ACAD +1010 +0.0 +1020 +0.0 +1030 +0 + 0 +ENDBLK + 5 +124 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +125 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +dim_vertical + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +dim_vertical + 1 + + 0 +DIMENSION + 5 +126 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +10.0000000000000107 + 20 +90.0 + 30 +0.0 + 11 +10.0000000000000107 + 21 +50.0 + 31 +0.0 + 70 +0 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 + + 3 +Standard +100 +AcDbAlignedDimension + 13 +20.0 + 23 +10.0 + 33 +0.0 + 14 +20.0 + 24 +90.0 + 34 +0.0 + 50 +90.0 +100 +AcDbRotatedDimension +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +127 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +30.0 + 20 +80.0 + 30 +0.0 + 11 +30.0 + 21 +45.0 + 31 +0.0 + 70 +0 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\U+2300<> + 3 +Standard +100 +AcDbAlignedDimension + 13 +40.0 + 23 +10.0 + 33 +0.0 + 14 +40.0000000000000071 + 24 +80.0 + 34 +0.0 + 50 +90.0 +100 +AcDbRotatedDimension +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +128 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +50.0 + 20 +70.0000000000000142 + 30 +0.0 + 11 +50.0 + 21 +40.0 + 31 +0.0 + 70 +0 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +text + 3 +Standard +100 +AcDbAlignedDimension + 13 +60.0 + 23 +9.9999999999999947 + 33 +0.0 + 14 +60.0 + 24 +70.0000000000000142 + 34 +0.0 + 50 +90.0 +100 +AcDbRotatedDimension +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +DIMENSION + 5 +129 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +70.0 + 20 +59.9999999999999929 + 30 +0.0 + 11 +70.0 + 21 +34.9999999999999716 + 31 +0.0 + 70 +0 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\A1;<>\S0.01^ 0.02; + 3 +Standard +100 +AcDbAlignedDimension + 13 +80.0 + 23 +9.9999999999999414 + 33 +0.0 + 14 +80.0 + 24 +59.9999999999999929 + 34 +0.0 + 50 +90.0 +100 +AcDbRotatedDimension +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 +144 +1040 +1.0 +1070 +40 +1040 +1.0 +1002 +} + 0 +ENDBLK + 5 +12A +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +12B +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +dim_angular_arc + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +dim_angular_arc + 1 + + 0 +DIMENSION + 5 +12C +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +61.7157287525381122 + 20 +38.2842712474619233 + 30 +0.0 + 11 +77.0140103481010101 + 21 +41.3509523384512718 + 31 +0.0 + 70 +2 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +text + 3 +Standard +100 +AcDb2LineAngularDimension + 13 +90.0 + 23 +10.0000000000000906 + 33 +0.0 + 14 +90.0 + 24 +50.0000000000000071 + 34 +0.0 + 15 +90.0 + 25 +10.0000000000000906 + 35 +0.0 + 16 +81.2172277209816258 + 26 +42.777752376604127 + 36 +0.0 + 0 +DIMENSION + 5 +12D +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +81.0557280900008408 + 20 +27.8885438199983184 + 30 +0.0 + 11 +75.9980095999999747 + 21 +19.3764992000000298 + 31 +0.0 + 70 +130 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\A1;<>\S0.01^ 0.02; + 3 +Standard +100 +AcDb2LineAngularDimension + 13 +90.0 + 23 +10.0000000000000906 + 33 +0.0 + 14 +90.0 + 24 +29.9999999999999787 + 34 +0.0 + 15 +90.0 + 25 +10.0000000000000906 + 35 +0.0 + 16 +87.9467394191065353 + 26 +23.1795361089202707 + 36 +0.0 + 0 +ARC + 5 +12E +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +90.0 + 20 +10.0 + 30 +0.0 + 40 +80.0 +100 +AcDbArc + 50 +90.0 + 51 +180.0 + 0 +ARC + 5 +12F +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +90.0 + 20 +10.0 + 30 +0.0 + 40 +60.0 +100 +AcDbArc + 50 +90.0 + 51 +170.5376777919744029 + 0 +ARC + 5 +130 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +90.0 + 20 +10.0 + 30 +0.0 + 40 +40.0 +100 +AcDbArc + 50 +90.0 + 51 +135.0 + 0 +ARC + 5 +131 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbCircle + 10 +90.0 + 20 +10.0 + 30 +0.0 + 40 +20.0 +100 +AcDbArc + 50 +90.0 + 51 +116.5650511770780327 + 0 +DIMENSION + 5 +132 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +10.0 + 20 +10.0000000000000107 + 30 +0.0 + 11 +38.5484368398288098 + 21 +61.4515631601712968 + 31 +0.0 + 70 +2 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 + + 3 +Standard +100 +AcDb2LineAngularDimension + 13 +90.0 + 23 +10.0000000000000906 + 33 +0.0 + 14 +90.0 + 24 +90.0000000000000142 + 34 +0.0 + 15 +90.0 + 25 +10.0000000000000906 + 35 +0.0 + 16 +53.6182507867949667 + 26 +73.0150381055001674 + 36 +0.0 + 0 +DIMENSION + 5 +133 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbDimension + 10 +30.8163645700713786 + 20 +19.8639392383214215 + 30 +0.0 + 11 +55.6199350049289194 + 21 +50.5843060227177972 + 31 +0.0 + 70 +2 + 71 +8 + 72 +1 + 74 +0 + 75 +0 + 41 +1.0 + 42 +0.0 + 1 +\U+2300<> + 3 +Standard +100 +AcDb2LineAngularDimension + 13 +90.0 + 23 +10.0000000000000906 + 33 +0.0 + 14 +90.0 + 24 +69.9999999999999858 + 34 +0.0 + 15 +90.0 + 25 +10.0000000000000906 + 35 +0.0 + 16 +65.980233797180361 + 26 +57.4565653621583081 + 36 +0.0 + 0 +ENDBLK + 5 +134 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +INSERT + 5 +135 +100 +AcDbEntity + 8 +entities + 62 +256 +370 +-1 + 48 +1.0 + 6 +ByLayer +100 +AcDbBlockReference + 2 +spline_cp_3deg_closed + 10 +25.0 + 20 +875.0 + 30 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +C +100 +AcDbDictionary +280 +0 +281 +1 + 3 +ACAD_GROUP +350 +D + 3 +ACAD_LAYOUT +350 +1A + 3 +ACAD_MLINESTYLE +350 +17 + 3 +ACAD_PLOTSETTINGS +350 +19 + 3 +ACAD_PLOTSTYLENAME +350 +E + 3 +AcDbVariableDictionary +350 +136 + 3 +QCAD_OBJECTS +350 +137 + 0 +DICTIONARY + 5 +D +100 +AcDbDictionary +280 +0 +281 +1 + 0 +ACDBDICTIONARYWDFLT + 5 +E +100 +AcDbDictionary +281 +1 + 3 +Normal +350 +F +100 +AcDbDictionaryWithDefault +340 +F + 0 +ACDBPLACEHOLDER + 5 +F + 0 +DICTIONARY + 5 +17 +100 +AcDbDictionary +280 +0 +281 +1 + 3 +Standard +350 +18 + 0 +MLINESTYLE + 5 +18 +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 +DICTIONARY + 5 +19 +100 +AcDbDictionary +280 +0 +281 +1 + 0 +DICTIONARY + 5 +1A +100 +AcDbDictionary +281 +1 + 3 +Layout1 +350 +1E + 3 +Layout2 +350 +26 + 3 +Model +350 +22 + 0 +LAYOUT + 5 +1E +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 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 +688 + 72 +0 + 73 +0 + 74 +5 + 7 + + 75 +16 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout1 + 70 +1 + 71 +1 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +100000000000000000000.0 + 24 +100000000000000000000.0 + 34 +100000000000000000000.0 + 15 +-100000000000000000000.0 + 25 +-100000000000000000000.0 + 35 +-100000000000000000000.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 +0 +330 +1B + 0 +LAYOUT + 5 +22 +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 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 +1712 + 72 +0 + 73 +0 + 74 +0 + 7 + + 75 +0 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Model + 70 +1 + 71 +0 + 10 +0.0 + 20 +0.0 + 11 +12.0 + 21 +9.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +0.0 + 24 +0.0 + 34 +0.0 + 15 +0.0 + 25 +0.0 + 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 +0 +330 +1F + 0 +LAYOUT + 5 +26 +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 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 +688 + 72 +0 + 73 +0 + 74 +5 + 7 + + 75 +16 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout2 + 70 +1 + 71 +2 + 10 +0.0 + 20 +0.0 + 11 +12.0 + 21 +9.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +0.0 + 24 +0.0 + 34 +0.0 + 15 +0.0 + 25 +0.0 + 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 +0 +330 +23 + 0 +DICTIONARY + 5 +136 +100 +AcDbDictionary +281 +1 + 3 +DIMASSOC +350 +139 + 3 +HIDETEXT +350 +138 + 0 +DICTIONARYVAR + 5 +138 +100 +DictionaryVariables +280 +0 + 1 +2 + 0 +DICTIONARYVAR + 5 +139 +100 +DictionaryVariables +280 +0 + 1 +1 + 0 +DICTIONARY + 5 +137 +100 +AcDbDictionary +281 +1 + 3 +ColorSettings/BackgroundColor +350 +13A + 3 +ColorSettings/ColorMode +350 +13B + 3 +Grid/DisplayGrid +350 +13C + 3 +Grid/DisplayGrid00 +350 +13D + 3 +Grid/DisplayGrid01 +350 +13E + 3 +Grid/DisplayGrid02 +350 +13F + 3 +Grid/DisplayGrid03 +350 +140 + 3 +Grid/GridSpacingX +350 +141 + 3 +Grid/GridSpacingX00 +350 +142 + 3 +Grid/GridSpacingX01 +350 +143 + 3 +Grid/GridSpacingX02 +350 +144 + 3 +Grid/GridSpacingX03 +350 +145 + 3 +Grid/GridSpacingY +350 +146 + 3 +Grid/GridSpacingY00 +350 +147 + 3 +Grid/GridSpacingY01 +350 +148 + 3 +Grid/GridSpacingY02 +350 +149 + 3 +Grid/GridSpacingY03 +350 +14A + 3 +Grid/IsometricGrid00 +350 +14B + 3 +Grid/IsometricGrid01 +350 +14C + 3 +Grid/IsometricGrid02 +350 +14D + 3 +Grid/IsometricGrid03 +350 +14E + 3 +Grid/IsometricProjection00 +350 +14F + 3 +Grid/IsometricProjection01 +350 +150 + 3 +Grid/IsometricProjection02 +350 +151 + 3 +Grid/IsometricProjection03 +350 +152 + 3 +Grid/MetaGridSpacingX +350 +153 + 3 +Grid/MetaGridSpacingX00 +350 +154 + 3 +Grid/MetaGridSpacingX01 +350 +155 + 3 +Grid/MetaGridSpacingX02 +350 +156 + 3 +Grid/MetaGridSpacingX03 +350 +157 + 3 +Grid/MetaGridSpacingY +350 +158 + 3 +Grid/MetaGridSpacingY00 +350 +159 + 3 +Grid/MetaGridSpacingY01 +350 +15A + 3 +Grid/MetaGridSpacingY02 +350 +15B + 3 +Grid/MetaGridSpacingY03 +350 +15C + 3 +MultiPageSettings/Columns +350 +15D + 3 +MultiPageSettings/GlueMarginBottom +350 +15E + 3 +MultiPageSettings/GlueMarginsBottom +350 +15F + 3 +MultiPageSettings/GlueMarginsLeft +350 +160 + 3 +MultiPageSettings/GlueMarginsRight +350 +161 + 3 +MultiPageSettings/GlueMarginsTop +350 +162 + 3 +MultiPageSettings/PrintCropMarks +350 +163 + 3 +MultiPageSettings/Rows +350 +164 + 3 +PageSettings/OffsetX +350 +165 + 3 +PageSettings/OffsetY +350 +166 + 3 +PageSettings/PageOrientation +350 +167 + 3 +PageSettings/PaperHeight +350 +168 + 3 +PageSettings/PaperWidth +350 +169 + 3 +PageSettings/Scale +350 +16A + 3 +PageSettings/ShowPaperBorders +350 +16B + 3 +PageTagSettings/EnablePageTags +350 +16C + 3 +PageTagSettings/TagAlignment +350 +16D + 3 +PageTagSettings/TagFont +350 +16E + 3 +PageTagSettings/TagPosition +350 +16F + 3 +UnitSettings/PaperUnit +350 +170 + 3 +ViewportCenter +350 +171 + 3 +ViewportHeight +350 +172 + 3 +ViewportWidth +350 +173 + 0 +XRECORD + 5 +13A +330 +137 +100 +AcDbXrecord +280 +1 +1000 +White + 0 +XRECORD + 5 +13B +330 +137 +100 +AcDbXrecord +280 +1 +1000 +FullColor + 0 +XRECORD + 5 +13C +330 +137 +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +13D +330 +137 +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +13E +330 +137 +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +13F +330 +137 +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +140 +330 +137 +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +141 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +142 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +143 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +144 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +145 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +146 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +147 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +148 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +149 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +14A +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +14B +330 +137 +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +14C +330 +137 +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +14D +330 +137 +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +14E +330 +137 +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +14F +330 +137 +100 +AcDbXrecord +280 +1 + 90 +65537 + 0 +XRECORD + 5 +150 +330 +137 +100 +AcDbXrecord +280 +1 + 90 +65537 + 0 +XRECORD + 5 +151 +330 +137 +100 +AcDbXrecord +280 +1 + 90 +65537 + 0 +XRECORD + 5 +152 +330 +137 +100 +AcDbXrecord +280 +1 + 90 +65537 + 0 +XRECORD + 5 +153 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +154 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +155 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +156 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +157 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +158 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +159 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +15A +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +15B +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +15C +330 +137 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +15D +330 +137 +100 +AcDbXrecord +280 +1 + 90 +1 + 0 +XRECORD + 5 +15E +330 +137 +100 +AcDbXrecord +280 +1 + 40 +10.0 + 0 +XRECORD + 5 +15F +330 +137 +100 +AcDbXrecord +280 +1 + 40 +10.0 + 0 +XRECORD + 5 +160 +330 +137 +100 +AcDbXrecord +280 +1 + 40 +10.0 + 0 +XRECORD + 5 +161 +330 +137 +100 +AcDbXrecord +280 +1 + 40 +10.0 + 0 +XRECORD + 5 +162 +330 +137 +100 +AcDbXrecord +280 +1 + 40 +10.0 + 0 +XRECORD + 5 +163 +330 +137 +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +164 +330 +137 +100 +AcDbXrecord +280 +1 + 90 +1 + 0 +XRECORD + 5 +165 +330 +137 +100 +AcDbXrecord +280 +1 + 40 +-150.0 + 0 +XRECORD + 5 +166 +330 +137 +100 +AcDbXrecord +280 +1 + 40 +-232.5 + 0 +XRECORD + 5 +167 +330 +137 +100 +AcDbXrecord +280 +1 +1000 +Portrait + 0 +XRECORD + 5 +168 +330 +137 +100 +AcDbXrecord +280 +1 + 40 +297.0 + 0 +XRECORD + 5 +169 +330 +137 +100 +AcDbXrecord +280 +1 + 40 +210.0 + 0 +XRECORD + 5 +16A +330 +137 +100 +AcDbXrecord +280 +1 +1000 +1:5 + 0 +XRECORD + 5 +16B +330 +137 +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +16C +330 +137 +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +16D +330 +137 +100 +AcDbXrecord +280 +1 +1000 +Inside + 0 +XRECORD + 5 +16E +330 +137 +100 +AcDbXrecord +280 +1 +1000 +Arial,10,-1,5,50,0,0,0,0,0 + 0 +XRECORD + 5 +16F +330 +137 +100 +AcDbXrecord +280 +1 +1000 +TopLeft + 0 +XRECORD + 5 +170 +330 +137 +100 +AcDbXrecord +280 +1 + 90 +4 + 0 +XRECORD + 5 +172 +330 +137 +100 +AcDbXrecord +280 +1 + 40 +247.4828015432907478 + 0 +XRECORD + 5 +173 +330 +137 +100 +AcDbXrecord +280 +1 + 40 +491.8677655151077488 + 0 +ENDSEC + 0 +EOF diff --git a/testdata/dxf/issue_1422c_au.gds.gz b/testdata/dxf/issue_1422c_au.gds.gz new file mode 100644 index 0000000000000000000000000000000000000000..d1e7ab657d2118e234f0d9ea7e5d8b25f87d57ba GIT binary patch literal 2000 zcmaKtc~F*R6vcnfCw}0DSXl;Elj-Dw0)iqSh@YaY$|fjjNCIY}xHazPGVWVOr6X=B z38-j_>x`CWO5?atE?Jru>X4AlgCKq1yBoUBgJaXdU-8by3Om6S<>&7X)r*Bo;K4}<*a`I;ATSTp_z`qFf@!IE zJ=S5oFF5^FF~O~lVWO#jv5YbhqC28QHg z;$MWJ!!ZN&J##2#U?sehg-ObV9OaRGMw}{sst1f-g&Fh`j4c*EhViN^Z7)o!#H2^T z*2^Umr0C0MXaxIo;`7Pf?Ck-A5HSaDbPD*meZidPRG zy9-;ur{ggxPFQnHd0mIK;w5oCtZ%G*AHW6+U9i!pj-|p{Ou|{%bV;bXJ}Xz9`o4J) zCToK4EMJQ z$3X2ap?ZE#dMo`7?o{a>ANa#l_&(fL{@cW9^>W40eYbuV-h!JUia!Uc6st@e{Hi{b z-G%GRV5f4uraE_RgsZCW3(d`yAlSVIe*7NxDCXsLqX z^MGp0!T8))&(xbXS?X~zru}AVpb4gnxLCIu6C^&?+{c9cqB-}*L_C6mm(@evw@Mo7 zvsFIuL_Iz#E#6Vj&%^S|(t!9`c2t_U0ZSH0GkU+Mm$Xy_^QD1=LDKez(w_WgP6uf- zNj`H(T2+r{sF%sdV5+o~avUa0>#5>&(m`omGdiKOP<-ca&;pE zq3(I_1EJ213by|rSz~|CEfMPXIhxrtX(ii7=%X3FsC$)nmNm2L%kTuD^pPn(QpM@8 zQ^MJr{UyRC^3r(ar+67&%C{Z{>wL2Mk}l6mQr>B~!slU7fa*(^m(*+KRzUJO)qMz( zHj9VL^4>)8QUeK%Y@T8(#oJtYaFKX@BClE~Pjbn-rfFuxlWUedtG&FgK(kT-5r^ez zzVgO8+v9q^YI|N-tnGoJRkkOFPPaWWR5NUOX2@>aL%W}}y){TYTb|ohvut^=ziPES z*-yD!9^Iwf_Uta}Y!CPIe(LGnZI2I-)-2Bt5(m}}2-bX9J0T?3-VtHr?41$5!`>m0 zI&bY1*I|3dL>1UOCt5RN?Vz|S^;CBb9A@t*Ygbu2%i3Mm4tu)K+*)Y+x%0n!)5GaZ d70tLc2Jh#dwL_a)TQaMJW<%=u_f|JI{sH4w!i@j` literal 0 HcmV?d00001 From 99df15a5fff7fd6ac0f64b781d34cb2b2a4bc706 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 22 Jul 2023 18:14:14 +0200 Subject: [PATCH 7/7] Update on issue 1422 fix - fixing an array index out of bounds issue; do no use control points for first and last point as splines may not be designed to terminate at those. --- src/plugins/streamers/dxf/db_plugin/dbDXFReader.cc | 10 +++++----- .../streamers/dxf/unit_tests/dbDXFReaderTests.cc | 14 +++++++++++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/plugins/streamers/dxf/db_plugin/dbDXFReader.cc b/src/plugins/streamers/dxf/db_plugin/dbDXFReader.cc index 2f5bacb89..54a6c0e28 100644 --- a/src/plugins/streamers/dxf/db_plugin/dbDXFReader.cc +++ b/src/plugins/streamers/dxf/db_plugin/dbDXFReader.cc @@ -817,12 +817,12 @@ static db::DPoint b_spline_point (double x, const std::vector > &control_points, int p, const std::vector &t, int &k) { k = (int) (std::lower_bound (t.begin (), t.end (), x - 1e-6) - t.begin ()); - if (k < p) { - return control_points.front ().first; - } else if (k > (int) control_points.size ()) { - return control_points.back ().first; - } --k; + if (k < p) { + k = p; + } else if (k >= (int) control_points.size ()) { + k = (int) control_points.size () - 1; + } std::vector d; std::vector dw; diff --git a/src/plugins/streamers/dxf/unit_tests/dbDXFReaderTests.cc b/src/plugins/streamers/dxf/unit_tests/dbDXFReaderTests.cc index a9e7d9c7b..265e4bdff 100644 --- a/src/plugins/streamers/dxf/unit_tests/dbDXFReaderTests.cc +++ b/src/plugins/streamers/dxf/unit_tests/dbDXFReaderTests.cc @@ -517,10 +517,22 @@ TEST(34) } // issue #1422 -TEST(35) +TEST(35a) { db::DXFReaderOptions opt; run_test_public (_this, "issue_1422a.dxf", "issue_1422a_au.gds.gz", opt); +} + +// issue #1422 +TEST(35b) +{ + db::DXFReaderOptions opt; run_test_public (_this, "issue_1422b.dxf", "issue_1422b_au.gds.gz", opt); +} + +// issue #1422 +TEST(35c) +{ + db::DXFReaderOptions opt; run_test_public (_this, "issue_1422c.dxf", "issue_1422c_au.gds.gz", opt); }