Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
rhino:booleanfaq [2022/03/02]
mitch_heynick [Known Rhino limitations]
rhino:booleanfaq [2023/11/19] (current)
mitch_heynick [How surface direction affects Boolean operations]
Line 12: Line 12:
 Everything you can do with Boolean operations you can also do manually by using the above four commands.  Using a Boolean operation only speeds things up by making it one procedure –- when it works... Everything you can do with Boolean operations you can also do manually by using the above four commands.  Using a Boolean operation only speeds things up by making it one procedure –- when it works...
  
-So, the first thing to keep in mind is that a **//solid//** understanding of how the component operations of Booleans work is necessary.  When all else fails, you can get the job done with these commands: **Intersect**, **Split**,  **Delete**, and **Join**.  Try undoing a successful Boolean operation and redoing it manually using those commands.  Get comfortable with the fact that this procedure will always get you where you want to go even if your Boolean attempts fail. +So, the first thing to keep in mind is that a **//solid//** understanding of how the component operations of Booleans work is necessary.  When all else fails, you can get the job done with these commands: **Intersect**, **Split**,  **Delete**, and **Join**.  Try undoing a successful Boolean operation and redoing it manually using those commands.  //**Get comfortable with the fact that this procedure will always get you where you want to go even if your Boolean attempts fail.**//  There are people who feel that using the manual Split/Trim/Delete/Join procedure and avoiding Boolean operations insofar as possible is a better way to model.  //The most important takeaway here is understand how this procedure - one of the basics of 3D modeling - works.//  If you do, you will not be stuck when some Boolean operation mysteriously fails later on - you will understand why and how to fix it.
 =====Boolean operation failed...===== =====Boolean operation failed...=====
 OK, why do Booleans fail?  First, it is the intersection operation that will determine the success or failure of a Boolean operation.  If a correct intersection is found, the rest is easy. But if Rhino has problems finding the intersection, the Boolean operation is guaranteed to fail.  So the key is to help Rhino find a good and complete intersection.  You can do this by setting up your model and file correctly, and also by understanding some of Rhino’s quirks and limitations. OK, why do Booleans fail?  First, it is the intersection operation that will determine the success or failure of a Boolean operation.  If a correct intersection is found, the rest is easy. But if Rhino has problems finding the intersection, the Boolean operation is guaranteed to fail.  So the key is to help Rhino find a good and complete intersection.  You can do this by setting up your model and file correctly, and also by understanding some of Rhino’s quirks and limitations.
Line 21: Line 20:
 > **Note:** //Doing Boolean operations on open objects is also possible, but a bit more complicated, so we’ll assume at first that all objects are closed.  Open objects will be covered later.// > **Note:** //Doing Boolean operations on open objects is also possible, but a bit more complicated, so we’ll assume at first that all objects are closed.  Open objects will be covered later.//
  
-So, taking the above into account, if your Boolean operation fails, the first thing you should do is check the intersection of the objects.  Select your objects and call Intersect. First, look at each intersection curve on the screen.  Does it look correct?  Are there any visible gaps or extra segments or other things that look strange?  If so, find out why.  If the intersection looks OK, but the Boolean still fails while the intersection curve is still selected, go into //Properties > Details// or use the command **What**.  The resulting info box should tell you all you need to know about the curve.  Does it say the curve is open?  Then thats your problem  area.  More than one curve?  You need to find out why there are either gaps or overlaps in your intersection.+So, taking the above into account, if your Boolean operation fails, the first thing you should do is check the intersection of the objects.  Select your objects and call Intersect. First, look at each intersection curve on the screen.  Does it look correct?  Are there any visible gaps or extra segments or other things that look strange?  If so, find out why.  If the intersection looks OK, but the Boolean still fails while the intersection curve is still selected, go into //Properties > Details// or use the command **What**.  The resulting info box should tell you all you need to know about the curve.  Does it say the curve is open?  Then that'your problem  area.  More than one curve?  You need to find out why there are either gaps or overlaps in your intersection. 
 + 
 +//Note also that using the manual Split or Trim / Delete / Join procedure instead of a Boolean operation will likely run into the same problem, as the Split or Trim operation will fail.  Intersect can again help find the problem spot(s).//
  
 =====Intersection problems, solutions, and limitations===== =====Intersection problems, solutions, and limitations=====
Line 32: Line 33:
 ====Known Rhino limitations==== ====Known Rhino limitations====
  
-**Coincident seams** – All objects have seams. Sometimes when the seams on two objects are at exactly the same place, Rhino has trouble with the intersection.  Solution: Either try to move the seam, or try moving one object just a tiny, tiny bit (if you can without making your model inaccurate).  Or try to do the operation manually.+**Coincident seam and other edges** – All polysurface objects have joined edges and seams. Sometimes when the joints on two objects are at exactly the same place, Rhino has trouble with the intersection.  Solution: Either try to move the joint or seam edge, or go back to the manual Split/Trim and Join procedure in this case, in general Rhino will allow you to do this just fine and you will be done. There is sometimes a possibility to move one object just a tiny, tiny bit - this is a last-ditch attempt because it will make your model less accurate and that could have poor consequences later.
  
