Как разделить сетку по плоскости деления в Aspose.3D
Разделение Мешей по Полупространству в Aspose.3D
Этот учебник демонстрирует, как использовать Aspose.3D для выполнения операций разделения мешей с использованием плоскостей HalfSpace. Эта техника полезна для извлечения определенных частей 3D-модели на основе пространственных критериев.
Понимание операций HalfSpace
HalfSpace представляет собой бесконечное пространство, разделенное плоскостью. При использовании с булевыми операциями Aspose.3D это позволяет извлекать определенные части меша, которые существуют с одной стороны определенной плоскости.
Ключевые понятия:
- HalfSpace: Представляет собой бесконечное пространство, разделенное плоскостью
- Булевы операции: Используются для извлечения частей меша относительно HalfSpace
- Уравнение плоскости: Определяется как ax + by + cz + d = 0, где (a,b,c) - вектор нормали
- Положительная сторона: Часть пространства, где вектор нормали плоскости направлен
Пример кода: Разделение меша с помощью HalfSpace
Следующий код на C# демонстрирует, как создать простую меш-коробку и разделить ее с помощью плоскости HalfSpace:
using System;
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
using Aspose.ThreeD.Utilities;
class MeshBooleanWithHalfSpace
{
public static void Execute()
{
// Создать новую 3D-сцену
Scene scene = new Scene();
// Создать меш-коробку (размеры 2x2x2 по умолчанию)
Mesh boxMesh = (new Box()).ToMesh();
Node boxNode = scene.RootNode.CreateChildNode("Box", boxMesh);
// Создать плоскость реза HalfSpace
HalfSpace halfSpace = new HalfSpace();
// Определить уравнение плоскости: ax + by + cz + d = 0
// Используя вектор нормали, направленный в направлении Z
halfSpace.Plane = new Plane(new Vector3(0, 0, 1), 0);
// Позиционировать HalfSpace (создать узел и преобразование)
Node halfSpaceNode = scene.RootNode.CreateChildNode("HalfSpace", halfSpace);
halfSpaceNode.Transform.Translation = new Vector3(0, 0, 0.5); // Позиция на z=0.5
// Выполнить операцию булевого разделения
Node splitResult = BooleanOperator.Split(boxNode, halfSpaceNode);
// Добавить результат в сцену и сохранить
scene.RootNode.CreateChildNode("SplitResult", splitResult.Entity);
scene.Save("halfspace_split_result.obj", FileFormat.WavefrontOBJ);
Console.WriteLine("Разделение меша с использованием HalfSpace успешно завершено.");
}
}
Объяснение кода
Требования к пространствам имен
using Aspose.ThreeD;
using Aspose.ThreeD.Entities; // Содержит классы HalfSpace и BooleanOperator
using Aspose.ThreeD.Utilities; // Содержит утилиты Vector3 и Plane
Создание геометрии
- Инициализация сцены:
Scene scene = new Scene();
- Создание коробки:
(new Box()).ToMesh()
создает стандартный куб - Иерархия узлов: Меш добавляется в сцену через дочерний узел
Определение режущей плоскости
-
Определение плоскости:
halfSpace.Plane = new Plane(new Vector3(0, 0, 1), 0);
- Создает горизонтальную плоскость XY на z=0
- Вектор нормали (0,0,1) направлен вверх
-
Позиционирование:
halfSpaceNode.Transform.Translation = new Vector3(0, 0, 0.5);
- Перемещает режущую плоскость на z=0.5
- Влияет на то, какая часть меша сохраняется
Выполнение операции
Node splitResult = BooleanOperator.Split(boxNode, halfSpaceNode);
- Возвращает часть меша на положительной стороне плоскости
- Результат добавляется обратно в иерархию сцены
Сохранение результата
scene.Save("halfspace_split_result.obj", FileFormat.WavefrontOBJ);
- Поддерживаемые форматы включают OBJ, STL, FBX, GLTF и другие
- Сохраняется только фрагмент разделения, а не исходный меш
Визуализация операции
Исходные размеры коробки:
- Простирается от (-1,-1,-1) до (1,1,1)
- Центрирован в начале координат
С плоскостью на z=0.5:
- Сохраняет часть, где z > 0.5 (верхняя часть коробки)
- Отбрасывает часть, где z < 0.5 (нижняя часть)
Продвинутое использование
Получение обеих сторон разреза
// Исходный срез (положительный фрагмент)
Node positiveFragment = BooleanOperator.Split(boxNode, halfSpaceNode);
// Инвертировать плоскость для отрицательной стороны
halfSpace.Plane = new Plane(new Vector3(0, 0, -1), 0);
Node negativeFragment = BooleanOperator.Split(boxNode, halfSpaceNode);
Настройка режущей плоскости
// Разная ориентация - угловой срез
halfSpace.Plane = new Plane(new Vector3(0.707, 0, 0.707), 0);
halfSpaceNode.Transform.Translation = new Vector3(0, 0, 1);
Эта реализация демонстрирует основные функциональные возможности возможностей Aspose.3D по разделению мешей с использованием плоскостей HalfSpace, позволяя точно извлекать 3D-геометрию на основе пространственных критериев.