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.
29 lines
985 B
Python
29 lines
985 B
Python
# -*- 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()
|