-**Coplanar faces** – If two faces of an object are on the same plane, Rhino may not be able to calculate the intersection. This is a fairly  common occurrence. Later versions of Rhino are much better at resolving these situations, but they may still occasionally fail. Solution: As above, you may move the object slightly if possible. If not, you may have to do this operation manually.+**Coplanar faces** – If two faces of an object are on the same plane, Rhino may not be able to calculate the intersection. This is a fairly  common occurrence. Later versions of Rhino are much better at resolving these situations, but they may still occasionally fail. Solution: As above, try doing this operation manually, it will always succeed.
  
-**Nearly tangent surfaces** – Like the intersection of two equal diameter pipes at an angle.  The intersection often fails at the point where the surfaces are tangent.  Currently, there is no easy fix for this problem.+**Nearly tangent surfaces** – Like the intersection of two equal diameter pipes at an angle.  The intersection often fails at the point where the surfaces are tangent.  Currently, there is no easy automatic fix for this problem, so you may end up having to use Intersect, then edit the resulting incomplete intersection curves to get something you can use to manually trim the surfaces before joining.
  
 **Invalid objects** – If one of the objects you're trying to work with is invalid, Boolean operations will often fail.  Check for invalid objects by using the command **SelBadObjects**.  If one highlights, you need to fix it first before proceeding.  It is also recommended that you turn on automatic object checking. If invalid objects are created in the course of your work (or imported), Rhino will tell you immediately.  To do this, simply type **CheckNewObjects**.  This is a toggle, running the command again turns it off. **Invalid objects** – If one of the objects you're trying to work with is invalid, Boolean operations will often fail.  Check for invalid objects by using the command **SelBadObjects**.  If one highlights, you need to fix it first before proceeding.  It is also recommended that you turn on automatic object checking. If invalid objects are created in the course of your work (or imported), Rhino will tell you immediately.  To do this, simply type **CheckNewObjects**.  This is a toggle, running the command again turns it off.
  
-**Non-manifold polysurfaces** – Although Rhino doesn't currently flag these objects as bad, they can cause failure.  Rhino //shouldn't// create these types of structures, but under certain conditions it does.  The Properties/Details of an object will indicate if it is non-manifold, and you can use the edge analysis tool to highlight them.+**Non-manifold polysurfaces** – Although Rhino doesn't currently flag these objects as bad, they can cause failure.  Rhino doesn'deliberately create these types of structures in general, but under certain conditions they can happen.  The Properties/Details of an object will indicate if it is non-manifold, and you can use the edge analysis tool to highlight them.  They will need to be manually repaired to fix the problem.
  
 =====Manual construction and editing is sometimes needed===== =====Manual construction and editing is sometimes needed=====
Line 87: Line 88:
 > **Note:** //If you are doing Boolean operations on closed polysurfaces and they don't react the way you think they should (i.e. the wrong parts disappear), probably one or more of your objects aren't really closed and have the normals pointing inward.  Use **Dir** to see.// > **Note:** //If you are doing Boolean operations on closed polysurfaces and they don't react the way you think they should (i.e. the wrong parts disappear), probably one or more of your objects aren't really closed and have the normals pointing inward.  Use **Dir** to see.//
  
-> **Tip:** //One way to always know which way surfaces are facing is to set up your display to show backfaces in a different color from front faces.   In **V3**use the command **AdvancedDisplay>Color Backfaces** to set this up In **V4**, go to **Options>Appearance>Advanced Settings>Shaded>Backface Settings**. In **V5**it's **Options>View>Display Modes>Shaded>Backface Settings**. Then choose **Set single color for all backfaces**, and choose a color.  Note, this only works if you are working in Shaded Viewport mode. In Wireframe, Ghosted, or Rendered you will not see this.//+> **Tip:** //One way to always know which way surfaces are facing is to set up your display to show backfaces in a different color from front faces. In V5 and onward, the backface color display is set for each different display mode you have. In the Rhino Options for any applicable display mode, choose **Set single color for all backfaces**, and choose a color.//
  
 Let's imagine the simplest open Boolean operation.  You have one solid closed polysurface that is fully intersected by a single surface.  You can easily create this by making any kind of solid object, then using the **CutPlane** command and drawing a cut line through your object in any direction. Let's imagine the simplest open Boolean operation.  You have one solid closed polysurface that is fully intersected by a single surface.  You can easily create this by making any kind of solid object, then using the **CutPlane** command and drawing a cut line through your object in any direction.
Line 103: Line 104:
 From Rhino V4 on, [[rhino:boolean2objects|Boolean2Objects]] lets you cycle through all the possibilities of the different Boolean operations and see the result on-screen. You can then choose the result you want.  Currently, this only works with just two objects. From Rhino V4 on, [[rhino:boolean2objects|Boolean2Objects]] lets you cycle through all the possibilities of the different Boolean operations and see the result on-screen. You can then choose the result you want.  Currently, this only works with just two objects.
  
 +However, one of the best solutions to this is to use **BooleanSplit** instead of **BooleanDifference**.  BooleanSplit splits the base object(s) with the cutter(s), //**but it leaves all the parts**// It's then easy to simply delete the part(s) you don't want.
  
  
  
  
rhino/booleanfaq.1646211220.txt.gz · Last modified: 2022/03/02 by mitch_heynick