#include "lib_intersect.h" #include "c4d.h" IntersectLibrary *lib_intersect = nullptr; static IntersectLibrary *CheckIntersectLib(Int32 offset) { return (IntersectLibrary*)CheckLib(LIBRARY_INTERSECT,offset,(C4DLibrary**)&lib_intersect); } #define IntersectLibCall(b) IntersectLibrary *lib = CheckIntersectLib(LIBOFFSET(IntersectLibrary, b)); \ if (!lib || !lib->b) return; \ (lib->b) #define IntersectLibCallR(a,b) IntersectLibrary *lib = CheckIntersectLib(LIBOFFSET(IntersectLibrary, b)); \ if (!lib || !lib->b) return a; \ return (lib->b) //============================================================================== IIntersect* IIntersect::Alloc(INTERSECTTYPE type) { IntersectLibCallR(nullptr,intersectAlloc)(type); } void IIntersect::Free(IIntersect *&isect) { IntersectLibCall(intersectFree)(isect); } Bool IIntersect::Init(PolygonObject *pPoly) { IntersectLibCallR(false, intersectInit)(this, pPoly); } Bool IIntersect::AddObject(PolygonObject *pPoly) { IntersectLibCallR(false, intersectAddObject)(this, pPoly); } void IIntersect::Clear() { IntersectLibCall(intersectClear)(this); } Bool IIntersect::Hit(BaseDraw* bd, Float mx, Float my, Bool backfaces, IntersectHitData &hitData) { IntersectLibCallR(false,intersectHitScreen)(this,bd,mx,my,backfaces,hitData); } Bool IIntersect::Hit(const Vector &rayp, const Vector &rayv, Bool backfaces, IntersectHitData &hitData) { IntersectLibCallR(false,intersectHitObject)(this,rayp,rayv,backfaces,hitData); }