Start Python bindings for Raycast
This is only beginning of the bindings here. It's starting to get more complicated due to the use of callbacks. To be able to define a callback function in Python which is then called by a C++ algorithm requires quite a bit of wrapping boilerplate. The class PyCallback here will wrap a Python callable and call it with the density value of the voxel. It's not very generic and at present it can't pass the sampler itself since it's not available in the Python bindings. Regardless, the new test added here (TestRaycast.py) works as expected and hopefully we will be able to build up from here.
This commit is contained in:
28
tests/TestRaycast.py
Normal file
28
tests/TestRaycast.py
Normal file
@ -0,0 +1,28 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
sys.path.append("library/bindings/")
|
||||
|
||||
import unittest
|
||||
import PolyVoxCore
|
||||
|
||||
def test_functor(sampler):
|
||||
return sampler <= 0
|
||||
|
||||
class TestSurfaceExtractor(unittest.TestCase):
|
||||
def setUp(self):
|
||||
|
||||
#Create a small volume
|
||||
r = PolyVoxCore.Region(PolyVoxCore.Vector3DInt32(0,0,0), PolyVoxCore.Vector3DInt32(31,31,31))
|
||||
self.vol = PolyVoxCore.SimpleVolumeDensity8(r)
|
||||
#Set one single voxel to have a reasonably high density
|
||||
self.vol.setVoxelAt(PolyVoxCore.Vector3DInt32(5, 5, 5), PolyVoxCore.Density8(200))
|
||||
|
||||
def test_hit_voxel(self):
|
||||
self.assertEqual(PolyVoxCore.raycastWithEndpointsSimpleVolumeDensity8(self.vol, PolyVoxCore.Vector3DFloat(0,0,0), PolyVoxCore.Vector3DFloat(31,31,31), test_functor), 1)
|
||||
|
||||
def test_miss_voxel(self):
|
||||
self.assertEqual(PolyVoxCore.raycastWithEndpointsSimpleVolumeDensity8(self.vol, PolyVoxCore.Vector3DFloat(0,0,0), PolyVoxCore.Vector3DFloat(0,31,31), test_functor), 0)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
Reference in New Issue
Block a user