Hi Chris,
This is within expected margin of error, I'll try to explain it here. As you probably noticed, both DwgReader and DwgWriter have PrecisionModel getter property returning an object that defines precision model used during geometry conversion. API documentation states: If there's no PrecisionModel set within class constructor, returns default PrecisionModel. Default precision model is predefined FloatingSingle one.
A bit more on PrecisionModel type:
Specifies the precision model of the Coordinates in a Geometry. In other words, specifies the grid of allowable points for all Geometries. The MakePrecise method allows rounding a coordinate to a "precise" value; that is, one whose precision is known exactly. Coordinates are assumed to be precise in geometries. That is, the coordinates are assumed to be rounded to the precision model given for the point. Input routines automatically round coordinates to the precision model before creating Geometries. All internal operations assume that coordinates are rounded to the precision model. Constructive methods (such as bool operations) always round computed coordinates to the appropriate precision model.
Currently three types of precision model are supported:
Floating: represents full double precision floating point.
FloatingSingle: represents single precision floating point.
Fixed: represents a model with a fixed number of decimal places.
A Fixed Precision Model is specified by a scale factor. The scale factor specifies the grid which numbers are rounded to. Input coordinates are mapped to fixed coordinates according to the following equations: jtsPt.x = round( (inputPt.x * scale ) / scale jtsPt.y = round( (inputPt.y * scale ) / scale Coordinates are represented internally as double-precision values. Since .NET uses the IEEE-394 floating point standard, this provides 53 bits of precision. (Thus the maximum precisely representable integer is 9,007,199,254,740,992). TF.NET methods currently do not handle inputs with different precision models.
AutoCAD implications:
During conversion from IGeometry to ObjectARX entity, there's a catch with AutoCAD's internal precision representation.
I tried using full Floating support - entities do get created in DWG database - but, ACAD crashes or behaves strange on reading such entities. I already posted a sample of such "erroneous" entity here on Swamp some time ago.
You can create your own GeometryFactory using custom PrecisionModel, and use it within both DwgReader and DwgWriter.
Regards,
Maksim Sestic