protected override void Solve() { //提取所有拓樸點 PointD[] allTopoPoints = new PointD[this.TopoFace1.Points.Length + this.TopoFace2.Points.Length]; Vector[] allTopoPointNormals = new Vector[this.TopoFace1.Normals.Length + this.TopoFace2.Normals.Length]; int index; index = 0; foreach (var item in this.TopoFace1.Points) { allTopoPoints[index] = item; index++; } foreach (var item in this.TopoFace2.Points) { allTopoPoints[index] = item; index++; } index = 0; foreach (var item in this.TopoFace1.Normals) { allTopoPointNormals[index] = item; index++; } foreach (var item in this.TopoFace2.Normals) { allTopoPointNormals[index] = item; index++; } //劃分計算範圍 List<int> sliceIndex = new List<int>(); for (int i = 0; i < this.ThreadNumber + 1; i++) sliceIndex.Add((int)(((double)i * (double)allTopoPoints.Length) / (double)this.ThreadNumber)); //建立獨立執行序物件 for (int i = 0; i < this.ThreadNumber; i++) { //取出計算範圍內的點 PointD[] PartoalPoints = new PointD[sliceIndex[i + 1] - sliceIndex[i]]; for (int j = 0; j < sliceIndex[i + 1] - sliceIndex[i]; j++) PartoalPoints[j] = allTopoPoints[j + sliceIndex[i]]; Vector[] PartoalNormals = new Vector[sliceIndex[i + 1] - sliceIndex[i]]; for (int j = 0; j < sliceIndex[i + 1] - sliceIndex[i]; j++) PartoalNormals[j] = allTopoPointNormals[j + sliceIndex[i]]; //建立物件 STLMeasuringTool_CMM aSTLMeasuringTool_CMM = new STLMeasuringTool_CMM() { STL2Measure = this.STL2Measure, STLCubicClassifier = this.STLCubicClassifier, MeasurePoints = PartoalPoints.ToList(), MeasurePointNormals = PartoalNormals.ToList(), }; aSTLMeasuringTool_CMM.PercentageChanged += this.OnThreadPercentageChanged; aSTLMeasuringTool_CMM.OnFinish += this.OnThreadFinished; STLMeasurent_Objects.Add(aSTLMeasuringTool_CMM); } this.StartTime = DateTime.Now; foreach (var aThreadObject in STLMeasurent_Objects) { aThreadObject.PercentageChanged += OnThreadPercentageChanged; aThreadObject.StartMeasure(); } }
protected override void Solve() { //提取所有拓樸點 PointD[] allTopoPoints = new PointD[this.TopoFace1.Points.Length + this.TopoFace2.Points.Length]; Vector[] allTopoPointNormals = new Vector[this.TopoFace1.Normals.Length + this.TopoFace2.Normals.Length]; int index; index = 0; foreach (var item in this.TopoFace1.Points) { allTopoPoints[index] = item; index++; } foreach (var item in this.TopoFace2.Points) { allTopoPoints[index] = item; index++; } index = 0; foreach (var item in this.TopoFace1.Normals) { allTopoPointNormals[index] = item; index++; } foreach (var item in this.TopoFace2.Normals) { allTopoPointNormals[index] = item; index++; } //劃分計算範圍 List <int> sliceIndex = new List <int>(); for (int i = 0; i < this.ThreadNumber + 1; i++) { sliceIndex.Add((int)(((double)i * (double)allTopoPoints.Length) / (double)this.ThreadNumber)); } //建立獨立執行序物件 for (int i = 0; i < this.ThreadNumber; i++) { //取出計算範圍內的點 PointD[] PartoalPoints = new PointD[sliceIndex[i + 1] - sliceIndex[i]]; for (int j = 0; j < sliceIndex[i + 1] - sliceIndex[i]; j++) { PartoalPoints[j] = allTopoPoints[j + sliceIndex[i]]; } Vector[] PartoalNormals = new Vector[sliceIndex[i + 1] - sliceIndex[i]]; for (int j = 0; j < sliceIndex[i + 1] - sliceIndex[i]; j++) { PartoalNormals[j] = allTopoPointNormals[j + sliceIndex[i]]; } //建立物件 STLMeasuringTool_CMM aSTLMeasuringTool_CMM = new STLMeasuringTool_CMM() { STL2Measure = this.STL2Measure, STLCubicClassifier = this.STLCubicClassifier, MeasurePoints = PartoalPoints.ToList(), MeasurePointNormals = PartoalNormals.ToList(), }; aSTLMeasuringTool_CMM.PercentageChanged += this.OnThreadPercentageChanged; aSTLMeasuringTool_CMM.OnFinish += this.OnThreadFinished; STLMeasurent_Objects.Add(aSTLMeasuringTool_CMM); } this.StartTime = DateTime.Now; foreach (var aThreadObject in STLMeasurent_Objects) { aThreadObject.PercentageChanged += OnThreadPercentageChanged; aThreadObject.StartMeasure(); } }