Brainstorm idea of a "negative space" component



I’ve had a bit of a brainstorm, and before I add this idea to the “Feature Request 2017” thread, I’m hoping to thresh it out a bit here.

I’m thinking there might be a good case for a special type of component: one that defines negative space. As I envision it, it would only make sense if it meets the criteria for a “solid”. In use, however, it would always (?) need to be embedded in a enclosing component/group.

I’ve seen quite a few threads there people want to make a lot of identical holes. Every “solution” I’ve seen recommended results in geometry where it’s a real PITA to MOVE the holes. If, instead, we could define the “hole” as a negative space component, then it could be moved, copied, and scaled easily.

Another application might be in giving depth to cutting components by including the (usually) box that defines the parts of a window or door that is INSIDE a wall. One twist here: If you define a solid as a “negative space”, then anything added as a sub-component of the negative space is treated as normal geometry and occupies the negative space instead of anything from the rest of the model.

It would also make it (relatively) simple to include things like holes in the flanges of I-Beams that occur every “x” inches - while allowing the length of the beam to be scaled. (Create one hole as a negative space component, with a “copies” attribute that is derived from the length of the parent and appropriate increments to the correct pos[x,y,z] attributes.

What do y’all think?

And before you chime in with something along the lines of “that’s going to be a doozy of a change to SketchUp”: I fully realize that. And I want to build the argument for it well in advance of making it a feature request - that’s this topic - building the argument! And if the consensus is that it isn’t really needed, then so be it!

Dynamic Component: dynamic cutouts
Redesign "cut opening" to "cutting components"
[FR] Add group/component bounding box edges/vertices to things known by the inferencing engine
SketchUp 2018 Wish List
FlexTools Extension

Maybe I’m missing something. I’m not sure I get what is new about this. I regularly draw components that are really the negative space and use them as cutters. This is an easy way to create details such as the flutes on columns and newel posts,

or hollowing out the inside in a laminated bowl,

or for the stopped chamfers on the stretchers of this hayrake table.


Dave: The negative space things you cite and use as cutters go away once you’ve done the cut (unless you’ve saved them as components). I’m talking about negative spaces you may want to preserve within the model such as:

  • Bolt Holes - so you can easily change diameter if you decide bolt size needs to change. Or copy if an engineer says you need more shear strength in a connection.
  • The holes in I-Beam Flanges
  • Holes cut when modeling mechanical systems (electrical, plumbing, etc) - Yes, the system can cut the structural stuff, but if you end up rerouting, you have to manually “patch” the original hole and create a new one.
  • A possible solution to the perineal window/door component problem - that it only cuts the exterior. Add a negative space sub-component and it can then “cut” out all that’s needed - with the cut moving with the door/window and disappearing if you remove it.

I’m sure others can come up with other use cases.


I get what you’re after now. Basically a dynamic component with hole cutting attributes but it might need to cut more than one face. I think you could do most of this already although cutting more than one face is a kludge.

Denisroy ...anything?

I’ve hidden this reply on 20 November 2016 because it is a detailed response to a reply that has since been removed by the author’s withdrawal from this forum. Without being able to see that post, this one is quite confusing. If you still want to see it, you can examine the edit history.


Hi @DaveR,

Not necessarily a dynamic component, but the ability to treat a solid as taking away from it’s “parent” - much as you do with cutters - but with the ability to leave it in the model, move it, scale it, flip it, mirror it, duplicate it, etc.



Many things are possible to do with extensions. See Face Cutter for ideas.

Built in functionality would be handy, sure, but with SketchUp Ruby API it seems like anything is possible!

I made the holes big so you could see they cut all the way through.



Interesting. I’ve downloaded it and tried to use it, but I’m having problems. I tried to find either documentation or a tutorial, but wasn’t successful. Might you have some pointers on use - or know where some documentation or tutorials might reside?


I’ve hidden this reply on 20 November 2016 because it is a detailed response to a reply that has since been removed by the author’s withdrawal from this forum. Without being able to see that post, this one is quite confusing. If you still want to see it, you can examine the edit history.



Make sure that face cutter is turned on (see the last gif on the extension download page), and like in the gif above I have it set to auto, otherwise you need to select ‘Cut Faces’ from the context menu.

In addition to that:

  1. Your ‘hole’ component must be a component with hole cutting attributes. (In other words a component that normally cuts face when glued to them).
  2. Your ‘hole’ component must have a depth as deep as you wish the hole to cut. In my gif above it was 0.5" deep to cut through the 0.5" I-beam flange.
  3. In order to cut faces in a group or component the faces to be cut need to be ‘loose’ in the group. No extra levels of nesting. And the ‘hole’ component needs to be glued to the ‘I-beam’ group.
  4. If the ‘hole’ component will be moved successfully, the group to be ‘cut out’ must have the same axis as it’s parent. Otherwise the cutting component and it’s ‘holes’ will move in different directions.

Let me know how this work.


[quote=“denisroy, post:14, topic:33030”]

You should.

I agree that this functionality would be very useful. Consider the fact that face cutter only cuts faces that are parallel to the z axis of the component. Intersecting lines can be hidden. But as was mentioned, the desired/correct functionality would be to cut out everything that’s ‘in the way’. In addition to that, it should cut the shape of the object. For example: a cone shaped component would cut a cone shaped hole.


In fact the bottom circle is not required. The top circle is used to determine the size and shape for the cut. The cut is made down to the bottom of the components bounding box. If you want the component to cut deeper simply draw a line (inside the component) to the desired cut depth, and then hide the line.


Wow! So much to reply to, so here goes …

@Neil_Burkholder: Thanks for the instructions! I’m starting to understanding how Face Cutter works and (as you’ll see below) it’s limitations. I also agree that there is a need to be able to define cuts that aren’t of uniform cross section (you cited the desire to use a cone as a cutter).

@denisroy: I think we have different ideas of what constitutes a solid. You are using the term from the point of view of formal solid modeling, while I’m using the term in SketchUp’s context where SketchUp uses it for identifying a solid grouping (as a Group or Component). I do want the negative space to affect surrounding geometry in a way that preserves the “solidness” (in SU terms) of the surrounding geometry. To my mind, you can’t put anything “inside” a solid block of matter. But ignoring our different understandings, I think we’re talking about the same thing. As @Neil_Burkholder points out above, the Face Cutter doesn’t interact with any geometry that is not in the “cutting” components x-y plane - which is saying essentially the same thing as your saying that Face Cutter won’t leave you with the ability to 3d print.

One other problem shown by @denisroy’s bolt example (which is no longer available to see because denisroy removed all his contributions to the forum) is that the area to be “cut” doesn’t necessarily conform to the thing that needs to be inserted “through” the cut geometry! The hole he cuts is significantly larger than I would expect to see if sized for a particular bolt diameter, yet it shouldn’t be exactly the bolt diameter - it should be marginally larger.

On a more fundamental level, the use I had in mind is the publicly usable component (through the 3d Warehouse or elsewhere) that represents a door or a window. Even if the component is superbly modeled such that it has Component Options and has well thought out scaling attributes, it can only cut one side of the wall. To do more requires (currently) individual download of an extension (like Face Cutter) at the very least, and likely editing of the Dynamic parts of the component (thus requiring SU Pro) - which is, in my opinion, too much to ask of the casual Make user.

Thus I come back to where I started: I think the basic idea of a negative space component should be built into SketchUp Make. And I’m happy to continue the discussion of exactly what that means!

In order to make this reply no longer than it already is, I’m going to make an example component now and post it separately soon …


I’ve hidden this reply on 20 November 2016 because it is a detailed response to a reply that has since been removed by the author’s withdrawal from this forum. Without being able to see that post, this one is quite confusing. If you still want to see it, you can examine the edit history.


As shown by the gifs on the extension page, the primary targeted for Face Cutter use was cutting through walls with multiple faces, not dealing with solids.


There are extensions that create that geometry for the shaft such as Fredo’s Stencil tool and Tig’s Hole Punch tool. Tig’s hole punch tool even allows you to move or delete the ‘hole’, although it does a lot more work than the face cutter (keeping track of all the loose geometry).

  • Fredo’s Stencil tool does a nice job of cutting shafts (no 3D shapes), but it is more difficult to move or delete ‘holes’. This tool also leaves the original component solid.
  • Tig’s Hole Punch tool makes a shaft that is easy to move or delete, but its shaft is continuous. Like Face Cutter it also doesn’t deal with none planar faces.
  • Face cutter only makes ‘holes’. No extra (visible) geometry added for shaft. Any geometry for shaft needs to be in the main component, as in my first hole cutting gif above.

I believe I deviated from your original intent. You proposed a component with geometry (bolt) and a solid group containing the object for ‘negative space’ (bolt hole). As @denisroy mentioned this would be complex, and (I believe) not easily done even with an extension.

That said, it would be a fabulous and very powerful feature if it was implemented.

Edit: Oops I forgot the gif showing the tools I mentioned.

SketchUp 2018 Wish List
SketchUp 2018 Wish List

OK! Here’s my example:
Bolt with Negative Space.skp (132.0 KB)
A few disclaimers first:

  • Yes. It is huge — YUUUUGGGGEEEEE! In order to avoid the small face problem, I modeled it in meters!
  • Yes, I did use a couple of layers - so you can quickly turn visibility on/off for the bolt separately from the negative space
  • No, I did not try to model this realistically. For instance, I don’t know if I’ve left enough room for a socket wrench around the head, nor did I leave any negative space for a nut/washer on the other end. I created this to illustrate my negative space idea - not to create an actual bolt component!

The general thrust of my idea, explained (perhaps poorly) in the original post, is that I’d like to see the negative space idea added to Sketchup. While it could be used independently, the use cases I’ve been able to think of all involve using the negative space in conjunction with a real model (like a bolt, or a window) where use of the real model implies “clearing away” parts of the rest of the model in order to insert your component - hence my restriction that it only be available as a sub-component of a glued, cutting component. (I include the “glued” criteria only because currently, in SketchUp, you can’t make a cutting component that isn’t glued.)

While in this conversation we have all (I think) identified the Face Cutter extension as a possible (partial) solution to my recommendation. Examining the example I uploaded, here are a few reasons that the Face Cutter extension is insufficient:

  1. If I used Face Cutter with this, it would cut a hole with the widest diameter - that of the larger part of the negative space around the bolt head. What I want is that something that would cut the widest diameter in the direction of the bolt head and the smaller diameter in the direction of the bolt body!

  2. As supplied, there are two overlapping coplanar faces (the bottom of the bolt head and the 2d “donut” where the negative space transitions between the two diameters. These (as expected) Z-fight on display. In use, should my idea be adopted, I would recommend that SketchUp ignore (for display purposes) faces of the Negative Space that are coplanar and overlapping with faces both within the component and with the rest of the model. Otherwise (when SketchUp adds geometry to replace the “holes” created by the negative space) all the created geometry will z-fight with the negative space!

The example shows a negative space that is “outside” of the item being modeled (except for the coplanar faces), but this isn’t necessary - in fact, it might be a limitation! Why? Imagine a model of a manufactured window - most of it is contained inside an imaginary box representing the rough opening, but it also include exterior trim of some sort which is not within the rough opening. Since it’s relatively common knowledge that you have to leave clearance to install a manufactured window from the exterior, I don’t see the need to require such complexity in a window model - just using the negative space to define the minimum rough opening is enough.

While it’s becoming apparent that most of what I want can be done using existing tools and extensions, I remind all that I’m hoping for a solution that allows you to transform (move, rotate, scale) the real item represented by the component and the previous “cuts” would be magically healed and new ones created after the transformation - much as the current ability of a component to cut a single face works.

I’m especially hopeful that this would, in time, result in a number of high quality components becoming available in the 3d warehouse that could be used for the novice wanting to use SketchUp to brainstorm a model quickly (as was the case with me - I started using SketchUp for Tiny Home modeling for personal use). For me, it was the Solid Tools that convinced me to spring for Pro instead of Make. For others? Perhaps they’ll be inspired to spring for Pro in order to customize Dynamic Components with Negative Spaces that they’ve downloaded from the 3DWarehouse!


Begin 20 November 2016 edit

Denisroy has removed the reply in this thread which caused me to reply back what you see below. I’m going to try to recreate his post because, without it, the following makes little to no sense!

The following is not an exact quote, just my best recollection:

Let me see if I can simplify this, you want:

  • Y is a solid defining your “negative space”
  • X is another solid partially intersecting Y

You want Sketchup to create a solid Z such that (geometrically) Z = X - Y
End 20 November 2016 edit


Wow! You’ve successfully simplified the presentation of my idea. And as someone who often supplies Too Much Information, I thank you for it.

It is, perhaps, a bit too simple. I’d add a few details as follows:

  • For simplicity, I think that y should enclose one and only one solid - but that is just a first thought

  • z is not necessarily itself a volume, nor is x, but if parts of x intersected by y are volumes, z will include geometry necessary to keep those as volumes

  • Volume y is a subcomponent with parent component q, whose OTHER subcomponents (or top level geometry) will be included in z

  • Volume x is either the rest of the model (when q is the outermost component) or the rest of the component (when q is itself contained in another component). Note this criteria is one I just now came up with – open to change)

  • z is not stored in the .skp file! It is calculated at all times. It is used for exports and renders.



Not saving z is, to my mind, a consequence of allowing transforms of y to recreate z from the removal (from x) of the intersection of x and y. Since x must be preserved and z can be derived from x and y, what is the purpose of saving z in the .skp file? As for exports, I’m going under the assumption that no other program will be able to deal with recreating z, nor even preserve it in a back-and-forth-between-programs situation, thus on export, the current state (z) is what should be exported.

Personally, I have no problem restricting x entities to solids. All the use cases I can think of make sense only when both x and y are solids. But since others may have better imaginations than I, I suggested relaxing the requirement that x be solid. I have no problem keeping it more strict. It’s also likely easier computationally if we restrict x to a solid - but I leave that to the programmers should Trimble decide we made a convincing argument!

Note that y may well interact with more than one x - if we define x as a single solid! Staying with the example bolt, if you are bolting a lap joint in wood in order to strengthen the joint, then the bolt (y) will need to interact with both pieces being joined - which I expect would be distinct solids.

What’s making this a bit hard to talk about (and I’m not good at diagrams - even with SketchUp!) is that, in my head, I’m blurring the distinction between the concept and the implementation.

And I’m with you in thinking that subtracting y from x should result in z being a solid (assuming x and y are both solids).


What happens when you have two components with y negative solids. Which one wins and cuts away the other bolt?


That might be a problem, but after a few minutes thinking about it, I’ve yet to dream up a real life use case where it might arise, so I’d be content with two intersecting negative spaces throwing an error (with pop-up) - with the edit that created the conflict being rolled back.