Extend curve to apparent intersection

image

I am trying to extend a curve to where it would intersect with another curve.

You are looking at a side view of a staircase, the black line is the stairRun, the orange line is curve of the run offset by the riser heights (at start and end point) but now i need to extend the start point in the direction of the orange line, until it reaches the base level (the black curve)

Can someone point me in the right vector (heh)

Hi @Garbage_Collector nice username btw :wink: here is an alternative with spring merge lines

1 Like

or maybe something here

1 Like

My solution:

Note this is good for lines, but might have issues with curves. Non-planar curves can have issues as well, and you’d want to ensure that the normal of the plane which you use is less than 90 degrees from the normal of the curve you’re extending.

In the case of regular stairs (the geometry with @Garbage_Collector was showing) it’s often the case that you’re generating the original line by nosing points, which means you can extend the start of the curve by the distance from the first nosing point to the second and be done with it - no geometry calculations required.

2 Likes

@jacob.small @sovitek

Hi and thank you for your input.
This helped a lot! I have taken some of your input and arrived at a concoction that works hehe…
The remark of Jacob about just translating the start and end by the tread depth was really helpful, didn’t even think of trying that…

Below is what i made:


Now i can create a revit solid to allow for clashtesting in navisworks by other parties (and use the geometry to clash in revit before sharing models with external parties)

Ok - you’re checking headroom. Different tasks need different uses.

This is how I’ve solved the issue before, starting with a stair run (not a stair):

  1. Extract the leading line of each nosing.
  2. Sort the nosing line by their Z value
  3. Get the vector from the midpoint of the second nosing to the midpoint of the first nosing.
  4. Translate the first nosing by that vector, and add it to the front of the list of nosings.
  5. If the stair run ends with a tread you’re done finding nosings; if not
    1. get the vector from the midpoing of the second to last nosing to the last nosing
    2. copy the last nosing by that vector and add it to the end of the list of nosings
  6. Loft between the nosing lines to get a surface, This will be the base of your solid.
  7. Pull the perimeter curves of the surface and union into a polycurve.
  8. Extrude the curve by the required headroom less a fraction of an inch.
  9. Translate the solid by a fraction of an inch.

The resulting solid should now float just above the existing stair. Any time this solid intersects something other than a railing it’s a clash.

1 Like

Thank you for your explanation!

I just now realised why my solution won’t work :sob:

I was testing with single runs…

Aright i’ll try your steps now :slight_smile:

I actually recommend testing runs and landings separately. Landings are an easy “get the top face and thicken by the required clearance” task.

Hm ok got it,

But if we compare your outcome to mine, isn’t the solid on the run the same in the end?

1 Like

arha its for clash detection/consistency control…yeah then i would do something like Jacob mention :wink:

I’m not really following what the difference would be in outcome following those steps to be honest. We both generate a solid of X height above the stairs to test clearance right?

The issue is that landings don’t follow the required rules for stair paths - said another way I can have a landing shaped like an L. or a T. or a Z. Or an O. As a result the loft won’t generate correctly in all cases.

Depending on the construction of the Stair you could use the established GetConnection method to extract component relationships.
( This example is for an Assembled Stair, so Run>Landing>Run>Landing>Run)

  1. Select the Stair and extract the ordered Components that make it.
  2. Extract the StairPaths to calculate the Nosing profile rail.
  3. When calculating the nosing profile rail, project Runs to Landings for seamless transition, avoiding Vertical rail sections.
  4. Use the Nosing rail and a profile that is set by the Stair width parameter, build a PolySurface that sits on-top of the Stair Components.
  5. Extract the PerimeterCurves for this Surface and offset a copy vertically by the required clearance corridor offset.
  6. Use a Loft by crossSections to create the solid for the Zone.
    Top and Base Extents may need to be trimmed per Floor Level and surrounding Element requirements, but it gives you the base package. :man_mage:

    image
    Stair Nosing Line and Clearance.dyn (93.3 KB)
2 Likes

Thats perfect!

Could you zoom in a little more so I can see the node names? :slight_smile:

I have attached the dyn file to the posting, just at the bottom under the images.

2 Likes

i did something like this before, same principle as the above, i gathered all the edges and created a solid from there via directshape. and then from there, depends on what you want to do, you can get the intersecting elements via intersect filter

2 Likes