## RegionDifference not working with one Cuboid and large number of embedded cylinders

I am trying to create a Cuboid with embedded hollow cylindrical regions. It seems to work fine when I use a relatively small number of cylinders (about 20) but does not work when I use a large number of cylinders (typically more than 40). In my real application I need more than 100.

Any help would be greatly appreciated!

Herewith, please find the codes I used:

``Clear[rcoord, matr, pts1, pts2, cyl3, regCyl3, matDiff] (* create a list of 3 pseudorandom reals between 0 and 1 *) rcoord := RandomReal[1., 3] (* generates the filled RVE cuboid *) scl2 = 0.1; matr = BoundaryDiscretizeGraphics[    Cuboid[{0, 0, 0} + {scl2, scl2, scl2}, {1, 1, 1} - {scl2, scl2,        scl2}]];  (* generate a list of random cylinders within Cuboid *) cylTot = 100;   (* total number of random cylinders *) cylRem = 20;  (* number of random cylinders to remove from cuboid *) pts1 = Table[rcoord, {cylTot}]; pts2 = Table[rcoord, {cylTot}]; rad = 0.02; cyl3 = Table[   Cylinder[{pts1[[i]], pts2[[i]]}, rad], {i,     Length[pts1]}];   (* list of all cylinders *) regCyl3 =   Table[BoundaryDiscretizeGraphics[cyl3[[i]]], {i, 1,     Length[cyl3]}];   (* list of all cylinderical regions *)  (* generate the hollow RVE cuboid by removing random cylinders from \ Cuboid *) (* works when I remove a small number only, typically less than \ 40  cylinders *) matDiff =   RegionDifference[matr,    regCyl3[]];   (* remove first cylnderRegion from Cuboid *) matDiff = Fold[(RegionDifference[#1, #2]) &,   matDiff,    regCyl3[[2 ;;      cylRem]]];  (* remove rest of cylnderRegions from Cuboid *) HighlightMesh[matDiff, Style[2, Opacity[0.5]]] RegionPlot3D[matDiff, PlotStyle -> Directive[Yellow, Opacity[0.5]],   Mesh -> None] ``

But I get error messages when I use a large number of Cylinders:

``(* create new derived region by removing random cylinders from Cuboid \ *) (* Does not work when I try removing a large number of cylinders, \ typically more than 40 *) Clear[matDiffAll, cylRemAll]; cylRemAll = 60; matDiffAll =    RegionDifference[matr,     regCyl3[]];   (* remove first cylnderRegion from Cuboid *) matDiffAll = Fold[(RegionDifference[#1, #2]) &,   matDiffAll,    regCyl3[[2 ;;       cylRemAll]]];  (* remove rest of cylnderRegions from Cuboid *) HighlightMesh[matDiffAll, Style[2, Opacity[0.5]]] RegionPlot3D[matDiffAll, PlotStyle -> Directive[Yellow, Opacity[0.5]],   Mesh -> None] ``
Posted on Categories cheapest proxies