From 33d762c7e526052db09c2f3f010f467e07da9393 Mon Sep 17 00:00:00 2001
From: vahrenkamp <vahrenkamp@042f3d55-54a8-47e9-b7fb-15903f145c44>
Date: Fri, 22 Feb 2013 13:10:12 +0000
Subject: [PATCH] Bugfix: CollisionCheck without id pointer caused segfault.
 Added NULL check.

git-svn-id: http://svn.code.sf.net/p/simox/code/trunk@366 042f3d55-54a8-47e9-b7fb-15903f145c44
---
 .../PQP/CollisionCheckerPQP.cpp               | 27 ++---------
 .../PQP/CollisionModelPQP.cpp                 | 45 -------------------
 .../CollisionDetection/PQP/PQP++/PQP.cpp      |  4 +-
 3 files changed, 6 insertions(+), 70 deletions(-)

diff --git a/VirtualRobot/CollisionDetection/PQP/CollisionCheckerPQP.cpp b/VirtualRobot/CollisionDetection/PQP/CollisionCheckerPQP.cpp
index ef8a11ffe..dfb332d3d 100644
--- a/VirtualRobot/CollisionDetection/PQP/CollisionCheckerPQP.cpp
+++ b/VirtualRobot/CollisionDetection/PQP/CollisionCheckerPQP.cpp
@@ -37,31 +37,10 @@ float CollisionCheckerPQP::calculateDistance (CollisionModelPtr model1, Collisio
 	VR_ASSERT_MESSAGE(m1&&m2,"NULL data in ColChecker!");
 
 	float res = getMinDistance(m1,m2,model1->getCollisionModelImplementation()->getGlobalPose(),model2->getCollisionModelImplementation()->getGlobalPose(),P1,P2,trID1,trID2);
-	/*if (model1->hasCollisionId(*trID2) && !model1->hasCollisionId(*trID1))
-	{
-		// xchange points
-		int t = *trID1;
-		*trID1 = *trID2;
-		*trID2 = t;
-		float p[3];
-		for (int i=0;i<3;i++)
-		{
-			p[i] = P1[i];
-			P1[i] = P2[i];
-			P2[i] = p[i];
-		}
-	}*/
 
 	return res;
 }
 
-
-// #define __convEigen42Ar(sb,rot,tr) rot[0][0] = sb[0][0]; rot[1][0] = sb[0][1]; rot[2][0] = sb[0][2]; tr[0] = sb[3][0]; \
-// 	rot[0][1] = sb[1][0]; rot[1][1] = sb[1][1]; rot[2][1] = sb[1][2]; tr[1] = sb[3][1]; \
-// 	rot[0][2] = sb[2][0]; rot[1][2] = sb[2][1]; rot[2][2] = sb[2][2]; tr[2] = sb[3][2];
-// #define __convSb2Ar4(sb,mat4) mat4[0][0] = sb[0][0]; mat4[0][1] = sb[1][0]; mat4[0][2] = sb[2][0]; mat4[0][3] = sb[3][0]; \
-// 	mat4[1][0] = sb[0][1]; mat4[1][1] = sb[1][1]; mat4[1][2] = sb[2][1]; mat4[1][3] = sb[3][1]; \
-// 	mat4[2][0] = sb[0][2]; mat4[2][1] = sb[1][2]; mat4[2][2] = sb[2][2]; mat4[2][3] = sb[3][2];
 #define __convEigen2Ar(sb,rot,tr) rot[0][0] = sb(0,0); rot[0][1] = sb(0,1); rot[0][2] = sb(0,2); tr[0] = sb(0,3); \
 	rot[1][0] = sb(1,0); rot[1][1] = sb(1,1); rot[1][2] = sb(1,2); tr[1] = sb(1,3); \
 	rot[2][0] = sb(2,0); rot[2][1] = sb(2,1); rot[2][2] = sb(2,2); tr[2] = sb(2,3);
@@ -222,8 +201,10 @@ float CollisionCheckerPQP::getMinDistance(boost::shared_ptr<PQP::PQP_Model> m1,
 	storeP2[2] = (float)result.P2()[2];
 
 	// added code to store iDs to original PQP sources, if you get an error here, disable the ID query
-	*storeID1 = result.P1_ID();
-	*storeID2 = result.P2_ID();
+	if (storeID1)
+		*storeID1 = result.P1_ID();
+	if (storeID2)
+		*storeID2 = result.P2_ID();
 	//////////////////////////////
 
 	return (float)result.Distance();
diff --git a/VirtualRobot/CollisionDetection/PQP/CollisionModelPQP.cpp b/VirtualRobot/CollisionDetection/PQP/CollisionModelPQP.cpp
index b5d45b924..6da416fb4 100644
--- a/VirtualRobot/CollisionDetection/PQP/CollisionModelPQP.cpp
+++ b/VirtualRobot/CollisionDetection/PQP/CollisionModelPQP.cpp
@@ -99,49 +99,4 @@ void CollisionModelPQP::print()
 	cout << endl;
 }
 
-/*
-int CollisionModelPQP::BuildColModel(std::map<SoNode*,int> &mIVIDMapping, std::vector<int> & vStoreIDs, SoSeparator *pAddIVModel)
-{
-	if (!m_pColCheckerPQP)
-		return 0;
-	int nodeCount = 0;
-	//int idNr = s_nID;
-	int trNr = 0;
-
-	delete m_pPqpModel;
-	m_pPqpModel = new PQP::PQP_Model();
-	m_pPqpModel->BeginModel();
-	
-	// add iv models
-
-	std::map<SoNode*,int>::iterator iter;
-	SoNode* pNode;
-	int nId;
-
-	for (iter = mIVIDMapping.begin(); iter != mIVIDMapping.end(); ++iter)
-	{
-		nodeCount++;
-		pNode = iter->first;
-		nId = iter->second;
-
-		if (pNode!=NULL)
-		{
-			int trrr = m_pColCheckerPQP->oiv2ColMod(pNode,m_pPqpModel,nId,true);
-			vStoreIDs.push_back(nId);
-			pAddIVModel->addChild(pNode);
-			if (trrr==0)
-			{
-				cout << __FUNCTION__ << " Null triangle object with ID " << nId << endl;
-			} else
-			{
-				trNr += trrr;
-			}
-		}
-	}
-
-	m_pPqpModel->EndModel();
-	return trNr;
-
-}*/
-
 } // namespace
diff --git a/VirtualRobot/CollisionDetection/PQP/PQP++/PQP.cpp b/VirtualRobot/CollisionDetection/PQP/PQP++/PQP.cpp
index ce1cc5014..499742787 100644
--- a/VirtualRobot/CollisionDetection/PQP/PQP++/PQP.cpp
+++ b/VirtualRobot/CollisionDetection/PQP/PQP++/PQP.cpp
@@ -256,9 +256,9 @@ PQP_Model::MemUsage(int msg)
   if (msg) 
   {
     //fprintf(stderr,"Total for model %x: %d bytes\n", (unsigned int)this, total_mem);
-    fprintf(stderr,"BVs: %d alloced, take %d bytes each\n", 
+    fprintf(stderr,"BVs: %d alloced, take %zu bytes each\n", 
             num_bvs, sizeof(BV));
-    fprintf(stderr,"Tris: %d alloced, take %d bytes each\n", 
+    fprintf(stderr,"Tris: %d alloced, take %zu bytes each\n", 
             num_tris, sizeof(Tri));
   }
   
-- 
GitLab