V6 Goal: Make2d overhaul

I have been working on redoing Make2d for version 6 of Rhino and I just wanted to let people know what I’ve been up to and get input from users about bugs.

I have rewritten most of the Make2d code from scratch. The major goals of this rewrite are:

  1. Get the Hidden/Visible/Duplicate classification right for Make2d curves.
  2. Improve the speed of Make2d
  3. Don’t chop curves into little tiny segments
  4. Add support for meshes.
  5. Provide SDK interfaces to the silhouette generation, hidden line drawing and Make2d command.
  6. Provide a solid base to enhanced Make2d functions.

Basically the goal is to get the Make2d functions implemented well. After that is achieved we can start adding features. Right now I’m just trying to get Make2d to work the way it was supposed to work in V5. I know the interface to this command can use some improvement but I want to get the calculation performed correctly first.

Since I started from scratch I have made many steps backward before I started to make forward progress. There are a lot of bugs in the code now and I need your help to identify and prioritize the bugs that are there. The good news is that the code is more maintainable and I am committed to making this work. Your bugs will not languish in a big pile, while no development resources are put on the project.

The one major piece of functionality that is not currently there is clipping plane support. This will get added back in.

People will notice that multiprocessor support is also missing. I designed the new code with multiprocessor support in mind, and I have experimented with this. I am not quite ready to hook it into the Make2d command. So I think there are plenty of issues we can focus on for now.

I look forward to your comments and bug reports.

Greg Arden
Robert McNeel & Associates


I Greg
If I do make this happen 2d of this file in V6:
If I choose 4 views Rhino crash if I choose Current view
it is Ok.
In Rhino V5 all is OK.
I attach the file
Ciao Vitorio

Make2d_V6.rar (376.5 KB)

Hi Vittorio- Thanks, I see this here as well.



Hi Pascal
In the attached file there is a sample of minor error in make2d V6.
Ciao Vittorio
Make2d_V6_minor_bug.3dm (1.9 MB)

Great, I am looking forward to the new Make2D!

A feature request for V6: When using clipping planes there should be an option to switch on solid Make2D results for clipped solid objetcs.

Please compare the following two images from V5. The Shaded Display mode is showing the clipped cube as a solid object, Make2D in contrast treats it as a surface object.

Shaded Display mode

Make2D result


Must be the missing clipping plane support that Greg said he would add back in later. :wink:

