Skip to content

CSG bug when operating on a particular extruded mesh #97

Description

@kunitsyn

First of all, thank you for the library, it's awesome. I understand it's in development, and I believe it would benefit from another test case. The following code yields non-optimal results, on the current master branch:

let av = [(1.6363814, -0.42992532),
          (1.7721995, -0.34534788),
          (0.28442883, 2.0437772),
          (0.19985116, 2.1795955),
          (-2.5245433, 0.4830433),
          (-2.6603615, 0.3984658),
          (-1.1725912, -1.9906592),
          (-1.0880136, -2.1264777)]
let ap = Path(av.map { PathPoint.point(Vector(Double($0.0), -0.25924492, Double($0.1))) })
let a = Mesh.extrude(ap.closed(), depth: 2.9344041)
let b = Mesh.cube(size: Vector(size: 3))
let r = b.subtract(a)

Mesh R will look like this (with A shown in wireframe):

image

There is a hole on top, and a lone polygon (behind) not having any volume.

Here, it's not really important what B is, it looks like most CSG operations with A will have problems like these. As fair as I understand, A is watertight and otherwise "legal" to use with CSG operations.

I took some time to look into this, and it seems to me that the problem occurs during building BSP of mesh A, where the polygon with vertex positions

(-1.0880136, 1.20795713, -2.1264777000000001),
(-1.1725912000000001, 1.20795713, -1.9906591999999999),
(-2.6603615, 1.20795713, 0.39846579999999998),
(-2.5245432999999999, 1.20795713, 0.48304330000000001),
(0.19985116, 1.20795713, 2.1795955),
(0.28442883000000002, 1.20795713, 2.0437772000000001),
(1.7721994999999999, 1.20795713, -0.34534788),
(1.6363813999999999, 1.20795713, -0.42992532)

is marked as spanning with regard to another polygon's plane that's equal to normal = (x = 0.52861031077292353, y = 0, z = -0.84886461779517774) w = 1.2299564728393015, where it's probably should have been marked as a back polygon. However, I don't know exactly how to solve this problem.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions