Repository navigation
Releases
GeometryHelper 13.11.0
GeometryHelper 13.11.0, with GeometryHelper.CadConvert, GeometryHelper.IfcConvert and GeometryHelper.TeklaConvert.{2020,2025,2026} at 13.11.0.
NEW IN 13.11.0
A minor release: public types and members added, none removed or renamed. A drawing only read and saved is
written as it was, to the byte.
NEW, DXF: OLE objects
- OLE2FRAME entities, read until now as DxfUnknownEntity, are DxfOle2Frame, after AutoCAD's Ole2Frame, with
DxfRectangle3d, DxfOle2FrameItemType and DxfOlePictureFormat. The frame is read from the four corners in the head
of its binary, as AutoCAD 2021 reads it, not from groups 10 and 11: Location (the lower left corner), Position3d,
WcsWidth, WcsHeight, ScaleWidth, ScaleHeight, Rotation, LockAspect, OutputQuality, AutoOutputQuality.
- What the object is comes from its compound file, read by the library's own MS-CFB reader: Type (static, embedded,
linked), UserType, IsLinked, LinkName, LinkPath; GetCompoundDocument() and GetPictureData(out format) give the
compound file and the .bmp, .wmf or .emf of a static picture.
- TransformBy moves, scales by one factor and mirrors a frame about a line along x or y, as AutoCAD 2021 keeps it
upright, writing the corners into the head AutoCAD reads; a turn, shear or stretch is refused. Position3d,
WcsWidth, WcsHeight, ScaleWidth, ScaleHeight, LockAspect and OutputQuality are set as AutoCAD sets them; a frame
copied into model or paper space gets that space's marks.
- new DxfOle2Frame(bytes) makes a static picture of a .bmp or a .png (every kind of PNG, alpha laid over white),
which AutoCAD's .NET API cannot, at its natural size in millimetres: 610 by 224 pixels of 96 dots an inch are
161.38 by 59.26.
- Checked in AutoCAD 2021: its console read back every frame read, moved or made, AUDIT finding no error; Windows'
OLE loaded every compound file made; AutoCAD's GUI drew the pictures made and moved.
CHANGED, DXF: results callers will see change
- An OLE2FRAME read from a file is a DxfOle2Frame, not a DxfUnknownEntity; its GetGeometry, GeometricExtents and
Explode give its frame, and UpdateExt takes it into the extents.
Details in CHANGELOG.md.
Earlier releases: https://github.com/nguyenthanguth/GeometryHelper/blob/main/CHANGELOG.md
GeometryHelper 13.10.0
GeometryHelper 13.10.0, with GeometryHelper.CadConvert, GeometryHelper.IfcConvert and GeometryHelper.TeklaConvert.{2020,2025,2026} at 13.10.0.
NEW IN 13.10.0
A minor release: public members added, none removed or renamed. A drawing only read and saved is written as it
was, to the byte.
NEW, DXF: shapes typed
- The entities give their shapes typed, by CadConvert's names: DxfLine.ToGeoLine3() and ToGeoLine2(), and the same
on DxfCircle, DxfArc, DxfEllipse (ToGeoEllipse of a whole one, ToGeoSpline of a part), DxfRay, DxfXline,
DxfSpline, DxfDBPoint, DxfLeader, DxfFace, DxfSolid, and the polylines (ToGeoPolyline, ToGeoPolylineArc,
ToGeoPolygon, ToGeoPolygonArc; the straight two on DxfPolyline3d).
- In space, the shape GetGeometry() gives, to the bit; in the plane, what DxfReader reads with PlanAs2D, to the
bit, an entity off the floor refused rather than its z dropped: the line from (0, 0, 0) to (100, 50, 0) is the
GeoLine2 from (0, 0) to (100, 50), and with a z of 5 at one end ToGeoLine2 refuses it.
- A polyline is given as the kind asked for: a loop joins the last vertex to the first, a chain of a closed one
runs back to its first vertex, a straight kind refuses an arc rather than cut it into chords.
NEW, DXF: the way back
- SetFromGeCurve takes the shapes of the plane (written at z 0 on the normal up), and the polylines take chains
and loops: within the point tolerance of the polyline's own plane on its own normal, so a mirrored polyline
stays mirrored; otherwise in their own plane; a chain on a line off that plane is refused, never flattened.
- The handle, layer, look and extended data are kept; a shape written as the current one leaves the record as it
is, widths and fitting and all.
Details in CHANGELOG.md.
Earlier releases: https://github.com/nguyenthanguth/GeometryHelper/blob/main/CHANGELOG.md
GeometryHelper 13.9.0
GeometryHelper 13.9.0, with GeometryHelper.CadConvert, GeometryHelper.IfcConvert and GeometryHelper.TeklaConvert.{2020,2025,2026} at 13.9.0.
NEW IN 13.9.0
A minor release: public types and members added, none removed or renamed. A drawing only read and saved is
written as it was, to the byte.
NEW, DXF: images and wipeouts
- IMAGE and WIPEOUT entities, read until now as DxfUnknownEntity and refused by TransformBy, are DxfRasterImage and
DxfWipeout, after AutoCAD's RasterImage and Wipeout, with DxfRasterImageDef (IMAGEDEF) and DxfRasterVariables
(RASTERVARIABLES). No pixel is read. An image is placed (Get/SetOrientation, Position, Width, Height, Rotation,
PixelToModelTransform), shown (DisplayOptions, ShowImage, ImageTransparency, Brightness, Contrast, Fade) and
clipped (IsClipped, IsClipInverted, GetClipBoundary, SetClipBoundary, GetVertices) as AutoCAD 2021 reads and
writes it: a picture of 4 by 3 pixels at (10, 20) with a pixel 10 across is 40 by 30. TransformBy takes any
transformation, Explode gives the lines of the frame or the boundary, GeometricExtents and GetGeometry follow
the boundary shown, and the header extents grow when one is appended or moved.
- Copies into another drawing bring one IMAGEDEF for all images, the CLASS rows AutoCAD needs, and raise a row
counted 0 (ezdxf R2010 and later) so that AutoCAD shows them; the inverted clip is left out before R2010.
- Made in code: new DxfRasterImageDef(path, size), CreateImageDictionary, SuggestName, DxfDBDictionary.SetAt,
new DxfRasterImage(definition), AssociateRasterDef, GetEntityCount, new DxfWipeout() and SetFrom; reactors,
variables and CLASS rows are made where a drawing has none. A name already taken is refused.
- A clip polygon not ending on its first corner to the bit, which AutoCAD 2021 shows as nothing (a wipeout) or
cannot open (an image), is written closed wherever the library writes it anew.
- Checked in AutoCAD 2021: every drawing made or edited opened with AUDIT finding no error, 55 579 numbers read
back within 7.1E-15, and AutoCAD's own saves read back the same.
CHANGED, DXF: results callers will see change
- An IMAGE or a WIPEOUT read from a file is a DxfRasterImage or a DxfWipeout, not a DxfUnknownEntity; it can be
moved, is taken by dynamic-block actions and by IntersectWith (its frame or boundary), and grows the extents.
Details in CHANGELOG.md.
Earlier releases: https://github.com/nguyenthanguth/GeometryHelper/blob/main/CHANGELOG.md
GeometryHelper 13.8.0
GeometryHelper 13.8.0, with GeometryHelper.CadConvert, GeometryHelper.IfcConvert and GeometryHelper.TeklaConvert.{2020,2025,2026} at 13.8.0.
NEW IN 13.8.0
A minor release: one public member added, PackOptions.StartCorner, and none removed or renamed. From the upper
left, the default, every packing is the same to the bit as before.
NEW, Packing
- PackOptions.StartCorner: SheetPacker fills each sheet from the corner of its usable area given, UpperLeft (the
default), UpperRight, LowerLeft or LowerRight; SheetCorner.Center is refused. The first block goes into that
corner and the rows run from its side, laid from its edge; a group laid out afresh puts its main view at that
corner of its block, and a group kept as drawn is mirrored as one block, its boxes as they stood. The packing is
the mirror image of the one from the upper left, so the sheets taken and how full they are do not change: from
the lower right, three boxes 100 by 50 on a usable area 267 by 190 put two in the bottom row, the first at the
right, and the third above the first. A thousand boxes in 200 groups on A1 pack in about 5 ms, as before.
Details in CHANGELOG.md.
Earlier releases: https://github.com/nguyenthanguth/GeometryHelper/blob/main/CHANGELOG.md
GeometryHelper 13.7.0
GeometryHelper 13.7.0, with GeometryHelper.CadConvert, GeometryHelper.IfcConvert and GeometryHelper.TeklaConvert.{2020,2025,2026} at 13.7.0.
NEW IN 13.7.0
A minor release: one public member added, DxfDatabase.PatternSearchPath, and none removed or renamed. One fix is
to the queries of solids far out; the rest is DXF parity with AutoCAD 2021, and the results callers will see
change are listed under CHANGED.
NEW, DXF
- DxfDatabase.PatternSearchPath: folders, separated by semicolons and searched in their order, where the caller's
own hatch pattern files are read from, as FontSearchPath gives the folders of the fonts. A HATCH given a pattern
by SetHatchPattern is given its lines from there as AutoCAD 2021 gives them: from acadiso.pat in a drawing of
millimetres and acad.pat in one of inches, or from a file named after the pattern, each line turned by
PatternAngle and scaled by PatternScale and written anew when either is set, so that Explode() and
GetHatchLinesData() draw it. ANSI31 of acadiso.pat on a square 30 by 20 holds its one line at 45 degrees and
explodes to 11 LINEs. A file is read as AutoCAD reads one, a pattern AutoCAD refuses is refused, a pattern not
found is left with no lines, as before, and a malformed file never throws. Every pattern of AutoCAD 2021's
acad.pat and acadiso.pat at three scales and angles, 918 hatches, gives AutoCAD's own lines to 1E-13, and AUDIT
finds nothing to fix. The library carries no pattern of AutoCAD's. Empty, as a drawing is opened or made,
nothing is read and every drawing is written as before, to the byte.
- An MTEXT of several lines is laid out in the fonts FontSearchPath finds as AutoCAD 2021 lays it out: its
paragraphs wrapped at its width, its ActualWidth, ActualHeight and GeometricExtents, and the TEXTs Explode and a
drawing of R12 give of it. A line breaks after the spaces between words and before or after a Chinese, Japanese
or Korean letter, but not before a comma, a full stop or a closing bracket; a word longer than the width stays
whole on a line of its own; spaced at least, each line stands a third of its height and a third of the MTEXT's
height below the line before. Against AutoCAD 2021, paragraphs, widths, spacing, attachments, turns and styles
come out as it gives them in 1 604 of 1 650 MTEXTs, breaks in 1 492 of 1 492, first and following lines in
9 550 of 9 550, and codes and CJK letters in 789 of 789. Slanted letters, other fonts, stacks, indents and tabs
are not measured. DxfMText.GeometricExtents is overridden; with an empty FontSearchPath nothing changes.
- The big font of a text style (BigFontFileName) is read from FontSearchPath and its letters measured beside the
style's SHX font as AutoCAD 2021 draws them: TEXT, ATTRIB and ATTDEF places and extents, one-line MTEXT sizes,
multileaders landed on the right and attribute definitions in flips. A letter is read in the code page AutoCAD
gives the big font's name (GBK for gbcbig.shx, Big5 for chineset.shx, Shift-JIS for bigfont and the extfont
files, Korean for the four wh*.shx). Of 691 letters beside each of AutoCAD's ten CJK big fonts, all 6 910 are
boxed as AutoCAD boxes them, and of the TEXTs in styles with a big font 15 382 of 15 450 give AutoCAD's place
and box. On .NET the code pages need CodePagesEncodingProvider registered.
FIXED, DXF
- Beside a big font that is read, a TEXT stands at its bottom on the big font's depth, spaces are the big font's,
and a TrueType style's big font, which AutoCAD does not draw, no longer leaves its TEXTs at their bottom
unplaced: of 5 400 TEXTs of txt.shx and gbcbig.shx, 3 692 gave AutoCAD's place and box and 5 156 do.
- DxfDatabase.SummaryInfo of a drawing of R2000 reads every custom property AutoCAD 2021 saved, and writes more
than ten as AutoCAD does, where it read ten and refused an eleventh. A drawing of ten or fewer is written as
before, to the byte.
- A block given an attribute definition by DxfBlockTableRecord.AppendEntity is marked as one of attribute
definitions (flag 2 of its BLOCK, HasAttributeDefinitions), as AutoCAD 2021 marks one, and the mark is kept when
the definition is erased. Without it AutoCAD took a block made in code for one of no attribute: the value a
multileader gave the block's attribute was lost, and its EXPLODE gave the INSERT no ATTRIB. These two fixes
come of the checklist of DXF held against AutoCAD 2021, of which 23 points are settled against it.
FIXED, solids
- Where a point, a ray, a segment or a line stands against a solid far out is worked out near the origin, as its
booleans and its measures are: Locate, Contains, DistanceTo, SignedDistanceTo, GetClosestPointOnBoundary and
GetShortestLineTo of a point, and CollidesWith, DistanceTo, GetIntersections and GetShortestLineTo of a ray, a
segment and a line, on GeoSolid3, GeoPreparedSolid3 and the shapes asked of it, move a body reaching more than
2^20 out and more than 1 024 times the size of its box into the frame of the booleans, once, and the probe with
it. Of 18 000 points, rays, segments and lines beside bodies ten million to a thousand million out, wrong
answers at a hundredth, a thousandth and a millionth 209 -> 67, and 1 284 -> 9 of probes the tolerance itself
off a face. Within a million of the origin nothing changed, to the bit. Far out the first question of a body
takes 2 to 14 microseconds to move it; after that each takes as long as before.
CHANGED, DXF: results callers will see change
- Where its fonts are measured, an MTEXT of one line spaced exactly is as high as AutoCAD 2021 makes it, its
height and a third ("ABC" of txt.shx 4 high is 5.333 high, not 4), and one whose words wrap, or that holds \T,
\A, \L, \O, \K, \C or \~, is measured where it kept the file's 42 and 43. Reading a one-line ActualWidth with
fonts takes 13.8 microseconds where it took 11.3 for txt.shx on .NET Framework 4.8; nothing changes without
fonts.
- A block given an attribute definition in code writes flag 2 in its BLOCK, where it wrote none; a block read
from a file says what its file says.
Details in CHANGELOG.md.
Earlier releases: https://github.com/nguyenthanguth/GeometryHelper/blob/main/CHANGELOG.md
GeometryHelper 13.6.0
GeometryHelper 13.6.0, with GeometryHelper.CadConvert, GeometryHelper.IfcConvert and GeometryHelper.TeklaConvert.{2020,2025,2026} at 13.6.0.
NEW IN 13.6.0
A minor release: no public member added, removed or renamed. Its fixes are to solids far out, the cut of openings,
the weld of booleans and the meshing of faces, and its speed is in Clipper2; the results callers will see change
are those that were wrong.
FIXED, solids
- TryCutOpenings, GetVolume, TryGetVolume, GetSurfaceArea, GetCentroid, GetMassProperties, Section and
Mesh3.ToCells of a body far out are worked out near the origin, as its booleans are since 13.5.0: a body
reaching more than 2^20 out and more than 1 024 times the size of its box is moved by whole coordinates, with
its openings, a section's plane or a grid's origin, and the answer moved back; a corner kept comes back as it
was given, to the bit. Of 617 prisms with two or three openings ten million to a thousand million out, wrong
answers at a thousandth 745 -> 8 and at a hundredth 853 -> 8. Within a million of the origin nothing changed, to
the bit. Far out these take 4 to 12 per cent longer at a thousandth and a hundredth, 10 to 13 per cent less at a
millionth.
- The cut of a solid's openings no longer leaves a sheet inside the material where walls of two openings stand a
fraction of the tolerance apart: a strip still lying against a face once the gluing has taken what it could is
read again with that face, and what they share goes from both. Of 4 500 prisms with two or three such openings,
areas wrong at a hundredth and at a thousandth 576 -> 2, at a millionth 579 -> 0, and none that was right moved.
The booleans glue their cells the same way: of 25 200 unions, common parts and differences of such prisms and
boxes, 3 not worked out are right now; 13 ten million to a thousand million out, asked below the far frame's
gate, that were right come out wrong.
- A union, a common part or a difference welded closed takes, of the corners that move the volume by nothing but
rounding, the one tilting the faces round the others least, where it took the first met. A cube of 100 and a
block 40 by 30 running 0.001 into its top held 1.39 less than the two less their overlap and holds 0.39 less. Of
210 797 booleans of the gate corpora, 5 that were wrong are right and none is made wrong; given the same bodies,
.NET 10 and .NET Framework 4.8 work them alike, to the bit. They take as long as they did.
FIXED, meshing
- GeoFace3.TriangulateSurface covers what the face covers, to rounding, where its corners stand within the
tolerance of edges they are not on: the rings of a face cut into strips are read within rounding, where corners
closer than the tolerance were merged. Of 48 904 faces with steps, notches, spikes, dents and holes 1E-6 to 0.02
across, 24 622 areas wrong at a hundredth, 20 293 at a thousandth and 392 at a millionth are right, and none
that was right moved. A loop thinner than the tolerance is still a seam with no triangle: one plate a thousand
million out, whose cut keeps sheets 0.00018 thick, holds 0.057 too much read as the triangles in its faces.
CHANGED, Clipper2
- Shapes Clipper2 joins into one path one after another unite without slowing with the square of their number:
50 000 squares of side 10 standing on a strip took 10.6 seconds to unite with Boolean2.Union on .NET 10, 9.8 of
them in Clipper2, and take 1.1, 0.3 in Clipper2.
- Clipper2 builds a polytree of many holes in one path, or of shapes joined one after another, in time growing
with their number: 20 000 teeth standing on a strip, each with a hole and an island, took 33 seconds to unite
into a polytree on .NET 10 and take 0.44. Small clips take as long as they did. Of 80 000 sets of random paths,
combs, zigzags, rows of squares, lattices and strips under every fill rule, no answer moves by a bit.
Details in CHANGELOG.md.
Earlier releases: https://github.com/nguyenthanguth/GeometryHelper/blob/main/CHANGELOG.md
GeometryHelper 13.5.0
GeometryHelper 13.5.0, with GeometryHelper.CadConvert, GeometryHelper.IfcConvert and GeometryHelper.TeklaConvert.{2020,2025,2026} at 13.5.0.
NEW IN 13.5.0
A minor release: one public member added, DxfDatabase.FontSearchPath, and none removed or renamed. Most of it is
DXF parity with AutoCAD 2021; the results callers will see change are listed under CHANGED. Three fixes are to the
booleans of solids.
NEW, DXF
- DxfDatabase.FontSearchPath: folders, separated by semicolons and searched in their order, where the SHX and
TrueType fonts (.ttf, .ttc, .otf of glyf outlines) of the drawing's text styles are read from, so that its words
are measured as AutoCAD 2021 measures them: TEXT, ATTRIB and ATTDEF places and GeometricExtents, the ActualWidth
and ActualHeight of a one-line MTEXT, multileaders met on the right, attribute definitions flipped and leaders'
hooks exploded. Against AutoCAD 2021, 21 596 of 21 600 TEXTs of its own SHX fonts and 30 840 of 31 200 TEXTs of
the TrueType fonts of Windows come out as it gives them. The results follow the fonts given. Empty, as every
drawing is opened and made, nothing is read and nothing changes.
FIXED, solids
- A common part of two solids, and a difference, leave out an opening of a body whose material the result does not
keep where it shares no space with the other body. A spiral girder less a spiral ramp holding a spiral tube as
an opening came apart into 640 222 cells in 202 seconds on .NET 10 and 704 on .NET Framework 4.8 and was not
worked out; it is cut into 18 345 in 1.6 and 2.7 seconds and holds what slicing gives. The openings of a union's
bodies, and of the body a difference takes material from, are cut in as before.
- A union, a common part and a difference of solids far out, and each cut of TrySubtractAll, are worked out near
the origin: bodies reaching more than 2^20 out and more than 1 024 times the size of their box are moved by
whole coordinates, worked out and moved back, a corner kept coming back as it was given, to the bit. Of 1 196
such booleans ten million to a thousand million out, wrong at a thousandth 241 -> 14, at a hundredth 413 -> 15
and not worked out 134 -> 49; 3 of 1 200 with a face exactly the tolerance off a wall's plane came out otherwise
by up to 1.9. Within a million of the origin nothing changed, to the bit. Far out, booleans at a thousandth and
a hundredth take 17 to 26 per cent longer, at a millionth a third less. GetVolume, TryCutOpenings, Section and
Mesh3.ToCells of bodies far out are not moved yet.
- A union, a common part or a difference that is not worked out is worked out once more where either body closes
within the tolerance and not at the rounding of its coordinates, as a body cracked a hair wide does: its corners
within the tolerance of each other made one and its faces lying in one plane merged. Of 45 000 booleans of a
cracked U and a box at a thousandth, a hundredth and 0.05, 1 619 differences, 2 106 common parts and 2 063
unions not worked out are right now, and none was made wrong. Every boolean worked out as the bodies came is as
it was, to the bit, and takes as long as it did; one worked out again takes 1.4 to 2.5 milliseconds longer for
such a U and box under .NET Framework 4.8.
CHANGED, DXF: results callers will see change
- Words given to a DxfMLeader put the base point of its content where a leader from the left would meet them, the
gap short of the place given and as far below as the left is met, where the library put it at the words. Words
turned in code turn the multileader's plane where no leader is landed yet; words mirrored are moved as AutoCAD
2021 moves them, kept upright where FontSearchPath measures them; words of another text style are moved to where
the multileader's font meets them, where FontSearchPath measures both.
- new DxfMLeader() is of words: ContentType is MTextContent, where it was NoneContent. A new multileader writes
what AutoCAD 2021 writes for one: ExtendLeaderToText true in a drawing of R2013 or later, a leader line added of
no colour of its own, and TextColor the colour of the words given, BYLAYER for words made in code, where it was
BYBLOCK.
- DxfMLeader.RemoveFirstVertex and RemoveLastVertex take a leader line down to one vertex, where the library kept
two; RemoveLastVertex refuses the last vertex of a leader of two lines or more (InvalidOperationException), as
AutoCAD 2021 refuses it.
- HandOverTo keeping the extension dictionary refuses the contexts of another kind of entity (ArgumentException)
before anything is written, where it wrote a drawing AutoCAD 2021 crashed reading; not keeping it, the new
entity writes the contexts of the copy it is handed.
- HasContext answers false for an object that is never annotative, as a LINE or a layer, whatever context records
it holds. DxfObjectContextCollection.AddContext names a scale's entry *A1, *A2 and on, as AutoCAD 2021 does,
where the library gave A0, A1 and on.
- DxfTable writes the reals it gives with their point (141 9.0, where it wrote 141 9), keeps each row's looks with
the row while the drawing is open, as AutoCAD 2021 keeps them in its ROWTABLEFORMAT, and RemoveAllOverrides
keeps the looks of the title's or the header's kind in a row of that kind out of its place.
- Normal set on a TEXT, ATTDEF, ATTRIB, INSERT or SOLID keeps its points, turn and contexts in its plane, as
AutoCAD 2021 does, where the library kept them where they stood in the world; DxfMText.Normal makes the MTEXT
read along the new plane's x axis.
- An annotative copy added to another drawing by AppendEntity, WblockCloneObjects or Insert keeps its contexts and
those of its ATTRIBs, each on that drawing's scale of its scale's name where the two give the same scale. A
hundred such copies of a drawing of 35 entities take 185 ms where they took 165 on .NET Framework 4.8.
- With FontSearchPath given, a TEXT, ATTRIB or ATTDEF justified other than left on its baseline is put about its
second point when it is edited or added, and a locked attribute definition is flipped, where it was refused.
FIXED, DXF
- A TransformBy that scales a multileader marks its scale as its own (bit 24); a multileader's leader lines of
BYBLOCK, its 176, 294 and 295 are read and written as AutoCAD 2021 reads and writes them.
- DxfTable.ClearTableStyleOverrides of 0 on a table of 400 rows takes 9 ms on .NET Framework 4.8, where 13.4.0
took 22.
- An attribute of several lines keeps its width factor; HandOverTo leaves the new entity its own extended data
where the old one has none.
Details in CHANGELOG.md.
Earlier releases: https://github.com/nguyenthanguth/GeometryHelper/blob/main/CHANGELOG.md
GeometryHelper 13.4.0
GeometryHelper 13.4.0, with GeometryHelper.CadConvert, GeometryHelper.IfcConvert and GeometryHelper.TeklaConvert.{2020,2025,2026} at 13.4.0.
NEW IN 13.4.0
A minor release: no public member added, removed or renamed. Nearly all of it is DXF parity with AutoCAD 2021; the
results callers will see change are listed under CHANGED. The one fix outside DXF is in GeometryHelper.IfcConvert.
NEW, DXF
- DxfSpline.FitData fits by the parameters SqrtChord and Uniform too, as AutoCAD 2021 does, and FitData.KnotParam
reads them; only CustomParameterization is refused now.
CHANGED, DXF: results callers will see change
- An annotative TEXT, ATTRIB, ATTDEF, MTEXT or INSERT with contexts is read where AutoCAD 2021 shows it: its
place, turn and height (an MTEXT's box and attachment too, an INSERT's scale factors) are those of its context
of 1:1, else of its default, whatever CANNOSCALE says. Setters write the context read, and the record where it
is the default; the INSERT's ScaleFactors setter writes every context by its scale, 3 at 1:1 being 6 at 1:2;
TransformBy carries every context. A text with no context reads and writes as before.
- A copy (Clone, GetTransformedCopy) of an annotative text, attribute, MTEXT or INSERT keeps its original's
contexts. Clone of plain entities takes some 15 to 20 per cent longer.
- An ATTRIB is annotative as its INSERT is; an attribute made of several lines is held by the top of its MTEXT one
text height above its point, where it was held by its bottom left; TransformBy of an MTEXT stretches its box.
- DxfMLeader.BlockScale and BlockRotation set, even to the value they have, move the block so that a leader from
the left meets it at the base point and land its leaders anew; the library left the block where it was.
BlockRotation reads the multileader's own turn (43), where it read the turn the block is drawn with (46).
TransformBy leaves the multileader's own block scale and turn as they are: a block scaled by 2 reads a
BlockScale of 1. BlockPosition leaves the block's matrix as it is.
- A leader added by AddLeader has no landing until the first vertex given its line, which becomes its landing, the
content left where it is; SetDogleg lands a leader of no landing. Words given by MText bring their text style.
- The first edit of a DxfTable while its drawing is open merges first the rows AutoCAD 2021 merges when it loads a
file, a change of the table's own colour, layer and the like among the edits.
- DxfTable.ClearTableStyleOverrides keeps the title and header left out. Of 0 or 2 it sets the turn of a cell's
text or block back to nought, as RemoveAllOverrides does, and leaves a cell emptied in the session of no value;
of 2 it gives each cell the table's own looks of its row's kind. On a table of 400 rows a clear of 0 or 2 takes
20 ms on .NET Framework 4.8, where it took 8.
- DxfTable.ResetValue takes the looks of the content away with the value, and of a block cell makes a text cell of
no value, where it threw. From R2007 on, SetTextString of an empty text leaves no value as ResetValue does.
- DxfTable.Fill with CopyContent and CopyFrom from a cell emptied in the session leave the target's content as it
was; Fill above or left of its source and longer than it repeats the source from the fill range's far end; Fill
with CopyFormat turns a value of another kind into the source's.
- DxfTable.SetFormat keeps a format on a number alone, GetOverrides reads a cell's flag of its kind of value as
DataType | DataFormat, and the flags of merged and new cells and of a value's kind are written as AutoCAD writes
them.
- A DxfSpline read as the cubic through its fit points gives that cubic's Degree, ControlPoints, Knots, Weights
and NumControlPoints: five fit points alone of degree 2 are of degree 3 and 7 control points, where the library
gave 2 and none. ModifyPositionAndTangent and GetSplitCurves keep the fit points. The first geometry read of a
spline reads its record in one pass, in about half the time on .NET Framework 4.8.
FIXED, DXF
- DxfSpline.ToPolylineWithPrecision cuts a spline not periodic evenly where that gives more pieces than the
halving, as AutoCAD 2021 does; periodic fit data through three points give AutoCAD's periodic cubic.
- A multileader's leader moved off its landing is landed anew when the content is laid out again; a block mirrored
by TransformBy is drawn mirrored; a second leader on the right of a block moves it as AutoCAD moves it; words
that name a text style keep it when the multileader is added to a drawing.
Details in CHANGELOG.md.
Earlier releases: https://github.com/nguyenthanguth/GeometryHelper/blob/main/CHANGELOG.md
GeometryHelper 13.3.0
GeometryHelper 13.3.0, with GeometryHelper.CadConvert, GeometryHelper.IfcConvert and GeometryHelper.TeklaConvert.{2020,2025,2026} at 13.3.0.
NEW IN 13.3.0
A minor release: 48 public members added in GeometryHelper.Dxf, none removed or renamed. Nearly all of it is DXF
parity with AutoCAD 2021; the results callers will see change are listed under CHANGED.
NEW, DXF
- Constraint parameters of dynamic blocks: the horizontal, vertical and radial ones AutoCAD's Block Editor wrote
are set by solving the block's constraints, within 4E-11 of AutoCAD 2021, and AutoCAD sets the library's INSERTs
again. Their expressions take AutoCAD's functions (trunc, floor, ceil, min, max, pow, ln, log, d2r and the rest),
pi, e and the remainder %.
- Block properties tables: AddBlockPropertiesTable and BlockPropertiesTable, with DxfBlockPropertiesTableColumn
(distances, X, Y, angles, attributes, the visibility state) and DxfBlockPropertiesTableRow; AutoCAD's own tables
are read and set.
- Polar parameters and polar stretches (AddPolarParameter, AddPolarStretchAction), value sets for rotation, XY and
polar parameters, lookups of XY, polar and rotation inputs, and attribute definitions locked in their block in
stretches, moves, scales, rotates and polar stretches.
CHANGED, DXF: results callers will see change
- DxfMLeader.TextHeight, LandingGap, ArrowSize, DoglegLength and BlockScale read and set unscaled, as AutoCAD's API
does: at a scale of 2, words drawn 8 high read 4, where they read 8. At a scale of 1 and untransformed nothing
changes. TextAttachmentType sets the left side alone; AddLeaderLine lands a new leader as AutoCAD lands it, on a
block, and on words where that needs no font.
- DxfTable.SetDataType turns a value not of the kind, and SetOverrides gives an override the cell does not hold,
where both refused; Fill fills as AutoCAD fills; new cells of InsertRows, InsertColumns and SetSize hold no value,
where they held an empty text; HorizontalCellMargin and VerticalCellMargin of a table of no margin of its own read
its style's, 1.5 in a drawing of millimetres, where they read 0.06.
- A spline through fit points is a cubic of chord-length knots whatever degree is asked, as AutoCAD fits it, and a
SPLINE whose control points are not its fit is read as the fit; ToPolyline gives closer to AutoCAD's vertex counts.
- round in a constraint expression takes a half up: round(-2.5) is -2, where it was -3.
- DxfDatabase.Insert copies an INSERT naming a block the other drawing has not, where it refused the whole drawing.
- A block is dynamic where it holds an evaluation graph, not where it holds the GUID alone.
FIXED, DXF
- Multileaders explode, keep their landings and scale their blocks and words as AutoCAD 2021 does, and write the
style's text style, linetype and arrow block.
- Table rows keep their kinds, merged cells are emptied, the lines between cells are read as AutoCAD reads them,
SetBackgroundColorNone and IsBackgroundColorNone no longer have it the other way about, and the edits of rows and
columns keep the TABLECONTENT in step.
- Carets and %% codes in texts and ContentsRTF read as AutoCAD 2021 reads them; a justified text writes its
alignment point at the origin too.
FIXED and CHANGED, geometry
- ToPolygon3, ToFace3 and ToPolyline3 lay a shape into a frame, and ProjectToPolygon2, ProjectToFace2 and
ProjectToPolyline2 lay it out, side for side however short a side, where the global tolerance took short sides
out. A polygon or a face seen edge-on is now refused, where it came out as a line of corners.
- TransformBy of faces, solids and polygons one by one reads the transformation once; the results are the same to
the bit.
Details in CHANGELOG.md.
Earlier releases: https://github.com/nguyenthanguth/GeometryHelper/blob/main/CHANGELOG.md
GeometryHelper 13.2.0
GeometryHelper 13.2.0, with GeometryHelper.CadConvert, GeometryHelper.IfcConvert and GeometryHelper.TeklaConvert.{2020,2025,2026} at 13.2.0.
NEW IN 13.2.0
A minor release: 126 public members added in GeometryHelper.Dxf, none removed or changed.
NEW, DXF
- Dynamic blocks made in code: DxfBlockTableRecord.AddLinearParameter, AddXYParameter, AddPointParameter,
AddRotationParameter, AddFlipParameter, AddVisibilityParameter, AddLookupParameter, AddAlignmentParameter and
AddBasePointParameter, with AddStretchAction, AddMoveAction, AddScaleAction, AddRotateAction, AddFlipAction and
AddArrayAction, each written as AutoCAD 2021 saved ACadSharp's sample of it.
- DxfBlockReference.DynamicBlockReferencePropertyCollection reads the dynamic properties of an INSERT, and
DxfDynamicBlockReferenceProperty.Value sets them as AutoCAD sets them: of 50 to 300 by 10, 77 goes to 80.
- new DxfDatabase(version) makes an empty drawing of AC1015 to AC1032; DxfTable.SetDataLink links cells to a
DATALINK; DxfTextSymbols holds the symbols of AutoCAD's text editor; DxfGeoData.NorthDirection and
DxfLayerStateManager.GetLayerStateNames as AutoCAD's.
FIXED, geometry
- TransformBy of a polygon, a face or a solid under an even scaling carries the shape as a move does, and a
stretch checks it at a tolerance loosened as far as it stretches: of 9 600 random bodies transformed, 1 460
were refused or came back open, and none now.
- Fillets, chamfers, offsets, cuts, closest points and shortest lines read each short side and small arc as it
is, in the plane and in space; two arcs whose centres stand a few tenths of a millionth apart cross on both.
- Booleans and the measures of bodies with openings, asked at or below the rounding of the coordinates, no
longer trust a wrong or open result. Welds that close a crack between two bodies weigh a corner a face lies round
by the whole face: of 8 000 unions and cuts at 1E-3 to 0.05, wrong or refused results fell from 24 to 4.
FIXED and CHANGED, DXF
- Texts read their escapes, %%c, %%d, %%p and \M+ codes as AutoCAD 2021 reads them, and a drawing before R2007
is saved in its code page.
- Dimensions, dimension styles, layers, polyface faces, MTEXT backgrounds, hatch patterns and polyline vertices
no longer make files AutoCAD 2021 will not open.
- Explode, splines, tables, viewports, groups and MTEXT columns give what AutoCAD 2021 gives; Explode of a
MINSERT throws NotSupportedException, as AutoCAD's does.
Details in CHANGELOG.md.
Earlier releases: https://github.com/nguyenthanguth/GeometryHelper/blob/main/CHANGELOG.md