{"id":277129,"date":"2016-03-28T20:00:06","date_gmt":"2016-03-28T16:00:06","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=277129"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=277129","title":{"rendered":"Teigha for Architecture: First project"},"content":{"rendered":"<p>       \u0412 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 <a href=\"https:\/\/habrahabr.ru\/post\/265617\/\">AutoCAD Architecture: First project<\/a> \u0438 <a href=\"https:\/\/habrahabr.ru\/post\/271571\/\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 ACA<\/a> \u044f \u043a\u0440\u0430\u0442\u043a\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043e \u0442\u043e\u043c \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 AutoCAD Architecture (ACA), \u0447\u0435\u043c \u043e\u043d \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0410\u0432\u0442\u043e\u043a\u0430\u0434\u0430, \u043a\u0430\u043a\u0438\u0435 \u0432 \u043d\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0435\u043d\u0430\u043c\u0438 \u0438\u0437 .NET \u043f\u043b\u0430\u0433\u0438\u043d\u0430.<\/p>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Teigha \u2014 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 dwg \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 ACA. \u041c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0434\u043e\u043c \u0438\u0437 ACA-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0432 dwg \u0444\u0430\u0439\u043b. \u0417\u0430\u0442\u0435\u043c, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0432 AutoCAD Architecture \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b \u043b\u0438 \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0410\u0432\u0442\u043e\u043a\u0430\u0434\u043e\u043c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/570\/815\/d84\/570815d8469d4a41957c21cdee48381d.png\"\/><\/p>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<h1>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 AutoCAD \u0438 ObjectARX<\/h1>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 dwg \u0438 acad-\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u043a\u0440\u043e\u043c\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0410\u0432\u0442\u043e\u043a\u0430\u0434\u0430 \u0438 ObjectARX, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430: Teigha \u043e\u0442 Open Design Alliance. \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 dwg \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0410\u0432\u0442\u043e\u043a\u0430\u0434\u0430, \u0442\u043e \u0432\u044b\u0431\u043e\u0440 \u0443 \u0432\u0430\u0441, \u043f\u043e \u0441\u0443\u0442\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0436\u0434\u0443 ObjectARX \u0438 Teigha. \u0412\u0441\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043c\u0435\u044e\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c dwg \u0444\u0430\u0439\u043b\u044b, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u044b \u043d\u0430 Teigha.<br \/>  Teigha \u2013 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0410\u0432\u0442\u043e\u043a\u0430\u0434\u0430, \u0442\u0430\u043a \u0438 \u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0445 \u0442\u0438\u043f\u0430 ACA. \u0412 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043c\u043d\u043e\u0433\u0438\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0410\u0432\u0442\u043e\u043a\u0430\u0434\u0430 \u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433-\u0434\u0435\u0432\u0430\u0439\u0441\u044b \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 dwg \u0431\u0430\u0437\u044b.<br \/>  \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0442 Open Design Alliance \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:  <\/p>\n<blockquote>\n<ul>\n<li>Supported DWG, DXF, and BDXF file formats:<br \/> \n<ul>\n<li>Read support for files of version 2.5 through 2014.<\/li>\n<li>Write support for files of version 12 through 2014.<\/li>\n<\/ul>\n<\/li>\n<li>Supported DGN file formats:<br \/> \n<ul>\n<li>Read support for V7 and V8 DGN (including V8 XM and V8I).<\/li>\n<li>Write support for V8 DGN.<\/li>\n<li>Convert from V7 to V8.<\/li>\n<\/ul>\n<\/li>\n<li>Render drawing files using GDI, OpenGL, or DirectX with the ability to select entities.<\/li>\n<li>Recover and repair damaged .dwg files.<\/li>\n<li>Edit and manipulate CAD data programmatically, including:<br \/> \n<ul>\n<li>Explode an entity into a set of simpler entities.<\/li>\n<li>Apply a transformation to an entity.<\/li>\n<li>Modify arbitrary properties of database objects.<\/li>\n<li>Clone a database object.<\/li>\n<li>Many more.<\/li>\n<\/ul>\n<\/li>\n<li>Export to SVG, PDF, DWF, BMP, STL, DAE (Collda).<\/li>\n<li>Import DWF\/DAE\/DGN files into a .dwg database.<\/li>\n<li>Support custom objects \u2014 members can create custom objects that are usable within any Teigha host application (compatible with .dwg files only).<\/li>\n<li>Support external files such as font files (TTF\/SHX), linetype files (LIN\/RSC), and hatch pattern files (PAT).<\/li>\n<li>Recompute dimension geometry from dimension settings.<\/li>\n<li>Support transactions and undo\/redo capabilities for .dwg file data.<\/li>\n<li>Support partial .dwg file load capabilities, allowing fast access to small subsets of drawing entities (entities are loaded from disk only if they are explicitly accessed by the client).<\/li>\n<li>Customize memory management allowing member applications to control memory allocation\/deallocation.<\/li>\n<li>Support .dwg file \u201cround-trip\u201d data. For example, when saving a 2007 .dwg file back to R14, 2007-specific properties are saved to the R14 file as xdata and then restored if the file is loaded back into a 2007-compatible application.<\/li>\n<li>Support ACIS\/Parasolid data internally, including rendering (wireframe and shaded) for embedded 3D solids and access to the underlying boundary representation data.<\/li>\n<li>Implement custom commands. <\/li>\n<li>Sample source code applications<\/li>\n<li>Integrate with third-party components.<\/li>\n<\/ul>\n<p>  <\/p><\/blockquote>\n<p>  \u0412 \u043e\u0431\u0449\u0435\u043c, \u00ab\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e\u00bb. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c dwg \u0447\u0435\u0440\u0442\u0435\u0436 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u044d\u043c\u043f\u043b \u0438\u0437 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0438 Teigha:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a29\/2e7\/546\/a292e7546ae64870b521b9a535f3af65.jpg\"\/><\/p>\n<p>  \u041e\u043a, dwg \u0444\u0430\u0439\u043b \u0443 \u043d\u0430\u0441 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0441\u044f \u0438 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0441\u044f. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043a\u0430\u043a \u0438 dwg \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u0442\u0438\u0442\u0443\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043a \u0441\u0442\u0430\u0442\u044c\u0435.<br \/>  \u042d\u0442\u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u044d\u043c\u043f\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043e\u043a\u043e\u043d\u043d\u043e\u0435 C++ \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c, \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c dwg \u0444\u0430\u0439\u043b\u044b \u0431\u0435\u0437 \u0410\u0432\u0442\u043e\u043a\u0430\u0434\u0430. \u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0432\u0430\u0436\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: API \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0410\u0432\u0442\u043e\u043a\u0430\u0434\u0430 \u0438 Teigha \u043f\u043e\u0447\u0442\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 ObjectARX \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043d\u0430 Teigha.<br \/>  \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432 \u0410\u0432\u0442\u043e\u043a\u0430\u0434\u0430, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a BricsCAD, ZWCad, IntelliCAD, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Teigha \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 dwg \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u0438 acad-\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438.<\/p>\n<h1>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 AutoCAD Architecture<\/h1>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043d\u0438\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u043d\u0430\u043f\u043e\u043c\u043d\u044e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b:<br \/>  AutoCAD Architecture \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: \u0441\u0442\u0435\u043d\u0430\u043c\u0438, \u0434\u0432\u0435\u0440\u044f\u043c\u0438, \u043e\u043a\u043d\u0430\u043c\u0438, \u043a\u0440\u044b\u0448\u0430\u043c\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0447\u0430\u0441\u0442\u044f\u043c\u0438. \u041e\u0431\u044a\u0435\u043a\u0442\u044b viewport-dependent, \u0442.\u0435. \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u043c\u0435\u0440\u044b. \u041e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0441\u0442\u0438\u043b\u044c. \u0415\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0438\u043b\u044c, \u0442\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u0438\u043b\u044f. \u041e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438: \u0446\u0432\u0435\u0442, \u0442\u0438\u043f \u043b\u0438\u043d\u0438\u0439, \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u043c\u0430\u0441\u0448\u0442\u0430\u0431 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0432\u0435\u0440\u044c \u0432 3D \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0440\u0430\u043c\u044b, \u043f\u043e\u043b\u043e\u0442\u043d\u0430, \u0441\u0442\u0435\u043a\u043b\u0430). \u0414\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u0440\u0438\u0441\u0443\u0435\u0442 \u0440\u0430\u0437\u043d\u0443\u044e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439.<\/p>\n<h1>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Teigha for Architecture (TA)<\/h1>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u043a\u0440\u043e\u043c\u0435 \u0441\u0430\u043c\u043e\u0433\u043e ACA \u0438 \u0435\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e API \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Teigha for Architecture \u043e\u0442 Open Design Alliance.<br \/>  TA \u2014 \u044d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0421++ \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b ACA, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0441\u0442\u0435\u043d\u044b, \u043e\u043a\u043d\u0430, \u0434\u0432\u0435\u0440\u0438, \u043a\u0440\u044b\u0448\u0438, \u0431\u0430\u043b\u043a\u0438, \u043f\u0440\u043e\u0435\u043c\u044b \u0438 \u0442\u0434. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438\u0437 dwg \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0432\u0441\u0435\u0445 \u0432\u0435\u0440\u0441\u0438\u0439, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c (\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c) \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e dwg; \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0432\u0441\u0435\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439. \u0422.\u043a. aca-\u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432\u0437\u0430\u0438\u043f\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c, \u0432 TA \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b ACA \u2014 \u044d\u0442\u043e anchor, display manager, property sets, relation graph \u0438 \u043f\u0440\u043e\u0447\u0430\u044f \u043e\u0431\u0432\u044f\u0437\u043a\u0430.<\/p>\n<h1>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 TA API<\/h1>\n<p>  \u041e\u0431\u0449\u0438\u0445 \u0441\u043b\u043e\u0432, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Teigha \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443. \u042f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u0443\u044e VS 2005, \u043d\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b \u0438 \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435 \u0438\u0434\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u043e\u043b\u044e\u0448\u0435\u043d\u043e\u0432 \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0438\u0439 \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e 2015. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u0432\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043b\u0438\u0431\u043e \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u0441\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043b\u0438\u0431\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b.<\/p>\n<p>  \u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 TA-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0438\u043c:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/412\/0a5\/2f2\/4120a52f29804457b8fe1b0f765bd95a.jpg\"\/><\/p>\n<p>  \u041f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0432\u0438\u043d\u0434\u043e\u0432\u044b\u0435 dll (\u043c\u043e\u0436\u043d\u043e \u0441\u0431\u0438\u043b\u0434\u0438\u0442\u044c \u0438 \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b: ios, linux, unix \u0438 \u0442\u0434). Lib \u0444\u0430\u0439\u043b\u044b \u043a \u043d\u0438\u043c \u0438\u0434\u0443\u0442 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435. \u041a\u0440\u043e\u043c\u0435 TA \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b Teigha Core \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0442\u043a TA \u044d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043d\u0430\u0434 Core-\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438. Core \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043a\u0430\u0434\u0430.<\/p>\n<h1>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0422\u0410<\/h1>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438.  <\/p>\n<pre><code class=\"cpp\">class MyServices : public ExSystemServices, public ExHostAppServices { protected:   ODRX_USING_HEAP_OPERATORS(ExSystemServices); }; <\/code><\/pre>\n<p>  \u0412 \u043a\u043e\u043c\u043b\u0435\u043a\u0442\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0434 Windows: ExSystemServices \u0438 ExHostAppServices; \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043c \u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<br \/>  \u0414\u0430\u043b\u0435\u0435, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443  <\/p>\n<pre><code class=\"cpp\">OdStaticRxObject&lt;MyServices&gt; svcs; odInitialize( &svcs ); odgsInitialize(); <\/code><\/pre>\n<p>  OdStaticRxObject \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043b\u043e\u0433\u0438\u043a\u0443 addRef \\ Release; \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 MyServices \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. <\/p>\n<p>  \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0422\u0410:   <\/p>\n<pre><code class=\"cpp\">  \/\/ Loading of all public Teigha Architecture DRX modules.         \/\/ Note that not all calls are necessary for some of them depend on others         \/\/ but here we list all of them.         \/\/         \/\/ If a program uses TD doesn't modify or create binary files         \/\/ it may not load any of DRX modules on start because they will be loaded automatically.          \/\/ But if a program modifies or creates binary files then it is highly recommended         \/\/ to load all DRX modules program uses.         ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecBase&quot;) );         ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecArchBase&quot;) );         ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecArchDACHBase&quot;) );         ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecScheduleData&quot;) );         ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecSchedule&quot;) );         ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecStructureBase&quot;) ); <\/code><\/pre>\n<p>  AecBase, AecArchBase \u0438 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u2013 \u044d\u0442\u043e tx \u043c\u043e\u0434\u0443\u043b\u0438 (\u0442.\u0435. dll \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438) c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432\u044b\u0448\u0435. \u041e\u043d\u0438 \u0443\u0436\u0435 \u0441\u043b\u0438\u043d\u043a\u043e\u0432\u0430\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e lib \u0444\u0430\u0439\u043b\u043e\u0432, \u043d\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043a\u0430\u043a \u043c\u043e\u0434\u0443\u043b\u0438. \u0427\u0442\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442? \u0412 \u043f\u0435\u0440\u0438\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u042d\u0442\u043e\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043a\u0430\u0441\u0442\u043e\u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 TA-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0430\u043c\u0438\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 TA-\u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u0441\u0435\u0432\u0434\u043e-\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432.<br \/>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b ::odrxDynamicLinker()-&gt;loadApp( OD_T(\u00abAecArchBase\u00bb) ) \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f AECArchBase::initApp(). \u0421\u0445\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e, initApp() \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u043a\u043b\u0430\u0441\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u0432\u044b\u0437\u0432\u0430\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e rxInit():  <\/p>\n<pre><code class=\"cpp\">\u2026 AECDbSpaceBoundary::rxInit(); AECDbStair::rxInit(); AECDbWall::rxInit(); AECDbZone::rxInit(); \u2026 <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0442\u0435\u043d\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u043c AECDbWallPtr pWall = AECDbWall::CreateAECObject(). \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 TA-\u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u044b\u043a\u0438\u043d\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  C\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u0443\u044e dwg \u0431\u0430\u0437\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u043c   <\/p>\n<pre><code class=\"cpp\">OdDbDatabasePtr pDatabase = svcs.createDatabase(); <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043e\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0438\u0437 dwg \u0444\u0430\u0439\u043b\u0430. \u0412 \u043d\u0435\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438, \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u044d\u0442\u0443 \u0431\u0430\u0437\u0443 \u0432 dwg \u0444\u0430\u0439\u043b \u0432\u044b\u0437\u043e\u0432\u043e\u043c  <\/p>\n<pre><code class=\"cpp\">OdWrFileBuf cBuffer( strFilename ); pDatabase-&gt;writeFile( &cBuffer, OdDb::kDwg, OdDb::kDHL_CURRENT ); <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435, \u0435\u0449\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 display manager  <\/p>\n<pre><code class=\"cpp\">AECArchDACHBaseDatabase( pDatabase ).Init(); AECScheduleDatabase( pDatabase ).Init(); AECStructureBaseDatabase( pDatabase ).Init();    init_display_system( pDatabase ); <\/code><\/pre>\n<p>  \u0412 \u0431\u0430\u0437\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f AEC-\u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0435\u0434\u0438\u043d\u0438\u0446 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0434\u043b\u0438\u043d\u044b, \u043f\u043b\u043e\u0449\u0430\u0434\u0438, \u043e\u0431\u044a\u0435\u043c\u0430, \u0443\u0433\u043b\u043e\u0432, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u0435\u0447\u0430\u0442\u0438 \u0438 \u0440\u0435\u0433\u0435\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f display representations \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u044d\u0442\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u044f\u0445. \u041e display manager, display representations \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u044d\u0442\u0438\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438 \u044f \u043d\u0430\u043f\u0438\u0448\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0441\u0442.<\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0448\u0430\u0433\u0438, \u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u0435\u043d: \u043b\u0438\u0431\u043e \u0443 \u0432\u0430\u0441 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043b\u0438\u0431\u043e \u043e\u043d\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f (\u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 \u044d\u043a\u0440\u0430\u043d), \u043b\u0438\u0431\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0435\u0449\u0435 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0433\u043b\u044e\u043a\u0438, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0439 \u0448\u0430\u0433 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438.<\/p>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0443 \u043d\u0430\u0441 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class MyServices : public ExSystemServices, public ExHostAppServices { protected:   ODRX_USING_HEAP_OPERATORS(ExSystemServices); };  int wmain(int argc, wchar_t* argv[]) {    \/\/ Initialize TD with system services.   \/\/ And create single instance of hostapp services   \/\/ for TD database creation.   OdStaticRxObject&lt;MyServices&gt; svcs;   odInitialize( &svcs );   odgsInitialize();     \/\/ Loading of all public Teigha Architecture DRX modules.   \/\/ Note that not all calls are necessary for some of them depend on others   \/\/ but here we list all of them.   \/\/   \/\/ If a program uses TD doesn't modify or create binary files   \/\/ it may not load any of DRX modules on start because they will be loaded automatically.    \/\/ But if a program modifies or creates binary files then it is highly recommended   \/\/ to load all DRX modules program uses.   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecBase&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecArchBase&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecArchDACHBase&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecScheduleData&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecSchedule&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecStructureBase&quot;) );    \/\/ Create empty TD database.   OdDbDatabasePtr pDatabase = svcs.createDatabase();;      \/\/ Initialize database with default Teigha Architecture content.   AECArchDACHBaseDatabase( pDatabase ).Init();   AECScheduleDatabase( pDatabase ).Init();   AECStructureBaseDatabase( pDatabase ).Init();     init_display_system( pDatabase );         \/\/ do something here with TA objects     \/\/ Perform &quot;zoom extents&quot; on model space.   {     OdDbViewportTablePtr pVT =       pDatabase-&gt;getViewportTableId().openObject( OdDb::kForRead );     OdDbViewportTableRecordPtr pV =       pVT-&gt;getActiveViewportId().openObject( OdDb::kForWrite );     pV-&gt;zoomExtents();   }    OdWrFileBuf cBuffer( &quot;H:\\\\TA_test.dwg&quot; );   pDatabase-&gt;writeFile( &cBuffer, OdDb::kDwg, OdDb::kDHL_CURRENT );      odgsUninitialize();   odUninitialize();    return 0; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u042f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u0443 zoom extents, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u0435\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0443\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0438 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0443\u044e \u0434\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u044f \u0443\u0431\u0440\u0430\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 try\\catch \u0432\u043e\u043a\u0440\u0443\u0433 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. <br \/>  \u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 dwg \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0438 \u043f\u043e\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0410\u0432\u0442\u043e\u043a\u0430\u0434\u043e\u043c.<\/p>\n<h1>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438<\/h1>\n<p>  <b>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043d \u0432 \u0447\u0435\u0440\u0442\u0435\u0436<\/b><br \/>  \u0414\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0422\u0410-\u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438, \u044f \u0445\u043e\u0447\u0443 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043e\u043c, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u044f-\u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430, \u0441\u0442\u0435\u043d, \u043e\u043a\u043e\u043d, \u0434\u0432\u0435\u0440\u0438 \u0438 \u043a\u0440\u044b\u0448\u0438. \u041d\u0430\u0447\u043d\u0435\u043c \u0441\u043e \u0441\u0442\u0435\u043d.<br \/>  \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0430\u0448 \u0447\u0435\u0440\u0442\u0435\u0436 \u0441\u0442\u0435\u043d\u0443. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0430\u043c\u0443 \u0441\u0442\u0435\u043d\u0443, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0435 \u0441\u0442\u0438\u043b\u044c. \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e add_wall_style:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 add_wall_style<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">OdDbObjectId add_wall_style( OdDbDatabasePtr pDatabase ) {   OdDbObjectId idResult =     AECDbWallStyle::CreateAECObject( pDatabase, OD_T(&quot;Wall Style Created By Teigha(R) Architecture&quot;) );    AECDbWallStylePtr pWallStyle =     idResult.openObject( OdDb::kForWrite );    pWallStyle-&gt;SetDescription( OD_T(&quot;Wall Style Description&quot;) );   pWallStyle-&gt;SetDictRecordDescription( OD_T(&quot;Dialog caption&quot;) );    pWallStyle-&gt;SetWallWidth( 4 );   pWallStyle-&gt;SetWallWidthUsed( true );    pWallStyle-&gt;SetBaseHeight( 110 );   pWallStyle-&gt;SetBaseHeightUsed( true );    pWallStyle-&gt;SetJustification( AECDefs::ewjLeft );   pWallStyle-&gt;SetJustificationUsed( true );    pWallStyle-&gt;SetAutomaticCleanups( true );   pWallStyle-&gt;SetAutomaticCleanupsUsed( true );    pWallStyle-&gt;SetCleanupRadius( 4 );   pWallStyle-&gt;SetCleanupRadiusUsed( true );    pWallStyle-&gt;SetFloorLineOffset( 3 );   pWallStyle-&gt;SetFloorLineOffsetUsed( false );    pWallStyle-&gt;SetRoofLineOffset( -3 );   pWallStyle-&gt;SetRoofLineOffsetUsed( false );    AECDisplayManager cDM( pDatabase );   AECDbDispPropsWallModelPtr pOverrideModel =     AECDbDispPropsWallModel::cast( pWallStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepWallModel::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverrideModel.isNull() )   {     pOverrideModel-&gt;SetIsDisplayOpeningEndcaps( false );     pOverrideModel-&gt;GetBoundaryCompByIndex( 0 )-&gt;SetColor( colorAt( 4 ) );   }    AECDbDispPropsWallPtr pOverridePlan =     AECDbDispPropsWall::cast( pWallStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepWallPlan::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverridePlan.isNull() )   {     pOverridePlan-&gt;GetBoundaryCompByIndex( 0 )-&gt;SetColor( colorAt( 4 ) );   }    return( pWallStyle-&gt;objectId() ); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u00ab\u0441\u0442\u0438\u043b\u044c \u0441\u0442\u0435\u043d\u044b\u00bb AECDbWallStyle, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u043c\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a display manager \u0438 \u043c\u0435\u043d\u044f\u0435\u0442 \u0446\u0432\u0435\u0442\u0430 \u0434\u043b\u044f plan display representation (2d \u0432\u0438\u0434 \u0441\u0432\u0435\u0440\u0445\u0443) \u0438 model display representation (3d view).  <\/p>\n<pre><code class=\"cpp\">AECDisplayManager cDM( pDatabase );   AECDbDispPropsWallModelPtr pOverrideModel =     AECDbDispPropsWallModel::cast( pWallStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepWallModel::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverrideModel.isNull() )   {     pOverrideModel-&gt;SetIsDisplayOpeningEndcaps( false );     pOverrideModel-&gt;GetBoundaryCompByIndex( 0 )-&gt;SetColor( colorAt( 2 ) );   } <\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u0436\u0435\u043b\u0442\u044b\u0439 \u0446\u0432\u0435\u0442 \u0434\u043b\u044f \u0441\u0442\u0435\u043d\u044b \u0432 3\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438. \u041d\u0430 \u0432\u0438\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0432\u0430\u0442\u043e, \u043d\u043e \u0442\u043e\u043c\u0443 \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u044b: \u0442\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c display representations \u0438 display manager \u0432 ACA. \u041e\u043d \u0433\u0438\u0431\u043a\u0438\u0439 \u0438 \u0438\u043c\u0435\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u043d\u043e \u0435\u0433\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0430 \u0438 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438.<\/p>\n<p>  <b>OdDbObjectId \u2014 \u0441\u0441\u044b\u043b\u043a\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/b><br \/>  OdDbObjectId \u2013 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0431\u0430\u0437\u044b \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0412\u043d\u0443\u0442\u0440\u0438 \u043e\u043d \u0445\u0440\u0430\u043d\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f OdDbObjectId::openObject() \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0441\u0432\u044f\u0437\u0430\u043d ObjectId. \u0421\u043c\u044b\u0441\u043b \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043d\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u043f\u043e \u044d\u0442\u043e\u043c\u0443 id, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c OdDbObjectId \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d NULL. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u043f\u043e \u044d\u0442\u043e\u043c\u0443 id \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0438, \u0442\u043e\u0433\u0434\u0430 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442 \u0435\u0433\u043e \u043f\u043e\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 \u0431\u0430\u0437\u044b, \u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c OdDbObjectId \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. openObject() \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c.<br \/>  \u0422\u0430\u043a\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u0431\u0430\u0437\u044b (dwg \u0444\u0430\u0439\u043b\u0430). \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 OdDbObjectId \u0431\u0443\u0434\u0443\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043d\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f\u0432\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f. <br \/>  \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0430\u0441\u044c \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c OdDbHandle.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0443\u043d\u043a\u0446\u0438\u044f add_wall_style \u0432\u0435\u0440\u043d\u0443\u043b\u0430 \u043d\u0430\u043c idWallStyle. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u0438\u043b\u044c \u0431\u044b\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u044f\u0432\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d \u0432\u044b\u0437\u043e\u0432\u043e\u043c AECDbWallStyle::CreateAECObject() \u0438 idWallStyle \u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443-\u0441\u0442\u0438\u043b\u044e \u043d\u0430\u0434\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e  <\/p>\n<pre><code class=\"cpp\">AECDbWallStylePtr pWallStyle = idResult.openObject( OdDb::kForWrite ); <\/code><\/pre>\n<p>  openObject() \u0432\u0435\u0440\u043d\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. <\/p>\n<p>  \u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0421++ \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043c\u0430\u0440\u0442\u043f\u043e\u0438\u043d\u0442\u0435\u0440\u044b OdSmartPtr  <\/p>\n<pre><code class=\"cpp\">typedef OdSmartPtr&lt;AECDbWallStyle&gt; AECDbWallStylePtr <\/code><\/pre>\n<p>  \u0414\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043c\u0430\u0440\u0442\u043f\u043e\u0438\u043d\u0442\u0435\u0440\u0430 \u043e\u043f\u043e\u0432\u0435\u0449\u0430\u0435\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043e \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u0447\u0435\u0442 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0439 \u0438 \u0442.\u0434.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0435\u043d\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u043c:  <\/p>\n<pre><code class=\"cpp\">OdDbObjectId idWall1 = add_wall( pDatabase, idWallStyle, OdGePoint2d( 0,     0 ), OdGePoint2d(   0, 110 ) ); <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 add_wall<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">OdDbObjectId add_wall( OdDbDatabasePtr pDatabase, const OdDbObjectId& idStyle,                       const OdGePoint2d& ptStart, const OdGePoint2d& ptEnd, double dBulge = 0 ) {   AECDbWallPtr pWall =     AECDbWall::CreateAECObject( pDatabase-&gt;getModelSpaceId(), idStyle );    pWall-&gt;Set( ptStart, ptEnd, dBulge );   pWall-&gt;SetDescription( OD_T(&quot;A Wall&quot;) );    return( pWall-&gt;objectId() ); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, add_wall \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u043e\u0433\u043e. \u041e\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 AECDbWall \u0441\u043e \u0441\u0442\u0438\u043b\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u043d\u044c\u0448\u0435. \u041e\u0431\u044a\u0435\u043a\u0442 AECDbWall \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 model space \u0431\u0430\u0437\u044b \u2013 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0440\u0438\u0441\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0435 \u0431\u0430\u0437\u044b (\u044d\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435).<br \/>  \u0414\u0430\u043b\u0435\u0435, \u0441\u0442\u0435\u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430, \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0438 \u043a\u0440\u0438\u0432\u0438\u0437\u043d\u0430. \u0422.\u0435. \u0441\u0442\u0435\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u044f\u043c\u043e\u0439, \u043d\u043e \u0438 \u0432\u044b\u043f\u0443\u043a\u043b\u043e\u0439.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0432\u0435\u0440\u043d\u043e, \u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f dwg \u0444\u0430\u0439\u043b \u0441 \u043e\u0434\u043d\u043e\u0439 \u0436\u0435\u043b\u0442\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0435\u043d\u043e\u0439. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e \u0444\u0430\u0439\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u044d\u043c\u043f\u043b\u0430 \u0438\u0437 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0438 Teigha, \u043d\u043e \u0432 ACA \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u043d \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0436\u0435.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/3ce\/5b8\/cf1\/3ce5b8cf115442d7900f19079e649fb1.jpg\"\/><br \/>  \u041f\u0440\u0430\u0432\u0434\u0430 \u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b \u043a\u0430\u043c\u0435\u0440\u0443 \u0432 3D \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434 \u0441\u0432\u0435\u0440\u0445\u0443.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0436 4 \u0441\u0442\u0435\u043d\u044b, \u043f\u0440\u0438\u0447\u0435\u043c \u043e\u0434\u043d\u0443 \u0432\u044b\u043f\u0443\u043a\u043b\u0443\u044e:  <\/p>\n<pre><code class=\"cpp\">OdDbObjectId idWall1 = add_wall( pDatabase, idWallStyle,     OdGePoint2d( 0,     0 ), OdGePoint2d(   0, 110 ) );   OdDbObjectId idWall2 = add_wall( pDatabase, idWallStyle,     OdGePoint2d( 0,   110 ), OdGePoint2d( 110, 110 ) );   OdDbObjectId idWall3 = add_wall( pDatabase, idWallStyle,     OdGePoint2d( 110, 110 ), OdGePoint2d( 110,   0 ) );   OdDbObjectId idWall4 = add_wall( pDatabase, idWallStyle,     OdGePoint2d( 110,   0 ), OdGePoint2d(   0,   0 ), -1 ); <\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u0435\u043a\u0438\u0439 \u0437\u0430\u0447\u0430\u0442\u043e\u043a \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u0434\u043e\u043c\u0438\u043a\u0430:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a64\/600\/616\/a64600616b584babade23fc6b3950c35.jpg\"\/><br \/>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0441\u0442\u0435\u043d\u044b \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u0430 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0441\u044f \u043f\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u0442\u043e\u0447\u043a\u0430\u0445 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c. \u042d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 TA, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f cleanup \u0441\u0442\u0435\u043d.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">OdDbObjectId add_wall_style( OdDbDatabasePtr pDatabase ) {   OdDbObjectId idResult =     AECDbWallStyle::CreateAECObject( pDatabase, OD_T(&quot;Wall Style Created By Teigha(R) Architecture&quot;) );    AECDbWallStylePtr pWallStyle =     idResult.openObject( OdDb::kForWrite );    pWallStyle-&gt;SetDescription( OD_T(&quot;Wall Style Description&quot;) );   pWallStyle-&gt;SetDictRecordDescription( OD_T(&quot;Dialog caption&quot;) );    pWallStyle-&gt;SetWallWidth( 4 );   pWallStyle-&gt;SetWallWidthUsed( true );    pWallStyle-&gt;SetBaseHeight( 110 );   pWallStyle-&gt;SetBaseHeightUsed( true );    pWallStyle-&gt;SetJustification( AECDefs::ewjLeft );   pWallStyle-&gt;SetJustificationUsed( true );    pWallStyle-&gt;SetAutomaticCleanups( true );   pWallStyle-&gt;SetAutomaticCleanupsUsed( true );    pWallStyle-&gt;SetCleanupRadius( 4 );   pWallStyle-&gt;SetCleanupRadiusUsed( true );    pWallStyle-&gt;SetFloorLineOffset( 3 );   pWallStyle-&gt;SetFloorLineOffsetUsed( false );    pWallStyle-&gt;SetRoofLineOffset( -3 );   pWallStyle-&gt;SetRoofLineOffsetUsed( false );    AECDisplayManager cDM( pDatabase );   AECDbDispPropsWallModelPtr pOverrideModel =     AECDbDispPropsWallModel::cast( pWallStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepWallModel::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverrideModel.isNull() )   {     pOverrideModel-&gt;SetIsDisplayOpeningEndcaps( false );     pOverrideModel-&gt;GetBoundaryCompByIndex( 0 )-&gt;SetColor( colorAt( 4 ) );   }    AECDbDispPropsWallPtr pOverridePlan =     AECDbDispPropsWall::cast( pWallStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepWallPlan::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverridePlan.isNull() )   {     pOverridePlan-&gt;GetBoundaryCompByIndex( 0 )-&gt;SetColor( colorAt( 4 ) );   }    return( pWallStyle-&gt;objectId() ); }  OdDbObjectId add_wall( OdDbDatabasePtr pDatabase, const OdDbObjectId& idStyle,                       const OdGePoint2d& ptStart, const OdGePoint2d& ptEnd, double dBulge = 0 ) {   AECDbWallPtr pWall =     AECDbWall::CreateAECObject( pDatabase-&gt;getModelSpaceId(), idStyle );    pWall-&gt;Set( ptStart, ptEnd, dBulge );   pWall-&gt;SetDescription( OD_T(&quot;A Wall&quot;) );    return( pWall-&gt;objectId() ); }  int wmain(int argc, wchar_t* argv[]) {    \/\/ Initialize TD with system services.   \/\/ And create single instance of hostapp services   \/\/ for TD database creation.   OdStaticRxObject&lt;MyServices&gt; svcs;   odInitialize( &svcs );   odgsInitialize();    \/\/ Loading of all public Teigha Architecture DRX modules.   \/\/ Note that not all calls are necessary for some of them depend on others   \/\/ but here we list all of them.   \/\/   \/\/ If a program uses TD doesn't modify or create binary files   \/\/ it may not load any of DRX modules on start because they will be loaded automatically.    \/\/ But if a program modifies or creates binary files then it is highly recommended   \/\/ to load all DRX modules program uses.   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecBase&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecArchBase&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecArchDACHBase&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecScheduleData&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecSchedule&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecStructureBase&quot;) );    \/\/ Create empty TD database.   OdDbDatabasePtr pDatabase = svcs.createDatabase();;      \/\/ Initialize database with default Teigha Architecture content.   AECArchDACHBaseDatabase( pDatabase ).Init();   AECScheduleDatabase( pDatabase ).Init();   AECStructureBaseDatabase( pDatabase ).Init();     init_display_system( pDatabase );        OdDbObjectId idWallStyle = add_wall_style( pDatabase );    OdDbObjectId idWall1 = add_wall( pDatabase, idWallStyle,     OdGePoint2d( 0,     0 ), OdGePoint2d(   0, 110 ) );   OdDbObjectId idWall2 = add_wall( pDatabase, idWallStyle,     OdGePoint2d( 0,   110 ), OdGePoint2d( 110, 110 ) );   OdDbObjectId idWall3 = add_wall( pDatabase, idWallStyle,     OdGePoint2d( 110, 110 ), OdGePoint2d( 110,   0 ) );   OdDbObjectId idWall4 = add_wall( pDatabase, idWallStyle,     OdGePoint2d( 110,   0 ), OdGePoint2d(   0,   0 ), -1 );     \/\/ Perform &quot;zoom extents&quot; on model space.   {     OdDbViewportTablePtr pVT =       pDatabase-&gt;getViewportTableId().openObject( OdDb::kForRead );     OdDbViewportTableRecordPtr pV =       pVT-&gt;getActiveViewportId().openObject( OdDb::kForWrite );     pV-&gt;zoomExtents();   }    OdWrFileBuf cBuffer( &quot;H:\\\\TA_test.dwg&quot; );   pDatabase-&gt;writeFile( &cBuffer, OdDb::kDwg, OdDb::kDHL_CURRENT );      odgsUninitialize();   odUninitialize();    return 0; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <b>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043a\u043e\u043d \u0432 \u0447\u0435\u0440\u0442\u0435\u0436<\/b><br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0430\u0448 \u0434\u043e\u043c\u0438\u043a \u043e\u043a\u043d\u0430. \u0421 \u043e\u043a\u043d\u0430\u043c\u0438 \u043b\u043e\u0433\u0438\u043a\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u0434\u0432\u0435\u0440\u044f\u043c: \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0442\u0438\u043b\u044c \u043e\u043a\u043e\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0447\u0435\u0440\u0442\u0435\u0436, \u0430 \u043f\u043e\u0442\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b-\u043e\u043a\u043d\u0430 \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u0438\u043b\u044f.   <\/p>\n<pre><code class=\"cpp\">OdDbObjectId idWindowStyle =  add_window_style( pDatabase ); <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 add_window_style<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\"> OdDbObjectId add_window_style( OdDbDatabasePtr pDatabase ) {   OdDbObjectId idWStyle =     AECDbWindowStyle::CreateAECObject( pDatabase, OD_T(&quot;Window Style Created By Teigha(R) Architecture&quot;) );    AECDbWindowStylePtr pWindowStyle = idWStyle.openObject( OdDb::kForWrite );    pWindowStyle-&gt;SetDescription( OD_T(&quot;Window Style Description&quot;) );   pWindowStyle-&gt;SetDictRecordDescription( OD_T(&quot;Dialog caption&quot;) );   pWindowStyle-&gt;SetAutoAdjustToWidthOfWall( true );   pWindowStyle-&gt;SetFrameWidth( 2 );   pWindowStyle-&gt;SetFrameDepth( 5 );   pWindowStyle-&gt;SetSashWidth( 2 );   pWindowStyle-&gt;SetSashDepth( 3 );   pWindowStyle-&gt;SetGlassThickness( 1 );   pWindowStyle-&gt;SetWindowType( AECDefs::ewtGlider );   pWindowStyle-&gt;SetWindowShape( AECDefs::esRectangular );    AECDisplayManager cDM( pDatabase );   AECDbDispPropsWindowPtr pOverrideModel =     AECDbDispPropsWindow::cast( pWindowStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepWindowModel::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverrideModel.isNull() )   {     pOverrideModel-&gt;GetFrameComp()-&gt;SetColor( colorAt( 1 ) );     pOverrideModel-&gt;GetSashComp()-&gt;SetColor( colorAt( 2 ) );     pOverrideModel-&gt;GetGlassComp()-&gt;SetColor( colorAt( 3 ) );   }    AECDbDispPropsWindowPtr pOverridePlan =     AECDbDispPropsWindow::cast( pWindowStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepWindowPlan::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverridePlan.isNull() )   {     pOverridePlan-&gt;GetFrameComp()-&gt;SetColor( colorAt( 1 ) );     pOverridePlan-&gt;GetSashComp()-&gt;SetColor( colorAt( 2 ) );     pOverridePlan-&gt;GetGlassComp()-&gt;SetColor( colorAt( 3 ) );   }    return( pWindowStyle-&gt;objectId() ); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043a\u043e\u0434\u0430, \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 AECDbWindowStyle \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0431\u0430\u0437\u0443. \u0414\u0430\u043b\u0435\u0435, \u0441\u0442\u0438\u043b\u044e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 (\u0445\u043e\u0442\u044f \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435), \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0446\u0432\u0435\u0442\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f 2D \u0438 3D \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2013 \u044d\u0442\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u043e\u043a\u043d\u0430: \u0441\u0442\u0435\u043a\u043b\u043e, \u0440\u0430\u043c\u0430, \u0441\u0442\u0432\u043e\u0440\u043a\u0430.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u043a\u043d\u043e \u043a \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0435\u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 add_window:  <\/p>\n<pre><code class=\"cpp\">OdDbObjectId idWindow01 = add_window( pDatabase, idWindowStyle, idWall1, 10, 10 ); <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 add_window<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\"> \/\/ Inserts a window into a database using the specified window style. \/\/ If idWall parameter is not null it also attaches the window to the wall. \/\/ Returns Object ID of newly created window. OdDbObjectId add_window( OdDbDatabasePtr pDatabase, const OdDbObjectId& idStyle, const OdDbObjectId& idWall,                         double dOffsetAlongX, double dOffsetAlongZ ) {   AECDbWindowPtr pWindow = AECDbWindow::CreateAECObject( pDatabase-&gt;getModelSpaceId(), idStyle );    pWindow-&gt;SetRise( 10 );   pWindow-&gt;SetWidth( 40 );   pWindow-&gt;SetHeight( 40 );    pWindow-&gt;SetOpenPercent( 60 );   pWindow-&gt;SetMeasureTo( AECDefs::eomtOutsideFrame );   pWindow-&gt;SetLeaf( 10 );    if ( !idWall.isNull() )   {     pWindow-&gt;AttachWallAnchor( idWall );      AECDbAnchorEntToCurvePtr pAnchor = pWindow-&gt;GetAnchor().openObject( OdDb::kForWrite );     pAnchor-&gt;GetXParams()-&gt;SetOffset( dOffsetAlongX );            pAnchor-&gt;GetZParams()-&gt;SetOffset( dOffsetAlongZ );   }    return( pWindow-&gt;objectId() ); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f add_window() \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 add_wall() \u0441 \u043e\u0434\u043d\u0438\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435\u043c: \u0442\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 anchor.<br \/>  \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 AECDbWindow \u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0435\u0433\u043e \u0432 model space \u0431\u0430\u0437\u044b. \u0417\u0430\u0442\u0435\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443 AECDbWindow. <br \/>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u043a\u043d\u043e \u0432 \u0441\u0442\u0435\u043d\u0443. \u0421\u0442\u0435\u043d\u0443 \u0438 \u043e\u043a\u043d\u043e \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0441\u043e\u0431\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0439 \u043e\u0442 AECDbAnchorEntToCurve. \u041e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u0432\u0434\u043e\u043b\u044c \u043e\u0441\u0435\u0439 x, y, z \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u0442\u0435\u043d\u044b \u0434\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u043a\u043d\u0430. \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 AttachWallAnchor() \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0431\u0430\u0437\u0443. \u0421\u0430\u043c\u0430 \u0441\u0442\u0435\u043d\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043b\u0438 \u0432 \u043d\u0435\u0435 \u043e\u043a\u043d\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0430\u043d\u043a\u043e\u0440\u0430 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u2013 relation graph. Relation graph \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u2013 \u043a\u0442\u043e \u043a \u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d, \u043a\u0442\u043e \u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442, \u043a\u0442\u043e \u043a\u0435\u043c \u0432\u043b\u0430\u0434\u0435\u0435\u0442. \u041f\u0440\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0435\u043d\u044b relation graph \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0442\u043e\u043c \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 AECDbWall \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f, \u043f\u0440\u043e\u0439\u0434\u0435\u0442 \u043f\u043e \u0432\u0441\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c \u0438 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 AECDbWindow). \u0422\u0430\u043a, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0434\u0432\u0438\u043d\u0443\u043b\u0438 \u0441\u0442\u0435\u043d\u0443, \u0442\u043e \u043e\u043a\u043d\u0430 \u043f\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0435\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 relation graph-\u0430. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u0442\u043e\u043c\u0443 \u0433\u0440\u0430\u0444\u0443 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u041e\u043a\u043d\u043e, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0437\u043d\u0430\u0435\u0442 \u043a \u043a\u043e\u043c\u0443 \u043e\u043d\u043e \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043e, \u0442\u043a \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0430\u043d\u043a\u043e\u0440.<\/p>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u0432\u044b\u0448\u043b\u043e:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/1f6\/141\/31c\/1f614131caea4259bde964ee6e0fdd2d.jpg\"\/><\/p>\n<p>  \u042f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b \u0446\u0432\u0435\u0442 \u0441\u0442\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043e\u043a\u043d\u043e \u0431\u044b\u043b\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u0438\u0434\u043d\u043e. \u0412 \u043a\u043e\u0434\u0435 \u0443 \u0432\u0430\u0441 \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u0435\u043d\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0433\u043e\u043b\u0443\u0431\u044b\u0435, \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u043b \u0446\u0432\u0435\u0442\u0430 \u043f\u043e \u0445\u043e\u0434\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438.<br \/>  \u0412 TA \u0435\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0430 \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0438\u043b\u0435\u0439 \u0438 \u0442\u0438\u043f\u043e\u0432 \u043e\u043a\u043e\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"cpp\">enum WindowType     {         ewtPicture          =  1,         ewtSingleHung       =  2,         ewtDoubleHung       =  3,         ewtAwningTransom    =  4,         ewtDoubleCasement   =  5,         ewtGlider           =  6,         ewtHopperTransom    =  7,         ewtPassThrough      =  8,         ewtSingleCasement   =  9,         ewtSingleHopper     = 10,         ewtSingleAwning     = 11,         ewtVerticalPivot    = 12,         ewtHorizontalPivot  = 13,         ewtUnevenSingleHung = 14,         ewtUnevenDoubleHung = 15     }; enum Shape     {         esRectangular       =  0,         esRound             =  1,         esHalfRound         =  2,         esQuarterRound      =  3,         esOval              =  4,         esArch              =  5,         esTrapezoid         =  6,         esGothic            =  7,         esIsoscelesTriangle =  8,         esRightTriangle     =  9,         esPeakPentagon      = 10,         esOctagon           = 11,         esHexagon           = 12,         esCustom            = 13     }; <\/code><\/pre>\n<p>  \u041c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 AECDefs::ewtGlider \u0438 AECDefs::esRectangular, \u043d\u043e, \u043a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0444\u043e\u0440\u043c \u043c\u043d\u043e\u0433\u043e. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0442\u0438\u043f \u043e\u043a\u043d\u0430 \u0441\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u043c \u043d\u0430 \u0441\u0442\u0435\u043a\u043b\u0430\u0445 \u0438 \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u0441\u0442\u0432\u043e\u0440\u043a\u0430\u043c\u0438. \u0418 \u0432\u0441\u0435 \u044d\u0442\u043e \u043d\u0435 \u043d\u0430\u0434\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0438\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e, \u043d\u0430\u0434\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u0438\u043b\u0438 \u0441\u0442\u0438\u043b\u044e.<br \/>  \u0412\u043e\u043e\u0431\u0449\u0435, \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b TA \u0441\u043b\u043e\u0436\u043d\u044b \u0438 \u0438\u043c\u0435\u044e\u0442 \u043c\u0430\u0441\u0441\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a. \u042d\u0442\u043e \u0434\u0430\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0448\u0438\u0440\u043e\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u044f\u043c\u043e \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u043a\u043d\u0430 \u0432\u043e \u0432\u0441\u0435 \u043f\u0440\u044f\u043c\u044b\u0435 \u0441\u0442\u0435\u043d\u044b:  <\/p>\n<pre><code class=\"cpp\">OdDbObjectId idWindow01 = add_window( pDatabase, idWindowStyle, idWall1, 10, 10 );   OdDbObjectId idWindow02 = add_window( pDatabase, idWindowStyle, idWall1, 60, 10 );   OdDbObjectId idWindow03 = add_window( pDatabase, idWindowStyle, idWall1, 10, 60 );   OdDbObjectId idWindow04 = add_window( pDatabase, idWindowStyle, idWall1, 60, 60 );    OdDbObjectId idWindow05 = add_window( pDatabase, idWindowStyle, idWall2, 10, 10 );   OdDbObjectId idWindow06 = add_window( pDatabase, idWindowStyle, idWall2, 60, 10 );   OdDbObjectId idWindow07 = add_window( pDatabase, idWindowStyle, idWall2, 10, 60 );   OdDbObjectId idWindow08 = add_window( pDatabase, idWindowStyle, idWall2, 60, 60 );    OdDbObjectId idWindow09 = add_window( pDatabase, idWindowStyle, idWall3, 10, 10 );   OdDbObjectId idWindow10 = add_window( pDatabase, idWindowStyle, idWall3, 60, 10 );   OdDbObjectId idWindow11 = add_window( pDatabase, idWindowStyle, idWall3, 10, 60 );   OdDbObjectId idWindow12 = add_window( pDatabase, idWindowStyle, idWall3, 60, 60 ); <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b30\/ff5\/ddc\/b30ff5ddc2744a43bda2f3129244b432.jpg\"\/><br \/>  \u042f \u043d\u0435 \u0441\u0442\u0430\u043b \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u0434, \u043d\u043e \u043a\u0430\u0436\u0434\u044b\u043c \u043e\u043a\u043d\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e: \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0435\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f, \u0446\u0432\u0435\u0442\u0430 \u0438 \u0442\u0434. \u0410 \u0435\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0445 \u0441\u0442\u0438\u043b\u044c, \u0442\u043e \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0442\u0440\u0430\u0437\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u043d\u0438\u0445 \u0440\u0430\u0437\u043e\u043c.<\/p>\n<p>  <b>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0432\u0435\u0440\u0435\u0439 \u0432 \u0447\u0435\u0440\u0442\u0435\u0436<\/b><br \/>  \u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u0432\u0435\u0440\u044c. \u0414\u043b\u044f \u0434\u0432\u0435\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c 2D \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0434\u043b\u044f \u043f\u043e\u043b\u043e\u0442\u043d\u0430 (\u0441\u0442\u0432\u043e\u0440\u043a\u0430 \u0441 \u0434\u044b\u0440\u043a\u043e\u0439-\u043e\u043a\u043e\u0448\u043a\u043e\u043c), \u0437\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0442\u0438\u043b\u044c \u0441 \u0442\u0430\u043a\u0438\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u043c, \u0430 \u043f\u043e\u0442\u043e\u043c \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b-\u0434\u0432\u0435\u0440\u0438 \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u0438\u043b\u044f. \u041d\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u0441\u0442\u0438\u043b\u0438. \u0414\u0432\u0435\u0440\u0438, \u043a\u0430\u043a \u0438 \u043e\u043a\u043d\u0430 ( \u0438 \u0432\u0441\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0435\u043c\u044b ) \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u043a \u0441\u0442\u0435\u043d\u0430\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u043a\u043e\u0440\u0430.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 add_profile_def, add_door_style, add_door<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\"> \/\/ Inserts profile definition into a database. \/\/ Returns Object ID of newly created profile definition. OdDbObjectId add_profile_def( OdDbDatabasePtr pDatabase ) {   OdDbObjectId idProfDef =     AECDbProfileDef::CreateAECObject( pDatabase, OD_T(&quot;Profile Definition Created By Teigha(R) Architecture&quot;) );    AECDbProfileDefPtr pProfileDefinition = idProfDef.openObject( OdDb::kForWrite );    AECGe::Profile2D cProfile;   cProfile.resize( 2 );    cProfile[ 0 ].appendVertex( OdGePoint2d( 0, 0 ) );   cProfile[ 0 ].appendVertex( OdGePoint2d( 1, 0 ) );   cProfile[ 0 ].appendVertex( OdGePoint2d( 1, 1 ) );   cProfile[ 0 ].appendVertex( OdGePoint2d( 0, 1 ) );   cProfile[ 0 ].setClosed();    \/\/ Forces the contour to be counter-clockwise.   \/\/ So if the contour is already ccw this call is not needed.   cProfile[ 0 ].makeCCW();    cProfile[ 1 ].appendVertex( OdGePoint2d( 0.2, 0.2 ) );   cProfile[ 1 ].appendVertex( OdGePoint2d( 0.2, 0.8 ) );   cProfile[ 1 ].appendVertex( OdGePoint2d( 0.8, 0.8 ) );   cProfile[ 1 ].appendVertex( OdGePoint2d( 0.8, 0.2 ) );   cProfile[ 1 ].setClosed();    cProfile[ 1 ].makeCCW( false );    pProfileDefinition-&gt;GetProfile()-&gt;Init( cProfile );    return( pProfileDefinition-&gt;objectId() ); }  \/\/ Inserts a door style into a database. \/\/ Returns Object ID of newly created door style. OdDbObjectId add_door_style( OdDbDatabasePtr pDatabase, const OdDbObjectId& idProfile ) {   OdDbObjectId idDoorStyle =     AECDbDoorStyle::CreateAECObject( pDatabase, OD_T(&quot;Door Style Created By Teigha(R) Architecture&quot;) );   AECDbDoorStylePtr pDoorStyle = idDoorStyle.openObject( OdDb::kForWrite );    pDoorStyle-&gt;SetDescription( OD_T(&quot;Door Style Description&quot;) );   pDoorStyle-&gt;SetDictRecordDescription( OD_T(&quot;Dialog caption&quot;) );   pDoorStyle-&gt;SetAutoAdjustToWidthOfWall( true );   pDoorStyle-&gt;SetFrameWidth( 2 );   pDoorStyle-&gt;SetFrameDepth( 5 );   pDoorStyle-&gt;SetStopWidth( 2 );   pDoorStyle-&gt;SetStopDepth( 3 );   pDoorStyle-&gt;SetShapeAndType( AECDefs::esCustom, AECDefs::edtSingle );   pDoorStyle-&gt;SetProfile( idProfile );   pDoorStyle-&gt;SetGlassThickness( 1 );    AECDisplayManager cDM( pDatabase );   AECDbDispPropsDoorPtr pOverrideModel =     AECDbDispPropsDoor::cast( pDoorStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepDoorModel::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverrideModel.isNull() )   {     pOverrideModel-&gt;GetPanelComp()-&gt;SetColor( colorAt( 1 ) );     pOverrideModel-&gt;GetFrameComp()-&gt;SetColor( colorAt( 2 ) );     pOverrideModel-&gt;GetStopComp()-&gt;SetColor( colorAt( 3 ) );     pOverrideModel-&gt;GetSwingComp()-&gt;SetColor( colorAt( 4 ) );     pOverrideModel-&gt;GetGlassComp()-&gt;SetColor( colorAt( 5 ) );   }    AECDbDispPropsDoorPtr pOverridePlan =     AECDbDispPropsDoor::cast( pDoorStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepDoorPlan::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverridePlan.isNull() )   {     pOverridePlan-&gt;GetPanelComp()-&gt;SetColor( colorAt( 1 ) );     pOverridePlan-&gt;GetFrameComp()-&gt;SetColor( colorAt( 2 ) );     pOverridePlan-&gt;GetStopComp()-&gt;SetColor( colorAt( 3 ) );     pOverridePlan-&gt;GetSwingComp()-&gt;SetColor( colorAt( 4 ) );     pOverridePlan-&gt;GetDirectionComp()-&gt;SetColor( colorAt( 5 ) );   }    return( pDoorStyle-&gt;objectId() ); }   \/\/ Inserts a door into a database using the specified door style. \/\/ If idWall parameter is not null it also attaches the door to the wall. \/\/ Returns Object ID of newly created door. OdDbObjectId add_door( OdDbDatabasePtr pDatabase, const OdDbObjectId& idStyle, const OdDbObjectId& idWall,                       double dOffsetAlongX, double dOffsetAlongZ ) {   AECDbDoorPtr pDoor = AECDbDoor::CreateAECObject( pDatabase-&gt;getModelSpaceId(), idStyle );    pDoor-&gt;SetRise( 10 );   pDoor-&gt;SetWidth( 40 );   pDoor-&gt;SetHeight( 50 );    pDoor-&gt;SetOpenPercent( 20 );   pDoor-&gt;SetMeasureTo( AECDefs::eomtOutsideFrame );   pDoor-&gt;SetLeaf( 10 );    if ( !idWall.isNull() )   {     pDoor-&gt;AttachWallAnchor( idWall );      AECDbAnchorEntToCurvePtr pAnchor = pDoor-&gt;GetAnchor().openObject( OdDb::kForWrite );     pAnchor-&gt;GetXParams()-&gt;SetOffset( dOffsetAlongX );     pAnchor-&gt;GetZParams()-&gt;SetOffset( dOffsetAlongZ );   }    return( pDoor-&gt;objectId() ); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0418 \u0434\u043e\u043f\u0438\u0448\u0435\u043c \u0432 main:  <\/p>\n<pre><code class=\"cpp\">AECDbWallPtr pWall = idWall4.openObject( OdDb::kForRead );   double dLength = pWall-&gt;GetLength();   double dOWidth = 40;   double dL1 = 10;   double dL3 = dLength - dOWidth - 10;   double dL2 = dL1 + dOWidth + (dL3 - (dL1 + 2 * dOWidth)) \/ 2;    OdDbObjectId idDoor     = add_door   ( pDatabase, idDoorStyle,   idWall4, dL2, 0  ); <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u043d\u043e\u0432\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442: \u043c\u044b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043d\u0443 \u0438 \u0431\u0435\u0440\u0435\u043c \u0435\u0435 \u0434\u043b\u0438\u043d\u0443 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f. <\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u0434\u0432\u0435\u0440\u044c \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u0432 \u043a\u0440\u0443\u0433\u043b\u0443\u044e \u0441\u0442\u0435\u043d\u0443:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/422\/15b\/2a8\/42215b2a82ce4c7a9f67c69104fb582b.jpg\"\/><\/p>\n<p>  \u0412\u0441\u0442\u0430\u0432\u0438\u043c \u0435\u0449\u0435 \u043e\u043a\u043e\u043d\u0430 \u0432 \u043a\u0440\u0443\u0433\u043b\u0443\u044e \u0441\u0442\u0435\u043d\u0443:  <\/p>\n<pre><code class=\"cpp\">OdDbObjectId idWindow13 = add_window ( pDatabase, idWindowStyle, idWall4, dL1, 10 );   OdDbObjectId idWindow14 = add_window ( pDatabase, idWindowStyle, idWall4, dL3, 10 );   OdDbObjectId idWindow15 = add_window ( pDatabase, idWindowStyle, idWall4, dL1, 60 );   OdDbObjectId idWindow16 = add_window ( pDatabase, idWindowStyle, idWall4, dL2, 60 );   OdDbObjectId idOpening  = add_window ( pDatabase, idWindowStyle, idWall4, dL3, 60 ); <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0434\u044b\u0440\u044f\u0432\u044b\u0439 \u0434\u043e\u043c\u0438\u043a \u0431\u0435\u0437 \u043a\u0440\u044b\u0448\u0438 \u0438 \u043f\u043e\u043b\u0430:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/cf0\/7ec\/061\/cf07ec061e4d424baa7236a26b9e8671.jpg\"\/><\/p>\n<p>  <b>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0440\u044b\u0448\u0438 \u0432 \u0447\u0435\u0440\u0442\u0435\u0436<\/b><br \/>  \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e add_roof()  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 roof<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\"> void add_roof( OdDbDatabasePtr pDatabase ) {   AECGe::Profile2D cProfile;   cProfile.resize( 1 );   cProfile.front().appendVertex( OdGePoint2d( 0,   0   )    );   cProfile.front().appendVertex( OdGePoint2d( 0, 110   )    );   cProfile.front().appendVertex( OdGePoint2d( 110, 110   )    );   cProfile.front().appendVertex( OdGePoint2d( 110, 0 ), -1   );   cProfile.front().setClosed();   cProfile.front().makeCCW();      AECDbRoofPtr pRoof =     AECDbRoof::CreateAECObject( pDatabase-&gt;getModelSpaceId() );    \/\/ Initialize roof profile.   \/\/ By default all edges of Roof Profile have single slope of 45 degrees.   pRoof-&gt;GetProfile()-&gt;Init( cProfile );    pRoof-&gt;SetThickness( 2 );    \/\/\/\/ Manually modify Roof Segments.   AECGeRingSubPtr pRoofLoop = pRoof-&gt;GetProfile()-&gt;GetRingByIndex( 0 );   if ( !pRoofLoop.isNull() )   {     OdUInt32 i, iSize = pRoofLoop-&gt;GetSegmentCount();     for ( i = 0; i &lt; iSize; i++ )     {       AECGeRoofSegmentSubPtr pSeg = pRoofLoop-&gt;GetSegments()-&gt;GetAt( i );       pSeg-&gt;SetFaceCount(1);       pSeg-&gt;SetFaceHeightByIndex(0, 110);       pSeg-&gt;SetBaseHeight(0);       pSeg-&gt;SetOverhang(10.0);       pSeg-&gt;SetFaceSlopeByIndex(0, OdaPI4);       pSeg-&gt;SetSegmentCount(10);     }   }    pRoof-&gt;setColorIndex( 3 );   } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041a\u0440\u044b\u0448\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0445\u043e\u0434\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0438. \u0412\u044b\u0437\u043e\u0432 makeCCW() \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0445\u043e\u0434\u0430, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u043c. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u0442\u043a \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0436\u0434\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0438 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<br \/>  \u041f\u0440\u043e\u0444\u0438\u043b\u044c \u0443 \u043d\u0430\u0441 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0435\u0439 \u0441\u0442\u0435\u043d. \u0414\u0430\u043b\u0435\u0435, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0440\u0435\u0437\u043a\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043a\u043b\u043e\u043d \u0441\u043a\u0430\u0442\u0430 \u043a\u0440\u044b\u0448\u0438, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0435\u0439\u0441\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0441\u043a\u0430\u0442, \u043f\u043e\u0434\u044a\u0435\u043c \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043a\u0430\u0442\u0430 \u043f\u043e Z \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 OXY (SetFaceHeightByIndex), \u0438 \u0441\u0432\u0435\u0441 \u043a\u0440\u044b\u0448\u0438 (overhang). SetSegmentCount() \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0442\u0440\u0435\u0437\u043a\u043e\u0432 \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u043a\u0440\u0438\u0432\u0438\u0437\u043d\u0430. \u042d\u0442\u0430 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u0437\u0430\u0434\u0430\u0435\u0442 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u0438 \u2013 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u044f\u043c\u044b\u0445 \u043e\u0442\u0440\u0435\u0437\u043a\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u043a\u0440\u0443\u0433\u043b\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442.<\/p>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0442\u0430\u043a\u0430\u044f \u043a\u0440\u044b\u0448\u0430:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/ce9\/ebb\/b71\/ce9ebbb71b01416880ec69380792579e.jpg\"\/><\/p>\n<p>  \u0412\u0430\u0440\u0438\u0430\u0446\u0438\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u0440\u044b\u0448 \u043c\u043d\u043e\u0433\u043e \u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0440\u044b\u0448\u0443 \u043f\u043e\u0447\u0442\u0438 \u043b\u044e\u0431\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u2013 \u0434\u0432\u0443\u0441\u043a\u0430\u0442\u043d\u044b\u0435, \u043c\u043d\u043e\u0433\u043e\u0441\u043a\u0430\u0442\u043d\u044b\u0435, \u0448\u0430\u0442\u0440\u043e\u0432\u044b\u0435 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043a\u0430\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 RoofSlab \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<p>  <b>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u044f \u0432 \u0447\u0435\u0440\u0442\u0435\u0436<\/b><br \/>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0445\u043e\u0442\u044f\u0431\u044b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u044e \u043f\u043e\u043b\u0430\\\u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 slab ( \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u0435 ). \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e add_slab  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 add_slab<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\"> void add_slab( OdDbDatabasePtr pDatabase ) {   OdDbObjectId idStyle =     AECDbSlabStyle::GetAECObject( pDatabase, OD_T(&quot;Slab Style&quot;) );   if ( idStyle.isNull() )   {     idStyle = AECDbSlabStyle::CreateAECObject( pDatabase, OD_T(&quot;Slab Style&quot;) );   }    AECDbSlabStylePtr pStyle =     idStyle.openObject( OdDb::kForWrite );   if ( !pStyle.isNull() )   {     pStyle-&gt;GetComponents()-&gt;Clear();      AECSlabStyleCompPtr pCmp = AECSlabStyleComp::createObject();     pCmp-&gt;SetName( OD_T(&quot;Base&quot;) );     pCmp-&gt;GetPosition()-&gt;GetThickness()-&gt;SetUseBaseValue( false );     pCmp-&gt;GetPosition()-&gt;GetThickness()-&gt;SetBaseValue( 6 );     pCmp-&gt;GetPosition()-&gt;GetThicknessOffset()-&gt;SetUseBaseValue( false );     pCmp-&gt;GetPosition()-&gt;GetThicknessOffset()-&gt;SetBaseValue( - 6 );     pStyle-&gt;GetComponents()-&gt;Insert( pCmp );   }    AECDbSlabPtr pSlab =     AECDbSlab::CreateAECObject( pDatabase-&gt;getModelSpaceId(), idStyle );    {     AECGe::Profile2D cBase;     cBase.resize( 1 );     cBase.front().appendVertex( OdGePoint2d( -5,   -5   ), 1 );     cBase.front().appendVertex( OdGePoint2d( 115, -5   ) );     cBase.front().appendVertex( OdGePoint2d( 115, 115 ) );     cBase.front().appendVertex( OdGePoint2d( -5,   115 ) );     cBase.front().setClosed();     cBase.front().makeCCW();      pSlab-&gt;GetSlabFace()-&gt;Init( cBase );   }    pSlab-&gt;SetThickness( 5 );    pSlab-&gt;SetVerticalOffset( 0 );   pSlab-&gt;SetHorizontalOffset( 0 );    pSlab-&gt;SetPivotPoint( OdGePoint3d::kOrigin );    AECDisplayManager cDM( pDatabase );   AECDbDispPropsSlabPtr pOverrideModel =     AECDbDispPropsSlab::cast( pSlab-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepSlabModel::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverrideModel.isNull() )   {     pOverrideModel-&gt;GetBoundaryCompByIndex( 0 )-&gt;SetColor( colorAt( 1 ) );     pOverrideModel-&gt;GetBaselineComp()-&gt;SetColor( colorAt( 4 ) );     pOverrideModel-&gt;GetPivotPointComp()-&gt;SetColor( colorAt( 5 ) );     pOverrideModel-&gt;GetFasciaComp()-&gt;SetColor( colorAt( 6 ) );     pOverrideModel-&gt;GetSoffitComp()-&gt;SetColor( colorAt( 7 ) );     pOverrideModel-&gt;GetShrinkWrapBodyComp()-&gt;SetColor( colorAt( 8 ) );   }    AECDbDispPropsSlabPlanPtr pOverridePlan =     AECDbDispPropsSlabPlan::cast( pSlab-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepSlabPlan::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverridePlan.isNull() )   {     pOverridePlan-&gt;SetIsOverrideCutPlane( false );     pOverridePlan-&gt;GetHatchComp()-&gt;SetColor( colorAt( 1 ) );     pOverridePlan-&gt;GetBelowCutPlaneBodyComp()-&gt;SetColor( colorAt( 2 ) );     pOverridePlan-&gt;GetAboveCutPlaneBodyComp()-&gt;SetColor( colorAt( 3 ) );     pOverridePlan-&gt;GetBelowCutPlaneOutlineComp()-&gt;SetColor( colorAt( 4 ) );     pOverridePlan-&gt;GetAboveCutPlaneOutlineComp()-&gt;SetColor( colorAt( 5 ) );   } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0438\u043b\u044c \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u044f \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b. \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043a\u0443\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u044f \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0430\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0430\u043a \u0442\u043e\u043b\u0449\u0438\u043d\u0430, \u043f\u043e\u0434\u044a\u0435\u043c \u043d\u0430\u0434 OXY, \u0438\u043c\u044f, \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u0438\u043d\u0434\u0435\u043a\u0441 \u0438 \u043f\u0440. \u041f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0441\u0432\u043e\u0438\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0438\u0445 \u0440\u0430\u0437\u043d\u044b\u0439 \u043e\u0442\u0441\u0442\u0443\u043f \u043e\u0442 OXY, \u0442\u043e \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442-\u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u0442\u0438\u043b\u044f \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u043b\u044b \u0438 \u043f\u043e\u0442\u043e\u043b\u043a\u0438 \u0432 \u043c\u043d\u043e\u0433\u043e\u044d\u0442\u0430\u0436\u043d\u043e\u043c \u0437\u0434\u0430\u043d\u0438\u0438.<br \/>  \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0442\u0438\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0444\u043e\u0440\u043c\u0443 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u044f. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c slab, \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u043c \u043a\u0430\u043a \u043d\u0438\u0437 \u0441\u0442\u0435\u043d, \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u043c \u043f\u043e \u043a\u0440\u0430\u044f\u043c.<br \/>  \u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 display manager \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u044f.<\/p>\n<p>  \u0412 \u0444\u0438\u043d\u0430\u043b\u0435 \u043d\u0430\u0448 \u0434\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/17d\/a8a\/b08\/17da8ab0855d49138f6e043f877c4703.jpg\"\/><\/p>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f dwg \u0444\u0430\u0439\u043b \u0432 Autodesk ACA:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c83\/5b6\/b82\/c835b6b82e3f49a8b888a7a117f5c766.jpg\"\/><br \/>  \u0412\u043e\u0442 \u043d\u0430\u0448 \u0434\u043e\u043c, \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0432 Autocad Architecture. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0435\u0449\u0435 \u043b\u0443\u0447\u0448\u0435.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">OdDbObjectId add_wall_style( OdDbDatabasePtr pDatabase ) {   OdDbObjectId idResult =     AECDbWallStyle::CreateAECObject( pDatabase, OD_T(&quot;Wall Style Created By Teigha(R) Architecture&quot;) );    AECDbWallStylePtr pWallStyle =     idResult.openObject( OdDb::kForWrite );    pWallStyle-&gt;SetDescription( OD_T(&quot;Wall Style Description&quot;) );   pWallStyle-&gt;SetDictRecordDescription( OD_T(&quot;Dialog caption&quot;) );    pWallStyle-&gt;SetWallWidth( 4 );   pWallStyle-&gt;SetWallWidthUsed( true );    pWallStyle-&gt;SetBaseHeight( 110 );   pWallStyle-&gt;SetBaseHeightUsed( true );    pWallStyle-&gt;SetJustification( AECDefs::ewjLeft );   pWallStyle-&gt;SetJustificationUsed( true );    pWallStyle-&gt;SetAutomaticCleanups( true );   pWallStyle-&gt;SetAutomaticCleanupsUsed( true );    pWallStyle-&gt;SetCleanupRadius( 4 );   pWallStyle-&gt;SetCleanupRadiusUsed( true );    pWallStyle-&gt;SetFloorLineOffset( 3 );   pWallStyle-&gt;SetFloorLineOffsetUsed( false );    pWallStyle-&gt;SetRoofLineOffset( -3 );   pWallStyle-&gt;SetRoofLineOffsetUsed( false );    AECDisplayManager cDM( pDatabase );   AECDbDispPropsWallModelPtr pOverrideModel =     AECDbDispPropsWallModel::cast( pWallStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepWallModel::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverrideModel.isNull() )   {     pOverrideModel-&gt;SetIsDisplayOpeningEndcaps( false );     pOverrideModel-&gt;GetBoundaryCompByIndex( 0 )-&gt;SetColor( colorAt( 4 ) );   }    AECDbDispPropsWallPtr pOverridePlan =     AECDbDispPropsWall::cast( pWallStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepWallPlan::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverridePlan.isNull() )   {     pOverridePlan-&gt;GetBoundaryCompByIndex( 0 )-&gt;SetColor( colorAt( 4 ) );   }    return( pWallStyle-&gt;objectId() ); }  OdDbObjectId add_wall( OdDbDatabasePtr pDatabase, const OdDbObjectId& idStyle,                       const OdGePoint2d& ptStart, const OdGePoint2d& ptEnd, double dBulge = 0 ) {   AECDbWallPtr pWall =     AECDbWall::CreateAECObject( pDatabase-&gt;getModelSpaceId(), idStyle );    pWall-&gt;Set( ptStart, ptEnd, dBulge );   pWall-&gt;SetDescription( OD_T(&quot;A Wall&quot;) );    \/*AECGe::Contour2D cContour;   cContour.appendVertex( OdGePoint2d( 0,                      pWall-&gt;GetHeight()       ) );   cContour.appendVertex( OdGePoint2d( pWall-&gt;GetLength() \/ 2, pWall-&gt;GetHeight() * 1.5 ) );   cContour.appendVertex( OdGePoint2d( pWall-&gt;GetLength(),     pWall-&gt;GetHeight()       ) );    AECWallCutLineSubPtr pTop = pWall-&gt;CreateTopCutLine();   pTop-&gt;SetRawCutLine( cContour );*\/    return( pWall-&gt;objectId() ); }  OdDbObjectId add_window_style( OdDbDatabasePtr pDatabase ) {   OdDbObjectId idWStyle =     AECDbWindowStyle::CreateAECObject( pDatabase, OD_T(&quot;Window Style Created By Teigha(R) Architecture&quot;) );    AECDbWindowStylePtr pWindowStyle = idWStyle.openObject( OdDb::kForWrite );    pWindowStyle-&gt;SetDescription( OD_T(&quot;Window Style Description&quot;) );   pWindowStyle-&gt;SetDictRecordDescription( OD_T(&quot;Dialog caption&quot;) );   pWindowStyle-&gt;SetAutoAdjustToWidthOfWall( true );   pWindowStyle-&gt;SetFrameWidth( 2 );   pWindowStyle-&gt;SetFrameDepth( 5 );   pWindowStyle-&gt;SetSashWidth( 2 );   pWindowStyle-&gt;SetSashDepth( 3 );   pWindowStyle-&gt;SetGlassThickness( 1 );   pWindowStyle-&gt;SetWindowType( AECDefs::ewtGlider );   pWindowStyle-&gt;SetWindowShape( AECDefs::esRectangular );    AECDisplayManager cDM( pDatabase );   AECDbDispPropsWindowPtr pOverrideModel =     AECDbDispPropsWindow::cast( pWindowStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepWindowModel::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverrideModel.isNull() )   {     pOverrideModel-&gt;GetFrameComp()-&gt;SetColor( colorAt( 1 ) );     pOverrideModel-&gt;GetSashComp()-&gt;SetColor( colorAt( 2 ) );     pOverrideModel-&gt;GetGlassComp()-&gt;SetColor( colorAt( 3 ) );   }    AECDbDispPropsWindowPtr pOverridePlan =     AECDbDispPropsWindow::cast( pWindowStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepWindowPlan::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverridePlan.isNull() )   {     pOverridePlan-&gt;GetFrameComp()-&gt;SetColor( colorAt( 1 ) );     pOverridePlan-&gt;GetSashComp()-&gt;SetColor( colorAt( 2 ) );     pOverridePlan-&gt;GetGlassComp()-&gt;SetColor( colorAt( 3 ) );   }    return( pWindowStyle-&gt;objectId() ); }  \/\/ Inserts a window into a database using the specified window style. \/\/ If idWall parameter is not null it also attaches the window to the wall. \/\/ Returns Object ID of newly created window. OdDbObjectId add_window( OdDbDatabasePtr pDatabase, const OdDbObjectId& idStyle, const OdDbObjectId& idWall,                         double dOffsetAlongX, double dOffsetAlongZ ) {   AECDbWindowPtr pWindow = AECDbWindow::CreateAECObject( pDatabase-&gt;getModelSpaceId(), idStyle );    pWindow-&gt;SetRise( 10 );   pWindow-&gt;SetWidth( 40 );   pWindow-&gt;SetHeight( 40 );    pWindow-&gt;SetOpenPercent( 60 );   pWindow-&gt;SetMeasureTo( AECDefs::eomtOutsideFrame );   pWindow-&gt;SetLeaf( 10 );    if ( !idWall.isNull() )   {     pWindow-&gt;AttachWallAnchor( idWall );      AECDbAnchorEntToCurvePtr pAnchor = pWindow-&gt;GetAnchor().openObject( OdDb::kForWrite );     pAnchor-&gt;GetXParams()-&gt;SetOffset( dOffsetAlongX );            pAnchor-&gt;GetZParams()-&gt;SetOffset( dOffsetAlongZ );   }    return( pWindow-&gt;objectId() ); }   \/\/ Inserts profile definition into a database. \/\/ Returns Object ID of newly created profile definition. OdDbObjectId add_profile_def( OdDbDatabasePtr pDatabase ) {   OdDbObjectId idProfDef =     AECDbProfileDef::CreateAECObject( pDatabase, OD_T(&quot;Profile Definition Created By Teigha(R) Architecture&quot;) );    AECDbProfileDefPtr pProfileDefinition = idProfDef.openObject( OdDb::kForWrite );    AECGe::Profile2D cProfile;   cProfile.resize( 2 );    cProfile[ 0 ].appendVertex( OdGePoint2d( 0, 0 ) );   cProfile[ 0 ].appendVertex( OdGePoint2d( 1, 0 ) );   cProfile[ 0 ].appendVertex( OdGePoint2d( 1, 1 ) );   cProfile[ 0 ].appendVertex( OdGePoint2d( 0, 1 ) );   cProfile[ 0 ].setClosed();    \/\/ Forces the contour to be counter-clockwise.   \/\/ So if the contour is already ccw this call is not needed.   cProfile[ 0 ].makeCCW();    cProfile[ 1 ].appendVertex( OdGePoint2d( 0.2, 0.2 ) );   cProfile[ 1 ].appendVertex( OdGePoint2d( 0.2, 0.8 ) );   cProfile[ 1 ].appendVertex( OdGePoint2d( 0.8, 0.8 ) );   cProfile[ 1 ].appendVertex( OdGePoint2d( 0.8, 0.2 ) );   cProfile[ 1 ].setClosed();    cProfile[ 1 ].makeCCW( false );    pProfileDefinition-&gt;GetProfile()-&gt;Init( cProfile );    return( pProfileDefinition-&gt;objectId() ); }  \/\/ Inserts a door style into a database. \/\/ Returns Object ID of newly created door style. OdDbObjectId add_door_style( OdDbDatabasePtr pDatabase, const OdDbObjectId& idProfile ) {   OdDbObjectId idDoorStyle =     AECDbDoorStyle::CreateAECObject( pDatabase, OD_T(&quot;Door Style Created By Teigha(R) Architecture&quot;) );   AECDbDoorStylePtr pDoorStyle = idDoorStyle.openObject( OdDb::kForWrite );    pDoorStyle-&gt;SetDescription( OD_T(&quot;Door Style Description&quot;) );   pDoorStyle-&gt;SetDictRecordDescription( OD_T(&quot;Dialog caption&quot;) );   pDoorStyle-&gt;SetAutoAdjustToWidthOfWall( true );   pDoorStyle-&gt;SetFrameWidth( 2 );   pDoorStyle-&gt;SetFrameDepth( 5 );   pDoorStyle-&gt;SetStopWidth( 2 );   pDoorStyle-&gt;SetStopDepth( 3 );   pDoorStyle-&gt;SetShapeAndType( AECDefs::esCustom, AECDefs::edtSingle );   pDoorStyle-&gt;SetProfile( idProfile );   pDoorStyle-&gt;SetGlassThickness( 1 );    AECDisplayManager cDM( pDatabase );   AECDbDispPropsDoorPtr pOverrideModel =     AECDbDispPropsDoor::cast( pDoorStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepDoorModel::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverrideModel.isNull() )   {     pOverrideModel-&gt;GetPanelComp()-&gt;SetColor( colorAt( 1 ) );     pOverrideModel-&gt;GetFrameComp()-&gt;SetColor( colorAt( 2 ) );     pOverrideModel-&gt;GetStopComp()-&gt;SetColor( colorAt( 3 ) );     pOverrideModel-&gt;GetSwingComp()-&gt;SetColor( colorAt( 4 ) );     pOverrideModel-&gt;GetGlassComp()-&gt;SetColor( colorAt( 5 ) );   }    AECDbDispPropsDoorPtr pOverridePlan =     AECDbDispPropsDoor::cast( pDoorStyle-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepDoorPlan::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverridePlan.isNull() )   {     pOverridePlan-&gt;GetPanelComp()-&gt;SetColor( colorAt( 1 ) );     pOverridePlan-&gt;GetFrameComp()-&gt;SetColor( colorAt( 2 ) );     pOverridePlan-&gt;GetStopComp()-&gt;SetColor( colorAt( 3 ) );     pOverridePlan-&gt;GetSwingComp()-&gt;SetColor( colorAt( 4 ) );     pOverridePlan-&gt;GetDirectionComp()-&gt;SetColor( colorAt( 5 ) );   }    return( pDoorStyle-&gt;objectId() ); }   \/\/ Inserts a door into a database using the specified door style. \/\/ If idWall parameter is not null it also attaches the door to the wall. \/\/ Returns Object ID of newly created door. OdDbObjectId add_door( OdDbDatabasePtr pDatabase, const OdDbObjectId& idStyle, const OdDbObjectId& idWall,                       double dOffsetAlongX, double dOffsetAlongZ ) {   AECDbDoorPtr pDoor = AECDbDoor::CreateAECObject( pDatabase-&gt;getModelSpaceId(), idStyle );    pDoor-&gt;SetRise( 10 );   pDoor-&gt;SetWidth( 40 );   pDoor-&gt;SetHeight( 50 );    pDoor-&gt;SetOpenPercent( 20 );   pDoor-&gt;SetMeasureTo( AECDefs::eomtOutsideFrame );   pDoor-&gt;SetLeaf( 10 );    if ( !idWall.isNull() )   {     pDoor-&gt;AttachWallAnchor( idWall );      AECDbAnchorEntToCurvePtr pAnchor = pDoor-&gt;GetAnchor().openObject( OdDb::kForWrite );     pAnchor-&gt;GetXParams()-&gt;SetOffset( dOffsetAlongX );     pAnchor-&gt;GetZParams()-&gt;SetOffset( dOffsetAlongZ );   }    return( pDoor-&gt;objectId() ); }   void add_roof( OdDbDatabasePtr pDatabase ) {   AECGe::Profile2D cProfile;   cProfile.resize( 1 );   cProfile.front().appendVertex( OdGePoint2d( 0,   0   )    );   cProfile.front().appendVertex( OdGePoint2d( 0, 110   )    );   cProfile.front().appendVertex( OdGePoint2d( 110, 110   )    );   cProfile.front().appendVertex( OdGePoint2d( 110, 0 ), -1   );   cProfile.front().setClosed();   cProfile.front().makeCCW();      AECDbRoofPtr pRoof =     AECDbRoof::CreateAECObject( pDatabase-&gt;getModelSpaceId() );    \/\/ Initialize roof profile.   \/\/ By default all edges of Roof Profile have single slope of 45 degrees.   pRoof-&gt;GetProfile()-&gt;Init( cProfile );    pRoof-&gt;SetThickness( 2 );    \/\/\/\/ Manually modify Roof Segments.   AECGeRingSubPtr pRoofLoop = pRoof-&gt;GetProfile()-&gt;GetRingByIndex( 0 );   if ( !pRoofLoop.isNull() )   {     OdUInt32 i, iSize = pRoofLoop-&gt;GetSegmentCount();     for ( i = 0; i &lt; iSize; i++ )     {       AECGeRoofSegmentSubPtr pSeg = pRoofLoop-&gt;GetSegments()-&gt;GetAt( i );       pSeg-&gt;SetFaceCount(1);       pSeg-&gt;SetFaceHeightByIndex(0, 110);       pSeg-&gt;SetBaseHeight(0);       pSeg-&gt;SetOverhang(10.0);       pSeg-&gt;SetFaceSlopeByIndex(0, OdaPI4);       pSeg-&gt;SetSegmentCount(10);     }   }    pRoof-&gt;setColorIndex( 3 );   }  void add_slab( OdDbDatabasePtr pDatabase ) {   OdDbObjectId idStyle =     AECDbSlabStyle::GetAECObject( pDatabase, OD_T(&quot;Slab Style&quot;) );   if ( idStyle.isNull() )   {     idStyle = AECDbSlabStyle::CreateAECObject( pDatabase, OD_T(&quot;Slab Style&quot;) );   }    AECDbSlabStylePtr pStyle =     idStyle.openObject( OdDb::kForWrite );   if ( !pStyle.isNull() )   {     pStyle-&gt;GetComponents()-&gt;Clear();      AECSlabStyleCompPtr pCmp = AECSlabStyleComp::createObject();     pCmp-&gt;SetName( OD_T(&quot;Base&quot;) );     pCmp-&gt;GetPosition()-&gt;GetThickness()-&gt;SetUseBaseValue( false );     pCmp-&gt;GetPosition()-&gt;GetThickness()-&gt;SetBaseValue( 6 );     pCmp-&gt;GetPosition()-&gt;GetThicknessOffset()-&gt;SetUseBaseValue( false );     pCmp-&gt;GetPosition()-&gt;GetThicknessOffset()-&gt;SetBaseValue( - 6 );     pStyle-&gt;GetComponents()-&gt;Insert( pCmp );   }    AECDbSlabPtr pSlab =     AECDbSlab::CreateAECObject( pDatabase-&gt;getModelSpaceId(), idStyle );    {     AECGe::Profile2D cBase;     cBase.resize( 1 );     cBase.front().appendVertex( OdGePoint2d( -5,   -5   ), 1 );     cBase.front().appendVertex( OdGePoint2d( 115, -5   ) );     cBase.front().appendVertex( OdGePoint2d( 115, 115 ) );     cBase.front().appendVertex( OdGePoint2d( -5,   115 ) );     cBase.front().setClosed();     cBase.front().makeCCW();      pSlab-&gt;GetSlabFace()-&gt;Init( cBase );   }    pSlab-&gt;SetThickness( 5 );    pSlab-&gt;SetVerticalOffset( 0 );   pSlab-&gt;SetHorizontalOffset( 0 );    pSlab-&gt;SetPivotPoint( OdGePoint3d::kOrigin );    AECDisplayManager cDM( pDatabase );   AECDbDispPropsSlabPtr pOverrideModel =     AECDbDispPropsSlab::cast( pSlab-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepSlabModel::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverrideModel.isNull() )   {     pOverrideModel-&gt;GetBoundaryCompByIndex( 0 )-&gt;SetColor( colorAt( 1 ) );     pOverrideModel-&gt;GetBaselineComp()-&gt;SetColor( colorAt( 4 ) );     pOverrideModel-&gt;GetPivotPointComp()-&gt;SetColor( colorAt( 5 ) );     pOverrideModel-&gt;GetFasciaComp()-&gt;SetColor( colorAt( 6 ) );     pOverrideModel-&gt;GetSoffitComp()-&gt;SetColor( colorAt( 7 ) );     pOverrideModel-&gt;GetShrinkWrapBodyComp()-&gt;SetColor( colorAt( 8 ) );   }    AECDbDispPropsSlabPlanPtr pOverridePlan =     AECDbDispPropsSlabPlan::cast( pSlab-&gt;OverrideDispProps(     cDM.UpdateDisplayRepresentation( AECDbDispRepSlabPlan::desc() ) ).openObject( OdDb::kForWrite ) );   if ( !pOverridePlan.isNull() )   {     pOverridePlan-&gt;SetIsOverrideCutPlane( false );     pOverridePlan-&gt;GetHatchComp()-&gt;SetColor( colorAt( 1 ) );     pOverridePlan-&gt;GetBelowCutPlaneBodyComp()-&gt;SetColor( colorAt( 2 ) );     pOverridePlan-&gt;GetAboveCutPlaneBodyComp()-&gt;SetColor( colorAt( 3 ) );     pOverridePlan-&gt;GetBelowCutPlaneOutlineComp()-&gt;SetColor( colorAt( 4 ) );     pOverridePlan-&gt;GetAboveCutPlaneOutlineComp()-&gt;SetColor( colorAt( 5 ) );   } }  class MyServices : public ExSystemServices, public ExHostAppServices { protected:   ODRX_USING_HEAP_OPERATORS(ExSystemServices); };   int wmain(int argc, wchar_t* argv[]) {    \/\/ Initialize TD with system services.   \/\/ And create single instance of hostapp services   \/\/ for TD database creation.   OdStaticRxObject&lt;MyServices&gt; svcs;   odInitialize( &svcs );   odgsInitialize();     \/\/ Loading of all public Teigha Architecture DRX modules.   \/\/ Note that not all calls are necessary for some of them depend on others   \/\/ but here we list all of them.   \/\/   \/\/ If a program uses TD doesn't modify or create binary files   \/\/ it may not load any of DRX modules on start because they will be loaded automatically.    \/\/ But if a program modifies or creates binary files then it is highly recommended   \/\/ to load all DRX modules program uses.   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecBase&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecArchBase&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecArchDACHBase&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecScheduleData&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecSchedule&quot;) );   ::odrxDynamicLinker()-&gt;loadApp( OD_T(&quot;AecStructureBase&quot;) );    \/\/ Create empty TD database.   OdDbDatabasePtr pDatabase = svcs.createDatabase();;      \/\/ Initialize database with default Teigha Architecture content.   AECArchDACHBaseDatabase( pDatabase ).Init();   AECScheduleDatabase( pDatabase ).Init();   AECStructureBaseDatabase( pDatabase ).Init();     init_display_system( pDatabase );         OdDbObjectId idWallStyle = add_wall_style( pDatabase );    OdDbObjectId idWall1 = add_wall( pDatabase, idWallStyle,     OdGePoint2d( 0,     0 ), OdGePoint2d(   0, 110 ) );   OdDbObjectId idWall2 = add_wall( pDatabase, idWallStyle,     OdGePoint2d( 0,   110 ), OdGePoint2d( 110, 110 ) );   OdDbObjectId idWall3 = add_wall( pDatabase, idWallStyle,     OdGePoint2d( 110, 110 ), OdGePoint2d( 110,   0 ) );   OdDbObjectId idWall4 = add_wall( pDatabase, idWallStyle,     OdGePoint2d( 110,   0 ), OdGePoint2d(   0,   0 ), -1 );    AECDbWallPtr ptWall = AECDbWall::cast( idWall1.openObject( OdDb::kForRead ) );     OdDbObjectId idWindowStyle = add_window_style( pDatabase );    OdDbObjectId idWindow01 = add_window( pDatabase, idWindowStyle, idWall1, 10, 10 );   OdDbObjectId idWindow02 = add_window( pDatabase, idWindowStyle, idWall1, 60, 10 );   OdDbObjectId idWindow03 = add_window( pDatabase, idWindowStyle, idWall1, 10, 60 );   OdDbObjectId idWindow04 = add_window( pDatabase, idWindowStyle, idWall1, 60, 60 );    OdDbObjectId idWindow05 = add_window( pDatabase, idWindowStyle, idWall2, 10, 10 );   OdDbObjectId idWindow06 = add_window( pDatabase, idWindowStyle, idWall2, 60, 10 );   OdDbObjectId idWindow07 = add_window( pDatabase, idWindowStyle, idWall2, 10, 60 );   OdDbObjectId idWindow08 = add_window( pDatabase, idWindowStyle, idWall2, 60, 60 );    OdDbObjectId idWindow09 = add_window( pDatabase, idWindowStyle, idWall3, 10, 10 );   OdDbObjectId idWindow10 = add_window( pDatabase, idWindowStyle, idWall3, 60, 10 );   OdDbObjectId idWindow11 = add_window( pDatabase, idWindowStyle, idWall3, 10, 60 );   OdDbObjectId idWindow12 = add_window( pDatabase, idWindowStyle, idWall3, 60, 60 );    OdDbObjectId idProfile =     add_profile_def( pDatabase );    OdDbObjectId idDoorStyle =     add_door_style( pDatabase, idProfile );    AECDbWallPtr pWall = idWall4.openObject( OdDb::kForRead );   double dLength = pWall-&gt;GetLength();   double dOWidth = 40;   double dL1 = 10;   double dL3 = dLength - dOWidth - 10;   double dL2 = dL1 + dOWidth + (dL3 - (dL1 + 2 * dOWidth)) \/ 2;    OdDbObjectId idDoor     = add_door   ( pDatabase, idDoorStyle,   idWall4, dL2, 0  );   OdDbObjectId idWindow13 = add_window ( pDatabase, idWindowStyle, idWall4, dL1, 10 );   OdDbObjectId idWindow14 = add_window ( pDatabase, idWindowStyle, idWall4, dL3, 10 );   OdDbObjectId idWindow15 = add_window ( pDatabase, idWindowStyle, idWall4, dL1, 60 );   OdDbObjectId idWindow16 = add_window ( pDatabase, idWindowStyle, idWall4, dL2, 60 );   OdDbObjectId idOpening  = add_window ( pDatabase, idWindowStyle, idWall4, dL3, 60 );    add_roof(pDatabase);   add_slab(pDatabase);     \/\/ Perform &quot;zoom extents&quot; on model space.   {     OdDbViewportTablePtr pVT =       pDatabase-&gt;getViewportTableId().openObject( OdDb::kForRead );     OdDbViewportTableRecordPtr pV =       pVT-&gt;getActiveViewportId().openObject( OdDb::kForWrite );     pV-&gt;zoomExtents();   }    OdWrFileBuf cBuffer( &quot;H:\\\\TA_test.dwg&quot; );   pDatabase-&gt;writeFile( &cBuffer, OdDb::kDwg, OdDb::kDHL_CURRENT );      odgsUninitialize();   odUninitialize();    return 0; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h1>\u0418\u0442\u043e\u0433<\/h1>\n<p>  \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Teigha \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043f\u0443\u0441\u0442\u0443\u044e \u0431\u0430\u0437\u0443, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0435\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u044b\u0445 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438 \u044d\u0442\u043e \u0432\u0441\u0435 \u0432 dwg \u0444\u0430\u0439\u043b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430.<br \/>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u044f \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b \u0438 \u043e\u043f\u0438\u0441\u0430\u043b \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e, \u043d\u043e \u0446\u0435\u043b\u044c \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2013 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 TA \u0438 \u0434\u0430\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e Teigha \u043a\u0430\u043a \u043e\u0431 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 dwg \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0410\u0432\u0442\u043e\u043a\u0430\u0434\u0430.               <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/280284\/\"> https:\/\/habrahabr.ru\/post\/280284\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u0412 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 <a href=\"https:\/\/habrahabr.ru\/post\/265617\/\">AutoCAD Architecture: First project<\/a> \u0438 <a href=\"https:\/\/habrahabr.ru\/post\/271571\/\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 ACA<\/a> \u044f \u043a\u0440\u0430\u0442\u043a\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043e \u0442\u043e\u043c \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 AutoCAD Architecture (ACA), \u0447\u0435\u043c \u043e\u043d \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0410\u0432\u0442\u043e\u043a\u0430\u0434\u0430, \u043a\u0430\u043a\u0438\u0435 \u0432 \u043d\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0435\u043d\u0430\u043c\u0438 \u0438\u0437 .NET \u043f\u043b\u0430\u0433\u0438\u043d\u0430.<\/p>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Teigha \u2014 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 dwg \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 ACA. \u041c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0434\u043e\u043c \u0438\u0437 ACA-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0432 dwg \u0444\u0430\u0439\u043b. \u0417\u0430\u0442\u0435\u043c, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0432 AutoCAD Architecture \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b \u043b\u0438 \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0410\u0432\u0442\u043e\u043a\u0430\u0434\u043e\u043c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/570\/815\/d84\/570815d8469d4a41957c21cdee48381d.png\"\/><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-277129","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/277129","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=277129"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/277129\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=277129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=277129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=277129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}