Tube pipeline

Hi, I need to place concrete pipes along a path so that they have only one point of contact along the outer diameter of the pipe.
In the present case, the external diameter of the pipe and the length are 200 cm. I did some collision tests, the problem is that the distances to be calculated are variable based on the plano-altimetric radius of curvature of the track.
PIPELINE.gh (7.8 KB)
PIPELINE.3dm (54.6 KB)

I’m wondering, maybe it’s possible to apply Kangaroo’s Rigid Body collision to each element + Anchor the very first element in position + onCurve goal for A and B points of each pipe

Thank you for the suggestion. I’ve never used kangaroo yet, it’s time to give it a try. I only ask you kindness if you can indicate me a basic scheme with the icons to use.

I tried a different approach with looping

given the axis-curve and the very first pipe-section axis-line, it tries to place the next pipe section
if it clashes with the previous section, it moves the new section away by 0.0005 units (customizable, lowered my Rhino → units → tolerance for that)

by the way, if you are looking for perfection, drawing in meters won’t help :slight_smile: I suggest drawing in cm or mm

image

looks like this: [for sure can be improved :+1: ]


PIPELINE_Re.gh (21.5 KB)

I tried your code but it wasn’t working for me… so I ended up copy your idea, anemone:


pipe3
pipeline_re2.gh (26.6 KB)

Distances are not perfect, with great curvature it worsen…

@maje90, nice one, your solution made me think a lot :+1:

your works much better than mine, and actually made me simplify and try to solve the problem in 2D first because it’s too hot here to make complex thoughts :slight_smile:

the main thing I didn’t address -at all- is actually the most important one: to keep the sections in touch by one point on their circular-rim

in 2D it’s pretty straightforward, first section is brain-dead

2D for the second and following sections -also braindead- unless the trajectory is a perfect straight line (in which case pipes will be co-axial) the next pipe will “leverage” on the left or on the right corner of the previous one

the “arm” (or semi-diagonal?) of a pipe section is sqrt(5)=2.236 meters long, and it has to contact one corner of the previous one while also landing on the pipeline general axis

translating this into 3D means -in my mind- to create a pipe around the end-circle of the previous section, pipe with radius sqrt(5)=2.236, and intersect it with the pipeline axis: the farthest intersection point (P) will be the ending-point of the axis of the current section, and the plane where the “contact” between the previous and current pipe takes place should be identified by the axis-line of the previous section and this new point (P)…

visually it’s something like this

around this circle (end-circle of previous section):

build a pipe R=sqrt(5)

to find these 3 intersection point between this weird pipe and the original pipeline axis, which are the “candidate” ends of the axis-line of the current section being calculated

point 3 is useless (pointing in the wrong direction)
point 2 would generate a new pipe section that starts inside the previous one
point 1 is the good guy (and happens also to be always the farthest one from the end of the axis-line of the previous section (easy to identify)

this point + the axis of the previous section identifies a plane where the actual bending between the section happens (?)

we can find the start of the axis-line of the current section as the intersection-point of these two circles on that very same plane:

and here is the new axis-line …does this make any sense? :slight_smile:


pipeline_re3.gh (24.2 KB)

proximity values are very small

I’ve missed this thread until now, perhaps because I can’t open the OP’s R7 Rhino file in R6. But have done several “iterative collision detection” models using Anemone in the past:

I don’t have time today but here are a couple of quick observations:

  1. Using capped (solid) pipe sections with exaggerated (?) length, it appears to me that having “only one point of contact along the outer diameter of the pipe” won’t prevent the solid sections from colliding. Or put another way, if solid collisions are avoided, the edges of pipe sections may not touch at all?


pipeline_2021_Jul10a.gh (6.6 KB)

  1. It’s best to give the Anemone loop a very large number of iterations and then terminate the loop when the job is done. That fails in @inno’s last model when the pipe section length is increased, requiring fewer iterations, yet the loop appears to run the full 92 iterations regardless, doubling back on the curve?

Wish I could play further but not today. Ciao.

here is the Rhino drawing resaved as R6 just in case you might want to have a look, always appreciate your inputs :+1:
PIPELINE_r6.3dm (46.6 KB)

Thanks, it looks like I already had the essentials from the internalized geometry of your GH models.

I have to wonder “what’s the point?” of having a pipeline with misaligned gaps between the sections? And as I noted before, is it really OK to have edge contact if other parts of the edge curves are “inside” adjacent pipe sections? Or should this be treated as solid intersections where one edge may touch the flat end caps? Or maybe the goal is fully intersect each pipe section with the next one so a miter cut can be made between them?

The “rail” curve in the Rhino file is so gentle (but not flat!) that the gaps/overlaps are very small with two meter pipe sections.

This only for 2D curve

cylindre along curve.gh (20.7 KB)

Very nice step! Well done!
I ended up, again, scrambling your code and putting some optimizations.
Using the minimum possible of surfaces and intersections + using “Orient” smartly (+ other small tweaks) let us run your algorithm at real-time!


2021-07-11 12_30_41-Window
pipeline_re4.gh (31.5 KB)

Indeed, make sense.
Still, this will result in the starting circle of the pipe having the center not lying on the input curve… instead, the ending circle center do lie on the curve…

Using curve proximity once again is not reliable… the found points are not the real closer each-other.
In my def I check proximity distance is 0 by just doing CCX.


I think we just gone over and selflessly proceeded toward a “good looking and satisfying solution” :rofl:

Hello everyone, sorry if I did not reply immediately but I was absent for two weeks. This morning I found an incredible amount of work and for this I thank you very much. I started to try ANEMONE that I don’t know but I have some problems installing the components. Maybe I’m a different version? Now I try again. Thanks again, also because the problem is quite complicated and the solution with ANEMONE goes very well. Have a good day and good work


download v 0.4 from here ^ , unblock downloaded file and replace old one