CadQuery / CadQuery/cadquery

When fusing two Faces, in some cases (esp. hull result) the internal edges cannot be removed.

Open
#1,891 2 comments 1 reaction 0 assignees View on GitHub
bug
Dominant language
Python
Stars
5.8k
Forks
541
Avg merge
3d 2h
Merged PRs (30d)
5

Description

The following code can successfully fuse two Faces and remove the internal edges;

Image

```
from cadquery.hull import find_hull
from cadquery.func import *
from cadquery.vis import show

base_face = face(rect(w=64, h=75))
print(type(base_face))
show(base_face)

moved_face = face(rect(40, 40).moved(Location(44, 0, 0)))

combined = base_face + moved_face
print(type(combined))

combined = combined.clean()
show(combined)
```

however, the code below cannot remove the internal edges.

Image

```
from cadquery.hull import find_hull
from cadquery.func import *
from cadquery.vis import show

base_face = face(rect(w=64, h=75))

print(type(base_face))
show(base_face)

moved_square = rect(40, 40).moved(Location(44, 0, 0))
moved_circle = circle(20).moved(Location(82, 0, 0))

hull_shapes = moved_square + moved_circle
hull_edges = hull_shapes.Edges()
hull_wire = find_hull(hull_edges)
hull_face = face(hull_wire)

print(type(hull_face))
show(hull_face)

#combined_face = base_face + hull_face
combined_face = base_face.fuse(hull_face)
combined_face = combined_face.clean()

print(type(combined_face))
show(combined_face)
```

The difference between the two pieces of code is that in the working case, a base_face is fused with a simple rectangular face, while in the non-working case, the base_face is fused with a face obtained through a hull operation.

After thorough debugging, we are confident that the issue stems from the hull operation. The following code presents an alternative implementation that eliminates the use of hull entirely.

Image

```
from cadquery.hull import find_hull
from cadquery.func import *
from cadquery.vis import show

base_face = face(rect(w=64, h=75))

moved_square = rect(58, 40).moved(Location(53, 0, 0))
moved_circle = circle(20).moved(Location(82, 0, 0))
face_wo_hull = face(moved_square) + face(moved_circle)

combined_face = base_face + face_wo_hull

show(combined_face)

combined_face = combined_face.clean()

print(type(combined_face))
show(combined_face)
```

## Environment
We are on Windows 11 with CadQuery 2.4.0 under Anaconda environment.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.