瀏覽代碼

fix the feature mode bug.

gsp 3 年之前
父節點
當前提交
f5c0ddc64d
共有 2 個文件被更改,包括 20 次插入35 次删除
  1. 11 10
      OTSCPP/OTSClrInterface/ControlClr/OTSControlFunExport.cpp
  2. 9 25
      OTSCPP/OTSControl/Bruker/OTSBrukerImpl.cpp

+ 11 - 10
OTSCPP/OTSClrInterface/ControlClr/OTSControlFunExport.cpp

@@ -230,18 +230,17 @@ namespace OTSCLRINTERFACE
 		{
 			auto feature = features[i]->GetOTSFeaturePtr();
 			auto otsSegs = feature->GetSegmentsList();
-			//auto otsSegs = feature->GetSegmentsList();
-			//std::vector<BrukerSegment*> listSegment;
+		
 			BrukerSegment* segArray = new BrukerSegment[otsSegs.size()];
 			for (int j = 0; j < otsSegs.size(); j++)
 			{
 				auto seg = otsSegs[j];
-				//BrukerSegment* oSegment=new BrukerSegment();
+				
 				BrukerSegment* oSegment = &segArray[j];
 				oSegment->XCount = seg->GetLength();
 				oSegment->XStart = seg->GetStart();
 				oSegment->Y = seg->GetHeight();
-				//listSegment.push_back(oSegment);
+				
 			}
 			BrukerFeature oFeature;
 			oFeature.SegmentCount = otsSegs.size();
@@ -268,7 +267,7 @@ namespace OTSCLRINTERFACE
 			{
 				a_XrayData[i][j] = xrd[j];
 			}
-			
+			delete listFeatures[i].pSegment;// using the pure pointer increase the understandability but bring another problem: you mast not forget to free the pointer or you involve into memory leak!
 		}
 
 		if (bQuant)
@@ -300,29 +299,29 @@ namespace OTSCLRINTERFACE
 		long xraynum = parts->Length;
 		for (int i = 0; i < xraynum; i++)
 		{
-			//CPosXrayPtr pXRayPoint = CPosXrayPtr(new CPosXray());
+			
 
 			CPosXrayPtr pXRayPoint = parts[i]->GetXray()->GetPosXrayPtr();
 			listXRayPoints.push_back(pXRayPoint);
 		}
 		
-		//std::vector<std::vector<BrukerSegment>>listFeatures;
+		
 		std::vector<BrukerFeature>listFeatures;
 		for (int i = 0; i < xraynum; i++)
 		{
 			auto feature = parts[i]->GetOTSParticlePtr()->GetFeature();
 			auto otsSegs = feature->GetSegmentsList();
-			//std::vector<BrukerSegment*> listSegment;
+			
 			BrukerSegment* segArray = new BrukerSegment[otsSegs.size()];
 			for (int j = 0; j < otsSegs.size(); j++)
 			{
 				auto seg = otsSegs[j];
-				//BrukerSegment* oSegment=new BrukerSegment();
+			
 				BrukerSegment* oSegment = &segArray[j];
 				oSegment->XCount = seg->GetLength();
 				oSegment->XStart = seg->GetStart();
 				oSegment->Y = seg->GetHeight();
-				//listSegment.push_back(oSegment);
+			
 			}
 			BrukerFeature oFeature;
 			oFeature.SegmentCount = otsSegs.size();
@@ -348,6 +347,8 @@ namespace OTSCLRINTERFACE
 
 			auto part = parts[i]->GetOTSParticlePtr();
 			part->SetXrayInfo(listXRayPoints[i]);
+
+			delete listFeatures[i].pSegment;// using the pure pointer increase the understandability but bring another problem: you mast not forget to free the pointer or you involve into memory leak!
 		}
 
 		

+ 9 - 25
OTSCPP/OTSControl/Bruker/OTSBrukerImpl.cpp

@@ -3125,13 +3125,7 @@ BOOL COTSBrukerImpl::GetXRayByFeatures(CPosXraysList& a_vXPoints, std::vector<Br
 		return FALSE;
 	}
 
-	// set SEM to external
-	//if (!SetSEMExternalOn())
-	//{
-	//	// failed to call SetSEMExternalOn method
-	//	LogTrace(__FILE__, __LINE__, _T("COTSBrukerImpl::CollectXRayPointsByFeatures: failed to call SetSEMExternalOn method."));
-	//	return FALSE;
-	//}
+
 
 	// create array of BrukerSegment
 	long nCollectCount = (long)a_vXPoints.size();
@@ -3139,28 +3133,18 @@ BOOL COTSBrukerImpl::GetXRayByFeatures(CPosXraysList& a_vXPoints, std::vector<Br
 
 	// added by Jieshi 23/08/2017
 	WORD* pixelTimes(new WORD[nCollectCount]);
-	//BrukerFeature* features(new BrukerFeature[nCollectCount]);
+	BrukerFeature* features(new BrukerFeature[nCollectCount]);
 	std::vector<BrukerSegment> extraSegments;
 	for (size_t i = 0; i < a_vXPoints.size(); i++)
 	{
-		//features[i].SegmentCount = (long)a_vFeatures[i].size();
+		features[i].SegmentCount = (long)a_vFeatures[i].SegmentCount;
 		if (a_vFeatures[i].SegmentCount > 0)
 		{
-			//features[i].pSegment = &a_vFeatures[i][0];
+			features[i].pSegment = a_vFeatures[i].pSegment;
 
 			// calculate pixel time
 			int nPixelCount = 0;
-		/*	for (int j = 0; j < features[i].SegmentCount; j++)
-			{
-				nPixelCount += features[i].pSegment[j].XCount;
-			}
-
-			pixelTimes[i] = (WORD)(a_nACTimeMS * 1000 / nPixelCount);*///¾É·½·¨ÓдíÎó  added by zty. because not using ceil function ,the result may be 0.
-
-			/*for (size_t j = 0; j < a_vFeatures[i].size(); j++)
-			{
-				nPixelCount += a_vFeatures[i][j].XCount;
-			}*/
+	
 
 			for (int j = 0; j < a_vFeatures[i].SegmentCount; j++)
 			{
@@ -3182,12 +3166,12 @@ BOOL COTSBrukerImpl::GetXRayByFeatures(CPosXraysList& a_vXPoints, std::vector<Br
 			features[i].pSegment = &extraSegments[extraSegments.size() - 1];
 
 			pixelTimes[i] = (WORD)(a_nACTimeMS * 1000);
-			delete[] features;
+			
 		}
 	}
 
 	// ask bruker to collect a set of x-ray data
-	if (!StartFeatureListMeasurement(nCollectCount, &a_vFeatures[0], pixelTimes))
+	if (!StartFeatureListMeasurement(nCollectCount, features, pixelTimes))
 	{
 		// failed to call StartFeatureListMeasurement method
 		LogErrorTrace(__FILE__, __LINE__, _T("COTSBrukerImpl::CollectXRayPointsByFeatures: failed to call StartFeatureListMeasurement method."));
@@ -3202,8 +3186,8 @@ BOOL COTSBrukerImpl::GetXRayByFeatures(CPosXraysList& a_vXPoints, std::vector<Br
 		return FALSE;
 	}
 	delete[] pixelTimes;
-	//delete[] features;
-	// ok, return TRUE
+	delete[] features;
+	
 	return TRUE;
 }