{"id":1080,"date":"2018-05-22T17:39:23","date_gmt":"2018-05-22T21:39:23","guid":{"rendered":"http:\/\/jsevy.com\/wordpress\/?page_id=1080"},"modified":"2025-06-15T16:02:45","modified_gmt":"2025-06-15T20:02:45","slug":"jdxf-java-dxf-library","status":"publish","type":"page","link":"https:\/\/jsevy.com\/wordpress\/index.php\/java-and-android\/jdxf-java-dxf-library\/","title":{"rendered":"JDXF: Java DXF Library"},"content":{"rendered":"<p>The Java JDXF library provides support for generation of DXF files for use with CAD programs using standard Java AWT Graphics \u201cdraw\u201d and &#8220;fill&#8221; commands. The library provides a special Graphics2D subclass, DXFGraphics, that is associated with a DXF document and that renders draw commands into DXF syntax. A sequence of standard Java Graphics drawing method calls on a DXFGraphics instance will thus create a structured DXF document that, when opened with a standard CAD program, will display the Java image as a CAD design that can be modified within the CAD program.<\/p>\n<p>This library is released under the <a href=\"http:\/\/choosealicense.com\/licenses\/mit\/\">MIT License.<br \/>\n<\/a><\/p>\n<h2>Basic Workflow<\/h2>\n<p>The class DXFGraphics implements the graphics operations defined by the standard Java Graphics2D class. To create a DXF drawing, you use the standard Java Graphics drawing calls (including drawing, transformations, etc.) on an instance of DXFGraphics. The DXFGraphics will encode these Java drawing commands as DXF objects in an associated DXFDocument, which can then be retrieved as a text string and saved in a DXF file.<\/p>\n<p>A DXFGraphics is associated with a DXFDocument. The basic workflow is:<\/p>\n<pre>\/* Create a DXF document and get its associated DXFGraphics instance *\/\r\n\r\nDXFDocument dxfDocument = new \r\n    DXFDocument(\"Example\");\r\nDXFGraphics dxfGraphics = \r\n    dxfDocument.getGraphics();\r\n \r\n\r\n\/* Do drawing commands as on any other Graphics. If you have a paint(Graphics) method, you can just use it with the DXFGraphics instance since it's a subclass of Graphics. *\/\r\npaint(dxfGraphics);\r\n \r\n\/* Get the DXF output as a string - it's just text - and\u00a0 save\u00a0 in a file for use with a CAD package *\/\r\nString dxfText = dxfDocument.toDXFString();\r\nString filePath = \u201cpath\/to\/file.dxf\u201d;\r\nFileWriter fileWriter = new FileWriter(filePath);\r\nfileWriter.write(dxfText);\r\nfileWriter.flush();\r\nfileWriter.close();\r\n\r\n\r\n\/* For drawing, just use standard Java\r\n   drawing operations *\/\r\npublic void paint(Graphics graphics)\r\n{\r\n  \/\/ set pen characteristics\r\n  graphics.setColor(Color.RED);\r\n \u00a0graphics.setStroke(new BasicStroke(3));\r\n  \r\n  \/\/ draw stuff - line, rectangles, ovals, ...\r\n  graphics.drawLine(0, 0, 1000, 500);\r\n  graphics.drawRect(1000, 500, 150, 150);\r\n  graphics.drawRoundRect(20, 200, 130, 100, 20, \r\n                                             10);\r\n  graphics.drawOval(200, 800, 200, 400);\r\n  graphics.drawArc(100, 1900, 400, 200, 60, 150);\r\n\r\n  \/\/ can draw filled shapes, which get \r\n  \/\/ implemented as DXF hatches\r\n  graphics.setColor(Color.BLUE);\r\n  graphics.fillRect(100, 100, 100, 50);\r\n  int[] xPoints = {200, 300, 250};\r\n  int[] yPoints = {200, 250, 300};\r\n  graphics.fillPolygon(xPoints, yPoints, \r\n                                xPoints.length);\r\n\r\n  \/\/ text too\r\n  graphics.setFont(new Font(Font.MONOSPACED, \r\n                            Font.PLAIN, 38));\r\n  graphics.drawString(\"Some 38-point monospaced   \r\n      blue text at position 480, 400\", 480, 400);\r\n\r\n  \/\/ and even transformations\r\n  graphics.shear(0.1f, 0.2f);\r\n  graphics.drawRect(100, 100, 200, 200);\r\n}\r\n\r\n<\/pre>\n<h2><a href=\"https:\/\/jsevy.com\/wordpress\/index.php\/java-and-android\/jdxf-java-dxf-library\/jdxf-user-guide\/\">User Guide<\/a><\/h2>\n<p>More examples and discussion can be found on the <a href=\"https:\/\/jsevy.com\/wordpress\/index.php\/java-and-android\/jdxf-java-dxf-library\/jdxf-user-guide\/\">JDXF User Guide<\/a>.<\/p>\n<h2>Features<\/h2>\n<p>The JDXF library provides most of the drawing operations available in the standard Java Graphics and Graphics2D classes. However, certain methods are unimplemented at present (some due to lack of support in DXF). These unimplemented operations will be ignored or throw an UnsupportedOperationException if used, as indicated below. Some additional features currently have no or limited support, as indicated below.<\/p>\n<h3>Supported operations<\/h3>\n<ul>\n<li>Drawing operations, including\n<ul>\n<li>drawLine, drawPolyline<\/li>\n<li>drawPolygon, fillPolygon<\/li>\n<li>drawArc, fillArc<\/li>\n<li>drawOval, fillOval<\/li>\n<li>drawRect, fillRect, clearRect<\/li>\n<li>drawRoundRect, fillRoundRect<\/li>\n<li>draw(Shape), fill(Shape), clear(Shape)<\/li>\n<\/ul>\n<\/li>\n<li>Text operations\n<ul>\n<li>drawString, drawChars, drawBytes<\/li>\n<li>registerFont<\/li>\n<\/ul>\n<\/li>\n<li>Drawing properties\n<ul>\n<li>Color<\/li>\n<li>Line width<\/li>\n<li>Font properties: serif\/sans-serif, size, bold, italic<\/li>\n<\/ul>\n<\/li>\n<li>Affine transformation operations\n<ul>\n<li>scale<\/li>\n<li>shear<\/li>\n<li>translate<\/li>\n<li>rotate<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>Extensions<\/h3>\n<p>The library provides methods for creating and drawing B-splines on the standard Java Graphics, as well as generating DXF code for splines.<\/p>\n<h3>Not supported<\/h3>\n<ul>\n<li>Image drawing \u2013 throws UnsupportedOperationException<\/li>\n<li>Paint xfermodes \u2013 Ignored<\/li>\n<li>Clipping, including clipRect, clipRegion, clipPath, etc. \u2013 Ignored<\/li>\n<\/ul>\n<h2>Enhancements for version 1.1<\/h2>\n<ul>\n<li>Added method setUnits in DXFDocument for specifying the units that measurements should be interpreted as in the DXF file<\/li>\n<li>Added the ability to load external fonts through a new DXFGraphicsEnvironment class for use in addition to the default fonts. When these external font files (TrueType, e.g.) are then loaded into the CAD program along with the DXF file, the font sizing and spacing will be much more consistent between the Java screen representation and the CAD program representation.<\/li>\n<\/ul>\n<h2>Enhancements for version 1.2<\/h2>\n<ul>\n<li>Configure to generate true DXF circles and arcs; earlier versions used the more general elliptical arcs for all such curves. Includes the method generateCircularArcs(boolean) in DXFDocument to control this behavior in case the previous behavior is desired (default is to use the new approach and generate circles and arcs when appropriate).<\/li>\n<li>Added the method setPrecisionDigits(int) in DXFDocument to control the number of decimal digits to be output in the DXF file, to deal with rounding issues; default is to use 10 digits.<\/li>\n<\/ul>\n<h2>Enhancements for version 1.3<\/h2>\n<ul>\n<li>Configure to generate true DXF points from zero-length Java lines and zero-radius Java circles; earlier versions simply inserted the corresponding degenerate lines or circles into the DXF output. Includes the method generatePoints((boolean) in DXFDocument to control this behavior in case the previous behavior is desired (default is to use the new approach and generate DXF points in place of degenerate circles and lines).<\/li>\n<\/ul>\n<h2>Enhancements for version 1.4<\/h2>\n<ul>\n<li>Add support for drawing onto different DXF layers through a call to the setLayer(String) method of the main DXFDocument class:<\/li>\n<\/ul>\n<pre>DXFDocument dxfDocument = new \r\n    DXFDocument(\"Example\");\r\nDXFGraphics dxfGraphics =\r\n    dxfDocument.getGraphics();\r\n\r\n\/\/ set layer - drawing goes \r\n\/\/ onto Layer 1\r\ndxfDocument.setLayer(\"Layer 1\");\r\ngraphics.drawRect(1000, 500, 150, 150);\r\n\r\n\/\/ set new layer - all subsequent drawing \r\n\/\/ goes onto Layer 2\r\ndxfDocument.setLayer(\"Layer 2\");\r\ngraphics.drawOval(1000, 500, 150, 150);<\/pre>\n<h2>Enhancements for version 1.5<\/h2>\n<ul>\n<li>Add support for dashed lines<\/li>\n<\/ul>\n<h2>Enhancements for version 1.6<\/h2>\n<ul>\n<li>Improve efficiency of String operations for greatly enhanced execution speed<\/li>\n<\/ul>\n<h2>Enhancements for version 2.0<\/h2>\n<ul>\n<li>Add support for generation\u00a0 and insertion of DXF Blocks from Java Shapes<\/li>\n<li>Add color\/linewidth\/linetype parameters to Layer definitions, and support for assigning value &#8220;ByLayer&#8221; to entities&#8217; parameters so that they will take on the pen characteristics of the layer they&#8217;re placed on<\/li>\n<\/ul>\n<h2>Enhancements for version 2.1<\/h2>\n<ul>\n<li>Add support for Xrecords to include non-graphical information in DXF files<\/li>\n<\/ul>\n<h2>Example DXF Files<\/h2>\n<p>Some example files generated with JDXF are at the links below. The Java source code used to generate these through the JDXF Library is available in the Example Code section.<\/p>\n<ul>\n<li><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_dxf_file_generation_graphics.dxf\">Example of basic graphics operations<\/a><\/li>\n<li><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_dxf_file_generation_text.dxf\">Example of basic text operations<\/a><\/li>\n<li><a href=\"http:\/\/jsevy.com\/android\/apps\/adxf\/a_test_dxf_file_generation_transformations_graphics.dxf\">Example of matrix transformation operations on graphics<\/a><\/li>\n<li><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_dxf_file_generation_transformations_text.dxf\">Example of matrix transformation operators on text<\/a><\/li>\n<\/ul>\n<h2>Example Code<\/h2>\n<p>A test project is available that illustrates how to use the library and that can also be used to test its functionality. The class JDXFTestPanel illustrates the use of the JDXFGraphics class and its draw methods.<\/p>\n<ul>\n<li>JDXFTest.java<\/li>\n<li>JDXFTestPanel.java<\/li>\n<\/ul>\n<p>The example source can be downloaded from the link below.<\/p>\n<h2><\/h2>\n<h2>Documentation<\/h2>\n<ul>\n<li><a href=\"https:\/\/jsevy.com\/java\/jdxf\/doc\/index.html\">Browse Javadoc documentation<\/a><\/li>\n<li><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_doc_v2.1.zip\">Download documentation<\/a><\/li>\n<\/ul>\n<h2><\/h2>\n<h2>Downloads<\/h2>\n<p>The downloads are supplied as compressed archives; the library archive contains the compiled .jar file for inclusion in a project, while the source archive contains the Java source files that can be used to rebuild the .jar file or included as source files in a referencing project. The test app source contains source for a simple test app that uses the classes in the library.<\/p>\n<h4>Current Version<\/h4>\n<table style=\"height: 57px; width: 107.035%;\" border=\"1\">\n<tbody>\n<tr style=\"height: 24px;\">\n<td style=\"height: 24px; width: 11.6371%;\"><strong>Version<br \/>\n<\/strong><\/td>\n<td style=\"height: 24px; width: 28.5996%;\"><strong>Library (.jar)<br \/>\n<\/strong><\/td>\n<td style=\"height: 24px; width: 29.3886%;\"><strong>Source<br \/>\n<\/strong><\/td>\n<td style=\"height: 24px; width: 28.0079%;\"><strong>Test App Source<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 11.6371%;\">2.1.1<\/td>\n<td style=\"width: 28.5996%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_lib_v2.1.1.zip\">jdxf_lib_v2.1.1.zip<\/a><\/td>\n<td style=\"width: 29.3886%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_src_v2.1.1.zip\">jdxf_src_v2.1.1.zip<\/a><\/td>\n<td style=\"width: 28.0079%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_v2.1.1.zip\">jdxf_test_v2.1.1.zip<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h6>Previous Versions<\/h6>\n<table style=\"width: 107.035%; height: 264px;\" border=\"1\">\n<tbody>\n<tr style=\"height: 24px;\">\n<td style=\"height: 24px; width: 11.6371%;\"><strong>Version<br \/>\n<\/strong><\/td>\n<td style=\"height: 24px; width: 28.5996%;\"><strong>Library (.jar)<br \/>\n<\/strong><\/td>\n<td style=\"height: 24px; width: 29.3886%;\"><strong>Source<br \/>\n<\/strong><\/td>\n<td style=\"height: 24px; width: 28.0079%;\"><strong>Test App Source<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"height: 24px; width: 11.6371%;\">\u00a01.0<\/td>\n<td style=\"height: 24px; width: 28.5996%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_lib_v1.0.tar.gz\">jdxf_lib_v1.0.tar.gz<\/a><\/td>\n<td style=\"height: 24px; width: 29.3886%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_src_v1.0.tar.gz\">jdxf_src_v1.0.tar.gz<\/a><\/td>\n<td style=\"height: 24px; width: 28.0079%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_src_v1.0.tar.gz\">jdxf_test_v1.0.tar.gz<\/a><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"height: 24px; width: 11.6371%;\">1.1.1<\/td>\n<td style=\"height: 24px; width: 28.5996%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_lib_v1.1.1.tar.gz\">jdxf_lib_v1.1.1.tar.gz<\/a><\/td>\n<td style=\"height: 24px; width: 29.3886%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_src_v1.1.1.tar.gz\">jdxf_src_v1.1.1.tar.gz<\/a><\/td>\n<td style=\"height: 24px; width: 28.0079%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_v1.1.tar.gz\">jdxf_test_v1.1.tar.gz<\/a><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"height: 24px; width: 11.6371%;\">1.2<\/td>\n<td style=\"height: 24px; width: 28.5996%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_lib_v1.2.zip\">jdxf_lib_v1.2.zip<\/a><\/td>\n<td style=\"height: 24px; width: 29.3886%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_src_v1.2.zip\">jdxf_src_v1.2.zip<\/a><\/td>\n<td style=\"height: 24px; width: 28.0079%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_v1.2.zip\">jdxf_test_v1.2.zip<\/a><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"height: 24px; width: 11.6371%;\">1.3<\/td>\n<td style=\"height: 24px; width: 28.5996%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_lib_v1.3.zip\">jdxf_lib_v1.3.zip<\/a><\/td>\n<td style=\"height: 24px; width: 29.3886%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_src_v1.3.zip\">jdxf_src_v1.3.zip<\/a><\/td>\n<td style=\"height: 24px; width: 28.0079%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_v1.3.zip\">jdxf_test_v1.3.zip<\/a><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"height: 24px; width: 11.6371%;\">1.4<\/td>\n<td style=\"height: 24px; width: 28.5996%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_lib_v1.4.zip\">jdxf_lib_v1.4.zip<\/a><\/td>\n<td style=\"height: 24px; width: 29.3886%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_src_v1.4.zip\">jdxf_src_v1.4.zip<\/a><\/td>\n<td style=\"height: 24px; width: 28.0079%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_v1.4.zip\">jdxf_test_v1.4.zip<\/a><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"height: 24px; width: 11.6371%;\">1.5<\/td>\n<td style=\"height: 24px; width: 28.5996%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_lib_v1.5.zip\">jdxf_lib_v1.5.zip<\/a><\/td>\n<td style=\"height: 24px; width: 29.3886%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_src_v1.5.zip\">jdxf_src_v1.5.zip<\/a><\/td>\n<td style=\"height: 24px; width: 28.0079%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_v1.5.zip\">jdxf_test_v1.5.zip<\/a><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"height: 24px; width: 11.6371%;\">1.5.1<\/td>\n<td style=\"height: 24px; width: 28.5996%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_lib_v1.5.1.zip\">jdxf_lib_v1.5.1.zip<\/a><\/td>\n<td style=\"height: 24px; width: 29.3886%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_src_v1.5.1.zip\">jdxf_src_v1.5.1.zip<\/a><\/td>\n<td style=\"height: 24px; width: 28.0079%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_v1.5.zip\">jdxf_test_v1.5.zip<\/a><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"height: 24px; width: 11.6371%;\">1.6<\/td>\n<td style=\"height: 24px; width: 28.5996%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_lib_v1.6.zip\">jdxf_lib_v1.6.zip<\/a><\/td>\n<td style=\"height: 24px; width: 29.3886%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_src_v1.6.zip\">jdxf_src_v1.6.zip<\/a><\/td>\n<td style=\"height: 24px; width: 28.0079%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_v1.5.zip\">jdxf_test_v1.5.zip<\/a><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"height: 24px; width: 11.6371%;\">2.0<\/td>\n<td style=\"height: 24px; width: 28.5996%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_lib_v2.0.zip\">jdxf_lib_v2.0.zip<\/a><\/td>\n<td style=\"height: 24px; width: 29.3886%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_src_v2.0.zip\">jdxf_src_v2.0.zip<\/a><\/td>\n<td style=\"height: 24px; width: 28.0079%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_v2.0.zip\">jdxf_test_v2.0.zip<\/a><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"height: 24px; width: 11.6371%;\">2.1<\/td>\n<td style=\"width: 28.5996%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_lib_v2.1.zip\">jdxf_lib_v2.1.zip<\/a><\/td>\n<td style=\"width: 29.3886%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_src_v2.1.zip\">jdxf_src_v2.1.zip<\/a><\/td>\n<td style=\"width: 28.0079%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_v2.1.zip\">jdxf_test_v2.1.zip<\/a><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 11.6371%;\">2.1.1<\/td>\n<td style=\"width: 28.5996%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_lib_v2.1.1.zip\">jdxf_lib_v2.1.1.zip<\/a><\/td>\n<td style=\"width: 29.3886%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_src_v2.1.1.zip\">jdxf_src_v2.1.1.zip<\/a><\/td>\n<td style=\"width: 28.0079%;\"><a href=\"https:\/\/jsevy.com\/java\/jdxf\/jdxf_test_v2.1.1.zip\">jdxf_test_v2.1.1.zip<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><\/h3>\n<h3>Revision History<\/h3>\n<table style=\"width: 107.48%;\" border=\"1\">\n<tbody>\n<tr>\n<td style=\"width: 15.1671%;\"><strong>Version<br \/>\n<\/strong><\/td>\n<td style=\"width: 24.6787%;\"><strong>Date<\/strong><\/td>\n<td style=\"width: 87.1022%;\"><strong>Changes<br \/>\n<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left; vertical-align: top; width: 15.1671%;\">1.0<\/td>\n<td style=\"text-align: left; vertical-align: top; width: 24.6787%;\">2018-05-22<\/td>\n<td style=\"text-align: left; vertical-align: top; width: 87.1022%;\">\n<ul>\n<li>Initial release<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: top; text-align: left; width: 15.1671%;\">1.1<\/td>\n<td style=\"vertical-align: top; text-align: left; width: 24.6787%;\">2019-05-18<\/td>\n<td style=\"text-align: left; vertical-align: top; width: 87.1022%;\">\n<ul>\n<li>Loadable font support<\/li>\n<li>Units specification<\/li>\n<li>Bug fix for quadratic and cubic path iterator segments<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: top; text-align: left; width: 15.1671%;\">1.1.1<\/td>\n<td style=\"vertical-align: top; text-align: left; width: 24.6787%;\">2019-06-10<\/td>\n<td style=\"text-align: left; vertical-align: top; width: 87.1022%;\">\n<ul>\n<li>Bug fixes for LibreCAD, Kabeja<\/li>\n<li>Closed flag for closed polylines<\/li>\n<li>Double precision throughout<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: top; text-align: left; width: 15.1671%;\">1.2<\/td>\n<td style=\"vertical-align: top; text-align: left; width: 24.6787%;\">2020-03-03<\/td>\n<td style=\"text-align: left; vertical-align: top; width: 87.1022%;\">\n<ul>\n<li>Configure to generate DXF circles and arcs where appropriate in place of general elliptical arcs<\/li>\n<li>Add call to configure number of decimal digits of precision to use<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: top; text-align: left; width: 15.1671%;\">1.3<\/td>\n<td style=\"vertical-align: top; text-align: left; width: 24.6787%;\">2020-05-08<\/td>\n<td style=\"text-align: left; vertical-align: top; width: 87.1022%;\">\n<ul>\n<li>Configure to generate DXF points for zero-length Java lines and zero-radius circles<\/li>\n<li>Fix bug in draw(Shape) method for Line2D handling<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: top; text-align: left; width: 15.1671%;\">1.4<\/td>\n<td style=\"vertical-align: top; text-align: left; width: 24.6787%;\">2020-12-09<\/td>\n<td style=\"text-align: left; vertical-align: top; width: 87.1022%;\">\n<ul>\n<li>Add support for layers<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: top; text-align: left; width: 15.1671%;\">1.5<\/td>\n<td style=\"vertical-align: top; text-align: left; width: 24.6787%;\">2021-02-03<\/td>\n<td style=\"text-align: left; vertical-align: top; width: 87.1022%;\">\n<ul>\n<li>Add support for dashed lines<\/li>\n<li>Fix bug in text scaling<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: top; text-align: left; width: 15.1671%;\">1.5.1<\/td>\n<td style=\"vertical-align: top; text-align: left; width: 24.6787%;\">2021-05-14<\/td>\n<td style=\"text-align: left; vertical-align: top; width: 87.1022%;\">\n<ul>\n<li>Change PlotStyleName handle value to 0 in DXFLayer for AutoCAD 2022 compatibility<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: top; text-align: left; width: 15.1671%;\">1.6<\/td>\n<td style=\"vertical-align: top; text-align: left; width: 24.6787%;\">2022-04-08<\/td>\n<td style=\"text-align: left; vertical-align: top; width: 87.1022%;\">\n<ul>\n<li>Replace raw String operations with StringBuilder objects to improve execution speed<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 15.1671%;\">2.0<\/td>\n<td style=\"width: 24.6787%;\">2022-10-24<\/td>\n<td style=\"width: 87.1022%;\">\n<ul>\n<li>Support Block generation from Java Shapes<\/li>\n<li>Add color and line styles to Layers, and support for ByLayer value in entities so they inherit the color\/line of the layer they&#8217;re in<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 15.1671%;\">2.1<\/td>\n<td style=\"width: 24.6787%;\">2023-04-03<\/td>\n<td style=\"width: 87.1022%;\">\n<ul>\n<li>Add support for Xrecords to include non-graphical information<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 15.1671%;\">2.1.1<\/td>\n<td style=\"width: 24.6787%;\">2024-09-01<\/td>\n<td style=\"width: 87.1022%;\">\n<ul>\n<li>Fix bug in DXFInsert scaling for transformation angles pi\/2 and -pi\/2<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h3>Notes<\/h3>\n<p>The JDXF library adds DXF elements that are not strictly required by the standard, but are required in order to open the files in AutoCAD.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Java JDXF library provides support for generation of DXF files for use with CAD programs using standard Java AWT Graphics \u201cdraw\u201d and &#8220;fill&#8221; commands. The library provides a special Graphics2D subclass, DXFGraphics, that is associated with a DXF document and that renders draw commands into DXF syntax. A sequence of standard Java Graphics drawing &hellip; <a href=\"https:\/\/jsevy.com\/wordpress\/index.php\/java-and-android\/jdxf-java-dxf-library\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">JDXF: Java DXF Library<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"parent":108,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1080","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/jsevy.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages\/1080","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jsevy.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/jsevy.com\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/jsevy.com\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jsevy.com\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=1080"}],"version-history":[{"count":35,"href":"https:\/\/jsevy.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages\/1080\/revisions"}],"predecessor-version":[{"id":2670,"href":"https:\/\/jsevy.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages\/1080\/revisions\/2670"}],"up":[{"embeddable":true,"href":"https:\/\/jsevy.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages\/108"}],"wp:attachment":[{"href":"https:\/\/jsevy.com\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=1080"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}