Skip to content

Commit be2eaf6

Browse files
authored
Merge pull request #908 from compas-dev/blender-booleans
Blender plugin for boolean pluggables
2 parents 3f069ba + a63149f commit be2eaf6

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1717
* Added `Plane.offset`.
1818
* Added `draw_node_labels` and `draw_edgelabels` to `compas_blender.artists.NetworkArtist`.
1919
* Added `compas_blender.artists.RobotModelArtist.clear`.
20+
* Added `compas_blender.geometry.booleans` as plugin for boolean pluggables.
2021

2122
### Changed
2223

src/compas_blender/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,5 @@ def clear():
4646

4747
__all__ = [name for name in dir() if not name.startswith('_')]
4848
__all_plugins__ = [
49-
# 'compas_blender.geometry.booleans',
49+
'compas_blender.geometry.booleans',
5050
]

src/compas_blender/geometry/booleans/__init__.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
import bpy
2-
3-
from compas.geometry import add_vectors
42
from compas.plugins import plugin
53

64

@@ -78,10 +76,21 @@ def boolean_intersection_mesh_mesh(A, B, remesh=False):
7876

7977

8078
def _boolean_operation(A, B, method):
79+
from compas_blender.utilities import draw_mesh
80+
from compas_blender.utilities import delete_object
81+
from compas_blender.utilities import delete_unused_data
82+
A = draw_mesh(* A)
83+
B = draw_mesh(* B)
8184
boolean = A.modifiers.new(type="BOOLEAN", name="A {} B".format(method))
8285
boolean.object = B
8386
boolean.operation = method
8487
bpy.ops.object.modifier_apply({"object": A}, modifier=boolean.name)
85-
vertices = [add_vectors(A.location, vertex.co) for vertex in A.data.vertices]
86-
faces = [list(A.data.polygons[face].vertices) for face in range(len(A.data.polygons))]
88+
graph = bpy.context.evaluated_depsgraph_get()
89+
C = A.evaluated_get(graph)
90+
D = bpy.data.meshes.new_from_object(C)
91+
vertices = [list(vertex.co)[:] for vertex in D.vertices]
92+
faces = [list(face.vertices)[:] for face in D.polygons]
93+
delete_object(A)
94+
delete_object(B)
95+
delete_unused_data()
8796
return vertices, faces

0 commit comments

Comments
 (0)