Skip to content
This repository has been archived by the owner on Oct 11, 2023. It is now read-only.
Daniel Carvajal edited this page Jan 26, 2022 · 55 revisions

Change history

[2022/01/26]

  • The Polyline2D and Polyline3D Explode method will preserve the smooth type.
  • Deleted the references to the ImageDefinitionReactor from the ImageDefinition they will be created when the DXF is saved.
  • (fixed) Issues, introduced in the last two updates, when saving Polyline2D, Polyline3D, and PolyfaceMesh entities that were part of a Block.

[2021/12/06]

  • Rename Face3d to Face3D.
  • Rename Face3dEdgeFlags to Face3DEdgeFlags.
  • Rename DxfDocument.Entities.Faces3d to DxfDocument.Entities.Faces3D.
  • Rename LwPolyline to Polyline2D.
  • Rename LwPolylineVertex to Polyline2DVertex.
  • Rename EntityType.LwPolyline to EntityType.Polyline2D.
  • Rename DxfDocument.Entities.LwPolylines to DxfDocument.Entities.Polylines2D.
  • Rename Polyline to Polyline3D.
  • Rename EntityType.Polyline to EntityType.Polyline3D.
  • Rename Polyline.ToLwPolyline to Polyline3D.ToPolyline2D.
  • Rename DxfDocument.Entities.Polylines to DxfDocument.Entities.Polylines3D.
  • Rename Spline.ToPolyline to Spline.ToPolyline3D.
  • Rename Spline.ToLwPolyline to Spline.ToPolyline2D.
  • Rename Circle.ToPolyline to Circle.ToPolyline2D.
  • Rename Arc.ToPolyline to Arc.ToPolyline2D.
  • Added the method Transform to the UCS class to transform points from world coordinates (WCS) to local/object coordinates (OCS), and vice versa.
  • Deleted the property Elevation from the UCS class, although it appears as a parameter in the DXF, it is unnecessary. It seems that it does not play any role and it is always zero.
  • Added the property CurrentUCS to the DrawingVariables, that represents the current/active UCS. It encapsulates the the DrawingVariables UcsOrg, UcsXDir, and UcsYDir.
  • Deleted the DrawingVariables UcsOrg, UcsXDir, and UcsYDir.
  • Added the property Description to the Layer class. In the DXF, this information is stored as extended data.
  • The list of control points of the Spline entity will not include duplicate points required to build closed periodic splines, they will be internally handled.
  • The creation method of all splines loaded from a DXF without fit points will be considered as constructed by control points, despite of the value stored in the DXF.
  • The SmoothType (None, Quadratic, or Cubic) can now be set for Polyline2D entity (formerly LwPolyline) and Polyline3D (formerly Polyline).
  • Updated the file "netDxf Documentation.chm".

[2021/10/24]

  • The internal blocks that start with "*U" or "*T" can be safely renamed. They are internally created to represent dynamic blocks, arrays, and tables; although the information of those objects is lost when importing the DXF, the block that represent its graphical appearance is imported.
  • PolyfaceMesh vertexes are now a list of Vector3. The additional information that the DXF requires will be generated when the file is saved.
  • Deleted the PolyfaceMeshVertex class, there is no use for it anymore.
  • PolyfaceMeshFace does not inherit from DxfObject anymore.. The additional information that the DXF requires will be generated when the file is saved.
  • PolyfaceMeshFace can have its own Layer and/or Color. By default they are set to null to inherit from its parent PolyfaceMesh.
  • Polyline vertexes are now a list of Vector3. The additional information that the DXF requires will be generated when the file is saved.
  • Deleted the PolylineVertex class, there is no use for it anymore.
  • Added a new method ToLwPolyline to the Polyline and Spline class. It returns a LwPolyline(2d polyline) that is the result of projecting the entity into the plane defined by its normal.
  • Added a BezierCurveQuadratic class that represents a second degree bezier curve.
  • Added a BezierCurveCubic class that represents a third degree bezier curve.
  • Added a constructor to the Spline class that will initialize a nurbs curve from a set of quadratic or cubic bezier curves.
  • Added the SPLINESEGS as a header variable. It is used as the a base value for the precision when the additional vertexes for SplineFit Polylines are generated. For open polylines the Precision = SplineSegs * (Number of Vertices - 1), for closed ones Precision = SplineSegs * Number of Vertices.
  • Implemented the SmoothType property of the Polyline class to smooth out polylines as quadratic or cubic B-Splines, althought is recommended to use a Spline entity in these cases.
  • Smoothed Polylines by CurveFit will be imported as LwPolylines.
  • The Spline constructor that takes a set of fit points will also generate the control points so it can be fully utilized. It creates a list of cubic bezier curves that passes through the fit points, and with the resulting curves the spline will be initialized.
  • The Spline properties IsClosed and IsClosedAndPeriodic (renamed form IsPeriodic) can now be changed.
  • The Spline knot vector values can now be changed.
  • (fixed) Workaround for multiline styles with no name in bad formated DXF files.
  • (fixed) The precision argument of the Arc.PolygonalVertexes method represents the number of vertexes genarated not the number of division, as it is the case of similar methods of other entities.

[2021/09/18]

  • Leader entitities with less than two vertices will be deleted when loading a DXF file.
  • (fixed) Changed the default DxfDocument comment to show that netDxf is licensed under MIT.
  • (fixed) Possible out of range error for the LuPrec header variable when reading a DXF file. Out of range values will default to 4.
  • (fixed) When writing a DXF file the codes for the dimension style overrides TolerancesLowerLimit and TolerancesUpperLimit were switched.
  • (fixed) Error in the ShapeStyle when trying to get the a shape name from a specified number.
  • (fixed) The default linetype will be given to a layer state if the specified one in the DXF is not found.
  • (fixed) Complex linetypes assigned to a layer were not properly initialized.

[2021/06/20]

  • Loading AutoCad2000 (AC1015) or AutoCad2004 (AC1018) DXF files containing non-ASCII characters will work once again. Additionally the Net Standard 2.1 build requires a reference to the external library "System.Text.Encoding.CodePages".

[2021/05/23]

  • Added two methods to the MathHelper class to transform object 2d coordinates to world coordinates given the entity normal and elevation.
  • Added two methods to the MathHelper class to transform world coordinates to object 2d coordinates given the entity normal, they also return as an out parameter the average Z axis value of the transformed points.
  • Deleted netDxf.nuspec file.
  • Improved the Leader.Update method, its results should be more consistent in transformed Leader entities.
  • Added the property Direction to the Leader class. It represents the direction of the annotation.
  • (fixed) When loading a Leader with a text annotation, it was assumed that it always had a hook line. It might not be always the case. Now when assigning a text annotation to a Leader it will not automatically add one, it needs to be done manually if desired. Also a call to the Update method is not done automatically. It is needed to reflect the actual properties and style of the Leader, but there might be special cases when it is needed to have control over it. See "AssignAnnotationToLeader()" sample.

[2021/05/02]

  • Added netDxf.nuspec file.
  • Ellipses with its major axis smaller than its minor axis are not allowed.
  • Streams with not accessible Position property are not supported.
  • (fixed) LayerState containing a non existent layer will not be added. This behavior differs when the LayerState comes from an external LAS file, in the latter case the non existent layer is added to the document. This is to allow the LAS file to be used layers templates. Additionally if the LayerState points to a non existent linetype, the default "Standard" will be assigned.

[2021/03/27]

  • The netDxf library is now licensed under the MIT License.
  • Updated solution file to Visual Studio 2019.
  • netDxf targets multiple frameworks, predefined frameworks for Net Framework 4.5, Net Standard 2.1, Net Core 3.1, and NET 5.0.
  • The ImageDefinition properties File, Width, Height, HorizontalResolution, and VerticalResoultion now can be modified.
  • The ShapeStyle property File can now be modified.
  • The UnderlayDefinition property File can now be modified. The file extension must match its type.
  • To declutter the DxfDocument, the entity operations such as adding, removing, or retiveing a specific list of entities (Lines, Circles,...) that where done directly through the drawing document have been moved to the Entities property of the DxfDocument. These are no more than shortcuts to the real place where the entities are stored in a document, this is the drawing.Layouts[layoutName].AssociatedBlock.Entities. The layout where the operations are performed is defined by the ActiveLayout.
  • The ImageDefinition constructors "public ImageDefinition(string file)" and "public ImageDefinition(string name, string file)" are only available when targeting the Net 4.5 framework. This is to avoid the use of the additional System.Drawing.Common.dll library. See CreateImageDefinition() sample.
  • The TextStyle method "public static string TrueTypeFontFamilyName(string ttfFont)" is only available when targeting the Net 4.5 framework. This is to avoid the use of the additional System.Drawing.Common.dll library. It will now only available when targeting the Net 4.5 framework.
  • The HeaderVariable DwgCodePage will not be used to load or save DXF files, prior to DxfVersion.AutoCad2007 ASCII encoding will be use and UTF8 for later. It doesn't seems to play any role, open a new issue at GitHub if non-ASCII characters does not show up correctly. This will avoid the use of additional libraries to handle the encoding code pages.

