Monday, July 23, 2012

BIM Triangular panel with filleted hole



 The goal is to make a panel that will fit into a flat triangular mesh that has a hole with graceful fillets at each corner. The first step is to draw it and try to figure out the geometry. From the sketch, the realization that bisecting each angle will provide the centerpoint for the fillets, but finding points to control the curves is pretty complex. Revit demands the use of spline-trhough-points, so an arc won’t work well. The spline-through-point would be prettier anyway for making the fillets.

Make some sketches first to figure out the shape and the geometry.  
Bisecting the angle is a bit challenging. My method is to set points of a known dimension from the vertex along the edge of the triangle reference line.

Connecting the points on the edges adjacent to a vertex will draw a line whose midpoint bisects the angle. Next, if I consider the known dimension to be the length of the hypotenuse of a right triangle, I can use trigonometry to calculate the length that midpoint is from the edge. I can use the same technique to then calculate the location of a point on the edge that defines a line perpendicular to the edge that also goes through the midpoint. Along this line I can measure a given amount to define the width of the strut that goes along the edge of the triangle. 

 The strategy in Revit is to create a rigging for constructing the hole by using reporting parameters for the angles of the triangle, a few given dimensions, and trigonometric equations to calculate the values of other parameters. Because I have chosen to use some given dimensions, this panel will probably be brittle and break as the dimension become extreme. If I build it for a particular dimension, it will probably work as long as the dimension does not change too much. In addition, if the panel does break, I may be able to change the given dimensions to get it to work again.

 In Revit, start with a new family based on a Curtain Panel Pattern-based. Select the grid outer edge, and use the Type selector to change it to a Traingle (flat). You can pull the points up and down to see the triangle deflect in space. 


Create three parameters for angles (a, b, c), and make them Instance, Reporting Parameters. Create three more parameters for the half-angles (the angular dimension of the bisected angle). Calculate these parameters using formulas.

With the triangle displaced in space, draw angular dimensions between each two sides. It is important that you dimension between the reference lines as they are controlled by the adaptive points and can move freely in space. Label these dimensions with the angle reporting parameters. 


Label the angular dimensions with the reporting parameters that you created. 


It can be convenient to select rapidly the plane defined by the three vertices of the triangle. You can create a surface by picking the three edges and clicking on the Create Form icon. Make just the surface and not an extrusion. 






 Lift the adaptive points of the vertices and spin the 3D view to verify that the angular dimensions remain in the plane of the triangle, whatever angle results from the changes to the vertices.


The next step is to draw reference lines from each vertex toward the middle of the triangle to bisect the angles.

While it seems like one could place angular dimensions between the edge and the bisecting line and constrain it dimensionally to bisect the angle, I cannot get that to work. I had to choose a different method.


Create a parameter to control the displacement of the point from the vertex of the angle. I called the parameter “fillet_center” and gave it a default value of 2’ 0".



Considering the first angle, place points on each adjacent edge. Draw a reference line connecting the two points. 


Continue the same process for the other two angles.






Click on the point and set its Measurement Type property to be Segment Length. Associate the fillet_center parameter with the location of the point, being careful to measure from the vertex by watching the blue arrows.
If you accidently set the Segment Length when the blue arrows are indicating the wrong direction, it seems best to set the association of the value to of the Segment Length to none, and then associate the value to the fillet_center parameter again with the proper direction. 


Continue around the triangle, constructing the reference lines to span across from the two edges. Since the offsets from the vertex are the same length, the small triangles at each vertex are now isosceles triangles.





The midpoint of the spanning line will be on the line that bisects the angle.

 Reconnect the reference lines through the vertices to the midpoint to bisect the angles.
Spin the model around and pull the adaptive points up and down to make sure everything stays on the plane and the points and lines adapt as they should.







The next step is to calculate the length along the edge of the triangle that locates a line through the midpoint that is perpendicular to the edge. This line will allow us to measure the thickness of the strut and the endpoint of a curve that defines the fillet. 

 Add some points on the edges of the triangle and make a parameter for them.


First, calculate the length from the midpoint of the base of the isosceles triangle along the base to the edge. By the definition of sine, the opposite edge equals the sin(phi) * hypotenuse. I created a parameter to hold this value. Then I used this value to calculate another right angle length and determined an offset from the vertex of the angle. Constructing a line from this point back to the midpoint gives a perpendicular to the edge through the midpoint. 


 Place a point hosted on this perpendicular line allows one to position with Segment Length a width of the strut.






A final control point determines the arc of the spline that defines the fillet. This point must simply be on the bisecting line. I used a parameter to determine how far the point is from the vertex. 



Repeat this process to make six strut widths and three control points for the fillets. Test the rig by moving the adaptive points up and down. 


 It is probably helpful to see all of the formulas for locating the reference points.
 Draw the profile of the hole and extrude it. Make sure that the extrusion is locked top and bottom, and then offset it up and down from the plane that defines the profile.







Extrude the face that defines the panel. Make the hole into a void object and use it to cut the panel. 


 Some experimentation showed me that the filleting does not work very well. My strategy is to make the location of the fillet control point vary by the dimensions of the triangle. I created a new parameter and used it as a factor to adjust the location of the fillets.

Test it by loading it into a family or project and applying it to a surface.This works better.

 The final formulas are shown.
I like this panel. It could still be refined further, but its proportions seem elegant and it adapts well to the surface.