Kaynağa Gözat

except all the invalid particles when do GB calculating.

gsp 2 yıl önce
ebeveyn
işleme
c0311ba0b3
1 değiştirilmiş dosya ile 67 ekleme ve 52 silme
  1. 67 52
      OTSCPP/OTSRptCalculate/GBCal/GBFieldData.cpp

+ 67 - 52
OTSCPP/OTSRptCalculate/GBCal/GBFieldData.cpp

@@ -110,7 +110,15 @@ namespace OTSGBCalculate
 		}
 		else
 		{
-			return *adjacentPart;
+			if ((*adjacentPart)->GetType() != OTS_PARTCLE_TYPE::INVALID)
+			{
+				return *adjacentPart;
+			}
+			else
+			{
+				return nullptr;
+			}
+			
 		}
 	}
 #pragma endregion
@@ -271,7 +279,10 @@ namespace OTSGBCalculate
 		mapAllParticles.clear();
 		for (auto pParticle : m_listParticles)
 		{	// compute length width ratio
-
+			if (pParticle->GetType() == OTS_PARTICLE_TYPE::INVALID)//here we take all the particles except Invalid.
+			{
+				continue;
+			}
 			auto w = pParticle->GetDMin();
 		
 			if (w == 0)
@@ -341,10 +352,9 @@ namespace OTSGBCalculate
 				if (dFeretDiameter >= 13)
 				{
 					// DS		
-					if (pParticle->GetType() != OTS_PARTICLE_TYPE::INVALID)//here we take all the particles except Invalid
-					{
+					
 						listDSParticles.push_back(pParticle);
-					}
+					
 				}
 				else
 				{
@@ -374,12 +384,11 @@ namespace OTSGBCalculate
 					else
 					{
 						// B or D
-						if (pParticle->GetType() != OTS_PARTICLE_TYPE::INVALID)//here we take all the particles 
-						{
+						
 							GBParticle gbP = GBParticle(pParticle, GB_LEVEL_TYPE::INVALID, GB_WIDTH_TYPE::INVALID);
 							//不能确定是B或D,先设为INVALID
 							listBAndDParticles.push_back(gbP);
-						}
+						
 						
 					}
 					
@@ -519,7 +528,10 @@ namespace OTSGBCalculate
 		// get all the all particles for each level		
 		for (auto pParticle : m_listParticles)
 		{
-			
+			if (pParticle->GetType() == OTS_PARTICLE_TYPE::INVALID)//here we take all the particles except Invalid.
+			{
+				continue;
+			}
 			//check the denominator is zero or not
 			auto w = pParticle->GetDMin();
 
@@ -542,55 +554,57 @@ namespace OTSGBCalculate
 				if (dFeretDiameter >= 13)
 				{
 					// DS			
-					if (pParticle->GetType() != OTS_PARTICLE_TYPE::INVALID)//here we take all the particles except Invalid.
-					{
+					
 						listDSParticles.push_back(pParticle);
-					}
+				
 					
 				}
 				else
 				{
 					//  D or Dsulfide
 					auto p = FindAdjacentParticle(pParticle, m_listParticles);
+					
 					if (p == nullptr)//pParticle is a isolated particle.
 					{
-						GB_CHEMICAL_TYPE ChemicalType = pParticle->GetChemicalType();
-						if (ChemicalType == GB_CHEMICAL_TYPE::CHE_S)
-						{
-							auto  wt = this->CaculateLevelWidth(pParticle, GB_LEVEL_TYPE::DSulfide_TYPE);
-							switch (wt)
+						
+						
+							GB_CHEMICAL_TYPE ChemicalType = pParticle->GetChemicalType();
+							if (ChemicalType == GB_CHEMICAL_TYPE::CHE_S)
 							{
-							case GB_WIDTH_TYPE::THIN:
-								listDSulfideThinParticles.push_back(pParticle);
-								break;
-							case GB_WIDTH_TYPE::WIDE:
-								listDSulfideWideParticles.push_back(pParticle);
-								break;
-							case GB_WIDTH_TYPE::SUPER:
-								listDSulfideSuperParticles.push_back(pParticle);
-								break;
+								auto  wt = this->CaculateLevelWidth(pParticle, GB_LEVEL_TYPE::DSulfide_TYPE);
+								switch (wt)
+								{
+								case GB_WIDTH_TYPE::THIN:
+									listDSulfideThinParticles.push_back(pParticle);
+									break;
+								case GB_WIDTH_TYPE::WIDE:
+									listDSulfideWideParticles.push_back(pParticle);
+									break;
+								case GB_WIDTH_TYPE::SUPER:
+									listDSulfideSuperParticles.push_back(pParticle);
+									break;
+								}
+								mapAllParticles[pParticle] = GBParticle(pParticle, GB_LEVEL_TYPE::DSulfide_TYPE, wt);
 							}
-							mapAllParticles[pParticle] = GBParticle(pParticle, GB_LEVEL_TYPE::DSulfide_TYPE, wt);
-
-						}
-						else
-						{
-							auto  wt = this->CaculateLevelWidth(pParticle, GB_LEVEL_TYPE::D_TYPE);
-							switch (wt)
+							else
 							{
-							case GB_WIDTH_TYPE::THIN:
-								listDThinParticles.push_back(pParticle);
-								break;
-							case GB_WIDTH_TYPE::WIDE:
-								listDWideParticles.push_back(pParticle);
-								break;
-							case GB_WIDTH_TYPE::SUPER:
-								listDSuperParticles.push_back(pParticle);
-								break;
-							}
-							mapAllParticles[pParticle] = GBParticle(pParticle, GB_LEVEL_TYPE::D_TYPE, wt);
+								auto  wt = this->CaculateLevelWidth(pParticle, GB_LEVEL_TYPE::D_TYPE);
+								switch (wt)
+								{
+								case GB_WIDTH_TYPE::THIN:
+									listDThinParticles.push_back(pParticle);
+									break;
+								case GB_WIDTH_TYPE::WIDE:
+									listDWideParticles.push_back(pParticle);
+									break;
+								case GB_WIDTH_TYPE::SUPER:
+									listDSuperParticles.push_back(pParticle);
+									break;
+								}
+								mapAllParticles[pParticle] = GBParticle(pParticle, GB_LEVEL_TYPE::D_TYPE, wt);
 
-						}
+							}
+						
 					}
 					else
 					{
@@ -688,7 +702,10 @@ namespace OTSGBCalculate
 		mapAllParticles.clear();
 		for (auto pParticle : m_listParticles)
 		{	// compute length width ratio
-
+			if (pParticle->GetType() == OTS_PARTICLE_TYPE::INVALID)//here we take all the particles except Invalid.
+			{
+				continue;
+			}
 			auto w = pParticle->GetDMin();
 
 			if (w == 0)
@@ -759,21 +776,19 @@ namespace OTSGBCalculate
 				if (dFeretDiameter >= 13)
 				{
 					// DS					
-					if (pParticle->GetType() != OTS_PARTICLE_TYPE::INVALID)//here we take all the particles 
-					{
+					
 						listDSParticles.push_back(pParticle);
-					}
+					
 					
 				}
 				else
 				{
 					// B or D
-					if (pParticle->GetChemicalType() != GB_CHEMICAL_TYPE::INVALID)//here we take all the particles 
-					{
+					
 						GBParticle gbP = GBParticle(pParticle, GB_LEVEL_TYPE::INVALID, GB_WIDTH_TYPE::INVALID);
 						//不能确定是B或D,先设为INVALID
 						listBAndDParticles.push_back(gbP);
-					}
+					
 
 				}
 			}