diff --git a/源代码/.vs/ProjectEvaluation/stgsharp.metadata.v5.1 b/源代码/.vs/ProjectEvaluation/stgsharp.metadata.v5.1 index 2792a768..dbc0d15b 100644 Binary files a/源代码/.vs/ProjectEvaluation/stgsharp.metadata.v5.1 and b/源代码/.vs/ProjectEvaluation/stgsharp.metadata.v5.1 differ diff --git a/源代码/.vs/ProjectEvaluation/stgsharp.projects.v5.1 b/源代码/.vs/ProjectEvaluation/stgsharp.projects.v5.1 index 3e6dd096..6e865dd1 100644 Binary files a/源代码/.vs/ProjectEvaluation/stgsharp.projects.v5.1 and b/源代码/.vs/ProjectEvaluation/stgsharp.projects.v5.1 differ diff --git a/源代码/.vs/StgSharp/DesignTimeBuild/.dtbcache.v2 b/源代码/.vs/StgSharp/DesignTimeBuild/.dtbcache.v2 index f1cc7805..5608fd45 100644 Binary files a/源代码/.vs/StgSharp/DesignTimeBuild/.dtbcache.v2 and b/源代码/.vs/StgSharp/DesignTimeBuild/.dtbcache.v2 differ diff --git a/源代码/.vs/StgSharp/FileContentIndex/281267bd-19ef-4eed-ab2d-f26258ceb8da.vsidx b/源代码/.vs/StgSharp/FileContentIndex/281267bd-19ef-4eed-ab2d-f26258ceb8da.vsidx deleted file mode 100644 index df2c604b..00000000 Binary files a/源代码/.vs/StgSharp/FileContentIndex/281267bd-19ef-4eed-ab2d-f26258ceb8da.vsidx and /dev/null differ diff --git a/源代码/.vs/StgSharp/FileContentIndex/772ea82e-2cca-4ccd-95ec-d379d105eb3c.vsidx b/源代码/.vs/StgSharp/FileContentIndex/772ea82e-2cca-4ccd-95ec-d379d105eb3c.vsidx deleted file mode 100644 index 9a1909a7..00000000 Binary files a/源代码/.vs/StgSharp/FileContentIndex/772ea82e-2cca-4ccd-95ec-d379d105eb3c.vsidx and /dev/null differ diff --git a/源代码/.vs/StgSharp/FileContentIndex/c155612a-959a-47b2-a130-cc11410b0145.vsidx b/源代码/.vs/StgSharp/FileContentIndex/c155612a-959a-47b2-a130-cc11410b0145.vsidx new file mode 100644 index 00000000..93be94f4 Binary files /dev/null and b/源代码/.vs/StgSharp/FileContentIndex/c155612a-959a-47b2-a130-cc11410b0145.vsidx differ diff --git a/源代码/.vs/StgSharp/FileContentIndex/cc2d6458-9702-4d41-b948-e52b7bb39066.vsidx b/源代码/.vs/StgSharp/FileContentIndex/cc2d6458-9702-4d41-b948-e52b7bb39066.vsidx deleted file mode 100644 index b6bfda94..00000000 Binary files a/源代码/.vs/StgSharp/FileContentIndex/cc2d6458-9702-4d41-b948-e52b7bb39066.vsidx and /dev/null differ diff --git a/源代码/.vs/StgSharp/FileContentIndex/e1b78524-447f-4554-953e-4302fcbd569a.vsidx b/源代码/.vs/StgSharp/FileContentIndex/e1b78524-447f-4554-953e-4302fcbd569a.vsidx deleted file mode 100644 index 5fc40860..00000000 Binary files a/源代码/.vs/StgSharp/FileContentIndex/e1b78524-447f-4554-953e-4302fcbd569a.vsidx and /dev/null differ diff --git a/源代码/.vs/StgSharp/FileContentIndex/e7fb216e-c54c-4c91-8bb1-8cf1027a90c0.vsidx b/源代码/.vs/StgSharp/FileContentIndex/e7fb216e-c54c-4c91-8bb1-8cf1027a90c0.vsidx new file mode 100644 index 00000000..1437c2de Binary files /dev/null and b/源代码/.vs/StgSharp/FileContentIndex/e7fb216e-c54c-4c91-8bb1-8cf1027a90c0.vsidx differ diff --git a/源代码/.vs/StgSharp/FileContentIndex/f720ebf3-8217-447c-8806-fee567b48181.vsidx b/源代码/.vs/StgSharp/FileContentIndex/f720ebf3-8217-447c-8806-fee567b48181.vsidx new file mode 100644 index 00000000..1e0367cc Binary files /dev/null and b/源代码/.vs/StgSharp/FileContentIndex/f720ebf3-8217-447c-8806-fee567b48181.vsidx differ diff --git a/源代码/.vs/StgSharp/FileContentIndex/f74488ce-4718-4b87-ad0b-39ff61ff090b.vsidx b/源代码/.vs/StgSharp/FileContentIndex/f74488ce-4718-4b87-ad0b-39ff61ff090b.vsidx new file mode 100644 index 00000000..0b85d902 Binary files /dev/null and b/源代码/.vs/StgSharp/FileContentIndex/f74488ce-4718-4b87-ad0b-39ff61ff090b.vsidx differ diff --git a/源代码/.vs/StgSharp/v17/.futdcache.v2 b/源代码/.vs/StgSharp/v17/.futdcache.v2 index 1f9e5709..4d2e2dfa 100644 Binary files a/源代码/.vs/StgSharp/v17/.futdcache.v2 and b/源代码/.vs/StgSharp/v17/.futdcache.v2 differ diff --git a/源代码/.vs/StgSharp/v17/.suo b/源代码/.vs/StgSharp/v17/.suo index 28401779..c4f3383a 100644 Binary files a/源代码/.vs/StgSharp/v17/.suo and b/源代码/.vs/StgSharp/v17/.suo differ diff --git a/源代码/StgSharp/Geometries/Arc.cs b/源代码/StgSharp/Geometries/Arc.cs index 00856241..ec2516f8 100644 --- a/源代码/StgSharp/Geometries/Arc.cs +++ b/源代码/StgSharp/Geometries/Arc.cs @@ -1,8 +1,10 @@ using Steamworks; +using StgSharp.Linear; using StgSharp.Math; using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; using System.Text; namespace StgSharp.Geometries @@ -11,8 +13,8 @@ namespace StgSharp.Geometries { internal Point _basePoint; internal Point _center; - internal Point _radius; - internal Point _angle; + internal Point _beginPoint; + internal Point _endPoint; internal RenderMode _renderMode; internal readonly uint bornTick; @@ -26,13 +28,13 @@ namespace StgSharp.Geometries bornTick = tickCounter._value; } - public override Point BasePoint => _basePoint; + public override Point RefOrigin => _basePoint; public override Point RefPoint => _center; - public override Point RefVec01 => _radius; + public override Point RefVec01 => _beginPoint; - public override Point RefVec02 => _angle; + public override Point RefVec02 => _endPoint; public override RenderMode renderMode => _renderMode; @@ -45,12 +47,12 @@ namespace StgSharp.Geometries internal sealed override void CalcVec02(vec3d vec, uint tick) { - _radius._position = vec + UpdateRadius(tick); + _beginPoint._position = vec + UpdateRadius(tick); } internal sealed override void CalcVec03(vec3d vec, uint tick) { - _angle._position = vec + UpdateAngle(tick); + _endPoint._position = vec + UpdateAngle(tick); } public virtual vec3d MoveCenter(uint tick) => default; @@ -88,7 +90,11 @@ namespace StgSharp.Geometries throw new NotImplementedException(); } + public override Line[] GetAllSides() => throw new NotImplementedException(); - + public override Plain GetPlain() + { + return new Plain(this._center,this._beginPoint,this._endPoint); + } } } diff --git a/源代码/StgSharp/Geometries/Circle.cs b/源代码/StgSharp/Geometries/Circle.cs index 4f6334aa..ecd2ef3b 100644 --- a/源代码/StgSharp/Geometries/Circle.cs +++ b/源代码/StgSharp/Geometries/Circle.cs @@ -15,7 +15,7 @@ namespace StgSharp.Geometries internal RenderMode _renderMode; internal readonly uint bornTick; - public override Point BasePoint => _baseCenter; + public override Point RefOrigin => _baseCenter; public override Point RefPoint => _center; diff --git a/源代码/StgSharp/Geometries/ToUpperDimensionException.cs b/源代码/StgSharp/Geometries/GemoryException.cs similarity index 51% rename from 源代码/StgSharp/Geometries/ToUpperDimensionException.cs rename to 源代码/StgSharp/Geometries/GemoryException.cs index aaaabb03..a22c988f 100644 --- a/源代码/StgSharp/Geometries/ToUpperDimensionException.cs +++ b/源代码/StgSharp/Geometries/GemoryException.cs @@ -23,4 +23,26 @@ namespace StgSharp.Geometries { } } + + /// + /// 当几何体调用了过多的CalcVec方法时,产生UnusedVertexException异常 + /// + public class UnusedVertexException : Exception + { + public UnusedVertexException() + { + } + + public UnusedVertexException(string message) : base(message) + { + } + + public UnusedVertexException(string message, Exception innerException) : base(message, innerException) + { + } + + protected UnusedVertexException(SerializationInfo info, StreamingContext context) : base(info, context) + { + } + } } diff --git a/源代码/StgSharp/Geometries/IPlainGeometry.cs b/源代码/StgSharp/Geometries/IPlainGeometry.cs index 2d7b3ed7..339b9515 100644 --- a/源代码/StgSharp/Geometries/IPlainGeometry.cs +++ b/源代码/StgSharp/Geometries/IPlainGeometry.cs @@ -6,11 +6,15 @@ using System.Text; namespace StgSharp.Geometries { + + /// + /// 平面几何体。包含三角形,对称四边形,自由多边形等。最多可由16个点参数定义。 + /// public abstract class IPlainGeometry:INode { private readonly uint bornTick; - public abstract Point BasePoint { get; } + public abstract Point RefOrigin { get; } public abstract Point RefPoint{ get; } public abstract Point RefVec01{ get; } public abstract Point RefVec02{ get; } @@ -31,6 +35,21 @@ namespace StgSharp.Geometries internal abstract void CalcVec01(uint tick); internal abstract void CalcVec02(vec3d vec, uint tick); internal abstract void CalcVec03(vec3d vec, uint tick); + internal abstract void CalcVec04(vec3d vec, uint tick); + internal abstract void CalcVec05(vec3d vec, uint tick); + internal abstract void CalcVec06(vec3d vec, uint tick); + internal abstract void CalcVec07(vec3d vec, uint tick); + internal abstract void CalcVec08(vec3d vec, uint tick); + internal abstract void CalcVec09(vec3d vec, uint tick); + internal abstract void CalcVec10(vec3d vec, uint tick); + internal abstract void CalcVec11(vec3d vec, uint tick); + internal abstract void CalcVec12(vec3d vec, uint tick); + internal abstract void CalcVec13(vec3d vec, uint tick); + internal abstract void CalcVec14(vec3d vec, uint tick); + internal abstract void CalcVec15(vec3d vec, uint tick); + internal abstract void CalcVec16(vec3d vec, uint tick); + + internal abstract void OnRender(uint tick); public abstract RenderMode renderMode { get; } diff --git a/源代码/StgSharp/Geometries/IPlainGeometryCombination.cs b/源代码/StgSharp/Geometries/IPlainGeometryCombination.cs deleted file mode 100644 index 0232a965..00000000 --- a/源代码/StgSharp/Geometries/IPlainGeometryCombination.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace StgSharp.Geometries -{ - public abstract class IPlainGeometryCombination:LinkedList - { - internal readonly uint _bornTick; - - internal abstract void toSimpleGeometry(); - - public IPlainGeometryCombination(uint bornTime) - { - _bornTick = bornTime; - } - - public IPlainGeometryCombination(Counter timer) - { - _bornTick = timer._value; - } - - public IPlainGeometryCombination() - { - - } - } -} diff --git a/源代码/StgSharp/Geometries/Line.cs b/源代码/StgSharp/Geometries/Line.cs index ebc4e91d..2e1a0352 100644 --- a/源代码/StgSharp/Geometries/Line.cs +++ b/源代码/StgSharp/Geometries/Line.cs @@ -1,6 +1,7 @@ using Steamworks; using StgSharp; using StgSharp.Control; +using StgSharp.Linear; using StgSharp.Math; using System; using System.Collections.Generic; @@ -18,7 +19,7 @@ namespace StgSharp.Geometries internal RenderMode _renderMode; internal readonly uint bornTick; - public override Point BasePoint => _basePoint; + public override Point RefOrigin => _basePoint; public override Point RefPoint => _beginPoint; @@ -98,5 +99,10 @@ namespace StgSharp.Geometries { throw new NotImplementedException(); } + + public override Plain GetPlain() + { + throw new ToUpperDimensionException(); + } } } diff --git a/源代码/StgSharp/Geometries/Parallelogram.cs b/源代码/StgSharp/Geometries/Parallelogram.cs index dd83286e..f9863768 100644 --- a/源代码/StgSharp/Geometries/Parallelogram.cs +++ b/源代码/StgSharp/Geometries/Parallelogram.cs @@ -1,4 +1,5 @@ using StgSharp.Control; +using StgSharp.Linear; using StgSharp.Math; using System; using System.Collections.Generic; @@ -15,7 +16,7 @@ namespace StgSharp.Geometries internal RenderMode _renderMode; internal readonly uint bornTick; - public override sealed Point BasePoint => _basePoint; + public override sealed Point RefOrigin => _basePoint; public override sealed Point RefPoint => _center; public override sealed Point RefVec01 => _vertex1; @@ -123,6 +124,10 @@ namespace StgSharp.Geometries return sides; } + public override Plain GetPlain() + { + return new Plain(this._center, this._vertex1,this._vertex2); + } protected vec3d GetVertex3(Counter tick) { diff --git a/源代码/StgSharp/Geometries/Point.cs b/源代码/StgSharp/Geometries/Point.cs index f7b76d77..f6eee237 100644 --- a/源代码/StgSharp/Geometries/Point.cs +++ b/源代码/StgSharp/Geometries/Point.cs @@ -28,17 +28,17 @@ namespace StgSharp.Geometries public bool IsInGeometry(IPlainGeometry geo) { - + throw new NotImplementedException(); } public bool IsInGeometry(IPlainGeometryCombination geo) { - + throw new NotImplementedException(); } - public bool IsInPlain(IPlainGeometry geo) + public bool IsOnPlain(IPlainGeometry geo) { - + return this._position * geo.GetPlain().plainParameter == 1; } } diff --git a/源代码/StgSharp/Geometries/Polygon.cs b/源代码/StgSharp/Geometries/Polygon.cs index f4c9b926..8c4a8725 100644 --- a/源代码/StgSharp/Geometries/Polygon.cs +++ b/源代码/StgSharp/Geometries/Polygon.cs @@ -1,48 +1,132 @@ -using System; +using StgSharp.Linear; +using StgSharp.Math; +using System; using System.Collections.Generic; using System.Numerics; using System.Text; namespace StgSharp.Geometries { - public class Polygon : IPlainGeometryCombination + public class Polygon : IPlainGeometry { - internal Point[] pointsArray; + internal Point _refOrigin; + internal Point[] vertexArray ; + internal RenderMode _renderMode; + internal readonly int _vertexCount; - public Polygon(uint bornTime) : base(bornTime) + public override Point RefOrigin => _refOrigin; + + public override Point RefPoint => vertexArray[0]; + + public override Point RefVec01 => throw new NotImplementedException(); + + public override Point RefVec02 => throw new NotImplementedException(); + + public override RenderMode renderMode => throw new NotImplementedException(); + + internal override void CalcVec01(uint tick) { - + throw new NotImplementedException(); } - public Polygon(int pointNum) + internal override void CalcVec02(vec3d vec, uint tick) { - pointsArray = new Point[pointNum]; - this.toSimpleGeometry(); + throw new NotImplementedException(); } - public Polygon(Point[] pointsArray) + internal override void CalcVec03(vec3d vec, uint tick) { - PointsArray = pointsArray; - this.toSimpleGeometry(); + throw new NotImplementedException(); } - internal override void toSimpleGeometry() + internal override void CalcVec04(vec3d vec, uint tick) { - Point begin = pointsArray[0]; - for (int i = 1; i <= pointsArray.Length; i++) - { - Triangle a = new Triangle(this._bornTick); - this.Add(a); - } - + throw new NotImplementedException(); } - public Point[] PointsArray + internal override void CalcVec05(vec3d vec, uint tick) { - get { return pointsArray; } - set { pointsArray = value; } + throw new NotImplementedException(); } + internal override void CalcVec06(vec3d vec, uint tick) + { + throw new NotImplementedException(); + } + internal override void CalcVec07(vec3d vec, uint tick) + { + throw new NotImplementedException(); + } + + internal override void CalcVec08(vec3d vec, uint tick) + { + throw new NotImplementedException(); + } + + internal override void CalcVec09(vec3d vec, uint tick) + { + throw new NotImplementedException(); + } + + internal override void CalcVec10(vec3d vec, uint tick) + { + throw new NotImplementedException(); + } + + internal override void CalcVec11(vec3d vec, uint tick) + { + throw new NotImplementedException(); + } + + internal override void CalcVec12(vec3d vec, uint tick) + { + throw new NotImplementedException(); + } + + internal override void CalcVec13(vec3d vec, uint tick) + { + throw new NotImplementedException(); + } + + internal override void CalcVec14(vec3d vec, uint tick) + { + throw new NotImplementedException(); + } + + internal override void CalcVec15(vec3d vec, uint tick) + { + throw new NotImplementedException(); + } + + internal override void CalcVec16(vec3d vec, uint tick) + { + throw new NotImplementedException(); + } + + internal override void OnRender(uint tick) + { + throw new NotImplementedException(); + } + + public override float SetArrayX() + { + throw new NotImplementedException(); + } + + public override float SetArrayY() + { + throw new NotImplementedException(); + } + + public override Line[] GetAllSides() + { + throw new NotImplementedException(); + } + + public override Plain GetPlain() + { + throw new NotImplementedException(); + } } } diff --git a/源代码/StgSharp/Geometries/Rectangle.cs b/源代码/StgSharp/Geometries/Rectangle.cs index c28864e1..35c9c397 100644 --- a/源代码/StgSharp/Geometries/Rectangle.cs +++ b/源代码/StgSharp/Geometries/Rectangle.cs @@ -16,7 +16,7 @@ namespace StgSharp.Geometries internal RenderMode _renderMode; internal readonly uint bornTick; - public override sealed Point BasePoint => _basePoint; + public override sealed Point RefOrigin => _basePoint; public override sealed Point RefPoint=>_center; public override sealed Point RefVec01 => _vertex1; @@ -148,7 +148,7 @@ namespace StgSharp.Geometries public override Plain GetPlain() { - return new Plain(_vertex1._position, ); + return new Plain(this._center, this._vertex1,this._vertex2); } protected vec3d GetVertex3(Counter tick) diff --git a/源代码/StgSharp/Geometries/Triangle.cs b/源代码/StgSharp/Geometries/Triangle.cs index 377fad44..0e8682ef 100644 --- a/源代码/StgSharp/Geometries/Triangle.cs +++ b/源代码/StgSharp/Geometries/Triangle.cs @@ -1,4 +1,5 @@ using StgSharp; +using StgSharp.Linear; using StgSharp.Math; using System; using System.Collections.Generic; @@ -16,7 +17,7 @@ namespace StgSharp.Geometries internal RenderMode _renderMode; internal readonly uint bornTick; - public override sealed Point BasePoint => _basePoint; + public override sealed Point RefOrigin => _basePoint; public override sealed Point RefPoint=>_vertex1; @@ -63,8 +64,8 @@ namespace StgSharp.Geometries switch (_renderMode) { case RenderMode.BasePoint: - CalcVec02(BasePoint._position,tick); - CalcVec03(BasePoint._position,tick); + CalcVec02(RefOrigin._position,tick); + CalcVec03(RefOrigin._position,tick); break; case RenderMode.RefPoint: CalcVec02(_vertex1._position,tick); @@ -103,5 +104,11 @@ namespace StgSharp.Geometries return sides; } + + public override Plain GetPlain() + { + return new Plain(this._vertex1,this._vertex2,this._vertex3); + } + } } diff --git a/源代码/StgSharp/Linear/Plain.cs b/源代码/StgSharp/Linear/Plain.cs index 35e25c06..aeba1841 100644 --- a/源代码/StgSharp/Linear/Plain.cs +++ b/源代码/StgSharp/Linear/Plain.cs @@ -8,28 +8,28 @@ namespace StgSharp.Linear { public unsafe class Plain { + internal vec3d origin; internal vec3d vec1; internal vec3d vec2; - internal float a; - internal float b; - internal float c; + internal vec3d plainParameter; internal readonly float d = -1 ; - public Plain(vec3d origin, vec3d v1, vec3d v2) + public Plain(vec3d o, vec3d v1, vec3d v2) { - vec1 = v1 - v2 * (v1.Y/v2.Y); //计算平面在xz平面上的方向投影 - vec2 = v2 - vec1 * (v2.X/v1.X); //计算平面在yz平面上的方向投影 + this.origin = o; + this.vec1 = v1 - v2 * (v1.Y/v2.Y); //计算平面在xz平面上的方向投影 + this.vec2 = v2 - vec1 * (v2.X/v1.X); //计算平面在yz平面上的方向投影 - //|origin|-k1*|vec1|-k2*|vec2|计算c; - c = origin.Z - vec1.Z * (origin.X / vec1.X) - vec2.Z * (origin.Y / vec2.Y); - //根据c和对应的方向矢量计算a和b - a = vec1.X * (vec1.Z / c); - b = vec2.Y * (vec2.Z / c); + //|origin|-k1*|vec1|-k2*|vec2|计算plainParameter.Z; + plainParameter.Z = origin.Z - vec1.Z * (origin.X / vec1.X) - vec2.Z * (origin.Y / vec2.Y); + //根据plainParameter.Z和对应的方向矢量计算plainParameter.X和plainParameter.Y + plainParameter.X = vec1.X * (vec1.Z / plainParameter.Z); + plainParameter.Y = vec2.Y * (vec2.Z / plainParameter.Z); - a = 1 / a; - b = 1 / b; - c = 1 / c; + plainParameter.X = 1 / plainParameter.X; + plainParameter.Y = 1 / plainParameter.Y; + plainParameter.Z = 1 / plainParameter.Z; } public Plain(Point p1, Point p2, Point p3) @@ -42,15 +42,15 @@ namespace StgSharp.Linear vec1 = v1 - v2 * (v1.Y / v2.Y); //计算平面在xz平面上的方向投影 vec2 = v2 - vec1 * (v2.X / v1.X); //计算平面在yz平面上的方向投影 - //|origin|-k1*|vec1|-k2*|vec2|计算c; - c = origin.Z - vec1.Z * (origin.X / vec1.X) - vec2.Z * (origin.Y / vec2.Y); - //根据c和对应的方向矢量计算a和b - a = vec1.X * (vec1.Z / c); - b = vec2.Y * (vec2.Z / c); + //|origin|-k1*|vec1|-k2*|vec2|计算plainParameter.Z; + plainParameter.Z = origin.Z - vec1.Z * (origin.X / vec1.X) - vec2.Z * (origin.Y / vec2.Y); + //根据plainParameter.Z和对应的方向矢量计算plainParameter.X和plainParameter.Y + plainParameter.X = vec1.X * (vec1.Z / plainParameter.Z); + plainParameter.Y = vec2.Y * (vec2.Z / plainParameter.Z); - a = 1 / a; - b = 1 / b; - c = 1 / c; + plainParameter.X = 1 / plainParameter.X; + plainParameter.Y = 1 / plainParameter.Y; + plainParameter.Z = 1 / plainParameter.Z; } } diff --git a/源代码/StgSharp/obj/Debug/netstandard2.1/StgSharp.csproj.CoreCompileInputs.cache b/源代码/StgSharp/obj/Debug/netstandard2.1/StgSharp.csproj.CoreCompileInputs.cache index 4096f5f2..8dc5d867 100644 --- a/源代码/StgSharp/obj/Debug/netstandard2.1/StgSharp.csproj.CoreCompileInputs.cache +++ b/源代码/StgSharp/obj/Debug/netstandard2.1/StgSharp.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -ce46d1bdaa8770ceaaf7ed3e62af2643adc523f6 +ff849decdf788400d580af0a2c6cad5f58d8e017