Jelajahi Sumber

improve the RemoveDuplicateOverlapParticles algorithm

gsp 1 tahun lalu
induk
melakukan
d5a23f0e83
1 mengubah file dengan 24 tambahan dan 2 penghapusan
  1. 24 2
      OTSIncAMeasureApp/0-OTSModel/OTSDataType/COTSField.cs

+ 24 - 2
OTSIncAMeasureApp/0-OTSModel/OTSDataType/COTSField.cs

@@ -209,8 +209,18 @@ namespace OTSDataType
             var leftparts = this.GetSideParticlesByOverlap(SORTING_DIRECTION.LEFT, overlap);
             if (leftField != null && leftField.measureSequence < this.measureSequence)
             {
-
                 var rightsideparts = leftField.GetSideParticlesByOverlap(SORTING_DIRECTION.RIGHT, overlap);
+                if (leftField.upField != null && leftField.upField.measureSequence < this.measureSequence)//include the left up corner parts
+                {
+                    var leftupParts = leftField.upField.GetSideParticlesByOverlap(SORTING_DIRECTION.RIGHT, overlap);
+                    rightsideparts.AddRange(leftupParts);
+                }
+                if (leftField.downField != null && leftField.downField.measureSequence < this.measureSequence)//include the left down corner parts
+                {
+                    var leftdownParts = leftField.downField.GetSideParticlesByOverlap(SORTING_DIRECTION.RIGHT, overlap);
+                    rightsideparts.AddRange(leftdownParts);
+                }
+
                 log.Info("left side particles num:" + leftparts.Count.ToString());
                 foreach (var p in leftparts)
                 {
@@ -251,6 +261,8 @@ namespace OTSDataType
             {
 
                 var othersideparts = upField.GetSideParticlesByOverlap(SORTING_DIRECTION.DOWN, overlap);
+
+
                 log.Info("up side particles num:" + upparts.Count.ToString());
                 foreach (var p in upparts)
                 {
@@ -293,9 +305,19 @@ namespace OTSDataType
             var rightparts = this.GetSideParticlesByOverlap(SORTING_DIRECTION.RIGHT, overlap);
             if (rightField != null && rightField.measureSequence < this.measureSequence)
             {
-
                 log.Info("right side particles num:" + rightparts.Count.ToString());
                 var othersideparts = rightField.GetSideParticlesByOverlap(SORTING_DIRECTION.LEFT, overlap);
+                if (rightField.upField != null && rightField.upField.measureSequence < this.measureSequence)// right up corner parts
+                {
+                    var rightupParts = rightField.upField.GetSideParticlesByOverlap(SORTING_DIRECTION.LEFT, overlap);
+                    othersideparts.AddRange(rightupParts);
+                }
+                if (rightField.downField != null && leftField.downField.measureSequence < this.measureSequence)// rightdown corner parts
+                {
+                    var rightdownParts = leftField.downField.GetSideParticlesByOverlap(SORTING_DIRECTION.LEFT, overlap);
+                    othersideparts.AddRange(rightdownParts);
+                }
+
                 foreach (var p in rightparts)
                 {
                     int pleft = 0, pright = 0, ptop = 0, pbottom = 0;