示例#1
0
  /**
   * Replace duplicate of leaf with leaf itself TODO: this should also use known complements
   *
   * @param leaf
   * @param tolerance
   */
  private void replaceAllSameLeaves(RrCSG leaf, double tolerance) {
    int same;
    switch (op) {
      case LEAF:
      case NULL:
      case UNIVERSE:
        // System.out.println("replace_all_same_leaves(): at a leaf!");
        break;

      case UNION:
      case INTERSECTION:
        RrHalfPlane hp = leaf.hp;
        if (c1.op == RrCSGOp.LEAF) {
          same = RrHalfPlane.same(hp, c1.hp, tolerance);
          if (same == 0) c1 = leaf;
          if (same == -1) c1 = leaf.complement();
        } else c1.replaceAllSameLeaves(leaf, tolerance);

        if (c2.op == RrCSGOp.LEAF) {
          same = RrHalfPlane.same(hp, c2.hp, tolerance);
          if (same == 0) c2 = leaf;
          if (same == -1) c2 = leaf.complement();
        } else c2.replaceAllSameLeaves(leaf, tolerance);
        break;

      default:
        Debug.e("replace_all_same(): invalid operator.");
    }
  }