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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ __pycache__/
.cache
*.egg-info

# Stubs that get generated as part of the build process
src/polyscope_bindings/*.pyi

# Editor and OS things
imgui.ini
.polyscope.ini
Expand Down
102 changes: 98 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,110 @@ nanobind_add_module(polyscope_bindings
src/cpp/floating_quantities.cpp
src/cpp/implicit_helpers.cpp
src/cpp/managed_buffer.cpp

src/cpp/utils.h

src/cpp/imgui.cpp
src/cpp/implot.cpp
# ImGui related things
src/cpp/imgui/imgui.cpp

src/cpp/imgui/imgui_enums.cpp
src/cpp/imgui/imgui_structs.cpp
src/cpp/imgui/imgui_structs_fonts.cpp
src/cpp/imgui/imgui_macros.cpp
src/cpp/imgui/imgui_structs_io.cpp
src/cpp/imgui/imgui_structs_style.cpp
src/cpp/imgui/imgui_structs_drawlist.cpp

src/cpp/imgui/imgui_api_main.cpp
src/cpp/imgui/imgui_api_context_creation.cpp
src/cpp/imgui/imgui_api_demo_debug.cpp
src/cpp/imgui/imgui_api_styles.cpp
src/cpp/imgui/imgui_api_windows.cpp
src/cpp/imgui/imgui_api_child_windows.cpp
src/cpp/imgui/imgui_api_window_utilities.cpp
src/cpp/imgui/imgui_api_window_manipulation.cpp
src/cpp/imgui/imgui_api_scrolling.cpp
src/cpp/imgui/imgui_api_parameter_stacks.cpp
src/cpp/imgui/imgui_api_style_read.cpp
src/cpp/imgui/imgui_api_cursor_layout.cpp
src/cpp/imgui/imgui_api_id_stack.cpp
src/cpp/imgui/imgui_api_widgets_text.cpp
src/cpp/imgui/imgui_api_widgets_main.cpp
src/cpp/imgui/imgui_api_widgets_images.cpp
src/cpp/imgui/imgui_api_widgets_combo.cpp
src/cpp/imgui/imgui_api_widgets_drag.cpp
src/cpp/imgui/imgui_api_widgets_sliders.cpp
src/cpp/imgui/imgui_api_widgets_input.cpp
src/cpp/imgui/imgui_api_widgets_color.cpp
src/cpp/imgui/imgui_api_widgets_trees.cpp
src/cpp/imgui/imgui_api_widgets_selectables.cpp
src/cpp/imgui/imgui_api_widgets_listbox.cpp
src/cpp/imgui/imgui_api_data_plotting.cpp
src/cpp/imgui/imgui_api_menus.cpp
src/cpp/imgui/imgui_api_tooltips.cpp
src/cpp/imgui/imgui_api_popups.cpp
src/cpp/imgui/imgui_api_tables.cpp
src/cpp/imgui/imgui_api_columns_legacy.cpp
src/cpp/imgui/imgui_api_tab_bars.cpp
src/cpp/imgui/imgui_api_logging.cpp
src/cpp/imgui/imgui_api_drag_drop.cpp
src/cpp/imgui/imgui_api_disabling.cpp
src/cpp/imgui/imgui_api_clipping.cpp
src/cpp/imgui/imgui_api_focus_activation.cpp
src/cpp/imgui/imgui_api_overlapping_items.cpp
src/cpp/imgui/imgui_api_item_query.cpp
src/cpp/imgui/imgui_api_viewports.cpp
src/cpp/imgui/imgui_api_draw_lists.cpp
src/cpp/imgui/imgui_api_misc_utils.cpp
src/cpp/imgui/imgui_api_text_utils.cpp
src/cpp/imgui/imgui_api_color_utils.cpp
src/cpp/imgui/imgui_api_inputs_keyboard.cpp
src/cpp/imgui/imgui_api_inputs_mouse.cpp
src/cpp/imgui/imgui_api_clipboard.cpp
src/cpp/imgui/imgui_api_settings.cpp
src/cpp/imgui/imgui_api_debug.cpp
src/cpp/imgui/imgui_api_allocators.cpp

src/cpp/imgui/implot.cpp

src/cpp/imgui/imgui_utils.h

src/cpp/utils.h
src/cpp/imgui_utils.h
)
set_target_properties(polyscope_bindings PROPERTIES CXX_VISIBILITY_PRESET "default")

target_include_directories(polyscope_bindings PUBLIC "${EIGEN3_INCLUDE_DIR}")
target_link_libraries(polyscope_bindings PRIVATE polyscope)

# Generate type stubs
nanobind_add_stub(
polyscope_stub
MODULE polyscope_bindings

PYTHON_PATH $<TARGET_FILE_DIR:polyscope_bindings>
DEPENDS polyscope_bindings

MARKER_FILE py.typed

RECURSIVE

OUTPUT_PATH .
OUTPUT
__init__.pyi
imgui.pyi
implot.pyi
)

# Copy stub files into the appropriate place in the source directory after build
set(STUB_FILES __init__.pyi imgui.pyi implot.pyi)
foreach(STUB_FILE ${STUB_FILES})
add_custom_command(
TARGET polyscope_stub POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_BINARY_DIR}/polyscope_bindings/${STUB_FILE}
${CMAKE_CURRENT_SOURCE_DIR}/src/polyscope_bindings/${STUB_FILE}
VERBATIM
)
endforeach()


install(TARGETS polyscope_bindings LIBRARY DESTINATION .)
1 change: 1 addition & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ recursive-include deps/pybind11 *.h CMakeLists.txt *.cmake
recursive-include src *.cpp *.h
recursive-include src/polyscope *.py *.pyi
recursive-include src/polyscope_bindings *.py *.pyi
global-include py.typed
exclude dist
2,892 changes: 0 additions & 2,892 deletions src/cpp/imgui.cpp

This file was deleted.

128 changes: 128 additions & 0 deletions src/cpp/imgui/imgui.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
#include "imgui.h"
#include "implot.h"

#include "Eigen/Dense"

#include "../utils.h"
#include "imgui_utils.h"

#include <nanobind/stl/array.h>

void bind_imgui_enums(nb::module_& m);
void bind_imgui_structs(nb::module_& m);
void bind_imgui_macros(nb::module_& m);
void bind_imgui_io(nb::module_& m);
void bind_imgui_style(nb::module_& m);
void bind_imgui_drawlist(nb::module_& m);
void bind_imgui_fonts(nb::module_& m);

void bind_imgui_api_main(nb::module_& m);
void bind_imgui_api_context_creation(nb::module_& m);
void bind_imgui_api_demo_debug(nb::module_& m);
void bind_imgui_api_styles(nb::module_& m);
void bind_imgui_api_windows(nb::module_& m);
void bind_imgui_api_child_windows(nb::module_& m);
void bind_imgui_api_window_utilities(nb::module_& m);
void bind_imgui_api_window_manipulation(nb::module_& m);
void bind_imgui_api_scrolling(nb::module_& m);
void bind_imgui_api_parameter_stacks(nb::module_& m);
void bind_imgui_api_style_read(nb::module_& m);
void bind_imgui_api_cursor_layout(nb::module_& m);
void bind_imgui_api_id_stack(nb::module_& m);
void bind_imgui_api_widgets_text(nb::module_& m);
void bind_imgui_api_widgets_main(nb::module_& m);
void bind_imgui_api_widgets_images(nb::module_& m);
void bind_imgui_api_widgets_combo(nb::module_& m);
void bind_imgui_api_widgets_drag(nb::module_& m);
void bind_imgui_api_widgets_sliders(nb::module_& m);
void bind_imgui_api_widgets_input(nb::module_& m);
void bind_imgui_api_widgets_color(nb::module_& m);
void bind_imgui_api_widgets_trees(nb::module_& m);
void bind_imgui_api_widgets_selectables(nb::module_& m);
void bind_imgui_api_widgets_listbox(nb::module_& m);
void bind_imgui_api_data_plotting(nb::module_& m);
void bind_imgui_api_menus(nb::module_& m);
void bind_imgui_api_tooltips(nb::module_& m);
void bind_imgui_api_popups(nb::module_& m);
void bind_imgui_api_tables(nb::module_& m);
void bind_imgui_api_columns_legacy(nb::module_& m);
void bind_imgui_api_tab_bars(nb::module_& m);
void bind_imgui_api_logging(nb::module_& m);
void bind_imgui_api_drag_drop(nb::module_& m);
void bind_imgui_api_disabling(nb::module_& m);
void bind_imgui_api_clipping(nb::module_& m);
void bind_imgui_api_focus_activation(nb::module_& m);
void bind_imgui_api_overlapping_items(nb::module_& m);
void bind_imgui_api_item_query(nb::module_& m);
void bind_imgui_api_viewports(nb::module_& m);
void bind_imgui_api_draw_lists(nb::module_& m);
void bind_imgui_api_misc_utils(nb::module_& m);
void bind_imgui_api_text_utils(nb::module_& m);
void bind_imgui_api_color_utils(nb::module_& m);
void bind_imgui_api_inputs_keyboard(nb::module_& m);
void bind_imgui_api_inputs_mouse(nb::module_& m);
void bind_imgui_api_clipboard(nb::module_& m);
void bind_imgui_api_settings(nb::module_& m);
void bind_imgui_api_debug(nb::module_& m);
void bind_imgui_api_allocators(nb::module_& m);

void bind_imgui(nb::module_& m) {
auto imgui_module = m.def_submodule("imgui", "ImGui bindings");
bind_imgui_enums(imgui_module);
bind_imgui_structs(imgui_module);
bind_imgui_macros(imgui_module);
bind_imgui_io(imgui_module);
bind_imgui_style(imgui_module);
bind_imgui_drawlist(imgui_module);
bind_imgui_fonts(imgui_module);

bind_imgui_api_main(imgui_module);
bind_imgui_api_context_creation(imgui_module);
bind_imgui_api_demo_debug(imgui_module);
bind_imgui_api_styles(imgui_module);
bind_imgui_api_windows(imgui_module);
bind_imgui_api_child_windows(imgui_module);
bind_imgui_api_window_utilities(imgui_module);
bind_imgui_api_window_manipulation(imgui_module);
bind_imgui_api_scrolling(imgui_module);
bind_imgui_api_parameter_stacks(imgui_module);
bind_imgui_api_style_read(imgui_module);
bind_imgui_api_cursor_layout(imgui_module);
bind_imgui_api_id_stack(imgui_module);
bind_imgui_api_widgets_text(imgui_module);
bind_imgui_api_widgets_main(imgui_module);
bind_imgui_api_widgets_images(imgui_module);
bind_imgui_api_widgets_combo(imgui_module);
bind_imgui_api_widgets_drag(imgui_module);
bind_imgui_api_widgets_sliders(imgui_module);
bind_imgui_api_widgets_input(imgui_module);
bind_imgui_api_widgets_color(imgui_module);
bind_imgui_api_widgets_trees(imgui_module);
bind_imgui_api_widgets_selectables(imgui_module);
bind_imgui_api_widgets_listbox(imgui_module);
bind_imgui_api_data_plotting(imgui_module);
bind_imgui_api_menus(imgui_module);
bind_imgui_api_tooltips(imgui_module);
bind_imgui_api_popups(imgui_module);
bind_imgui_api_tables(imgui_module);
bind_imgui_api_columns_legacy(imgui_module);
bind_imgui_api_tab_bars(imgui_module);
bind_imgui_api_logging(imgui_module);
bind_imgui_api_drag_drop(imgui_module);
bind_imgui_api_disabling(imgui_module);
bind_imgui_api_clipping(imgui_module);
bind_imgui_api_focus_activation(imgui_module);
bind_imgui_api_overlapping_items(imgui_module);
bind_imgui_api_item_query(imgui_module);
bind_imgui_api_viewports(imgui_module);
bind_imgui_api_draw_lists(imgui_module);
bind_imgui_api_misc_utils(imgui_module);
bind_imgui_api_text_utils(imgui_module);
bind_imgui_api_color_utils(imgui_module);
bind_imgui_api_inputs_keyboard(imgui_module);
bind_imgui_api_inputs_mouse(imgui_module);
bind_imgui_api_clipboard(imgui_module);
bind_imgui_api_settings(imgui_module);
bind_imgui_api_debug(imgui_module);
bind_imgui_api_allocators(imgui_module);
}
19 changes: 19 additions & 0 deletions src/cpp/imgui/imgui_api_allocators.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Memory Allocators

#include "imgui_utils.h"

// clang-format off

void bind_imgui_api_allocators(nb::module_& m) {
// IMGUI_API void SetAllocatorFunctions(ImGuiMemAllocFunc alloc_func, ImGuiMemFreeFunc free_func, void* user_data = NULL);
// Not bound - takes function pointers and void* user_data, difficult to bind properly for Python use

// IMGUI_API void GetAllocatorFunctions(ImGuiMemAllocFunc* p_alloc_func, ImGuiMemFreeFunc* p_free_func, void** p_user_data);
// Not bound - takes function pointers and void* user_data, difficult to bind properly for Python use

// IMGUI_API void* MemAlloc(size_t size);
m.def("MemAlloc", &ImGui::MemAlloc, nb::arg("size"), nb::rv_policy::reference);

// IMGUI_API void MemFree(void* ptr);
m.def("MemFree", &ImGui::MemFree, nb::arg("ptr"));
}
41 changes: 41 additions & 0 deletions src/cpp/imgui/imgui_api_child_windows.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#include "imgui.h"
#include "implot.h"

#include "Eigen/Dense"

#include "../utils.h"
#include "imgui_utils.h"

#include <nanobind/stl/array.h>

// clang-format off
void bind_imgui_api_child_windows(nb::module_& m) {

// Child Windows
// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0, 0), ImGuiChildFlags child_flags = 0, ImGuiWindowFlags window_flags = 0);
m.def(
"BeginChild",
[](const char* str_id, Vec2T size, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags) {
return ImGui::BeginChild(str_id, to_vec2(size), child_flags, window_flags);
},
nb::arg("str_id"),
nb::arg("size") = Vec2T(0.f, 0.f),
nb::arg("child_flags") = 0,
nb::arg("window_flags") = 0);

// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0, 0), ImGuiChildFlags child_flags = 0, ImGuiWindowFlags window_flags = 0);
m.def(
"BeginChild",
[](ImGuiID id, const Vec2T& size, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags) {
return ImGui::BeginChild(id, to_vec2(size), child_flags, window_flags);
},
nb::arg("id"),
nb::arg("size") = Vec2T(0.f, 0.f),
nb::arg("child_flags") = 0,
nb::arg("window_flags") = 0);

// IMGUI_API void EndChild();
m.def("EndChild", []() { ImGui::EndChild(); });

}
// clang-format on
13 changes: 13 additions & 0 deletions src/cpp/imgui/imgui_api_clipboard.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// Clipboard Utilities

#include "imgui_utils.h"

// clang-format off

void bind_imgui_api_clipboard(nb::module_& m) {
// IMGUI_API const char* GetClipboardText();
m.def("GetClipboardText", &ImGui::GetClipboardText);

// IMGUI_API void SetClipboardText(const char* text);
m.def("SetClipboardText", &ImGui::SetClipboardText, nb::arg("text"));
}
29 changes: 29 additions & 0 deletions src/cpp/imgui/imgui_api_clipping.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#include "imgui.h"
#include "implot.h"

#include "Eigen/Dense"

#include "../utils.h"
#include "imgui_utils.h"

#include <nanobind/stl/array.h>

// clang-format off
void bind_imgui_api_clipping(nb::module_& m) {

// Clipping
// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect);
m.def(
"PushClipRect",
[](const Vec2T& clip_rect_min, const Vec2T& clip_rect_max, bool intersect_with_current_clip_rect) {
ImGui::PushClipRect(to_vec2(clip_rect_min), to_vec2(clip_rect_max), intersect_with_current_clip_rect);
},
nb::arg("clip_rect_min"),
nb::arg("clip_rect_max"),
nb::arg("intersect_with_current_clip_rect"));

// IMGUI_API void PopClipRect();
m.def("PopClipRect", []() { ImGui::PopClipRect(); });

}
// clang-format on
Loading