This reverts rev55642 and fixes issue in a different way.
The thing here is: isolated vertices are for sure not in BVH
and updating keyblock could not only rely on idea that all
vertices are in BVH (no idea why it was noticed just now).
Solved in a way, that uses old keyblock coordinates as new
keyblock, and then refines it using coordinates from BVH.
Hopefully it'll cover all cases now :)
Stencil style texture mapping. Ready for field testing and user feedback.
This commit adds stencil like brushes, like those that existed on old ptex branch.
(with the exception of clip colour)
To control the position of the stencil, you use
Q: translation
Shift - Q: scaling
Ctrl - Q: rotation
There's extra work that has been done to make this work:
* Support for coloured overlay in vertex/texture painting
* Also made A button do stroke mode selection like in sculpt mode,
when mask painting is inactive.
There are some TODOs to work on during bcon3:
* Support tiled and stencil mode in 2D painting. Support alpha textures also.
* Tidy up overlay code. There's some confusion there due
to the way we use the primary brush texture sometimes for alpha, other times
for colour control.
WIP design docs will be in
http://wiki.blender.org/index.php/User:Psy-Fi/New_Brush_Tool_Design
PyNodes opens up the node system in Blender to scripters and adds a number of UI-level improvements.
=== Dynamic node type registration ===
Node types can now be added at runtime, using the RNA registration mechanism from python. This enables addons such as render engines to create a complete user interface with nodes.
Examples of how such nodes can be defined can be found in my personal wiki docs atm [1] and as a script template in release/scripts/templates_py/custom_nodes.py [2].
=== Node group improvements ===
Each node editor now has a tree history of edited node groups, which allows opening and editing nested node groups. The node editor also supports pinning now, so that different spaces can be used to edit different node groups simultaneously. For more ramblings and rationale see (really old) blog post on code.blender.org [3].
The interface of node groups has been overhauled. Sockets of a node group are no longer displayed in columns on either side, but instead special input/output nodes are used to mirror group sockets inside a node tree. This solves the problem of long node lines in groups and allows more adaptable node layout. Internal sockets can be exposed from a group by either connecting to the extension sockets in input/output nodes (shown as empty circle) or by adding sockets from the node property bar in the "Interface" panel. Further details such as the socket name can also be changed there.
[1] http://wiki.blender.org/index.php/User:Phonybone/Python_Nodes
[2] http://projects.blender.org/scm/viewvc.php/trunk/blender/release/scripts/templates_py/custom_nodes.py?view=markup&root=bf-blender
[3] http://code.blender.org/index.php/2012/01/improving-node-group-interface-editing/
ALERT! POSSIBLE BREAKING COMMIT, ESPECIALLY FOR SCULPT!
Separate the sculpt sampling function so that it can be reused
from other paint systems. This includes updating of the relevant
coordinates for anchored and rake style brushes, which are now
being updated as part of the stroke system.
I left only code for area-style brush texture mapping in sculpt
code, since it requires a few data structures not present on other
paint systems.
This commit makes it almost as easy to support rake on other systems as
exposing the python UI for it. Also it makes it totally possible to
have texture painting capabilities in vertex paint too :) These commits
will follow very soon.
Also, even if I did my best to keep the code from breaking, (even fixed a
leftover bug from coordinate changes) this is a big change. Please test!
We have a glicth with colormanagement's spaces descriptions, though, looks like they are clamped at 64 chars (see raw space), will see that later, if it’s solvable.
on mouse event coordinates. Every paint mode operated on and converted
back to region coordinates, texture paint does so too so this will help
in unifying the systems.
ALERT! POSSIBLE BREAKING COMMIT:
I have tested all paint systems that use the stroke code and they look
like they work well but I would appreciate it if more eyes could test
this.
When restoring coordinates in sculpt mode (used for several brushes
including anchor brush), can use sculpt_undo_get_node() for
non-dyntopo sculpting instead of sculpt_undo_push_node().
This should bring speed of anchor brush back to 2.65 level for regular
mesh/multires sculpting.
Fixes projects.blender.org/tracker/?func=detail&atid=498&aid=34208&group_id=9
This will be enabled if the file was saved with dynamic topology on,
but we don't automatically re-enter dynamic-topology mode when loading
a file so remove the flag.
Fixes bug [#33956]
projects.blender.org/tracker/?func=detail&aid=33956&group_id=9&atid=498
It was caused by own mistake by not noticing externtex is used not
only by render engine. Now this function uses pool passed as argument
rather than using R.pool.
It was caused by image threading safe commit and it was noticeable
only on really multi-core CPU (like dual-socket Xeon stations), was
not visible on core i7 machine.
The reason of slowdown was spinlock around image buffer referencing,
which lead to lots of cores waiting for single core and using image
buffer after it was referenced was not so much longer than doing
reference itself.
The most clear solution here seemed to be introducing Image Pool
which will contain list of loaded and referenced image buffers, so
all threads could skip lock if the pool is used for reading only.
Lock only needed in cases when buffer for requested image user is
missing in the pool. This lock will happen only once per image so
overall amount of locks is much less that it was before.
To operate with pool:
- BKE_image_pool_new() creates new pool
- BKE_image_pool_free() destroys pool and dereferences all image
buffers which were loaded to it
- BKE_image_pool_acquire_ibuf() returns image buffer for given
image and user. Pool could be NULL and in this case fallback to
BKE_image_acquire_ibuf will happen.
This helps to avoid lots to if(poll) checks in image sampling
code.
- BKE_image_pool_release_ibuf releases image buffer. In fact, it
will only do something if pool is NULL, in all other case it'll
equal to DoNothing operation.
Fixes the sculpt object being incorrectly clipped during drawing due
to an out-of-date bounding box making it seem that the object had gone
outside the view.
Added a BKE_pbvh function to get the top-level bounding box. In
sculpt_flush_update(), where the PBVH bounds are updated, the result
is copied to the object's bounding box.
Fixes bug [#33790]
projects.blender.org/tracker/?func=detail&aid=33790&group_id=9&atid=498
Ignore size+pressure when the sculpt tool doesnt use dynamic size brushes (grab, thumb for eg).
The problem was if you didnt jab the stylus on the tablet hard enough you'd end up with a tiny brush since the initial pressure was used.
Move anchored and rake options away from Sculpt struct and to
UnifiedPaintSettings where they may be used by other tools in the future
(carefree whistle...)
No functionality should change but if it does I'll follow the screams...
sculpt_multires_active() now returns NULL if dynamic topology is
enabled. Fixes bug #33718:
projects.blender.org/tracker/?func=detail&aid=33718&group_id=9&atid=498
* User documentation:
wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.66/Dynamic_Topology_Sculpting
* Code review for this and the other dynamic-topology commits:
https://codereview.appspot.com/6947064/
Thanks to Sergey for doing code review!
* Add SCULPT_OT_dynamic_topology_toggle operator to enable or disable
dynamic topology mode
* Most brushes need little modification for dynamic topology, but for
some it won't work well and is disabled. This decision is made in
sculpt_stroke_dynamic_topology().
* For brushes that need original data (e.g. grab brush) the topology
is not updated during the stroke, but some changes to original
vertex data is accessed were made since BMesh works a little
differently from mesh/multires. This is abstracted with
SculptOrigVertData and associated functions.
* Smooth brush gets yet another set of functions, for mesh and
multires and dynamic topology and, separetely, masking
* For most brushes, the topology is updated during the stroke right
before the regular brush action takes place. This is handled in
sculpt_topology_update().
* Exiting sculpt mode also disables dynamic topology
* Sculpt undo works differently with BMesh. Since the contents of
nodes in the PBVH do not remain static during a sculpt session, the
SculptUndoNodes do not correspond with PBVHNodes if dynamic topology
is enabled. Rather, each SculptUndoNode is associated with a
BMLogEntry.
* Sculpt undo gets a few new cases: entering and exiting dynamic
topology does an undo push of all mesh data. Symmetrize will
similarly push a full copy of BMesh data, although it does so
through the BMLog API.
* Undo and redo in dynamic-topology mode will do a full recalculation
of the PBVH.
* Add some documentation to doc/sculpt.org. This could stand to be
expanded a lot more, for now it mostly contains test cases for the
undo system.
* Add SCULPT_OT_optimize operator to recalculate the BVH. The BVH gets
less optimal more quickly with dynamic topology than regular
sculpting. There is no doubt more clever stuff we can do to optimize
it on the fly, but for now this gives the user a nicer way to
recalculate it than toggling modes.
* This doesn't make much difference for regular mesh/multires
sculpting, but for dynamic topology sculpting the undo stack isn't
split up by PBVH nodes, so it's more convenient to store the layer
data in PBVH nodes.
* Note that the life cycle of the layer displacement data is
unchanged -- it's only valid during a stroke with the layer brush,
gets free'd when the undo step ends.
now blenlib/BLI doesn't depend on any blenkern/BKE functions,
there are still some bad level includes but these are only to access G.background and the blender version define.
a few areas that use ED_view3d_win_to_segment_clip() didnt take into account the case where the segment was filly clipped, some callers even needed the segment not to be clipped.
- added ED_view3d_win_to_segment()
- ED_view3d_win_to_segment_clip() now returns FALSE if the segment is totally clipped, but the start/ends of the line are not zero'd as they were before.