[2.4.2 - 2021/03/23]

  • Now the ShapeStyle does not require the SHP file to read the shape information only the SHX must be present.
  • The Insert Sync method will not modify any value assigned to the attribute Value property.
  • (fixed) A couple errors when writing the style overrides of a dimension to the extended data.
  • (fixed) Error when reading frozen layers from a DXF.
  • (fixed) Round off issues when transforming insert attributes, this may also affect other text based entities and attribute definitions. The MathHelper.NormalizeAngle method will check if the normalized angle is very close to 360 or -360 and return 0 in these cases.
  • (fixed) Error when saving to a file an absolute rotation value of complex linetypes.
  • (fixed) Negative scale values should be allowed in the Insert constructor as it is in the Scale property. Deleted the Insert constructor "public Insert(Block block, Vector3 position, double scale)", change the Scale property instead.

[2.4.1 - 2020/12/06]

  • Added LayerStates accessible trough the Layers.StateManager. For more details see LayerStateManager() sample.
  • Added some workarounds for invalid values in buggy DXF files.
  • Renamed AttributeFlags.Visible to AttributeFlags.None.
  • Renamed Face3dEdgeFlags.Visibles to AttributeFlags.None.
  • The AttributeDefiniton and Attribute Value property are now stored as strings. The user will be responsible on how to convert this value to and from the string. In the end this value is always stored in a DXF file as a string (code 1), and how the conversion is done from a generic object value may differ from user to user.
  • Now it is possible to change the ImageDefinition of an Image entity.
  • Now it is possible to change the UnderlayDefinition of an Underlay entity.
  • Now it is possible to change the ShapeStyle and Name of a Shape entity. You will need to make sure that the actual shape style file has a shape with the actual name. There are a few methods to help you with that in the ShapeStyle class but they only work with the SHP shape files.
  • (fixed) Error creating the Underlay definition dictionaries when multiple entries of the same type PDF, DWF, or DGN where present.
  • (fixed) Linetypes that contain complex segments were not being added to corresponding reference list of the TextSyle or ShapeStyle.
  • (fixed) The layer transparency was not being written correctly to the DXF.
  • (fixed) Blocks associated to paper space layouts can contain attribute definitions, although its use is uncommon there is no reason they cannot have them.
  • (fixed) Issue with DXFs with multiple Model viewports (VPorts) that contain extended data information.
  • (fixed) Texts containing commas in any LinetypeTextSegment of a complex linetype.
  • (fixed) LwPolyline.Reverse method when its vertexes have different bulge values.

[2.4.0 - 2020/08/20]

  • Added US Survey Feet, US Survey Inches, US Survey Yards, and US Survey Miles to the DrawingUnits.
  • All classes derived from DxfObject can contain XData (extended data). The TextStyles and ShapeStyles extended data information will be combined into the DXF STYLE table. The DxfDocument class derives from DxfObject for convenience of this library not because of the DXF structure. It can contain external data information XData, but it will not be saved in the DXF. The public classes PolylineVertex and PolyfaceMeshVertex can contain extended data information XData, but they will not be saved in the DXF AutoCAD crashes if they are.
  • Removed the IHasXData interface, it is not needed anymore.
  • Removed the AciColor methods ToTrueColor and FromTrueColor, they have no use outside the DxfWriter and DxfReader classes.
  • Removed the MaxCapacity limits from the TableObject collections, except for layouts that it is 256 = 255 (paper space) + 1 (model space) exceeding this limit may crash AutoCad. According to the AutoCad ActiveX documentation there is no limit, therefore the DXF code 70 maximum number of entries in table is obsolete, it represents a 16-bit integer value.
  • Removed the MaxCapacity property from the TableObject collections.
  • The RasterVariables object is always saved, regardless if the document contains images or not.
  • Added a check for the binary data record of the extended data. It cannot exceed 127 bytes, if needed divide it into multiples XDataCode.BinaryData records.
  • Added the main Viewport of the Layout, that was deleted in v2.3.0.
  • Added Swap method to the MathHelper class.
  • The block description is now loaded and saved to the DXF.
  • Removed the scale restrictions for the complex linetype segments. Even thought I would recommend to always use values greater than zero, you might not get the desired results.
  • Renamed LeaderPathType.StraightLineSegements to LeaderPathType.StraightLineSegments.
  • Renamed DxfObjectCode.LightWeightPolyline to DxfObjectCode.LwPolyline.
  • Renamed SubclassMarker.LightWeightPolyline to SubclassMarker.LwPolyline.
  • Force the use of the ASCII.WindowsCodePage encoding in the DxfReader class, just for cases where there was a problem reading the codepage from the file.
  • Misspelling corrections.
  • (fixed) Table collection handles that are saved in the DXF OBJECTS section were not preserved.
  • (fixed) The RasterVariables object didn't have an owner.
  • (fixed) Index to RGB color equivalent in the AciColor class.
  • (fixed) The FrozenLayers list of the Viewport entity cannot contain null items or layers that belong to different documents.
  • (fixed) When an open LwPolyline is converted to a set of vertexes (PolygonalVertexes method) the last vertex will not be welded to the first if they fall inside the defined threshold.
  • (fixed) Renaming Layouts associated blocks.
  • (fixed) Issue with the start and end angles when performing symmetries in Arc entities:
  • (fixed) Issue with the start and end angles when performing symmetries in Ellipse arc entities:
  • (fixed) Error when trying to copy to clipboard inside AutoCAD for DXF files saved with netDXF that contains the header variables $INTERFEREOBJVS and $INTERFEREVPVS, since this variables refer to visual style information that netDxf does not save. This variables will not be loaded in case they appear in a DXF.
  • (fixed) After loading a DXF the layouts associated blocks will be renamed to strictly follow *Paper_Space, *Paper_Space0, *Paper_Space1,...
  • (fixed) Transforming an ellipse might not show the correct result under special circumstances.
  • (fixed) Issue when renaming layouts.
  • (fixed) Issue when removing layouts.
  • (fixed) The LinearDimension block that represents the dimension drawing was not generated correctly. Now, the extension lines should not appear crossed under some circumstances.
  • (fixed) The MathHelper methods PointInSegment will consider the start and end points as part of the segment.
  • (fixed) The MathHelper method NormalizeAngle will not round almost zero angles automatically.
  • (fixed) The DimensionStyle FitDimLineInside (DIMSOXD value) was used incorrectly, when it was true is should be false and vice versa.
  • (fixed) When a Block is created from a DxfDocument or DXF file, any Hatch entity that it may contain will have its associative property set to false. This will avoid problems when the same entity its associated to multiple hatches, or when any of its paths is defined by the intersection of several entities.
  • (fixed) When cloning (Clone) a Hatch entity its associative property will be set to false, to avoid problems when the same entity its associated to multiple hatches.
  • (fixed) When transforming (TransformBy) a Hatch entity its associative property will be set to false, to avoid problems when the same entity its associated to multiple hatches.
  • (fixed) Fixed a few issues with the tolerances display method in the dimension style and its equivalent override.
  • (fixed) Issue with LinearDimension entities related to its rotation, when they were loaded from a DXF file.
  • (fixed) Comment in TextVerticalPlacement property of the DimensionStyle class, the default value is Centered not Above.

