The previous stroke creation procedure was trying to clean stroke topology
by removing overlapping stroke vertices in the same 2D location. The idea
was to avoid having to address this kind of singularity during subsequent
stroke shading. In-depth analyses revealed, however, that this was a wrong
way to ensure clean stroke topology, since just deleting overlapping vertices
may break the continuity of the underlying series of FEdges on top of which
the stroke has been built. Such a break of linked FEdges was a major cause
of frequent failure in CurvePoint::getFEdge().
The present commit aims to address the singularity issue by adding small
offsets to the 2D location of overlapping vertices and making them
non-overlapping to each other. Since the offsets only result in sub-pixel
differences, the impact on visual outcomes is expected to be negligible.
Screens are usually doesn't have overexposured pixels and all
saturation / gradient math was written assuming that all channels
are withing 0 .. 1 range and in cases when some channel exceeds
this range matte could be completely wrong.
Added special check for overesposure and assume such pixels as
definitely foreground.
Also fixed minimal value for edge kernel size.
Right now this is being fixed by not allowing the exact same action (action, start/end frames, speed, etc) to be played if it's already playing. Hopefully this will not cause more issues than it solves.
a translate node were connected with the same complex node (like lens
distortion).
Added a check to see if the list of buffers are available to resolve
this issue.
First half of the problem is fixed, but the second issue regarding edge/vertex snapping disregarding angle constraints will need some refactoring eventually.
- makesdna wasn't checking whether such scalars are aligned to 8 bytes.
Now it should be handled correct.
- Some scalars in Object structure weren't 8 bytes aligned, which lead
to some incorrectly loaded files.
Fixed by adding void *pad. It's a bit tricky part of patch, but can't
see clearer way to make alignment correct
Usually ints/chars were used for padding, but in this case there are
some leading pointer properties before int64 properties and using
pointer as a padding resolves alignment on both 32 and 64 bit
platforms.
Using pointers as padding weren't needed before, because all types
were correctly aligned independent of whether pointers are 4 or 8
bytes.
This fixes#31774: Empty offset Y parameter is resetting
The problem was that calculating the angle was reliant on previous mouse coordinates, which did not update to match snapped-to vertices and edges.
This solves the issue by updating mouse coordinates in knife_find_closest_edge() and knife_find_closest_vertex(). Additionally, when angle constraints are enabled, edge/vertex snapping is now prevented.
Blender's import function check's the Text datablocks in main for additional modules for importing. However, libloaded scenes were 1) not loading Text datablocks and 2) not letting bpy know about them. Text datablocks are now loaded if a Scene is loaded and bpy can now looking through extra Mains to find additional modules.