void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryFunc func, void *data) { struct SegmentQueryContext context = { start, end, layers, group, func, }; cpSpaceLock(space); { cpSpatialIndexSegmentQuery(space->staticShapes, &context, start, end, 1.0f, (cpSpatialIndexSegmentQueryFunc)SegmentQuery, data); cpSpatialIndexSegmentQuery(space->activeShapes, &context, start, end, 1.0f, (cpSpatialIndexSegmentQueryFunc)SegmentQuery, data); } cpSpaceUnlock(space, cpTrue); }
cpShape * cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSegmentQueryInfo *out) { cpSegmentQueryInfo info = {NULL, 1.0f, cpvzero}; if(out){ (*out) = info; } else { out = &info; } struct SegmentQueryContext context = { start, end, layers, group, NULL }; cpSpatialIndexSegmentQuery(space->staticShapes, &context, start, end, 1.0f, (cpSpatialIndexSegmentQueryFunc)SegmentQueryFirst, out); cpSpatialIndexSegmentQuery(space->activeShapes, &context, start, end, out->t, (cpSpatialIndexSegmentQueryFunc)SegmentQueryFirst, out); return out->shape; }
void SpatialIndex::segmentQuery(void *obj,cpVect a,cpVect b,cpFloat t_exit,SpatialIndexSegmentQueryFunc func) { cpSpatialIndexSegmentQuery(index,obj,a,b,t_exit,*SpatialIndexSegmentQuery,&func); }
void SpatialIndex::segmentQuery(void *obj,const cp::Vect& a,const cp::Vect& b,cpFloat t_exit,cpSpatialIndexSegmentQueryFunc func,void *data) { cpSpatialIndexSegmentQuery(index,obj,a,b,t_exit,func,data); }