make-manifold? operation only on final boolean-merge please.
Created by: reiniervandijk
Consider a user creating a merged-solid from multiple breps (more than 2) and set:make-manifold? t. While doing so, he will get bummer! warnings about the make-manifold operation failing on all but the last boolean merge (assuming the input breps proper of course). Logically, trying manifold operations on intermediate results makes little sense, since they will most likely have a non-manifold topology.
Two things:
- Only perform make-manifold operation on last boolean merge
- Consider the performance impact. Might you not slow down the whole process by asking the kernel to try this (unnecessary) operation every time?
Replicate:
(define-object manifold-sample (base-object)
:objects
((box :type 'box-solid
:width 2 :length 2 :height 2)
(merged :type 'merged-solid :other-brep (the box :face-breps :list-elements))
(merged2 :type 'merged-solid :other-brep (the box :face-breps :list-elements) :make-manifold? t)))
And then:
> (make-self 'manifold-sample)
#<manifold-sample @ #x281d9fb2>
> (the merged :bounding-box)
Merging ((:face-breps 1) :box) into merge object
Merging ((:face-breps 2) :box) into merge object
Merging ((:face-breps 3) :box) into merge object
Merging ((:face-breps 4) :box) into merge object
Merging ((:face-breps 5) :box) into merge object
(#(-1.0 -1.0 -1.0) #(1.0 1.0 1.0))
> (the merged2 :bounding-box)
Merging ((:face-breps 1) :box) into merge object
Warning: Bummer! the make-manifold operation failed with code 1001
Merging ((:face-breps 2) :box) into merge object
Warning: Bummer! the make-manifold operation failed with code 1001
Merging ((:face-breps 3) :box) into merge object
Warning: Bummer! the make-manifold operation failed with code 1001
Merging ((:face-breps 4) :box) into merge object
Warning: Bummer! the make-manifold operation failed with code 1001
Merging ((:face-breps 5) :box) into merge object
Manifold Success!
(#(-1.0 -1.0 -1.0) #(1.0 1.0 1.0))
Imported comments:
By genworks on 2013-02-01 04:10:02 UTC
This is fixed in current github in surf/source/boolean.lisp. (By the way, yes we will be adding an (update-gdl) option to pull from github, but for now you have to manually pull and load from github if you want early previews).
gdl-user> (make-self 'manifold-sample)
#<manifold-sample @ #x368853d2>
gdl-user> (the merged2 bounding-box)
Merging ((:face-breps 1) :box) into merge object
Merging ((:face-breps 2) :box) into merge object
Merging ((:face-breps 3) :box) into merge object
Merging ((:face-breps 4) :box) into merge object
Merging ((:face-breps 5)
:box) into merge object, trying to make manifold...
Manifold Success!
(#(-1.0 -1.0 -1.0) #(1.0 1.0 1.0))
gdl-user>