Wall location curve

Is it possible to return the various location curves of a Revit wall based? For example I want the FinishedFaceExterior curve regardless of what the Location Line parameter is set to, e.g Wall center line. It seems like a pretty straightforward request but there doesn’t seem to be any node that can do this. Clockwork has a node ‘WallOcationLine.FinishedFaceExterior’ but I can’t work out how to use it as there are no inputs.

image

I believe that node mostly provides the appropriate value to set the location line unfortunately.

That being said, I really think we can build something that does this using other methods. (Location Line>translate the thickness of materials each direction)

Is there any way to modify the Area Rules? These seem hard wired into Revit but that seems to do what is required. Just not sure how to access it and/or modify it.

The ‘Element.GetLocation’ node seems to return the center line regardless of the Location Line parameter value which isn’t very helpful.

I believe it is the centerline in most (all? I haven’t checked curtain walls or stacked walls) cases. Getting the thickness of the total wall and offsetting by 1/2 of that value and -1/2 of that value should get faces. Had it working on one of my many ‘hmmm what if’ tests but don’t recall how far I got.

@john_pierson, I didn’t try to find any other face or core lines though. I may play this weekend or on a lunch break though. I’ll post anything good.

I discussed the pain points of creating area boundaries with a coworker recently. Have a few ideas I want to test out, likely next week, and will post back anything good if I remember.

1 Like

@john_pierson

I have this working in that I can get all the external lines using the offset method. I can then extend these (a nominal length) at either end so that they intersect. But the issue is then trying to fillet these together or to do a batch intersection. This would return a series of points which you could then use to create a new polyline. But Dynamo doesn’t seem to have a batch intersection function that return points (?). Might need to be done with Python recursively.

Another way to look at it is to get the solid geometry of the walls (and external doors), create a solid union, and intersect it with a plane. Filter the 2 resulting perimeter curves by area to get the exterior perimeter polycurve. But then you potentially have lots of little curves in the polyline as described here:

I really think we can build something that does this using other methods

This seems to work also - with the help of BattleBIM and Archi-Lab Grimshaw:


Note: wall joins were disabled in this case…

1 Like

Geometry.Intersect

However your points will be duplicated as a result. Prune duplicates would then be required (getting every other won’t work as some walls will have three points). Finally you would have to figure out how to get the in the right order if you need a polyline.

What is the end goal once you have the polyline?

I’ve mentioned this in a previous post, but this workflow will soon be streamlined with one, very efficient node!

3 Likes

@jacob.small

Gometry.Intersect and Geometry.IntersectAll returns lines not points. Or am I missing something?

Worked it out - lacing needs to be set to cross product. It will then return lines and points. Flatten and use list.Filter

2 Likes

If it’s all lines, you could try the LineLoopMerge node:

6 Likes

Alternatively, it is possible to get finish, core, center and core center boundaries from rooms…

1 Like

@john_pierson

Two Clockwork nodes, an Archilab node, and a single code block to get interior, exterior, interior core face, and exterior core face from a wall. If anyone wants to include it in a package feel free.

get wall faces.dyn (12.3 KB)

{wallcurves,direction,walltypes,Widths,cores};
/* get the distance from wall location (centerline) to the
exterior face of wall*/
distance =
	walltypes.GetParameterValueByName("Width")/2;
//get the curves at the exterior face
ExtFaceCurves =
	wallcurves.Translate(direction,distance);

/*Get the number of indicies which need to be dropped*/

ExtDrop =
	-(List.Count(cores<1L>)
		-
	IndexOf(cores<1L>, true));

/* Drop the widths which are not outside the core to get the
width from the exterior face to exterior face of the core */

ExtFaceToExtCore =
	Math.Sum(
		List.DropItems(
			Widths@@-2<1L>,
			ExtDrop<1L>
		)
	);

/* Drop the widths which are not inside the core to get the
width from the exterior face to interior face of the core */

IntDrop =
	-IndexOf(
		List.Reverse(
			cores<1L>
		)@-2<1>,
		true
	);
/* Drop the widths which are not inside the core to get the
width from the exterior face to interior face of the core */
ExtFacetoIntCore =
	Math.Sum(
		List.DropItems(
			Widths@@-2<1L>,
			(IntDrop<1L>)
		)
	);

// OffsetExterior Face to Exterior of Core
ExtCore =
	ExtFaceCurves.Translate(
		Vector.Reverse(direction),
		ExtFaceToExtCore
	);


// OffsetExterior Face to Interior of Core
IntCore =
	ExtFaceCurves.Translate(
		Vector.Reverse(direction),
		ExtFacetoIntCore
	);

//Get total wall width
TotalWidth =
	walltypes.GetParameterValueByName("Width");

/*Get interior face of wall by offsetting the
exterior face by the total width*/
IntFace =
	ExtFaceCurves.Translate(
		Vector.Reverse(direction),
		TotalWidth
	);

Just used it in combination with a Springs.LineLoop.Merge to generate floors which align with the exterior core face in a few heartbeats. Why anyone would ever do the one billion click method when there are tools like this out there is beyond me.

12 Likes

Could you help me how could I get this package “Walllocationline.FinishFaceExterior” ?

It is in the Clockwork package

1 Like

Hi.
This is fantastic! Would really appreciate a similar method for the exterior & interior face of curtain walls. The script returns an error if basic walls and curtain walls are input. Works very well with basic walls only.
Thank-you!

If you have Rooms in your model you could try a Room boundaries method
The Name of the Room should tell you inside/outside.
Mind the line direction though

Curtain walls don’t have a thickness, so finding the inside and outside face isn’t going to work that way. Instead you would have to pull all of the components which make up the wall, find the distance from the location line to furthers point on the geometry for each, and use that. However because of the nature of curtain walls, that likely isn’t a good solution. The idea @Marcel_Rijsmus had of using room geometry is likely a better process.

There is a node called IsCutrainWall (from memory). You can use this to identify curtain walls from your selection and then get the mullion/transom’s location lines.

3 Likes