Skip to content

Commit e94b666

Browse files
committed
update latest examples
1 parent b27748c commit e94b666

File tree

2 files changed

+93
-48
lines changed

2 files changed

+93
-48
lines changed

docs/examples/example_booleans.py

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ def boolean_difference():
2626
V, F = boolean_difference_mesh_mesh(A, B)
2727
shape = Polyhedron(V.tolist(), F.tolist())
2828
shape = shape.to_mesh()
29-
3029
return shape
3130

3231

@@ -36,7 +35,6 @@ def boolean_intersection():
3635
V, F = boolean_intersection_mesh_mesh(A, B)
3736
shape = Polyhedron(V.tolist(), F.tolist())
3837
shape = shape.to_mesh()
39-
4038
return shape
4139

4240

@@ -46,7 +44,6 @@ def boolean_union():
4644
V, F = boolean_union_mesh_mesh(A, B)
4745
shape = Polyhedron(V.tolist(), F.tolist())
4846
shape = shape.to_mesh()
49-
5047
return shape
5148

5249

@@ -58,33 +55,37 @@ def split():
5855
return mesh.exploded()
5956

6057

61-
def main():
62-
"""Compute the boolean difference, intersection, union, and split of two triangle meshes."""
63-
difference = boolean_difference()
64-
intersection = boolean_intersection()
65-
union = boolean_union()
66-
splits = split()
67-
return difference, intersection, union, splits
58+
# =============================================================================
59+
# Booleans
60+
# =============================================================================
61+
62+
difference = boolean_difference()
63+
intersection = boolean_intersection()
64+
union = boolean_union()
65+
splits = split()
6866

67+
# =============================================================================
68+
# Spread
69+
# =============================================================================
6970

70-
difference, intersection, union, splits = main()
71+
difference.transform(Translation.from_vector([-6, 0, 0]))
72+
intersection.transform(Translation.from_vector([-2, 0, 0]))
73+
union.transform(Translation.from_vector([2, 0, 0]))
7174

75+
for m in splits:
76+
m.transform(Translation.from_vector([6, 0, 0]))
7277

7378
# ==============================================================================
7479
# Visualize
7580
# ==============================================================================
7681

7782
viewer = Viewer()
7883

79-
difference.transform(Translation.from_vector([-6, 0, 0]))
80-
intersection.transform(Translation.from_vector([-2, 0, 0]))
81-
union.transform(Translation.from_vector([2, 0, 0]))
82-
for m in splits:
83-
m.transform(Translation.from_vector([6, 0, 0]))
84-
8584
viewer.scene.add(difference, lineswidth=1, show_points=False)
8685
viewer.scene.add(intersection, lineswidth=1, show_points=False)
8786
viewer.scene.add(union, lineswidth=1, show_points=False)
88-
viewer.scene.add(splits, lineswidth=1, show_points=False)
87+
88+
group = viewer.scene.add_group(name="Splits")
89+
group.add_from_list(splits, lineswidth=1, show_points=False)
8990

9091
viewer.show()

docs/examples/example_geodesics.py

Lines changed: 74 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,20 @@
11
from pathlib import Path
22

33
import numpy as np
4-
from compas.colors import Color, ColorMap
4+
from compas.colors import Color
5+
from compas.colors import ColorMap
56
from compas.datastructures import Mesh
6-
from compas.geometry import Box, Point, Polyline, Translation
7+
from compas.geometry import Box
8+
from compas.geometry import Point
9+
from compas.geometry import Polyline
10+
from compas.geometry import Translation
711
from compas_viewer import Viewer
812
from compas_viewer.config import Config
913

10-
from compas_cgal.geodesics import (
11-
HeatGeodesicSolver,
12-
geodesic_isolines,
13-
geodesic_isolines_split,
14-
heat_geodesic_distances,
15-
)
16-
17-
# Load mesh
18-
FILE = Path(__file__).parent.parent.parent / "data" / "elephant.off"
19-
mesh = Mesh.from_off(FILE)
20-
mesh.quads_to_triangles()
21-
V, F = mesh.to_vertices_and_faces()
22-
V_np = np.array(V)
23-
24-
# Config
25-
X_OFF, Y_OFF = 0.75, 1.0
26-
ISOVALUES = [i/50 for i in range(50)]
27-
SPLIT_ISOVALUES = [i/20 for i in range(20)]
28-
COLORS = [Color.red(), Color.orange(), Color.yellow(), Color.green(),
29-
Color.cyan(), Color.blue(), Color.purple(), Color.magenta()]
30-
cmap = ColorMap.from_two_colors(Color.blue(), Color.red())
14+
from compas_cgal.geodesics import HeatGeodesicSolver
15+
from compas_cgal.geodesics import geodesic_isolines
16+
from compas_cgal.geodesics import geodesic_isolines_split
17+
from compas_cgal.geodesics import heat_geodesic_distances
3118

