void VoxelTree::filterTriangles(Array<int> *selTris, const Array<int> &srcTris, const Surface &sur, const Point3D &pMin, float edgeLength){ selTris->setSize(0); int numTris = srcTris.getSize(); for (int i = 0; i < numTris; i++){ // get triangle int tNum = srcTris.index(i); const Surface::Triangle *tri = &sur.triangles.index(tNum); // get vertices Point3D pTri[3]; for (int j = 0; j < 3; j++) pTri[j] = sur.vertices.index(tri->v[j]).p; if (overlapTest(pMin, edgeLength, pTri)) selTris->addItem() = tNum; } }
bool face_face_test(Polygon* face1, Polygon* face2, double* face1_trans, double* face2_trans, Feature* &f){ if( parallelFaceFace(face1, face2, face1_trans, face2_trans) ) { return overlapTest(face1, face2,face1_trans,face2_trans, f); } Vertex p_closest; double min_dist = closestPointFace(face1->vertices[0], face2, face1_trans, face2_trans, p_closest); Vertex p_temp; for(int i=1;i<face1->vertex_count;i++){ double temp_dist = closestPointFace(face1->vertices[0], face2, face1_trans, face2_trans, p_temp); if(temp_dist < min_dist){ min_dist = temp_dist; p_closest = p_temp; } } return vertex_face_test(&p_closest, face2, IDENITY, face2_trans, f); }