Skip to content

Commit

Permalink
PathSegment tests
Browse files Browse the repository at this point in the history
  • Loading branch information
krauthaufen committed Dec 14, 2023
1 parent 65171b3 commit 5b469cc
Show file tree
Hide file tree
Showing 12 changed files with 516 additions and 43 deletions.
2 changes: 1 addition & 1 deletion paket.dependencies
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,4 @@ nuget Expecto.FsCheck ~> 9.0.4
nuget Expecto.Hopac ~> 9.0.4
nuget BenchmarkDotNet ~> 0.13.1
nuget YoloDev.Expecto.TestSdk ~> 0.13.3
nuget Microsoft.NET.Test.Sdk ~> 17.5.0
nuget Microsoft.NET.Test.Sdk ~> 17.8.0
26 changes: 13 additions & 13 deletions paket.lock
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ NUGET
NETStandard.Library (>= 1.6.1) - restriction: || (&& (== net471) (< net40)) (== net6.0) (== net6.0-windows7.0) (== netstandard2.0)
SharpDX.Direct3D9 (4.0.1)
Microsoft.NETCore.App (>= 1.0.5) - restriction: || (&& (== net471) (>= netcoreapp1.0)) (== net6.0) (== net6.0-windows7.0) (&& (== netstandard2.0) (>= netcoreapp1.0))
NETStandard.Library (>= 1.6.1) - restriction: || (&& (== net471) (< net40)) (&& (== net6.0) (< netcoreapp1.0)) (&& (== net6.0-windows7.0) (< netcoreapp1.0)) (== netstandard2.0)
NETStandard.Library (>= 1.6.1) - restriction: || (&& (== net471) (== net6.0)) (&& (== net471) (== net6.0-windows7.0)) (&& (== net471) (< net40)) (&& (== net6.0) (< netcoreapp1.0)) (&& (== net6.0-windows7.0) (< netcoreapp1.0)) (== netstandard2.0)
SharpDX (>= 4.0.1)
SharpZipLib (1.4.2)
System.Memory (>= 4.5.4) - restriction: || (== net471) (&& (== net6.0) (< netstandard2.1)) (&& (== net6.0-windows7.0) (< netstandard2.1)) (== netstandard2.0)
Expand Down Expand Up @@ -242,7 +242,7 @@ NUGET
System.Threading (>= 4.3) - restriction: || (&& (== net471) (< net45)) (== net6.0) (== net6.0-windows7.0) (== netstandard2.0)
System.Memory (4.5.5)
System.Buffers (>= 4.5.1) - restriction: || (== net471) (&& (== net6.0) (>= monotouch)) (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netcoreapp2.0)) (&& (== net6.0) (< netstandard1.1)) (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (>= xamarinios)) (&& (== net6.0) (>= xamarinmac)) (&& (== net6.0) (>= xamarintvos)) (&& (== net6.0) (>= xamarinwatchos)) (&& (== net6.0-windows7.0) (>= monotouch)) (&& (== net6.0-windows7.0) (>= net461)) (&& (== net6.0-windows7.0) (< netcoreapp2.0)) (&& (== net6.0-windows7.0) (< netstandard1.1)) (&& (== net6.0-windows7.0) (< netstandard2.0)) (&& (== net6.0-windows7.0) (>= xamarinios)) (&& (== net6.0-windows7.0) (>= xamarinmac)) (&& (== net6.0-windows7.0) (>= xamarintvos)) (&& (== net6.0-windows7.0) (>= xamarinwatchos)) (== netstandard2.0)
System.Numerics.Vectors (>= 4.4) - restriction: || (&& (== net471) (< net45)) (&& (== net6.0) (< netcoreapp2.0)) (&& (== net6.0-windows7.0) (< netcoreapp2.0)) (== netstandard2.0)
System.Numerics.Vectors (>= 4.4) - restriction: || (&& (== net471) (== net6.0)) (&& (== net471) (== net6.0-windows7.0)) (&& (== net471) (< net45)) (&& (== net6.0) (< netcoreapp2.0)) (&& (== net6.0-windows7.0) (< netcoreapp2.0)) (== netstandard2.0)
System.Numerics.Vectors (>= 4.5) - restriction: || (== net471) (&& (== net6.0) (>= net461)) (&& (== net6.0-windows7.0) (>= net461)) (&& (== netstandard2.0) (>= net461))
System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - restriction: || (== net471) (&& (== net6.0) (>= monotouch)) (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netcoreapp2.0)) (&& (== net6.0) (< netcoreapp2.1)) (&& (== net6.0) (< netstandard1.1)) (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (>= uap10.1)) (&& (== net6.0) (>= xamarinios)) (&& (== net6.0) (>= xamarinmac)) (&& (== net6.0) (>= xamarintvos)) (&& (== net6.0) (>= xamarinwatchos)) (&& (== net6.0-windows7.0) (>= monotouch)) (&& (== net6.0-windows7.0) (>= net461)) (&& (== net6.0-windows7.0) (< netcoreapp2.0)) (&& (== net6.0-windows7.0) (< netcoreapp2.1)) (&& (== net6.0-windows7.0) (< netstandard1.1)) (&& (== net6.0-windows7.0) (< netstandard2.0)) (&& (== net6.0-windows7.0) (>= uap10.1)) (&& (== net6.0-windows7.0) (>= xamarinios)) (&& (== net6.0-windows7.0) (>= xamarinmac)) (&& (== net6.0-windows7.0) (>= xamarintvos)) (&& (== net6.0-windows7.0) (>= xamarinwatchos)) (== netstandard2.0)
System.Numerics.Vectors (4.5)
Expand All @@ -259,10 +259,10 @@ NUGET
System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net471) (< net45)) (== net6.0) (== net6.0-windows7.0) (== netstandard2.0)
System.Runtime (>= 4.3) - restriction: || (&& (== net471) (< net45)) (== net6.0) (== net6.0-windows7.0) (== netstandard2.0)
System.Reflection.Emit (4.7) - restriction: || (&& (== net471) (< net45)) (== net6.0) (== net6.0-windows7.0) (== netstandard2.0)
System.Reflection.Emit.ILGeneration (>= 4.7) - restriction: || (&& (== net471) (< net45)) (&& (== net471) (< netstandard1.1)) (&& (== net471) (< netstandard2.0) (>= wpa81)) (&& (== net471) (>= uap10.1)) (&& (== net6.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (== net6.0) (< netstandard1.1)) (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (>= uap10.1)) (&& (== net6.0-windows7.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (== net6.0-windows7.0) (< netstandard1.1)) (&& (== net6.0-windows7.0) (< netstandard2.0)) (&& (== net6.0-windows7.0) (>= uap10.1)) (== netstandard2.0)
System.Reflection.Emit.ILGeneration (>= 4.7) - restriction: || (&& (== net471) (== net6.0)) (&& (== net471) (== net6.0-windows7.0)) (&& (== net471) (< net45)) (&& (== net471) (< netstandard1.1)) (&& (== net471) (< netstandard2.0) (>= wpa81)) (&& (== net471) (>= uap10.1)) (&& (== net6.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (== net6.0) (< netstandard1.1)) (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (>= uap10.1)) (&& (== net6.0-windows7.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (== net6.0-windows7.0) (< netstandard1.1)) (&& (== net6.0-windows7.0) (< netstandard2.0)) (&& (== net6.0-windows7.0) (>= uap10.1)) (== netstandard2.0)
System.Reflection.Emit.ILGeneration (4.7) - restriction: || (&& (== net471) (< net45)) (&& (== net471) (< netstandard2.0) (>= wpa81)) (&& (== net471) (< portable-net45+wp8)) (&& (== net471) (>= uap10.1)) (== net6.0) (== net6.0-windows7.0) (== netstandard2.0)
System.Reflection.Emit.Lightweight (4.7)
System.Reflection.Emit.ILGeneration (>= 4.7) - restriction: || (&& (== net471) (< net45)) (&& (== net471) (< netstandard2.0) (>= wpa81)) (&& (== net471) (< portable-net45+wp8)) (&& (== net471) (>= uap10.1)) (&& (== net6.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (< portable-net45+wp8)) (&& (== net6.0) (>= uap10.1)) (&& (== net6.0-windows7.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (== net6.0-windows7.0) (< netstandard2.0)) (&& (== net6.0-windows7.0) (< portable-net45+wp8)) (&& (== net6.0-windows7.0) (>= uap10.1)) (== netstandard2.0)
System.Reflection.Emit.ILGeneration (>= 4.7) - restriction: || (&& (== net471) (== net6.0)) (&& (== net471) (== net6.0-windows7.0)) (&& (== net471) (< net45)) (&& (== net471) (< netstandard2.0) (>= wpa81)) (&& (== net471) (< portable-net45+wp8)) (&& (== net471) (>= uap10.1)) (&& (== net6.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (< portable-net45+wp8)) (&& (== net6.0) (>= uap10.1)) (&& (== net6.0-windows7.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (== net6.0-windows7.0) (< netstandard2.0)) (&& (== net6.0-windows7.0) (< portable-net45+wp8)) (&& (== net6.0-windows7.0) (>= uap10.1)) (== netstandard2.0)
System.Reflection.Extensions (4.3) - restriction: || (&& (== net471) (< net45)) (== net6.0) (== net6.0-windows7.0) (== netstandard2.0)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net471) (< net45)) (== net6.0) (== net6.0-windows7.0) (== netstandard2.0)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net471) (< net45)) (== net6.0) (== net6.0-windows7.0) (== netstandard2.0)
Expand Down Expand Up @@ -379,7 +379,7 @@ NUGET
System.Threading.Tasks.Extensions (>= 4.5.4)
Microsoft.CodeAnalysis.CSharp (4.2)
Microsoft.CodeAnalysis.Common (4.2)
Microsoft.CodeCoverage (17.5)
Microsoft.CodeCoverage (17.8)
Microsoft.Diagnostics.NETCore.Client (0.2.328102)
Microsoft.Bcl.AsyncInterfaces (>= 1.1)
Microsoft.Extensions.Logging (>= 2.1.1)
Expand All @@ -406,21 +406,21 @@ NUGET
Microsoft.Extensions.Primitives (>= 6.0)
Microsoft.Extensions.Primitives (6.0)
System.Runtime.CompilerServices.Unsafe (>= 6.0)
Microsoft.NET.Test.Sdk (17.5)
Microsoft.CodeCoverage (>= 17.5)
Microsoft.TestPlatform.TestHost (>= 17.5)
Microsoft.TestPlatform.ObjectModel (17.5)
NuGet.Frameworks (>= 5.11)
Microsoft.NET.Test.Sdk (17.8)
Microsoft.CodeCoverage (>= 17.8)
Microsoft.TestPlatform.TestHost (>= 17.8)
Microsoft.TestPlatform.ObjectModel (17.8)
NuGet.Frameworks (>= 6.5)
System.Reflection.Metadata (>= 1.6)
Microsoft.TestPlatform.TestHost (17.5)
Microsoft.TestPlatform.ObjectModel (>= 17.5)
Microsoft.TestPlatform.TestHost (17.8)
Microsoft.TestPlatform.ObjectModel (>= 17.8)
Newtonsoft.Json (>= 13.0.1)
Microsoft.Win32.Registry (5.0)
System.Security.AccessControl (>= 5.0)
System.Security.Principal.Windows (>= 5.0)
Mono.Cecil (0.11.4)
Newtonsoft.Json (13.0.1)
NuGet.Frameworks (6.2)
NuGet.Frameworks (6.8)
Perfolizer (0.2.1)
System.Memory (>= 4.5.3)
System.CodeDom (6.0)
Expand Down
1 change: 1 addition & 0 deletions src/Aardvark.Rendering.NoExamples.NonWindows.slnf
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"Application\\Aardvark.Application.Utilities\\Aardvark.Application.Utilities.fsproj",
"Application\\Aardvark.Application\\Aardvark.Application.fsproj",
"Tests\\Aardvark.Rendering.Tests\\Aardvark.Rendering.Tests.fsproj",
"Tests\\Aardvark.Rendering.Text.Tests\\Aardvark.Rendering.Text.Tests.fsproj",
"Tests\\CSharpInteropTest\\CSharpInteropTest.csproj"
]
}
Expand Down
1 change: 1 addition & 0 deletions src/Aardvark.Rendering.NonWindows.slnf
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@
"Scratch (netcore)\\20 - ResourceSharing\\20 - ResourceSharing.fsproj",
"Scratch (netcore)\\21 - DebugPrint\\21 - DebugPrint.fsproj",
"Tests\\Aardvark.Rendering.Tests\\Aardvark.Rendering.Tests.fsproj",
"Tests\\Aardvark.Rendering.Text.Tests\\Aardvark.Rendering.Text.Tests.fsproj",
"Tests\\CSharpInteropTest\\CSharpInteropTest.csproj"
]
}
Expand Down
107 changes: 78 additions & 29 deletions src/Aardvark.Rendering.Text/PathSegment.fs
Original file line number Diff line number Diff line change
Expand Up @@ -944,15 +944,13 @@ module PathSegment =
let dd = (p3 - p0)
let len = Vec.length dd
let d03 = dd / len
let d01 = Vec.normalize (p1 - p0)
let d23 = Vec.normalize (p3 - p2)