3219

3320
def make_mesh(V, F, offset):
@@ -61,41 +48,98 @@ def make_source_points(sources, offset):
6148
return [Point(V[s][0] + offset[0], V[s][1] + offset[1], V[s][2]) for s in sources]
6249

6350

64-
# Row 1: Single source
51+
# =============================================================================
52+
# Load mesh
53+
# =============================================================================
54+
55+
FILE = Path(__file__).parent.parent.parent / "data" / "elephant.off"
56+
mesh = Mesh.from_off(FILE)
57+
mesh.quads_to_triangles()
58+
V, F = mesh.to_vertices_and_faces()
59+
V_np = np.array(V)
60+
61+
# =============================================================================
62+
# Config
63+
# =============================================================================
64+
65+
X_OFF, Y_OFF = 0.75, 1.0
66+
ISOVALUES = [i / 50 for i in range(50)]
67+
SPLIT_ISOVALUES = [i / 20 for i in range(20)]
68+
COLORS = [
69+
Color.red(),
70+
Color.orange(),
71+
Color.yellow(),
72+
Color.green(),
73+
Color.cyan(),
74+
Color.blue(),
75+
Color.purple(),
76+
Color.magenta(),
77+
]
78+
cmap = ColorMap.from_two_colors(Color.blue(), Color.red())
79+
80+
# =============================================================================
81+
# Single sources
82+
# =============================================================================
83+
6584
src1 = [0]
6685
dist1 = heat_geodesic_distances((V, F), src1)
6786

68-
# Row 2: Multiple sources (bbox corners)
87+
# =============================================================================
88+
# Multiple sources
89+
# =============================================================================
90+
6991
solver = HeatGeodesicSolver((V, F))
7092
bbox = Box.from_points(V_np)
7193
src2 = list(dict.fromkeys([int(np.argmin(np.linalg.norm(V_np - c, axis=1))) for c in bbox.vertices]))
7294
dist2 = solver.solve(src2)
7395

74-
# Viewer
96+
# =============================================================================
97+
# Viz
98+
# =============================================================================
99+
75100
config = Config()
76101
config.camera.target = [X_OFF, -Y_OFF / 2, 0]
77102
config.camera.position = [X_OFF, -2.0, 0.8]
103+
78104
viewer = Viewer(config=config)
79105

80106
# Row 1: Single Source
107+
81108
g1 = viewer.scene.add_group("Single Source")
82-
g1.add(make_mesh(V, F, (0, 0)), use_vertexcolors=True, vertexcolor=make_vertex_colors(dist1), show_lines=False)
109+
110+
g1.add(
111+
make_mesh(V, F, (0, 0)),
112+
use_vertexcolors=True,
113+
vertexcolor=make_vertex_colors(dist1),
114+
show_lines=False,
115+
)
116+
83117
for pt in make_source_points(src1, (0, 0)):
84118
g1.add(pt, pointcolor=Color.black(), pointsize=20)
85-
# g1.add(make_mesh(V, F, (X_OFF, 0)), facecolor=Color.grey(), show_lines=True)
119+
86120
for pl in make_isolines(src1, (X_OFF, 0)):
87121
g1.add(pl, linecolor=Color.red(), lineswidth=5)
122+
88123
for m, c in make_split_meshes(src1, (2 * X_OFF, 0)):
89124
g1.add(m, facecolor=c, show_lines=False)
90125

91126
# Row 2: Multiple Sources
127+
92128
g2 = viewer.scene.add_group("Multiple Sources")
93-
g2.add(make_mesh(V, F, (0, -Y_OFF)), use_vertexcolors=True, vertexcolor=make_vertex_colors(dist2), show_lines=False)
129+
130+
g2.add(
131+
make_mesh(V, F, (0, -Y_OFF)),
132+
use_vertexcolors=True,
133+
vertexcolor=make_vertex_colors(dist2),
134+
show_lines=False,
135+
)
136+
94137
for pt in make_source_points(src2, (0, -Y_OFF)):
95138
g2.add(pt, pointcolor=Color.black(), pointsize=20)
96-
# g2.add(make_mesh(V, F, (X_OFF, -Y_OFF)), facecolor=Color.grey(), show_lines=True)
139+
97140
for pl in make_isolines(src2, (X_OFF, -Y_OFF)):
98141
g2.add(pl, linecolor=Color.red(), lineswidth=5)
142+
99143
for m, c in make_split_meshes(src2, (2 * X_OFF, -Y_OFF)):
100144
g2.add(m, facecolor=c, show_lines=False)
101145

0 commit comments

Comments
 (0)