Powerfull and simple to implement Make2D wishes:

  • Add tolerance to the calculations
    (No need for 0.01 mm tolerance for a view that will be printed at 1:100)
  • Add a “minimum curve length” option to remove short curves (Like SelShortCrv)
  • Group results based on views.
  • Join curve results (I turned a 16K result into 8K by doing so and that results in a large speed up for both tools like move and for display performance.

Here are some bugs:
(I just made this model to test some issues I had with a V5 project for a customer. This file is not related to the project so you can do what you want with it)

And 3D file so you can have fun.

doodle.3dm (1.8 MB)

Im not so sure about this one. Maybe as an option but blindly joining a large set of undrelated curves I likely to produce unwanted results.
Take the top view of a house with adjoining garage. I would like to have separate outlines for house and garage but join would probably join most of the outline and some weird connection in between and have one or two curves left unjoined.

Good point, and of course I agree that blindly doing anything will probably lead to issues. That said Make2D knows what curves are from which object and therefore can join all curves from one object together. And also prevent joinging the silhouette with the other curves too.

If we could get joined silhouettes per object and joined edges per object, that would be great.

@GregArden I don’t know if this is feasible but since I, and maybe others use make2D in an Rhino-Illustrator workflow, I’d wish for a way to get per object fills. Like a objects silhouette clipped by object silhouettes in front. Right now this is a lot of manual work. Maybe you can calculate that with minimal extra effort or as a by product.

1 Like

I added this bug to the youtrack http://mcneel.myjetbrains.com/youtrack/issue/RH-28454.

  • Tolerance I’m working to get the computation to pay attention to the tolerance and produce reasonable results for the given tolerance. After everthing works well we could consider adding User Interface to control the tolerance. In the mean time a simple script that changes the model tolerance runs make2d and restores the tolerance should accomplish the same thing.
  • Minimum Curve Length - Make2d should not produce curves shorter than tolerance. If it does it is a bug. Why do you want to delete curves that are longer than tolerance but shorter than some threshold? I’d like to see some examples.
  • Joining Curves Rejoing results is a key objective. Lets see some examples. Currently I tag all the curves with information about where they come from. For example I record the source object and information about what specific edge the curve came from, or specific face the silhouette was on. I then rejoin consecutive pieces of the same curve but I don’t join pieces from different curves.

So in the image the leftmost make2d of a filleted box has 12 curves. I bet you want a single curve? In the middle image we have 2 filleted boxes. Do you think we should have 2 curves or 1? Finally what about the filleted box with tangent edges shown?

Greg, if you add links to youtrack issues on discourse, please make sure the appropriate parts are visible to all. I can’t tell at a quick glance from the issue that you created if the file should be visible only to devs.

Yes, a single closed curve.

Two closed curves.

Ideally, 20 closed curves (19 for each surface and one for the outline).

The way I see this, there can be 2 reasons for running a Make2D. One is for production purposes where the output will be used either directly or after a bit of further processing for manufacturing a physical object. I never used the command for that so you’ll have to find users that do for a command specification. I can imagine that they need perfect arcs for the fillets.

The other is for illustration purposes. Making production drawings is included in this category. If you look closely to any 2D drawing out of a CAD program (Solidworks, ProE, NX, …), you will see that (1) the output is vector and (2) the output is rather nasty (obviously based on the display mesh). But it is pretty much instantly. In the leftmost object in your picture you say that there are 12 curves. For all I care there are 200 but they form one single closed curve. I need output that is fast, that I can fill with a hatch (or 2), and that I can easily control the width of.

1 Like

I can imagine that a single consolidated silhouette curve for the middle set as well as the curves you show might be a good thing- with a Silhouette output layer as an option with all the others - hidden, tangent etc…


1 Like

+1 for @wim comments. workfield architecture.

Hi Greg,

Here is a file that failed miserably in V5 some time ago and I kept for reference.
In V6 it is much,much better really great to see this improvement!

I circled some issues in red with lines that should not be visible, for you to bug-track.
Make2D_v6_test.3dm (955.7 KB)


+1 on that. That’s the general way I do for not too complex make2Ds

In Rhino 5 I’d

  • Make2D the object,
  • Use CurveBoolean to make an overall silhouette. This often fails with more complex models as the outlines may have gaps

In Illustrator the overall silhouette is used as a cutout for the drawing. Whatever other lines there are, lie on top of that. Sometimes I want to add some flat shading. In that case I’d use CurveBoolean or the Illustrators shape creation tool to fill specific areas. Again, this is likely to fail with more complex geometry.

So back to Greg’s specific questions:

Yes, one curve, single outline.

Option for the single overall outline to have the cutout, if you need one.
The rest depends on personal workflow.
a) if you just need the lines, the front box should be a single closed, the back box should be a single open line with overlapped lines removed.
b) if you need the fills, both boxes should be closed curves.
I’d like to have independent options for both.

As with option b) on the two middle boxes and like @wim said, 19 or 20 closed curves.
But I’d still would like to have the option to get the internal curves as single lines, reasonably joined along edges of a surface.

To expand on Wim’s statement, I’d like to think of Make2D as a kind of vector rendering engine. The current implementations are like a simple scanline render or viewport capture. Advanced render engines offer options for Alpha-Maps, Object- or Material-ID maps to effectively work with the result in post production. This is basically what I would wish for in a perfect Make2D.

Hi all,
One issue I often find with users is that they calculate hidden lines but the hidden layer is off, so they either end up recalculating and getting frustrated, or they end up moving the 2D data, and then discover that they didn’t move the hidden curves.

So I think it could be a good solution to add all the 2D data to a block, not only group them.

What do you guys think?