[2.3.0 - 2019/06/23]

  • Added Matrix2 struct.
  • Added Matrix4 struct.
  • Added Vector4 struct.
  • Added property IsIdentity to Matrix3. This will allow to avoid unnecessary multiplications during transformations.
  • Added TransformBy method that takes a Matrix4 (transformation, column major convention) as argument to the EntityObject class.
  • Added TransformBy method that takes a Matrix3 (rotation and scale, column major convention) and a Vector3 (translation) as arguments to the EntityObject class.
  • Added Explode method to Insert entity. A few entities might not appear as expected when a non-uniform and/or negative scaling is applied, read the TransformBy method documentation of each entity.
  • Added Explode method to MLine entity. It will convert the actual MLine to its Line and Arcs components.
  • Added custom drawing variables, now it is possible to add your own header variables to the drawing. When a DXF is loaded all unrecognized header variables will be automatically added as custom header variables to the drawing.
  • Added Width property to Text entity it is only applicable if the Alignment is Fit or Aligned.
  • Added MirrText DrawingVariable to the document, it controls whether the text will be mirrored or not when a symmetry is performed.
  • Added the static property DefaultMirrText to the Text and MText entity. It is the equivalent MirrText DrawingVariable used when the entity does not belong to a DxfDocument.
  • Added the static property DefaultInsUnits to the Insert entity. It is the equivalent InsUnits DrawingVariable used when the entity does not belong to a DxfDocument.
  • Added two new constructors to Viewport class to create rectangular viewports.
  • Added two new constructors to the Underlay class that takes also the position and scale.
  • Added properties IsByLayer and IsByBlock to the Linetype class.
  • Added properties IsBackward and IsUpsideDown to Text entity.
  • Added property to Matrix3 to access its [row,column] elements by index.
  • Added properties IsBackward and IsUpsideDown to Attribute and AttributeDefinition objects.
  • Added Tolerance TextHeigth property controls the height of the tolerance text overridden the default value defined in its style.
  • Improved the way the Ellipse method PolygonalVertexes generates the points in an ellipse arc.
  • Improved the speed of the method IsValidName of the TableObject class. This will improve the overall speed of adding table objects blocks, layers, styles,... to the document; what, also, will improve the DXF loading performance.
  • The InvalidCharacters property of the TableObject class will return a char[] instead of a IReadOnlyList.
  • Polyline entities now can be used to create a HatchBoundaryPath.
  • The Underlay scale is now a Vector2 and its components must be greater than zero, the Z value has no use.
  • The Insert vector scale components cannot be zero.
  • The Shape entity WidthFactor property now admits negative numbers.
  • The Viewport will show the grid by default.
  • Modified the TextStyle class to use a font file or a font family name plus its font style, but not both.
  • The TextStyle method TrueTypeFontFamilyName is now public static in case it is needed, the constructor does not use it anymore.
  • Deleted last NewLine character in the ToString methods of the matrix classes.
  • Deleted the property IsTrueType from the TextStyle class.
  • Deleted the ExtMax and ExtMin properties from the DrawingVariables class, since those values are not calculated. It is still possible to access them as a custom header variable if the loaded DXF contains them. See sample AddHeaderVariable().
  • Deleted a few unnecessary checks when adding an entity to a block. This will improve the overall speed of adding entities to the document; what, also, will improve the DXF loading performance.
  • Deleted the Matrix3 constructor that takes an array as argument. It was actually using the row major convention while the transformation matrices are written as column major.
  • Deleted the layout Viewport. This is the viewport with id 1 that represents the view to the paper space, it is more related to the UI, it has no graphical representation, and it will not be loaded.
  • Updated the StringEnum class to use generics.
  • When a Leader is removed from a document, the annotation, if exists, will also be removed; although AutoCad does not.
  • The Shape entity Size property now does not allow negative values, rotate it 180 degrees to achieve the same result.
  • Renamed Tolerance Height property to ProjectedToleranceZoneValue.
  • Renamed Tolerance ParseRepresentation method to ParseStringRepresentation.
  • Renamed Tolerance TryParseStringRepresentation method to TryParseStringRepresentation.
  • Renamed EntityType.LightWeightPolyline to EntityType.LwPolyline for short and same name as the class.
  • Renamed PolyfaceMeshVertex.Location to PolyfaceMeshVertex.Position as it is in similar cases.
  • Renamed MLineVertex.Location to MLineVertex.Position as it is in similar cases.
  • Renamed MLineStyleFlags.StartSquareEndCap to MLineStyleFlags.StartSquareCap.
  • Renamed MLineStyleFlags.ShowMiters to MLineStyleFlags.DisplayJoints this is the name given in the AutoCad UI and it is a more accurate definitions. This options does not include the miters line at the start and end vertexes only the inner corners.
  • (fixed) Issue when saving MLine direction and miter coordinates.
  • (fixed) Issue when saving Shape position. The official DXF documentation is wrong it says that it is saved as WCS coordinates but it is actually in OCS coordinates.
  • (fixed) When reading a TextStyle if both the font file and the font extended data information the font style was not applied.
  • (fixed) The property DimTxtDirection of the DimensionStyle class was not read properly from the DXF.
  • (fixed) Error when combining open LwPolylines or Polylines with other entities to create a HatchBoundaryPath.
  • (fixed) A few issues when cloning a Tolerance entity.
  • (fixed) The Text Alignment Fit and Aligned should work properly.
  • (fixed) Adding and removing the clipping boundary of a viewport, when it already belongs to a document, will be automatically add and remove, respectively, the entity from the document.
  • (fixed) Adding and removing the annotation of a leader, when it already belongs to a document, will be automatically add and remove, respectively, the entity from the document.
  • (fixed) When cloning a Viewport the frozen layers were not being cloned.
  • (fixed) When writing a DXF the Tolerance code 73 is 0 for both Text and MText annotations.
  • (fixed) Radial and Diametric dimensions not showing the "R" and "Ø" when no prefix is use in the dimension style.
  • (fixed) The MLineStyleElements needs to be ordered from larger to smaller offset values.
  • (fixed) Bug when creating boundary paths for hatches when the normal was not the UnitZ (0,0,1).
  • (fixed) Only a single HatchBoundary.Edge of type Polyline can be used to initialize a hatch boundary, it also must always be closed.
  • (fixed) Error when cloning an associative Hatch with a polyline as boundary path.
  • (fixed) The method DxfDocument.CheckFileVersion will fail if an invalid $ACADVER value is found in the DXf header.
  • (fixed) If while reading a DXF the Layer Lineweight value is invalid it will change it to the Default.
  • (fixed) If while reading a DXF the Layer Color value is invalid it will change it to the Default.
  • (fixed) If while reading a DXF the Layer Linetype value is invalid it will change it to Continuous.
  • (fixed) In the TrueTypeFamily method in TextStyle class, the PrivateFontCollection.AddFontFile might also fail if the font is incompatible. Also delete unnecessary check if the file exists.
  • (fixed) When a new element is added to a MLineStyle that already belongs to a document, it was not registering its linetype.
  • Some other minor additions and fixes that probably forgot.

[2.2.1 - 2018/10/17]

  • Improved the MText.PlainText() method to reflect the latest formatting changes.
  • Added MTextParagraphVerticalAlignment enum that controls how fractions, superscripts, subscripts, and characters of different heights are placed in a paragraph line.
  • Added method WriteFraction() to help adding fractions into the text of a MText entity.
  • Substitute, what seems and old code, "^J" with the new paragraph code "\P" in the text of MText entities.
  • The MTextFormattingOptions constructor does not require an instance of a TextStyle.
  • Updated "netDXF Documentation.chm".
  • Reworked how the text of an MText entity is formatted. See MTextParagraphFormatting() and MTextCharacterFormatting() sample.
  • Added the class MTextParagraphOptions that holds the paragraph properties of the MText text.
  • Added MText StartParagraph method that optionally takes an instance of the MTextParagraphOptions class.
  • Added Superscript and Subscript properties to the MTextFormattingOptions class.
  • Added Hatch pattern method NamesFromFile and Save, the functionality is similar as the methods in the Linetype class but instead of working with LIN files they work with PAT files.
  • Rename HatchPattern method FromFile to Load, to accommodate to the same nomenclature as its equivalent in the Linetype class.
  • (fixed) Remove ArgumentOutOfRangeException exception in the LinetypeShapeSegment and LinetypeTextSegment Scale property, negative values are allowed. Zero values are also allowed even thought they should not be used.
  • (fixed) Loading a pattern from a PAT file may fail under some circumstances.
  • (fixed) LIN and PAT files must use the dot as the decimal separator.
  • (fixed) Spelling error in SplineVertex class the weight value, it should have been Weight.
  • (fixed) Handling of the MTextFormattingOptions font name. When using TTF fonts use the font family name as the font name, when using SHX use the file name with the SHX extension.
  • (fixed) Floating point values must always use the dot as the decimal point when formatting texts for MText entities.
  • (fixed) True color value in the MTextFormattingOptions. The DXF is not consistent in the way it converts a true color to its 24-bit representation; stuff like layer colors follows BGR order, while the color when formatting text uses RGB order.

[2.2.0 - 2018/07/21]

  • Updated "netDxf Documentation.chm".
  • Cloning dimension and leader entities will also clone the style overrides, if there are any.
  • Cloning an associative hatch will also result in another associative hatch. It will clone the entities that makes up the boundaries.
  • AttributeDefinitions no longer derive from EntityObject they are handled directly through the AttributeDefinitions dictionary of the block.
  • Deleted the property AttributeDefinitions of the DxfDocument, attribute definitions are handled directly through the block, also attribute definitions in the "Model" layout.
  • Now is allowed to access directly the entities in the *Model_Space and *Paper_Space# blocks, see AccessModelBlock() sample.
  • The document entities lists now return an IEnumerable instead of an IReadOnlyList. Internally it uses Linq to return the specific entity list from the associated block of the active layout.
  • The *Model_Space and *Paper_Space# blocks are not marked as ReadOnly anymore.
  • The DxfDocument entities lists Arcs, Lines, Circles,... now return only the entities for the active layout.
  • Revised the Leader read and write process to accommodate the latest changes made to them.
  • Deleted the Leader property TextVerticalPosition, this value is controlled by the property TextVerticalPlacement of the dimension style associated with the leader.
  • Deleted the enum LeaderTextVerticalPosition.
  • Added checks for possible null argument in the style parameter of the Leader constructors.
  • Added a public setter for the HasHookLine property of the Leader entity.
  • Changed the default Leader property LeaderTextVerticalPosition to Centered.
  • Added public property IsNormaized to Vector2 and Vector3 structures to avoid normalizing vectors that are already normalized..
  • Added setter to the Block property of the dimension. Set the dimension Block property to null to delete the reference to the block associated with the dimension, this also deletes the block from the document.
  • Revised the DimensionBlock class. The automatic generation of dimension blocks is limited and it does not support the full set of properties defined by the dimension style.
  • Dimension offset values cannot be negative, if needed switch its references.
  • Deleted the DiametricDimension and RadialDiamension property Offset, to place the dimension text manually use the TextReferencePoint property.
  • Added TextRotation to Dimension entities.
  • Added TextReferencePoint to Dimension entities.
  • Added constant Iso25 DimensionSytle with the default properties as defined in AutoCad.
  • Added property BuildDimensionBlocks to the DxfDocument. It controls if the block that represent dimension entities will be automatically created when added to the document. IMPORTANT: by default it is set to false, no dimension blocks will be generated. See DimensionBlockGeneration() sample.
  • Renamed the DimensionStyle property FractionalType to FractionType.
  • Revised the DimensionStyle class adding lots of new properties.
  • Revised the DimensionStyleOverride class adding lots of new properties, matching the changes to the dimension style.
  • Revised the Dimension entity classes to accommodate the added properties.
  • Added missing PlotSetting properties (ScaleToFit, PlotType, ShadePlotMode, ShadePlotResolutionMode, ShadePlotDPI).
  • PlotSetting paper margins properties (left, bottom, right, and top) encapsulated in a structure called PapertMargin.
  • Added XData property to table objects. All objects that may contain extended data implement the interface IHasXData.
  • When loading or writing a DXF that is not one of the supported versions a DxfVersionNotSupportedException will be thrown.
  • While loading DXF files, if a TextStyle is found that references a font file that does not have the extension TTF or SHX, it will be substitute by the default "simplex.shx".
  • (fixed) The Arc method PolygonalVertexes now return a List instead of a IEnumerable same as the equivalent method in the Circle, Ellipse, LwPolyline, and Spline classes.
  • (fixed) Error when cloning ShapeStyle objects.
  • (fixed) When reading complex line types from a DXF, the original handles were being overwritten.
  • (fixed) Force the writer to use always ASCII encoding for file previous to AutoCad2007. Some encoding code pages defined in the DXF file may cause problems. When using non ASCII characters I recommend to always use AutoCad2007 version or higher they are always saved as UTF-8.
  • (fixed) The drawing variable HandleSeed is now automatically updated when a new DxfObject is added to the document.
  • (fixed) Formatting architectural units in the LinearUnitFormat class.
  • (fixed) Error in the Attribute Clone method, the attribute definition may be null. It is only possible when loading external DXF files, the attribute constructor will raise an exception in case of a null reference.
  • (fixed) The Leader Update method will take the style overrides into account.
  • (fixed) Error in the Leader entity Clone method, the leader annotation may be null.
  • (fixed) The ordinate dimension measurement.
  • (fixed) Wrong code when reading style override TextVerticalPosition for leaders.
  • (fixed) Wrong value when writing style override DimRoundOff for dimensions.
  • (fixed) Deleted some duplicate code that was messing with the reading of the DimensionStyle DIMZIN value (leading and trailing zeros suppression).
  • (fixed) While reading Angular2LineDimension entities the ArcDefinitionPoint (16,26,36) vector was not saved.
  • (fixed) While reading OrdinateDimension entities the FirstPoint (13,23,33) and SecondPoint (14,24,34) vectors were not saved.

