Browse Source

修改拼接颗粒重复计数的bug

cxs 1 year ago
parent
commit
e73bd3dca3

+ 17 - 2
OTSCPP/OTSImagePro/OTSImageProcess.cpp

@@ -2007,11 +2007,22 @@ namespace OTSIMGPROC
 			
 			static std::vector<CBorderPartPtr> ConvertPartToBorderPart(COTSParticleList parts)
 			{
+				static std::map<COTSParticle*, CBorderPartPtr> allborderPart;
 				std::vector<CBorderPartPtr> borderParts;
+
 				for (auto p : parts)
 				{
-					borderParts.push_back(CBorderPartPtr(new BorderPart(p)));
-
+					if (allborderPart.find(p.get()) == allborderPart.end())
+					{
+						auto borderp = CBorderPartPtr(new BorderPart(p));
+						borderParts.push_back(borderp);
+						allborderPart[p.get()] = borderp;
+					}
+					else
+					{
+						borderParts.push_back(allborderPart[p.get()]);
+					}
+					
 				}
 				return borderParts;
 			
@@ -2211,6 +2222,10 @@ namespace OTSIMGPROC
 
 			}
 		}
+		/*for (auto particle : mapMergeParticles)
+		{
+			
+		}*/
 		static int partTagId;
 		for (auto pair : mapMergeParticles)
 		{

+ 41 - 0
OTSIncAReportApp/1-UI/Control_Grids/ParticlesGridDevidePage.cs

@@ -342,10 +342,20 @@ namespace OTSIncAReportGrids
                 {
                     //particlesAll = Particledata.GetInfoForPartucleDevidePage2(condition);
                     particlesAll = Particledata.GetInfoForPartucleDevidePage_analyticalParticle(condition);
+                    DataTable mergeParticles = Particledata.GetInfoForPartucleDevidePage_mergeParticles(condition);
+                    if(mergeParticles!=null&& mergeParticles.Rows.Count>0)
+                    {
+                        RemoveMergeParticles(ref particlesAll, mergeParticles);
+                    }
                 }
                 if (sel == (int)SelItem.otherParticles)
                 {
                     particlesAll = Particledata.GetInfoForPartucleDevidePage_otherParticle(condition);
+                    DataTable mergeParticles = Particledata.GetInfoForPartucleDevidePage_mergeParticles(condition);
+                    if (mergeParticles != null && mergeParticles.Rows.Count > 0)
+                    {
+                        RemoveMergeParticles(ref particlesAll, mergeParticles);
+                    }
                 }
                 if (sel == (int)SelItem.MergeParticles)
                 {
@@ -2478,6 +2488,37 @@ namespace OTSIncAReportGrids
                 }
             }
         }
+        /// <summary>
+        /// 去除拼接颗粒组成颗粒
+        /// </summary>
+        /// <param name="dataTable_Particle"></param>
+        /// <param name="dataTable_MergeParticles"></param>
+        void RemoveMergeParticles(ref DataTable dataTable_Particle, DataTable dataTable_MergeParticles)
+        {
+            foreach (DataRow row in dataTable_Particle.Rows)
+            {
+                foreach (DataRow MergeParticlesRow in dataTable_MergeParticles.Rows)
+                {
+                    string subt = MergeParticlesRow["SubParticles"].ToString();
+                    string[] sub = subt.Split(',');
+                    if (row.RowState == DataRowState.Deleted)
+                    {
+                        break;
+                    }
+                    if (row["fieldid"].ToString() == Convert.ToString(sub[0]).Split(':')[0] && row["ParticleId"].ToString() == Convert.ToString(sub[0]).Split(':')[1])
+                    {
+                        row.Delete();
+                        break;
+                    }
+                    if (row["fieldid"].ToString() == Convert.ToString(sub[1]).Split(':')[0] && row["ParticleId"].ToString() == Convert.ToString(sub[1]).Split(':')[1])
+                    {
+                        row.Delete();
+                        break; ;
+                    }
+                }
+            }
+            dataTable_Particle.AcceptChanges();
+        }
     }
 }