static int pyPlane3___init__(pyPlane3* self, PyObject* args, PyObject* kwds) { float x = 0.0f, y = 0.0f, z = 0.0f, w = 0.0f; PyObject* init = NULL; static char* kwlist[] = { "X", "Y", "Z", "W", NULL }; static char* kwlist2[] = { "Plane", NULL }; if (PyArg_ParseTupleAndKeywords(args, kwds, "ffff", kwlist, &x, &y, &z, &w)) { (*self->fThis) = hsPlane3(hsVector3(x, y, z), w); } else if (PyErr_Clear(), PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist2, &init)) { if (init == NULL) { (*self->fThis) = hsPlane3(); return 0; } if (pyPlane3_Check(init)) { (*self->fThis) = (*((pyPlane3*)init)->fThis); } else { PyErr_SetString(PyExc_TypeError, "__init__ expects a Plane"); return -1; } } else { return -1; } return 0; }
bool plPhysXCooking::TestIfConvex(NxConvexMesh* convexMesh, int nVerts, hsPoint3* verts) { bool retVal = true; // build planes from the convex mesh NxConvexMeshDesc desc; convexMesh->saveToDesc(desc); hsPlane3* planes = new hsPlane3[desc.numTriangles]; int i; for ( i = 0; i < desc.numTriangles; i++) { uint32_t* triangle = (uint32_t*)(((char*)desc.triangles) + desc.triangleStrideBytes*i); float* vertex1 = (float*)(((char*)desc.points) + desc.pointStrideBytes*triangle[0]); float* vertex2 = (float*)(((char*)desc.points) + desc.pointStrideBytes*triangle[1]); float* vertex3 = (float*)(((char*)desc.points) + desc.pointStrideBytes*triangle[2]); hsPoint3 pt1(vertex1[0],vertex1[1],vertex1[2]); hsPoint3 pt2(vertex2[0],vertex2[1],vertex2[2]); hsPoint3 pt3(vertex3[0],vertex3[1],vertex3[2]); planes[i] = hsPlane3(&pt1,&pt2,&pt3); } // now see if any of the points from the mesh are inside the hull for (int j=0; j<nVerts && retVal; j++) { if ( IsPointInsideHull(planes,desc.numTriangles,verts[j]) ) retVal = false; } delete [] planes; return retVal; }