Need Boolean Difference help 1-20  21-22

 From: ed (EDDYF) 1 Aug 2009  (1 of 22)
 I made a solid ring with two individual solid "sine wave" tubes wrapping around, both shown selected. I want to subtract both tubes, leaving two sine wave recessed channels in the ring. I can subtract either tube from the ring, but not both. That is, once I subtract one tube, the other will not subtract. Nor will they subtract together. Ed Attachments: Image Attachments:

 From: Michael Gibson 1 Aug 2009  (2 of 22)
 2825.2 In reply to 2825.1 Hi Ed, one area that the intersector can have trouble with currently is when 2 tubular surfaces cross over each other forming a kind of "crown point" intersection between them. That's what you have in this case when you get both of those pieces interacting with one another: Also it looks like there are some edges there (probably from a sweep curve that had the rail made up of multiple segments, which generates one surface per segment) which will likely add to the complexity of the intersection calculation in that sensitive area as well. If you select those 2 tubes and run Construct / Curve / Isect, to generate their intersection curves, you can see that they are quite a mess: So anyway, that's the reason why the boolean does not work right, the surface/surface intersector is not able to generate the proper closed intersection curves there. Generally the easiest way to work around this problem is to have one tube be slightly larger or smaller in size than the other one, that tends to avoid the problem in the intersector. I'll see if I can give you any other tips. - Michael

 From: Michael Gibson 1 Aug 2009  (3 of 22)
 2825.3 In reply to 2825.2 Hi Ed, other than using slightly different tubes, it is possible to get it done with equal sized tubes but it is a rather difficult to describe process of doing more "low level" surface trimming. I've attached a result file here for you to use. To make it, I started by deleting the control point at the juncture between each segment of your sweep path, to fuse those segments together into a single long segment. That makes a more simple sweep result since it will be one single surface. Then I did a boolean to cut that single tube out of the base ring. Then I started with the surface modeling techniques - I separating things into individual surfaces, mirrored the channel surface, did some manual Trimming with the outer ring surface and the mirrored channel so that the outside piece was cut properly, then there was some cleanup work doing trimming of the 2 channel pieces with one another. I used "ShrinkTrimmedSrf" on the pieces so that their underlying surfaces were not closed surfaces, which seems like it may help to avoid the problem area in the intersector. After all of that trimming then I joined the fragments together. It's a rather complex process so kind of difficult to describe well, but the result is attached for you at any rate. - Michael Attachments:

 From: ed (EDDYF) 1 Aug 2009  (4 of 22)
 Thanks Michael - That is the result I'm after. Of course I want to be able to do this myself for future projects, so I'll take your tips and experiment. The quality of the sine-wave sweep rail seems to be one important issue. Here is how I made the sweep rails: I drew a 2D sine-wave using your shortcut script. Duplicated and inverted to create two sine waves that cross over. Using Trim, selected points to get just a single cycle. The resulting drawing is two opposing curves that looks like a Cat's Eye. Projected the two Cat's Eye curves onto the ring surface. Used Circular Array to repeat the Cat's Eye 6 time around the ring. Here is where the issue starts: The six Cat's Eye curves had a very small gap between at the center line where they touch, so I grabbed each end point and dragged to snap to the next curve's end point. Then I selected each curve segment and joined. Then repeated for the opposite 6 sine sine wave segments. At this point in the process, I thought the six curve segments were fused because a single click would select the entire chain. What should I have done here to insure a clean rail? Would the Rebuild Curve shortcut have helped here? Next I drew a small circle and used this as a profile to sweep the two sine wave rails, resulting in two solid tubes. Next I hoped to Boolean subtract each from the solid ring. If I can get a clean sweep rail then I can experiment some more. Also, how much of difference in tube diameters would you suggest? 5%? 1%? Thanks again Michael for your helpful explanations. Ed

 From: BurrMan 1 Aug 2009  (5 of 22)
 2825.5 In reply to 2825.4 Hi Ed, I dont have a solution for the boolean, I think Michael has provided that, but I wanted to show you the method I used to create the sine wave on your ring using one segment curve. I used Isect to get points on the surface that I could snap to with the draw curve through points tool. If there are enough control points it will follow a surface pretty well. For your sine with less frequency, I would have had to add radial to my circle array to get my points going in the sine curve to get enough to keep the curve on the surface. FYI With this file I can acheive the boolean with sweep arcs at .019 and .02. So I think thats MoI's Tolerance of .001 you would be hitting. But that leaves quite an awful looking intersection area when zoomed on a computer, but may not be noticable on a small detail ring. May even create some kind of unique sheen. Also...3d printing??? If so, I understand. If it's cnc, no need to create the solid in this manner. Care to elaborate? Burr EDITED: 19 Jun 2012 by BURRMAN

 From: BurrMan 1 Aug 2009  (6 of 22)
 2825.6 In reply to 2825.5 Maybe for my own knowledge Michael could expound a bit on the through ponts curve tool in regards to how it creates Tangency and curvature. I created a sphere and did a circle array of a line with 8 as an amount to get the isect points and using the curve through points "seemed" to create a proper circle? EDITED: 19 Jun 2012 by BURRMAN

 From: ed (EDDYF) 2 Aug 2009  (7 of 22)
 Thanks BurrMan - That's an interesting approach to generating the sweep rails. The "sine wave" ring is a basic one I made with CNC (see the render in the Gallery). However my MoI model is only for render purposes, not for making the ring. To cut the channels in the ring I use a 2D drawing scaled to match the circumference of the ring. The milling machine's rotary table of course rotates the ring as it cuts. The CNC software doesn't know the servo motor is turning a rotary table and thinks it is cutting a flat 2D path. The cutting path for the sine wave is actually thousands of short straight line paths, but it all comes out smooth. Kind of like the music coming off of a CD - it's all very short 1's and 0's, but the end effect is integrated, smooth music. I actually want to make similar engraved models using more complex shapes than a sine wave, a Celtic Knot for example. Not sure if it is possible with the current tools, but I'll try. The ability to wrap a set of curves (and also text) around a cylinder is what I need. ( No, I'm not buying Rhino :) Earlier Michael had pointed out that Zsurf has the ability to create Nurbs from a B&W drawing and wrap around a cylinder, so I'll have to also try that. Ed EDITED: 2 Aug 2009 by EDDYF

 From: ed (EDDYF) 2 Aug 2009  (8 of 22)
 OK - I got the Boolean subtractions to work on my original model. 1. Cleaned up my two sine wave rails (pieced together from 6 circular arrayed segments) using the shortcut RebuildCurve set at 12 points. This simplified the curves. 2. Swept one sine wave rail using a 0.014 circle. Boolean dif the resulting tube from the ring. 3. Swept the second sine wave rail with a 0.015 circle. Boolean dif the resulting tube from the ring. One important key is the sequence of steps above: Sweep and subtract the second rail AFTER subtracting the first tube. If I sweep both rails, then try to subtract, the second tube won't subtract. So, subtract the first tube before even constructing the second tube. The difference in profile diameters, 0.014 to 0.015, is not enough to impact the render, but my guess is the two profiles can be the same size if the sequence above is followed. Render results shown below. Thanks for your tips Michael & BurrMan. Ed EDITED: 2 Aug 2009 by EDDYF Attachments: Image Attachments:

 From: BurrMan 2 Aug 2009  (9 of 22)
 2825.9 In reply to 2825.8 Nice render Ed! I tried for quite a bit and couldnt get both at the same size. Going to practice Michaels method next to become more proficient using this technique.

 From: manz 2 Aug 2009  (10 of 22)
 2825.10 In reply to 2825.1 I reported this bug 15 months ago.

 From: Michael Gibson 2 Aug 2009  (11 of 22)
 2825.11 In reply to 2825.10 Hi Steve, yes unfortunately it's a difficult one to fix - in this case the bug is not in the MoI code that I wrote but instead it is in the geometry library. It will probably be able to get fixed eventually but it can be slow to get progress in some areas like this. - Michael

 From: Michael Gibson 2 Aug 2009  (12 of 22)
 2825.12 In reply to 2825.6 Hi Burr, > I created a sphere and did a circle array of a line with 8 as > an amount to get the isect points and using the curve through > points "seemed" to create a proper circle? Yeah it will be pretty close but if you measured some things like curvature you would see some small differences from an exact circle. > Maybe for my own knowledge Michael could expound a bit on > the through ponts curve tool in regards to how it creates > Tangency and curvature. A curve that is made with the "through points" tool will have curvature continuity throughout it, but continuity means how curvature values match up at one particular point, it doesn't mean how curvature is distributed and how rapidly it changes. There is a slight tendency for the curvature to get kind of "bunched up" a little bit near each of the interpolated points. In the future I would like to have some different options for a "through points" curve that would try to distribute curvature more evenly. - Michael

 From: Michael Gibson 2 Aug 2009  (13 of 22)
 2825.13 In reply to 2825.4 Hi Ed, > Also, how much of difference in tube diameters would you > suggest? 5%? 1%? I'd think that something pretty small like 1% may be enough. But you may run into some issues if that difference becomes less than around 0.001 in size - it sounds like that was what you ended up using and that seems to have done a good job. I do hope in the future that it will not be necessary to do that, but this is a pretty sensitive area to mess around with, it's one of those things that is easy to introduce new bugs with other situations when trying to alter things to fix a different case. - Michael

 From: manz 2 Aug 2009  (14 of 22)
 2825.14 In reply to 2825.11 Hello Michael, >>>>>>>Hi Steve, yes unfortunately it's a difficult one to fix - in this case the bug is not in the MoI code that I wrote but instead it is in the geometry library. It will probably be able to get fixed eventually but it can be slow to get progress in some areas like this.<<<<<<< You said that when I made the bug report, you also dismissed the possibility that the problem was with the sweep rather than the boolean. I have attached a simple model of the ring, this was constructed in another 3d app. when imported into MOI, the pipes can be booleaned away without a problem (both pipes are 6 dia). If you import and delete the pipes, then make a sweep with a 6 dia circle in Moi using the construction curves (which where used to construct the pipes in the other 3d app), then try to use those to boolean away, there are then problems. So I need to ask again, "Is the problem with the boolean, or with the sweep?" EDITED: 3 Aug 2009 by MANZ

 From: Michael Gibson 2 Aug 2009  (15 of 22)
 2825.15 In reply to 2825.14 Hi Steve, > So I need to ask again, "Is the problem with the boolean, > or with the sweep?" It's exactly the same answer as previously - it appears that the problem is in the surface/surface intersector which is one part of what the booleans depend on. > I have attached a simple model of the ring, this was constructed in > another 3d app. when imported into MOI, the pipes can be booleaned > away without a problem (both pipes are 6 dia). It looks like in your particular example here, those sweeps have somewhat lower accuracy and have a slight undulation to them, which avoids them intersecting exactly at a crown point. That actually helps to avoid the intersection bug though which seems to be related to things touching more exactly at a single point. If you take the 2 tubes in your example and do a boolean union between them, you can see that the junctures between them look like this: Note there that the intersection curves are not touching at a single common point - that's the difference between this and the other situation that has intersection problems. It's pretty easy for differences in shape like this to produce different intersection results, and if there is a bug in one kind of intersection result, having a different result may avoid the bug - that appears to be all that you are seeing in this case. It's pretty similar to the workaround of using slightly different radius values, it is producing a different kind of intersection rather than the "meeting at a single common crown point" one. - Michael Attachments:

 From: BurrMan 2 Aug 2009  (16 of 22)
 2825.16 In reply to 2825.14 Thats funny, I took your model from another program and did the boolean with it and it produced this result: And then in the intersections you get this: And this: This is because the 2 curves are not the same length: sweep rails= 490.562480799042 504.98067008109 Then I deleted the sweeps from the SAT file and re-swept the one with the seam edge facing "Out" in MoI, and mirrored it over to get the second sweep to boolean and produced a much better result! Here's the file. :O [EDIT] Also just took your SAT file into another CAD package and recieved the same error on Boolean operations with the second sweep! Could do one but the second would fail. didnt try to edit it to make it work over there. [EDIT] EDITED: 19 Jun 2012 by BURRMAN

 From: BurrMan 2 Aug 2009  (17 of 22)
 2825.17 In reply to 2825.16 Michael, re some of your responses in the past regarding these types of issues, and other modeling kernels like acis and parasolids with many years and man hours working them.... In many cases what you will be doing is adjusting MoI to be "adaptive" in various area's, to change tolerances and such in real time to have these things complete as they MAY in other apps. Lets call it for the moment, "Dumbing down" the model. When MoI starts to do this is when I will ask for some sort of tick, or label, or notice that this is happening. More the tick that I could allow or disallow it as I would want to know when my geometry is being altered to work, or the operation is being altered to work with my poor geometry. With some of the higher end apps, and possibly MoI in the future, there can be analytical tools for me to know and check/change this, but until then, this would be my request from MoI. Burr