Fix for bug #27710, 'Multires lost from 2.49 file in 2.5x'
Reported by Gaia Clary.
Problem was that the old multires data didn't flush changes to
vertices out to the Multires structure on filesave. So, recent bits of
sculpting could be lost if the multires level wasn't changed before
filesave.
We already had code to deal with missing multires vertex data, which
simply copies the Mesh vertex data into the multires vertex data if it
matches the number of vertices in the highest level. Moved this code
up a bit so that we always make this copy if the numbers match up.
Was able to reproduce the bug fresh in 2.49b, and confirmed that the
fix works. However, this does not help if changes were sculpted on a
multires level other than the highest level and saved without a
subsequent level change.
- comment/remove assignments from values to themselves.
- add case break statements (no functional change but some source code checkers notice).
- fix python errors when the sculpt brush is None.
This commit is aimed at cleaning up the filtering code by changing the
filtering idiom/pattern used. While the old code used a "check then
do" approach, the new code does a "grab then assimilate".
The main benefits are that:
* the code duplication that used to exist has now been removed, making
it easier to add new channel types for data
* a recursive "peeking" ability now means that the old problems with
data existing deep in the tree (i.e. figuring out whether a channel
should be shown based on whether it will have any descendents) should
now work much better than before.
In the process, I've found and fixed a few previously unnoticed bugs
with how some channels were constructed, so hopefully things work a
bit better now.
TODO's:
* Action-Group filtering stuff hasn't been refactored yet. This was
causing some grief in the past, so I still need to check this
carefully.
* Material Nodes support (missing in trunk) should be easy to slot in
now :)
lambda_cp_line --> line_point_factor_v3
lambda_cp_line2 --> line_point_factor_v2
correction to previous commit function name
isect_seg_sphere_v3 --> isect_line_sphere_v3
... since its not clipped.
added a clip argument to the python version of the function.
Thumbnail save for .blend crashed, when being in editmode for a mesh
that has other object users as well. Derivedmesh confusement...
Thanks to Sergey for finding the cause!
Default startup theme used same node header color for "in/out" nodes
as for "inactive or undefined" nodes. This made it impossible to see
which of the output nodes in node setup was 'active'. Made the active
in/out color a slight blueish shade of grey now.
Python:
* adds bpy.app.handlers which contains lists, each for an event type:
render_pre, render_post, load_pre, load_post, save_pre, save_post
* each list item needs to be a callable object which takes 1 argument (the ID).
* callbacks are cleared on file load.
Example:
def MyFunc(scene): print("Callback:", data)
bpy.app.handlers.render_post.append(MyFunc)
C:
* This patch adds a generic C callback api which is currently only used by python.
* Unlike python callbacks these are not cleared on file load.
Usage currently is limited to:
- Panel text, widget text and label text style:
point size, shadow effects
Setting individual fonts to these is not possible yet, it uses the
default for it.
Access goes via outliner now; check "User Preferences". UI team could
add this in userpref scripts :)
This was causing a lot of backward compatibility problems and side effects.
It has to be done properly, linked with Material ObjectColor shader_flag or at least the TF OBCOLOR (which apparently worked at some point so I've been told).
If you need to use OBCOLOR simply keyframe the obcolor and it will work as before.
* BL_DeformableGameObject is no longer responsible for handling keys, BL_ShapeDeformer is
* BL_ShapeDeformer also creates a copy of the key on construction and puts it back on the mesh when destructed. This avoids us permanently modifying Blender data.
* I'm not too fond of clearing out the key every frame, but this works and I can't think of another alternative at the moment (something may be possible with some key juggling)
In addition the billboards can be scaled by the particle velocity with optional head and tail factors (similar to line drawing options). This allows for pseudo-motionblur effects.
The rna set function clamps to the property range however properties with range functions were ignored when set by python or the animation system.
Now call the range function for ints and floats when setting.