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
import Rhino
import Grasshopper
from Grasshopper.Kernel.Types import GH_Brep
# 1. BoundingBox ophalen
box_a = x.GetBoundingBox(True)
box_b = y.GetBoundingBox(True)
# 2. Overlap grenzen bepalen
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. De 4 Punten van de overlap-rechthoek
p_lb = rg.Point3d(min_x, max_y, z_min) # Links-Boven
p_rb = rg.Point3d(max_x, max_y, z_min) # Rechts-Boven
p_lo = rg.Point3d(min_x, min_y, z_min) # Links-Onder
p_ro = rg.Point3d(max_x, min_y, z_min) # Rechts-Onder
# — BALK A (loopt horizontaal, miter aan de rechterkant) —
# We trekken de balk naar de diagonaal p_lb → p_ro
pts_a = [
rg.Point3d(box_a.Min.X, box_a.Min.Y, z_min), # Start onder
p_ro, # Miter punt onder
p_lb, # Miter punt boven
rg.Point3d(box_a.Min.X, box_a.Max.Y, z_min), # Start boven
rg.Point3d(box_a.Min.X, box_a.Min.Y, z_min) # Sluiten
]
# — BALK B (loopt verticaal, miter aan de onderkant) —
# We sluiten aan op dezelfde diagonaal p_lb → p_ro
pts_b = [
p_ro, # Miter punt onder
rg.Point3d(box_b.Max.X, box_b.Max.Y, z_min), # Eind rechtsboven
rg.Point3d(box_b.Min.X, box_b.Max.Y, z_min), # Eind linksboven
p_lb, # Miter punt boven
p_ro # Sluiten
]
# — GEOMETRIE MAKEN —
def create_brep(pts, box):
curve = rg.PolylineCurve(pts)
height = box.Max.Z - box.Min.Z
brep = rg.Extrusion.Create(curve, height, True).ToBrep()
brep.Translate(rg.Vector3d(0, 0, box.Min.Z - z_min))
return brep
brep_a = create_brep(pts_a, box_a)
brep_b = create_brep(pts_b, box_b)
a = brep_a
b = brep_b
This one doesn’t:
import Rhino.Geometry as rg
import Rhino
import Grasshopper
from Grasshopper.Kernel.Types import GH_Brep
# 1. BoundingBox ophalen
box_a = x.GetBoundingBox(True)
box_b = y.GetBoundingBox(True)
# 2. Overlap grenzen bepalen
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. De 4 Punten van de overlap-rechthoek
p_lb = rg.Point3d(min_x, max_y, z_min) # Links-Boven
p_rb = rg.Point3d(max_x, max_y, z_min) # Rechts-Boven
p_lo = rg.Point3d(min_x, min_y, z_min) # Links-Onder
p_ro = rg.Point3d(max_x, min_y, z_min) # Rechts-Onder
# — BALK A (loopt horizontaal, miter aan de rechterkant) —
# We trekken de balk naar de diagonaal p_lb → p_ro
pts_a = [
rg.Point3d(box_a.Min.X, box_a.Min.Y, z_min), # Start onder
p_ro, # Miter punt onder
p_lb, # Miter punt boven
rg.Point3d(box_a.Min.X, box_a.Max.Y, z_min), # Start boven
rg.Point3d(box_a.Min.X, box_a.Min.Y, z_min) # Sluiten
]
# — BALK B (loopt verticaal, miter aan de onderkant) —
# We sluiten aan op dezelfde diagonaal p_lb → p_ro
pts_b = [
p_ro, # Miter punt onder
rg.Point3d(box_b.Max.X, box_b.Max.Y, z_min), # Eind rechtsboven
rg.Point3d(box_b.Min.X, box_b.Max.Y, z_min), # Eind linksboven
p_lb, # Miter punt boven
p_ro # Sluiten
]
# — GEOMETRIE MAKEN —
def create_brep(pts, box):
curve = rg.PolylineCurve(pts)
height = box.Max.Z - box.Min.Z
brep = rg.Extrusion.Create(curve, height, True).ToBrep()
brep.Translate(rg.Vector3d(0, 0, box.Min.Z - z_min))
return brep
brep_a = create_brep(pts_a, box_a)
brep_b = create_brep(pts_b, box_b)
# — DE OUTPUT WRAPPING —
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?
Thank you in advance for your help!

