Субтрактивно проведите тело через другого в Python (или C ++) - PullRequest
2 голосов
/ 10 апреля 2010

Я пытаюсь собрать простую программу, которая позволит мне визуализировать серию последовательных надрезов на деревянной панели с помощью маршрутизатора с определенной режущей головкой. Я пытаюсь найти библиотеку геометрии, которая способна вычитать трехмерные фигуры или тела, вычитая другие трехмерные тела через них.

В частности, я хотел бы иметь возможность определить прямоугольное тело (деревянная панель), а затем определить форму профиля бита и выполнять прорези через прямоугольное тело (иногда по прямой линии, иногда по дуге окружности) , Кто-нибудь знает что-нибудь, что сделает это?

Ответы [ 8 ]

2 голосов
/ 10 апреля 2010

pythonOCC тоже интересный вариант!

1 голос
/ 22 июля 2010
1 голос
/ 10 апреля 2010

Возможно Уровень Python FreeCAD может предоставить то, что вы запрашиваете.

0 голосов
/ 05 апреля 2012

Хотя это не совсем библиотека, один из способов сделать это может заключаться в том, чтобы использовать возможности экструзии 2D-3D, которые поддерживаются большинством этих библиотек. Предварительный алгоритм для этого может быть:

  1. Получить битовый профиль в виде 2D фигуры (скорее всего, она уже есть).
  2. Выдавите этот профиль вдоль линии или дуги, которая является траекторией, создав трехмерное тело, которое будет иметь форму выреза.
  3. В каждой вершине (скажем, где прямой путь соединяется с криволинейным), выполните «вращение-выдавливание» или «вращение-выдавливание» профиля бита, чтобы создать угловой радиус - большинство библиотек также должны поддерживать эту операцию.
  4. Повторите с 2 до завершения со всеми траекториями.
  5. Выполнить логическое вычитание CSG из (заготовка - set_of_toolpaths).

Этот алгоритм, похоже, может быть чреват крайними случаями, но я пока не мог придумать ни одного. Я задаюсь вопросом, почему, если это так просто, больше нет пакетов, которые уже делают это.

0 голосов
/ 05 апреля 2012

CGAL выглядит так, как будто он может выполнять 3D-сканирование, используя 3D Minkowski Sums . (См. Раздел «Скольжение» далее вниз по странице.)

Единственное ограничение, которое я могу видеть до сих пор при использовании сумм Минковского, состоит в том, что, если вы проводите объект по трехмерной траектории, вы не можете поворачивать объект одновременно. (Я могу ошибаться в этом.) Вращение во время подметания было бы полезно, например, если вы пытаетесь смоделировать резку траектории, используя фрезерный станок или фрезерный наконечник на внешней поверхности вращающегося цилиндра, например, для 4-го или 5-го осевой поворотный стол на фрезерном станке. Но первоначальный вопрос был о прохождении 3D-объектов по 2D-траекториям, имитации разрезов на плоскости, такой как деревянный блок, поэтому это ограничение может быть важно для меня, но не для OP.

CGAL используется OpenSCAD . OpenSCAD имеет примитив minkowski (), который использует функцию CGAL 3D Minkowski. OpenSCAD может быть в состоянии обеспечить быстрый технико-экономический тест, а также, возможно, долгосрочное решение для визуализации траектории. (В последний раз, когда я смотрел на это, я так не думал, но, возможно, это была более старая версия OpenSCAD.)

CGAL - это C ++, с открытым исходным кодом, с двойной лицензией. До сих пор я нашел две привязки Python:

0 голосов
/ 28 декабря 2011

Мы используем sgCore

Очень мощная и простая библиотека.

0 голосов
/ 18 мая 2010

HeeksCAD может сделать эту работу за вас. http://code.google.com/p/heekscad/

0 голосов
/ 18 мая 2010

На пути C ++, если у вас есть опыт работы с Direct3D / OpenGL, вы могли бы обойти с помощью TetGen и GTS , чтобы что-то собрать.

ПРЕДУПРЕЖДЕНИЕ: Очень длинная кривая обучения.

ОБНОВЛЕНИЕ: Я недавно экспериментировал с Вырезать CSG и до сих пор доволен результатами. Вы можете легко вычесть срез из деревянной панели, чтобы получить желаемый результат.

...