Message Boards Message Boards


How to make a hole in a Graphics3D object?

Posted 4 years ago
5 Replies
16 Total Likes

My question is that: how to make a hole in a Graphics3D object? For example, there are two objects ,cub1 and cub2:


enter image description here

I want to make a window at the positon of the cub2, like under.


enter image description here

But this object is obtained by use “DiscretizeRegion”, it is not a Graphics3D object, it is a MeshRegion object, and it make system too slow. Then, how to get a Graphics3D object?

POSTED BY: yang l
5 Replies

Let's start from your code:

cub1 = Cuboid[{0, 0, 0}, {20, 2, 20}];
cub2 = Cuboid[{12, 0, 8}, {17, 2, 17}];
Graphics3D[{cub1, cub2}];
reg = DiscretizeRegion[RegionDifference[cub1, cub2]]

You have a lot of tetrahedrons:

MeshCells[reg, 3] // Length


And a lot of polygons:

MeshCells[reg, 2] // Length  


You do not need all that for visual, - so get the surface (boundary):

surface = BoundaryDiscretizeRegion[reg];
polygons = MeshCells[surface, 2];
polygons // Length


Now so few polygons! Get the coordinates of the mesh too:

points = MeshCoordinates[surface];
points // Length
> 1910

And here you go:

  GraphicsComplex[points, Polygon[polygons /. Polygon[x_] -> x]]}, 
 Boxed -> False, Lighting -> "Neutral"]

enter image description here

another option (made the cube little thicker to make it more clear ) there are many more options in the RegionPlot3D you can adjust also.

  cub1 = Cuboid[{0, 0, 0}, {20, 6, 20}];
  cub2 = Cuboid[{12, 0, 8}, {17, 6, 17}];
  r2 = RegionDifference[cub1, cub2];
  RegionPlot3D[r2, PlotPoints -> 60, Mesh -> 10]

enter image description here

Wow, Nasser, such a nice compact solution!

Thanks, it is a good solution. Wolfram should support Boolean operation for Graphics3D objects in future.

POSTED BY: yang l

You can also apply Show to the mesh region. Show will preserve the styling and meshing.

Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
or Discard

Group Abstract Group Abstract