# How do I add a non-deformed end cap to a tube?

I want to create some parts that I can reuse for models. I was trying to make a steam punkish exhaust pipe. I want to be able to make the pipe of any length, and as curvy as I like but I want to keep the end cap always undeformed. I approximated my results by hand placing the "crown" at the end of this bezier curve.

I tried to make an array modifier that included the crown as the end cap, but that results in the end cap deforming.

• You can add a start cap and end cap to an array, but I don't think you can do that with curve deforms :-/
– Matt
May 26 '16 at 21:31
• The start / end cap can be modeled and appended into other projects to use as Start / End cap of Array modifier settings. If the cap deformed probably you setup origins not properly. For info about setting caps with Array see blender.stackexchange.com/questions/8750/… May 26 '16 at 21:50
• @Matt You can use start and end caps in an array with a curve modifier as well. +Mr Zal What I think the user means is that using the standard Array + Curve Modifier setup the star and end caps also get curved by the curve modifier influence, and I think he wants the caps undeformed. May 26 '16 at 22:40
• oooh! I didn't know that! Cool! Yeah, they would probably get deformed, too.
– Matt
May 27 '16 at 13:29

Thinking about this only way I could come up so far is by not using an Array Modifier at all, and using hooks instead.

It may have some downsides and limitations like less flexible texturing and not allowing more complex shapes along the length of the curve, and it wont merge the vertex automatically, but the ends wont get deformed this way, and you won't see any seams if the ends match.

Model your pipe exhaust tip regularly as you did, or append it from a library, whichever way suits you best. Can even be a collection Instance

Instead of using an Array Modifier use the bezier curve Bevel option directly, to give it geometry, you may even use another curve object as section for the bevel. Just make sure the exhaust tip and the section match perfectly so there are no visible seams.

Now align your cap object perfectly with the bezier curve end. That means both position and rotation, including curve handles so they line up perfectly. Try scaling the last curve handle to zero in all axis before hooking up.

Use the 3D cursor to snap the cap in place like Select Vertex > Shift + S Cursor to Selected, then exit edit mode select the cap and Shift + S Selection to Cursor.

Now select the Cap then the Curve (by this specific order) enter Edit Mode on the curve, select the last vertex you previously aligned, press Space Bar type Hook and select the operator Hook to Selected Object

This has the positively unexpected advantage that you can now tweak the shape of or pipe directly from object mode without ever entering Edit Mode in your curve.

On a side note, you can use this with an Array Modifier, but it will not always work perfectly. Since the array is based on segments, depending on the particular length of the curve at a given moment, it may not give an exact count of arrayed items so will get gaps at the end, between the last arrayed object and the end cap.

If you plan on applying the modifiers later you can fix it by hand, you can also use very short array segments to minimize visibility at the expense of performance.

• can I use paths, or mesh? instead of bezier? Jul 9 '16 at 20:44
• also, how did you make this gif? it is excellent. Jul 9 '16 at 20:45
• You can use hooks on any type of object, mesh or curve, but the behavior is slightly different for meshes, hooks on curves are smoother because of handle influence. You can capture GIFs using screentogif.codeplex.com Jul 9 '16 at 22:43
• Excellent answer. I need to try this a few more times. Jul 10 '16 at 18:33
• Just one note, you can use this with an array modifier, but it may not yield perfect results depending on the length of the curve. Updated answer above Jul 10 '16 at 18:47