[2.1.0 - 2018/06/02]

  • Added Shape entity, see Shape() sample.
  • Added ShapeStyle table object, see Shape() sample.
  • Added property SupportFolders to the DxfDocument, see Shape() and ComplexLinetype() sample.
  • Added support for complex line types, see ComplexLinetype() sample.
  • Added AddFromFile methods to the Linetypes class, see ComplexLinetype() sample.
  • Added Save method to the Linetypes and Linetype classes, see ComplexLinetype() sample.
  • Added NamesFromFile method to the Linetypes and Linetype classes, see ComplexLinetype() sample.
  • Rename Linetype method FromFile to Load.
  • Added some checks for not null arguments.
  • The BlockRecord constructor is now internal, it should not be used outside the library.
  • Reorder the arguments of the the underlay definitions DWG, DGN and, PDF constructors, now they take a name and a file, instead of a file and a name to follow the same order as other table objects.
  • Rename UnderlayDefiniton property FileName to File.
  • Reorder the ImageDefinition constructors to take first the name and then the file, and not vice versa.
  • Rename ImageDefinition property FileName to File.
  • Improved the TextStyle class now it is possible to work true type fonts, defining the font family and style without the need of using the ttf file, see TextStyle() sample.
  • Modified the TextStyle class to avoid the use of the PresentationCore.dll assembly.
  • Added readonly header variables ExtMin and ExtMax.
  • DimensionStyle property DimRoundoff minimum value is 0.000001 or just zero to indicate no rounding off.
  • The MathHelper.RoundToNearest method will round off correctly the last decimal.
  • IMPORTANT: When working directly with streams in read or write operations their positions will not be reseted automatically. See "ReadWriteFromStream()" and ""ReadWriteFromStream2()"" sample in TestDxfDocument project for more details.
  • Added the header DrawingVariables UcsOrg, UcsXDir, and UcsYDir.
  • Added MText property drawing direction.
  • Added Vector2 and Vector3 multiplication and division component by component.
  • Added parameter checks for invalid values in several constructors.
  • (fixed) Error when writing reactors for entities that belongs to a group that was not added to a document, while at the same time the entity belongs to it.
  • (fixed) Error reading the Solid entity thickness value.
  • (fixed) Error reading the Trace entity thickness value.
  • (fixed) Corrected the default value for the dimension style parameter LengthPrecision when reading dxf files (the netDxf standard is still 2).
  • (fixed) Corrected the default values for the dimension style parameters DIMDEC and DIMTAD when reading dxf files.
  • (fixed) When adding a segment to the list of a MLineStyle, the Linetype of the segment needs to be added too.
  • (fixed) Missing read and write code of MText property LineSpacingStyle.
  • (fixed) Bug when passing a single blank to the dimension UserText property.
  • (fixed) The MLineStyle was not cloned while cloning a MLine entity.
  • (fixed) When reading a dxf if the DimRoundoff value was out of range, it was not set to the correct default value.
  • (fixed) The MText rotation was not calculated correctly when it was not defined in the world XY plane.
  • (fixed) AutoCad 2018 introduced some undocumented changes to the MText entity that broke up the existing code.
  • (fixed) Issues with the clipping boundary in images.
  • (fixed) Issue with image in dxf. While reading a dxf, any Image entity with vector u or v equals to zero will be skipped.

[2.0.3 - 2017/5/24]

  • Added AutoCad drawing database version number AC1032 = AutoCAD 2018.
  • A block that represents the dimension will be generated if, while loading a dxf, a Dimension entity is found with no associated block.
  • (fixed) The properties of the document viewport (*Active VPort) will be properly loaded.
  • (fixed) Issue Id #13553 Arcs in exploded polylines with zero radius.
  • (fixed) Issue Id #13552 Exception with open viewport.
  • (fixed) Issue Id #13551 Exception for dimension with negative text offset. Now its absolute value will be used instead.
  • (fixed) Issue Id #13550 Problem with MLINESTYLE with no elements. A default element will be added to the style if no one is found.
  • (fixed) Issue Id #13548 Hatch issue. Workaround for associative hatches which contour edges point to erroneous entities.
  • (fixed) Issue Id #13543 Reading Angular2LineDimensions.
  • (fixed) Issue Id #13540 Error when loading Spline created with only Fit Points.
  • (fixed) Issue Id #13539 encoding on linux platform. Added workaround for possible bug in a nightly build of Mono.
  • (fixed) Typing error in LwPolyline class. The method PoligonalVertexes has been renamed to PolygonalVertexes.
  • (fixed) Issue Id #13538 LWPolyline.PoligonalVertexes.

[2.0.2 - 2016/12/29]

  • Added the dimension style property DimLineOff, and its corresponding override, to suppress the drawing of the dimension line.
  • Rename the dimension style properties ExtLine1 and ExtLine2, and their corresponding overrides, to ExtLine1Off and ExtLine2Off, respectively, to better reflect its purpose.
  • The UserText property of a dimension will now also be copied when cloning.
  • Added the property BigFont to the TextStyle class. This is only applicable to Asian SHX fonts.
  • Updated "netDxf Documentation.chm".
  • (fixed) Workaround for possible incorrect values while reading the spline tolerances.
  • (fixed) Issue Id #13534 Another font for default text style. The FileFont property of the TextStyle is now writable to be able to change the font used by the default "Standard" style.
  • (fixed) Issue Id #13532 Ellipse.PolygonalVertexes(360<) cause OutOfMemory.
  • (fixed) Issue Id #13531 Issues with dxf version and. Fix reading the InsBase header variable of an external dxf.
  • (fixed) Issue Id #13530 open autocad 2000 files (R15). Fix for entities with possible 0 value in code 330.
  • (fixed) Issue Id #13529 Typing error in struct Matrix3.
  • (fixed) Issue Id #13526 Exception on 0 degree angular dimension. If while loading a dxf an Angular2LineDimension entity made of two parallel lines is found, it will be skipped.

[2.0.1 - 2016/8/9]

  • Implemented the code "\X" for dimension UserText. See sample DimensionUserTextWithTwoLines().
  • Rearrange the arguments in the OrdinateDimension constructor to maintain the same order in all of them.
  • (fixed) Issue Id #13525 HatchPattern now requires name.
  • (fixed) Issue Id #13524 Bug in DimensionStyleOverrideType.DIMDEC processing.

