While it might be handy to have type-less functionality which is
similar to how C++ math is implemented it can not be easily achieved
with just preprocessor in a way which does not have side-effects on
wrong usage.
There macros where often used on a non-trivial expression, and there
was at least one usage where it was causing an actual side effect/bug
on Windows (see change around square_f(sh[index++]) in studiolight.c).
For such cases it is handy to have a function which is guaranteed to
have zero side-effects. The motivation behind actually removing the
macros is that there is already a way to do similar calculation. Also,
not having such macros is a way to guarantee that its usage is not
changed in a way which have side-effects and that it's not used as an
inspiration for cases where it should not be used.
Differential Revision: https://developer.blender.org/D7051
- Use 'BKE_object_defgroup' prefix for object functions.
- Rename 'defvert_verify_index' to 'defvert_ensure_index'
since this adds the group if it isn't found.
When beveling architectural objects like baseboards or crown mouldings that
may consist of multiple islands, it's useful if the orientation is at least
conistent.
This changes the arbitrary decision of how the orientation should start at a
chain beginning to use the highest side of the profile in the Z direction.
Reviewed By: howardt
Differential Revision: https://developer.blender.org/D6946
When a vertex between two edges is being collapsed,
it's important that edges between delimiting faces use the
angle between edges without scaling it down.
While faces with different materials wont ever be merged into a single
face, all the detail between the two faces may be removed.
Needed to protect against a case where clamp overlap limited
the offset to approximately zero, and the snap-to-pipe code
would therefore encounter an almost degenerate profile and
fail in matrix inversion.
Profile calculation now happens in a single pass rather than being spread
throughout the process. This means each profile will only be calculated a
single time.
Reviewed By: howardt
Differential Revision: https://developer.blender.org/D6658
offset_meet creates offset lines that can't be directly intersected, so
the average of the points on each offset line is 'dropped' onto the
faces around the beveled vertex, which can depend on where
the loop starts.
This fix skips faces with the same normals as the "in plane" faces from
build_boundary.
Reviewed By: howardt
Differential Revision: https://developer.blender.org/D6521
In the Auto Merge & Split feature, multithreading was only used to
find duplicates between vertex and another vertex.
But with this patch, multithreading is now used to find intersections
etween edge and edge and between edge and vertex.
In my tests I noticed a performance improvement of around 180%
(0.017151 secs to 0.009373 secs)
Differential Revision: https://developer.blender.org/D6528
Previously, compared to `Auto Merge` without `Split Edges & Faces`,
`Auto Merge` with this option ignored duplicates between selected
vertices. It only considered duplicates between selected vertices and
unselected vertices.
This is a regress and not a progress.
This commit implements this behavior, so this option matches the other
`Auto Merge`.
Custom profiles in bevel allows the profile curve to be controlled by
manually placed control points. Orientation is regularized along
groups of edges, and the 'pipe case' is updated. This commit includes
many updates to comments and changed variable names as well.
A 'cutoff' vertex mesh method is added to bevel in addition to the
existing grid fill option for replacing vertices.
The UI of the bevel modifier and tool are updated and unified.
Also, a 'CurveProfile' widget is added to BKE for defining the profile
in the interface, which may be useful in other situations.
Many thanks to Howard, my mentor for this GSoC project.
Reviewers: howardt, campbellbarton
Differential Revision: https://developer.blender.org/D5516
Actual issue is with triangle beautify,
avoid precision error by scaling the epsilon
by the face area when it's over 1
The mesh in the report was very large (approx 2000 on each side),
causing precision issues with a fixed epsilon.