コード例 #1
0
ファイル: Voxel.cpp プロジェクト: bchretien/spheretree
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;
    }
}
コード例 #2
0
ファイル: IDC.cpp プロジェクト: yamokosk/sceneml
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);
}