let n = V2d(-d03.Y, d03.X)
let h1 = Vec.dot (p1 - p0) n
let h2 = Vec.dot (p2 - p0) n

if Fun.IsTiny(h1, epsilon) && Fun.IsTiny(h2, epsilon) then
line p0 p1
line p0 p3
else
let f3 = -p0 + 3.0*p1 - 3.0*p2 + p3
if Fun.IsTiny(f3, epsilon) then
Expand Down Expand Up @@ -994,7 +992,7 @@ module PathSegment =
let h2 = Vec.dot (p2 - p0) n

if Fun.IsTiny(h1, epsilon) && Fun.IsTiny(h2, epsilon) then
tryLine p0 p1
tryLine p0 p3
else
// let f3 = -p0 + 3.0*p1 - 3.0*p2 + p3
// let f2 = 3.0*p0 - 6.0*p1 + 3.0*p2
Expand Down Expand Up @@ -1324,7 +1322,7 @@ module PathSegment =


let df = derivative t seg
let ddf = secondDerivative t seg
let ddf = secondDerivative t seg
(df.X*ddf.Y - df.Y*ddf.X) / (df.LengthSquared ** 1.5)

/// evaluates the curvature-derivative for the given parameter (t <- [0;1]).
Expand Down Expand Up @@ -1356,14 +1354,64 @@ module PathSegment =

