Wrapping Rhino.Geometry.Brep

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!