Extrusion sketch lines of Glass from Curtain Panel Family

Is it possible to access the extrusion sketch lines for each curtain panel in a model?

I’m working with multiple curtain panel families. Within the family the glass was built in plan with an sketch and extruded vertically. I would like to be able to access the sketch at each of their locations within the model to send to rhino.

Thanks!

EDIT: SEE ATTACHED REVIT AND DYNAMO FILE
Curtain Wall and Panel.rvt (456 KB)

Beginner in dynamo and most of my strategy comes from my experience in Grasshopper.

Sound like you might not actually have curtain panel families but something pretending to be them.

Can you:

  1. Post a paired down model leaving just one wall of curtain panels? This will allow those who want to help to be sure they are working with the right starting point.
  2. Explain how you want to manipulate the content in Rhino so that we can be sure you’re getting the right stuff on export.
  3. Show what you’ve tried so far with Dynamo (even if it failed miserably as you’ve never done much), so the solution can be better tailored to your skill level.

Also read this for future reference:

Hey Jacob thanks for the reply! Unfortunately the project is work related and I cant share it or else I would have included it with the post, however Ill do my best to recreate a sample version of it tomorrow that I can share.

I guess before anyone dives in too deep into this Im just asking theoretically if it seems possible to get the sketch of an extrusion within a family.

Thanks for your time!

Possible: likely.

Easily executed: that depends…

Haha ok. Ill put something together tomorrow. Thanks!

Alright I added a sample of what I’m working with.
The whole model was built with individual curtain walls the size of the the curtain panel(no idea why. Would assume it has to do with a custom plug in that brings the overall shape from another software and replaces the panels with custom ones). Then the system panel was swapped for the curtain panel they custom built. This includes mullions and spandrel panel. I’ve simplified it down to just the glass.

Previously on other models we’ve pulled adaptive points or curtain panel boundaries for our purpose of recreating the model as simple surfaces in rhino. In this case using Categories:CurtainPanels>All elements in category>Curtain panel Boundaries it gives me the flattened boundary of the panel. I need the curvature of the exterior face of the glass so that doesn’t help me.

My thought was to extract the extrusion sketch and clean up those curves in Grasshopper and extrude them vertically to get what I need.

There is no parameter in the curtain panel family for the radius of the glass extrusion. There is a reporting parameter for “Panel Arc Length” but that I don’t believe gives me any indication of the curvature of the arc.

Any thoughts would be great thanks!

How many different panel types do you have in the actual job? Are they all vertical as this one was or are any generated from a mass?

Approximately 15 different panel types. Most curved like the sample, some flat. All vertical.

Ok then.

For the Geometry you provided and other things which are simple vertical extrusions, I managed to extract the correct data. I didn’t bother to try and query the sketch lines as I didn’t have to in this case. Instead I am relying on the fact that every element you provided used the same sketch plane - the level, and that anything with a normal Z value equal to -1 will be the bottom of the element’s geometry, which as noted is the sketch plane of the element and therefore it’s perimeter is made up of the sketch lines. Try this in a code block:

Surfs =
	Panels.Geometry().Explode();

NormalTest =
	Surfs.NormalAtParameter(0.5, 0.5).Z ==
	Autodesk.Vector.ZAxis().Reverse().Z;

ExtrudedCurves =
	Flatten(
		List.FirstItem(
			List.FilterByBoolMask(
				Surfs,
				NormalTest
			)
		).PerimeterCurves()<1L>
	);

This may help you today, but this is still worth reviewing, as I think that the “real” solution is likely one which:

  1. Opens up each family,
  2. Gets all geometry elements,
  3. Pulls the sketch lines from the elements,
  4. Recreates those lines in the project environment with appropriate transformations and location to match the family itself.

Step 1 isn’t fun and can cause issues, step 2 is painful as it requires switching to family environment which causes issues, step 3 is painful as each type of geometry creation is unique which causes issues, and step 4 is problematic as you’re dealing with curtain panel families which cause issues. For those keeping score at home that issuesissuesissues*issues or issues^4, which I why I’m going to sidestep that problem.

@s.doscher This might work
CurtainWallExtrusionSketch.dyn (6.7 KB)

Only reason I went with a vector based over a point based filter method was to account for some of the other possible issues like a possible X or Y axis curve which would return no results causing you to have to manually review. If in fact you know all geometries have a base surface that sits on the X/Y plane than a point based method also works.

I’ve got some sucess here. Jacob I’m not all that familiar with coding but I was able to understand your approach. This sounds like a viable solution. To complicate things slightly further I’ve got mullions and spandrel cover in the family. So running your code block finds the bottom surface of all of those pieces of geometry. I messed with it very quickly but I had the thought that maybe I could pick just the glass geometry by its material since they are assigned within the family however “solids” dont seem to work with the get element material node. IF this were to work I then I would just send the glass geometry into your code block. I tried changing your “panels explode” line to except “solids” but it doesn’t like that.

Vikram I think this is a solution to but the same issue arrises which is isolating the glass extrusion from the mullion frame and spandrel cover.

Let me know what you think. I think we’re close. Huge help so far guys thanks!

I can check this out tomorrow night if you post that dyn, but with an attempt to change the List.SelectItemAtIndex node for a FilterByBoolMask node. The list would be the solids. The mask would be a list.contains for the largest surface area for the exploded surface geometries. This will make selecting the solid for the glass automatic in almost every case (the outside face of glass unless you have a curved glass panel that is ~2" wide). Idea of automation like this is to automate as much as possible, right?

You’ll need to upload this family here.

1 Like