[2.0 - 2016/6/24]

  • Updated target framework to .NET Framework 4.5.
  • The library is CLS-compliant.
  • Added dimension style overrides for dimensions and leaders. See DimensionStyleOverrides() sample.
  • The constant MathHelper.Epsilon that is used across the netDxf library is now a static writable value. By default is set to 1e-12.
  • Revised the TextStyle class. Added two new readonly properties FontFamilyName and GliphTypeface, only applicable to true type fonts.
  • The XDataRecord struct is now a class.
  • The XDataRecord constructor will check the passed arguments to ensure that they are a valid combination.
  • The XDataRecord properties Code and Value are now readonly.
  • The XDataCode class is now an enum.
  • The Lineweight class is now an enum. The only accepted lineweight values are 0, 5, 9, 13, 15, 18, 20, 25, 30, 35, 40, 50, 53, 60, 70, 80, 90, 100, 106, 120, 140, 158, 200, and 211; plus the reserved ones Default, ByLayer, and ByBlock; that correspond to the enum numeric value.
  • Deleted the DimensionStyle properties DIMBLK and DIMSAH, they will be handle automatically when both of the dimension line arrows are the same.
  • The DimensionStyle property DIMPOST separated in two strings DimPrefix and DimSuffix.
  • Renamed the DimensionStyle properties to better describe their purposes. They now follow the naming that appear in AutoCad in the properties window when selecting a dimension entity.
  • Renamed LineType class to Linetype.
  • Renamed LineTypes class to Linetypes.
  • The Linetype Segments property is now readonly.
  • Added a constructor to Linetype class that also takes a list of segments as an argument.
  • The PolyfaceMeshFace property VertexIndexes is now readonly and will return a List instead of an array.
  • The AciColor property IndexRgb is now an IReadOnlyDictionary<byte, byte>.
  • The TableObject property InvalidCharacters is now an IReadOnlyList.
  • The Matrix3 class now implements the interface IEquatable.
  • The AttributeCollection class now implements the interface IReadOnlyList.
  • Many constructors and methods that used to take a List, IList, ICollection as argument now takes an IEnumerable.
  • Class properties that used to return a ReadOnlyCollection now returns an IReadOnlyList
  • Deleted the restriction that the attribute definition tags cannot contain spaces. While AutoCad maintains the spaces while loading and saving dxfs, it does not allow to create them through the UI.
  • Renamed DimensionArrowhead.RightAngle to DimensionArrohead.Open90.
  • Added the property Leader.Hook to allow easy access to the last leader vertex position, aka leader hook.
  • Added the argument "bool resetTextPosition" to the Leader.Update method, so you can decide if the position of the last leader vertex is modified according to annotation position, or vice versa. See ResetLeaderAnnotationPosition() sample.
  • The method TableObject.GetReferences will return an empty list instead of null, if there are no references associated with the specified name or object.
  • Table entities are imported as inserts. AutoCad uses anonymous blocks, with name "*T#", to represent tables made of rows and columns. See AcadTable() sample.
  • (fixed) The DxfDocument.Save method will fail if new vertexes are added to a Polyline that has been already added to a document. See Polyline3dAddVertex() sample.
  • Updated "netDxf Documentation.chm".
  • (fixed) The lineweight of the dimension arrowheads were not being applied according to the lineweight of the dimension line.
  • (fixed) DimensionArrohead.Dot and DimensionArrohead.DotSmall block drawing.
  • (fixed) Bug writing the dimension style DIMZIN parameter (suppression of leading and trailing zeros of length dimension values).
  • (fixed) Issue Id #13514 Full ellipse not considered as full ellipse.
  • (fixed) Issue Id #13513 Failed to load dxf with embedded images.
  • (fixed) Issues Id #13512 Id #13510 Id #13508 related with the TextStyle initialization and the "A generic error occurred in GDI+" exception.
  • (fixed) Issue Id #13518 Issue with dxf file with weird edit time.
  • (fixed) Issue Id #13522 Clone insert with attdef.
  • (fixed) Issue Id #13521 Anonymous named block clone.

[1.1.2 - 2016/4/11]

  • All dimension geometry uses local 2d coordinates. For the default normal vector (0,0,1) nothing has changed besides droping the Z component.
  • Added the method SetDimensionLinePosition to dimension entities to set the offset from a point along the dimension line.
  • Added constructor to the AttributeDefinition that takes a tag, a text height, and a text style as arguments.
  • Deleted all code related with the "A generic error ocurred in GDI+" exception until a better fix is implemented.
  • (fixed) If an entity belongs to a group it cannot be removed without removing it first from the group to which it belongs. The group will appear in the reactors list of that entity.
  • (fixed) Bugs with reading and writing dimension entities.
  • (fixed) Bug when adding unnamed groups to a document.
  • (fixed) Issue Id #13509 Failed to open dxf.

[1.1.1 - 2015/12/15]

  • Updated solution to Visual Studio 2015, the previous 2013 solution is saved as netDxf2013.sln.
  • (fixed) Issue Id #13507 Vertical Linear Dimensions Drawn Crossed.

[1.1.0 - 2015/11/27]

  • Added Underlay entity (DGN, DWF, and PDF underlays). See UnderlayEntity() sample.
  • Added Tolerance entity. See ToleranceEntity() sample.
  • Added Leader entity. See LeaderEntity() sample.
  • Added Wipeout entity. See WipeoutEntity() sample.
  • Added a constructor to the Block class to create an external reference.
  • Added the drawing variable PSLTSCALE that controls the paper space linetype scaling.
  • Added a constructor to the Spline class to create a curve from a set of fit points. See SplineFitPoints() sample.
  • The Spline knot vector is now stored as a List instead of a double.
  • The AciColor.IndexRgb() method is now a public static readonly field instead of a public static method.
  • The CoordinateSystem and AngleDirection enums are now directly under the netDxf and netDxf.Units namespaces, respectively, and not inside the MathHelper class.
  • The default RasterVariables units is now Unitless, to avoid any unwanted scaling when inserting external images into the drawing.
  • The ClippingBoundary Vertexes property will return now a ReadOnlyCollection.
  • Renamed PolylineVertex.Location property to PolylineVertex.Position.
  • Renamed LwPolylineVertex.Location property to LwPolylineVertex.Position.
  • Renamed SplineVertex.Location property to SplineVertex.Position.
  • Renamed Point.Location property to Point.Position.
  • Renamed the ImageClippingBoundary class to ClippingBoundary and moved to the netDxf namespace.
  • Renamed the ImageClippingBoundaryType enum to ClippingBoundaryType and moved to the netDxf namespace.
  • Renamed Block.Position property to Block.Origin.
  • Renamed ImageDef class to ImageDefinition.
  • Renamed ImageDefReactor class to ImageDefinitionReactor.
  • Renamed MLine.CalculateVertexesInfo method to MLine.Update.
  • Renamed Dimension.RebuildBlock method to Dimension.Update.
  • Renamde HatchBoundaryPath.UpdateEdges method to HatchBoundaryPath.Update.
  • Renamed ImageResolutionUnits.NoUnits to ImageResolutionUnits.Unitless.
  • Renamed ImageUnits.None to ImageUnits.Unitless.
  • Updated "netDxf Documentation.chm".
  • (fixed) Issue Id #13496 Failed to load file. Now it is possible to load dxf files with externally referenced blocks.
  • (fixed) Issue Id #13497 .net dxf fails to load dxf with missing references.
  • (fixed) When an associative hatch is deleted the boundary entities were not being unlinked.
  • (fixed) The Block.Create and Block.Save methods were not working properly.
  • (fixed) Bug in the DimensionStyle OnBlockChangeEvent.
  • (fixed) Issue Id #13499 A problem about Angular3PointDimension
  • (fixed) Block drawing in Angular2LineDimension.
  • (fixed) Bug creating a hatch boundary from a full ellipse.
  • (fixed) Workaround for some types of true type fonts when they are used in a TextStyle. This fix requires reading the OS Registry and will only work under Windows, check the TextSytle internal method FontFileFromFamilyName.
  • (fixed) The vertexes of the image clipping boundary are expressed in local coordinates of the actual image entity with its true dimensions, and not relative to the width and height of its definition.
  • (fixed) Bug reading the dimension style arrowheads, and the dimension and extension lines linetypes.
  • (fixed) Issue Id #13506 A problem about dimension measurement scale. And a few other glitches related with the dimension drawings.
  • (fixed) Issue #13501 Fix netDxf.csproj to enable compilation on Linux.

[1.0.3 - 2015/05/20]

  • (fixed) Bug with HatchBoundaryPath.UpdateEdges() method, the old edges data was not being cleared.

[1.0.2 - 2015/05/19]

  • Associative hatches are now supported. See AssociativeHatches() sample.
  • Now you can safely add and remove boundary paths from a hatch. Hatches without boundaries will be discarded when saving.
  • The SOLID entity vertexes are now Vector2 and are stored in OCS (object coordinate system). See SolidEntity() sample.
  • Added the Trace entity, its functionality is exactly the same as the Solid. See TraceEntity() sample.
  • Regresion change. The Insert TransformAttributes() method will not be called automatically while adding it to the document, if needed do it manually. This is to avoid overriding the insert attributes position and orientation that were read from the dxf during the loading process.
  • Regresion change. The insert attributes is again a list and not a dictionary. This will avoid losing the attributes with the same tag even if the block attribute definitions do not support it or attributes without its corresponding definition.
  • (fixed) Issue Id #13492 MText inside block with tab character dxf binary.
  • (fixed) Issue Id #13493 Block insertion unit and attributes.
  • (fixed) Bug reading dxf files that contain blocks with attribute definitions with the same tag. The duplicate tags will be removed during the loading process. In any case, having duplicate tags is not recommended in anyway.
  • (fixed) Bug drawing LinearDimensions when both the reference points and the dimension line were in a straight line parallel to the Y axis.

