Home

Repair Body Intersections
[Local Operations]

Collaboration diagram for Repair Body Intersections:

Functions

outcome api_initialize_rbi ()
 Initializes the repair body self intersections library.
outcome api_remove_and_repair_body (int const nface, FACE *faces[], SPAposition box_low, SPAposition box_high, AcisOptions *ao=NULL)
 Removes faces and repairs the body.
outcome api_repair_body_self_ints (BODY *body, int const nface, FACE *faces[], AcisOptions *ao=NULL)
 Repairs self intersections in the supplied body.
outcome api_terminate_rbi ()
 Terminates the repair body self intersection library.

Function Documentation

outcome api_initialize_rbi (  ) 

Initializes the repair body self intersections library.



Effect: System routine

Journal: Not Available

Product(s): 3D ACIS Modeler

include <rbi_api.hxx>

outcome api_remove_and_repair_body ( int const   nface,
FACE faces[],
SPAposition  box_low,
SPAposition  box_high,
AcisOptions ao = NULL 
)

Removes faces and repairs the body.



Role: This API attempts to remove the specified faces from the body, and reclose a solid by growing the remaining adjacent faces, and intersecting them amongst themselves and with remote faces.

This operation cannot be be guaranteed to succeed. For example removing any face from a cube will fail as the remaining surfaces do not enclose a volume.

If an empty box is supplied, the function will compute a suitable box.The adjacent face surfaces are generally extended so as to have no boundaries in the box. This avoids solutions with detached faces on the same surface.

Errors: Face(s) supplied invalid, duplicate or from different bodies gives RBI_BAD_FACE.  Non manifold edge in body supplied gives RBI_NON_MANIFOLD.  Free or Sheet edge in body supplied gives RBI_FREE_EDGE.  Internal error gives RBI_INTERNAL.  No lumps left in body gives RBI_NO_LUMP_LEFT.  No faces supplied gives RBI_NO_FACE.  Body cannot be reclosed gives RBI_NO_SOLUTION.  Invalid box supplied gives RBI_BAD_BOX.


Limitations: Supplied body must be manifold and solid. Remote faces are not extended.

Effect: Changes model

Journal: Not Available

Product(s): 3D ACIS Modeler

Parameters:
nface number of faces to be removed.
faces faces to be removed.
box_low start of intersection box.
box_high end of intersection box.
ao ACIS options.

include <rbi_api.hxx>

outcome api_repair_body_self_ints ( BODY body,
int const   nface,
FACE faces[],
AcisOptions ao = NULL 
)

Repairs self intersections in the supplied body.



Role: Self-intersecting bodies have mutually intersecting faces. These are faces that intersect in places other than any of the common boundaries between them.

This API is intended to repair body self-intersections made by Local Ops or Shelling. This API does not address topology changes that prevent these operations from completing, but does repair self-intersections that result from the completed operations.

Body self-intersections made by other operations (such as sweeping or blending) may also be repaired if the body is in a suitable state.

The following assumptions are made:

  • The set of faces known to have been changed by the operation are supplied with the body.
  • The remaining faces in the body fall into a set of unchanged faces, and the faces in this set must not intersect one another unless along common boundary edges or vertices.
  • The set of changed faces may be empty. When the set of changed faces is empty it defaults to all the faces in the body, and the unchanged faces to an empty set.
  • The body consists of a number of solid shells, with a distinct inside and outside, crossing from one side to the other only being possible by passing through a face.
  • The shells must not be non-manifold.
  • The body shells may intersect.
  • The body shells may self-intersect.
  • Faces may have intersecting loops.
  • Faces may have self-intersecting loops.
  • Faces must not have self-intersecting surfaces.
  • Edges must not have self-intersecting curves.

Errors:
Api returns following errors:

Null body supplied gives RBI_NO_BODY.  Duplicate faces gives RBI_BAD_FACE.  Non manifold body gives RBI_NON_MANIFOLD.  Free ( sheet ) edge gives RBI_FREE_EDGE.  Algorithmic failure gives RBI_INTERNAL or RBI_BAD_OP_ON_ATT.  Current limitation gives RBI_NOT_IMPLEMENTED.  Unrepairable face loop gives RBI_IRREP_FACE_LOOP.  All faces in body being deleted gives RBI_NO_LUMP_LEFT.


Limitations:

  • The directions of open edges on periodic curves must be correct. Local Operations and Shelling will do this if option lop_repair_self_int is on or option lop_check_invert is off.

  • The input body is assumed to consist entirely of valid connected faces with no free edges.

  • It is assumed that the body was formerly valid and has become self-intersecting as a result of one or more faces passing through other faces during a local operation, or becoming partially or completely coincident with the other faces. Alternatively, the body is assumed to be composed of valid faces connected such that traversing it from any start face will always reach the same side of the start face.

  • The faces involved may be in different shells or lumps.

  • The faces themselves must be valid, except that they may be self-intersecting, or have inconsistent loops, or both.

  • Self-intersecting faces have some edges that intersect in places other than any common boundary vertices between them. However, the geometry of the faces is assumed to not intersect itself. An example of a self-intersecting face is the side face to a vertical face of a block tapered such that the top face should disappear.

  • Faces with inconsistent loops have faces which are unbounded by their loops or have loops that do not contain one another. An example of such a face is the top face of a block when a side face is tapered such that the top should disappear.

  • As the repair method is based on Boolean operations, faces are split and do not grow, except when they merge with other faces.

  • To have api_repair_body_self_ints remove any faces that are given reversed senses during the operation, set option rbi_remove_inv_face to TRUE, and face removal algorithm will be called at the end of the operation on those inverted faces, and will remove them by growing adjacent faces.


NOTE:

In the beginning, when RBI was created, it was not called by default when performing a Local Operation. However, it was possible to enable RBI within a Local Operation by setting the option lop_repair_self_int to TRUE. As of R15, RBI is enabled within Local Operations by default. Strictly speaking, the control of RBI is now governed by the creation of a default lop_options object, whose repair_self_intersections flag is set to TRUE. To perform a Local Op without RBI, supply a lop_options object with repair_self_intersections flag set to FALSE.

It is recommendable to evoke RBI through Local Operations or Shelling to repair self-intersection, rather than producing a self-intersecting body by Local Operations and then call RBI.

Now RBI can repair exclusive sheet bodies. If the option, 'lop_allow_free_edges' is turned ON and input body is a sheet body, api will not throw RBI_FREE_EDGE exception, instead of that algorithm with try to repair the body.

Effect: Changes model

Journal: Available

Product(s): 3D ACIS Modeler

Parameters:
body body to be repaired.
nface number of faces changed since the body did not self-intersect.
faces faces changed since the body did not self-intersect.
ao ACIS options.

include <rbi_api.hxx>

outcome api_terminate_rbi (  ) 

Terminates the repair body self intersection library.



Effect: System routine

Journal: Not Available

Product(s): 3D ACIS Modeler

include <rbi_api.hxx>