How to test different values for a level elevation to extract a volume list from a mass floor?


#1

Hi guys!

I am a rookie on Dynamo and am trying to create a routine that gives me a tank volume for each water level.

I created a mass in the Revit with two mass floor in two levels, one in the bottom and one that will be variable that would be the level of the water. My idea is to change the elevation of this level so that I can extract the volume depending on the level.

The point is that when I put the range I want, dynamo only take the last value. I can not get him to take the automatic tests and give me the volume at all the levels I need.

I know that because of my little knowledge in Dynamo I must be doing something very wrong.

Anyone can give me a help?!

Thank you so much.


#2

The levels node reads the Level elements which already exist in the Revit model. What your top workflow is doing, is setting the Elevation of the Level Sand to all the values in the range, thus overwriting the value consistently with the last list value becoming the output.

If you are attempting to get the volumes as the water level increases, if the shape of your tank floor is consistent (and I’m only guessing, a circle?), you can just exract the area of the base floor and calculate the volumes using your range with a formula.
images%20(2)

If your shape is not consistent, then some solid lofting/creation may be necessary to get your volumes.


#3

The shape is not consistent and there’re some some pipes, beams and columns inside. I created a mass for this void inside the tank.

Changing the value of “leval sand” I can manually extract the volume I need, but I wonder if I can not do this test and generate this list automatically with the dynamo.


#4

Here is the mass modeled.


#5

Not sure exactly how to do it…but I would set out to create Dynamo geometry from your mass, and then create an xy plane at the z-elevation which could (according to my theory) be used to o split the solid. That’s how I would do it in grasshopper anyways.

Assuming this method of splitting works, I would then create a centroid in each mass and grab the one with the lowest z value to return the filled bottom element.

I guess the nodes should be labeled/described something like:

Element.geometry
Split solid / split plane
Centroid
Z point
Sort by key
Sort natural order

Not sure about creating planes in Dynamo. I’ve only done this a few times.


#6

@Gustavo_Rocha Something like this?
ezgif-4-41e99ad114


#7

Yes, exactly!

With this can we create a list with those partial volume values as the water rises?


#8

This will pretty much get you there.
You just need to check that the solid you are selecting is really the bottom of the tank.

In this case, you can use a slider to run the volume value down. Then you will know if you are selecting the correct element from the list. Otherwise, you will have to do some sorting based on the centroid values, but that is just an exercise in neatness.

You basically create a list of planes at determined intervals. In this case, I have a height of 2000 mm, and want to cut the solid at every 20mm. 50 is that start value, and you should avoid using a 0 since it will return a null. (We already know that an empty tank is empty, right?)

Then you need to manipulate levels in order to cut the geometry multiple times. @ Level 2. (Maintain List structure is not necessary.)


#9

Another screenshot to better illustrate what it looks like.


#10

Good work @m.owens :+1:
Adding a list of distance values to the Graph I prepared will return values as per the above.
The only difference with this Graph is that I first subracted the geometry of the tank to find the internal space, as this was just a void instead of a mass.
image Note the total volume of the tank which is also displayed. This can be easily removed, but I don’t have time to tweak this now. :alarm_clock:


#11

Thank you guys!!! You’re amazing! I’ve learned a lot with you!
I will try to follow your tips on my model!!!
=)