Skip to content

Commit

Permalink
Merge pull request #15 from dwastberg/distance_query
Browse files Browse the repository at this point in the history
Add distance query type
  • Loading branch information
scopatz committed Jan 10, 2019
2 parents 5178cae + 88949bc commit 9bb390b
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 15 deletions.
3 changes: 2 additions & 1 deletion pyembree/rtcore_scene.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,5 @@ cdef class EmbreeScene:

cdef enum rayQueryType:
intersect,
occluded
occluded,
distance
38 changes: 24 additions & 14 deletions pyembree/rtcore_scene.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,12 @@ cdef class EmbreeScene:
query_type = intersect
elif query == 'OCCLUDED':
query_type = occluded
elif query == 'DISTANCE':
query_type = distance

else:
raise ValueError("Embree ray query type %s not recognized" % (query))
raise ValueError("Embree ray query type %s not recognized."
"\nAccepted types are (INTERSECT,OCCLUDED,DISTANCE)" % (query))

if dists is None:
tfars = np.empty(nv, 'float32')
Expand Down Expand Up @@ -81,26 +85,32 @@ cdef class EmbreeScene:
ray.time = 0
vd_i += vd_step

if query_type == intersect:
if query_type == intersect or query_type == distance:
rtcIntersect(self.scene_i, ray)
if not output:
intersect_ids[i] = ray.primID
if query_type == intersect:
intersect_ids[i] = ray.primID
else:
tfars[i] = ray.tfar
else:
primID[i] = ray.primID
geomID[i] = ray.geomID
u[i] = ray.u
v[i] = ray.v
tfars[i] = ray.tfar
for j in range(3):
Ng[i, j] = ray.Ng[j]
else:
rtcOccluded(self.scene_i, ray)
if not output:
intersect_ids[i] = ray.geomID
if output:
primID[i] = ray.primID
geomID[i] = ray.geomID
u[i] = ray.u
v[i] = ray.v
tfars[i] = ray.tfar
for j in range(3):
Ng[i, j] = ray.Ng[j]
intersect_ids[i] = ray.geomID

if output:
return {'u':u, 'v':v, 'Ng': Ng, 'tfar': tfars, 'primID': primID, 'geomID': geomID}
else:
return intersect_ids
if query_type == distance:
return tfars
else:
return intersect_ids

def __dealloc__(self):
rtcDeleteScene(self.scene_i)
5 changes: 5 additions & 0 deletions tests/test_intersection.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,11 @@ def test_intersect_simple(self):
res = self.scene.run(self.origins, self.dirs)
self.assertTrue([0, 1, 1, -1], res)

def test_intersect_distance(self):
res = self.scene.run(self.origins, self.dirs,query='DISTANCE')
self.assertTrue(np.allclose([6.9, 6.9, 6.9,1e37], res))


def test_intersect(self):
res = self.scene.run(self.origins, self.dirs, output=1)

Expand Down

0 comments on commit 9bb390b

Please sign in to comment.