// (Fx*Hy - Fy*Hx) * (Fx^2 + Fy^2)^(2/3) + (Fx*Gy - Fy*Gx) * (2/3) * (Fx^2 + Fy^2)^(-1/3) * 2*(Fx*Gx + Fy*Gy)

// A := lim dp->0 [(c(p + dp) - c(p)) / |dp|]

// p(t) = f(t)
// dp(t) = f'(t) * dt

// dc/sqrt(dpx^2 + dpy^2)


// A^2 = dc^2/(dpx^2 + dpy^2)


// A^2 = dc^2/(f'x(t)^2*dt^2 + f'y(t)^2*dt^2)
// A^2 = (1 / (f'x(t)^2 + f'y(t)^2)) * (dc^/dt)^2
// A = (1 / |f'|) * (dc/dt)



// (c(f(t) + f'(t) * dt) - c(f(t))) / |f'(t) * dt|
// (1 / |f'(t)|) * lim dt->0 [(C(t + dt) - C(t)) / dt]

// (1 / |f'(t)|) * dC/dt


// (1 / |f'(t)|) * (c(t + dt) - c(t)) / dt


// c = (F.X*G.Y - F.Y*G.X) * (F.X^2 + F.Y^2)^(-3/2)

// dc / dt = (G.X*G.Y + F.X*H.Y - G.Y*G.X - F.Y*H.X) * (F.X^2 + F.Y^2)^(-3/2) -
// 3 * (F.X*G.Y - F.Y*G.X) * (F.X^2 + F.Y^2)^(-5/2) * (F.X*G.X + F.Y*G.Y)


