Howto form spout for glass cup/pitcher?


What’s the best way to form a spout on a glass, such as in:

I can create a closed curve and revolve it to create a cup, but I’m not sure how to then form a pouring spout. Ideally it’d be nice to be able to specify a curve the defines how the top surface of the spout curves outwards. A nice-to-have would be if the process for forming the spout preserves the volume of the solid (e.g., with an eye towards manufacturing where the spout shape is stamped onto the still-hot cup). I’m somewhat new to Rhino so may be missing an obvious tool for this.

Out of curiosity, would the same process for forming the spout in the above pic also be used in forming the spout in the pitcher at ?


Trouble Making Fillets (and working with surfaces in general)

Hi Josh,

You could try and look at using the Deformable option on the Revolve Command. After this you can then manipulate the Control Points to get your desired shape.

Incidentally putting a spout on a wine glass is the topic of practice exercise #54 from the Rhino Level 1 - Training Manual about Control Point Editing.

EDIT: A good tip would be to use “Record History” when you revolve your profile curve. Play about with the control points of the curve after you have created the Revolve surface to find the best shape. Finally you can change the Control Points of the Surface to create the spout when you are happy as this process will “Break History” preventing you from changing the Surface by Just the Curve editing.

(Pascal Golay) #3

Hi Josh- it depends a bit on just how much control you want to have of the shape- A simple and direct way is to split out a rectangle from the top of the surface using surface isocurves, (Shrink=Yes) and then point edit the smaller surface taking care not to touch at least the last two points along each edge. You can InsertKnot to add more control if needed.
Attached is a maybe more controlled way to get at this- controlled in that you can work off of some specific profile curves rather than just sculpting directly with surface control points.

PitcherSpout.3dm (476.2 KB)



This is a very good workflow, but the only negative I see is that the wall thicknesses will no longer be uniform after the deformation. I recommend the following:

  • Draw a single curve (no wall thicknesses)
  • revolve with 'deformable’option
  • Edit the spout as needed (still single wall only)
  • Use the Surface --> Offset command to get uniform wall thicknesses
    (Do NOT use ‘Solid’ option)
  • Use Surface --> Blend to get a nice rounded lip / edge (use ‘same
    height’ option)

(Pascal Golay) #5

Right, =) but it works out not too inconsistent with adding a spout as a sort of post process, stretching it out after the pitcher is made, so I decided it was good enough for now…



Hi Pascal,
Yeah, the controlled way you demonstrate in the attached file is exactly the kind of thing I’m looking for, thanks. My actual vessel is actually generated using a python script so I was hoping to come up with python code to implement your approach, but it looks like a bunch of the functions you use are not supported in rhino python. Darn.

Oh, one basic question. It looks like you revolved the curve to generate the basic cup surface and then cut out a rectangular section. Into the cutout section you attached the spout construction. Am I reading that right?

(Pascal Golay) #7

Yes, I extracted isocurves to get the trimming ‘rectangle’ in this case. I like to trim with isos where possible as it makes the trims simple and allows the new surface to flow naturally into the direction of the trimmed one.

Dave is right about the inexact offset though, so be aware of that and use surface offsetting iff that matters.


(Brian James) #8

Hi Josh,

Here’s another approach as well. I do like Pascal’s form and it uses some great surface modeling techniques. This example is a bit simpler and only uses a few commands (ArrayPolar, Loft, BlendSrf).

spout_easy.3dm (653.7 KB)


Hi Pascal,
I’ve extracted three isocurves - one horizontal closed curve (a circle), and two vertical closed curves spaced apart a bit. How do I go about trimming out that “rectangle” (where the rectangle extends through the top of the object as in your example)?

I tried “trim” command from the surface tools tab, but haven’t been able to figure out what order to click on things to get that rectangle to disappear rather than other parts of the object.

I also tried "trim"ing the two verical isocurves first using the horizontal curve and then trimming the vessel from that, but that didn’t work - it deleted the entire vessel above the horizontal isocurve and ignored the two vertical ones.


(Pascal Golay) #10

Hi Josh- see if this helps -



Hi Pascal,
I seem to be having trouble making that work for a revolved closed curve. I attached a simple example with the isocurves marked in green. Maybe it’s because each isocurve is a closed curve and the “rectangle” is a volume in that case? Via multiple uses of “trim” I can produce three surfaces representing the boundaries of the “rectangle”, but not sure what to do next or if that many uses of trim is necessary.
What’s the best way in this case?
testVessel.3dm (36.4 KB)

(Pascal Golay) #12

Hi Josh- you’ll need another ‘around’ direction iso on the inside to form a UV rectangle.



Pascal: Thanks, that worked. Will try the rest of your suggestions.


Brian, thanks for the alternative approach. I want to keep tight control of what parts of the vessel are deformed to form the spout and also the curvature of the spout, so am leaning towards Pascal’s approach, but your approach looks simple for situations without these concerns. It’s cool to accumulate a few different spout approaches here!

(Pascal Golay) #15

I’d be inclined to do this separately inside and out, and then make the rim.


Automating the "Trim" command via python or the c++ SDK?

You mean revolving an open curve for the inside/outside, then forming the inside/outside surfaces using your technique, then doing a rim that joins the inside and outside? What’s the benefit over revolving a closed curve?

(Pascal Golay) #17

Hi Josh- you can revolve a closed curve, but I think the whole process is easier if you work on the inside and outside separately, then do the rim/edge, is all I mean.



Maybe I should provide more context. Here is a screenshot profile curve of the vessel I’m trying to add a spout to:

The blue section of the curve is mathematically defined (using an interpolated-point curve). The lip has a minimum height requirement. I want the lip to extend organically from the mathematical section and look nice, so I currently do that using a control-point curve, shown in yellow in the profile img. The spout should be formed from the lip section and not deform the mathematical section of the profile curve. Also, I’m trying to do this all in python because the vessel shape is parameterized and I use different values of the parameters.

So regarding your suggestion, any thoughts on how to split the lip curve apart to make an inside and outside section? My current thinking is to trim off the tip of the lip. Maybe there’s a better way to go about this?

(Pascal Golay) #19

Hi Josh- please post the curves or send to to my attention.



Just sent the 3dm file to you. Thanks,