Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ add_subdirectory(deps/polyscope)
nanobind_add_module(polyscope_bindings
src/cpp/core.cpp
src/cpp/surface_mesh.cpp
src/cpp/simple_triangle_mesh.cpp
src/cpp/point_cloud.cpp
src/cpp/curve_network.cpp
src/cpp/volume_mesh.cpp
Expand Down
2 changes: 1 addition & 1 deletion deps/polyscope
Submodule polyscope updated 88 files
+8 −1 examples/demo-app/demo_app.cpp
+0 −2 include/polyscope/color_image_quantity.h
+0 −2 include/polyscope/color_quantity.h
+4 −2 include/polyscope/color_quantity.ipp
+1 −4 include/polyscope/color_render_image_quantity.h
+0 −7 include/polyscope/curve_network.h
+3 −1 include/polyscope/curve_network.ipp
+0 −3 include/polyscope/curve_network_color_quantity.h
+0 −3 include/polyscope/curve_network_scalar_quantity.h
+0 −3 include/polyscope/parameterization_quantity.h
+5 −4 include/polyscope/parameterization_quantity.ipp
+50 −0 include/polyscope/pick.ipp
+0 −2 include/polyscope/point_cloud.h
+3 −1 include/polyscope/point_cloud.ipp
+1 −0 include/polyscope/polyscope.h
+1 −4 include/polyscope/raw_color_alpha_render_image_quantity.h
+1 −4 include/polyscope/raw_color_render_image_quantity.h
+17 −2 include/polyscope/render/engine.h
+228 −113 include/polyscope/render/managed_buffer.h
+8 −2 include/polyscope/render/mock_opengl/mock_gl_engine.h
+8 −2 include/polyscope/render/opengl/gl_engine.h
+3 −0 include/polyscope/render/opengl/shaders/surface_mesh_shaders.h
+0 −4 include/polyscope/render_image_quantity_base.h
+6 −4 include/polyscope/scalar_quantity.h
+10 −8 include/polyscope/scalar_quantity.ipp
+1 −1 include/polyscope/scalar_render_image_quantity.h
+54 −10 include/polyscope/simple_triangle_mesh.h
+40 −9 include/polyscope/simple_triangle_mesh.ipp
+74 −0 include/polyscope/simple_triangle_mesh_color_quantity.h
+25 −0 include/polyscope/simple_triangle_mesh_quantity.h
+75 −0 include/polyscope/simple_triangle_mesh_scalar_quantity.h
+0 −5 include/polyscope/sparse_volume_grid.h
+2 −1 include/polyscope/structure.h
+0 −35 include/polyscope/surface_mesh.h
+3 −1 include/polyscope/surface_mesh.ipp
+2 −1 include/polyscope/surface_parameterization_quantity.h
+4 −2 include/polyscope/types.h
+0 −5 include/polyscope/vector_quantity.h
+24 −18 include/polyscope/vector_quantity.ipp
+0 −5 include/polyscope/volume_grid.h
+31 −23 include/polyscope/volume_mesh.h
+5 −3 include/polyscope/volume_mesh.ipp
+6 −0 src/CMakeLists.txt
+6 −4 src/color_image_quantity.cpp
+5 −4 src/color_render_image_quantity.cpp
+31 −29 src/curve_network.cpp
+17 −13 src/curve_network_color_quantity.cpp
+22 −18 src/curve_network_scalar_quantity.cpp
+2 −2 src/depth_render_image_quantity.cpp
+7 −8 src/point_cloud.cpp
+1 −1 src/point_cloud_color_quantity.cpp
+1 −1 src/point_cloud_parameterization_quantity.cpp
+1 −1 src/point_cloud_scalar_quantity.cpp
+10 −0 src/polyscope.cpp
+4 −3 src/raw_color_alpha_render_image_quantity.cpp
+4 −3 src/raw_color_render_image_quantity.cpp
+361 −161 src/render/managed_buffer.cpp
+32 −13 src/render/mock_opengl/mock_gl_engine.cpp
+39 −16 src/render/opengl/gl_engine.cpp
+12 −1 src/render/opengl/shaders/common.cpp
+56 −0 src/render/opengl/shaders/surface_mesh_shaders.cpp
+9 −8 src/render_image_quantity_base.cpp
+3 −2 src/scalar_image_quantity.cpp
+7 −6 src/scalar_render_image_quantity.cpp
+188 −24 src/simple_triangle_mesh.cpp
+147 −0 src/simple_triangle_mesh_color_quantity.cpp
+13 −0 src/simple_triangle_mesh_quantity.cpp
+140 −0 src/simple_triangle_mesh_scalar_quantity.cpp
+7 −4 src/slice_plane.cpp
+29 −27 src/sparse_volume_grid.cpp
+2 −2 src/sparse_volume_grid_color_quantity.cpp
+2 −2 src/sparse_volume_grid_scalar_quantity.cpp
+6 −5 src/surface_color_quantity.cpp
+131 −123 src/surface_mesh.cpp
+13 −10 src/surface_parameterization_quantity.cpp
+11 −10 src/surface_scalar_quantity.cpp
+12 −10 src/surface_vector_quantity.cpp
+2 −2 src/view.cpp
+31 −28 src/volume_grid.cpp
+15 −12 src/volume_grid_scalar_quantity.cpp
+424 −218 src/volume_mesh.cpp
+7 −6 src/volume_mesh_color_quantity.cpp
+19 −14 src/volume_mesh_scalar_quantity.cpp
+28 −0 test/include/polyscope_test.h
+37 −0 test/src/misc_test.cpp
+130 −6 test/src/surface_mesh_test.cpp
+1 −1 test/src/volume_grid_test.cpp
+49 −8 test/src/volume_mesh_test.cpp
2 changes: 2 additions & 0 deletions src/cpp/core.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ namespace ps = polyscope;

// Forward-declare bindings from other files
void bind_surface_mesh(nb::module_& m);
void bind_simple_triangle_mesh(nb::module_& m);
void bind_point_cloud(nb::module_& m);
void bind_curve_network(nb::module_& m);
void bind_volume_mesh(nb::module_& m);
Expand Down Expand Up @@ -732,6 +733,7 @@ NB_MODULE(polyscope_bindings, m) {
bind_point_cloud(m);
bind_curve_network(m);
bind_surface_mesh(m);
bind_simple_triangle_mesh(m);
bind_volume_mesh(m);
bind_volume_grid(m);
bind_sparse_volume_grid(m);
Expand Down
18 changes: 12 additions & 6 deletions src/cpp/gaussian_particles_structure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,20 @@ void GaussianParticles::ensureImagebuffersAllocated() {

// re-allocate buffers
depths->setTextureSize(currImageWidth, currImageHeight);
depths->ensureHostBufferAllocated();
depths->data = std::vector<float>(currImageWidth * currImageHeight, 0.0f);
depths->markHostBufferUpdated();
{
std::vector<float> depthZeros(currImageWidth * currImageHeight, 0.0f);
depths->resize(depthZeros.size());
depths->setDataHost(depthZeros);
depths->markHostBufferUpdated();
}

colors->setTextureSize(currImageWidth, currImageHeight);
colors->ensureHostBufferAllocated();
colors->data = std::vector<glm::vec4>(currImageWidth * currImageHeight, glm::vec4(0.0f));
colors->markHostBufferUpdated();
{
std::vector<glm::vec4> colorZeros(currImageWidth * currImageHeight, glm::vec4(0.0f));
colors->resize(colorZeros.size());
colors->setDataHost(colorZeros);
colors->markHostBufferUpdated();
}

if (imageToScreenProgram) {
imageToScreenProgram->setTextureFromBuffer("t_depth", depths->getRenderTextureBuffer().get());
Expand Down
66 changes: 33 additions & 33 deletions src/cpp/managed_buffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ nb::class_<ps::render::ManagedBuffer<T>> bind_managed_buffer_T(nb::module_& m, p
return nb::class_<ps::render::ManagedBuffer<T>>(m, ("ManagedBuffer_" + ps::typeName(t)).c_str())
.def("size", &ps::render::ManagedBuffer<T>::size)
.def("get_texture_size", &ps::render::ManagedBuffer<T>::getTextureSize)
.def("has_data", &ps::render::ManagedBuffer<T>::hasData)
.def("has_data", [](const ps::render::ManagedBuffer<T>& b) { return b.size() > 0; })
.def("summary_string", &ps::render::ManagedBuffer<T>::summaryString)
.def("get_device_buffer_type", &ps::render::ManagedBuffer<T>::getDeviceBufferType)
.def("get_generic_weak_handle",
Expand Down Expand Up @@ -65,44 +65,44 @@ void bind_managed_buffer(nb::module_& m) {
bind_managed_buffer_T<float>(m, ps::ManagedBufferType::Float)
.def("update_data", [](ps::render::ManagedBuffer<float>& s, Eigen::VectorXf& d) {
if(d.rows() != s.size()) ps::exception("bad update size, should be " + std::to_string(s.size()));
s.ensureHostBufferAllocated();
for(uint32_t i = 0; i < s.size(); i++) s.data[i] = d(i);
s.ensureHostBufferPopulated();
for(uint32_t i = 0; i < s.size(); i++) s.setHostValue(i, d(i));
s.markHostBufferUpdated();
})
;

bind_managed_buffer_T<double>(m, ps::ManagedBufferType::Double)
.def("update_data", [](ps::render::ManagedBuffer<double>& s, Eigen::VectorXd& d) {
if(d.rows() != s.size()) ps::exception("bad update size, should be " + std::to_string(s.size()));
s.ensureHostBufferAllocated();
for(uint32_t i = 0; i < s.size(); i++) s.data[i] = d(i);
s.ensureHostBufferPopulated();
for(uint32_t i = 0; i < s.size(); i++) s.setHostValue(i, d(i));
s.markHostBufferUpdated();
})
;

bind_managed_buffer_T<glm::vec2>(m, ps::ManagedBufferType::Vec2)
.def("update_data", [](ps::render::ManagedBuffer<glm::vec2>& s, Eigen::Matrix<float, Eigen::Dynamic, 2>& d) {
if(d.rows() != s.size()) ps::exception("bad update size, should be " + std::to_string(s.size()) + " x 2");
s.ensureHostBufferAllocated();
for(uint32_t i = 0; i < s.size(); i++) s.data[i] = {d(i,0), d(i,1)};
s.ensureHostBufferPopulated();
for(uint32_t i = 0; i < s.size(); i++) s.setHostValue(i, {d(i,0), d(i,1)});
s.markHostBufferUpdated();
})
;

bind_managed_buffer_T<glm::vec3>(m, ps::ManagedBufferType::Vec3)
.def("update_data", [](ps::render::ManagedBuffer<glm::vec3>& s, Eigen::Matrix<float, Eigen::Dynamic, 3>& d) {
if(d.rows() != s.size()) ps::exception("bad update size, should be " + std::to_string(s.size()) + " x 3");
s.ensureHostBufferAllocated();
for(uint32_t i = 0; i < s.size(); i++) s.data[i] = {d(i,0), d(i,1), d(i,2)};
s.ensureHostBufferPopulated();
for(uint32_t i = 0; i < s.size(); i++) s.setHostValue(i, {d(i,0), d(i,1), d(i,2)});
s.markHostBufferUpdated();
})
;

bind_managed_buffer_T<glm::vec4>(m, ps::ManagedBufferType::Vec4)
.def("update_data", [](ps::render::ManagedBuffer<glm::vec4>& s, Eigen::Matrix<float, Eigen::Dynamic, 4>& d) {
if(d.rows() != s.size() || d.cols() != 4) ps::exception("bad update size, should be " + std::to_string(s.size()) + " x 4");
s.ensureHostBufferAllocated();
for(uint32_t i = 0; i < s.size(); i++) s.data[i] = {d(i,0), d(i,1), d(i,2), d(i,3)};
s.ensureHostBufferPopulated();
for(uint32_t i = 0; i < s.size(); i++) s.setHostValue(i, {d(i,0), d(i,1), d(i,2), d(i,3)});
s.markHostBufferUpdated();
})
;
Expand All @@ -112,11 +112,11 @@ void bind_managed_buffer(nb::module_& m) {
for(uint32_t k = 0; k < 2; k++) {
if(d[k].rows() != s.size()) ps::exception("bad update size, should be " + std::to_string(s.size()) + " x 3");
}
s.ensureHostBufferAllocated();
s.ensureHostBufferPopulated();
for(uint32_t i = 0; i < s.size(); i++) {
for(uint32_t k = 0; k < 2; k++) {
s.data[i][k] = {d[k](i,0), d[k](i,1), d[k](i,2)};
}
std::array<glm::vec3, 2> val;
for(uint32_t k = 0; k < 2; k++) val[k] = {d[k](i,0), d[k](i,1), d[k](i,2)};
s.setHostValue(i, val);
}
s.markHostBufferUpdated();
})
Expand All @@ -128,11 +128,11 @@ void bind_managed_buffer(nb::module_& m) {
for(uint32_t k = 0; k < 3; k++) {
if(d[k].rows() != s.size()) ps::exception("bad update size, should be " + std::to_string(s.size()) + " x 3");
}
s.ensureHostBufferAllocated();
s.ensureHostBufferPopulated();
for(uint32_t i = 0; i < s.size(); i++) {
for(uint32_t k = 0; k < 3; k++) {
s.data[i][k] = {d[k](i,0), d[k](i,1), d[k](i,2)};
}
std::array<glm::vec3, 3> val;
for(uint32_t k = 0; k < 3; k++) val[k] = {d[k](i,0), d[k](i,1), d[k](i,2)};
s.setHostValue(i, val);
}
s.markHostBufferUpdated();
})
Expand All @@ -143,11 +143,11 @@ void bind_managed_buffer(nb::module_& m) {
for(uint32_t k = 0; k < 4; k++) {
if(d[k].rows() != s.size()) ps::exception("bad update size, should be " + std::to_string(s.size()) + " x 3");
}
s.ensureHostBufferAllocated();
s.ensureHostBufferPopulated();
for(uint32_t i = 0; i < s.size(); i++) {
for(uint32_t k = 0; k < 4; k++) {
s.data[i][k] = {d[k](i,0), d[k](i,1), d[k](i,2)};
}
std::array<glm::vec3, 4> val;
for(uint32_t k = 0; k < 4; k++) val[k] = {d[k](i,0), d[k](i,1), d[k](i,2)};
s.setHostValue(i, val);
}
s.markHostBufferUpdated();
})
Expand All @@ -156,26 +156,26 @@ void bind_managed_buffer(nb::module_& m) {
bind_managed_buffer_T<uint32_t>(m, ps::ManagedBufferType::UInt32)
.def("update_data", [](ps::render::ManagedBuffer<uint32_t>& s, Eigen::Matrix<uint32_t, Eigen::Dynamic, 1>& d) {
if(d.rows() != s.size()) ps::exception("bad update size, should be " + std::to_string(s.size()));
s.ensureHostBufferAllocated();
for(uint32_t i = 0; i < s.size(); i++) s.data[i] = d(i);
s.ensureHostBufferPopulated();
for(uint32_t i = 0; i < s.size(); i++) s.setHostValue(i, d(i));
s.markHostBufferUpdated();
})
;

bind_managed_buffer_T<int32_t>(m, ps::ManagedBufferType::Int32)
.def("update_data", [](ps::render::ManagedBuffer<uint32_t>& s, Eigen::Matrix<int32_t, Eigen::Dynamic, 1>& d) {
if(d.rows() != s.size()) ps::exception("bad update size, should be " + std::to_string(s.size()));
s.ensureHostBufferAllocated();
for(uint32_t i = 0; i < s.size(); i++) s.data[i] = d(i);
s.ensureHostBufferPopulated();
for(uint32_t i = 0; i < s.size(); i++) s.setHostValue(i, d(i));
s.markHostBufferUpdated();
})
;

bind_managed_buffer_T<glm::uvec2>(m, ps::ManagedBufferType::UVec2)
.def("update_data", [](ps::render::ManagedBuffer<glm::uvec2>& s, Eigen::Matrix<uint32_t, Eigen::Dynamic, 2>& d) {
if(d.rows() != s.size()) ps::exception("bad update size, should be " + std::to_string(s.size()) + " x 2");
s.ensureHostBufferAllocated();
for(uint32_t i = 0; i < s.size(); i++) s.data[i] = {d(i,0), d(i,1)};
s.ensureHostBufferPopulated();
for(uint32_t i = 0; i < s.size(); i++) s.setHostValue(i, {d(i,0), d(i,1)});
s.markHostBufferUpdated();
})
;
Expand All @@ -184,17 +184,17 @@ void bind_managed_buffer(nb::module_& m) {
bind_managed_buffer_T<glm::uvec3>(m, ps::ManagedBufferType::UVec3)
.def("update_data", [](ps::render::ManagedBuffer<glm::uvec3>& s, Eigen::Matrix<uint32_t, Eigen::Dynamic, 3>& d) {
if(d.rows() != s.size()) ps::exception("bad update size, should be " + std::to_string(s.size()) + " x 3");
s.ensureHostBufferAllocated();
for(uint32_t i = 0; i < s.size(); i++) s.data[i] = {d(i,0), d(i,1), d(i,2)};
s.ensureHostBufferPopulated();
for(uint32_t i = 0; i < s.size(); i++) s.setHostValue(i, {d(i,0), d(i,1), d(i,2)});
s.markHostBufferUpdated();
})
;

bind_managed_buffer_T<glm::uvec4>(m, ps::ManagedBufferType::UVec4)
.def("update_data", [](ps::render::ManagedBuffer<glm::uvec4>& s, Eigen::Matrix<uint32_t, Eigen::Dynamic, 4>& d) {
if(d.rows() != s.size()) ps::exception("bad update size, should be " + std::to_string(s.size()) + " x 4");
s.ensureHostBufferAllocated();
for(uint32_t i = 0; i < s.size(); i++) s.data[i] = {d(i,0), d(i,1), d(i,2), d(i,3)};
s.ensureHostBufferPopulated();
for(uint32_t i = 0; i < s.size(); i++) s.setHostValue(i, {d(i,0), d(i,1), d(i,2), d(i,3)});
s.markHostBufferUpdated();
})
;
Expand Down
96 changes: 96 additions & 0 deletions src/cpp/simple_triangle_mesh.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#include "Eigen/Dense"

#include "polyscope/polyscope.h"
#include "polyscope/simple_triangle_mesh.h"

#include "utils.h"

void bind_simple_triangle_mesh(nb::module_& m) {

// == Quantity types

// Scalar quantities
bindScalarQuantity<ps::SimpleTriangleMeshVertexScalarQuantity>(m, "SimpleTriangleMeshVertexScalarQuantity")
.def("update_data", &ps::SimpleTriangleMeshVertexScalarQuantity::updateData<Eigen::VectorXf>,
nb::arg("values"), "Update scalar values (count must stay the same)");
bindScalarQuantity<ps::SimpleTriangleMeshFaceScalarQuantity>(m, "SimpleTriangleMeshFaceScalarQuantity")
.def("update_data", &ps::SimpleTriangleMeshFaceScalarQuantity::updateData<Eigen::VectorXf>,
nb::arg("values"), "Update scalar values (count must stay the same)");

// Color quantities
bindColorQuantity<ps::SimpleTriangleMeshVertexColorQuantity>(m, "SimpleTriangleMeshVertexColorQuantity")
.def("update_data", &ps::SimpleTriangleMeshVertexColorQuantity::updateData<Eigen::MatrixXf>,
nb::arg("values"), "Update color values (count must stay the same)");
bindColorQuantity<ps::SimpleTriangleMeshFaceColorQuantity>(m, "SimpleTriangleMeshFaceColorQuantity")
.def("update_data", &ps::SimpleTriangleMeshFaceColorQuantity::updateData<Eigen::MatrixXf>,
nb::arg("values"), "Update color values (count must stay the same)");


// == Helper classes
nb::class_<ps::SimpleTriangleMeshPickResult>(m, "SimpleTriangleMeshPickResult")
.def(nb::init<>())
.def_ro("element_type", &ps::SimpleTriangleMeshPickResult::elementType)
.def_ro("index", &ps::SimpleTriangleMeshPickResult::index);


// == Main class
bindStructure<ps::SimpleTriangleMesh>(m, "SimpleTriangleMesh")

// basics
.def("n_vertices", &ps::SimpleTriangleMesh::nVertices, "# vertices")
.def("n_faces", &ps::SimpleTriangleMesh::nFaces, "# faces")

// update
.def("update_vertex_positions", &ps::SimpleTriangleMesh::updateVertexPositions<Eigen::MatrixXf>,
"Update vertex positions (vertex count must stay the same)")
.def("update_mesh", &ps::SimpleTriangleMesh::updateMesh<Eigen::MatrixXf, Eigen::MatrixXi>,
nb::arg("vertices"), nb::arg("faces"),
"Update vertices and faces (counts may change)")
.def("reserve_mesh_capacity", &ps::SimpleTriangleMesh::reserveMeshCapacity,
nb::arg("n_verts"), nb::arg("n_faces"),
"Pre-allocate capacity to avoid reallocations on future updates")

// options
.def("set_color", &ps::SimpleTriangleMesh::setSurfaceColor, "Set surface color")
.def("get_color", &ps::SimpleTriangleMesh::getSurfaceColor, "Get surface color")
.def("set_back_face_policy", &ps::SimpleTriangleMesh::setBackFacePolicy, "Set back face policy")
.def("get_back_face_policy", &ps::SimpleTriangleMesh::getBackFacePolicy, "Get back face policy")
.def("set_back_face_color", &ps::SimpleTriangleMesh::setBackFaceColor, "Set back face color")
.def("get_back_face_color", &ps::SimpleTriangleMesh::getBackFaceColor, "Get back face color")
.def("set_material", &ps::SimpleTriangleMesh::setMaterial, "Set material")
.def("get_material", &ps::SimpleTriangleMesh::getMaterial, "Get material")
.def("set_selection_mode", &ps::SimpleTriangleMesh::setSelectionMode, "Set selection mode")
.def("get_selection_mode", &ps::SimpleTriangleMesh::getSelectionMode, "Get selection mode")

// picking
.def("interpret_pick_result", &ps::SimpleTriangleMesh::interpretPickResult)

// quantities — scalars
.def("add_vertex_scalar_quantity", &ps::SimpleTriangleMesh::addVertexScalarQuantity<Eigen::VectorXf>,
"Add a scalar quantity at vertices", nb::arg("name"), nb::arg("values"),
nb::arg("data_type") = ps::DataType::STANDARD, nb::rv_policy::reference)
.def("add_face_scalar_quantity", &ps::SimpleTriangleMesh::addFaceScalarQuantity<Eigen::VectorXf>,
"Add a scalar quantity at faces", nb::arg("name"), nb::arg("values"),
nb::arg("data_type") = ps::DataType::STANDARD, nb::rv_policy::reference)

// quantities — colors
.def("add_vertex_color_quantity", &ps::SimpleTriangleMesh::addVertexColorQuantity<Eigen::MatrixXf>,
"Add a color quantity at vertices", nb::arg("name"), nb::arg("values"), nb::rv_policy::reference)
.def("add_face_color_quantity", &ps::SimpleTriangleMesh::addFaceColorQuantity<Eigen::MatrixXf>,
"Add a color quantity at faces", nb::arg("name"), nb::arg("values"), nb::rv_policy::reference);


// == Module-level functions
m.def("register_simple_triangle_mesh",
&ps::registerSimpleTriangleMesh<Eigen::MatrixXf, Eigen::MatrixXi>,
nb::arg("name"), nb::arg("vertices"), nb::arg("faces"),
"Register a simple triangle mesh", nb::rv_policy::reference);

m.def("remove_simple_triangle_mesh", &ps::removeSimpleTriangleMesh,
nb::arg("name"), nb::arg("error_if_absent") = false,
"Remove a simple triangle mesh by name");
m.def("get_simple_triangle_mesh", &ps::getSimpleTriangleMesh,
nb::arg("name") = "", "Get a simple triangle mesh by name", nb::rv_policy::reference);
m.def("has_simple_triangle_mesh", &ps::hasSimpleTriangleMesh,
nb::arg("name") = "", "Check for a simple triangle mesh by name");
}
1 change: 1 addition & 0 deletions src/polyscope/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
from polyscope.device_interop import * # noqa F403

from polyscope.surface_mesh import * # noqa F403
from polyscope.simple_triangle_mesh import * # noqa F403
from polyscope.point_cloud import * # noqa F403
from polyscope.curve_network import * # noqa F403
from polyscope.volume_mesh import * # noqa F403
Expand Down
Loading