Вопрос или проблема
Я новичок в CAD. Однако мне интересно реализовать некоторые интерактивные геометрические алгоритмы в 3D с использованием CAD-программного обеспечения. Похоже, что в интернете доступно много хороших открытых вариантов, таких как OpenJSCAD, Implicit, FreeCAD.
Однако, исходя из того немного, что я знаю о CAD, мы программируем 3D модель на скриптовом языке пакета CAD. Затем мы получаем файл STL, который визуализируется офлайн с использованием стандартного визуализирующего программного обеспечения.
Мне хотелось бы иметь CAD-моделлер, основанный на Python / Haskell, который поддерживает обработку событий, скажем, через функции обратного вызова.
Matplotlib в Python, например, имеет замечательную поддержку именно для этой цели. Но, насколько я знаю, это работает только для 2D.
Типичный сценарий использования: пользователь инициирует случайное облако точек в 3D. Облако точек рендерится на экране. Затем, нажав клавишу ‘C’, мы можем видеть каждый шаг построения алгоритма выпуклой оболочки.
По мере выполнения алгоритма мы можем вращать его, увеличивать интересные части и т.д.
Существуют ли подобные пакеты? В идеале, на Python или Haskell.
Попробуйте pythonOCC, он построен на открытом геометрическом ядре (opencascade).
Вам придется исследовать и посмотреть, подходит ли он для вашего случая использования, но я думаю, что с его помощью можно добиться многого.
Также смотрите ‘Связанные проекты’ на сайте, там может быть что-то еще, что вас заинтересует.
Не используя CAD-программное обеспечение, но используя Python, есть Jupyter VPython.
Предполагая, что у вас уже установлена последняя версия Python, вы можете установить VPython с помощью:
pip install vpython --upgrade
Это позволит вам запустить ядра Jupyter VPython, запустив:
jupyter notebook
и на полученной веб-странице, http://localhost:8888 по умолчанию, выбрав новый VPython в правом верхнем углу.
- Бесплатно и с открытым исходным кодом
- Кроссплатформенно
- Вы можете делать почти то, что ищете
- не CAD-программа
Я также рекомендую ознакомиться с исходным кодом и демо на github, одно из упомянутых демо:
Ответ или решение
Моделирование в CAD с поддержкой интерактивных событий
Введение
В последние годы 3D моделирование и геометрические алгоритмы стали важными компонентами многих областей, включая архитектуру, инженерию и научные исследования. С учетом вашего интереса к разработке интерактивных геометрических алгоритмов с использованием CAD-софта, рассмотрим доступные решения на языках Python и Haskell, которые поддерживают событие и обратные вызовы.
Популярные инструменты для 3D-моделирования
-
pythonOCC
pythonOCC представляет собой связывающую библиотеку для OpenCASCADE — мощного геометрического ядра. Она предоставляет обширные возможности для 3D-моделирования и работы с геометрией, включая создание и визуализацию сложных форм. PythonOCC может быть отличным выбором для вашего проекта, так как реализует обработку событий, что позволило бы более интерактивно взаимодействовать с моделями. -
VPython
VPython — это библиотека, созданная для упрощения работы с 3D-графикой в Python и идеально подходит для образовательных целей. Устанавливается с помощью команды:pip install vpython --upgrade
VPython позволяет создавать интерактивные графические объекты в Jupyter Notebook, предоставляя пользователю возможность взаимодействовать с моделями. Это решает вашу задачу визуализации 3D-точек и их обработки, таких как построение выпуклой оболочки.
Интерактивные элементы
Как вы упомянули в вашем вопросе, возможность обрабатывать события — это краеугольный камень интерактивного 3D-моделирования. Например, с помощью VPython вы можете настраивать обратные вызовы для клавиатуры, что позволило бы пользователю пожатие клавиши ‘C’ инициировать отображение этапов алгоритма. Это обеспечивает высокий уровень интерактивности, позволяя легко вращать и зумировать модели.
Вот пример простого сценария с VPython для визуализации точечного облака и построения выпуклой оболочки:
from vpython import *
# Создание точкового облака
points = [vector(random.randint(-10, 10), random.randint(-10, 10), random.randint(-10, 10)) for _ in range(100)]
dots = [sphere(pos=point, radius=0.1, color=color.red) for point in points]
def draw_convex_hull():
# Здесь добавьте вашу реализацию алгоритма выпуклой оболочки
pass
# Обработчик событий клавиатуры
def keydown(evt):
if evt.key == 'c':
draw_convex_hull()
# Связка обработчика событий
scene.bind('keydown', keydown)
Этот код создает 3D визуализацию точек и связывает нажатие клавиши с функцией, которая бы выполняла вашу алгоритмическую логику.
Заключение
В заключение, есть несколько мощных инструментов для реализации интерактивных 3D алгоритмов в Python и Haskell. PythonOCC может предложить обширные возможности для CAD-моделирования, тогда как VPython предоставляет простоту и гибкость для образовательных и демонстрационных проектов.
Каждый из этих инструментов представляет многообещающие возможности для создания интерактивных 3D-моделей, способных к визуализации и взаимодействию в реальном времени. Исследуйте предоставленные библиотеки и выберите то, что наилучшим образом соответствует вашим специфическим требованиям и целям.