From 93538934a5a06819d98641533cf0146100babb30 Mon Sep 17 00:00:00 2001 From: slaveoftime Date: Wed, 21 Oct 2026 09:36:19 +0800 Subject: [PATCH 1/2] chore(deps): upgrade packages and split SixLabors by target framework - Update ACadSharp to 3.8.0, test SDK to 18.11.0, xunit.runner.visualstudio to 4.0.1, and coverlet.collector to 10.1.0. - Keep net6.0 on ImageSharp 3.2.0, Fonts 2.2.0, and Drawing 2.2.0; use ImageSharp 4.1.3, Fonts 3.2.0, and Drawing 3.1.3 on net8.0+. - Add the Six Labors community license and wire it through Directory.Build.props. - Migrate rendering for ImageSharp 4 / Drawing 3 and ACadSharp 3.8, preserving MLINE cuts and text line endings. - Refresh PNG baselines and document the license. --- .github/workflows/ci.yml | 2 + .../Baselines/6-57-1119.model.01.png | Bin 21113 -> 20436 bytes .../HSK80AHCP16190M_BMG.model.01.png | Bin 34343 -> 34722 bytes .../Subaru-Logo-Vector-Free-Wrap.model.01.png | Bin 77679 -> 79257 bytes .../Baselines/entities.model.01.png | Bin 8161 -> 8002 bytes .../Baselines/features.model.01.png | Bin 14225 -> 13139 bytes .../Baselines/features.model.01.svg | 6 +- .../Baselines/fidelity.model.01.png | Bin 7943 -> 7614 bytes .../Baselines/viewport-sheet.paper.01.png | Bin 9484 -> 9414 bytes ACadSharp.Image.Tests/ColorResolutionTests.cs | 5 +- .../EntityRenderDispatcherTests.cs | 82 ++++--- ACadSharp.Image.Tests/ImageExporterTests.cs | 4 +- .../ImagePageRendererTests.cs | 13 +- ACadSharp.Image.Tests/ImagePageTests.cs | 2 - .../RasterDrawingSurfaceTests.cs | 22 +- ACadSharp.Image.Tests/RenderedPageTests.cs | 2 +- ACadSharp.Image.Tests/SplineRendererTests.cs | 2 +- ACadSharp.Image.Tests/StyleResolutionTests.cs | 2 +- .../SvgDrawingSurfaceTests.cs | 15 +- ACadSharp.Image.Tests/SvgTextLayoutTests.cs | 13 +- ACadSharp.Image.Tests/SyntheticSamples.cs | 5 +- ACadSharp.Image/ACadSharp.Image.csproj | 13 ++ ACadSharp.Image/Extensions/ColorExtensions.cs | 3 +- ACadSharp.Image/ImageExporter.cs | 9 +- ACadSharp.Image/Rendering/CsMathExtensions.cs | 19 ++ .../Rendering/EntityRenderDispatcher.cs | 220 ++++++++++-------- .../Rendering/ImagePageRenderer.cs | 4 +- .../Rendering/ImageRenderContext.cs | 2 +- .../Rendering/ImageStyleResolver.cs | 2 +- ACadSharp.Image/Rendering/InsertPlacement.cs | 2 +- ACadSharp.Image/Rendering/OcsTransform.cs | 2 +- .../Rendering/RasterCanvasCompat.cs | 144 ++++++++++++ .../Rendering/RasterDrawingSurface.cs | 36 ++- ACadSharp.Image/Rendering/ResolvedStyle.cs | 2 +- ACadSharp.Image/Rendering/SplineRenderer.cs | 4 +- ACadSharp.Image/Rendering/TextRenderer.cs | 22 +- Directory.Build.props | 7 + Directory.Packages.props | 27 ++- README.md | 6 +- sixlabors.lic | 1 + 40 files changed, 472 insertions(+), 228 deletions(-) create mode 100644 ACadSharp.Image/Rendering/CsMathExtensions.cs create mode 100644 ACadSharp.Image/Rendering/RasterCanvasCompat.cs create mode 100644 sixlabors.lic diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c438f96..ec245bc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,7 @@ on: - 'ACadSharp.Image.Tests/**' - 'Directory.Packages.props' - 'Directory.Build.props' + - 'sixlabors.lic' - '*.sln' - '.github/workflows/ci.yml' push: @@ -19,6 +20,7 @@ on: - 'ACadSharp.Image.Tests/**' - 'Directory.Packages.props' - 'Directory.Build.props' + - 'sixlabors.lic' - '*.sln' - '.github/workflows/ci.yml' diff --git a/ACadSharp.Image.Tests/Baselines/6-57-1119.model.01.png b/ACadSharp.Image.Tests/Baselines/6-57-1119.model.01.png index 391bb12f28fdf04e3d31b825da507f8896b9e580..3528ef1c7326cad23d0236dea6d67e3656bcb315 100644 GIT binary patch literal 20436 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 diff --git a/ACadSharp.Image.Tests/Baselines/HSK80AHCP16190M_BMG.model.01.png b/ACadSharp.Image.Tests/Baselines/HSK80AHCP16190M_BMG.model.01.png index 4b1aa3c3c09b4c5149cba483b3602189b6baaa4b..209c4b9d2d15bc578528ee02996f231659bd143e 100644 GIT binary patch literal 34722 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 nh$+hO@BP0&YX2`9Tc`9!UA{)vBJ_U%ZbP!} diff --git a/ACadSharp.Image.Tests/Baselines/Subaru-Logo-Vector-Free-Wrap.model.01.png b/ACadSharp.Image.Tests/Baselines/Subaru-Logo-Vector-Free-Wrap.model.01.png index 0dbb6e69a633463f7f1176439197a91e035fb9eb..f59c5440af39cddd5e5b6fb775d650e00a2d2000 100644 GIT binary patch literal 79257 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 tgB1vS|M(xIIUjiZI;^bE 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 X$=i#fS`~K~^m4Lyv#U4~aP2<;RfP7x literal 8161 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 diff --git a/ACadSharp.Image.Tests/Baselines/features.model.01.png b/ACadSharp.Image.Tests/Baselines/features.model.01.png index 0ccbf2719e7c713d5d42f4f06c532d7ecaaaba21..9bb4424f493986c86e0d28f5e2597e4884896ac3 100644 GIT binary patch literal 13139 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 literal 14225 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%0An<-1phNSb$=&&{d{*Sxva{FT?OJw*mj zoZpaB{J(goeU`e{a{U9~MbY1AUbEN@aYOIOrBHrYw2Jfsv2>S8Yweyzn{U6LI459WB1diSEi|jta`& zSx)KAsy~Y@v#*f-A-ViXl9XUp?1CIbwC^yPz`d%z>muFx+*vC?xkjz+PdD}()@^M7q8kG)y09AXJr1UdWzT48A~*zMZhy_`Zb7iU8lNEx z-Ux8q^;%2!u{BG{c}Yg*4%tKDU(fTx(qV?X=240+jX?$t`1bDx0^XW$g`b2X>OMDJ zw2ZAc5R%8OKUysjCJC}G>{ZS;vhjjZ7iK7T^?KbTaF#b?KAeVSX>DbEb2v zzvelXUm)_5t8}JJC*%TZ zHy#qShEfFFQ?M@HaybvPfgtl0H>7A(wAR>8-A6#wop57vj#{Lnfe&Pw{t@gzx7zAeit7%_=$v51(rH_1JqUm6r4h! z6qwC5Ez#}eaK@Tr+}7uBf)|N2sRZRD^43$fecUVko}=}XXlkdPj)Kc&&(W5x7(1U6 zBL@$B$Tgc_GS>Fh{59do;0CUP>tQueX~7<~qhuU~rGmPTwee-&`vHBfej*Itkedlj zBG=!7V!*}R*N-KA`wVU--}$I0L9ipw=x>9D!>p{Tbx z1d7>)TY)-q^2ze!v^DmJ6GKxdCJiv}pK-K>rA$6p`a#1I+_9VON=3AV691iv!)6-~ zv;6i1ImIoxTE^;qbq6%Tes(u(ZB`BylSuoSzfQfQ(CJ`SY*!dDtM>N_ZXWMu<|Ik{ z!W9z%Sm7by>r02UWY>`evlpE#k>9d-n$6K(Bt@hhAoqNq!-NZb_2qO-U;6TaxCEaU^%b!ipQI&a%Qz< zgi^Cw^{G?-Ndwu0Tuj_cq$3AaCj4u_UPCG`%tBvnLV)5MiSE!6JSV4OTW^a@L`a+y zIe%(TRkM!eaI>zqVkIBJV!LPr`Ei$)_NY{d=-0 z5E8M*5WDp;P-2?GzDM^>U!3@ScR2slCkKtGlfB8ThoHjNtLh>mDFSC$TtClUZIs9p~I8GP5e_*&!} zpls)v&5DI;V@*aDv@wL_9D5#_Fp@5mLJ8I{kEU6=FvW&OYe2zFCngQd$^;5Ij@?dk zqDCPy0pTbxXgC((+uE_C-k~tj=?A`zk_pc9p|23z`DhNjOBgU9JGu4X$hgVwp>`q#*5Pd0^mrN|Vvn ziSU?&UO~cp%%%uYGBR!cVSsfib;2n=HhaL=U=Vu;J*TNwSW&popZq$1&To7&R=lc0 ziC+AVt4?uZ^!f-`yA_x_eFcwugPIOZY$V~bga4-cvn=M+F29yr^{K`=53I_wSTy?I5d12 zdRzv;PYb2^<$8CZv(A-yiGb=fOD{8P(G^@(4-T{GNZmwC^dD%i%lA%blI(w;J@CPE z?x10wDYxMW7f>mxN(oLXg~8x|@|d2OLJT#*a`u2rqd!M@++jckwzD_YqZ%NidB)j$ z{De4@&GiCAm_+`!y$`Pygq;)F|4IGi_+$v50O5~@Pv_g9)a@1~QEpk7I zhp&_5p_)XC$CrRq>awXm*1-21Egdhqrm%<5 z9_XFrtx=!msV=5^EHNmcb*)1}<^D`E$5DqyZ{gUcp9_2b~N9Z)te{HtF9i7gkTmq;`@j;(UF^8j1` zsuW&Y0?;-;3uYg(DE~Q7kic)KWDP$<2LUFv&8M!p{ZG}hfYfN3p2}aLhf)Oh8=+Z1 zN&)#70-vaX_NBTLia`0_76|$V1=;9gu&gNi@seG&Ha9;ZA*x zo4rn4+X=b_>CV)i*gxv3I3Q(s;M%Pjd^;`P^>hCnj(>CAA=IN#016`gel~8*fTdJf za2?=ZJ+iz?2{nH93r#J^q!Hg+FRj+d|8Jk1pRuE^&qZ27Yk;~*+9U6f&2<} - + - + - + diff --git a/ACadSharp.Image.Tests/Baselines/fidelity.model.01.png b/ACadSharp.Image.Tests/Baselines/fidelity.model.01.png index 8bad877795a9cea37a035a7daefde581ae31da35..363360215035626aa7a81ea9177ec23a80fd93c4 100644 GIT binary patch literal 7614 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 M&sZCmoN~GIU*4=?C;$Ke literal 7943 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 ZnC+`FeX9oA9EeWn%xT+Gm1dsT{sTgdXz>65 literal 9484 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 entity, ulong handle) where T : CadObject @@ -66,10 +67,10 @@ public void NestedEntityOnLayerZeroInheritsInsertLayer() Assert.Equal(0UL, surface.Entities[1].Handle); Assert.Equal("Hardware", surface.Entities[2].LayerName); Assert.Equal(0, surface.Depth); - Assert.Equal(SixLabors.ImageSharp.Color.FromRgb(255, 0, 0), surface.Layers[1].Color); + Assert.Equal(SixLabors.ImageSharp.Color.FromPixel(new Rgba32(255, 0, 0)), surface.Layers[1].Color); // The layer-0 line is ByLayer, so it is drawn with the effective (insert) layer's colour, not layer 0's. - Assert.Equal(SixLabors.ImageSharp.Color.FromRgb(255, 0, 0), surface.Styles[0].StrokeColor); + Assert.Equal(SixLabors.ImageSharp.Color.FromPixel(new Rgba32(255, 0, 0)), surface.Styles[0].StrokeColor); } [Fact] @@ -107,19 +108,19 @@ public void NestedEntitiesResolveByLayerAgainstTheEffectiveLayerAndByBlockAgains // Styles are recorded per drawing call: (a), (b), (c); the insert itself draws nothing. Assert.Equal(3, surface.Styles.Count); ImageStyle layerZero = surface.Styles[0]; - Assert.Equal(SixLabors.ImageSharp.Color.FromRgb(255, 0, 0), layerZero.StrokeColor); + Assert.Equal(SixLabors.ImageSharp.Color.FromPixel(new Rgba32(255, 0, 0)), layerZero.StrokeColor); Assert.Equal(configuration.GetLineWeightPixels(LineWeightType.W50), layerZero.StrokeWidth); // LTSCALE 2 (header, reached through the insert since the clone has no document) x CELTSCALE 1.5 (insert) x 1. Assert.NotNull(layerZero.DashPattern); Assert.Equal([3f, 3f], layerZero.DashPattern); ImageStyle byBlock = surface.Styles[1]; - Assert.Equal(SixLabors.ImageSharp.Color.FromRgb(0, 255, 0), byBlock.StrokeColor); + Assert.Equal(SixLabors.ImageSharp.Color.FromPixel(new Rgba32(0, 255, 0)), byBlock.StrokeColor); Assert.Equal(configuration.GetLineWeightPixels(LineWeightType.W200), byBlock.StrokeWidth); Assert.Null(byBlock.DashPattern); ImageStyle own = surface.Styles[2]; - Assert.Equal(SixLabors.ImageSharp.Color.FromRgb(0, 0, 255), own.StrokeColor); + Assert.Equal(SixLabors.ImageSharp.Color.FromPixel(new Rgba32(0, 0, 255)), own.StrokeColor); Assert.Equal(configuration.GetLineWeightPixels(LineWeightType.W100), own.StrokeWidth); } @@ -162,7 +163,7 @@ public void LayerInfoCarriesLayerColourAndWidth() LayerRenderInfo info = Assert.Single(surface.Layers); Assert.Equal("Red", info.LayerName); - Assert.Equal(SixLabors.ImageSharp.Color.FromRgb(255, 0, 0), info.Color); + Assert.Equal(SixLabors.ImageSharp.Color.FromPixel(new Rgba32(255, 0, 0)), info.Color); Assert.Equal(configuration.GetLineWeightPixels(LineWeightType.W50), info.StrokeWidth); } @@ -170,7 +171,7 @@ public void LayerInfoCarriesLayerColourAndWidth() public void LayerColourIndexSevenFollowsTheBackground() { RecordingDrawingSurface surface = new(); - ImageConfiguration configuration = new() { BackgroundColor = SixLabors.ImageSharp.Color.FromRgb(20, 20, 40) }; + ImageConfiguration configuration = new() { BackgroundColor = SixLabors.ImageSharp.Color.FromPixel(new Rgba32(20, 20, 40)) }; EntityRenderDispatcher dispatcher = new(configuration); Line line = new(new XYZ(0, 0, 0), new XYZ(10, 0, 0)) { Layer = new Layer("Ink") { Color = new ACadSharp.Color(7) } }; @@ -964,7 +965,7 @@ public void ConstantAttributeDefinitionsAreStillDrawn() BlockRecord block = new("CONST"); block.Entities.Add(new AttributeDefinition { Tag = "MAKER", Value = "ACME", InsertPoint = new XYZ(1, 1, 0), Height = 2, Flags = AttributeFlags.Constant }); Insert insert = new(block) { InsertPoint = new XYZ(10, 0, 0) }; - // Insert has no parameterless constructor and Block has no public setter in ACadSharp 3.7.1 (verified by + // Insert has no parameterless constructor and Block has no public setter in ACadSharp 3.8.0 (verified by // probe), so an insert with no ATTRIB is built via Insert(BlockRecord) and then Attributes.Clear(), reproducing // a file where a constant attribute was never persisted as an ATTRIB. Without the Clear(), Insert(BlockRecord) // would already have created an AttributeEntity for the constant ATTDEF, and the assertion below would pass @@ -1258,8 +1259,9 @@ public void LeaderArrowInsideAScaledInsertScalesWithIt() Assert.Contains(arrow, p => Math.Abs(p.X - 11) < 1e-9 && Math.Abs(p.Y - 96) < 1e-9); Assert.Equal([new SurfacePoint(5, 95), new SurfacePoint(25, 95)], Assert.Single(surface.Polylines)); - // Insert.Explode()'s clone shares the leader's vertex list (a Leader.Clone() quirk like MLine.Clone()'s), so - // ApplyTransform would otherwise leave the block's own LEADER holding world coordinates after this call. + // Insert.Explode()'s clone shares the leader's vertex list (a Leader.Clone() quirk; MLine.Clone() shares its + // vertices' segment lists instead), so ApplyTransform would otherwise leave the block's own LEADER holding + // world coordinates after this call. Assert.Equal([new XYZ(0, 0, 0), new XYZ(10, 0, 0)], leader.Vertices); } @@ -1360,6 +1362,12 @@ private static MLine.Vertex VertexAt(double x, double y, params double[][] param return vertex; } + private static void AssertMLineSegmentsIntact(MLine mline) + { + Assert.Equal(2, mline.Vertices.Count); + Assert.All(mline.Vertices, vertex => Assert.Equal(2, vertex.Segments.Count)); + } + [Fact] public void MLineDrawsOnePolylinePerStyleElementAtTheStoredOffsets() { @@ -1576,7 +1584,7 @@ public void AnMLineWithAreaFillCutsNotifiesThatFillCutsAreNotDrawn() } [Fact] - public void MLineInsideABlockIsDrawnThroughTheInsertAndKeepsItsVertices() + public void MLineInsideABlockIsDrawnThroughTheInsertAndKeepsItsVerticesAndSegments() { RecordingDrawingSurface surface = new(); ImageConfiguration configuration = new(); @@ -1587,13 +1595,13 @@ public void MLineInsideABlockIsDrawnThroughTheInsertAndKeepsItsVertices() new EntityRenderDispatcher(configuration).Draw(CreateContext(surface, configuration), insert); - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); Assert.Equal(2, surface.Polylines.Count); Assert.Equal([new SurfacePoint(5, 79.5), new SurfacePoint(15, 79.5)], surface.Polylines[0]); } [Fact] - public void MLineNestedTwoBlocksDeepIsDrawnThroughTheComposedInsertsAndKeepsItsVertices() + public void MLineNestedTwoBlocksDeepIsDrawnThroughTheComposedInsertsAndKeepsItsVerticesAndSegments() { RecordingDrawingSurface surface = new(); ImageConfiguration configuration = new(); @@ -1607,10 +1615,10 @@ public void MLineNestedTwoBlocksDeepIsDrawnThroughTheComposedInsertsAndKeepsItsV new EntityRenderDispatcher(configuration).Draw(CreateContext(surface, configuration), outerInsert); - // ACadSharp 3.7.1's Insert.Clone() deep-clones its block, so exploding outerInsert clones (and empties the - // shared vertex list of) an MLINE that is not even a direct child of OUTER's block; without healing every - // MLINE reachable through the block tree, the original loses its vertices here too. - Assert.Equal(2, mline.Vertices.Count); + // ACadSharp 3.8.0's Insert.Clone() deep-clones its block, so exploding outerInsert clones (and empties the + // shared segment lists of) an MLINE that is not even a direct child of OUTER's block; without healing every + // MLINE reachable through the block tree, the original loses its segments here too. + AssertMLineSegmentsIntact(mline); Assert.Equal(2, surface.Polylines.Count); // Composed translation (5,20) + (2,3) = (7,23), both inserts translation-only. Element 0 (offset +0.5): // world y 0.5 -> composed 23.5 -> surface 100-23.5 = 76.5. Element 1 (offset -0.5): world y -0.5 -> composed @@ -1648,7 +1656,6 @@ public void RectangularWipeoutFillsTheBackgroundColourOpaquely() RecordingDrawingSurface surface = new(); ImageConfiguration configuration = new() { BackgroundColor = SixLabors.ImageSharp.Color.White }; Wipeout wipeout = UnitWipeout(); - wipeout.ClipType = ClipType.Rectangular; wipeout.ClipBoundaryVertices.AddRange([new XY(-0.5, -0.5), new XY(0.5, 0.5)]); wipeout.Transparency = new Transparency(50); @@ -1669,7 +1676,6 @@ public void PolygonalWipeoutUsesItsVertices() RecordingDrawingSurface surface = new(); ImageConfiguration configuration = new(); Wipeout wipeout = UnitWipeout(); - wipeout.ClipType = ClipType.Polygonal; wipeout.ClipBoundaryVertices.AddRange([new XY(-0.5, -0.5), new XY(0.5, -0.5), new XY(0, 0.5)]); new EntityRenderDispatcher(configuration).Draw(CreateContext(surface, configuration), wipeout); @@ -1767,7 +1773,7 @@ public void AWipeoutInsideAnInsertIsMappedFromTheOriginalSoItsUAndVStayDirection IReadOnlyList polygon = Assert.Single(surface.Polygons); // UnitWipeout covers x in [10,15]; the insert translates the insertion point by (50,0,0) to [60,65]. A U - // vector contaminated by that translation (as ACadSharp 3.7.1's Wipeout.ApplyTransform would produce) would + // vector contaminated by that translation (as ACadSharp 3.8.0's Wipeout.ApplyTransform would produce) would // stretch it to [60,115] instead. Assert.Equal(60d, polygon.Min(p => p.X), 6); Assert.Equal(65d, polygon.Max(p => p.X), 6); @@ -1900,7 +1906,7 @@ public void MLineWithOneVertexInsideABlockWarnsThatItHasNoVertices() public void WipeoutOnATranslucentBackgroundIsSkippedWithAWarning() { RecordingDrawingSurface surface = new(); - ImageConfiguration configuration = new() { BackgroundColor = SixLabors.ImageSharp.Color.FromRgba(255, 255, 255, 128) }; + ImageConfiguration configuration = new() { BackgroundColor = SixLabors.ImageSharp.Color.FromPixel(new Rgba32(255, 255, 255, 128)) }; List notifications = new(); configuration.OnNotification += (_, e) => notifications.Add(e); @@ -2012,7 +2018,7 @@ public void ABlockThatReferencesItselfIsSkippedWithAWarningInsteadOfOverflowing( document.BlockRecords.Add(inner); outer.Entities.Add(new Line(new XYZ(0, 0, 0), new XYZ(1, 0, 0))); // Constructing an Insert of a block overflows the stack once that block's graph already contains a cycle - // (ACadSharp 3.7.1's Insert(BlockRecord) constructor itself recurses through the block). So the insert under + // (ACadSharp 3.8.0's Insert(BlockRecord) constructor itself recurses through the block). So the insert under // test is built, and added to the document, while outer's graph is still acyclic; the second half of the // cycle (inner's own Insert(outer)) is wired up afterwards, closing the cycle only in the two blocks' // Entities collections, never inside another Insert constructor call. @@ -2455,7 +2461,7 @@ public void DrawingAnArrowBlockLeavesAnMLineInsideItIntact() arrow.Entities.Add(mline); document.BlockRecords.Add(arrow); BlockRecord note = new("NOTE"); - // ACadSharp 3.7.1's Insert(BlockRecord) constructor clones a document-owned block's entities, and cloning a + // ACadSharp 3.8.0's Insert(BlockRecord) constructor clones a document-owned block's entities, and cloning a // LEADER clones its dimension style and with it that style's arrowhead block, so building the insert after // the leader would empty this MLINE before the renderer ever saw the drawing. The insert is therefore built // while NOTE is still empty, the same construction-order workaround the cycle tests use. @@ -2468,13 +2474,13 @@ public void DrawingAnArrowBlockLeavesAnMLineInsideItIntact() }); document.BlockRecords.Add(note); document.Entities.Add(insert); - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); new EntityRenderDispatcher(configuration).Draw(CreateContext(surface, configuration), insert); // The caller's own MLINE must survive the render, and it must have been drawn from its two vertices: the // leader's path is one polyline and the MLINE's two style elements are the other two. - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); Assert.Equal(3, surface.Polylines.Count); } @@ -2499,14 +2505,14 @@ public void DrawingATopLevelLeadersArrowBlockLeavesAnMLineInsideItIntact() Style = new DimensionStyle("A") { ArrowSize = 2, ScaleFactor = 1, LeaderArrow = arrow }, }; document.Entities.Add(leader); - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); new EntityRenderDispatcher(configuration).Draw(CreateContext(surface, configuration), leader); // Nothing exploded this leader, so the only thing standing between ACadSharp's Insert(BlockRecord) // constructor and the caller's MLINE is the snapshot DrawArrowBlock takes before building its transient // insert. - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); Assert.Equal(3, surface.Polylines.Count); } @@ -2536,14 +2542,14 @@ public void DrawingABlockWhoseLeaderStyleCarriesADimArrow1LeavesAnMLineInsideItI }); document.BlockRecords.Add(note); document.Entities.Add(insert); - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); new EntityRenderDispatcher(configuration).Draw(CreateContext(surface, configuration), insert); // DIMBLK1 is never drawn by this renderer, but DimensionStyle.Clone() deep-clones all four of its // block-valued properties, so exploding the insert reaches this MLINE through the leader's style exactly as // it does through LeaderArrow. The snapshot has to follow every one of those edges, not just the drawn one. - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); } [Fact] @@ -2570,13 +2576,13 @@ public void DrawingABlockWhoseDimensionStyleCarriesAnArrowBlockLeavesAnMLineInsi }); document.BlockRecords.Add(note); document.Entities.Add(insert); - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); new EntityRenderDispatcher(configuration).Draw(CreateContext(surface, configuration), insert); // A DIMENSION carries a DimensionStyle exactly as a LEADER does, and cloning it clones the style's arrow // blocks the same way. A block holding only a dimension must therefore still be scanned and snapshotted. - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); } [Fact] @@ -2604,14 +2610,14 @@ public void DrawingABlockWhoseDimensionPictureHoldsAnMLineLeavesItIntact() }); document.BlockRecords.Add(note); document.Entities.Add(insert); - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); new EntityRenderDispatcher(configuration).Draw(CreateContext(surface, configuration), insert); // Dimension.Clone() deep-clones the picture block that holds the dimension's own generated geometry, not // just the arrowhead blocks its style points at, so that block is a fifth edge the snapshot has to follow. // Unlike the arrowheads it is on the ordinary render path: DrawDimension draws through it. - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); } [Fact] @@ -2670,14 +2676,14 @@ public void DrawingATopLevelDimensionLeavesAnMLineInsideItsArrowBlockIntact() Style = new DimensionStyle("A") { ArrowSize = 2, ScaleFactor = 1, SeparateArrowBlocks = true, DimArrow1 = arrow, DimArrow2 = arrow }, }; document.Entities.Add(dimension); - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); new EntityRenderDispatcher(configuration).Draw(CreateContext(surface, configuration), dimension); // Nothing exploded this dimension: DrawDimension calls UpdateBlock() to generate the picture, and that // builds Inserts of the caller's own DimArrow1/DimArrow2 blocks, whose constructor empties an MLINE inside // them. The snapshot around that call is the only thing standing between it and the caller's document. - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); } [Fact] @@ -2733,13 +2739,13 @@ public void RenderingADimensionThroughTheExporterLeavesAnMLineInsideItsArrowBloc document.Entities.Add(dimension); ImageExporter exporter = new(); exporter.AddModelSpace(document); - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); foreach (RenderedPage page in exporter.Render()) { page.Dispose(); } - Assert.Equal(2, mline.Vertices.Count); + AssertMLineSegmentsIntact(mline); } } diff --git a/ACadSharp.Image.Tests/ImageExporterTests.cs b/ACadSharp.Image.Tests/ImageExporterTests.cs index 8f81587..5c1d45b 100644 --- a/ACadSharp.Image.Tests/ImageExporterTests.cs +++ b/ACadSharp.Image.Tests/ImageExporterTests.cs @@ -118,7 +118,7 @@ public void RenderSplineBlockDoesNotReportNotImplemented() Assert.NotNull(page.Canvas); Assert.DoesNotContain(notifications, n => n.NotificationType == NotificationType.NotImplemented && n.Message.Contains("Spline", StringComparison.OrdinalIgnoreCase)); - // Silence is not enough: the spline must actually reach the surface. ACadSharp 3.7.1's UpdateFromFitPoints + // Silence is not enough: the spline must actually reach the surface. ACadSharp 3.8.0's UpdateFromFitPoints // produces no control points, so this one is drawn through its fit points, with a warning saying so. RecordingDrawingSurface surface = new(); new ImagePageRenderer(exporter.Configuration).RenderTo(surface, exporter.Pages[0]); @@ -129,7 +129,7 @@ public void RenderSplineBlockDoesNotReportNotImplemented() [Fact] public void RenderClosedPeriodicSplineDoesNotDrawSpokeToOrigin() { - using Image canvas = new(100, 100, SixLabors.ImageSharp.Color.White); + using Image canvas = new(100, 100, SixLabors.ImageSharp.Color.White.ToPixel()); ImageConfiguration configuration = new() { Width = 100, diff --git a/ACadSharp.Image.Tests/ImagePageRendererTests.cs b/ACadSharp.Image.Tests/ImagePageRendererTests.cs index e982d08..9f3500d 100644 --- a/ACadSharp.Image.Tests/ImagePageRendererTests.cs +++ b/ACadSharp.Image.Tests/ImagePageRendererTests.cs @@ -243,7 +243,6 @@ public void ModelSpaceWipeoutMappedRegionDecidesViewportInclusionNotTheRawVertex VVector = new XYZ(-5, 0, 0), Size = new XY(1, 1), ClippingState = true, - ClipType = ClipType.Rectangular, }; wipeout.ClipBoundaryVertices.AddRange([new XY(-0.5, -0.5), new XY(0.5, 0.5)]); document.Entities.Add(wipeout); @@ -309,7 +308,6 @@ public void InvertedClipModelSpaceWipeoutInAViewportMasksTheSameAsThePageLevelDr VVector = new XYZ(0, 5, 0), Size = new XY(1, 1), ClippingState = true, - ClipType = ClipType.Rectangular, ClipMode = ClipMode.Inside, }; // Strictly inside the frame, not equal to it (this wipeout's own default frame is (-0.5,-0.5)..(0.5,0.5)), @@ -461,6 +459,7 @@ public void AddingAnMLineToAPreviouslyCleanBlockIsPickedUpByTheNextRenderOnTheSa renderer.RenderTo(surface, page); Assert.Equal(2, mline.Vertices.Count); + Assert.All(mline.Vertices, vertex => Assert.Equal(2, vertex.Segments.Count)); Assert.Equal(2, surface.Polylines.Count); } @@ -470,11 +469,11 @@ public void AddingALeaderToAPreviouslyCleanBlockIsPickedUpByTheNextRenderOnTheSa // Same staleness hazard as the MLINE case above, for a LEADER: Insert.Clone() shares a LEADER's vertex list // with its source too (see EntityRenderDispatcher remarks on DrawBlockContents), so it must be found by the // same cached subtree scan and must not be missed once it is added after the block was first seen clean. - // The insert carries a non-zero placement deliberately: a LEADER's shared list is not emptied by Clone() the - // way an MLINE's is, it is overwritten in place by Explode()'s ApplyTransform, so under an identity - // placement that in-place write puts back the very same coordinates and the assertions below would hold - // whether or not the stale-cache bug is present. A real translation makes the un-healed path write world - // coordinates into the shared list instead, so both assertions genuinely discriminate. + // The insert carries a non-zero placement deliberately: a LEADER's shared vertex list is not emptied by + // Clone() the way an MLINE's segment lists are; it is overwritten in place by Explode()'s ApplyTransform, so + // under an identity placement that in-place write puts back the very same coordinates and the assertions + // below would hold whether or not the stale-cache bug is present. A real translation makes the un-healed path + // write world coordinates into the shared list instead, so both assertions genuinely discriminate. BlockRecord wall = new("WALLL"); wall.Entities.Add(new Line(new XYZ(0, 0, 0), new XYZ(10, 0, 0))); BlockRecord plan = new("PLANL"); diff --git a/ACadSharp.Image.Tests/ImagePageTests.cs b/ACadSharp.Image.Tests/ImagePageTests.cs index 7d266b8..9d75970 100644 --- a/ACadSharp.Image.Tests/ImagePageTests.cs +++ b/ACadSharp.Image.Tests/ImagePageTests.cs @@ -88,7 +88,6 @@ public void FrameUsesTheMappedWipeoutRegionNotTheRawPixelVertices() VVector = new XYZ(-5, 0, 0), Size = new XY(1, 1), ClippingState = true, - ClipType = ClipType.Rectangular, }; wipeout.ClipBoundaryVertices.AddRange([new XY(-0.5, -0.5), new XY(0.5, 0.5)]); ImagePage page = new(); @@ -165,7 +164,6 @@ public void TheFrameOfAnInvertedWipeoutIsItsWholeImageFootprint() VVector = new XYZ(0, 10, 0), Size = new XY(1, 1), ClippingState = true, - ClipType = ClipType.Rectangular, ClipMode = ClipMode.Inside, }; wipeout.ClipBoundaryVertices.Add(new XY(-0.25, -0.25)); diff --git a/ACadSharp.Image.Tests/RasterDrawingSurfaceTests.cs b/ACadSharp.Image.Tests/RasterDrawingSurfaceTests.cs index c2946c6..58facfa 100644 --- a/ACadSharp.Image.Tests/RasterDrawingSurfaceTests.cs +++ b/ACadSharp.Image.Tests/RasterDrawingSurfaceTests.cs @@ -15,7 +15,7 @@ public sealed class RasterDrawingSurfaceTests [Fact] public void DrawLinePaintsPixelsAlongTheLine() { - using Image canvas = new(20, 20, ImageColor.White); + using Image canvas = new(20, 20, White); using RasterDrawingSurface surface = new(canvas, new ImageConfiguration(), ownsCanvas: false); surface.DrawLine(new ImageStyle(ImageColor.Black, 2f), new SurfacePoint(2, 10), new SurfacePoint(18, 10)); @@ -27,7 +27,7 @@ public void DrawLinePaintsPixelsAlongTheLine() [Fact] public void DrawPolylineClosedConnectsLastPointToFirst() { - using Image canvas = new(20, 20, ImageColor.White); + using Image canvas = new(20, 20, White); using RasterDrawingSurface surface = new(canvas, new ImageConfiguration(), ownsCanvas: false); SurfacePoint[] points = [new(2, 2), new(18, 2), new(18, 18)]; @@ -40,7 +40,7 @@ public void DrawPolylineClosedConnectsLastPointToFirst() [Fact] public void FillPathUsesEvenOddRuleForHoles() { - using Image canvas = new(40, 40, ImageColor.White); + using Image canvas = new(40, 40, White); using RasterDrawingSurface surface = new(canvas, new ImageConfiguration(), ownsCanvas: false); SurfacePoint[] outer = [new(2, 2), new(38, 2), new(38, 38), new(2, 38)]; SurfacePoint[] hole = [new(15, 15), new(25, 15), new(25, 25), new(15, 25)]; @@ -54,7 +54,7 @@ public void FillPathUsesEvenOddRuleForHoles() [Fact] public void OpacityBlendsWithBackground() { - using Image canvas = new(10, 10, ImageColor.White); + using Image canvas = new(10, 10, White); using RasterDrawingSurface surface = new(canvas, new ImageConfiguration(), ownsCanvas: false); surface.FillPolygon(new ImageStyle(ImageColor.Black, 1f, null, 0.5f), [new(0, 0), new(10, 0), new(10, 10), new(0, 10)]); @@ -68,7 +68,7 @@ public void OpacityBlendsWithBackground() [Fact] public void DashPatternLeavesGaps() { - using Image canvas = new(60, 10, ImageColor.White); + using Image canvas = new(60, 10, White); using RasterDrawingSurface surface = new(canvas, new ImageConfiguration(), ownsCanvas: false); // 10 px dash, 10 px gap. @@ -82,7 +82,7 @@ public void DashPatternLeavesGaps() [Fact] public void ViewportDrawsIntoChildAndCompositesAtBounds() { - using Image canvas = new(40, 40, ImageColor.White); + using Image canvas = new(40, 40, White); using RasterDrawingSurface surface = new(canvas, new ImageConfiguration(), ownsCanvas: false); ViewportSurface viewport = surface.BeginViewport(new SurfaceRect(20, 20, 10, 10)); @@ -141,7 +141,7 @@ public void PositiveBulgeBendsTowardPositiveYInSurfaceSpace() [Fact] public void ViewportFlipOriginIsTheExactHeightNotTheRoundedImageHeight() { - using Image canvas = new(20, 20, ImageColor.White); + using Image canvas = new(20, 20, White); using RasterDrawingSurface surface = new(canvas, new ImageConfiguration(), ownsCanvas: false); // A viewport 9.3 px tall gets a 10-row image; its content must still be placed against 9.3, not 10. @@ -160,7 +160,7 @@ public void ViewportFlipOriginIsTheExactHeightNotTheRoundedImageHeight() [Fact] public void ViewportFractionalPositionIsCarriedIntoTheChildOffsets() { - using Image canvas = new(20, 20, ImageColor.White); + using Image canvas = new(20, 20, White); using RasterDrawingSurface surface = new(canvas, new ImageConfiguration(), ownsCanvas: false); // Viewport at (3.6, 2.4): the image is pasted at (3, 2) and the child draws 0.6 / 0.4 px further in. @@ -240,7 +240,7 @@ public void RotatedTextAnchorsItsFirstLineAlongItsOwnUpAxis() /// Draws one text run of height 10 at the canvas centre and returns the canvas. private static Image DrawnText(string value, SurfaceTextBaseline baseline, double lineSpacingFactor, double rotation, float dpi = 96f, double widthScale = 1d) { - Image canvas = new(200, 200, ImageColor.White); + Image canvas = new(200, 200, White); using RasterDrawingSurface surface = new(canvas, new ImageConfiguration { Dpi = dpi }, ownsCanvas: false); surface.DrawText( new ImageStyle(ImageColor.Black, 1f), @@ -299,7 +299,7 @@ private static int[] InkColumnStarts(Image canvas) [Fact] public void FillsDropNonFiniteGeometryInsteadOfThrowing() { - using Image canvas = new(20, 20, ImageColor.White); + using Image canvas = new(20, 20, White); using RasterDrawingSurface surface = new(canvas, new ImageConfiguration(), ownsCanvas: false); ImageStyle style = new(ImageColor.Black, 1f); SurfacePoint[] ring = [new(2, 2), new(18, 2), new(double.PositiveInfinity, 18)]; @@ -440,7 +440,7 @@ public void DrawTextRejectsANonFiniteOrNonPositiveWidthScale(double widthScale) // Matches SvgDrawingSurface.DrawText's guard: Matrix3x2.CreateScale(0f, 1f, pivot) would otherwise collapse // the run to nothing silently instead of being rejected the same way a direct caller cannot reach through // TextRenderer (both Place overloads guard length >= 1e-12). - using Image canvas = new(20, 20, ImageColor.White); + using Image canvas = new(20, 20, White); ImageConfiguration configuration = new(); List notifications = new(); configuration.OnNotification += (_, e) => notifications.Add(e); diff --git a/ACadSharp.Image.Tests/RenderedPageTests.cs b/ACadSharp.Image.Tests/RenderedPageTests.cs index 0cb85d8..0d75dae 100644 --- a/ACadSharp.Image.Tests/RenderedPageTests.cs +++ b/ACadSharp.Image.Tests/RenderedPageTests.cs @@ -19,7 +19,7 @@ public sealed class RenderedPageTests [InlineData(ImageExportFormat.Webp, new byte[] { 0x52, 0x49, 0x46, 0x46 }, "WEBP")] public void RasterPagesEncodeInTheirFormat(ImageExportFormat format, byte[] signature, string? fourcc) { - using Image canvas = new(8, 8, SixLabors.ImageSharp.Color.White); + using Image canvas = new(8, 8, SixLabors.ImageSharp.Color.White.ToPixel()); using RenderedImagePage page = new("p", canvas, format, 80); using MemoryStream stream = new(); diff --git a/ACadSharp.Image.Tests/SplineRendererTests.cs b/ACadSharp.Image.Tests/SplineRendererTests.cs index 43251cf..2a1d5ba 100644 --- a/ACadSharp.Image.Tests/SplineRendererTests.cs +++ b/ACadSharp.Image.Tests/SplineRendererTests.cs @@ -129,7 +129,7 @@ public void InconsistentKnotSplineFallsBackToAcadSharpTessellation() dispatcher.Draw(Context(surface, configuration), spline); - // ACadSharp 3.7.1's TryPolygonalVertexes tessellates this malformed spline anyway (via its own + // ACadSharp 3.8.0's TryPolygonalVertexes tessellates this malformed spline anyway (via its own // fallback), so the renderer's last-resort path succeeds and draws a polyline instead of warning. Assert.Single(surface.Polylines); Assert.DoesNotContain(notifications, n => n.NotificationType == NotificationType.Warning); diff --git a/ACadSharp.Image.Tests/StyleResolutionTests.cs b/ACadSharp.Image.Tests/StyleResolutionTests.cs index 24121da..8ef8b97 100644 --- a/ACadSharp.Image.Tests/StyleResolutionTests.cs +++ b/ACadSharp.Image.Tests/StyleResolutionTests.cs @@ -12,7 +12,7 @@ public sealed class StyleResolutionTests [Fact] public void OpacityMapping() { - Assert.Equal(1f, ImageStyleResolver.ResolveOpacity(new Line(), 1f)); // ByLayer default -> opaque (Layer has no transparency in ACadSharp 3.7.1) + Assert.Equal(1f, ImageStyleResolver.ResolveOpacity(new Line(), 1f)); // ByLayer default -> opaque (Layer has no transparency in ACadSharp 3.8.0) Assert.Equal(0.3f, ImageStyleResolver.ResolveOpacity(new Line { Transparency = new Transparency(70) }, 1f), 3); Assert.Equal(0.5f, ImageStyleResolver.ResolveOpacity(new Line { Transparency = Transparency.ByBlock }, 0.5f)); Assert.Equal(1f, ImageStyleResolver.ResolveOpacity(new Line { Transparency = Transparency.ByBlock }, 1f)); diff --git a/ACadSharp.Image.Tests/SvgDrawingSurfaceTests.cs b/ACadSharp.Image.Tests/SvgDrawingSurfaceTests.cs index 1bf71c6..d12949d 100644 --- a/ACadSharp.Image.Tests/SvgDrawingSurfaceTests.cs +++ b/ACadSharp.Image.Tests/SvgDrawingSurfaceTests.cs @@ -1,6 +1,7 @@ using System.Xml.Linq; using ACadSharp.Image.Rendering; using ACadSharp.Image.Rendering.Svg; +using SixLabors.ImageSharp.PixelFormats; namespace ACadSharp.Image.Tests; @@ -20,7 +21,7 @@ private static SvgDrawingSurface CreateSurface(Action? confi private static EntityRenderInfo Entity(string layer, string type = "LINE", ulong handle = 0x10, ulong? parent = null, string? block = null) => new(layer, type, handle, parent, block); - private static LayerRenderInfo Layer(string name) => new(name, Color.FromRgb(255, 0, 0), 1f); + private static LayerRenderInfo Layer(string name) => new(name, Color.FromPixel(new Rgba32(255, 0, 0)), 1f); [Theory] [InlineData(null, 3)] @@ -81,7 +82,7 @@ public void BackgroundRectOnlyWhenOpaque() public void EntitiesAreGroupedByEffectiveLayerInOrderOfFirstAppearance() { using SvgDrawingSurface surface = CreateSurface(c => c.Svg.IdPrefix = "p-"); - ImageStyle style = new(Color.FromRgb(255, 0, 0), 1f); + ImageStyle style = new(Color.FromPixel(new Rgba32(255, 0, 0)), 1f); surface.BeginEntity(Entity("Walls", handle: 0x1F3), Layer("Walls")); surface.DrawLine(style, new SurfacePoint(0, 0), new SurfacePoint(10, 0)); @@ -115,7 +116,7 @@ public void EntitiesAreGroupedByEffectiveLayerInOrderOfFirstAppearance() public void NestedEntityCarriesParentAndBlock() { using SvgDrawingSurface surface = CreateSurface(); - ImageStyle style = new(Color.FromRgb(255, 0, 0), 1f); + ImageStyle style = new(Color.FromPixel(new Rgba32(255, 0, 0)), 1f); surface.BeginEntity(Entity("Doors", "INSERT", 0xA0), Layer("Doors")); surface.BeginEntity(Entity("Doors", "LINE", 0xA1, 0xA0, "DOOR"), Layer("Doors")); @@ -133,9 +134,9 @@ public void ZeroHandleOmitsDataHandle() { using SvgDrawingSurface surface = CreateSurface(); - // Exploded block contents are clones with handle 0 (ACadSharp 3.7.1); no data-handle is written for them. + // Exploded block contents are clones with handle 0 (ACadSharp 3.8.0); no data-handle is written for them. surface.BeginEntity(Entity("Doors", "LINE", 0, 0xA0, "DOOR"), Layer("Doors")); - surface.DrawLine(new ImageStyle(Color.FromRgb(255, 0, 0), 1f), new SurfacePoint(0, 0), new SurfacePoint(1, 1)); + surface.DrawLine(new ImageStyle(Color.FromPixel(new Rgba32(255, 0, 0)), 1f), new SurfacePoint(0, 0), new SurfacePoint(1, 1)); surface.EndEntity(); XElement line = Assert.Single(surface.ToDocument().Descendants(Ns + "line")); @@ -150,7 +151,7 @@ public void StyleOverridesAreWrittenOnlyWhenTheyDiffer() using SvgDrawingSurface surface = CreateSurface(c => c.Svg.EmitEntityAttributes = false); surface.BeginEntity(Entity("L"), Layer("L")); - surface.DrawLine(new ImageStyle(Color.FromRgb(0, 0, 255), 2.5f, [4f, 2f], 0.5f), new SurfacePoint(0, 0), new SurfacePoint(1, 1)); + surface.DrawLine(new ImageStyle(Color.FromPixel(new Rgba32(0, 0, 255)), 2.5f, [4f, 2f], 0.5f), new SurfacePoint(0, 0), new SurfacePoint(1, 1)); surface.EndEntity(); XElement line = Assert.Single(surface.ToDocument().Descendants(Ns + "line")); @@ -496,7 +497,7 @@ public void XmlTextCleanKeepsLegalWhitespaceAndSurrogatePairs() [Fact] public void TranslucentBackgroundKeepsItsAlphaAsFillOpacity() { - using SvgDrawingSurface surface = CreateSurface(c => c.BackgroundColor = Color.FromRgba(0, 0, 0, 128)); + using SvgDrawingSurface surface = CreateSurface(c => c.BackgroundColor = Color.FromPixel(new Rgba32(0, 0, 0, 128))); XElement rect = Assert.Single(surface.ToDocument().Descendants(Ns + "rect")); Assert.Equal("#000000", (string?)rect.Attribute("fill")); diff --git a/ACadSharp.Image.Tests/SvgTextLayoutTests.cs b/ACadSharp.Image.Tests/SvgTextLayoutTests.cs index 048a01a..1ae79f6 100644 --- a/ACadSharp.Image.Tests/SvgTextLayoutTests.cs +++ b/ACadSharp.Image.Tests/SvgTextLayoutTests.cs @@ -100,9 +100,7 @@ public void LineCountMatchesImageSharpLayout(string text, double width) } /// - /// Counts the lines ImageSharp lays the text out on, independently of the wrapper: consecutive baselines are one - /// em apart at line spacing 1, and no glyph's top strays a whole em from its own line's top, so the distinct - /// floor(top / em) values are the lines. + /// Counts the lines ImageSharp lays the text out on, independently of the wrapper. /// private static int ImageSharpLineCount(string text, double width, double emSize) { @@ -113,13 +111,6 @@ private static int ImageSharpLineCount(string text, double width, double emSize) WrappingLength = (float)(width * ReferenceSize / emSize), }; - Assert.True(TextMeasurer.TryMeasureCharacterBounds(text, options, out ReadOnlySpan glyphs)); - HashSet rows = new(); - foreach (GlyphBounds glyph in glyphs) - { - rows.Add((int)Math.Floor(glyph.Bounds.Y / ReferenceSize)); - } - - return rows.Count; + return TextMeasurer.CountLines(text, options); } } diff --git a/ACadSharp.Image.Tests/SyntheticSamples.cs b/ACadSharp.Image.Tests/SyntheticSamples.cs index ea94ba4..56b8c4a 100644 --- a/ACadSharp.Image.Tests/SyntheticSamples.cs +++ b/ACadSharp.Image.Tests/SyntheticSamples.cs @@ -40,7 +40,7 @@ public static CadDocument ViewportSheet() document.Entities.Add(new Line(new XYZ(0, 30, 0), new XYZ(100, 30, 0)) { Layer = grid }); document.Entities.Add(new Circle { Center = new XYZ(50, 30, 0), Radius = 20, Layer = walls }); - // The default "Layout1" is left in the document: ACadSharp 3.7.1's LayoutCollection.Remove hard-codes + // The default "Layout1" is left in the document: ACadSharp 3.8.0's LayoutCollection.Remove hard-codes // Layout.PaperLayoutName ("Layout1") as non-removable and throws ArgumentException for it. It is harmless // here because the tests add only the "Sheet" layout to the exporter, never document.Layouts wholesale. Layout sheet = new("Sheet") { PaperWidth = 297, PaperHeight = 210 }; @@ -315,7 +315,6 @@ public static BlockRecord FidelityBlock() VVector = new XYZ(0, 20, 0), Size = new XY(1, 1), ClippingState = true, - ClipType = ClipType.Rectangular, ClipMode = ClipMode.Inside, Layer = coverLayer, }, 0x15); @@ -362,7 +361,7 @@ private static MLine.Vertex MLineVertex(XYZ position, XYZ direction, XYZ miter, /// /// Assigns a deterministic handle via reflection: has an internal setter in - /// ACadSharp 3.7.1, so tests that need a specific handle (to pin draw order, for instance) cannot set it directly. + /// ACadSharp 3.8.0, so tests that need a specific handle (to pin draw order, for instance) cannot set it directly. /// Shared by ImagePageTests and EntityRenderDispatcherTests as well as this class. /// internal static T WithHandle(T entity, ulong handle) diff --git a/ACadSharp.Image/ACadSharp.Image.csproj b/ACadSharp.Image/ACadSharp.Image.csproj index 2e64dde..4c4386a 100644 --- a/ACadSharp.Image/ACadSharp.Image.csproj +++ b/ACadSharp.Image/ACadSharp.Image.csproj @@ -14,6 +14,19 @@ true + + + + + + + + + diff --git a/ACadSharp.Image/Extensions/ColorExtensions.cs b/ACadSharp.Image/Extensions/ColorExtensions.cs index 0ecd75c..460b41d 100644 --- a/ACadSharp.Image/Extensions/ColorExtensions.cs +++ b/ACadSharp.Image/Extensions/ColorExtensions.cs @@ -1,5 +1,6 @@ using CadColor = ACadSharp.Color; using ImageColor = SixLabors.ImageSharp.Color; +using Rgba32 = SixLabors.ImageSharp.PixelFormats.Rgba32; namespace ACadSharp.Image.Extensions; @@ -27,6 +28,6 @@ public static ImageColor ToImageColor(this CadColor color, ImageColor foreground return foreground; } - return ImageColor.FromRgb(color.R, color.G, color.B); + return ImageColor.FromPixel(new Rgba32(color.R, color.G, color.B)); } } diff --git a/ACadSharp.Image/ImageExporter.cs b/ACadSharp.Image/ImageExporter.cs index b514bf6..b1b0006 100644 --- a/ACadSharp.Image/ImageExporter.cs +++ b/ACadSharp.Image/ImageExporter.cs @@ -162,10 +162,11 @@ public void Add(BlockRecord block) /// Output format the pages will be saved as. Defaults to PNG. /// Rendered pages; dispose each when finished. /// - /// Rendering temporarily mutates block MLINEs and LEADERs while working around ACadSharp 3.7.1's destructive - /// MLine.Clone() and Leader.Clone() (both share their vertex list with their source instead of - /// copying it) and restores them before returning; a must not be rendered concurrently - /// by two exporters, and Insert.Explode() itself is not safe for concurrent use either. + /// Rendering temporarily mutates block MLINEs and LEADERs while working around ACadSharp 3.8.0's destructive + /// MLine.Clone() (which empties the segment lists its vertices share with the source) and + /// Leader.Clone() (which shares its vertex list with the source instead of copying it) and restores them + /// before returning; a must not be rendered concurrently by two exporters, and + /// Insert.Explode() itself is not safe for concurrent use either. /// public IReadOnlyList Render(ImageExportFormat format = ImageExportFormat.Png) { diff --git a/ACadSharp.Image/Rendering/CsMathExtensions.cs b/ACadSharp.Image/Rendering/CsMathExtensions.cs new file mode 100644 index 0000000..65c3671 --- /dev/null +++ b/ACadSharp.Image/Rendering/CsMathExtensions.cs @@ -0,0 +1,19 @@ +using CSMath; + +namespace ACadSharp.Image.Rendering; + +/// +/// Vector helpers that CSMath 1.x exposed as instance methods and CSMath 2.x removed. +/// +internal static class CsMathExtensions +{ + /// Euclidean length of a 2D vector. + public static double GetLength(this XY vector) => Math.Sqrt((vector.X * vector.X) + (vector.Y * vector.Y)); + + /// Euclidean length of a 3D vector. + public static double GetLength(this XYZ vector) => + Math.Sqrt((vector.X * vector.X) + (vector.Y * vector.Y) + (vector.Z * vector.Z)); + + /// Whether both components of a 2D vector are exactly zero. + public static bool IsZero(this XY vector) => vector.X == 0d && vector.Y == 0d; +} diff --git a/ACadSharp.Image/Rendering/EntityRenderDispatcher.cs b/ACadSharp.Image/Rendering/EntityRenderDispatcher.cs index f697b1f..91061a1 100644 --- a/ACadSharp.Image/Rendering/EntityRenderDispatcher.cs +++ b/ACadSharp.Image/Rendering/EntityRenderDispatcher.cs @@ -43,7 +43,7 @@ internal sealed class EntityRenderDispatcher /// /// Keyed on identity, so this only pays off for repeated top-level inserts of the /// same block within one page: a nested reached while exploding an outer one holds a - /// deep-cloned block record (per in ACadSharp 3.7.1), a different key every time, so + /// deep-cloned block record (per in ACadSharp 3.8.0), a different key every time, so /// it misses the cache on every call regardless of how many times the same source block appears nested. A /// would still write an entry for every one of those one-shot clones as /// walks them, pinning the whole cloned block graph of a page in memory until @@ -52,6 +52,24 @@ internal sealed class EntityRenderDispatcher /// private readonly ConditionalWeakTable> _blocksNeedingHeal = new(); + /// + /// Snapshot of an MLINE's vertex list and of each vertex's segment list. ACadSharp's clone gets its own vertex + /// objects but shares each vertex's segment-list object with the source, and cloning empties those lists in + /// place, so both levels have to be captured and restored. + /// + private sealed class MLineSnapshot + { + public MLineSnapshot(List vertices, List> segments) + { + this.Vertices = vertices; + this.Segments = segments; + } + + public List Vertices { get; } + + public List> Segments { get; } + } + public EntityRenderDispatcher(ImageConfiguration configuration) { this._configuration = configuration; @@ -99,12 +117,11 @@ public void Draw(ImageRenderContext context, Entity entity) // source is the original block entity a clone came from, whose geometry is used instead of the clone's, and // placement is the transform of the insert that placed it. UsesOriginalGeometry's doc is the canonical list of // the types drawn from their original, and it is not repeated here. - // Both are null outside a block reference, but they do not always travel together inside - // one: an MLINE clone is always drawn with placement set and source null (UsesOriginalGeometry never recognises - // an MLine original, since the heal already restores the clone's own vertices to local coordinates), and so is a - // LEADER clone whose ordinal pairing with the block's original entities failed. A HATCH or WIPEOUT clone has no - // such fallback: when its pairing fails it is drawn with neither source nor placement, from its own - // un-normalised clone geometry (see the count-mismatch Warning in DrawBlockContents). + // Both are null outside a block reference, but they do not always travel together inside one: a LEADER clone + // whose ordinal pairing with the block's original entities failed is drawn with placement set and source null, + // and an MLINE clone in the same situation is drawn from its own (already transformed) points with both null. + // A HATCH or WIPEOUT clone has no such fallback: when its pairing fails it is drawn with neither source nor + // placement, from its own un-normalised clone geometry (see the count-mismatch Warning in DrawBlockContents). private void Draw(ImageRenderContext context, Entity entity, Layer? parentLayer, ulong? parentHandle, string? blockName, ResolvedStyle? parent, Entity? source = null, Transform? placement = null) { // Visibility comes first: a hidden entity must not warn about geometry nobody is going to draw. @@ -138,19 +155,19 @@ private void Draw(ImageRenderContext context, Entity entity, Layer? parentLayer, DrawArc(context, style, arc); break; case Arc arc: - DrawPolyline(context, style, arc.PolygonalVertexes(this._configuration.ArcPrecision).Select(v => v.Convert()), false); + DrawPolyline(context, style, arc.PolygonalVertexes(this._configuration.ArcPrecision).Select(v => (XY)v), false); break; case Circle circle when context.Surface.SupportsCurves && IsWorldPlane(circle.Normal): context.Surface.DrawEllipse(style, context.ToSurfacePoint(circle.Center), context.ToSurfaceLength(circle.Radius), context.ToSurfaceLength(circle.Radius), 0d); break; case Circle circle: - DrawPolyline(context, style, circle.PolygonalVertexes(this._configuration.ArcPrecision).Select(v => v.Convert()), true); + DrawPolyline(context, style, circle.PolygonalVertexes(this._configuration.ArcPrecision).Select(v => (XY)v), true); break; case Ellipse ellipse when context.Surface.SupportsCurves && IsWorldPlane(ellipse.Normal): DrawEllipse(context, style, ellipse); break; case Ellipse ellipse: - DrawPolyline(context, style, ellipse.PolygonalVertexes(this._configuration.ArcPrecision).Select(v => v.Convert()), true); + DrawPolyline(context, style, ellipse.PolygonalVertexes(this._configuration.ArcPrecision).Select(v => (XY)v), true); break; case Line line: context.Surface.DrawLine(style, context.ToSurfacePoint(line.StartPoint), context.ToSurfacePoint(line.EndPoint)); @@ -198,7 +215,7 @@ private void Draw(ImageRenderContext context, Entity entity, Layer? parentLayer, this.DrawBlockContents(context, insert, layer, resolved); break; case MLine mline: - this.DrawMLine(context, style, resolved, mline, placement); + this.DrawMLine(context, style, resolved, source as MLine ?? mline, placement); break; case Wipeout wipeout: this.DrawWipeout(context, style, source as Wipeout ?? wipeout, placement); @@ -266,10 +283,10 @@ private void DrawPoint(ImageRenderContext context, ImageStyle style, ACadSharp.E /// /// UpdateBlock() is the second place in the renderer, after , that makes /// ACadSharp construct an Insert of a block the caller owns: for a linear or aligned dimension it builds - /// one of each of the style's arrow blocks. ACadSharp 3.7.1's Insert(BlockRecord) constructor clones a - /// document-owned block's entities, so that call empties the vertex list of any MLINE inside one of them — - /// measured at two vertices to none with no renderer involved. This is the top-level dimension path, where - /// nothing else takes a snapshot: a dimension reached through a block reference is covered by + /// one of each of the style's arrow blocks. ACadSharp 3.8.0's Insert(BlockRecord) constructor clones a + /// document-owned block's entities, so that call empties the segment lists of any MLINE inside one of them — + /// measured at two segments per vertex to none with no renderer involved. This is the top-level dimension + /// path, where nothing else takes a snapshot: a dimension reached through a block reference is covered by /// 's own snapshot and its finally heal, but the entity-type switch in /// Draw routes a top-level dimension straight here. The heal is in a finally for the same reason /// it is there, so a throw while generating the picture cannot leave the caller's document broken. Page framing @@ -288,7 +305,7 @@ private void DrawDimension(ImageRenderContext context, Dimension dimension, Laye BlockRecord? block = dimension.Block; if (block == null) { - Dictionary> mlineVertices = new(); + Dictionary mlineVertices = new(); Dictionary> leaderVertices = new(); HashSet collected = new(); foreach (BlockRecord referenced in ReferencedBlocks(dimension)) @@ -437,7 +454,7 @@ private IEnumerable PolylinePoints(IPolyline polyline) IEnumerable points = polyline.GetPoints(this._configuration.ArcPrecision); if (IsWorldPlane(polyline.Normal)) { - return points.Select(v => v.Convert()); + return points.Select(v => (XY)v); } OcsTransform toWorld = OcsTransform.For(polyline.Normal); @@ -511,7 +528,7 @@ private static void DrawArc(ImageRenderContext context, ImageStyle style, Arc ar /// Emits an ellipse or elliptical arc natively. /// /// - /// Ellipse.MajorAxis and Ellipse.MinorAxis are full axis lengths in ACadSharp 3.7.1 + /// Ellipse.MajorAxis and Ellipse.MinorAxis are full axis lengths in ACadSharp 3.8.0 /// (MajorAxis is twice the length of MajorAxisEndPoint), so they are halved into surface radii. /// private static void DrawEllipse(ImageRenderContext context, ImageStyle style, Ellipse ellipse) @@ -605,8 +622,8 @@ private void DrawLeader(ImageRenderContext context, ImageStyle style, ResolvedSt } double size = leader.Style.ArrowSize * (leader.Style.ScaleFactor > 0d ? leader.Style.ScaleFactor : 1d); - XY tip = leader.Vertices[0].Convert(); - XY direction = tip - leader.Vertices[1].Convert(); + XY tip = (XY)leader.Vertices[0]; + XY direction = tip - (XY)leader.Vertices[1]; double length = direction.GetLength(); // Every comparison with NaN is false, so the size has to be tested for finiteness explicitly. The degenerate @@ -655,7 +672,7 @@ private void DrawLeader(ImageRenderContext context, ImageStyle style, ResolvedSt /// by walking its entities with a transform: most entity types are drawn from their own stored points and ignore /// a placement, so only Insert.Explode() transforms an arbitrary block's contents correctly. /// - /// Two ACadSharp 3.7.1 behaviours shape the construction. An Insert cannot represent shear, so a composed + /// Two ACadSharp 3.8.0 behaviours shape the construction. An Insert cannot represent shear, so a composed /// transform that is not a planar similarity has no equivalent insert and the caller falls back. And /// Insert.GetTransform() computes R * S * p + (InsertPoint - BasePoint), where AutoCAD specifies /// InsertPoint + R * S * (p - BasePoint); the two agree only when the rotation and scale are identity, so @@ -710,11 +727,11 @@ XYZ Arrow(XYZ p) return false; } - // ACadSharp 3.7.1's Insert(BlockRecord) constructor clones a document-owned block's entities, so merely - // building the transient insert empties the vertex list of any MLINE in the arrow block (and of any MLINE + // ACadSharp 3.8.0's Insert(BlockRecord) constructor clones a document-owned block's entities, so merely + // building the transient insert empties the segment lists of any MLINE in the arrow block (and of any MLINE // in a further arrowhead block below it). The snapshot therefore has to be taken before the constructor // runs, not inside DrawBlockContents, which only gets to look once the insert already exists. - Dictionary> mlineVertices = new(); + Dictionary mlineVertices = new(); Dictionary> leaderVertices = new(); if (this.BlockSubtreeNeedsHeal(arrow, new HashSet())) { @@ -1101,7 +1118,7 @@ private void DrawWipeout(ImageRenderContext context, ImageStyle style, Wipeout w /// Zero, one or two rings of world points. /// /// The insertion point is mapped as a point and the U and V vectors as directions, from the original entity: - /// ACadSharp 3.7.1's Wipeout.ApplyTransform maps U and V as points, so a translated clone's vectors carry + /// ACadSharp 3.8.0's Wipeout.ApplyTransform maps U and V as points, so a translated clone's vectors carry /// the translation and the mask is stretched across the drawing. /// internal static IReadOnlyList> WipeoutWorldRings(Wipeout wipeout, Transform? placement) @@ -1162,20 +1179,19 @@ internal static XYZ WipeoutPixelToWorld(CadWipeoutBase image, XY pixel, Transfor /// placed through the insert's transform, instead of the clone's own points. This doc is the canonical list of /// the types that are drawn that way; the block-content path and Draw point here rather than repeat it. /// They are: a TEXT or MTEXT (their alignment point and, for MTEXT, X axis are never transformed by - /// Explode()), an ATTRIB or ATTDEF (an - /// AttributeBase is a TextEntity, so the TEXT arm covers it; in practice this is the constant - /// ATTDEF draws — a non-constant one is a template and is skipped there — and a - /// multi-line one is then drawn from the original's embedded MTEXT through the insert transform rather than - /// block-local), a LEADER (once healed, the clone - /// shares the same local vertex list as the original, so either would draw identically; the original is used - /// for consistency with TEXT, MTEXT and SOLID, not because it carries anything the clone lacks), a SOLID whose - /// normal is not the world Z axis (its OCS corners must be brought into world space before the insert - /// transform, not after), a HATCH (its boundary and pattern are OCS data too, and Hatch.ApplyTransform - /// maps the raw OCS boundary as if it were world data and never folds in Elevation, so the clone can - /// never be trusted; only the original, drawn through its own OCS frame and then the placement, is correct), or - /// a WIPEOUT (Wipeout.ApplyTransform maps its U and V vectors as points, so a translated clone's vectors - /// carry the translation; only the original, mapped through , keeps them - /// as directions). + /// Explode()); an ATTRIB or ATTDEF (an AttributeBase is a TextEntity, so the TEXT arm + /// covers it; in practice this is the constant ATTDEF draws — a non-constant one + /// is a template and is skipped there — and a multi-line one is then drawn from the original's embedded MTEXT + /// through the insert transform rather than block-local); an MLINE (ACadSharp 3.8's Explode() transforms + /// the clone's vertices but empties the shared segment lists that carry MLEDIT cuts, so only the original + /// retains the complete local geometry); a LEADER (the original is used for consistency with TEXT, MTEXT and + /// SOLID; the heal also restores its local vertex list); a SOLID whose normal is not the world Z axis (its OCS + /// corners must be brought into world space before the insert transform, not after); a HATCH (its boundary and + /// pattern are OCS data too, and Hatch.ApplyTransform maps the raw OCS boundary as if it were world data + /// and never folds in Elevation, so the clone can never be trusted; only the original, drawn through its + /// own OCS frame and then the placement, is correct); or a WIPEOUT (Wipeout.ApplyTransform maps its U and + /// V vectors as points, so a translated clone's vectors carry the translation; only the original, mapped through + /// , keeps them as directions). /// The pairing requires to be the block entity at the clone's own index and of the /// same runtime type, since a mismatched index (an ATTDEF the clone stream skipped, for example) would pair the /// wrong entity. @@ -1190,7 +1206,7 @@ private static bool UsesOriginalGeometry(Entity? original, Entity clone) return false; } - if (original is TextEntity or MText or Leader or Hatch or Wipeout) + if (original is TextEntity or MText or MLine or Leader or Hatch or Wipeout) { return true; } @@ -1199,10 +1215,10 @@ private static bool UsesOriginalGeometry(Entity? original, Entity clone) } /// - /// Draws the contents of a block reference by exploding it, healing the vertex lists ACadSharp 3.7.1's clones - /// share with their sources, and drawing every clone — some of them from the original block entity through the - /// insert's transform rather than from the clone's own points. 's doc is the - /// canonical list of which types those are and why; it is not repeated here. + /// Draws the contents of a block reference by exploding it, healing the vertex and segment lists ACadSharp's + /// clones share with their sources, and drawing every clone — some of them from the original block entity + /// through the insert's transform rather than from the clone's own points. 's + /// doc is the canonical list of which types those are and why; it is not repeated here. /// /// The context that maps drawing units onto the surface. /// The block reference to draw the contents of. @@ -1229,32 +1245,33 @@ private void DrawBlockContents(ImageRenderContext context, Insert insert, Layer? // The exploded clones carry the block entities' own attributes but no owner or document; ByBlock and // layer-0 inheritance, and the header's LTSCALE, come from the insert's resolved style and effective layer. - // ACadSharp 3.7.1's Explode() yields one clone per block entity, in order. Text geometry comes from the + // ACadSharp 3.8.0's Explode() yields one clone per block entity, in order. Text geometry comes from the // original entity placed through the insert's transform, because the clones' alignment points and MTEXT // X axes are never transformed and mirrored inserts hand back world points with a flipped normal. Transform transform = insert.GetTransform(); IReadOnlyList originals = insert.Block.Entities.ToList(); - // ACadSharp 3.7.1's MLine.Clone() empties the vertex list an MLine shares with its source (by - // MemberwiseClone), and Leader.Clone() shares its vertex list the same way but Explode()'s ApplyTransform - // overwrites that shared list's contents (world coordinates) in place instead of emptying it; either way the - // source document is left corrupted once Explode() runs, because the clone and its source are the very same - // List object. Insert.Clone() deep-clones its entire block subtree, so exploding this insert destroys every - // MLINE reachable through it, including ones nested inside a block placed inside this one, several levels - // below anything Explode() itself returns, because cloning the nested Insert empties that MLINE's list the - // moment it is cloned along the way; a nested LEADER's list, by contrast, is overwritten only when the - // insert that directly contains it is the one exploded, so a deeply nested LEADER survives an ancestor's - // Explode() unharmed and its snapshot below is a defensive backstop, not a load-bearing fix. + // ACadSharp 3.8.0's MLine.Clone() gives the clone its own vertex objects but shares each vertex's segment + // list with the source and empties those lists in place; Leader.Clone() shares its vertex list with the + // source, but Explode()'s ApplyTransform overwrites that shared list's contents (world coordinates) in place + // instead of emptying it. Either way the source document is left corrupted once Explode() runs, because + // the clone and its source share the affected list object. Insert.Clone() deep-clones its entire block + // subtree, so exploding this insert destroys every MLINE reachable through it, including ones nested inside + // a block placed inside this one, several levels below anything Explode() itself returns, because cloning + // the nested Insert empties that MLINE's list the moment it is cloned along the way; a nested LEADER's list, + // by contrast, is overwritten only when the insert that directly contains it is the one exploded, so a + // deeply nested LEADER survives an ancestor's Explode() unharmed and its snapshot below is a defensive + // backstop, not a load-bearing fix. // CollectSharedVertexLists walks the whole subtree, following every edge ReferencedBlocks reports — nested // Insert.Block references, a DIMENSION's own picture block, and the four arrowhead blocks of a LEADER's or a // DIMENSION's style, none of them cloned at this point — to snapshot every MLINE and LEADER before - // Explode() runs, and Heal repairs them - // immediately after and again in `finally`. The repair is always in place (Clear + AddRange into the - // *existing* list, never a reassignment): because a clone shares the very same list object as its source at - // every depth, one in-place heal fixes the original and every clone below it at once; reassigning would - // leave an outer level's shared list broken. The insert's transform still has to be applied manually to a - // healed MLINE's or LEADER's points, because Explode()'s own ApplyTransform ran against the pre-heal list. - Dictionary> mlineVertices = new(); + // Explode() runs, and Heal repairs them immediately after and again in `finally`. The repair is always in + // place (Clear + AddRange into the *existing* list, never a reassignment): because the lists a clone shares + // with its source are shared at every depth, one in-place heal fixes the original and every clone below it at + // once; reassigning would leave an outer level's shared list broken. The insert's transform still has to be + // applied manually to the local points used for a healed MLINE or LEADER, because Explode()'s own + // ApplyTransform only reached the clone. + Dictionary mlineVertices = new(); Dictionary> leaderVertices = new(); // Walking the whole subtree just to find out there is nothing to snapshot is wasted work on every insert of // an MLINE/LEADER-free block; BlockSubtreeNeedsHeal answers that cheaply (memoised per block), so the actual @@ -1300,7 +1317,14 @@ private void DrawBlockContents(ImageRenderContext context, Insert insert, Layer? source = original; entityPlacement = transform; } - else if (entity is MLine or Leader) + else if (entity is MLine) + { + // ACadSharp 3.8's Explode() transforms MLINE clones to world coordinates itself. A clone whose + // ordinal pairing with the block's originals failed has no local geometry left to place, so + // applying the insert transform again would move it twice. + entityPlacement = null; + } + else if (entity is Leader) { entityPlacement = transform; } @@ -1324,18 +1348,28 @@ private void DrawBlockContents(ImageRenderContext context, Insert insert, Layer? } /// - /// Restores every snapshotted MLINE and LEADER vertex list in place (Clear + AddRange, never a reassignment): - /// a clone shares the very same list object as its source at every depth, so one in-place repair fixes the - /// original and every clone below it at once, where reassigning would leave an outer level's list broken. + /// Restores every snapshotted MLINE vertex and segment list, and every LEADER vertex list, in place + /// (Clear + AddRange, never a reassignment): the list objects a clone shares with its source are shared at every + /// depth, so one in-place repair fixes the original and every clone below it at once, where reassigning would + /// leave an outer level's list broken. /// - /// The MLINE vertex lists captured before cloning. + /// The MLINE vertex and segment lists captured before cloning. /// The LEADER vertex lists captured before cloning. - private static void Heal(Dictionary> mlineSnapshot, Dictionary> leaderSnapshot) + private static void Heal(Dictionary mlineSnapshot, Dictionary> leaderSnapshot) { - foreach (KeyValuePair> pair in mlineSnapshot) + foreach (KeyValuePair pair in mlineSnapshot) { pair.Key.Vertices.Clear(); - pair.Key.Vertices.AddRange(pair.Value); + pair.Key.Vertices.AddRange(pair.Value.Vertices); + // The clone shares each vertex's segment list with its source, and cloning empties those lists in place. + // Restoring the source's lists therefore repairs the clone too. + int count = Math.Min(pair.Key.Vertices.Count, pair.Value.Segments.Count); + for (int i = 0; i < count; i++) + { + List segments = pair.Key.Vertices[i].Segments; + segments.Clear(); + segments.AddRange(pair.Value.Segments[i]); + } } foreach (KeyValuePair> pair in leaderSnapshot) @@ -1352,7 +1386,7 @@ private static void Heal(Dictionary> mlineSnapshot, Di /// a block reference's own ; /// a DIMENSION's , the anonymous block holding the picture ACadSharp /// generates for it — its lines, arrowheads and measurement text. Dimension.Clone() deep-clones it - /// (probed on 3.7.1: an MLINE inside a picture block goes from two vertices to none across a single + /// (probed on 3.8.0: an MLINE inside a picture block goes from two segments per vertex to none across a single /// Clone(), and the clone's block is a different instance), so it corrupts a source document exactly as /// the arrowhead edges do. It differs from them in being on the ordinary render path — DrawDimension /// draws through it — rather than reachable only from an exotic file, and in being generated geometry rather @@ -1360,7 +1394,7 @@ private static void Heal(Dictionary> mlineSnapshot, Di /// and there is nothing to clone or to walk; /// every non-null block-valued property of a LEADER's or a DIMENSION's dimension style — /// ArrowBlock (DIMBLK), DimArrow1 (DIMBLK1), DimArrow2 (DIMBLK2) and LeaderArrow - /// (DIMLDRBLK). ACadSharp 3.7.1's DimensionStyle.Clone() deep-clones all four, and Leader and + /// (DIMLDRBLK). ACadSharp 3.8.0's DimensionStyle.Clone() deep-clones all four, and Leader and /// Dimension both clone their style, so an MLINE inside any of them is emptied by a clone that never /// names it — whether or not the renderer ever draws that particular arrowhead, since only LeaderArrow /// is drawn. @@ -1431,25 +1465,27 @@ private static IEnumerable ReferencedBlocks(Entity entity) } /// - /// Snapshots every MLINE's and LEADER's vertex list reachable from , following every - /// edge reports: nested references, and all four - /// arrowhead blocks of every LEADER's and DIMENSION's dimension style on the way. - /// deep-clones its entire block subtree, so an MLINE nested several blocks deep is - /// corrupted by an ancestor insert's own explode even though it is never that ancestor's direct child, because - /// its list is emptied the moment it is cloned; a nested LEADER's list, by contrast, is only overwritten when - /// the insert that directly contains it is the one exploded, so snapshotting it here is a defensive backstop - /// rather than the fix MLINE needs. Cloning a LEADER or a DIMENSION also clones its dimension style, and that - /// clones all four of the style's arrowhead blocks, and cloning a DIMENSION clones its picture block too, which - /// is how an MLINE inside a custom arrowhead — or inside a dimension's own generated geometry — is reached by a - /// clone that never names it. This has to run, and capture the whole subtree, before the clone that - /// corrupts those lists — the explode itself, or, for a document-owned block, the Insert(BlockRecord) - /// constructor. + /// Snapshots every MLINE's vertex and segment lists and every LEADER's vertex list reachable from + /// , following every edge reports: nested + /// references, and all four arrowhead blocks of every LEADER's and DIMENSION's + /// dimension style on the way. deep-clones its entire block subtree, so an MLINE + /// nested several blocks deep is corrupted by an ancestor insert's own explode even though it is never that + /// ancestor's direct child, because its vertex and segment lists are emptied the moment it is cloned; a nested + /// LEADER's list, by contrast, is only overwritten when the insert that directly contains it is the one + /// exploded, so snapshotting it here is a defensive backstop rather than the fix MLINE needs. Cloning a LEADER + /// or a DIMENSION also clones its dimension style, which clones all four of the style's arrowhead blocks, and + /// cloning a DIMENSION clones its picture block too, which is how an MLINE inside a custom arrowhead — or inside + /// a dimension's own generated geometry — is reached by a clone that never names it. This has to run, and capture + /// the whole subtree, before the clone that corrupts those lists — the explode itself, or, for a document-owned + /// block, the Insert(BlockRecord) constructor. /// - /// The block whose entities, nested blocks, dimension pictures and dimension-style arrowhead blocks are searched. - /// Receives one entry per MLINE found, keyed by the MLINE itself. + /// The block whose entities, nested blocks, dimension pictures and dimension-style arrowhead + /// blocks are searched. + /// Receives one entry per MLINE found, keyed by the MLINE itself and holding its + /// vertex and segment lists. /// Receives one entry per LEADER found, keyed by the LEADER itself. /// Blocks already walked, so a circular or diamond hierarchy is walked once. - private static void CollectSharedVertexLists(BlockRecord? block, Dictionary> mlineSnapshot, Dictionary> leaderSnapshot, HashSet visited) + private static void CollectSharedVertexLists(BlockRecord? block, Dictionary mlineSnapshot, Dictionary> leaderSnapshot, HashSet visited) { if (block == null || !visited.Add(block)) { @@ -1461,7 +1497,9 @@ private static void CollectSharedVertexLists(BlockRecord? block, Dictionary(mline.Vertices)); + mlineSnapshot.Add(mline, new MLineSnapshot( + new List(mline.Vertices), + mline.Vertices.Select(v => new List(v.Segments)).ToList())); break; case Leader leader when !leaderSnapshot.ContainsKey(leader): leaderSnapshot.Add(leader, new List(leader.Vertices)); @@ -1683,7 +1721,7 @@ private bool IsAttributeVisible(AttributeBase attribute, Insert insert, Resolved private void DrawHatch(ImageRenderContext context, ImageStyle style, Hatch hatch, Transform? placement) { // Boundary paths and exploded pattern lines are OCS data; the OCS frame and the entity's own elevation are - // applied here and the insert transform after them, because ACadSharp 3.7.1's Hatch.ApplyTransform maps the + // applied here and the insert transform after them, because ACadSharp 3.8.0's Hatch.ApplyTransform maps the // raw OCS boundary as if it were world data and never folds the elevation in, so a clone from a block cannot // be trusted for a hatch on a tilted plane. OcsTransform? toWorld = IsWorldPlane(hatch.Normal) ? null : OcsTransform.For(hatch.Normal); @@ -1753,7 +1791,7 @@ private void DrawHatch(ImageRenderContext context, ImageStyle style, Hatch hatch /// /// Number of pattern scan lines Hatch.ExplodePattern() would sweep across the hatch's bounding box, using its - /// own arithmetic (ACadSharp 3.7.1). Each scan line is clipped against every boundary edge and may emit several + /// own arithmetic (ACadSharp 3.8.0). Each scan line is clipped against every boundary edge and may emit several /// dashes, so this is the work the expansion costs, not the number of lines it draws. /// /// The pattern hatch. diff --git a/ACadSharp.Image/Rendering/ImagePageRenderer.cs b/ACadSharp.Image/Rendering/ImagePageRenderer.cs index 8a993f6..663dbf5 100644 --- a/ACadSharp.Image/Rendering/ImagePageRenderer.cs +++ b/ACadSharp.Image/Rendering/ImagePageRenderer.cs @@ -61,7 +61,7 @@ public RenderedPage Render(ImagePage page, ImageExportFormat format) return this.RenderSvg(page); } - Image image = new(this._configuration.Width, this._configuration.Height, this._configuration.BackgroundColor); + Image image = RasterCanvasCompat.CreateImage(this._configuration.Width, this._configuration.Height, this._configuration.BackgroundColor); try { using RasterDrawingSurface surface = new(image, this._configuration, ownsCanvas: false); @@ -198,7 +198,7 @@ private RenderedSvgPage RenderSvg(ImagePage page) /// /// The branch is on the raw DXF value of $PSLTSCALE (0 = model-space lengths, 1 = paper-space lengths, and the /// AutoCAD default) rather than on the name of the member, because the ACadSharp - /// 3.7.1 names are swapped with respect to those semantics: SpaceLineTypeScaling.Viewport is 0 and + /// 3.8.0 names are swapped with respect to those semantics: SpaceLineTypeScaling.Viewport is 0 and /// SpaceLineTypeScaling.Normal is 1. /// internal static double ResolveViewportLineTypeScale(CadHeader? header, double pageLineTypeScale, double viewportScaleFactor) diff --git a/ACadSharp.Image/Rendering/ImageRenderContext.cs b/ACadSharp.Image/Rendering/ImageRenderContext.cs index 7f313e4..a6a14ee 100644 --- a/ACadSharp.Image/Rendering/ImageRenderContext.cs +++ b/ACadSharp.Image/Rendering/ImageRenderContext.cs @@ -333,7 +333,7 @@ public SurfacePoint ToSurfacePoint(XY point) /// The point in surface coordinates. public SurfacePoint ToSurfacePoint(XYZ point) { - return this.ToSurfacePoint(point.Convert()); + return this.ToSurfacePoint((XY)point); } /// diff --git a/ACadSharp.Image/Rendering/ImageStyleResolver.cs b/ACadSharp.Image/Rendering/ImageStyleResolver.cs index 2570700..a9bf934 100644 --- a/ACadSharp.Image/Rendering/ImageStyleResolver.cs +++ b/ACadSharp.Image/Rendering/ImageStyleResolver.cs @@ -109,7 +109,7 @@ public ImageStyle ToImageStyle(ResolvedStyle resolved, ImageRenderContext contex } /// - /// Maps CAD transparency to opacity. ByLayer is opaque (ACadSharp 3.7.1 layers carry no transparency); + /// Maps CAD transparency to opacity. ByLayer is opaque (ACadSharp 3.8.0 layers carry no transparency); /// ByBlock inherits the parent's opacity; explicit values 0..90 mean that percentage transparent. /// internal static float ResolveOpacity(Entity entity, float parentOpacity) diff --git a/ACadSharp.Image/Rendering/InsertPlacement.cs b/ACadSharp.Image/Rendering/InsertPlacement.cs index fa9d882..8072575 100644 --- a/ACadSharp.Image/Rendering/InsertPlacement.cs +++ b/ACadSharp.Image/Rendering/InsertPlacement.cs @@ -8,7 +8,7 @@ namespace ACadSharp.Image.Rendering; /// /// /// Points and vectors map differently: a translation moves a point but must not change a direction, so a vector is -/// mapped by transforming its head and tail and subtracting. ACadSharp 3.7.1 gets this wrong in places of its own +/// mapped by transforming its head and tail and subtracting. ACadSharp 3.8.0 gets this wrong in places of its own /// (Wipeout.ApplyTransform transforms its U and V vectors as points), which is why the renderer maps from the /// original entity through these helpers instead of trusting a transformed clone. /// diff --git a/ACadSharp.Image/Rendering/OcsTransform.cs b/ACadSharp.Image/Rendering/OcsTransform.cs index c7775d9..2de6365 100644 --- a/ACadSharp.Image/Rendering/OcsTransform.cs +++ b/ACadSharp.Image/Rendering/OcsTransform.cs @@ -8,7 +8,7 @@ namespace ACadSharp.Image.Rendering; /// /// /// Polylines, hatches and solids store their vertices in the plane defined by their extrusion Normal (the OCS) and -/// ACadSharp 3.7.1 returns them raw: neither IPolyline.GetPoints nor Hatch.BoundaryPath.GetPoints nor +/// ACadSharp 3.8.0 returns them raw: neither IPolyline.GetPoints nor Hatch.BoundaryPath.GetPoints nor /// Hatch.ExplodePattern applies the normal. The renderer projects world XY onto the page, so those points must /// be brought into world space first. /// diff --git a/ACadSharp.Image/Rendering/RasterCanvasCompat.cs b/ACadSharp.Image/Rendering/RasterCanvasCompat.cs new file mode 100644 index 0000000..08e9fcf --- /dev/null +++ b/ACadSharp.Image/Rendering/RasterCanvasCompat.cs @@ -0,0 +1,144 @@ +using System.Numerics; +using SixLabors.Fonts; +using SixLabors.ImageSharp; +using SixLabors.ImageSharp.Drawing; +using SixLabors.ImageSharp.Drawing.Processing; +using SixLabors.ImageSharp.Processing; +#if !NET6_0 +using SixLabors.ImageSharp.Drawing.Text; +#endif +using ImageColor = SixLabors.ImageSharp.Color; +using ImagePoint = SixLabors.ImageSharp.Point; +using Rgba32 = SixLabors.ImageSharp.PixelFormats.Rgba32; + +namespace ACadSharp.Image.Rendering; + +/// +/// Bridges the ImageSharp.Drawing 2.x API used on net6.0 and the 3.x API used on net8.0+. +/// +/// +/// Six Labors 4.x (ImageSharp) and 3.x (Drawing, Fonts) require .NET 8 or later, so net6.0 stays on +/// ImageSharp 3.2.0/Drawing 2.2.0. The drawing surface calls through this class to keep the rendering +/// code single-sourced. +/// +internal static class RasterCanvasCompat +{ + public static Image CreateImage(int width, int height, ImageColor background) + { + return new Image(width, height, background.ToPixel()); + } + + public static void DrawLine(Image canvas, Pen pen, PointF[] points) + { +#if NET6_0 + canvas.Mutate(x => x.DrawLine(pen, points)); +#else + canvas.Mutate(x => x.Paint(c => c.DrawLine(pen, points))); +#endif + } + + public static void DrawPath(Image canvas, Pen pen, IPath path) + { +#if NET6_0 + canvas.Mutate(x => x.Draw(pen, path)); +#else + canvas.Mutate(x => x.Paint(c => c.Draw(pen, path))); +#endif + } + + public static void FillPolygon(Image canvas, ImageColor color, PointF[] points) + { +#if NET6_0 + canvas.Mutate(x => x.FillPolygon(color, points)); +#else + canvas.Mutate(x => x.Paint(c => c.Fill(new SolidBrush(color), new Polygon(new LinearLineSegment(points))))); +#endif + } + + public static DrawingOptions CreateDrawingOptions(Matrix3x2? transform = null, bool evenOdd = false) + { + DrawingOptions options = new(); +#if NET6_0 + if (evenOdd) + { + options.ShapeOptions.IntersectionRule = IntersectionRule.EvenOdd; + } + + if (transform.HasValue) + { + options.Transform = transform.Value; + } +#else + if (evenOdd) + { + options.IntersectionRule = IntersectionRule.EvenOdd; + } + + if (transform.HasValue) + { + options.Transform = ToMatrix4x4(transform.Value); + } +#endif + return options; + } + + public static void FillPath(Image canvas, DrawingOptions options, ImageColor color, IPath path) + { +#if NET6_0 + canvas.Mutate(x => x.Fill(options, color, path)); +#else + canvas.Mutate(x => x.Paint(options, c => c.Fill(new SolidBrush(color), path))); +#endif + } + + public static void FillGlyphs(Image canvas, DrawingOptions options, ImageColor color, IPathCollection glyphs) + { +#if NET6_0 + canvas.Mutate(x => x.Fill(options, color, glyphs)); +#else + canvas.Mutate(x => x.Paint(options, c => c.Fill(new SolidBrush(color), glyphs))); +#endif + } + + public static void FillEllipse(Image canvas, ImageColor color, PointF center, float radius) + { +#if NET6_0 + canvas.Mutate(x => x.Fill(color, new EllipsePolygon(center.X, center.Y, radius))); +#else + canvas.Mutate(x => x.Paint(c => c.FillEllipse(new SolidBrush(color), center, new SizeF(radius * 2f, radius * 2f)))); +#endif + } + + public static IPathCollection GenerateTextPaths(string text, TextOptions options) + { +#if NET6_0 + return TextBuilder.GenerateGlyphs(text, options); +#else + return TextBuilder.GeneratePaths(text, options); +#endif + } + + public static void DrawImage(Image canvas, Image image, ImagePoint location) + { +#if NET6_0 + canvas.Mutate(x => x.DrawImage(image, location, 1f)); +#else + canvas.Mutate(x => x.Paint(c => c.DrawImage( + image, + new Rectangle(0, 0, image.Width, image.Height), + new RectangleF(location.X, location.Y, image.Width, image.Height), + KnownResamplers.NearestNeighbor))); +#endif + } + +#if !NET6_0 + private static Matrix4x4 ToMatrix4x4(Matrix3x2 matrix) + { + return new Matrix4x4( + matrix.M11, matrix.M12, 0f, 0f, + matrix.M21, matrix.M22, 0f, 0f, + 0f, 0f, 1f, 0f, + matrix.M31, matrix.M32, 0f, 1f); + } +#endif +} diff --git a/ACadSharp.Image/Rendering/RasterDrawingSurface.cs b/ACadSharp.Image/Rendering/RasterDrawingSurface.cs index dd670a8..c18e959 100644 --- a/ACadSharp.Image/Rendering/RasterDrawingSurface.cs +++ b/ACadSharp.Image/Rendering/RasterDrawingSurface.cs @@ -46,7 +46,7 @@ public void EndEntity() public void DrawLine(ImageStyle style, SurfacePoint start, SurfacePoint end) { Pen pen = CreatePen(style); - this.Canvas.Mutate(x => x.DrawLine(pen, ToPointF(start), ToPointF(end))); + RasterCanvasCompat.DrawLine(this.Canvas, pen, [ToPointF(start), ToPointF(end)]); } public void DrawPolyline(ImageStyle style, IReadOnlyList points, bool closed) @@ -68,7 +68,7 @@ public void DrawPolyline(ImageStyle style, IReadOnlyList points, b } Pen pen = CreatePen(style); - this.Canvas.Mutate(x => x.DrawLine(pen, pixels)); + RasterCanvasCompat.DrawLine(this.Canvas, pen, pixels); } public void DrawArc(ImageStyle style, SurfacePoint center, double radiusX, double radiusY, double rotation, double startAngle, double sweepAngle) @@ -101,7 +101,7 @@ public void DrawCubicBezier(ImageStyle style, IReadOnlyList contro IPath path = builder.Build(); Pen pen = CreatePen(style); - this.Canvas.Mutate(x => x.Draw(pen, path)); + RasterCanvasCompat.DrawPath(this.Canvas, pen, path); } public void DrawBulgePolyline(ImageStyle style, IReadOnlyList points, IReadOnlyList bulges, bool closed) @@ -144,7 +144,7 @@ public void FillPolygon(ImageStyle style, IReadOnlyList points) PointF[] pixels = finite.Select(ToPointF).ToArray(); ImageColor color = style.EffectiveColor; - this.Canvas.Mutate(x => x.FillPolygon(color, pixels)); + RasterCanvasCompat.FillPolygon(this.Canvas, color, pixels); } public void FillPath(ImageStyle style, IReadOnlyList> rings) @@ -161,11 +161,8 @@ public void FillPath(ImageStyle style, IReadOnlyList IPath shape = polygons.Length == 1 ? polygons[0] : new ComplexPolygon(polygons); ImageColor color = style.EffectiveColor; - DrawingOptions options = new() - { - ShapeOptions = { IntersectionRule = IntersectionRule.EvenOdd }, - }; - this.Canvas.Mutate(x => x.Fill(options, color, shape)); + DrawingOptions options = RasterCanvasCompat.CreateDrawingOptions(evenOdd: true); + RasterCanvasCompat.FillPath(this.Canvas, options, color, shape); } public void FillCircle(ImageStyle style, SurfacePoint center, double radius) @@ -178,7 +175,7 @@ public void FillCircle(ImageStyle style, SurfacePoint center, double radius) PointF pixel = ToPointF(center); ImageColor color = style.EffectiveColor; - this.Canvas.Mutate(x => x.Fill(color, new EllipsePolygon(pixel.X, pixel.Y, (float)radius))); + RasterCanvasCompat.FillEllipse(this.Canvas, color, pixel, (float)radius); } public void DrawText(ImageStyle style, SurfaceText text) @@ -224,7 +221,7 @@ public void DrawText(ImageStyle style, SurfaceText text) TextOptions options = new(font) { Dpi = 72f, - Origin = new PointF(origin.X, origin.Y + (float)leadingOffset), + Origin = new Vector2(origin.X, origin.Y + (float)leadingOffset), HorizontalAlignment = text.Anchor switch { SurfaceTextAnchor.Middle => HorizontalAlignment.Center, @@ -241,8 +238,8 @@ public void DrawText(ImageStyle style, SurfaceText text) LineSpacing = lineSpacing, }; - IPathCollection glyphs = TextBuilder.GenerateGlyphs(text.Text, options); - DrawingOptions drawingOptions = new(); + IPathCollection glyphs = RasterCanvasCompat.GenerateTextPaths(text.Text, options); + Matrix3x2? transform = null; bool stretched = Math.Abs(text.WidthScale - 1d) > 1e-9; bool rotated = Math.Abs(text.Rotation) > double.Epsilon; if (stretched || rotated) @@ -251,17 +248,18 @@ public void DrawText(ImageStyle style, SurfaceText text) // origin first widens the run along its own reading axis, and the rotation that follows carries the // widened run to its final orientation, so the stretch travels with the text instead of the canvas. Vector2 pivot = new(origin.X, origin.Y); - Matrix3x2 transform = stretched ? Matrix3x2.CreateScale((float)text.WidthScale, 1f, pivot) : Matrix3x2.Identity; + Matrix3x2 value = stretched ? Matrix3x2.CreateScale((float)text.WidthScale, 1f, pivot) : Matrix3x2.Identity; if (rotated) { - transform *= Matrix3x2.CreateRotation((float)-text.Rotation, pivot); + value *= Matrix3x2.CreateRotation((float)-text.Rotation, pivot); } - drawingOptions.Transform = transform; + transform = value; } + DrawingOptions drawingOptions = RasterCanvasCompat.CreateDrawingOptions(transform); ImageColor color = style.EffectiveColor; - this.Canvas.Mutate(x => x.Fill(drawingOptions, color, glyphs)); + RasterCanvasCompat.FillGlyphs(this.Canvas, drawingOptions, color, glyphs); } public ViewportSurface BeginViewport(SurfaceRect bounds) @@ -275,7 +273,7 @@ public ViewportSurface BeginViewport(SurfaceRect bounds) double fractionY = bounds.Y - top; int width = Math.Max(1, (int)Math.Ceiling(fractionX + bounds.Width)); int height = Math.Max(1, (int)Math.Ceiling(fractionY + bounds.Height)); - Image image = new(width, height, ImageColor.Transparent); + Image image = RasterCanvasCompat.CreateImage(width, height, ImageColor.Transparent); RasterDrawingSurface child = new(image, this._configuration, ownsCanvas: true); ViewportSurface viewport = new(child, fractionX, fractionY + bounds.Height); this._viewports[viewport] = (image, new SurfaceRect(left, top, width, height)); @@ -291,7 +289,7 @@ public void EndViewport(ViewportSurface viewport) // Bounds were floored to whole pixels in BeginViewport. ImagePoint destination = new((int)entry.Bounds.X, (int)entry.Bounds.Y); - this.Canvas.Mutate(x => x.DrawImage(entry.Image, destination, 1f)); + RasterCanvasCompat.DrawImage(this.Canvas, entry.Image, destination); viewport.Surface.Dispose(); } diff --git a/ACadSharp.Image/Rendering/ResolvedStyle.cs b/ACadSharp.Image/Rendering/ResolvedStyle.cs index f14b6e5..a5da684 100644 --- a/ACadSharp.Image/Rendering/ResolvedStyle.cs +++ b/ACadSharp.Image/Rendering/ResolvedStyle.cs @@ -11,7 +11,7 @@ namespace ACadSharp.Image.Rendering; /// /// The record doubles as the inheritance source for the entity's children: block contents and dimension geometry /// resolve their ByBlock attributes against the placing entity's resolved values, and inherit its document header, -/// since the clones Insert.Explode() produces in ACadSharp 3.7.1 belong to no document. +/// since the clones Insert.Explode() produces in ACadSharp 3.8.0 belong to no document. /// /// Resolved colour; never ByLayer or ByBlock. /// Resolved line weight; never ByLayer or ByBlock. diff --git a/ACadSharp.Image/Rendering/SplineRenderer.cs b/ACadSharp.Image/Rendering/SplineRenderer.cs index aa34a3d..866397a 100644 --- a/ACadSharp.Image/Rendering/SplineRenderer.cs +++ b/ACadSharp.Image/Rendering/SplineRenderer.cs @@ -53,14 +53,14 @@ public bool Draw(ImageRenderContext context, ImageStyle style, Spline spline) SurfacePoint[] points = new SurfacePoint[polygonalPoints.Count]; for (int i = 0; i < polygonalPoints.Count; i++) { - points[i] = context.ToSurfacePoint(polygonalPoints[i].Convert()); + points[i] = context.ToSurfacePoint((XY)polygonalPoints[i]); } context.Surface.DrawPolyline(style, points, ShouldClosePoints(points, spline.IsClosed || spline.IsPeriodic)); return true; } - // ACadSharp 3.7.1's UpdateFromFitPoints fills the knot vector but no control points, and DXF allows a spline + // ACadSharp 3.8.0's UpdateFromFitPoints fills the knot vector but no control points, and DXF allows a spline // defined by fit points alone; joining the fit points is a coarse but honest stand-in for the curve. if (spline.ControlPoints.Count == 0 && spline.FitPoints.Count > 1) { diff --git a/ACadSharp.Image/Rendering/TextRenderer.cs b/ACadSharp.Image/Rendering/TextRenderer.cs index b84885e..1d88fd0 100644 --- a/ACadSharp.Image/Rendering/TextRenderer.cs +++ b/ACadSharp.Image/Rendering/TextRenderer.cs @@ -22,7 +22,7 @@ internal sealed class TextRenderer /// The transform of the insert that placed the entity, or null at top level. /// /// An MTEXT insertion point and X axis are WCS in DXF. The insert transform is applied here, by the renderer, - /// because ACadSharp 3.7.1's Insert.Explode() moves the insertion point but leaves the X axis untouched, + /// because ACadSharp 3.8.0's Insert.Explode() moves the insertion point but leaves the X axis untouched, /// so an MTEXT inside a rotated insert would otherwise be drawn unrotated. /// public void Draw(ImageRenderContext context, ImageStyle style, MText mtext, Transform? placement) @@ -76,7 +76,7 @@ public void Draw(ImageRenderContext context, ImageStyle style, MText mtext, Tran /// The multi-line attribute or attribute definition. /// The transform of the insert that placed the entity, or null at top level. /// - /// When the embedded object is missing the single-line value is drawn instead, with a warning: ACadSharp 3.7.1's + /// When the embedded object is missing the single-line value is drawn instead, with a warning: ACadSharp 3.8.0's /// DWG reader only reads the attribute type for R2018 and later files, so an older drawing reports every /// attribute as single-line and never populates the embedded object. /// @@ -103,7 +103,7 @@ public void DrawAttribute(ImageRenderContext context, ImageStyle style, Attribut /// The transform of the insert that placed the entity, or null at top level. /// /// A TEXT entity's points and rotation live in its own OCS; the insert transform is applied after the OCS, by the - /// renderer, because ACadSharp 3.7.1's Insert.Explode() transforms the insertion point but not the + /// renderer, because ACadSharp 3.8.0's Insert.Explode() transforms the insertion point but not the /// alignment point, and mixes world points with a mirrored normal. /// public void Draw(ImageRenderContext context, ImageStyle style, TextEntity textEntity, Transform? placement) @@ -293,7 +293,8 @@ internal static string PlainTextOf(MText mtext) { string value = mtext.Value ?? string.Empty; string decoded = UnicodeEscape.Replace(value, m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString()); - return decoded == value ? mtext.PlainText : new MText { Value = decoded }.PlainText; + string plain = decoded == value ? mtext.PlainText : new MText { Value = decoded }.PlainText; + return NormalizeLineEndings(plain); } /// @@ -309,7 +310,7 @@ internal static string NormalizeText(string? value) } string text = UnicodeEscape.Replace(value, m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString()); - return text + return NormalizeLineEndings(text .Replace("%%%", "\u0001", StringComparison.Ordinal) .Replace("%%C", "Ø", StringComparison.OrdinalIgnoreCase) .Replace("%%D", "°", StringComparison.OrdinalIgnoreCase) @@ -317,6 +318,15 @@ internal static string NormalizeText(string? value) .Replace("%%U", string.Empty, StringComparison.OrdinalIgnoreCase) .Replace("%%O", string.Empty, StringComparison.OrdinalIgnoreCase) .Replace("\u0001", "%", StringComparison.Ordinal) - .Replace("\\P", "\n", StringComparison.OrdinalIgnoreCase); + .Replace("\\P", "\n", StringComparison.OrdinalIgnoreCase)); + } + + /// + /// Collapses the Windows line endings ACadSharp 3.8 emits for MTEXT paragraphs to the single \n the + /// layout backends expect. A stray \r is treated as a line break as well. + /// + private static string NormalizeLineEndings(string value) + { + return value.Replace("\r\n", "\n", StringComparison.Ordinal).Replace('\r', '\n'); } } diff --git a/Directory.Build.props b/Directory.Build.props index 5625beb..b0bbf64 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -10,5 +10,12 @@ true git https://github.com/slaveoftime/ACadSharp.Image.git + + + $(MSBuildThisFileDirectory)sixlabors.lic diff --git a/Directory.Packages.props b/Directory.Packages.props index c621af1..19beba3 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -4,13 +4,26 @@ - - - - - - + + + - + + + + + + + + + + + + + + diff --git a/README.md b/README.md index 14e1eb1..11b5a55 100644 --- a/README.md +++ b/README.md @@ -223,7 +223,7 @@ exporter.Configuration.HideLayer("A-DOOR"); // then remove on exporter.AddModelSpace(document); ``` -Filtering happens when rendering, so it also applies to block contents, dimension geometry and paper-space viewport contents. Entities on layer `0` inside a block take the layer of the insert that placed them, including its colour, line weight and linetype when theirs are ByLayer; ByBlock attributes resolve to the placing insert's own (colour 7 and defaults at top level). Text inside block references is placed through the insert's transform from the original entity, because ACadSharp 3.7.1 leaves TEXT alignment points and MTEXT directions untransformed when exploding. Rendering never modifies the pages, so changing filters between renders is safe. +Filtering happens when rendering, so it also applies to block contents, dimension geometry and paper-space viewport contents. Entities on layer `0` inside a block take the layer of the insert that placed them, including its colour, line weight and linetype when theirs are ByLayer; ByBlock attributes resolve to the placing insert's own (colour 7 and defaults at top level). Text inside block references is placed through the insert's transform from the original entity, because ACadSharp 3.8.0 leaves TEXT alignment points and MTEXT directions untransformed when exploding. Rendering never modifies the pages, so changing filters between renders is safe. ### Layer visibility @@ -253,7 +253,7 @@ The SVG has a drawing-unit `viewBox`, no `width`/`height` unless `Svg.EmitSize` SVG and PNG are built from the same geometry and never disagree on it, but they intentionally differ in fidelity: SVG keeps native arcs, Beziers and ``, while raster output tessellates curves and outlines glyphs. SVG text is sized and wrapped to match the PNG output; glyph shapes still depend on the viewer's fonts. Repeated spaces inside text are preserved in both outputs. `ImageConfiguration.Dpi` affects only line weights; text is sized from the drawing on both backends. Entities with a non-world extrusion normal (an OCS other than the default) are brought into world coordinates first: arcs, circles and ellipses through ACadSharp's own tessellation, polylines, hatches and solids through the renderer's OCS transform. Single-line TEXT on another plane is placed on the mirrored extent with readable glyphs; AutoCAD would draw the glyphs themselves mirrored, so this is a deliberate readability choice, not a parity guarantee. Text height follows the transformed up axis and width the transformed reading axis of whatever places the text, block reference or OCS plane. MTEXT and dimension geometry are already world coordinates in DXF; MTEXT is placed through the same projection (its height likewise follows the projected up-axis length) and dimensions need no transform. The available `Svg` options are `NonScalingStroke`, `EmitEntityAttributes`, `EmitSize`, `IdPrefix`, and `Precision`. -**Thread safety:** Rendering temporarily mutates block MLINEs and LEADERs while working around ACadSharp 3.7.1's destructive `MLine.Clone()` and `Leader.Clone()` and restores them before returning; a `CadDocument` must not be rendered concurrently by two exporters, and `Insert.Explode()` itself is not safe for concurrent use either. +**Thread safety:** Rendering temporarily mutates block MLINEs and LEADERs while working around ACadSharp 3.8.0's destructive `MLine.Clone()` and `Leader.Clone()` and restores them before returning; a `CadDocument` must not be rendered concurrently by two exporters, and `Insert.Explode()` itself is not safe for concurrent use either. ### Custom Line Weights @@ -358,6 +358,8 @@ Contributions are welcome! Please feel free to submit a Pull Request. This project is released under the [MIT License](LICENSE). +The raster backend depends on Six Labors ImageSharp, Fonts, and ImageSharp.Drawing. Their build-time license check reads the repository-level [`sixlabors.lic`](sixlabors.lic) community license, which is separate from this project's MIT license. + --- ## 🌟 Support diff --git a/sixlabors.lic b/sixlabors.lic new file mode 100644 index 0000000..f885c3d --- /dev/null +++ b/sixlabors.lic @@ -0,0 +1 @@ +Id=ctm_01m5dwn86nk2hw9avk9hyf7a7t;Kind=Community;ExpiryDateUtc=2028-01-19T00:09:28.6607550Z;Key=Assembly:VKfdK13p5Tvwgo9HpkHH4S42NUy64/bPgvhMBW/rjLlxlMah7v3UeseNAx2pGKoShqzDmIic5KFQdL241NnArA==|5qrK4Zgg0D7x2710KtAY6Zd0V8j40C2qsla6U3TIdeOfjQcG1pN8+nNKH3nOnGtwoGpDKAQqHGpd0fHG28QxJg== \ No newline at end of file From 5bceda3fc1c7e3973724d25ef17c5ef0b7fd2cde Mon Sep 17 00:00:00 2001 From: slaveoftime Date: Wed, 21 Oct 2026 09:40:31 +0800 Subject: [PATCH 2/2] fix(tests): tolerate platform rounding in feature SVG golden ACadSharp's pattern-hatch intersections can land on either side of a two-decimal half-way value on Windows and Linux. Compare the feature SVG golden with a one-unit numeric tolerance while keeping the other SVG goldens exact. --- ACadSharp.Image.Tests/FeatureGoldenTests.cs | 4 +- ACadSharp.Image.Tests/GoldenAssert.cs | 66 ++++++++++++++++++++- 2 files changed, 67 insertions(+), 3 deletions(-) diff --git a/ACadSharp.Image.Tests/FeatureGoldenTests.cs b/ACadSharp.Image.Tests/FeatureGoldenTests.cs index 3cf1c04..7e1d793 100644 --- a/ACadSharp.Image.Tests/FeatureGoldenTests.cs +++ b/ACadSharp.Image.Tests/FeatureGoldenTests.cs @@ -41,7 +41,9 @@ public void FeatureSvgMatchesGoldenAndContainsEveryPrimitive() exporter.Configuration.OnNotification += (_, e) => notifications.Add(e); RenderedSvgPage page = Assert.IsType(Assert.Single(exporter.Render(ImageExportFormat.Svg))); - GoldenAssert.Svg("features.model.01", page.Content); + // ACadSharp's pattern-hatch intersections can land on either side of a two-decimal half-way value depending on + // platform floating point, so allow one printed unit of drift for this golden. + GoldenAssert.Svg("features.model.01", page.Content, 0.011); Assert.DoesNotContain(notifications, n => n.NotificationType is NotificationType.Warning or NotificationType.NotImplemented); XDocument document = XDocument.Parse(page.Content); diff --git a/ACadSharp.Image.Tests/GoldenAssert.cs b/ACadSharp.Image.Tests/GoldenAssert.cs index 2ab4169..a7f4fd5 100644 --- a/ACadSharp.Image.Tests/GoldenAssert.cs +++ b/ACadSharp.Image.Tests/GoldenAssert.cs @@ -1,3 +1,5 @@ +using System.Globalization; +using System.Text.RegularExpressions; using ACadSharp.Image.Rendering; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Png; @@ -13,6 +15,8 @@ internal static class GoldenAssert { public static bool Updating => Environment.GetEnvironmentVariable("ACADSHARP_IMAGE_UPDATE_BASELINES") == "1"; + private static readonly Regex SvgNumber = new(@"[-+]?(?:\d+\.\d+|\d+)", RegexOptions.CultureInvariant); + private static string BaselineDirectory { get @@ -37,7 +41,13 @@ public static void Png(string baseName, Image actual) SampleParityTests.AssertPixelsEqual(expected, actual, path); } - public static void Svg(string baseName, string actual) + /// Baseline file name without the .svg extension. + /// The rendered SVG. + /// + /// Absolute tolerance for numeric tokens. Zero keeps the comparison exact; a small value absorbs platform floating-point + /// drift in values that are otherwise printed at the same precision. + /// + public static void Svg(string baseName, string actual, double numberTolerance = 0d) { string path = Path.Combine(BaselineDirectory, baseName + ".svg"); string normalized = actual.Replace("\r\n", "\n"); @@ -50,7 +60,59 @@ public static void Svg(string baseName, string actual) } Assert.True(File.Exists(path), $"Missing golden {path}. Run with ACADSHARP_IMAGE_UPDATE_BASELINES=1 to create it."); - Assert.Equal(File.ReadAllText(path).Replace("\r\n", "\n"), normalized); + string expected = File.ReadAllText(path).Replace("\r\n", "\n"); + if (numberTolerance <= 0d) + { + Assert.Equal(expected, normalized); + return; + } + + AssertSvgNumbersEqual(expected, normalized, path, numberTolerance); + } + + private static void AssertSvgNumbersEqual(string expected, string actual, string path, double tolerance) + { + List<(bool IsNumber, string Text)> expectedTokens = TokenizeSvg(expected); + List<(bool IsNumber, string Text)> actualTokens = TokenizeSvg(actual); + Assert.Equal(expectedTokens.Count, actualTokens.Count); + for (int i = 0; i < expectedTokens.Count; i++) + { + Assert.Equal(expectedTokens[i].IsNumber, actualTokens[i].IsNumber); + if (!expectedTokens[i].IsNumber) + { + Assert.Equal(expectedTokens[i].Text, actualTokens[i].Text); + continue; + } + + double expectedNumber = double.Parse(expectedTokens[i].Text, CultureInfo.InvariantCulture); + double actualNumber = double.Parse(actualTokens[i].Text, CultureInfo.InvariantCulture); + Assert.True( + Math.Abs(expectedNumber - actualNumber) <= tolerance, + $"SVG number differs in {path} at token {i}: expected {expectedNumber.ToString(CultureInfo.InvariantCulture)}, actual {actualNumber.ToString(CultureInfo.InvariantCulture)}."); + } + } + + private static List<(bool IsNumber, string Text)> TokenizeSvg(string svg) + { + List<(bool IsNumber, string Text)> tokens = []; + int position = 0; + foreach (Match match in SvgNumber.Matches(svg)) + { + if (match.Index > position) + { + tokens.Add((false, svg[position..match.Index])); + } + + tokens.Add((true, match.Value)); + position = match.Index + match.Length; + } + + if (position < svg.Length) + { + tokens.Add((false, svg[position..])); + } + + return tokens; } ///