Hi everyone!
I was just trying to write a script in CPython to create a miter edge between two beams (2 closed Breps).
Everything works (I think) but somehow the script refuses to see the ‘closed brep’ as a ‘brep’? The only working script I got gives me this as output: Rhino.Geometry.Brep but once I try to wrap it so another component is able to recognise it in grasshopper it breaks.
I have x and y as inputs (the breps) on item acces and type hint on Brep.
This is the script that works:
import Rhino.Geometry as rg
# 1. BoundingBox ophalen
box_a = x.GetBoundingBox(True)
box_b = y.GetBoundingBox(True)
# 2. Overlap berekenen
min_x = max(box_a.Min.X, box_b.Min.X)
max_x = min(box_a.Max.X, box_b.Max.X)
min_y = max(box_a.Min.Y, box_b.Min.Y)
max_y = min(box_a.Max.Y, box_b.Max.Y)
z_min = min(box_a.Min.Z, box_b.Min.Z)
# 3. Miter Punten
p1 = rg.Point3d(min_x, max_y, z_min)
p2 = rg.Point3d(max_x, min_y, z_min)
# — BALK A —
pts_a = [
rg.Point3d(box_a.Min.X, box_a.Min.Y, z_min),
p2, p1,
rg.Point3d(box_a.Min.X, box_a.Max.Y, z_min),
rg.Point3d(box_a.Min.X, box_a.Min.Y, z_min)
]
curve_a = rg.PolylineCurve(pts_a)
# We maken een Brep direct via Extrusion
brep_a = rg.Extrusion.Create(curve_a, box_a.Max.Z - box_a.Min.Z, True).ToBrep()
brep_a.Translate(rg.Vector3d(0, 0, box_a.Min.Z - z_min))
# — BALK B —
pts_b = [
p2,
rg.Point3d(box_b.Max.X, box_b.Max.Y, z_min),
rg.Point3d(box_b.Min.X, box_b.Max.Y, z_min),
p1, p2
]
curve_b = rg.PolylineCurve(pts_b)
brep_b = rg.Extrusion.Create(curve_b, box_b.Max.Z - box_b.Min.Z, True).ToBrep()
brep_b.Translate(rg.Vector3d(0, 0, box_b.Min.Z - z_min))
# — DE OUTPUT —
a = [brep_a]
b = [brep_b]
This one doesn’t:
import Rhino.Geometry as rg
import Rhino
import Grasshopper
# Importeer de Brep wrapper (net als GH_Material)
from Grasshopper.Kernel.Types import GH_Brep
# 1. BoundingBox ophalen
box_a = x.GetBoundingBox(True)
box_b = y.GetBoundingBox(True)
# 2. Overlap berekenen
min_x = max(box_a.Min.X, box_b.Min.X)
max_x = min(box_a.Max.X, box_b.Max.X)
min_y = max(box_a.Min.Y, box_b.Min.Y)
max_y = min(box_a.Max.Y, box_b.Max.Y)
z_min = min(box_a.Min.Z, box_b.Min.Z)
# 3. Miter Punten
p1 = rg.Point3d(min_x, max_y, z_min)
p2 = rg.Point3d(max_x, min_y, z_min)
# — BALK A —
pts_a = [
rg.Point3d(box_a.Min.X, box_a.Min.Y, z_min),
p2, p1,
rg.Point3d(box_a.Min.X, box_a.Max.Y, z_min),
rg.Point3d(box_a.Min.X, box_a.Min.Y, z_min)
]
curve_a = rg.PolylineCurve(pts_a)
# We maken een Brep direct via Extrusion
brep_a = rg.Extrusion.Create(curve_a, box_a.Max.Z - box_a.Min.Z, True).ToBrep()
brep_a.Translate(rg.Vector3d(0, 0, box_a.Min.Z - z_min))
# — BALK B —
pts_b = [
p2,
rg.Point3d(box_b.Max.X, box_b.Max.Y, z_min),
rg.Point3d(box_b.Min.X, box_b.Max.Y, z_min),
p1, p2
]
curve_b = rg.PolylineCurve(pts_b)
brep_b = rg.Extrusion.Create(curve_b, box_b.Max.Z - box_b.Min.Z, True).ToBrep()
brep_b.Translate(rg.Vector3d(0, 0, box_b.Min.Z - z_min))
# — DE OUTPUT —
if isinstance(brep_a, Rhino.Geometry.Brep):
a = GH_Brep(brep_a)
if isinstance(brep_b, Rhino.Geometry.Brep):
b = GH_Brep(brep_b)
It gives me this error: TypeError: Rhino.Geometry.Brep value cannot be converted to Rhino.Geometry.Brep in method Void .ctor(Rhino.Geometry.Brep)
I have a similar code for rhino matrials that does still work:
if isinstance(item, Rhino.Display.DisplayMaterial):
item = GH_Material(item)
What am I doing wrong here?