// dc / dt = (F.X*H.Y - F.Y*H.X) * (F.X^2 + F.Y^2)^(-3/2) -
// 3 * (F.X*G.Y - F.Y*G.X) * (F.X^2 + F.Y^2)^(-5/2) * (F.X*G.X + F.Y*G.Y)


// dc / dt = (F.X^2 + F.Y^2)^(-3/2) * [(F.X*H.Y - F.Y*H.X) -
// 3 * (F.X*G.Y - F.Y*G.X) * (F.X*G.X + F.Y*G.Y) * (F.X^2 + F.Y^2)^-1]



let F = derivative t seg
let G = secondDerivative t seg
let H = thirdDerivative t seg

let lfSq = F.LengthSquared

let lfSqCbrt = Fun.Cbrt F.LengthSquared

(F.X*H.Y - F.Y*H.X) * sqr lfSqCbrt +
(4.0/3.0) * (F.X*G.Y - F.Y*G.X) * (F.X*G.X + F.Y*G.Y) / lfSqCbrt
let diff = lfSq**(-1.5) * ((F.X*H.Y - F.Y*H.X) - 3.0 * (F.X*G.Y - F.Y*G.X) * (F.X*G.X + F.Y*G.Y) / lfSq)
//
//
// let diff =
// (F.X*H.Y - F.Y*H.X) * sqr lfSqCbrt +
// (4.0/3.0) * (F.X*G.Y - F.Y*G.X) * (F.X*G.X + F.Y*G.Y) / lfSqCbrt

