Вы можете попытаться триангулировать (тетраэдрически) каждый примитив, а затем выполнять булевы операции на тетраэдрической сетке, что «проще», поскольку вам нужно беспокоиться только об операциях тетраэдр-тетраэдр. Затем вы можете выполнить извлечение границы, чтобы получить B-повтор. Поскольку вы знаете формы своих примитивов аналитически, вы можете создавать собственные тетраэдризации своих примитивов в соответствии с вашими потребностями вместо того, чтобы полагаться на библиотеку генерации сетки.
Например, предположим, что вашим объектом был союз куба и цилиндра, и предположим, что у вас есть тетраэдризация обоих объектов. Чтобы вычислить граничное представление результирующего объекта, сначала нужно пометить все граничные грани тетраэдров каждого примитивного объекта. Затем вы выполняете операцию объединения: если два тетраэдра не пересекаются, то ничего не нужно делать; в полученном многограннике должны существовать оба тетраэдра. Если они пересекаются, то есть ряд случаев (вероятно, порядка десятка или около того), которые необходимо обработать. В каждом из этих случаев объем двух тетраэдров необходимо повторно триангулировать таким образом, чтобы соблюдались поверхностные ограничения. Это несколько облегчает тот факт, что вам нужно беспокоиться только о тетраэдрах, а не о более сложных формах. При этом необходимо поддерживать метки граничных фасетов, чтобы в конечном наборе тетраэдров граничные грани можно было извлечь для образования треугольной сетки поверхности.