Skip to content

Commit ca3c95d

Browse files
committed
update to new slice plane API
1 parent 2192bb3 commit ca3c95d

File tree

4 files changed

+155
-7
lines changed

4 files changed

+155
-7
lines changed

src/cpp/core.cpp

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -325,17 +325,37 @@ PYBIND11_MODULE(polyscope_bindings, m) {
325325
py::class_<ps::SlicePlane>(m, "SlicePlane")
326326
.def(py::init<std::string>())
327327
.def_readonly("name", &ps::SlicePlane::name)
328-
.def("set_pose", &ps::SlicePlane::setPose, "set pose")
329-
.def("set_active", &ps::SlicePlane::setActive, "set active")
328+
.def("remove", &ps::SlicePlane::remove, "remove")
329+
.def("set_enabled", &ps::SlicePlane::setEnabled, "set enabled")
330+
.def("get_enabled", &ps::SlicePlane::getEnabled, "get enabled")
331+
.def("set_active", &ps::SlicePlane::setActive, "set active") // should have been called 'enabled'
330332
.def("get_active", &ps::SlicePlane::getActive, "get active")
333+
.def("set_pose", &ps::SlicePlane::setPose, "set pose")
334+
.def("get_center", [](ps::SlicePlane& s) { return glm2eigen(s.getCenter()); })
335+
.def("get_normal", [](ps::SlicePlane& s) { return glm2eigen(s.getNormal()); })
336+
.def("set_color", &ps::SlicePlane::setColor, "set color")
337+
.def("get_color", [](ps::SlicePlane& s) { return glm2eigen(s.getColor()); })
338+
.def("set_grid_line_color", &ps::SlicePlane::setGridLineColor, "set grid line color")
339+
.def("get_grid_line_color", [](ps::SlicePlane& s) { return glm2eigen(s.getGridLineColor()); })
340+
.def("set_transparency", &ps::SlicePlane::setTransparency, "set transparency")
341+
.def("get_transparency", &ps::SlicePlane::getTransparency, "get transparency")
331342
.def("set_draw_plane", &ps::SlicePlane::setDrawPlane, "set draw plane")
332343
.def("get_draw_plane", &ps::SlicePlane::getDrawPlane, "get draw plane")
333344
.def("set_draw_widget", &ps::SlicePlane::setDrawWidget, "set draw widget")
334345
.def("get_draw_widget", &ps::SlicePlane::getDrawWidget, "get draw widget")
335346
.def("set_volume_mesh_to_inspect", &ps::SlicePlane::setVolumeMeshToInspect, "set name of inspected volume mesh")
336347
.def("get_volume_mesh_to_inspect", &ps::SlicePlane::getVolumeMeshToInspect, "get name of inspected volume mesh");
348+
349+
350+
m.def("add_slice_plane", overload_cast_<>()(&ps::addSlicePlane), "add a slice plane", py::return_value_policy::reference);
351+
m.def("add_slice_plane", overload_cast_<std::string>()(&ps::addSlicePlane), "add a slice plane", py::return_value_policy::reference);
352+
m.def("get_slice_plane", &ps::getSlicePlane, "get a slice plane by name", py::return_value_policy::reference);
353+
m.def("remove_slice_plane", overload_cast_<std::string>()(&ps::removeSlicePlane), "remove a slice plane by name");
354+
m.def("remove_all_slice_planes", &ps::removeAllSlicePlanes, "remove all slice planes");
355+
337356

338-
m.def("add_scene_slice_plane", ps::addSceneSlicePlane, "add a slice plane", py::return_value_policy::reference);
357+
// deprecated, but still supprorted for now
358+
m.def("add_scene_slice_plane", ps::addSceneSlicePlane, "add a slice plane", py::return_value_policy::reference);
339359
m.def("remove_last_scene_slice_plane", ps::removeLastSceneSlicePlane, "remove last scene plane");
340360

341361
// === Camera Parameters

src/polyscope/core.py

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -531,16 +531,49 @@ def __init__(self, instance):
531531

532532
def get_name(self):
533533
return self.bound_slice_plane.name
534-
535-
def set_pose(self, plane_position, plane_normal):
536-
self.bound_slice_plane.set_pose(glm3(plane_position), glm3(plane_normal))
537534

535+
def remove(self):
536+
self.bound_slice_plane.remove()
537+
538+
def set_enabled(self, val):
539+
self.bound_slice_plane.set_enabled(val)
540+
541+
def get_enabled(self):
542+
return self.bound_slice_plane.get_enabled()
543+
538544
def set_active(self, val):
539545
self.bound_slice_plane.set_active(val)
540546

541547
def get_active(self):
542548
return self.bound_slice_plane.get_active()
543549

550+
def set_pose(self, plane_position, plane_normal):
551+
self.bound_slice_plane.set_pose(glm3(plane_position), glm3(plane_normal))
552+
553+
def get_center(self):
554+
return self.bound_slice_plane.get_center()
555+
556+
def get_normal(self):
557+
return self.bound_slice_plane.get_normal()
558+
559+
def set_color(self, val):
560+
self.bound_slice_plane.set_color(glm3(val))
561+
562+
def get_color(self):
563+
return self.bound_slice_plane.get_color()
564+
565+
def set_grid_line_color(self, val):
566+
self.bound_slice_plane.set_grid_line_color(glm3(val))
567+
568+
def get_grid_line_color(self):
569+
return self.bound_slice_plane.get_grid_line_color()
570+
571+
def set_transparency(self, val):
572+
self.bound_slice_plane.set_transparency(val)
573+
574+
def get_transparency(self):
575+
return self.bound_slice_plane.get_transparency()
576+
544577
def set_draw_plane(self, val):
545578
self.bound_slice_plane.set_draw_plane(val)
546579

@@ -559,11 +592,31 @@ def set_volume_mesh_to_inspect(self, val):
559592
def get_volume_mesh_to_inspect(self):
560593
return self.bound_slice_plane.get_volume_mesh_to_inspect()
561594

595+
def add_slice_plane(name=None):
596+
if name is None:
597+
instance = psb.add_slice_plane()
598+
else:
599+
instance = psb.add_slice_plane(name)
600+
601+
return SlicePlane(instance)
602+
603+
def get_slice_plane(name):
604+
instance = psb.get_slice_plane(name)
605+
return SlicePlane(instance)
606+
607+
def remove_slice_plane(name):
608+
psb.remove_slice_plane(name)
609+
610+
def remove_all_slice_planes():
611+
psb.remove_all_slice_planes()
612+
562613
def add_scene_slice_plane():
614+
# deprecated
563615
instance = psb.add_scene_slice_plane(False)
564616
return SlicePlane(instance)
565617

566618
def remove_last_scene_slice_plane():
619+
# deprecated
567620
psb.remove_last_scene_slice_plane()
568621

569622
### Camera Parameters

test/polyscope_test.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,25 +270,98 @@ def test_picking(self):
270270

271271
def test_slice_plane(self):
272272

273+
# Test deprecated add_scene_slice_plane() function
273274
plane1 = ps.add_scene_slice_plane()
274275
plane2 = ps.add_scene_slice_plane()
275276

277+
# Test set_enabled / get_enabled
278+
plane2.set_enabled(True)
279+
self.assertEqual(True, plane2.get_enabled())
280+
plane2.set_enabled(False)
281+
self.assertEqual(False, plane2.get_enabled())
282+
283+
# Test set_pose with tuple
276284
plane1.set_pose((-.5, 0., 0.), (1., 1., 1.))
277285

286+
# Test set_active / get_active
278287
plane1.set_active(False)
279288
self.assertEqual(False, plane1.get_active())
289+
plane1.set_active(True)
290+
self.assertEqual(True, plane1.get_active())
280291

292+
# Test set_draw_plane / get_draw_plane
281293
plane1.set_draw_plane(False)
282294
self.assertEqual(False, plane1.get_draw_plane())
295+
plane1.set_draw_plane(True)
296+
self.assertEqual(True, plane1.get_draw_plane())
283297

298+
# Test set_draw_widget / get_draw_widget
284299
plane1.set_draw_widget(False)
285300
self.assertEqual(False, plane1.get_draw_widget())
301+
plane1.set_draw_widget(True)
302+
self.assertEqual(True, plane1.get_draw_widget())
286303

287304
ps.show(3)
288305

289306
ps.remove_last_scene_slice_plane()
290307
ps.remove_last_scene_slice_plane()
291308

309+
# add with custom names
310+
plane3 = ps.add_slice_plane("custom_plane_1")
311+
self.assertEqual(plane3.get_name(), "custom_plane_1")
312+
313+
plane4 = ps.add_slice_plane("custom_plane_2")
314+
self.assertEqual(plane4.get_name(), "custom_plane_2")
315+
316+
# Test get_slice_plane
317+
retrieved_plane = ps.get_slice_plane("custom_plane_1")
318+
self.assertEqual(retrieved_plane.get_name(), "custom_plane_1")
319+
320+
# Test set_color / get_color
321+
plane3.set_color((0.5, 0.6, 0.7))
322+
color = plane3.get_color()
323+
for i in range(3):
324+
self.assertAlmostEqual(color[i], [0.5, 0.6, 0.7][i], places=5)
325+
326+
# Test set_grid_line_color / get_grid_line_color
327+
plane3.set_grid_line_color((0.1, 0.2, 0.3))
328+
grid_color = plane3.get_grid_line_color()
329+
for i in range(3):
330+
self.assertAlmostEqual(grid_color[i], [0.1, 0.2, 0.3][i], places=5)
331+
332+
# Test set_transparency / get_transparency
333+
plane3.set_transparency(0.5)
334+
self.assertAlmostEqual(0.5, plane3.get_transparency())
335+
plane3.set_transparency(0.0)
336+
self.assertAlmostEqual(0.0, plane3.get_transparency())
337+
plane3.set_transparency(1.0)
338+
self.assertAlmostEqual(1.0, plane3.get_transparency())
339+
340+
# Test set_pose with numpy array
341+
plane4.set_pose(np.array([0.5, 0.5, 0.5]), np.array([0.0, 0.0, 1.0]))
342+
343+
# Test get_center and get_normal
344+
center = plane4.get_center()
345+
self.assertIsNotNone(center)
346+
self.assertEqual(len(center), 3)
347+
348+
normal = plane4.get_normal()
349+
self.assertIsNotNone(normal)
350+
self.assertEqual(len(normal), 3)
351+
352+
ps.show(3)
353+
354+
# Test remove_slice_plane
355+
ps.remove_slice_plane("custom_plane_1")
356+
357+
# Test plane.remove() method
358+
plane4.remove()
359+
360+
# Test remove_all_slice_planes
361+
ps.add_slice_plane("test1")
362+
ps.add_slice_plane("test2")
363+
ps.remove_all_slice_planes()
364+
292365

293366
def test_load_material(self):
294367

@@ -814,6 +887,8 @@ def test_slice_plane(self):
814887

815888
p = ps.register_point_cloud("test_cloud", self.generate_points())
816889

890+
891+
817892
plane = ps.add_scene_slice_plane()
818893
p.set_cull_whole_elements(True)
819894
ps.show(3)

0 commit comments

Comments
 (0)