diff / F.Length


/// finds all parameters t <- [0;1] where the curvature changes its sign.
/// note that only Bezier3 segments may have inflection points.
Expand Down Expand Up @@ -1435,7 +1483,7 @@ module PathSegment =
Vec.normalize (s*s*u + 2.0*t*s*v + t*t*w)

/// gets a normalized (left) normal at the given parameter (t <- [0;1])
let inline normal (t : float) (seg : PathSegment) =
let normal (t : float) (seg : PathSegment) =
let t = tangent t seg
V2d(-t.Y, t.X)

Expand Down Expand Up @@ -1623,10 +1671,10 @@ module PathSegment =
/// tries to get the t-parameter for a point very near the segment (within eps)
let tryGetT (eps : float) (pt : V2d) (segment : PathSegment) =

let inline newtonImprove (t : float) =
let newtonImprove (iter : int) (t : float) =
let mutable t = t
let mutable dt = 1000.0
let mutable iter = 10
let mutable iter = iter
while iter > 0 && not (Fun.IsTiny (dt, 1E-15)) do
// err^2 = min
// 2*err * err' = 0
Expand All @@ -1643,7 +1691,7 @@ module PathSegment =
let ddv = 2.0 * (Vec.dot d d + Vec.dot err dd)


dt <- -dv / ddv
dt <- -0.8 * dv / ddv
//printfn "%d: %A %A -> %A" iter t dv dt
t <- t + dt
iter <- iter - 1
Expand Down Expand Up @@ -1687,9 +1735,9 @@ module PathSegment =
let d1 = if t1 >= 0.0 && t1 <= 1.0 then Vec.length (a * sqr t1 + b * t1 + c) else System.Double.PositiveInfinity

if d0 < d1 then
newtonImprove t0
newtonImprove 20 t0
else
if not (System.Double.IsPositiveInfinity d1) then newtonImprove t1
if not (System.Double.IsPositiveInfinity d1) then newtonImprove 20 t1
else None
else
None
Expand All @@ -1711,25 +1759,26 @@ module PathSegment =
let struct(t0, t1, t2) =
if box.Size.MajorDim = 0 then Polynomial.RealRootsOf(a.X, b.X, c.X, d.X)
else Polynomial.RealRootsOf(a.Y, b.Y, c.Y, d.Y)


