After upgrading to rhino 8 i retried using make 2d in an architectural project at which i have also test in the past, and have uploaded to McNeel support. (Make2d splitting lines - #41 by ivan.galik).
At the beginning i was happy. In my first test where i use a clipping plane at a perspective view the result was very clean. I didn’t even see linework inside sections, something which was not possible in previous versions of rhino.
Βut my joy didn’t last long. After trying another view i started to see errors again. Investigating more i also see that repeated two times the command with same settings from the same saved view gave me different results.
I save as again the drawing in rhino 5 format, where from the same saved view (test1) i execute make 2d, and again i took perfect results. I am not able to determine nothing wrong from rhino 5. Rhino 5 is the only version that make 2d work as expected.
Despite this i found that in rhino 8, like in rhino 7, make 2d use all my thread ( i have 24, with 64 gb of ram), cpu usage was at 100%. The command needed 305 sec to complete. At the same time in rhino 7 took only 54 sec, and in rhino 5 where it uses only one thread it took 121 sec. On all versions I used the same setting. Maintain layers and disable the silluete creation, which is not available on rhino 5.
I am going to upload the file on support again, with a link in this topic.
The file contains also the make 2d result from rhino 5 grouped on top of make 2d of rhino 8. The layer names are self explained. With print preview enable you can see the errors rhino 8 produce, compered with the error free result from rhino 5.
I will upload here only the results. I am not able to upload public the whole model .
Another issue, first time happens to me with rhino in general, is that after make 2d command finishes, if i don’t press esc to deselect the resulting lines, and try to move from perspective view to multiple views and then to top view, my computer freeze and i need to hard reset it. Neither ctrl alt delete is working. I will upload a video from my phone. I can repeat this if i use the same procedure. https://youtu.be/8f_dlsEFEPA
Lastly the graphics of lines on top of each other in rhino 8 is not good. The Colors are blended. It not respect the draw order.
Thanks for reporting this bug. This bug was reported previously. The main problem that I saw was the fact the results were not repeatable ( different runs of make2d with the same inputs produced different outputs). Although this is a serious problem it is a hard to debug problem that only appeared in this one bug report and in a complex model. I did not fix this in V8.
So basically the problem you reported previously is still there.
Today I spent some more time investigating this problem. The problem I was focusing on is the long black vertical line in the last image of your post. This problem is very stable and persists even if you only select the “stair-concrete” layer in your model.
The stair-concrete layer has a single 600 face polysurface:
ID: 6f5e6c5c-3fef-4a3a-8d41-68d0f1c3cddf (749)
Object name: (not named)
Layer name: 3d::stair_concrete
Render Material:
source = from layer
index = -1
Geometry:
Valid polysurface.
closed solid polysurface with 595 surfaces.
Edge Tally:
11 seam edges
1835 manifold edges
= 1846 total edges
Edge Tolerances: 0 to 2
median = 0 average = 0.0028169014265322862
Vertex Tolerances: 0 to 2.0019999999999998
median = 0 average = 0.0021385373870172553
Render mesh: 595 meshes 4964 vertices 3004 polygons
Created with quality meshing parameters.
Analysis mesh: none present
Geometry UserData:
UserData ID: 769DDDD4-1756-4c95-A026-8E975D704AEA
description:
saved in file: no
copy count: 0
Notice the max edge tolerance is 2.0 this is 20,000 times the model absolute tolerance.
I found the worst errors were near where this make2d error is occurring. I remodeled one planar quad face and replaced it in your model ( Kyle sent this repaired model back to you via Support Bee). Below is the result of Make2d with that one face repaired. AgStefanos_r8 (repaired result).3dm (8.5 MB)
Make2d errors still exist and the worst BrepEdge tolerance is still 6000 times greater than model tolerance. So I suspect this may be the source of further errors. Unfortunately, this error is really hard for me to identify and fix. There are no tools for the average user to diagnose and fix this kind of problem, especially in a complex ( aka realistic) model like this.
It shows the railing is modelled as a cylinder poking through a box shaped support. The railing is not booleaned together. In this case the intersections should be computed manually since make2d doesn’t detect intersections between surfaces. Note that these missed intersections will have further implications of downstream misses. That is the error is not localized to the immediate area where the surfaces intersect.
Thanks a lot for your investigation.
I knew about the last intersection problem. Actually I have made a few, but not all.
But I never thought this could result in problems in other parts of the model.
Furthermore I do not understand the tolerance issues mentioned in your first answer. I thought it was a clean model.
Booleans always create tolerance issues? Even if they can be solved mathematically? I thought tolerance issues cause only operations that use a kind of arithmetic analysis and not pure algebra.
To tell you the truth I have also made a workaround that works in the vertical line. I explode the surfaces and then make 2d. Then this problem went away.
But after all of these the questions remains the same:
How is it possible to get different results?
Why rhino 5 produces an error free model. Even in the railing which are not boolean it hides the lines where it should, and it just does not produce the intersection ellipse.
Why the operation, even if it’s multithreaded in rhino 8 takes 5 min compared to 2 min in rhino 5 which uses only one core, and 54 sec in rhino 7?
Why after the make 2d if i keep the produced lines selected and try to go from perspective view to top view my computer freeze in a way that i need to hard reset. I have many years to need a hard reset.
Also in the past I have noticed that the errors depend from the side of the model. So I think if a model is huge then I believe you split the operations in parts, trying not to exceed computer memory. If that’s true then that may also cause problems. Why? Look at this thread i ve made in the past and I found a solution by manually splitting the model in smaller parts. https://discourse.mcneel.com/t/investigating-why-some-rhino-commands-fails-without-obviously-reason/124874
Breps store error bounds to indicate the discrepancy between parts that ideally should be in the same location. I use this information to account for breps that are known to be out of absolute model tolerance. In a good boolean operation these should have been computed to be less than absolute model tolerance. There is no easy way to find and fix this, but using the What command and knowing to look at those tolerance numbers would be a place to start.
Different results. The algorithm is non deterministic since it uses multiple threads. However given good inputs it should produce the same result every time. Given that there are errors caused by poor geometry and probably errors caused by my implementation the errors could manifest differently ( this is a problem with non-deterministic algorithms).
Make3d was completely rewritten for V6. The occlusion testing takes 80% of the time and should be redone for better performance and accuracy. I think generally new Make2d is much better than V5.
Hard reset required: If you didn’t get a crash reporting dialog box you should ask on this forum how to make sure we can get a crash report for this problem. I did not see this. I spent the whole day running Make2d with your model yesterday.
What information besides brep edge or Vertex tolerance and the usual geometry information (curve info + points, Control and Greville, etc.) would be useful to display for people troubleshooting geometry problems like this?
1.Can you give us the rhino V5 make2d as a plugin to run in rhino8? On all Models I tried, I get much better results from V5. Try this complex (not so much actually) model in rhino V5 on whatever view. I don’t think you will be able to get neither a single error. I started using rhino since V6. In this forum I found that many people get error free results from V5. And I get a code from mcneel and now I can use it. Many people have reported better results from V5. Why Still believe the new make2d is better than V5? That makes no sense to me. Can you provide a model on which I will get error free results with the newer make 2d?
Why make2d takes 5 min in my computer on rhino V8 compared to 2 only minutes on V5 and 54 sec on rhino V7? Have you also noticed that? Or it is my computer problem?
Still don,t understand. Is my geometry so bad? Most of it was extrusions, and booleans between breps which if you explode get 1 degree surfaces.
If you explode the brep which produce the vertical line the result is correct. Why?
Have you read my other post mentioned in my previous comment?
A tool that highlighted brep verticies and edges that were out of tolerance would be helpful.
Generally all these tolerances should be less than model absolute tolerance. This information is available in RhinoCommon.
If a tolerance is way off. The edge could be rebuilt using the ON_Brep::Rebuild edge, or the face could be rebuilt manually in Rhino using ExtractSrf, DupBorder, Untrim, Trim, and Join. This might fix some bad geometry.
Of course, if you can find a geometry operation that produces bad geometry we could fix the creation code. This is the best case.
Having better tools to identify bad geometry and out of tolerance edges could help both developers and users. But for some reason the politics at McNeel has stubbornly prevented this from happening for two decades.
Ok. I’ve added the tolerance on brep edges and vertices to my display.
Something that looks at the model as a hole would be a good next project.
@jim Hit me with a list of what constitutes bad geometry in a reasonably testable way. Checking brep edge tolerance vs model tolerance is pretty easy, so I’m surprised noone has a product out. I’ll be wrapping up coding on my first plugin over the next few weeks and that sounds like a good followup project.
Off the top of my head these would be some bad geometry that should be tested for.
Surfaces with internal discontinuities (not G1 continuous)
Curves and surfaces with stacked control points (including points that are so close together they behave like stacked points)
Singularities that are supposed to have zero edge length but don’t
Surfaces that have U and V isocurves that flow in the same direction.
Degenerate surfaces (actually most of the above could be called degenerate so this is a catch all for anything missed)
Surfaces that have boundaries (outer edges) that are outside the natural borders of the surface (bigger than the surface)
Fragmented edges (edges with discontinuities or breaks where there should be none)
Unfortunately, brep edge tolerance is not always 100% accurate. Pascal has released a script that is useful in marking edges that are over a user set tolerance with a dot.
A tool that does a full audit of joined edges would be useful. It would find edges that are farther from the parent surfaces than allowed as well as finding polysurf edges that are not a single continuous (at least G1) curve between two single continuous surfaces as well as finding edges that extend beyond the surfaces that they belong to.
What’s a singularity that’s supposed to have zero edge length?
I think I can imagine a few relatively easy tests for this.
Producing broken data might be difficult, though.
I’ll look through the forums for bug reports with attachments. Feel free to throw any examples you have or have seen at me. I’m happy to NDA if necessary.
Surfaces with singularities have an edge length of zero at the singularity when they are valid constructs.
Here is a recent discussion of an invalid construct.
It’s probably safe to conclude that any surface with a natural edge that has a length less than the model tolerance but greater than zero is a mess up singularity. The FilletSrf command is known to sometimes make fillets that are supposed to end in a single point, but don’t.
An untrimmed Rhino surface with fewer than four sides will have at least one zero length edge. At the singularity the u and v directions are not unique.
I’ll have to find some examples and take a look at how the axes behave in these cases.
My first plugin is intended to expose information about RhinoObjects the user selects: basically, my opinion of what the ‘What’ command should be (but not a per-object command).
If either of you would like to play around and see if you think there’s a nice way to fit some audit functions into the design, I’ll set you up with a copy over the weekend.
Otherwise, I think the audit type features probably deserve a different UI layout, one designed to look at the model as a whole rather than one piece at a time.