Hello everyone, I need some help.
I am trying to get a XY plane that cuts through a brep and seperates the brep in two parts equally.
Code as below. It fails by the “while” loop. How do I refine the code?
Thanks in advance.
import rhinoscriptsyntax as rs
import Rhino.Geometry as rg
# Variable "Brep" is a closed brep input.
# Returns the height of the input brep in Z direction.
# Define a function that returns a volume cut by a XY plane at certain height.
return Btm, para_v
# Target is half of the volume.
# Giving an accuracy.
# Using dichotomy by "while" loop.
max = Height*0.99
min = Height*0.01
h = (max+min)/2
# Out put.
Volume Divsion Debug.gh (5.5 KB)
Hi John, welcome onboard. It’s easier to help debug if you upload a Grasshopper definition with all relevant geometry inputs internalised and a screenshot of the error message/stack trace. Very nice source code formatting though
Oh, my apology. Thanks for reminding. I’ve uploaded the Grasshopper definition.
No worries. I’m afraid I can’t reproduce any errors, running Rhino version
7.16.22053.15001 in a
Large Objects - Meters template:
Edit: I didn’t notice you had commented out the offending bits of code (using
Volume Divsion Debug_AHD.gh
"""" some code """ will highlight properly). Looks like you’re never meeting a condition that will end the while loop (i.e. you enter an infinite loop and crash Rhino). You can prevent this by explicitly breaking the loop after N iterations, enabling you to debug why. In this case, your volume variable never drops below 5550:
Hi Anders. Thanks for your help. I’m happy to tell you that I’ve solved the problem with your debug method.
But I cann’t upload the gh file by network issues this time. (Try serval times but still happens.)
Will reuploaded it when the network is available.
Can’t wait to share with you so I will explain below.
The reason is that the varaible “Btm” (surface) in function “vol_split” is flipped unexpectedly. As a result, the variable “Vol” and “Tar” turn to be negative numbers, which makes the while loop doesn’t work.
One of the solution is to change " Tar = Vol/2 " to " Tar = abs (Vol/2) "
With this change, the while loop works well (no need the break condition).
Hi Anders. Now the network resumed.
I’ve uploaded it again. I also enhanced the scripts a bit.
Volume Divsion finished.gh (20.1 KB)