let t0 = if t0 >= -eps && t0 <= 1.0 + eps then newtonImprove 10 t0 else None
let t1 = if t1 >= -eps && t1 <= 1.0 + eps then newtonImprove 10 t1 else None
let t2 = if t2 >= -eps && t2 <= 1.0 + eps then newtonImprove 10 t2 else None

let d0 = if t0 >= 0.0 && t0 <= 1.0 then Vec.length (a * sqr t0 + b * t0 + c) else System.Double.PositiveInfinity
let d1 = if t1 >= 0.0 && t1 <= 1.0 then Vec.length (a * sqr t1 + b * t1 + c) else System.Double.PositiveInfinity
let d2 = if t2 >= 0.0 && t2 <= 1.0 then Vec.length (a * sqr t2 + b * t2 + c) else System.Double.PositiveInfinity
let d0 = match t0 with | Some t0 -> Vec.length (a * sqr t0 + b * t0 + c) | _ -> System.Double.PositiveInfinity
let d1 = match t1 with | Some t1 -> Vec.length (a * sqr t1 + b * t1 + c) | _ -> System.Double.PositiveInfinity
let d2 = match t2 with | Some t2 -> Vec.length (a * sqr t2 + b * t2 + c) | _ -> System.Double.PositiveInfinity


if d0 < d1 then
if d0 < d2 then
newtonImprove t0
else
if not (System.Double.IsPositiveInfinity d2) then newtonImprove t2
else None
else
if d1 < d2 then
newtonImprove t1
let result =
if d0 < d1 then
if d0 < d2 then t0
else t2
else
if not (System.Double.IsPositiveInfinity d2) then newtonImprove t2
else None

if d1 < d2 then t1
else t2

result |> Option.bind (newtonImprove 30)

else
None
Expand All @@ -1745,7 +1794,7 @@ module PathSegment =
let t = arcT a da angle

if Fun.ApproximateEquals(m.TransformPos c, pt, eps) then
newtonImprove t
newtonImprove 30 t
else
None

Expand Down
7 changes: 7 additions & 0 deletions src/Aardvark.Rendering.sln
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
..\.github\workflows\publish.yml = ..\.github\workflows\publish.yml
EndProjectSection
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Aardvark.Rendering.Text.Tests", "Tests\Aardvark.Rendering.Text.Tests\Aardvark.Rendering.Text.Tests.fsproj", "{EDDBAF72-43C6-48BB-91FB-A639AA299293}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -622,6 +624,10 @@ Global
{DD9808AD-AEB3-4E90-A70C-E398CADE55FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DD9808AD-AEB3-4E90-A70C-E398CADE55FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DD9808AD-AEB3-4E90-A70C-E398CADE55FF}.Release|Any CPU.Build.0 = Release|Any CPU
{EDDBAF72-43C6-48BB-91FB-A639AA299293}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EDDBAF72-43C6-48BB-91FB-A639AA299293}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EDDBAF72-43C6-48BB-91FB-A639AA299293}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EDDBAF72-43C6-48BB-91FB-A639AA299293}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -713,6 +719,7 @@ Global
{159213C5-ECA5-48B6-BDCF-D75BAE733E80} = {5E3312C4-1B3C-4D41-964C-C3A3E01DA966}
{6DFA9CC5-3C57-44FC-A989-F1DC5097C2DB} = {29CA9CA1-CC31-4B5D-8DB0-2FEA748C09D8}
{DD9808AD-AEB3-4E90-A70C-E398CADE55FF} = {29CA9CA1-CC31-4B5D-8DB0-2FEA748C09D8}
{EDDBAF72-43C6-48BB-91FB-A639AA299293} = {80F74456-D82F-4D38-83FE-362EFD0C2FCB}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C41172B9-09C3-4327-8CE2-CB47CBAA29AC}
Expand Down

0 comments on commit 5b469cc

Please sign in to comment.