[v8i MDL] mdlKISolid_booleanDisjoint: unable to perform boolean operation

Hi,

I frequently use the function mdlKiSolid_booleanDisjoint in a larger application which heavily manipulates solids . From time to time the boolean operation is not succesfully completed, but there is definitely some overlapping between the involved solids. Our main workaround is to move one of the solids little bit in some direction and in most cases the boolean operation is than possible ( often in milimeters or centimeter - some solids even can be 4 or 5 kilometers long, so some milimeters are not that important ). 

I attached one case of two solids which intersection cannot be computed ( with the standard solid interscetion tool ).

How can I detect the geometry which makes the boolean operation impossible? How can i repair those solids?

Kind regards,

 Harmen

SolidsUnableToIntersect.dgn
  • Topologically speaking these solids are both valid, and I see that you have chosen an appropriate solid working area of 10 km to handle these large bodies...however, that doesn't mean their intersection can be represented as a valid/manifold body.

    I peeled off the top and bottom "surfaces" of these two bodies to give you some idea of what the imprint step between their face sets would look like (see image).

    This just isn't the sort of overlap a boolean is designed to handle. What is your purpose in trying to intersect these solids, i.e. to what use will you put the resultant body (assuming it could be created)?

    -B



  • Brian, thank you for your answer.

    The plateau area with the many overlaps is not important for the next steps of the workflow, but it is part of the input data. In most cases the aera lies under the green body and causes no problem. The resultant body or bodies are further decomposed into slices. Those slices are used for a schedule how a excavator (open-cast mining) will extract coal etc.

    I attached the result of this operation as a dgn (obtained with automatically moving the red solid a little bit).

    Can you explain in more detail, why the boolean fails? Is it possible to detect those problematic parts of the geometry with the help of the mdl api?

    Kind regards,

    Harmen

    1.dgn
  • Attached is the simplest test case I could think of that would illustrate a boolean intersection failure. I believe this accurately reflects the same sort of imprint failure that is occuring with your 2 solids.

    I appreciate seeing the type of result you are trying to obtain, unfortunately I don't understand enough about where your data originates and the sort of flexibility you have in creating your meshes to suggest alternatives.

    It would be far better if this could all be done using meshes, converting what is basically chunks of DTMs (?) into Parasolid BReps is really doing things the brute force way...

    -B

    NOTE: This particular case can be handled by not requesting the result as a single body with separate/disjoint regions...but hopefully you get the general idea.



    Answer Verified By: Harmen gro�e Deters 

    boolean_test.dgn

  • Brian, thank you very much, your example is quite instructive. All three mesh boolean operations result in the 'expected' geometry.

    I noticed if use the mesh boolean intersection tool with my much more complex expample, the order of selection seems to be important. Only if I first select the red body and then the green one, a result can be computed. I tested this with a v8i SS2. 

    Apart from that strange behavior, it nice to know that the mesh boolean operations can compute some cases where the solids operations fail. I always assumed that the mesh and solid boolean operations are internally the same.