[1.0.1 - 2015/05/18]

  • Added the property LineTypeGeneration to LwPolyline and Polyline entities to enable or disable if the line type pattern is generated continuously around the vertexes of the polyline.
  • (fixed) The MTextFormattingOptions property ObliqueAngle must be between -85 and 85 degrees.
  • (fixed) AttributeDefinitionDictionary.Clear() method.
  • (fixed) EntityCollection.Clear() method.
  • (fixed) XDataDictionary.Clear() method.
  • (fixed) When adding an insert entity to a document its attributes LineTypeChange events were not being registered.

[1.0.0 - 2015/05/12]

  • Now it is possible to modify all properties of tables and entities even when they already belong to a document. See Modifying...() samples.
  • Now it is possible to modify the name of TableObjects such as application registries, layers, line types,ucss text styles, dimension styles, multiline styles, image definitions, groups, layout, and blocks.
  • Added .gitignore file.
  • Corrected lots of misspelling errors in comments.
  • Renamed AciColor.DarkGrey and AciColor.LightGrey to AciColor.DarkGray and AciColor.LightGray, respectively.
  • Renamed LwPolylineVertex.BeginWidth to LwPolylineVertex.StartWidth, this is how it's called in AutoCAD.
  • Renamed Dimension property Value to Measurement.
  • The lightweight polyline vertex start and end width values can only be zero or greater. An exception will be thrown in case of an out of range value.
  • Added Block.Create(DxfDocument doc, string name) method to generate a block from the content of a DxfDocument (only entities in the "Model" layout will be used). This is the same as the Load method but without the need of loading an external dxf first.
  • Added Block.ReadOnly property. Any attempt to modify a ReadOnly block will be discarded. This is the case of the Model_Space and all Paper_Space blocks.
  • Deleted the Ungroup method from the Groups class. Now, the Remove method does that function. It deletes the group but not the grouped entities, allowing that derived in undesirable results, since the entities in a group can belong to different layouts and even to blocks.
  • Attributes and attribute definitions positions are now stored in WCS as other entities like inserts, texts, mtexts,...
  • Added ObliqueAngle property to attributes and attribute definitions.
  • Revised insert TransformAttributes() method, it should be more reliable now.
  • The Attribute class inherits now directly from a DxfObject. It can only appear as part of an Insert entity and it cannot be individually added to a document.
  • The Attribute owner is now the insert entity to which it belongs.
  • The dimension drawing now supports all linear (DIMLUNIT) and angular (DIMAUNIT) unit types. See DimensionsLinearAndAngularUnits() sample.
  • Added DIMLFAC variable to the dimension styles.
  • Added DIMRND variable to the dimension styles.
  • Added request "Added UserText property to Dimension". See DimensionUserText() sample.
  • Added CurrentStyleSheet property to PlotSettings class.
  • Now the active dimension style defined in the drawing variables will not show as <style overrides> in AutoCAD.
  • Now it is possible to read and write the VPort but only the active one, called *Active, no multiview support.
  • Added the Viewport property to the DxfDocument for easy access to the *Active VPort. It describes the current view of the document.
  • Moved all enums and classes related with units and its formatting to the new "Units" namespace.
  • Moved unit conversion methods from the MathHelper class to the UntiHelper class in the "Units" namespace.
  • Moved all interfaces and classes related with the reading and writing of dxf files to the new "IO" namespace.
  • Workarounds for Layouts not properly linked to their associated Model/PaperSpace block while reading bad formatted dxfs.
  • Updated "netDxf Documentation.chm".
  • (fixed) Added missing read dimension style DIMCLRT code in the DxfReader.
  • (fixed) Reworked the way the file encoding is obtained. It seemed that the strings were not being properly decoded in binary files prior to AutoCad2007.
  • (fixed) Bug reading the axis of the Ordinate dimensions.
  • (fixed) When deleting a layout the entities owner were not being updated.

[0.9.5 - 2015/03/14]

  • Improved the Nurbs evaluator (thanks ThVoss).
  • (fixed) Bug with layouts not being registered as user of its associated block. This is related with proposed patch 17308 "Avoid removal of "*Paper_Space" block when using doc.Blocks.Clear()".
  • (fixed) Bug in DxfDocument.CheckDxfVersion with dxf files that do not include the dxf version in the header section. This is related with issue #13491.
  • (fixed) Workaround for layers not defining a linetype style.
  • (fixed) Bug introduced in previous update. The entity blocks were not properly registered in the document. This is only applicable to blocks imported from a dxf.

[0.9.4 - 2015/01/22]

  • Updated "netDxf Documentation.chm".
  • (fixed) Issue Id #13399 FromJulianCalendar throw exception.
  • (fixed) Issue Id #13384 Possible mistake in MText.PlainText()?
  • (fixed) Bug while parsing blocks containing MLine and/or Image entities.
  • (fixed) Possible error while reading an insert entity. Its referenced block name was not being properly decoded.
  • (fixed) Encode non ASCII characters that seemed to affect only binary dxf files.

[0.9.3 - 2014/12/23]

  • Revised all dimension entities, they should be more reliable. Now, there should be no problems in the way reference points and offsets are supplied.
  • Added the DimensionStyles variable DIMCLRD, DIMLTYPE, and DIMLWD that control the dimension line drawing.
  • Added the DimensionStyles variable DIMCLRE, DIMLTEX1, DIMLTEX2, DIMLWE, DIMSE1, and DIMSE2 that control the extension line drawing.
  • Added the DimensionStyle variables DIMSAH, DIMBLK, DIMBLK1, and DIMBLK2 that control the dimension arrowheads.
  • Added the DimensionStyle variable DIMSCALE that controls the overall scale of the dimension.
  • Added the DimensionStyle variable DIMCLRT that controls the color of the dimension text.
  • Rename DimensionStyle.TextStyle to DimensionStyle.DIMTXSTY.
  • Updated solution to Visual Studio 2013. The old 2010 solution is saved as netDxf2010.sln.
  • (fixed) Issue Id #13306 netDxf fails to read dxf file with xData.
  • (fixed) Issue Id #13325 Vector3.AngleBetween() may return a value of "NaN" (Not a Number)
  • (fixed) Bug when trying to remove a block definition from a dxf document.

