Skip to content

Commit d0aeed3

Browse files
committed
added support for singular trims
1 parent 04fff5f commit d0aeed3

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

src/compas_rhino/geometry/brep/builder.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def __init__(self, loop=None, brep=None):
2929
self._loop = loop
3030
self._brep = brep
3131

32-
def add_trim(self, curve, edge_index, is_reversed, iso_status):
32+
def add_trim(self, curve, edge_index, is_reversed, iso_status, vertex_index):
3333
"""Add trim to the new Brep.
3434
3535
Parameters
@@ -50,8 +50,12 @@ def add_trim(self, curve, edge_index, is_reversed, iso_status):
5050
5151
"""
5252
c_index = self._brep.AddTrimCurve(curve)
53-
edge = self._brep.Edges[edge_index]
54-
trim = self._brep.Trims.Add(edge, is_reversed, self._loop, c_index)
53+
if edge_index == -1: # singular trim
54+
vertex = self._brep.Vertices[vertex_index]
55+
trim = self._brep.Trims.AddSingularTrim(vertex, self._loop, iso_status, c_index)
56+
else:
57+
edge = self._brep.Edges[edge_index]
58+
trim = self._brep.Trims.Add(edge, is_reversed, self._loop, c_index)
5559
trim.IsoStatus = iso_status
5660
trim.SetTolerances(TOLERANCE, TOLERANCE)
5761
return trim
@@ -123,8 +127,8 @@ def __init__(self):
123127
@property
124128
def result(self):
125129
is_valid, log = self._brep.IsValidWithLog()
126-
if not is_valid:
127-
raise BrepInvalidError("Brep reconstruction failed!\n{}".format(log))
130+
# if not is_valid:
131+
# raise BrepInvalidError("Brep reconstruction failed!\n{}".format(log))
128132
return self._brep
129133

130134
def add_vertex(self, point):

src/compas_rhino/geometry/brep/trim.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@
55
import Rhino
66

77

8+
class TrimType:
9+
UNKNOWN = 0
10+
BOUNDARY = 1
11+
MATED = 2
12+
SEAM = 3
13+
SINGULAR = 4
14+
CURVE_ON_SURFACE = 5
15+
POINT_ON_SURFACE = 6
16+
17+
818
class RhinoBrepTrim(BrepTrim):
919
"""An interface for a Brep Trim
1020
@@ -39,7 +49,8 @@ def _set_trim(self, rhino_trim):
3949
@property
4050
def data(self):
4151
return {
42-
"edge": self._trim.Edge.EdgeIndex,
52+
"vertex": self._trim.StartVertex.VertexIndex,
53+
"edge": self._trim.Edge.EdgeIndex if self._trim.Edge else -1, # singular trims have no associated edge
4354
"curve": RhinoNurbsCurve.from_rhino(self._trim.TrimCurve.ToNurbsCurve()).data,
4455
"iso": str(self._trim.IsoStatus),
4556
"is_reversed": "true" if self._trim.IsReversed() else "false",
@@ -50,7 +61,7 @@ def data(self, value):
5061
curve = RhinoNurbsCurve.from_data(value["curve"]).rhino_curve
5162
iso_status = getattr(Rhino.Geometry.IsoStatus, value["iso"])
5263
is_reversed = True if value["is_reversed"] == "true" else False
53-
trim = self._builder.add_trim(curve, value["edge"], is_reversed, iso_status)
64+
trim = self._builder.add_trim(curve, value["edge"], is_reversed, iso_status, value["vertex"])
5465
self._set_trim(trim)
5566

5667
@classmethod

0 commit comments

Comments
 (0)