Commit Graph

787 Commits

Author SHA1 Message Date
fcf137dbd7 style cleanup 2013-04-08 04:39:09 +00:00
e8d0e77856 Fix #34813: smooth brush used on a shape key messes up the topology - part2
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 :)
2013-04-01 09:55:37 +00:00
1fea6220a2 Woot woot commit.
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
2013-03-31 00:38:50 +00:00
ebc538c56c Fix #34773: smooth brush used on a shape key messes up the topology
Key block update was missing coordinates for hidden vertices.
2013-03-28 06:11:32 +00:00
64d161de87 style cleanup:
also rename mesh_getVertexCos() --> BKE_mesh_vertexCos_get() to match curve function.
2013-03-26 07:29:01 +00:00
Lukas Toenne
4638e5f99a Merge of the PyNodes branch (aka "custom nodes") into trunk.
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/
2013-03-18 16:34:57 +00:00
3dababa7ec code cleanup: name mesh functions more consistently, also use bools for mesh args. 2013-03-17 19:55:10 +00:00
994265b204 Fix sculpt view normal for transformed objects
Patch from Antony Riakiotakis, thanks!

Fixes [#34641] "Front Faces Only" option in SculptMode behaves weird
projects.blender.org/tracker/?func=detail&aid=34641&group_id=9&atid=498
2013-03-16 17:45:58 +00:00
0d70e8a4fd Two new Features:
* Support for Rake in projective paint (2D painting will be a separate
commit)
* Support for smooth stroke across all paint systems
2013-03-14 02:27:36 +00:00
962865d19f fix for 2 errors where the 2d arrays were used as 3d. (out of bounds read).
also minor code cleanup.
2013-03-13 18:10:05 +00:00
aaa8a13c49 code cleanup: use const events for modal and invoke operators. 2013-03-13 09:03:46 +00:00
839b07fe31 style cleanup: also remove unused defines in paint_image.c 2013-03-13 05:23:53 +00:00
acd3bef34e Texture sampling function refactoring:
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!
2013-03-13 03:46:22 +00:00
4daef64986 Fix more UI i18n issues (reported by Leon Cheung and Lockal).
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.
2013-03-11 09:06:49 +00:00
7d585ed475 patch [#34103] check_for_dupid.patch
from Lawrence D'Oliveiro (ldo)

- more comments
- more uses of bool type
- define symbol for length of in_use array in check_for_dupid
2013-03-10 05:46:24 +00:00
abd1748e48 code cleanup: move runtime var zfac out of RegionView3D. rename initgrabz() -> ED_view3d_calc_zfac() and have it return the zfac to use. 2013-03-09 11:40:42 +00:00
ddddb7bab1 code cleanup: favor braces when blocks have mixed brace use. 2013-03-09 03:46:30 +00:00
c36f20a7d2 style cleanup 2013-03-08 04:00:06 +00:00
044955276a Convert paint stroke code to write region instead of screen coordinates
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.
2013-03-04 22:55:53 +00:00
634d783268 fix [#34416] Sculpt with ALT-B affects unseen mesh parts 2013-03-04 07:11:42 +00:00
c718f0d658 fix [#34431] Crash with 2.66 when dyntopo enabled and using view plane mode 2013-03-02 16:13:01 +00:00
0ac07404ba style cleanup: braces with multi-line statements, also add some comments. 2013-03-01 14:47:06 +00:00
1039135965 More UI messages fixes... 2013-02-28 15:31:20 +00:00
2e0017efd4 code cleanup: change order of args in void BKE_object_where_is_calc_time_ex() so extra arg is at the end (loose convention for *_ex() funcs). also some style cleanup. 2013-02-17 03:57:20 +00:00
39ee06421c Fix for harmless uninitialized-variable warning 2013-02-16 21:36:26 +00:00
ed39f334ca Fix performance regression with anchor brush in sculpt mode
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
2013-02-16 21:32:05 +00:00
e7cead0994 own recent change to triangulate bmesh operator stopped filling in mapping slot 'face_map.out', not used by blender its self but useful for scripts, enable this again. 2013-02-05 11:30:50 +00:00
69993c5d40 style cleanup: spaces -> tabs 2013-02-04 00:18:09 +00:00
4e94fca896 fix for error in own recent change, sculpt triangulate was done on a bmesh with uninitialized faces normals,
add warning that BM_mesh_bm_from_me() dosn't calculate face normals.
2013-02-03 08:13:15 +00:00
dc727f0256 sculpt, replace bmo call to triangulate with BM_mesh_triangulate() 2013-01-29 10:43:15 +00:00
0e2a6178c2 Remove dynamic-topology flag from mesh when entering sculpt mode
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
2013-01-24 04:33:29 +00:00
95a13a2c02 Fix projection texture painting crash
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.
2013-01-22 08:05:00 +00:00
86991fbcb0 Fixed render time regression in Blender Internal
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.
2013-01-21 08:49:42 +00:00
4256ad7566 Update object bounding box during sculpt
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
2013-01-20 00:19:57 +00:00
383987560b Disable OpenMP with dyntopo in paint_mesh_restore_co()
Otherwise, new entries might be inserted by sculpt_undo_push_node()
into the GHash used internally by BM_log_original_vert_co() by a
different thread.

Fixes bug [#33787]
http://projects.blender.org/tracker/?func=detail&aid=33787&group_id=9&atid=498
2013-01-19 23:52:33 +00:00
2fe92248a0 change to pressure & sculpt mode:
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.
2013-01-17 04:00:51 +00:00
7f513023d4 fix for airbrush not using tablet pressure (any brush with BRUSH_SPACE disabled). 2013-01-16 19:59:55 +00:00
e18f90617b Unification of brush code
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...
2013-01-16 03:20:36 +00:00
85b59bd89e style cleanup: '} else' and add this check to check_style_c.py 2013-01-07 02:32:57 +00:00
a4c6e36aac Fix for r53610, check that ob->sculpt is valid before using it 2013-01-06 20:06:53 +00:00
e8d599eefe Disable multires in sculpt mode if dynamic-topology mode is enabled
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
2013-01-06 18:02:47 +00:00
a8a60c6566 dyntopo speedup for smooth brush, no need to search for the shared vert-face loop, instead just iterate over the loops. 2013-01-02 02:12:10 +00:00
1aebc0e790 style cleanup 2012-12-31 02:37:28 +00:00
22c02c9d3a Code cleanup: rename BLI_pbvh to BKE_pbvh 2012-12-30 18:31:31 +00:00
ab960eea88 Add symmetrize operator for dynamic-topology sculpt mode 2012-12-30 18:31:01 +00:00
37ed697d5c Add simplify brush for sculpt mode 2012-12-30 18:30:40 +00:00
67d27db4a1 Add dynamic topology support to sculpt mode
* 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.
2012-12-30 18:29:07 +00:00
31f978c8ef Move layer displacements from SculptUndoNode to PBVHNode
* 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.
2012-12-30 18:26:11 +00:00
a6bee579e9 move pbvh into BKE, it used many BKE bad level includes.
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.
2012-12-15 15:59:25 +00:00
26d6872ef8 fix for knife tool when the mouse was moved outside the clipped area the mouse line would reset to 0/0/0
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.
2012-12-10 07:53:20 +00:00