[0.9.2 - 2014/10/17]

  • Added PolygonalVertexes and ToPolyline methods to the Spline entity, thanks mikau16 (see "NurbsEvaluator() sample for more info).
  • The entity's extended data information is now stored in a custom Dictionary (see "XDataInformation() sample for more info).
  • Added extended data for block records (see "DynamicBlocks() sample for more info).
  • The block Flags property getter is now public.
  • (fixed) Issue Id #13242 Read buggy dxf files that contain dimension styles that point to non existent text styles.
  • (fixed) Read and write the Mesh extended data.

[0.9.1 - 2014/09/01]

  • Added constructor to Solid entity that takes three vertexes.
  • Added Load method to the Block class to create block from external dxf files (see LoadAndSaveBlocks() sample for more info).
  • Added Save method to the Block class to save a block to a dxf file (see LoadAndSaveBlocks() sample for more info).
  • Added the drawing variable $INSBASE that control the insertion base point for the current drawing.
  • Added AttributeDefinitions property to DxfDocument to support these cases. Now it is possible to add attribute definitions to a dxf document this will allow to create dxf to be use as blocks with attributes in other drawings.
  • The HeaderVariable class is now internal. All needed information can be accessed through the DxfDocument.DrawingVariables property.
  • Rename AttributeDefinitionDictionary.Keys to AttributeDefinitionDictionary.Tags.
  • Rename AttributeDefinitionDictionary.ConatinsKey to AttributeDefinitionDictionary.ContainsTag.
  • Rename AttributeDictionary.Keys to AttributeDictionary.Tags.
  • Rename AttributeDictionary.ConatinsKey to AttributeDictionary.ContainsTag.
  • Rename AttributeDefiniton.Text to AttributeDefinition.Prompt.
  • Updated "netDxf Documentation.chm".
  • (fixed) The Attribute class constructor was not copying the attribute definition properties inherited from the EntityObject base class.
  • (fixed) Issue Id #13211 Loading dxf file that contain attribute definitions (ATTDEF). This is the case of blocks that has been exploded or has been saved to a file.

[0.9.0 - 2014/07/28]

  • netDxf now supports both text and binary dxf files (see BinaryDxfFiles() sample for more info).
  • Added Mesh entity (see MeshEntity() sample for more info).
  • Added argument "out bool isBinary" to the CheckDxfFileVersion method of the DxfDocument class, that will return true is the dxf is a binary file.
  • Added argument "bool isBinary = false" to the Save method of the DxfDocument class. It defines if the file should be saved as binary, by the default it is saved as text.
  • Added limits to the maximum number of elements a TableObject collection can have, reaching and even getting close to this value causes problems in AutoCad. These limits, defined by the MaxCapacity property, are still too high for any practical purpose. The number of table object entries, for example, is defined by a code 70 (16 bit integer).
  • Issue Id #13116 Added constructors to Face3d entity that takes three vertexes.
  • Rename EdgeFlags to Face3dEdgeFlags.
  • Rename XDataCode.Integer and XDataCode.Long to XDataCode.Int16 and XDataCode.Int32, respectively, to better reflect the kind of variable stored. In net a 16 bit integer is a short and a 32 bit integer is an int.
  • Workaround for possible erroneous number of knots and/or number of control points values in Spline entities while importing dxf files.
  • Changed several variable types to accommodate to the type defined by the dxf codes, this is now a lot more important in binary dxf. :: HeaderVariable property CodeGroup is now short (it was int). :: XDataRecord property Code is now short (it was int). :: Image brightness, contrast, and fade are now shorts (they were floats). :: ImageDef horizontal resolution, and vertical resolution are now doubles (they were floats). :: DimensionStyle DIMDSEP is now a char variable (it was string). :: DimensionStyle DIMTIH, DIMTOH, DIMTAD, DIMADEC, DIMDEC, DIMAUNIT, and DIMJUST are now shorts (they were ints). :: Viewport property CircleZoomPercent is now short (it was double). :: XDataCode class members are now shorts (they were ints). :: PolyfaceMeshFace property VertexIndexes is now an array of shorts (it was an array of ints). :: XData binary data (code 1004) is stored as a byte array (see BinaryChunkXData() sample for more info) :: Layout property TabOrder is now short (it was int).
  • (fixed) Read DimensionStyle DIMADEC variable.
  • (fixed) In the previous version the DxfWriter was working very slowly.
  • (fixed) FromJulianCalendar conversion when, rounding up the seconds fraction the result was exactly 60. Now the related methods also use the milliseconds in the conversions.
  • (fixed) MText rectangle width cannot be negative and is, now, 0.0 by default, the word wrap is turned off and the width of the multiline text object is as wide as the longest line of text.
  • (fixed) Issue Id #13143 Rename dxfWriter.Save to dxfWriter.Write.
  • (fixed) Adding duplicate entities to the document, this is related to the issue Id #13149. When you add a group to the DxfDocument the entities in the group will be automatically added to it, so it is not necessary to add them manually with AddEntity.

[0.8.0 - 2014/06/19]

  • Lots of changes, some of them might break your current code, ask in the project discussion board in case of doubt.
  • Added ModelSpace and PaperSpace, now it is possible to work in model space and paper space through layouts. See the PaperSpace() sample in the TestDxfDocument project.
  • Added Layouts.
  • Added PlotSettings.
  • Added Viewports.
  • Added Transparency to Layers and Entities.
  • Added method PlainText() to MText class that will return the text without the formatting codes.
  • Added the drawing variables $TDCREATE, $TDUCREATE, $TDUPDATE, and $TDUUPDATE; that control the drawing creation and last update in local and universal time(UTC).
  • Added the drawing variable $TDINDWG that control the drawing editing time.
  • Now you can set the document, block drawing units, and image units. See the DocumentUnits() sample in the TestDxfDocument project.
  • Reworked the hatch boundary path information, this will also fix a problem with arc boundary paths that were defined CW instead of the common CCW. It still possible to retrieve entities that make the hatch boundary path with the method Hatch.CreateWCSBoundary().
  • Reworked how the entities and attribute definitions are stored in a block. See the BlockWidthAttributes() sample in the TestDxfDocument project.
  • Rename FillType to HatchFillType, BoundaryPathTypeFlag to HatchBoundaryPathTypeFlag, and TableObjects.Values to TableObjects.Items.
  • Some modifications in the Image entity, now the width and height of the image represent the size in world coordinate units.
  • (fixed) MText color formatting option when it was using true color.

[0.7.0 - 2014/04/25]

  • Encoding and decoding of non extended ASCII characters will be done automatically by the DxfWriter and the DxfReader. Dxf versions prior to 2007 need to encode the characters outside the extended ASCII chart (char>255) as \U+#### where #### is a four digits hexadecimal number that represents the character.
  • Added IsFrozen and IsLocked properties to layers.
  • Workarounds for possible out of range values while importing dxf files.
  • Erased FileNotFound exception in ImageDef constructor, AutoCAD will only show a file not found in case the image is not present.
  • Allow to load files while they are being opened by another process. AutoCAD likes to keep their drawing files opened while working on them.
  • (fixed) Read ACDSDATA section. Undocumented dxf section that seems to affect only the dxf database version 2013 and later.
  • (fixed) The Text and MText height can not be zero or less.
  • (fixed) Read SEQEND object in Insert entities. Drawings with proxy graphics might be affected by this.
  • (fixed) Some TableObject properties of DxfObjects not pointing to the same reference in its corresponding global list.

[0.6.2 - 2014/03/20]

  • All angle values now will be normalized to the range {"["}0, 360{"["}. In the case of the ellipse if the start and end angles are equal it will be considered a full ellipse.
  • (fixed) Load dxf files not encoded as utf8 will use the supplied dxf codepage header variable to get the proper encoding.
  • (fixed) Arc.ToPolyline method.
  • (fixed) Ellipse.ToPolyline method.
  • (fixed) Read entity linetype scale value.

[0.6.1 - 2013/11/03]

  • Updated "netDxf Documentation.chm".
  • Rename Attribute definition and Attribute Id to Tag as it is the name given by the dxf documentation.
  • (fixed) Loading dxf files with duplicate attribute definition tags in block attributes. Although AutoCad allows this behaviour this library does not. Having duplicate tags is not recommended in any way, since there will be no way to know which is the definition associated to the insert attribute.
  • (fixed) Load dxf files containing a ThumbnailImage section.
  • (fixed) Load dxf file encoding.
  • (fixed) Big HandleSeed hex numbers. The NumHandles has been changed to long, hopefully this will solve the problem, but I don't know which is the largest handle hex number AutoCad can generate. The BigInteger class of the Net Framework 4.0 will solve this problem but at the moment this library maintains its compatibility with Net 2.0.

[0.6.0 - 2013/09/06]

  • Added Ray entity.
  • Added XLine entity (aka construction line).
  • Added UCS (user coordinate system) table object.
  • Added method Remove(T tableObject) to TableObjects.
  • Added check for not supported characters in table object names. The following characters are not allowed <>/?":;*|,=`
  • Group now derives from TableObject.
  • Added Groups class derived from TableObjects to control the dxf document groups.
  • Added two methods to the Groups class, Remove deletes the group and the grouped entities and Ungroup deletes the group while keeping the entities in the document.
  • Added IsByLayer and IsByBlock bool properties to AciColor.
  • (fixed) Read Dimension when it was part of a block.
  • (fixed) Read line weight applied to layers.
  • (fixed) Issue Id #12000 Empty font name throw exception. Added workaround dxf files that have empty or null font names on TextStyle definitions.
  • (fixed) Issue Id #12126 Scaled and rotated hatch patterns. Pattern line definition origin needed to be transformed.

[0.5.0 - 2013/07/16]

  • Lots of changes on how the document handles the tables, check the samples or ask in the forum in case of doubt.
  • Added TableObjects class and derivatives for application registries, blocks, dimension styles, layers, line types, multiline styles, text styles, and image definitions collections to uniform its behaviour.
  • Added Remove and Purge methods for table objects. Now it is possible to clean the document from empty layers, blocks without references,...
  • Added GetReferences method for table objects. Now it is possible to get the list of dxf objects that make use of a particular layer, block,...
  • Added CreateWCSBoundary method for hatches, it will generate a list of entities that makes the hatch boundaries expressed in world coordinates.
  • Entities implement IClonable interface.
  • Block now derives from TableObject.
  • ImageDef now derives from TableObject.
  • Updated "netDxf Documentation.chm".
  • (fixed) Image entity not writing code 360 (Hard reference to imagedef_reactor object).
  • (fixed) Read MLine when it was part of a block.

[0.4.7 - 2013/05/28]

  • Added missing Splines property to access the splines list of the DxfDocument.
  • Added missing Dimensions property to access the dimensions list of the DxfDocument.

[0.4.6 - 2013/05/16]

  • Added Block insertion units.
  • Added length units conversion methods to MathHelper.
  • Added Scale and Rotation methods to Matrix3.
  • Added polyline Explode method.
  • Added polyface mesh Explode method.
  • Rename DefaultDrawingUnits to DrawingUnits and moved to netDxf namespace.
  • Rename DxfDocument.PolyfaceMesh property to DxfDocument.PolyfaceMeshes.
  • The entity Normal property is now part of the EntityObject base class.
  • (fixed) Polyline IsClosed property.
  • (fixed) Write polyface meshes with a number of vertexes less than three.

[0.4.5 - 2013/05/10]

  • Workaround buggy dxf files with entities that references table objets not defined in the tables section. This only applies to application registries, layers, line types, text styles, dimension styles and mline styles, if necessary a new one with default values will be created.

[0.4.4 - 2013/05/08]

  • Added Add and Get application registries methods.
  • (fixed) Bug in Get table object by name methods.
  • (fixed) Table dictionaries keys will ignore case as it should have been from day one. The names of layers, line types, text styles,... are case insensitive.
  • (fixed) Workarounds for bugs on programs that generate dxfs with duplicate table object names. Duplicate table objects will be skipped.
  • (fixed) Issue Id #11725 CheckDimBlockName. Added check that dimension blocks and group names starts with {""**D""} and {""**A""} respectively while reading dxfs.

[0.4.3 - 2013/04/16]

  • Added AutoCad drawing database version number AC1027 = AutoCAD 2013.
  • Attribute definition position is in object coordinates.
  • (fixed) Error reading block position.
  • (fixed) Issue Id #11698 DxfReader->ReadEntities -> ReadEntity.
  • (fixed) Issue Id #11702 Issue with position of insert attributes.

[0.4.2 - 2013/04/07]

  • Read and write comments only at the head of the dxf file.
  • Workaround/fixes due to inconsistences on dxf files generated by Sketchup and EASE. Now during the attribute initialization all attribute definition properties will be copied, so any changes made to the attribute definition will only be applied to new attribute instances and not to existing ones. This is due to some dxf files might generate INSERT entities that contains attributes that are not defined in the BLOCK, eventhought it might be incorrect, strictly speaking, AutoCad allows this behaviour.
  • (fixed) AutoCad was giving an error with the LastSavedBy Header variable, this variable is not recongnized by AutoCad2000.
  • (fixed) Issue Id #11690 Insert Entity Scale.
  • (fixed) Error reading color in ReadVertex() method.

[0.4.1 - 2013/03/07]

  • Added new header variables that handle the properties applied to new entities.

[0.4.0 - 2013/03/03]

  • Added MLine entity.
  • Added Groups.
  • Added hatch gradient pattern (only supported by AutoCad2004 and higher dxf versions).
  • Now all header variables (version, codepage, handleseed,...) are handled by the HeaderVariables class.
  • The AciColor rgb to index conversion might be a little more accurate now.
  • Added AciColor conversions from and to HSL (hue, saturation, lightness).
  • Deleted parameter DxfVersion from the Save() method of the DxfDocument. Now it is handled by the AcadVer property of the DrawingVariables property of the DxfDocument.
  • DxfDocument.Load() methods are now static, they will return null if errors are found during the loading process.
  • Deleted FileInfo property from the DxfDocument.
  • Updated "netDxf Documentation.chm".
  • (fixed) The true color values were not being read.

[0.3.0 - 2013/02/10]

  • Feature request Id #11534 Add DxfDocument.Save() that takes an output System.IO.StreamDxfDocument, added also DxfDocument.Load() from a stream.
  • Feature request Id #11536 Write lineweight values (group code 370) to DXF. Layers and entities now support lineweight property.
  • Feature request Id #11537 Add support for RGB colors (group code 420). Layers and entities now support true colors.
  • Now you can access the full list of indexed colors.
  • Added linetype scale property (group code 48) to all entities.
  • Added object visibility property (group code 60) to all entities.
  • Added rotation property (group code 50) to Point entity.
  • IEntityObject is now EntityObject an abstract class derived from DxfObject.
  • ITableObject is now an TableObject abstract class derived from DxfObject.
  • (fixed) Error writing indexes of PolyfaceMesh faces.

[0.2.8.1 - 2013/01/30]

  • (fixed) Issue Id #11534 Infinite loop loading dxf file.

[0.2.8 - 2013/01/29]

  • The Reader and the Writer now should be able to handle other Ansi code pages than the common 1252 Latin 1; Western European (Windows).
  • Added static function to the DxfDocument to get the string that represents the dxf database version number.
  • Clean up related hatch reader methods a little more.

[0.2.7 - 2013/01/29]

  • Hatches now supports spline as boundary paths.
  • Added SplineVertex constructor with Vector2.
  • Dropped the restriction to use only ASCII characters, now the StreamReader will always use Encoding.Default the equivalent to ANSI_1252 defined in the $DWGCODEPAGE header variable of the dxf file.
  • Deleted ClassDiagram.cd from project.
  • Deleted lots of if(dxfPairInfo.Code == #) statements from Reader.ReadEdgeBoundaryPath(int numEdges) since they are no really need it. The way hatch boundary paths are defined is very strict, you must follow exactly the order and number of elements that appear in the documentation.
  • (fixed) Saving files that has been loaded from a file without defined RasterVariables object.

[0.2.6 - 2013/01/28]

  • Added Image entity.
  • Blocks now supports all avaliable entities even inserts (nested blocks).

[0.2.5 - 2013/01/16]

  • Added Spline entity.
  • Added public methods to add and get table objects (Layers, LineTypes, TextStyles, DimensionStyles, and Blocks).
  • Rename Text.BasePoint, MText.InsertionPoint and AttributeDefinition.BasePoint, Block.BasePoint, and Insert.InsertionPoint to .Position.
  • The attribute normal will use the ones applied to the Insert entity to which it belongs, this is subject to change if I find a way to get predictable results.
  • Updated "netDxf Documentation.chm".
  • (fixed) Insertions, Attributes and Text entities follows the same rules as the Circle, Arc, Ellipse and MText entities. The insertion point (position), defines the placement in world coordinates and the normal defines the orientation of the insertion at that point (this will only affect to entities which normal is not the default ZAxis).
  • (fixed) Text aligment in block attributes.

[0.2.4 - 2012/12/19]

  • Now the entity handles are assigned when the entity is added to the document. This should allow to open an existing dxf and add more entities to the same document, while maintaining the old entity handles once the document is saved again.
  • Added Plot property to layers, If set to false, do not plot this layer.
  • Added RemoveEntity method to the DxfDocument.
  • Deleted Layer, Color, and LineType properties from PolyfaceMeshFace, PolyfaceMeshVertex, and PolylineVertex.

[0.2.3 - 2012/12/14]

  • Added read and write Linear Dimensions.
  • Added read and write Radial Dimensions.
  • Added read and write Diametric Dimensions.
  • Added read and write 3 Point Angular Dimensions.
  • Added read and write 2 Line Angular Dimensions.
  • Added read and write Ordinate Dimensions. The dimension style definition is very limited and the drawing might be buggy under some circunstances (it is sensitive in the order the reference points are given and/or offset negative values).
  • Updated "netDxf Documentation.chm".
  • (fixed) Read code 70 in LwPolylines.
  • (fixed) Read hatch with solid pattern fill.
  • (fixed) Read AttributeDefinition width factor.
  • Minor fixes and cleanup.

[0.2.2 - 2012/11/21]

  • Delete property aligment from block attributes, it did not seem to change anything and it was not recognized by AutoCAD 2005 generating an error. AutoCAD 2005 was not able to load a 2004 dxf generated by AutoCAD 2012. It did not recognized the aligment codes.
  • Cleaned up entity constructors.
  • Added entity constructors with Vector2.
  • Added read and write Aligned Dimensions.
  • (fixed) AciColor negative index issue when loading files.

[0.2.1 - 2012/11/16]

  • Added MTEXT entity, with basic text formatting.
  • Move TextAlligment to the netDxf.enties namespace.
  • (fixed) The default text style (Standard) must be the first on the table list.

[0.2.0 - 2012/10/12]

  • Dropped support for AutoCAD12 dxf files this will break your program if you are using polylines. Important: following the way the dxf calls the polyline entities: :: 1. LightWeightPolyline has been renamed LwPolyline for short. :: 2. All Polylines are now LwPolylines. :: 3. All Polylines3d are now Polylines. : Also the entities LwPolyline, Polyline and PolyfaceMesh have their own list in the DxfDocument, before they all were included in the same list "Polylines".
  • Updated "netDxf Documentation.chm".

[0.1.6.0 - 2012/09/28]

  • Read and write hatches to dxf, there are a few predefined patterns based on AutoCAD pat file. You can create your own providing the information needed for the HatchPatternLineDefinition class or load from a file (same rules as AutoCAD pat files are applied).
  • Line types can be loaded form a file but only simple line patterns are supported (same rules as AutoCAD lin files are applied).
  • Text files reorganization: changelog.txt and license.txt move to doc folder together with the compiled HTML help file.
  • Updated "netDxf Documentation.chm".
  • Added AutoCad2010 database version number.
  • (fixed) Renamed the PolylineVertex and LightweightPolylineVertex StartThickness and EndThickness as StartWidth and EndWidth, it should always be this way. Do not confuse Elevation, Width and Thickness of an entity. I try to follow the AutoCAD documentation as close as possible, please check it in case of doubt or as in this case I might be wrong.
  • (fixed) Read and write ellipse entity.
  • (fixed) To make it easier and to unify concepts, the center of a circle, an arc and an ellipse are always given in world coordinates, even though the dxf gives the center of the circle and the arc in object coordinates, and the center of the ellipse in world coordinates. The local (to the center) orientation of the entity will be given by the normal.

[0.1.5.0 - 2012/09/21]

  • With limitations now you can write hatches in dxf files.
  • Removed the limitations of the bulge in polyline vertexes, it can actually be greater than 1 and lower than -1 (1 represents the semicircle and the negative sign if the arc goes in or out).

[0.1.4.0 - 2012/09/11]

  • Vector2f, Vector3f, Matrix3f are no loger needed - removed
  • Vector2d renamed to Vector2
  • Vector3d renamed to Vector3
  • Matrix3d renamed to Matrix3

[0.1.3.0 - 2012/09/03]

  • Changed all numeric data of the library to use doubles instead of floats
  • Solution updated to Visual Studio 2010

[0.1.2.0 - 2009/03/07]

  • Added support for AutoCad12, AutoCad2000, AutoCad2004 and AutoCad2007 dxf files
  • The Ellipse entity will be exported as a true ellipse for dxf file version AutoCad2000 and higher
  • Due to the need of keeping unique handles for entities, duplicate objets will not be allowed
  • Added this change log information
  • Added Lightweight entity
  • Lots of internal changes and new classes
  • NurbsCurves will not be allowed temporally, it needs more work to be able to export them as true splines in AutoCad200 and higher dxf files

[0.1.1.0 - 2009/03/01]

  • Added Ellipse entity that will be exported as a polyline in AutoCad12 dxf files
  • Added NubsCurve entity that will be exported as a polyline in AutoCad12 dxf files
  • Added many new comments
  • Added a chm library help file

[0.1.0.0 - 2009/02/28]

  • First public release
Clone this wiki locally