From: jki (JKISS56)
Hi.
I am designing railroad models as hobby, and using Moi3D for more than 10 years.
I like Moi3D, I can work effectively, learned many tricks, I know the strong and week features of Moi.
But there are days when I am totally clueless... :-(
For 3d printing I need perfect solid models. Using boolean operations, often happens the result is unpredictable: Sometimes the boolean union simply does hot happen... the two object are not joined. This is quite easy to see.
In other cases, the resulting object is not a solid anymore, i m getting joined surface. This is hard to notice, the system is doing it "silently"... several steps later I fail to make another bolean op. and discover one of objects is just a joined surface. I have a happy day if can undo back and do not lose a half of hour work. With some bad luck i save the file, lose the undo chain and my model is "lost".
What happened: I designed this model a year ago:
It was a solid, i have the stl and printed it successfully.
Now i wanted to redesign it, add some details.
A added some chamfers to inside:
Everything seemed to be fine, I saved my design.
Next day I wanted to add a fixture, and I discovered, the object is a joined surface with quite a lot of naked edges inside (wow)
Why some edges are not connected to each other when they were a in a solid yesterday?
So I split the whole object to ~1500 faces, and join them together again.
My gladness was very short, I tried a boolean union - and the result was - disappearing of the second object. (i intentionally submerged the second object to avoid imprecision in alignment
after the boolean union, i saw a boolean subtract (!!!)
I didn't believe my eyes, I repeated this operation several times, to be sure i am not fool...
I tested other boolean unions with that object, all failed the same way...
when I was totally upset and depressive, i just got an idea, went back to the original model (joined surface with naked edges)) and tried a boolean union with a solid (IMHO nonsense) and guess what happened?
I have got a a perfect solid object (despite the naked edges)....
Is it summer and the too hot also for software???
Are there some repair tools/procedures how to check, why the solid behaves "strangely" and won't to union with other solids?
Is there semi automated tool to fill in the gaps / naked edges in a joined surface object? to make it "healthy" solid again?
Let me have a kind request to V5 (if not requested by anybody else: could MOI verbose if the operation requested does not end up as "expected"? (e.g. if the solid is changed to joined surf. or object is deleted etc.)
A have attached both models zip-ed, they are big for direct upload...
Attachments:
k1-models.zip
Image Attachments:
2024-07-29 12_48_23-MoI.png
2024-07-29 13_05_51-MoI.png
2024-07-29 13_12_13-MoI.png
2024-07-29 13_20_47-MoI.png
2024-07-29 13_24_26-kasna2.3dm - MoI.png
From: Frenchy Pilou (PILOU)
Its a good trick!
But you must precise that the added solid must in your case "face to face" and not middle inside the joined-Srf volume!
(for Boolean)
I am sure that Michael will explain this magic state! :)
Ps Better to make a simple Join, like this you can kill the "added" volume easily!
It's not so easy with the Boolean union! :)
From: Michael Gibson
Hi jki,
re:
> For 3d printing I need perfect solid models.
If you need well formed solid models you will need to avoid certain arrangements of geometry that are self-intersecting.
The naked edges in your k1-joined surf.3dm file are at these shapes:
Here's a similar shape for illustration:
You don't want to have this type of arrangement where 2 cylinders just barely graze each other along an edge.
It's what is called a "non-manifold" edge where there are 4 surfaces meeting up at a shared edge. To have a perfect solid you need to have only 2 surfaces touching each other at a common edge.
The other thing that is bad about this type of arrangement is it makes for a very skinny thickness in this area:
It will be difficult for the 3D printer slicer to get a clean slice in such a thin area, instead of there being one clear path through that area it will be kind of a jumble of several possible neighbors within a small tolerance of each other.
That's something you basically just have to avoid doing. The pieces need to be either a little closer to each other so they don't just barely graze each other, or a little further apart so they don't touch.
- Michael
Image Attachments:
naked_edges1.png
naked_edges2.png
naked_edges3.png
nonmanifold1.png
nonmanifold2.png
From: Michael Gibson
re:
> went back to the original model (joined surface with naked edges)) and tried a boolean
> union with a solid (IMHO nonsense) and guess what happened?
> I have got a a perfect solid object (despite the naked edges)....
You can sometimes get lucky with non manifold geometry if you got these pieces connecting together:
And not like this:
Also if if for containment analysis if it doesn't happen to fire a test ray very nearby the non manifold area it may not trigger any problem at that moment.
But this type of self-intersecting shapes can behave unpredictably.
- Michael
Image Attachments:
non_manifold_join1.png
non_manifold_join2.png
From: jki (JKISS56)
Hi Michael,
thank you for you answer, explanation and suggestion.
But I am still curios:
I am designing the model, adding details, checking if the solid is "healthy".
In one step, adding a detail the solid is "broken" to a joined surface... despite the operation does NOT affect the areas which are now marked as naked edges.
And separating the joined surfaces and re-joining them creates a solid again(!) - which is not "healthy" anymore (i can identify it only by a next boolean operation which fails, and the stl exported from that solid cause the slicer is crashing) So it means there is something wrong with faces... Is there a way how to identify it and prevent such situation?
Is there an the explanation why in some cases the "boolean Union" end up as Boolean Difference? , and the similar object with same geometry (being a joined surface) in boolean union with solid ends up as a healthy solid (allowing subsequent operations)?
I don't want to bother you and waste your time, if my questions are obsolete and I am alone asking such things, just leave them... :-) . I will take more care at design...
From: Larry Fahnoe (FAHNOE)
Hi Michael,
Reading through this thread, particularly the notion of "Healthy" objects prompts a thought:
First, is it reasonable to think in terms of MOI having a hierarchy of object types ranging in complexity from, say, the lowly point up to solids? If so, would it be reasonable (possible) for MOI to warn when an operation produces object(s) whose "type" is lower in the hierarchy than they were when the operation commenced? Maybe this would only be appropriate for operations like the Booleans & others that are dealing with the more complex types. My thought being that clearly MOI knows the object type(s) before and after an operation, and the ability to warn users that types have degraded, thus prompting the user to pause before forging ahead with another operation. Perhaps an option in moi.ini "warn on type degredation"?
This probably belongs in the V5 wish list, but this thread provides the context.
--Larry
From: Michael Gibson
Hi jki,
re:
> In one step, adding a detail the solid is "broken" to a joined surface... despite the operation does NOT
> affect the areas which are now marked as naked edges.
Non-manifold or self intersecting geometry can affect operations on other areas of the model too. Particularly mechanisms that involve traversing connected faces.
> So it means there is something wrong with faces... Is there a way how to identify it and prevent such situation?
Is this on the same model that you posted above? Because like I wrote above, the thing that is wrong there is having places where 4 surfaces are touching at a single edge making a non-manifold structure.
> Is there an the explanation why in some cases the "boolean Union" end up as Boolean Difference?
One of the things that non-manifold/self-intersections can mess up is the algorithm that identifies which side of a closed skin is the outside.
If it ends up classifying the wrong side as the outside it can invert which pieces are kept and discarded in booleans.
- Michael
From: Michael Gibson
Hi Larry,
re:
> If so, would it be reasonable (possible) for MOI to warn when an operation produces object(s) whose
> "type" is lower in the hierarchy than they were when the operation commenced?
It would be hard to do this for everything because there are some functions (Edit > Separate, Trim) where their job is specifically to produce a "lower" result.
It could be good for booleans though.
The complication is that there is not an established UI mechanism for reporting a command specific error.
I have some ideas on making a command "epilogue" dialog that could work for that, I hope to be able to experiment with it in v6.
Thanks,
- Michael
From: Larry Fahnoe (FAHNOE)
Thanks Michael,
Sounds like this would make a good wish-list item combined with your command "epilogue" dialog to check for degraded object types from certain ops like the booleans.
--Larry