Deformation while projecting to double curved surface

Hi all,

I have an issue while projecting a eyewear frame silhouette to a curved surface. The problem being a strong deformation in the geometry of the projected curve from the original. I understand why this is happening, but I was wondering if there is a way of making it work while keeping the measurements of the original planar sketch.

I have tried the FlowAlongSrf command using the Squish surface output as the base surface, and while it does create a fairly decent result in keeping the frame’s proportions, it tends to squash the sketch horizontally. Following this, I have tried to resize both the sketch and the base surface, but didn’t seem to find any correlation among the results in order to make it work. The pull command pretty much does the same thing.

The image bellow demonstrates what is happening. I am aware that it is unlikely to get no deformation. Ideally, I’d like the width measurement to be the same, I don’t mind the extra ‘enarchment’ of the top curve.

Any help is appreciated.


Projection problem.3dm (128.8 KB)

Yeah, that is hard with a doubly curved surface - here is one thing to try - use UnrollSrfUV to get the base surface, FLowAlongSrf with History, and then adjust via scale1D the original curves to modify the mapped ones.

Projection problem_Maybe.3dm (186.6 KB)

Did you measure along the surface? your image with the the 123.97 dimension is measuring point to point… FlowAlongSrf should (more or less) keep the correct arc length dimension along the surface (also depends on the Squish distortion though).

Edit: I get a measurement of about 143.7mm along the surface, it’s a bit bigger than the original at 140.1, but it’s not that far off… You might be able to use history and scale the base surface 1D to get closer. Vertically it seems pretty accurate.

Here is mine - I simply scaled the squished (base) surface in X by 143.738/139.755… The dimensions along the surface are reasonably good.

Projection problem - scaled.3dm (339.1 KB)

squish / squishback

Projection problem.3dm (313.9 KB)


It’s pretty much how I thought it would be… guesswork. That’s ok, I just hoped there was a more accurate way. The machine milling this out also has ridiculously high tolerances, so I guess it would have come to this sooner or later.
Thanks for the help!

I’d forgot about Squish-Squishback as @vikthor mentions - try that.


Forgot to mention I had already tried that. Doesn’t really help me in any way. The same type of horizontal deformation happens.

Hi - I tried with squish too, and got the boundary dimension of the deformed glasses to within ~3.5mm (390.858 versus 387.110) with Squish-Squishback.

Projection problem_JH.3dm (825.6 KB)

@pascal - anything new on the slate for Squish / Unrolling coming up? Strange to see that it’s still hidden from menus and toolbars - SquishBack, I mean. For example, SquishBack with History?

Forgot to mention, the 140mm measurment isn’t supposed to be along the surface, but straight across on the plane of the outer edges.

Well, there is an incoherence in your reasoning then. If you PROJECT your “front view” onto the curved surface, you will get the true measure. However, as the curves are being projected onto a surface that is at varying angles to the projection normal, they will “stretch” according to the local angle - the more the angle, the more the stretch, so the outer parts are the most affected in this case.

The Flow procedure “MAPS” the flat drawing to the curved surface. That will attempt to preserve proportions, but it will necessarily not end up with the same dimensions as the flat object, as you are morphing from a flat space to a curved one.

Both of the above procedures are pure geometry/topology, nothing specifically to do with Rhino. You either project or you map. You can’t have it both ways.

If it needs to look exactly like the drawing in the front view, then projection is indeed correct. The stretching will be seen when the projected result is viewed from an oblique angle. Otherwise if you are expecting to retain the proportions of the drawing along the curved surface, mapping is correct. It will then be smaller in the front view. You can always re-scale the mapped object back to the size wanted, but of course, this will no longer correspond exactly with your front view drawing - it can’t.

Projection problem - scaledX2.3dm (452.0 KB)

1 Like

Would Curve from two views work for this?

Projection is what I normally use, but usually on smaller radius spherical surfaces where deformation is no where near what it is here. I understand that what I’m trying to do is theoretically impossible. But I feel that this tool can be used in such a way to create a workaround, like you did by scaling the original sketch. What I was wondering was if there is an accurate way of scaling it by predicting the flowalongsrf deformation.

I say this because the outer silhouette is actually milled in 4 axis from a PC lens shaped like the double curved surface in the 3dm file I attached. When I input the .dxf file in the machine, the outcome tends to be 4-5mm (in this case) wider than the original 2D sketch. I therefore assume that the machine’s software uses a similar mapping technique as FlowAlongSrf, I just don’t understand why the mask ends up being bigger, rather than smaller, compared to the original 2D sketch. This could be because the software, like you did, scales the original sketch to approximate the outcome to a predetermined (fairly poor) degree of accuracy.

Works great on single curved surfaces, but in this case it’s doubly curved.

It appears Project curve works well enough for most of the front view. Then gets distorted over the sides. Why not trim the sides away first in the side view? Make a simple curve that can be pointed with history until you get close enough to the desired shape in the top view.

1 Like

I think both approaches are not working well. You cannot simply create something in 2d and expect it to work in multiple perspectives. Its the otherway around. Your 3d curves determine the 2d look.

So what I usually did on such situations. I modeled the curves without blends in 3d until they look good in multiple prespectives, then I applied blends curves and fillets, reprojected locally on demand to fit to the surface and build basically anything from there directly in 3d. For parts with low curvature change you can use 2d to 3d projection, which is true for the detail in the middle of your glass (the holes etc.)

Sometimes there is no good solution, and perspectives have to be prioritized. Its very important to keep the projected surface as clean as possible. Any unsmoothness will yield a bad curvature flow in some perspectives. But even a smooth surface does not work well and may have to be changed. So optimizing the projection surface is also a must.

Well, if you have that sort of “black box” type of situation, short of finding some way to open the box and see what it’s doing inside, is to test empirically - a lot. That would entail running a bunch of tests, say with simple rectangles of varying sizes and surfaces of various degrees of curvature and record the percentage difference for each. From that you might be able to reverse-engineer the projection algorithm and get a general formula that would spit out a scale correction factor for most situations. Once you have the data/formula, that could probably be scripted to semi-automatically adjust the model in Rhino before exporting. But it’s a fair amount of work.

1 Like