Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Bishop <nicholasbishop@gmail.com>2010-06-29 20:55:04 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2010-06-29 20:55:04 +0400
commita7fb2aba9df616e13eeff34a7701d6065b77ff6a (patch)
tree737deea78d802c529275c7f7840bcd537970f545
parent854da3194e6c7d32d2d50361c237f398af2844a5 (diff)
parent0795d1cccb1e0dcff59847523e6a57a299853bc8 (diff)
svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r29583:29790
-rw-r--r--CMakeLists.txt2
-rw-r--r--config/linux2-config.py2
-rw-r--r--config/linuxcross-config.py2
-rw-r--r--config/win32-vc-config.py2
-rw-r--r--config/win64-vc-config.py2
-rw-r--r--doc/blender.1330
-rw-r--r--doc/blender.1.py134
-rw-r--r--release/scripts/io/export_3ds.py1
-rw-r--r--release/scripts/io/import_scene_3ds.py2
-rw-r--r--release/scripts/ui/properties_data_curve.py25
-rw-r--r--release/scripts/ui/properties_object.py9
-rw-r--r--release/scripts/ui/properties_physics_cloth.py2
-rw-r--r--release/scripts/ui/properties_render.py8
-rw-r--r--release/scripts/ui/properties_scene.py2
-rw-r--r--release/scripts/ui/space_logic.py9
-rw-r--r--release/scripts/ui/space_sequencer.py9
-rw-r--r--release/scripts/ui/space_time.py23
-rw-r--r--release/scripts/ui/space_userpref.py549
-rw-r--r--release/scripts/ui/space_userpref_keymap.py12
-rw-r--r--release/scripts/ui/space_view3d.py76
-rw-r--r--release/scripts/ui/space_view3d_toolbar.py3
-rw-r--r--source/blender/blenkernel/BKE_displist.h3
-rw-r--r--source/blender/blenkernel/BKE_key.h3
-rw-r--r--source/blender/blenkernel/BKE_lattice.h2
-rw-r--r--source/blender/blenkernel/BKE_mball.h6
-rw-r--r--source/blender/blenkernel/BKE_paint.h4
-rw-r--r--source/blender/blenkernel/BKE_scene.h2
-rw-r--r--source/blender/blenkernel/BKE_sequencer.h14
-rw-r--r--source/blender/blenkernel/BKE_texture.h1
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf.c18
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf.h4
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c4
-rw-r--r--source/blender/blenkernel/intern/action.c2
-rw-r--r--source/blender/blenkernel/intern/cdderivedmesh.c18
-rw-r--r--source/blender/blenkernel/intern/depsgraph.c3
-rw-r--r--source/blender/blenkernel/intern/displist.c37
-rw-r--r--source/blender/blenkernel/intern/key.c200
-rw-r--r--source/blender/blenkernel/intern/lattice.c4
-rw-r--r--source/blender/blenkernel/intern/mball.c52
-rw-r--r--source/blender/blenkernel/intern/mesh.c6
-rw-r--r--source/blender/blenkernel/intern/multires.c9
-rw-r--r--source/blender/blenkernel/intern/node.c2
-rw-r--r--source/blender/blenkernel/intern/object.c39
-rw-r--r--source/blender/blenkernel/intern/packedFile.c2
-rw-r--r--source/blender/blenkernel/intern/particle_system.c2
-rw-r--r--source/blender/blenkernel/intern/scene.c39
-rw-r--r--source/blender/blenkernel/intern/seqeffects.c22
-rw-r--r--source/blender/blenkernel/intern/sequencer.c199
-rw-r--r--source/blender/blenkernel/intern/texture.c22
-rw-r--r--source/blender/blenlib/BLI_cpu.h30
-rw-r--r--source/blender/blenlib/BLI_linklist.h3
-rw-r--r--source/blender/blenlib/BLI_math_base.h3
-rw-r--r--source/blender/blenlib/BLI_math_inline.h3
-rw-r--r--source/blender/blenlib/BLI_math_matrix.h3
-rw-r--r--source/blender/blenlib/BLI_pbvh.h6
-rw-r--r--source/blender/blenlib/intern/BLI_bfile.c6
-rw-r--r--source/blender/blenlib/intern/BLI_linklist.c32
-rw-r--r--source/blender/blenlib/intern/cpu.c57
-rw-r--r--source/blender/blenlib/intern/math_matrix.c455
-rw-r--r--source/blender/blenlib/intern/noise.c11
-rw-r--r--source/blender/blenlib/intern/pbvh.c65
-rw-r--r--source/blender/blenlib/intern/threads.c28
-rw-r--r--source/blender/blenloader/intern/readfile.c18
-rw-r--r--source/blender/collada/DocumentImporter.cpp2
-rw-r--r--source/blender/editors/animation/anim_ops.c1
-rw-r--r--source/blender/editors/armature/CMakeLists.txt1
-rw-r--r--source/blender/editors/armature/Makefile1
-rw-r--r--source/blender/editors/armature/SConscript1
-rw-r--r--source/blender/editors/armature/meshlaplacian.c191
-rw-r--r--source/blender/editors/curve/curve_intern.h3
-rw-r--r--source/blender/editors/curve/curve_ops.c3
-rw-r--r--source/blender/editors/curve/editcurve.c74
-rw-r--r--source/blender/editors/curve/editfont.c93
-rw-r--r--source/blender/editors/gpencil/gpencil_paint.c1
-rw-r--r--source/blender/editors/include/ED_keyframing.h2
-rw-r--r--source/blender/editors/include/ED_screen.h5
-rw-r--r--source/blender/editors/include/ED_screen_types.h1
-rw-r--r--source/blender/editors/interface/interface_handlers.c18
-rw-r--r--source/blender/editors/interface/interface_layout.c31
-rw-r--r--source/blender/editors/interface/interface_regions.c14
-rw-r--r--source/blender/editors/interface/interface_templates.c46
-rw-r--r--source/blender/editors/interface/interface_widgets.c77
-rw-r--r--source/blender/editors/mesh/editmesh_add.c20
-rw-r--r--source/blender/editors/mesh/editmesh_mods.c2
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c2
-rw-r--r--source/blender/editors/metaball/mball_edit.c16
-rw-r--r--source/blender/editors/object/object_add.c84
-rw-r--r--source/blender/editors/object/object_edit.c9
-rw-r--r--source/blender/editors/object/object_relations.c35
-rw-r--r--source/blender/editors/physics/particle_object.c29
-rw-r--r--source/blender/editors/physics/physics_pointcache.c13
-rw-r--r--source/blender/editors/render/render_internal.c2
-rw-r--r--source/blender/editors/render/render_opengl.c5
-rw-r--r--source/blender/editors/screen/area.c6
-rw-r--r--source/blender/editors/screen/screen_edit.c13
-rw-r--r--source/blender/editors/screen/screen_ops.c25
-rw-r--r--source/blender/editors/sculpt_paint/paint_image.c8
-rw-r--r--source/blender/editors/sculpt_paint/paint_stroke.c2
-rw-r--r--source/blender/editors/sculpt_paint/sculpt.c199
-rw-r--r--source/blender/editors/sculpt_paint/sculpt_intern.h2
-rw-r--r--source/blender/editors/space_action/action_edit.c1
-rw-r--r--source/blender/editors/space_buttons/buttons_ops.c7
-rw-r--r--source/blender/editors/space_file/file_ops.c29
-rw-r--r--source/blender/editors/space_graph/graph_edit.c1
-rw-r--r--source/blender/editors/space_graph/graph_ops.c1
-rw-r--r--source/blender/editors/space_image/image_ops.c8
-rw-r--r--source/blender/editors/space_logic/logic_window.c88
-rw-r--r--source/blender/editors/space_outliner/outliner.c3
-rw-r--r--source/blender/editors/space_sequencer/sequencer_add.c26
-rw-r--r--source/blender/editors/space_sequencer/sequencer_draw.c2
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c242
-rw-r--r--source/blender/editors/space_sequencer/sequencer_intern.h3
-rw-r--r--source/blender/editors/space_sequencer/sequencer_ops.c1
-rw-r--r--source/blender/editors/space_sequencer/sequencer_select.c16
-rw-r--r--source/blender/editors/space_sequencer/space_sequencer.c1
-rw-r--r--source/blender/editors/space_time/space_time.c250
-rw-r--r--source/blender/editors/space_view3d/drawmesh.c16
-rw-r--r--source/blender/editors/space_view3d/drawobject.c14
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c2
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c2
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c12
-rw-r--r--source/blender/editors/transform/transform.c31
-rw-r--r--source/blender/imbuf/intern/anim.c4
-rw-r--r--source/blender/imbuf/intern/targa.c6
-rw-r--r--source/blender/makesdna/DNA_scene_types.h3
-rw-r--r--source/blender/makesdna/DNA_screen_types.h2
-rw-r--r--source/blender/makesdna/DNA_sequence_types.h3
-rw-r--r--source/blender/makesdna/DNA_space_types.h21
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h2
-rw-r--r--source/blender/makesrna/intern/makesrna.c2
-rw-r--r--source/blender/makesrna/intern/rna_actuator.c6
-rw-r--r--source/blender/makesrna/intern/rna_controller.c2
-rw-r--r--source/blender/makesrna/intern/rna_internal.h3
-rw-r--r--source/blender/makesrna/intern/rna_scene.c16
-rw-r--r--source/blender/makesrna/intern/rna_sensor.c6
-rw-r--r--source/blender/makesrna/intern/rna_sequencer.c28
-rw-r--r--source/blender/makesrna/intern/rna_sequencer_api.c72
-rw-r--r--source/blender/makesrna/intern/rna_space.c32
-rw-r--r--source/blender/makesrna/intern/rna_texture.c18
-rw-r--r--source/blender/makesrna/intern/rna_ui_api.c15
-rw-r--r--source/blender/makesrna/intern/rna_wm.c1
-rw-r--r--source/blender/makesrna/rna_cleanup/rna_api_cleanup.txt1704
-rw-r--r--source/blender/makesrna/rna_cleanup/rna_booleans.txt1387
-rwxr-xr-xsource/blender/makesrna/rna_cleanup/rna_cleaner.py269
-rw-r--r--source/blender/modifiers/intern/MOD_build.c3
-rw-r--r--source/blender/modifiers/intern/MOD_collision.c3
-rw-r--r--source/blender/modifiers/intern/MOD_displace.c2
-rw-r--r--source/blender/modifiers/intern/MOD_explode.c5
-rw-r--r--source/blender/modifiers/intern/MOD_wave.c3
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c7
-rw-r--r--source/blender/python/doc/examples/bpy.data.py28
-rw-r--r--source/blender/python/doc/examples/mathutils.py3
-rw-r--r--source/blender/python/doc/sphinx_doc_gen.py61
-rwxr-xr-xsource/blender/python/doc/sphinx_doc_gen.sh2
-rw-r--r--source/blender/python/generic/geometry.c2
-rw-r--r--source/blender/python/generic/mathutils.c2
-rw-r--r--source/blender/python/intern/bpy_driver.c4
-rw-r--r--source/blender/python/intern/bpy_props.c2
-rw-r--r--source/blender/render/intern/include/render_types.h3
-rw-r--r--source/blender/render/intern/source/convertblender.c54
-rw-r--r--source/blender/render/intern/source/pipeline.c23
-rw-r--r--source/blender/render/intern/source/pointdensity.c3
-rw-r--r--source/blender/render/intern/source/rayshade.c9
-rw-r--r--source/blender/render/intern/source/texture.c2
-rw-r--r--source/blender/windowmanager/WM_types.h2
-rw-r--r--source/blender/windowmanager/intern/wm_draw.c14
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c9
-rw-r--r--source/blender/windowmanager/intern/wm_files.c20
-rw-r--r--source/blender/windowmanager/intern/wm_keymap.c7
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c5
-rw-r--r--source/blender/windowmanager/wm_event_types.h1
-rw-r--r--source/creator/creator.c50
172 files changed, 6865 insertions, 1502 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 60543e1939a..b4272d5f118 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -110,7 +110,7 @@ OPTION(WITH_LZO "Enable fast LZO compression (used for pointcache)" ON
OPTION(WITH_LZMA "Enable best LZMA compression, (used for pointcache)" ON)
# Misc
-OPTION(WITH_RAYOPTIMIZATION "Enable use of SIMD (SSE) optimizations for the raytracer" OFF)
+OPTION(WITH_RAYOPTIMIZATION "Enable use of SIMD (SSE) optimizations for the raytracer" ON)
OPTION(WITH_CXX_GUARDEDALLOC "Enable GuardedAlloc for C++ memory allocation tracking" OFF)
OPTION(WITH_INSTALL "Install accompanying scripts and language files needed to run blender" ON)
diff --git a/config/linux2-config.py b/config/linux2-config.py
index 199ea391d4e..213c20bd7d0 100644
--- a/config/linux2-config.py
+++ b/config/linux2-config.py
@@ -168,7 +168,7 @@ BF_EXPAT_LIBPATH = '/usr/lib'
WITH_BF_OPENMP = True
#Ray trace optimization
-WITH_BF_RAYOPTIMIZATION = False
+WITH_BF_RAYOPTIMIZATION = True
BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse','-pthread']
##
diff --git a/config/linuxcross-config.py b/config/linuxcross-config.py
index 8533c8ac9c7..1650201f8c6 100644
--- a/config/linuxcross-config.py
+++ b/config/linuxcross-config.py
@@ -169,7 +169,7 @@ BF_OPENCOLLADA_LIB = 'OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader Open
BF_OPENCOLLADA_LIBPATH = '${BF_OPENCOLLADA}/lib ${BF_ICONV_LIBPATH}'
#Ray trace optimization
-WITH_BF_RAYOPTIMIZATION = False
+WITH_BF_RAYOPTIMIZATION = True
BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse']
CCFLAGS = [ '-pipe', '-funsigned-char', '-fno-strict-aliasing' ]
diff --git a/config/win32-vc-config.py b/config/win32-vc-config.py
index 02bce0cc7f3..ce34737fd49 100644
--- a/config/win32-vc-config.py
+++ b/config/win32-vc-config.py
@@ -150,7 +150,7 @@ BF_OPENCOLLADA_LIB = 'OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader Open
BF_OPENCOLLADA_LIBPATH = '${BF_OPENCOLLADA}/lib'
#Ray trace optimization
-WITH_BF_RAYOPTIMIZATION = False
+WITH_BF_RAYOPTIMIZATION = True
BF_RAYOPTIMIZATION_SSE_FLAGS = ['/arch:SSE']
WITH_BF_STATICOPENGL = False
diff --git a/config/win64-vc-config.py b/config/win64-vc-config.py
index de1daa16e0b..46b9034823c 100644
--- a/config/win64-vc-config.py
+++ b/config/win64-vc-config.py
@@ -163,7 +163,7 @@ BF_OPENCOLLADA_LIB = 'OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader Open
BF_OPENCOLLADA_LIBPATH = '${BF_OPENCOLLADA}/lib'
#Ray trace optimization
-WITH_BF_RAYOPTIMIZATION = False
+WITH_BF_RAYOPTIMIZATION = True
BF_RAYOPTIMIZATION_SSE_FLAGS = ['/arch:SSE','/arch:SSE2']
WITH_BF_STATICOPENGL = False
diff --git a/doc/blender.1 b/doc/blender.1
index 68f00d8eb9b..43ac5638765 100644
--- a/doc/blender.1
+++ b/doc/blender.1
@@ -1,10 +1,9 @@
-.TH "BLENDER" "1" "June 06, 2010" "Blender 2\&.5\&.2"
+.TH "BLENDER" "1" "June 27, 2010" "Blender Blender 2\&.52 (sub 5) "
+
.SH NAME
blender \- a 3D modelling and rendering package
.SH SYNOPSIS
.B blender [args ...] [file] [args ...]
-
-
.br
.SH DESCRIPTION
.PP
@@ -15,209 +14,318 @@ Use Blender to create TV commercials, to make technical visualizations, business
http://www.blender.org
.SH OPTIONS
-.SS "Render options:"
+
+Blender 2.52 (sub 5) Build
+Usage: blender [args ...] [file] [args ...]
+.br
+.SS "Render Options:"
.TP
-.B \-b, \-\-background <file>
-Load <file> in background (often used for UI-less rendering)
+.B \-b or \-\-background <file>
+.br
+Load <file> in background (often used for UI\-less rendering)
+.br
.TP
-.B \-a, \-\-render-anim
+.B \-a or \-\-render\-anim
+.br
Render frames from start to end (inclusive)
+.br
.TP
-.B \-S, \-\-scene <name>
+.B \-S or \-\-scene <name>
+.br
Set the active scene <name> for rendering
+.br
.TP
-.B \-f, \-\-render-frame <frame>
-Render frame <frame> and save it
+.B \-f or \-\-render\-frame <frame>
+.br
+Render frame <frame> and save it.
+.br
++<frame> start frame relative, \-<frame> end frame relative.
+.br
.TP
-.B \-s, \-\-frame-start <frame>
+.B \-s or \-\-frame\-start <frame>
+.br
Set start to frame <frame> (use before the \-a argument)
+.br
.TP
-.B \-e, \-\-frame-end <frame>
+.B \-e or \-\-frame\-end <frame>
+.br
Set end to frame <frame> (use before the \-a argument)
+.br
.TP
-.B \-j, \-\-frame-jump <frames>
+.B \-j or \-\-frame\-jump <frames>
+.br
Set number of frames to step forward after each rendered frame
+.br
.TP
-.B \-o, --render-output <path>
+.B \-o or \-\-render\-output <path>
+.br
Set the render path and file name.
-.IP
-Use // at the start of the path to render relative to the blend file.
-.IP
+.br
+Use // at the start of the path to
+.br
+ render relative to the blend file.
+.br
The # characters are replaced by the frame number, and used to define zero padding.
-.IP
+.br
ani_##_test.png becomes ani_01_test.png
- test-######.png becomes test-000001.png
+.br
+ test\-######.png becomes test\-000001.png
+.br
When the filename does not contain #, The suffix #### is added to the filename
-.IP
+.br
The frame number will be added at the end of the filename.
- eg: blender -b foobar.blend -o //render_ -F PNG -x 1 -a
+.br
+ eg: blender \-b foobar.blend \-o //render_ \-F PNG \-x 1 \-a
+.br
//render_ becomes //render_####, writing frames as //render_0001.png//
+.br
-.HP
-.B \-E, \-\-engine <engine>
+.TP
+.B \-E or \-\-engine <engine>
+.br
Specify the render engine
-use \fI\-E help\fR to list available engines
+.br
+use \-E help to list available engines
+.br
+
+.IP
-.SS "Format options:"
+.SS "Format Options:"
.TP
-.B \-F, \-\-render-format <format>
-Set the render format, valid options are...
-.IP
-TGA IRIS JPEG MOVIE IRIZ RAWTGA
-AVIRAW AVIJPEG PNG BMP FRAMESERVER
-.IP
+.B \-F or \-\-render\-format <format>
+.br
+Set the render format, Valid options are...
+.br
+ TGA IRIS JPEG MOVIE IRIZ RAWTGA
+.br
+ AVIRAW AVIJPEG PNG BMP FRAMESERVER
+.br
(formats that can be compiled into blender, not available on all systems)
-.IP
-HDR TIFF EXR MULTILAYER MPEG AVICODEC QUICKTIME CINEON DPX DDS
+.br
+ HDR TIFF EXR MULTILAYER MPEG AVICODEC QUICKTIME CINEON DPX DDS
+.br
.TP
-.B \-x, \-\-use-extension <bool>
+.B \-x or \-\-use\-extension <bool>
+.br
Set option to add the file extension to the end of the file
+.br
.TP
-.B \-t, \-\-threads <threads>
+.B \-t or \-\-threads <threads>
+.br
Use amount of <threads> for rendering in background
-[1-BLENDER_MAX_THREADS], 0 for systems processor count.
+.br
+[1\-BLENDER_MAX_THREADS], 0 for systems processor count.
+.br
+
+.IP
-.SS "Animation options:"
+.SS "Animation Playback Options:"
.TP
.B \-a <options> <file(s)>
+.br
Playback <file(s)>, only operates this way when not running in background.
-.IP
-\-p <sx> <sy> \-\- Open with lower left corner at <sx>, <sy>
.br
-\-m \-\- Read from disk (Don't buffer)
+ \-p <sx> <sy> Open with lower left corner at <sx>, <sy>
+.br
+ \-m Read from disk (Don't buffer)
.br
-\-f <fps> <fps-base> \-\- Specify FPS to start with
+ \-f <fps> <fps\-base> Specify FPS to start with
.br
-\-j <frame> \-\- Set frame step to <frame>
+ \-j <frame> Set frame step to <frame>
+.br
+
+.IP
-.SS "Window options:"
+.SS "Window Options:"
.TP
-.B \-w, \-\-window-border
+.B \-w or \-\-window\-border
+.br
Force opening with borders (default)
+.br
.TP
-.B \-W, \-\-window-borderless
+.B \-W or \-\-window\-borderless
+.br
Force opening with without borders
+.br
.TP
-.B \-p, --window-geometry <sx> <sy> <w> <h>
-Open with lower left corner at <sx>, <sy> and width and height <w>, <h>
+.B \-p or \-\-window\-geometry <sx> <sy> <w> <h>
+.br
+Open with lower left corner at <sx>, <sy> and width and height as <w>, <h>
+.br
+
+.IP
+
+.SS "Game Engine Specific Options:"
-.SS "Game Engine specific options:"
-.TP
-.B \-g fixedtime
-Run on 50 hertz without dropping frames
-.TP
-.B \-g vertexarrays
-Use Vertex Arrays for rendering (usually faster)
-.TP
-.B \-g nomipmap
-No Texture Mipmapping
.TP
-.B \-g linearmipmap
-Linear Texture Mipmapping instead of Nearest (default)
-.SS "Misc options:"
+.B \-g Game Engine specific options
+.br
+\-g fixedtime Run on 50 hertz without dropping frames
+.br
+\-g vertexarrays Use Vertex Arrays for rendering (usually faster)
+.br
+\-g nomipmap No Texture Mipmapping
+.br
+\-g linearmipmap Linear Texture Mipmapping instead of Nearest (default)
+.br
+
+.IP
+
+.SS "Misc Options:"
+
.TP
-.B \-d, \-\-debug
+.B \-d or \-\-debug
+.br
Turn debugging on
+.br
+
.IP
-Prints every operator call and their arguments
+* Prints every operator call and their arguments
+.br
+* Disables mouse grab (to interact with a debugger in some cases)
.br
-Disables mouse grab (to interact with a debugger in some cases)
+* Keeps python sys.stdin rather then setting it to None
.br
-Keeps python sys.stdin rather then setting it to None
.TP
-.B \--debug-fpe
+.B \-\-debug\-fpe
+.br
Enable floating point exceptions
+.br
-.TP
-.B \-noaudio
-Disable audio on systems that support audio
+.IP
.TP
-.B \-nojoystick
+.B \-nojoystick
+.br
Disable joystick support
+.br
.TP
-.B \-noglsl
+.B \-noglsl
+.br
Disable GLSL shading
+.br
+
+.TP
+.B \-noaudio
+.br
+Force sound system to None
+.br
+
+.TP
+.B \-setaudio
+.br
+Force sound system to a specific device
+.br
+NULL SDL OPENAL JACK
+.br
+
+.IP
+
+.TP
+.B \-h or \-\-help
+.br
+Print this help text and exit
+.br
+
+.IP
.TP
-.B \-y, \-\-enable-autoexec
+.B \-y or \-\-enable\-autoexec
+.br
Enable automatic python script execution (default)
+.br
.TP
-.B \-Y, \-\-disable-autoexec
+.B \-Y or \-\-disable\-autoexec
+.br
Disable automatic python script execution (pydrivers, pyconstraints, pynodes)
+.br
+
+.IP
.TP
-.B \-P <filename>
+.B \-P or \-\-python <filename>
+.br
Run the given Python script (filename or Blender Text)
+.br
.TP
-.B \-\-python-console
+.B \-\-python\-console
+.br
Run blender with an interactive console
+.br
.TP
-.B \-v, \-\-version
+.B \-v or \-\-version
+.br
Print Blender version and exit
+.br
.TP
-.B \-\-
+.B \-\-
+.br
Ends option processing, following arguments passed unchanged. Access via python's sys.argv
+.br
-.TP
-.B \-h, \-\-help
-Show a summary of options.
-
-.SH "ENVIRONMENT VARIABLES"
-
-.PP
-\fIHOME\fR
-.RS 4
-Store files such as .blender/ .B.blend .Bfs .Blog here.
-.RE
+.SS "Other Options:"
-.PP
-\fIBLENDERPATH\fR
-.RS 4
-System directory to use for data files and scripts.
-For this build of blender the default BLENDERPATH is...
-"/usr/share/blender"
-setting the $BLENDERPATH will override this
-.RE
+.TP
+.B /?
+.br
+Print this help text and exit (windows only)
+.br
-.PP
-\fITMP\fR or \fITMPDIR\fR
-.RS 4
-Store temporary files here.
-.RE
+.TP
+.B \-R
+.br
+Register .blend extension (windows only)
+.br
-.PP
-\fISDL_AUDIODRIVER\fR
-.RS 4
-LibSDL audio driver - alsa, esd, alsa, dma.
-.RE
+.SS "Argument Parsing:"
-.PP
-\fIPYTHONHOME\fR
-.RS 4
-Path to the python directory, eg. /usr/lib/python.
-.RE
+ arguments must be separated by white space. eg
+ "blender \-ba test.blend"
+ ...will ignore the 'a'
+ "blender \-b test.blend \-f8"
+ ...will ignore 8 because there is no space between the \-f and the frame value
+.br
+.SS "Argument Order:"
+
+Arguments are executed in the order they are given. eg
+ "blender \-\-background test.blend \-\-render\-frame 1 \-\-render\-output /tmp"
+ ...will not render to /tmp because '\-\-render\-frame 1' renders before the output path is set
+ "blender \-\-background \-\-render\-output /tmp test.blend \-\-render\-frame 1"
+ ...will not render to /tmp because loading the blend file overwrites the render output that was set
+ "blender \-\-background test.blend \-\-render\-output /tmp \-\-render\-frame 1" works as expected.
+.br
+.br
+.SH "ENVIRONMENT VARIABLES"
+ \fIHOME\fR Store files such as .blender/ .B.blend .Bfs .Blog here.
+ \fIBLENDERPATH\fR System directory to use for data files and scripts.
+ For this build of blender the default \fIBLENDERPATH\fR is...
+ "/usr/local/share/blender/2.5"
+ setting the \fIBLENDERPATH\fR will override this
+ \fITMP\fR or \fITMPDIR\fR Store temporary files here.
+ \fIPYTHONHOME\fR Path to the python directory, eg. /usr/lib/python.
+.br
+.br
.br
.SH SEE ALSO
@@ -228,5 +336,3 @@ Path to the python directory, eg. /usr/lib/python.
This manpage was written for a Debian GNU/Linux system by Daniel Mester
<mester@uni-bremen.de> and updated by Cyril Brulebois
<cyril.brulebois@enst-bretagne.fr> and Dan Eicher <dan@trollwerks.org>.
-
-
diff --git a/doc/blender.1.py b/doc/blender.1.py
new file mode 100644
index 00000000000..c77e5ccbc3d
--- /dev/null
+++ b/doc/blender.1.py
@@ -0,0 +1,134 @@
+#!/usr/bin/python
+
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+import subprocess
+import os
+
+import time
+import datetime
+
+
+def man_format(data):
+ data = data.replace("-", "\\-")
+ data = data.replace("\t", " ")
+ # data = data.replace("$", "\\fI")
+
+ data_ls = []
+ for w in data.split():
+ if w.startswith("$"):
+ w = "\\fI" + w[1:] + "\\fR"
+
+ data_ls.append(w)
+
+ data = data[:len(data) - len(data.lstrip())] + " ".join(data_ls)
+
+ return data
+
+
+blender_bin = os.path.join(os.path.dirname(__file__), "../blender")
+
+blender_help = subprocess.Popen([blender_bin, "--help"], stdout=subprocess.PIPE).communicate()[0].decode()
+
+blender_version = subprocess.Popen([blender_bin, "--version"], stdout=subprocess.PIPE).communicate()[0].decode().strip()
+blender_version = blender_version.split("Build")[0]
+
+date_string = datetime.date.fromtimestamp(time.time()).strftime("%B %d, %Y")
+
+filepath = __file__.replace(".py", "")
+
+file = open(filepath, "w")
+
+fw = file.write
+
+fw('.TH "BLENDER" "1" "%s" "Blender %s"\n' % (date_string, blender_version.replace(".", "\\&.")))
+
+fw('''
+.SH NAME
+blender \- a 3D modelling and rendering package''')
+
+fw('''
+.SH SYNOPSIS
+.B blender [args ...] [file] [args ...]''')
+
+fw('''
+.br
+.SH DESCRIPTION
+.PP
+.B blender
+is a 3D modelling and rendering package. It is the in-house software of a high quality animation studio, Blender has proven to be an extremely fast and versatile design instrument. The software has a personal touch, offering a unique approach to the world of Three Dimensions.
+
+Use Blender to create TV commercials, to make technical visualizations, business graphics, to do some morphing, or design user interfaces. You can easy build and manage complex environments. The renderer is versatile and extremely fast. All basic animation principles (curves & keys) are well implemented.
+
+http://www.blender.org''')
+
+fw('''
+.SH OPTIONS''')
+
+fw("\n\n")
+
+lines = [line.rstrip() for line in blender_help.split("\n")]
+
+while lines:
+ l = lines.pop(0)
+ if l.startswith("Environment Variables:"):
+ fw('.SH "ENVIRONMENT VARIABLES"\n')
+ elif l.endswith(":"): # one line
+ fw('.SS "%s"\n\n' % l)
+ elif l.startswith("-") or l.startswith("/"): # can be multi line
+
+ fw('.TP\n')
+ fw('.B %s\n' % man_format(l))
+
+ while lines:
+ # line with no
+ if lines[0].strip() and len(lines[0].lstrip()) == len(lines[0]): # no white space
+ break
+
+ if not l: # second blank line
+ fw('.IP\n')
+ else:
+ fw('.br\n')
+
+ l = lines.pop(0)
+ l = l[1:] # remove first whitespace (tab)
+
+ fw('%s\n' % man_format(l))
+
+ else:
+ if not l.strip():
+ fw('.br\n')
+ else:
+ fw('%s\n' % man_format(l))
+
+# footer
+
+fw('''
+.br
+.SH SEE ALSO
+.B yafaray(1)
+
+.br
+.SH AUTHORS
+This manpage was written for a Debian GNU/Linux system by Daniel Mester
+<mester@uni-bremen.de> and updated by Cyril Brulebois
+<cyril.brulebois@enst-bretagne.fr> and Dan Eicher <dan@trollwerks.org>.
+''')
diff --git a/release/scripts/io/export_3ds.py b/release/scripts/io/export_3ds.py
index e234ab8600c..341b974fe06 100644
--- a/release/scripts/io/export_3ds.py
+++ b/release/scripts/io/export_3ds.py
@@ -1122,7 +1122,6 @@ class Export3DS(bpy.types.Operator):
# to the class instance from the operator settings before calling.
- # filename = StringProperty(name="File Name", description="File name used for exporting the 3DS file", maxlen= 1024, default= ""),
filepath = StringProperty(name="File Path", description="Filepath used for exporting the 3DS file", maxlen= 1024, default= "")
check_existing = BoolProperty(name="Check Existing", description="Check and warn on overwriting existing files", default=True, options={'HIDDEN'})
diff --git a/release/scripts/io/import_scene_3ds.py b/release/scripts/io/import_scene_3ds.py
index c579f876371..67d53044dcd 100644
--- a/release/scripts/io/import_scene_3ds.py
+++ b/release/scripts/io/import_scene_3ds.py
@@ -1013,8 +1013,6 @@ class IMPORT_OT_autodesk_3ds(bpy.types.Operator):
# to the class instance from the operator settings before calling.
filepath = StringProperty(name="File Path", description="Filepath used for importing the 3DS file", maxlen= 1024, default= "")
- filename = StringProperty(name="File Name", description="Name of the file.")
- directory = StringProperty(name="Directory", description="Directory of the file.")
# size_constraint = FloatProperty(name="Size Constraint", description="Scale the model by 10 until it reacehs the size constraint. Zero Disables.", min=0.0, max=1000.0, soft_min=0.0, soft_max=1000.0, default=10.0),
# search_images = BoolProperty(name="Image Search", description="Search subdirectories for any assosiated images (Warning, may be slow)", default=True),
diff --git a/release/scripts/ui/properties_data_curve.py b/release/scripts/ui/properties_data_curve.py
index c5bf4b8459b..21359e1dbe2 100644
--- a/release/scripts/ui/properties_data_curve.py
+++ b/release/scripts/ui/properties_data_curve.py
@@ -367,21 +367,36 @@ class DATA_PT_textboxes(DataButtonsPanel):
text = context.curve
wide_ui = context.region.width > narrowui
-
- for box in text.textboxes:
- split = layout.box().split()
-
+
+ split = layout.split()
+ col = split.column()
+ col.operator("font.textbox_add", icon='ZOOMIN')
+ if wide_ui:
+ col = split.column()
+
+ for i, box in enumerate(text.textboxes):
+
+ boxy = layout.box()
+
+ row = boxy.row()
+
+ split = row.split()
+
col = split.column(align=True)
+
col.label(text="Dimensions:")
col.prop(box, "width", text="Width")
col.prop(box, "height", text="Height")
if wide_ui:
col = split.column(align=True)
+
col.label(text="Offset:")
col.prop(box, "x", text="X")
col.prop(box, "y", text="Y")
-
+
+ row.operator("font.textbox_remove", text='', icon='X', emboss=False).index = i
+
classes = [
DATA_PT_context_curve,
diff --git a/release/scripts/ui/properties_object.py b/release/scripts/ui/properties_object.py
index a2637f7924b..4e60879d665 100644
--- a/release/scripts/ui/properties_object.py
+++ b/release/scripts/ui/properties_object.py
@@ -155,9 +155,9 @@ class OBJECT_PT_groups(ObjectButtonsPanel):
ob = context.object
wide_ui = context.region.width > narrowui
- split = layout.split(percentage=0.8, align=True)
- split.operator("object.group_link", text="Add to Group")
- split.operator("object.group_add", text="", icon='ZOOMIN')
+ row = layout.row(align=True)
+ row.operator("object.group_link", text="Add to Group")
+ row.operator("object.group_add", text="", icon='ZOOMIN')
# XXX, this is bad practice, yes, I wrote it :( - campbell
index = 0
@@ -170,7 +170,7 @@ class OBJECT_PT_groups(ObjectButtonsPanel):
row = col.box().row()
row.prop(group, "name", text="")
- row.operator("object.group_remove", text="", icon='X')
+ row.operator("object.group_remove", text="", icon='X', emboss=False)
split = col.box().split()
@@ -214,6 +214,7 @@ class OBJECT_PT_display(ObjectButtonsPanel):
col.prop(ob, "draw_name", text="Name")
col.prop(ob, "draw_axis", text="Axis")
col.prop(ob, "draw_wire", text="Wire")
+ col.prop(ob, "color", text="Object Color")
if wide_ui:
col = split.column()
diff --git a/release/scripts/ui/properties_physics_cloth.py b/release/scripts/ui/properties_physics_cloth.py
index 834e3cf2450..61e1fe81812 100644
--- a/release/scripts/ui/properties_physics_cloth.py
+++ b/release/scripts/ui/properties_physics_cloth.py
@@ -87,7 +87,7 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel):
col = split.column()
col.label(text="Presets:")
- sub = col.row(align=True).split(percentage=0.75)
+ sub = col.row(align=True)
sub.menu("CLOTH_MT_presets", text=bpy.types.CLOTH_MT_presets.bl_label)
sub.operator("cloth.preset_add", text="", icon="ZOOMIN")
diff --git a/release/scripts/ui/properties_render.py b/release/scripts/ui/properties_render.py
index 8bbe11a5f90..829416b86d3 100644
--- a/release/scripts/ui/properties_render.py
+++ b/release/scripts/ui/properties_render.py
@@ -522,6 +522,7 @@ class RENDER_PT_motion_blur(RenderButtonsPanel):
row = layout.row()
row.prop(rd, "motion_blur_samples")
+ row.prop(rd, "motion_blur_shutter")
class RENDER_PT_dimensions(RenderButtonsPanel):
@@ -535,10 +536,9 @@ class RENDER_PT_dimensions(RenderButtonsPanel):
rd = scene.render
wide_ui = context.region.width > narrowui
- row = layout.row().split()
- sub = row.row(align=True).split(percentage=0.75)
- sub.menu("RENDER_MT_presets", text=bpy.types.RENDER_MT_presets.bl_label)
- sub.operator("render.preset_add", text="", icon="ZOOMIN")
+ row = layout.row(align=True)
+ row.menu("RENDER_MT_presets", text=bpy.types.RENDER_MT_presets.bl_label)
+ row.operator("render.preset_add", text="", icon="ZOOMIN")
split = layout.split()
diff --git a/release/scripts/ui/properties_scene.py b/release/scripts/ui/properties_scene.py
index 4319711d05e..06ad1eda835 100644
--- a/release/scripts/ui/properties_scene.py
+++ b/release/scripts/ui/properties_scene.py
@@ -230,8 +230,6 @@ class ANIM_OT_keying_set_export(bpy.types.Operator):
bl_label = "Export Keying Set..."
filepath = bpy.props.StringProperty(name="File Path", description="Filepath to write file to.")
- filename = bpy.props.StringProperty(name="File Name", description="Name of the file.")
- directory = bpy.props.StringProperty(name="Directory", description="Directory of the file.")
filter_folder = bpy.props.BoolProperty(name="Filter folders", description="", default=True, options={'HIDDEN'})
filter_text = bpy.props.BoolProperty(name="Filter text", description="", default=True, options={'HIDDEN'})
filter_python = bpy.props.BoolProperty(name="Filter python", description="", default=True, options={'HIDDEN'})
diff --git a/release/scripts/ui/space_logic.py b/release/scripts/ui/space_logic.py
index c6b5092b636..ab602da12b6 100644
--- a/release/scripts/ui/space_logic.py
+++ b/release/scripts/ui/space_logic.py
@@ -35,16 +35,17 @@ class LOGIC_PT_properties(bpy.types.Panel):
ob = context.active_object
game = ob.game
- layout.operator("object.game_property_new", text="Add Game Property")
+ layout.operator("object.game_property_new", text="Add Game Property", icon='ZOOMIN')
for i, prop in enumerate(game.properties):
-
- row = layout.row(align=True)
+
+ box = layout.box()
+ row = box.row()
row.prop(prop, "name", text="")
row.prop(prop, "type", text="")
row.prop(prop, "value", text="", toggle=True) # we dont care about the type. rna will display correctly
row.prop(prop, "debug", text="", toggle=True, icon='INFO')
- row.operator("object.game_property_remove", text="", icon='X').index = i
+ row.operator("object.game_property_remove", text="", icon='X', emboss=False).index = i
class LOGIC_MT_logicbricks_add(bpy.types.Menu):
diff --git a/release/scripts/ui/space_sequencer.py b/release/scripts/ui/space_sequencer.py
index befb05cff44..cf88397ced4 100644
--- a/release/scripts/ui/space_sequencer.py
+++ b/release/scripts/ui/space_sequencer.py
@@ -291,6 +291,10 @@ class SEQUENCER_MT_strip(bpy.types.Menu):
layout.operator_menu_enum("sequencer.swap", "side")
+ layout.separator()
+
+ layout.operator("sequencer.swap_data")
+
class SequencerButtonsPanel(bpy.types.Panel):
bl_space_type = 'SEQUENCE_EDITOR'
@@ -347,15 +351,14 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel):
row = layout.row()
row.prop(strip, "lock")
- row.prop(strip, "frame_locked", text="Frame Lock")
col = layout.column()
col.enabled = not strip.lock
col.prop(strip, "channel")
col.prop(strip, "frame_start")
subrow = col.split(percentage=0.66)
- subrow.prop(strip, "length")
- subrow.label(text="%.2f sec" % (strip.length / (render.fps / render.fps_base)))
+ subrow.prop(strip, "frame_final_length")
+ subrow.label(text="%.2f sec" % (strip.frame_final_length / (render.fps / render.fps_base)))
col = layout.column(align=True)
col.label(text="Offset:")
diff --git a/release/scripts/ui/space_time.py b/release/scripts/ui/space_time.py
index 00bdcf785fa..9469a722c0f 100644
--- a/release/scripts/ui/space_time.py
+++ b/release/scripts/ui/space_time.py
@@ -99,9 +99,31 @@ class TIME_MT_view(bpy.types.Menu):
layout.prop(st, "only_selected")
layout.separator()
+
+ layout.menu("TIME_MT_cache")
+
+ layout.separator()
layout.operator("marker.camera_bind")
+
+class TIME_MT_cache(bpy.types.Menu):
+ bl_label = "Cache"
+
+ def draw(self, context):
+ layout = self.layout
+
+ st = context.space_data
+
+ layout.prop(st, "show_cache")
+
+ layout.separator()
+ col = layout.column()
+ col.enabled = st.show_cache
+ col.prop(st, "cache_softbody")
+ col.prop(st, "cache_particles")
+ col.prop(st, "cache_cloth")
+ col.prop(st, "cache_smoke")
class TIME_MT_frame(bpy.types.Menu):
bl_label = "Frame"
@@ -171,6 +193,7 @@ class TIME_MT_autokey(bpy.types.Menu):
classes = [
TIME_HT_header,
TIME_MT_view,
+ TIME_MT_cache,
TIME_MT_frame,
TIME_MT_autokey,
TIME_MT_playback]
diff --git a/release/scripts/ui/space_userpref.py b/release/scripts/ui/space_userpref.py
index e3287b0a946..ef128fc4a24 100644
--- a/release/scripts/ui/space_userpref.py
+++ b/release/scripts/ui/space_userpref.py
@@ -25,26 +25,34 @@ import shutil
def ui_items_general(col, context):
""" General UI Theme Settings (User Interface)
"""
+
row = col.row()
- sub = row.column()
- sub.prop(context, "outline")
- sub.prop(context, "item", slider=True)
- sub = row.column()
- sub.prop(context, "inner", slider=True)
- sub.prop(context, "inner_sel", slider=True)
- sub = row.column()
- sub.prop(context, "text")
- sub.prop(context, "text_sel")
- sub = row.column()
- sub.prop(context, "shaded")
- subsub = sub.column(align=True)
+
+ subsplit = row.split(percentage=0.95)
+
+ padding = subsplit.split(percentage=0.15)
+ colsub = padding.column()
+ colsub = padding.column()
+ colsub.row().prop(context, "outline")
+ colsub.row().prop(context, "item", slider=True)
+ colsub.row().prop(context, "inner", slider=True)
+ colsub.row().prop(context, "inner_sel", slider=True)
+
+ subsplit = row.split(percentage=0.85)
+
+ padding = subsplit.split(percentage=0.15)
+ colsub = padding.column()
+ colsub = padding.column()
+ colsub.row().prop(context, "text")
+ colsub.row().prop(context, "text_sel")
+ colsub.prop(context, "shaded")
+ subsub = colsub.column(align=True)
subsub.active = context.shaded
subsub.prop(context, "shadetop")
subsub.prop(context, "shadedown")
col.separator()
-
def opengl_lamp_buttons(column, lamp):
split = column.split(percentage=0.1)
@@ -482,6 +490,36 @@ class USERPREF_PT_theme(bpy.types.Panel):
bl_region_type = 'WINDOW'
bl_show_header = False
+ @staticmethod
+ def _theme_generic(split, themedata):
+
+ row = split.row()
+
+ subsplit = row.split(percentage=0.95)
+
+ padding1 = subsplit.split(percentage=0.15)
+ padding1.column()
+
+ subsplit = row.split(percentage=0.85)
+
+ padding2 = subsplit.split(percentage=0.15)
+ padding2.column()
+
+ colsub_pair = padding1.column(), padding2.column()
+
+ props_type = {}
+
+ for i, prop in enumerate(themedata.rna_type.properties):
+ attr = prop.identifier
+ if attr == "rna_type":
+ continue
+
+ props_type.setdefault((prop.type, prop.subtype), []).append(prop.identifier)
+
+ for props_type, props_ls in sorted(props_type.items()):
+ for i, attr in enumerate(props_ls):
+ colsub_pair[i % 2].row().prop(themedata, attr)
+
def poll(self, context):
userpref = context.user_preferences
return (userpref.active_section == 'THEMES')
@@ -493,7 +531,13 @@ class USERPREF_PT_theme(bpy.types.Panel):
split_themes = layout.split(percentage=0.2)
split_themes.prop(theme, "theme_area", expand=True)
-
+
+ split = layout.split(percentage=0.4)
+
+
+ layout.separator()
+ layout.separator()
+
split = split_themes.split()
if theme.theme_area == 'USER_INTERFACE':
@@ -565,390 +609,41 @@ class USERPREF_PT_theme(bpy.types.Panel):
ui = theme.user_interface.wcol_state
col.label(text="State:")
-
+
row = col.row()
- sub = row.column()
- sub.prop(ui, "inner_anim")
- sub.prop(ui, "inner_anim_sel")
- sub = row.column()
- sub.prop(ui, "inner_driven")
- sub.prop(ui, "inner_driven_sel")
- sub = row.column()
- sub.prop(ui, "inner_key")
- sub.prop(ui, "inner_key_sel")
- sub = row.column()
- sub.prop(ui, "blend")
+
+ subsplit = row.split(percentage=0.95)
+
+ padding = subsplit.split(percentage=0.15)
+ colsub = padding.column()
+ colsub = padding.column()
+ colsub.row().prop(ui, "inner_anim")
+ colsub.row().prop(ui, "inner_anim_sel")
+ colsub.row().prop(ui, "inner_driven")
+ colsub.row().prop(ui, "inner_driven_sel")
+
+ subsplit = row.split(percentage=0.85)
+
+ padding = subsplit.split(percentage=0.15)
+ colsub = padding.column()
+ colsub = padding.column()
+ colsub.row().prop(ui, "inner_key")
+ colsub.row().prop(ui, "inner_key_sel")
+ colsub.row().prop(ui, "blend")
+
ui = theme.user_interface
col.separator()
col.separator()
- col.prop(ui, "icon_file")
+
+ split= col.split(percentage=0.93)
+ split.prop(ui, "icon_file")
layout.separator()
layout.separator()
-
- elif theme.theme_area == 'VIEW_3D':
- v3d = theme.view_3d
-
- col = split.column()
- col.prop(v3d, "back")
- col.prop(v3d, "button")
- col.prop(v3d, "button_title")
- col.prop(v3d, "button_text")
- col.prop(v3d, "header")
-
- col = split.column()
- col.prop(v3d, "grid")
- col.prop(v3d, "wire")
- col.prop(v3d, "lamp", slider=True)
- col.prop(v3d, "editmesh_active", slider=True)
-
- col = split.column()
- col.prop(v3d, "object_selected")
- col.prop(v3d, "object_active")
- col.prop(v3d, "object_grouped")
- col.prop(v3d, "object_grouped_active")
- col.prop(v3d, "transform")
- col.prop(v3d, "nurb_uline")
- col.prop(v3d, "nurb_vline")
- col.prop(v3d, "nurb_sel_uline")
- col.prop(v3d, "nurb_sel_vline")
- col.prop(v3d, "handle_free")
- col.prop(v3d, "handle_auto")
- col.prop(v3d, "handle_vect")
- col.prop(v3d, "handle_align")
- col.prop(v3d, "handle_sel_free")
- col.prop(v3d, "handle_sel_auto")
- col.prop(v3d, "handle_sel_vect")
- col.prop(v3d, "handle_sel_align")
- col.prop(v3d, "act_spline")
- col.prop(v3d, "lastsel_point")
-
- col = split.column()
- col.prop(v3d, "vertex")
- col.prop(v3d, "face", slider=True)
- col.prop(v3d, "normal")
- col.prop(v3d, "vertex_normal")
- col.prop(v3d, "bone_solid")
- col.prop(v3d, "bone_pose")
- col.prop(v3d, "edge_seam")
- col.prop(v3d, "edge_select")
- col.prop(v3d, "edge_facesel")
- col.prop(v3d, "edge_sharp")
- col.prop(v3d, "edge_crease")
-
- elif theme.theme_area == 'GRAPH_EDITOR':
- graph = theme.graph_editor
-
- col = split.column()
- col.prop(graph, "back")
- col.prop(graph, "button")
- col.prop(graph, "button_title")
- col.prop(graph, "button_text")
-
- col = split.column()
- col.prop(graph, "header")
- col.prop(graph, "grid")
- col.prop(graph, "list")
- col.prop(graph, "channel_group")
-
- col = split.column()
- col.prop(graph, "active_channels_group")
- col.prop(graph, "dopesheet_channel")
- col.prop(graph, "dopesheet_subchannel")
- col.prop(graph, "frame_current")
-
- col = split.column()
- col.prop(graph, "vertex")
- col.prop(graph, "handle_vertex")
- col.prop(graph, "handle_vertex_select")
- col.separator()
- col.prop(graph, "handle_vertex_size")
- col.separator()
- col.separator()
- col.prop(graph, "handle_free")
- col.prop(graph, "handle_auto")
- col.prop(graph, "handle_vect")
- col.prop(graph, "handle_align")
- col.prop(graph, "handle_sel_free")
- col.prop(graph, "handle_sel_auto")
- col.prop(graph, "handle_sel_vect")
- col.prop(graph, "handle_sel_align")
-
- elif theme.theme_area == 'FILE_BROWSER':
- file_browse = theme.file_browser
-
- col = split.column()
- col.prop(file_browse, "back")
- col.prop(file_browse, "text")
- col.prop(file_browse, "text_hi")
-
- col = split.column()
- col.prop(file_browse, "header")
- col.prop(file_browse, "list")
-
- col = split.column()
- col.prop(file_browse, "selected_file")
- col.prop(file_browse, "tiles")
-
- col = split.column()
- col.prop(file_browse, "active_file")
- col.prop(file_browse, "active_file_text")
-
- elif theme.theme_area == 'NLA_EDITOR':
- nla = theme.nla_editor
-
- col = split.column()
- col.prop(nla, "back")
- col.prop(nla, "button")
- col.prop(nla, "button_title")
-
- col = split.column()
- col.prop(nla, "button_text")
- col.prop(nla, "text")
- col.prop(nla, "header")
-
- col = split.column()
- col.prop(nla, "grid")
- col.prop(nla, "bars")
- col.prop(nla, "bars_selected")
-
- col = split.column()
- col.prop(nla, "strips")
- col.prop(nla, "strips_selected")
- col.prop(nla, "frame_current")
-
- elif theme.theme_area == 'DOPESHEET_EDITOR':
- dope = theme.dopesheet_editor
-
- col = split.column()
- col.prop(dope, "back")
- col.prop(dope, "list")
- col.prop(dope, "text")
- col.prop(dope, "header")
-
- col = split.column()
- col.prop(dope, "grid")
- col.prop(dope, "channels")
- col.prop(dope, "channels_selected")
- col.prop(dope, "channel_group")
-
- col = split.column()
- col.prop(dope, "active_channels_group")
- col.prop(dope, "long_key")
- col.prop(dope, "long_key_selected")
-
- col = split.column()
- col.prop(dope, "frame_current")
- col.prop(dope, "dopesheet_channel")
- col.prop(dope, "dopesheet_subchannel")
-
- elif theme.theme_area == 'IMAGE_EDITOR':
- image = theme.image_editor
-
- col = split.column()
- col.prop(image, "back")
- col.prop(image, "scope_back")
- col.prop(image, "button")
-
- col = split.column()
- col.prop(image, "button_title")
- col.prop(image, "button_text")
-
- col = split.column()
- col.prop(image, "header")
-
- col = split.column()
- col.prop(image, "editmesh_active", slider=True)
-
- elif theme.theme_area == 'SEQUENCE_EDITOR':
- seq = theme.sequence_editor
-
- col = split.column()
- col.prop(seq, "back")
- col.prop(seq, "button")
- col.prop(seq, "button_title")
- col.prop(seq, "button_text")
- col.prop(seq, "text")
-
- col = split.column()
- col.prop(seq, "header")
- col.prop(seq, "grid")
- col.prop(seq, "movie_strip")
- col.prop(seq, "image_strip")
- col.prop(seq, "scene_strip")
-
- col = split.column()
- col.prop(seq, "audio_strip")
- col.prop(seq, "effect_strip")
- col.prop(seq, "plugin_strip")
- col.prop(seq, "transition_strip")
-
- col = split.column()
- col.prop(seq, "meta_strip")
- col.prop(seq, "frame_current")
- col.prop(seq, "keyframe")
- col.prop(seq, "draw_action")
-
- elif theme.theme_area == 'PROPERTIES':
- prop = theme.properties
-
- col = split.column()
- col.prop(prop, "back")
-
- col = split.column()
- col.prop(prop, "title")
-
- col = split.column()
- col.prop(prop, "text")
-
- col = split.column()
- col.prop(prop, "header")
-
- elif theme.theme_area == 'TEXT_EDITOR':
- text = theme.text_editor
-
- col = split.column()
- col.prop(text, "back")
- col.prop(text, "button")
- col.prop(text, "button_title")
- col.prop(text, "button_text")
-
- col = split.column()
- col.prop(text, "text")
- col.prop(text, "text_hi")
- col.prop(text, "header")
- col.prop(text, "line_numbers_background")
-
- col = split.column()
- col.prop(text, "selected_text")
- col.prop(text, "cursor")
- col.prop(text, "syntax_builtin")
- col.prop(text, "syntax_special")
-
- col = split.column()
- col.prop(text, "syntax_comment")
- col.prop(text, "syntax_string")
- col.prop(text, "syntax_numbers")
-
- elif theme.theme_area == 'TIMELINE':
- time = theme.timeline
-
- col = split.column()
- col.prop(time, "back")
- col.prop(time, "text")
-
- col = split.column()
- col.prop(time, "header")
-
- col = split.column()
- col.prop(time, "grid")
-
- col = split.column()
- col.prop(time, "frame_current")
-
- elif theme.theme_area == 'NODE_EDITOR':
- node = theme.node_editor
-
- col = split.column()
- col.prop(node, "back")
- col.prop(node, "button")
- col.prop(node, "button_title")
- col.prop(node, "button_text")
-
- col = split.column()
- col.prop(node, "text")
- col.prop(node, "text_hi")
- col.prop(node, "header")
- col.prop(node, "wires")
-
- col = split.column()
- col.prop(node, "wire_select")
- col.prop(node, "selected_text")
- col.prop(node, "node_backdrop", slider=True)
- col.prop(node, "in_out_node")
-
- col = split.column()
- col.prop(node, "converter_node")
- col.prop(node, "operator_node")
- col.prop(node, "group_node")
-
- elif theme.theme_area == 'LOGIC_EDITOR':
- logic = theme.logic_editor
-
- col = split.column()
- col.prop(logic, "back")
- col.prop(logic, "button")
-
- col = split.column()
- col.prop(logic, "button_title")
- col.prop(logic, "button_text")
-
- col = split.column()
- col.prop(logic, "text")
- col.prop(logic, "header")
-
- col = split.column()
- col.prop(logic, "panel")
-
- elif theme.theme_area == 'OUTLINER':
- out = theme.outliner
-
- col = split.column()
- col.prop(out, "back")
-
- col = split.column()
- col.prop(out, "text")
-
- col = split.column()
- col.prop(out, "text_hi")
-
- col = split.column()
- col.prop(out, "header")
-
- elif theme.theme_area == 'INFO':
- info = theme.info
-
- col = split.column()
- col.prop(info, "back")
-
- col = split.column()
- col.prop(info, "header")
-
- col = split.column()
- col.prop(info, "header_text")
-
- col = split.column()
-
- elif theme.theme_area == 'USER_PREFERENCES':
- prefs = theme.user_preferences
-
- col = split.column()
- col.prop(prefs, "back")
-
- col = split.column()
- col.prop(prefs, "text")
-
- col = split.column()
- col.prop(prefs, "header")
-
- col = split.column()
- col.prop(prefs, "header_text")
-
- elif theme.theme_area == 'CONSOLE':
- console = theme.console
-
- col = split.column()
- col.prop(console, "back")
- col.prop(console, "header")
-
- col = split.column()
- col.prop(console, "line_output")
- col.prop(console, "line_input")
- col.prop(console, "line_info")
- col.prop(console, "line_error")
- col.prop(console, "cursor")
+ else:
+ self._theme_generic(split, getattr(theme, theme.theme_area.lower()))
class USERPREF_PT_file(bpy.types.Panel):
@@ -1041,7 +736,7 @@ class USERPREF_PT_input(InputKeyMapPanel):
sub.label(text="Presets:")
subrow = sub.row(align=True)
subrow.menu("USERPREF_MT_interaction_presets", text=bpy.types.USERPREF_MT_interaction_presets.bl_label)
- subrow.operator("wm.interaction_preset_add", text="", icon="ZOOMIN")
+ subrow.operator("wm.interaction_preset_add", text="", icon='ZOOMIN')
sub.separator()
sub.label(text="Mouse:")
@@ -1123,7 +818,8 @@ class USERPREF_PT_addons(bpy.types.Panel):
userpref = context.user_preferences
return (userpref.active_section == 'ADDONS')
- def _addon_list(self):
+ @staticmethod
+ def _addon_list():
import sys
modules = []
loaded_modules = set()
@@ -1148,17 +844,19 @@ class USERPREF_PT_addons(bpy.types.Panel):
cats = {info["category"] for mod, info in addons}
cats.discard("")
- cats = ['All', 'Disabled', 'Enabled'] + sorted(cats)
+ cats = ["All", "Enabled", "Disabled"] + sorted(cats)
bpy.types.Scene.EnumProperty(items=[(cat, cat, str(i)) for i, cat in enumerate(cats)],
name="Category", attr="addon_filter", description="Filter add-ons by category")
bpy.types.Scene.StringProperty(name="Search", attr="addon_search",
description="Search within the selected filter")
- row = layout.row()
- row.prop(context.scene, "addon_filter", text="Filter")
- row.prop(context.scene, "addon_search", text="Search", icon='VIEWZOOM')
- layout.separator()
+ split = layout.split(percentage=0.2)
+ col = split.column()
+ col.prop(context.scene, "addon_filter", text="Filter", expand=True)
+ col.prop(context.scene, "addon_search", text="", icon='VIEWZOOM')
+
+ col = split.column()
filter = context.scene.addon_filter
search = context.scene.addon_search.lower()
@@ -1183,56 +881,45 @@ class USERPREF_PT_addons(bpy.types.Panel):
continue
# Addon UI Code
- box = layout.column().box()
- column = box.column()
- row = column.row()
+ box = col.column().box()
+ colsub = box.column()
+ row = colsub.row()
- # Arrow #
- # If there are Infos or UI is expanded
- if info["expanded"]:
- row.operator("wm.addon_expand", icon="TRIA_DOWN").module = module_name
- elif info["author"] or info["version"] or info["wiki_url"] or info["location"]:
- row.operator("wm.addon_expand", icon="TRIA_RIGHT").module = module_name
- else:
- # Else, block UI
- arrow = row.column()
- arrow.enabled = False
- arrow.operator("wm.addon_expand", icon="TRIA_RIGHT").module = module_name
+ row.operator("wm.addon_expand", icon='TRIA_DOWN' if info["expanded"] else 'TRIA_RIGHT', emboss=False).module = module_name
- row.label(text=info["name"])
-
- if is_enabled: operator = "wm.addon_disable"
- else: operator = "wm.addon_enable"
+ rowsub = row.row()
+ rowsub.active = is_enabled
+ rowsub.label(text=info["name"], icon='ERROR' if info["warning"] else 'BLENDER')
- if info["warning"]: button_icon='ERROR'
- else: button_icon='BLENDER'
-
- row.operator(operator, icon=button_icon).module = module_name
+ if is_enabled:
+ row.operator("wm.addon_disable", icon='CHECKBOX_HLT', text="", emboss=False).module = module_name
+ else:
+ row.operator("wm.addon_enable", icon='CHECKBOX_DEHLT', text="", emboss=False).module = module_name
# Expanded UI (only if additional infos are available)
if info["expanded"]:
if info["description"]:
- split = column.row().split(percentage=0.15)
+ split = colsub.row().split(percentage=0.15)
split.label(text='Description:')
split.label(text=info["description"])
if info["location"]:
- split = column.row().split(percentage=0.15)
+ split = colsub.row().split(percentage=0.15)
split.label(text='Location:')
split.label(text=info["location"])
if info["author"]:
- split = column.row().split(percentage=0.15)
+ split = colsub.row().split(percentage=0.15)
split.label(text='Author:')
split.label(text=info["author"])
if info["version"]:
- split = column.row().split(percentage=0.15)
+ split = colsub.row().split(percentage=0.15)
split.label(text='Version:')
split.label(text=info["version"])
if info["warning"]:
- split = column.row().split(percentage=0.15)
+ split = colsub.row().split(percentage=0.15)
split.label(text="Warning:")
split.label(text=' ' + info["warning"], icon = 'ERROR')
if info["wiki_url"] or info["tracker_url"]:
- split = column.row().split(percentage=0.15)
+ split = colsub.row().split(percentage=0.15)
split.label(text="Internet:")
if info["wiki_url"]:
split.operator("wm.url_open", text="Link to the Wiki", icon='HELP').url = info["wiki_url"]
@@ -1251,17 +938,17 @@ class USERPREF_PT_addons(bpy.types.Panel):
missing_modules = {ext for ext in used_ext if ext not in module_names}
if missing_modules and filter in ("All", "Enabled"):
- layout.column().separator()
- layout.column().label(text="Missing script files")
+ col.column().separator()
+ col.column().label(text="Missing script files")
module_names = {mod.__name__ for mod, info in addons}
for ext in sorted(missing_modules):
# Addon UI Code
- box = layout.column().box()
- column = box.column()
- row = column.row()
+ box = col.column().box()
+ colsub = box.column()
+ row = colsub.row()
- row.label(text=ext, icon="ERROR")
+ row.label(text=ext, icon='ERROR')
row.operator("wm.addon_disable").module = ext
from bpy.props import *
@@ -1355,8 +1042,6 @@ class WM_OT_addon_install(bpy.types.Operator):
module = StringProperty(name="Module", description="Module name of the addon to disable")
filepath = StringProperty(name="File Path", description="File path to write file to")
- filename = StringProperty(name="File Name", description="Name of the file")
- directory = StringProperty(name="Directory", description="Directory of the file")
filter_folder = BoolProperty(name="Filter folders", description="", default=True, options={'HIDDEN'})
filter_python = BoolProperty(name="Filter python", description="", default=True, options={'HIDDEN'})
diff --git a/release/scripts/ui/space_userpref_keymap.py b/release/scripts/ui/space_userpref_keymap.py
index 37007c65f7a..c93b24d5cb2 100644
--- a/release/scripts/ui/space_userpref_keymap.py
+++ b/release/scripts/ui/space_userpref_keymap.py
@@ -167,7 +167,7 @@ class InputKeyMapPanel(bpy.types.Panel):
col = self.indented_layout(layout, level)
row = col.row()
- row.prop(km, "children_expanded", text="", no_bg=True)
+ row.prop(km, "children_expanded", text="", emboss=False)
row.label(text=km.name)
row.label()
@@ -186,7 +186,7 @@ class InputKeyMapPanel(bpy.types.Panel):
# equal in hierarchy to the other children categories
subcol = self.indented_layout(col, level + 1)
subrow = subcol.row()
- subrow.prop(km, "items_expanded", text="", no_bg=True)
+ subrow.prop(km, "items_expanded", text="", emboss=False)
subrow.label(text="%s (Global)" % km.name)
else:
km.items_expanded = True
@@ -227,11 +227,11 @@ class InputKeyMapPanel(bpy.types.Panel):
# header bar
row = split.row()
- row.prop(kmi, "expanded", text="", no_bg=True)
+ row.prop(kmi, "expanded", text="", emboss=False)
row = split.row()
row.enabled = km.user_defined
- row.prop(kmi, "active", text="", no_bg=True)
+ row.prop(kmi, "active", text="", emboss=False)
if km.modal:
row.prop(kmi, "propvalue", text="")
@@ -509,8 +509,6 @@ class WM_OT_keyconfig_import(bpy.types.Operator):
bl_label = "Import Key Configuration..."
filepath = StringProperty(name="File Path", description="Filepath to write file to")
- filename = StringProperty(name="File Name", description="Name of the file")
- directory = StringProperty(name="Directory", description="Directory of the file")
filter_folder = BoolProperty(name="Filter folders", description="", default=True, options={'HIDDEN'})
filter_text = BoolProperty(name="Filter text", description="", default=True, options={'HIDDEN'})
filter_python = BoolProperty(name="Filter python", description="", default=True, options={'HIDDEN'})
@@ -570,8 +568,6 @@ class WM_OT_keyconfig_export(bpy.types.Operator):
bl_label = "Export Key Configuration..."
filepath = StringProperty(name="File Path", description="Filepath to write file to")
- filename = StringProperty(name="File Name", description="Name of the file")
- directory = StringProperty(name="Directory", description="Directory of the file")
filter_folder = BoolProperty(name="Filter folders", description="", default=True, options={'HIDDEN'})
filter_text = BoolProperty(name="Filter text", description="", default=True, options={'HIDDEN'})
filter_python = BoolProperty(name="Filter python", description="", default=True, options={'HIDDEN'})
diff --git a/release/scripts/ui/space_view3d.py b/release/scripts/ui/space_view3d.py
index d2b919aae0f..b1b101e4905 100644
--- a/release/scripts/ui/space_view3d.py
+++ b/release/scripts/ui/space_view3d.py
@@ -717,30 +717,78 @@ class VIEW3D_MT_object_specials(bpy.types.Menu):
layout = self.layout
obj = context.object
- if obj.type == 'LAMP':
+ if obj.type == 'CAMERA':
+ layout.operator_context = 'INVOKE_REGION_WIN'
+
+ props = layout.operator("wm.context_modal_mouse", text="Camera Lens Angle")
+ props.data_path_iter = "selected_editable_objects"
+ props.data_path_item = "data.lens"
+ props.input_scale = 0.1
+
+ if not obj.data.dof_object:
+ #layout.label(text="Test Has DOF obj");
+ props = layout.operator("wm.context_modal_mouse", text="DOF Distance")
+ props.data_path_iter = "selected_editable_objects"
+ props.data_path_item = "data.dof_distance"
+ props.input_scale = 0.02
+
+ if obj.type in ['CURVE','TEXT']:
layout.operator_context = 'INVOKE_REGION_WIN'
- props = layout.operator("wm.context_modal_mouse", text="Spot Size")
+ props = layout.operator("wm.context_modal_mouse", text="Extrude Size")
props.data_path_iter = "selected_editable_objects"
- props.data_path_item = "data.spot_size"
+ props.data_path_item = "data.extrude"
props.input_scale = 0.01
- props = layout.operator("wm.context_modal_mouse", text="Distance")
+ props = layout.operator("wm.context_modal_mouse", text="Width Size")
props.data_path_iter = "selected_editable_objects"
- props.data_path_item = "data.distance"
- props.input_scale = 0.1
+ props.data_path_item = "data.width"
+ props.input_scale = 0.01
- props = layout.operator("wm.context_modal_mouse", text="Clip Start")
+ if obj.type == 'EMPTY':
+ layout.operator_context = 'INVOKE_REGION_WIN'
+
+ props = layout.operator("wm.context_modal_mouse", text="Empty Draw Size")
props.data_path_iter = "selected_editable_objects"
- props.data_path_item = "data.shadow_buffer_clip_start"
- props.input_scale = 0.05
+ props.data_path_item = "empty_draw_size"
+ props.input_scale = 0.01
- props = layout.operator("wm.context_modal_mouse", text="Clip End")
+ if obj.type == 'LAMP':
+ layout.operator_context = 'INVOKE_REGION_WIN'
+
+ props = layout.operator("wm.context_modal_mouse", text="Energy")
props.data_path_iter = "selected_editable_objects"
- props.data_path_item = "data.shadow_buffer_clip_end"
- props.input_scale = 0.05
+ props.data_path_item = "data.energy"
- layout.separator()
+ if obj.data.type in ['SPOT','AREA','POINT']:
+ props = layout.operator("wm.context_modal_mouse", text="Falloff Distance")
+ props.data_path_iter = "selected_editable_objects"
+ props.data_path_item = "data.distance"
+ props.input_scale = 0.1
+
+ if obj.data.type == 'SPOT':
+ layout.separator()
+ props = layout.operator("wm.context_modal_mouse", text="Spot Size")
+ props.data_path_iter = "selected_editable_objects"
+ props.data_path_item = "data.spot_size"
+ props.input_scale = 0.01
+
+ props = layout.operator("wm.context_modal_mouse", text="Spot Blend")
+ props.data_path_iter = "selected_editable_objects"
+ props.data_path_item = "data.spot_blend"
+ props.input_scale = -0.01
+
+ props = layout.operator("wm.context_modal_mouse", text="Clip Start")
+ props.data_path_iter = "selected_editable_objects"
+ props.data_path_item = "data.shadow_buffer_clip_start"
+ props.input_scale = 0.05
+
+ props = layout.operator("wm.context_modal_mouse", text="Clip End")
+ props.data_path_iter = "selected_editable_objects"
+ props.data_path_item = "data.shadow_buffer_clip_end"
+ props.input_scale = 0.05
+
+ layout.separator()
props = layout.operator("object.isolate_type_render")
@@ -2082,7 +2130,7 @@ class VIEW3D_PT_background_image(bpy.types.Panel):
layout.active = view.display_background_images
box = layout.box()
row = box.row(align=True)
- row.prop(bg, "show_expanded", text="", no_bg=True)
+ row.prop(bg, "show_expanded", text="", emboss=False)
row.label(text=getattr(bg.image, "name", "Not Set"))
row.operator("view3d.remove_background_image", text="", icon='X').index = i
diff --git a/release/scripts/ui/space_view3d_toolbar.py b/release/scripts/ui/space_view3d_toolbar.py
index 76ad2d44dfd..fe5caf83a6a 100644
--- a/release/scripts/ui/space_view3d_toolbar.py
+++ b/release/scripts/ui/space_view3d_toolbar.py
@@ -42,6 +42,9 @@ class VIEW3D_PT_tools_objectmode(View3DPanel):
col.operator("transform.resize", text="Scale")
col = layout.column(align=True)
+ col.operator("object.origin_set", text="Origin")
+
+ col = layout.column(align=True)
col.label(text="Object:")
col.operator("object.duplicate_move")
col.operator("object.delete")
diff --git a/source/blender/blenkernel/BKE_displist.h b/source/blender/blenkernel/BKE_displist.h
index febe0a11ae6..df0627f61ba 100644
--- a/source/blender/blenkernel/BKE_displist.h
+++ b/source/blender/blenkernel/BKE_displist.h
@@ -93,13 +93,14 @@ extern void makeDispListCurveTypes(struct Scene *scene, struct Object *ob, int f
extern void makeDispListCurveTypes_forRender(struct Scene *scene, struct Object *ob, struct ListBase *dispbase, struct DerivedMesh **derivedFinal, int forOrco);
extern void makeDispListCurveTypes_forOrco(struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
extern void makeDispListMBall(struct Scene *scene, struct Object *ob);
+extern void makeDispListMBall_forRender(struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
extern void shadeDispList(struct Scene *scene, struct Base *base);
extern void shadeMeshMCol(struct Scene *scene, struct Object *ob, struct Mesh *me);
int surfindex_displist(DispList *dl, int a, int *b, int *p1, int *p2, int *p3, int *p4);
void imagestodisplist(void);
void reshadeall_displist(struct Scene *scene);
-void filldisplist(struct ListBase *dispbase, struct ListBase *to);
+void filldisplist(struct ListBase *dispbase, struct ListBase *to, int flipnormal);
void fastshade_free_render(void);
diff --git a/source/blender/blenkernel/BKE_key.h b/source/blender/blenkernel/BKE_key.h
index 6b8f18e9e17..31e920406c0 100644
--- a/source/blender/blenkernel/BKE_key.h
+++ b/source/blender/blenkernel/BKE_key.h
@@ -75,6 +75,9 @@ void key_to_latt(struct KeyBlock *kb, struct Lattice *lt);
void latt_to_key(struct Lattice *lt, struct KeyBlock *kb);
void key_to_curve(struct KeyBlock *kb, struct Curve *cu, struct ListBase *nurb);
void curve_to_key(struct Curve *cu, struct KeyBlock *kb, struct ListBase *nurb);
+float (*key_to_vertcos(struct Object *ob, struct KeyBlock *kb))[3];
+void vertcos_to_key(struct Object *ob, struct KeyBlock *kb, float (*vertCos)[3]);
+void offset_to_key(struct Object *ob, struct KeyBlock *kb, float (*ofs)[3]);
#ifdef __cplusplus
};
diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h
index f35dff53cd5..880f3f7e724 100644
--- a/source/blender/blenkernel/BKE_lattice.h
+++ b/source/blender/blenkernel/BKE_lattice.h
@@ -49,7 +49,7 @@ void init_latt_deform(struct Object *oblatt, struct Object *ob);
void calc_latt_deform(struct Object *, float *co, float weight);
void end_latt_deform(struct Object *);
-int object_deform_mball(struct Object *ob);
+int object_deform_mball(struct Object *ob, struct ListBase *dispbase);
void outside_lattice(struct Lattice *lt);
void curve_deform_verts(struct Scene *scene, struct Object *cuOb, struct Object *target,
diff --git a/source/blender/blenkernel/BKE_mball.h b/source/blender/blenkernel/BKE_mball.h
index e28e2c4d86e..5d41f4e374e 100644
--- a/source/blender/blenkernel/BKE_mball.h
+++ b/source/blender/blenkernel/BKE_mball.h
@@ -97,6 +97,7 @@ typedef struct process { /* parameters, function, storage */
CENTERLIST **centers; /* cube center hash table */
CORNER **corners; /* corner value hash table */
EDGELIST **edges; /* edge and vertex id hash table */
+ float scale[3];
} PROCESS;
/* dividing scene using octal tree makes polygonisation faster */
@@ -163,11 +164,12 @@ struct MetaBall *add_mball(char *name);
struct MetaBall *copy_mball(struct MetaBall *mb);
void make_local_mball(struct MetaBall *mb);
void tex_space_mball(struct Object *ob);
-float *make_orco_mball(struct Object *ob);
+float *make_orco_mball(struct Object *ob, struct ListBase *dispbase);
void copy_mball_properties(struct Scene *scene, struct Object *active_object);
struct Object *find_basis_mball(struct Scene *scene, struct Object *ob);
int is_basis_mball(struct Object *ob);
-void metaball_polygonize(struct Scene *scene, struct Object *ob);
+int is_mball_basis_for(struct Object *ob1, struct Object *ob2);
+void metaball_polygonize(struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
void calc_mballco(struct MetaElem *ml, float *vec);
float densfunc(struct MetaElem *ball, float x, float y, float z);
float metaball(float x, float y, float z);
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index 47db3c63664..305cb979e9f 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -70,7 +70,7 @@ typedef struct SculptSession {
int totvert, totface;
float *face_normals;
struct Object *ob;
- struct KeyBlock *kb, *refkb;
+ struct KeyBlock *kb;
/* Mesh connectivity */
struct ListBase *fmap;
@@ -97,6 +97,8 @@ typedef struct SculptSession {
struct StrokeCache *cache;
struct GPUDrawObject *drawobject;
+
+ int modifiers_active;
} SculptSession;
void free_sculptsession(struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 090979b33e9..9966aa11be3 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -80,6 +80,8 @@ void scene_select_base(struct Scene *sce, struct Base *selbase);
/* checks for cycle, returns 1 if it's all OK */
int scene_check_setscene(struct Scene *sce);
+float BKE_curframe(struct Scene *scene);
+
void scene_update_tagged(struct Scene *sce);
void scene_update_for_newframe(struct Scene *sce, unsigned int lay);
diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h
index 354638013ec..6fe1c2a96ea 100644
--- a/source/blender/blenkernel/BKE_sequencer.h
+++ b/source/blender/blenkernel/BKE_sequencer.h
@@ -191,17 +191,22 @@ int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test, struct Scene
int shuffle_seq_time(ListBase * seqbasep, struct Scene *evil_scene);
int seqbase_isolated_sel_check(struct ListBase *seqbase);
void free_imbuf_seq(struct Scene *scene, struct ListBase * seqbasep, int check_mem_usage);
+struct Sequence *seq_dupli_recursive(struct Scene *scene, struct Sequence * seq, int dupe_flag);
+int seq_swap(struct Sequence *seq_a, struct Sequence *seq_b);
void seq_update_sound(struct Scene* scene, struct Sequence *seq);
void seq_update_muting(struct Scene* scene, struct Editing *ed);
void seqbase_sound_reload(Scene *scene, ListBase *seqbase);
void seqbase_unique_name_recursive(ListBase *seqbasep, struct Sequence *seq);
+void seqbase_dupli_recursive(struct Scene *scene, ListBase *nseqbase, ListBase *seqbase, int dupe_flag);
+
void clear_scene_in_allseqs(struct Scene *sce);
struct Sequence *get_seq_by_name(struct ListBase *seqbase, const char *name, int recursive);
-struct Sequence *active_seq_get(struct Scene *scene);
-void active_seq_set(struct Scene *scene, struct Sequence *seq);
+struct Sequence *seq_active_get(struct Scene *scene);
+void seq_active_set(struct Scene *scene, struct Sequence *seq);
+int seq_active_pair_get(struct Scene *scene, struct Sequence **seq_act, struct Sequence **seq_other);
/* api for adding new sequence strips */
typedef struct SeqLoadInfo {
@@ -223,6 +228,11 @@ typedef struct SeqLoadInfo {
#define SEQ_LOAD_MOVIE_SOUND 1<<2
#define SEQ_LOAD_SOUND_CACHE 1<<3
+
+/* seq_dupli' flags */
+#define SEQ_DUPE_UNIQUE_NAME 1<<0
+#define SEQ_DUPE_CONTEXT 1<<1
+
/* use as an api function */
typedef struct Sequence *(*SeqLoadFunc)(struct bContext *, ListBase *, struct SeqLoadInfo *);
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h
index ace352395d2..39c12a2bfd8 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -64,6 +64,7 @@ void colorband_table_RGBA(struct ColorBand *coba, float **array, int *size);
void default_tex(struct Tex *tex);
struct Tex *add_texture(const char *name);
+void tex_set_type(struct Tex *tex, int type);
void default_mtex(struct MTex *mtex);
struct MTex *add_mtex(void);
struct Tex *copy_texture(struct Tex *tex);
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c
index 1195c66b358..4df9cde3739 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf.c
@@ -1208,7 +1208,7 @@ static void ccgSubSurf__calcVertNormals(CCGSubSurf *ss,
int normalDataOffset = ss->normalDataOffset;
int vertDataSize = ss->meshIFC.vertDataSize;
- //#pragma omp parallel for private(ptrIdx) schedule(static)
+ #pragma omp parallel for private(ptrIdx) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT)
for (ptrIdx=0; ptrIdx<numEffectedF; ptrIdx++) {
CCGFace *f = (CCGFace*) effectedF[ptrIdx];
int S, x, y;
@@ -1334,7 +1334,7 @@ static void ccgSubSurf__calcVertNormals(CCGSubSurf *ss,
}
}
- //#pragma omp parallel for private(ptrIdx) schedule(static)
+ #pragma omp parallel for private(ptrIdx) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT)
for (ptrIdx=0; ptrIdx<numEffectedF; ptrIdx++) {
CCGFace *f = (CCGFace*) effectedF[ptrIdx];
int S, x, y;
@@ -1401,7 +1401,7 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss,
int finterpCount = ss->meshIFC.finterpCount;
void *q = ss->q, *r = ss->r;
- //#pragma omp parallel for private(ptrIdx) schedule(static)
+ #pragma omp parallel for private(ptrIdx) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT)
for (ptrIdx=0; ptrIdx<numEffectedF; ptrIdx++) {
CCGFace *f = (CCGFace*) effectedF[ptrIdx];
int S, x, y;
@@ -1735,17 +1735,17 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss,
}
}
- //#pragma omp parallel private(ptrIdx)
+ #pragma omp parallel private(ptrIdx) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT)
{
void *q, *r;
- //#pragma omp critical
+ #pragma omp critical
{
q = MEM_mallocN(ss->meshIFC.vertDataSize, "CCGSubsurf q");
r = MEM_mallocN(ss->meshIFC.vertDataSize, "CCGSubsurf r");
}
- //#pragma omp for schedule(static)
+ #pragma omp for schedule(static)
for (ptrIdx=0; ptrIdx<numEffectedF; ptrIdx++) {
CCGFace *f = (CCGFace*) effectedF[ptrIdx];
int S, x, y;
@@ -1829,7 +1829,7 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss,
}
}
- //#pragma omp critical
+ #pragma omp critical
{
MEM_freeN(q);
MEM_freeN(r);
@@ -1841,14 +1841,14 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss,
gridSize = 1 + (1<<((nextLvl)-1));
cornerIdx = gridSize-1;
- //#pragma omp parallel for private(i) schedule(static)
+ #pragma omp parallel for private(i) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT)
for (i=0; i<numEffectedE; i++) {
CCGEdge *e = effectedE[i];
VertDataCopy(EDGE_getCo(e, nextLvl, 0), VERT_getCo(e->v0, nextLvl), finterpCount);
VertDataCopy(EDGE_getCo(e, nextLvl, edgeSize-1), VERT_getCo(e->v1, nextLvl), finterpCount);
}
- //#pragma omp parallel for private(i) schedule(static)
+ #pragma omp parallel for private(i) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT)
for (i=0; i<numEffectedF; i++) {
CCGFace *f = effectedF[i];
int S, x;
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.h b/source/blender/blenkernel/intern/CCGSubSurf.h
index 20911a9dc1a..75f2b4dd5c2 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf.h
+++ b/source/blender/blenkernel/intern/CCGSubSurf.h
@@ -45,6 +45,10 @@ typedef enum {
/***/
+#define CCG_OMP_LIMIT 1000000
+
+/***/
+
typedef struct _CCGSubSurf CCGSubSurf;
CCGSubSurf* ccgSubSurf_new (CCGMeshIFC *ifc, int subdivisionLevels, CCGAllocatorIFC *allocatorIFC, CCGAllocatorHDL allocator);
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 339326f75d5..d5ece6ae31f 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -247,8 +247,8 @@ void DM_to_mesh(DerivedMesh *dm, Mesh *me)
/* if the number of verts has changed, remove invalid data */
if(tmp.totvert != me->totvert) {
- if(me->key) me->key->id.us--;
- me->key = NULL;
+ if(tmp.key) tmp.key->id.us--;
+ tmp.key = NULL;
}
*me = tmp;
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index 50552d33c41..6c8e5c48745 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -1418,7 +1418,7 @@ static void do_nla(Scene *scene, Object *ob, int blocktype)
bActionStrip *strip, *striplast=NULL, *stripfirst=NULL;
float striptime, frametime, length, actlength;
float blendfac, stripframe;
- float scene_cfra= frame_to_float(scene, scene->r.cfra);
+ float scene_cfra= BKE_curframe(scene);
int doit, dostride;
if(blocktype==ID_AR) {
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index 072a9bb8a25..4ab087181e6 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -186,6 +186,16 @@ static ListBase *cdDM_getFaceMap(Object *ob, DerivedMesh *dm)
return cddm->fmap;
}
+static int can_pbvh_draw(Object *ob, DerivedMesh *dm)
+{
+ CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
+ Mesh *me= (ob)? ob->data: NULL;
+
+ if(ob->sculpt->modifiers_active) return 0;
+
+ return (cddm->mvert == me->mvert) || ob->sculpt->kb;
+}
+
static struct PBVH *cdDM_getPBVH(Object *ob, DerivedMesh *dm)
{
CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
@@ -200,7 +210,7 @@ static struct PBVH *cdDM_getPBVH(Object *ob, DerivedMesh *dm)
return NULL;
if(ob->sculpt->pbvh) {
cddm->pbvh= ob->sculpt->pbvh;
- cddm->pbvh_draw = (cddm->mvert == me->mvert) || ob->sculpt->kb;
+ cddm->pbvh_draw = can_pbvh_draw(ob, dm);
}
/* always build pbvh from original mesh, and only use it for drawing if
@@ -208,7 +218,7 @@ static struct PBVH *cdDM_getPBVH(Object *ob, DerivedMesh *dm)
that this is actually for, to support a pbvh on a modified mesh */
if(!cddm->pbvh && ob->type == OB_MESH) {
cddm->pbvh = BLI_pbvh_new();
- cddm->pbvh_draw = (cddm->mvert == me->mvert) || ob->sculpt->kb;
+ cddm->pbvh_draw = can_pbvh_draw(ob, dm);
BLI_pbvh_build_mesh(cddm->pbvh, me->mface, me->mvert,
&me->vdata, me->totface, me->totvert,
&ob->sculpt->hidden_areas);
@@ -735,7 +745,7 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm,
if( flag != lastFlag ) {
if( startFace < i ) {
if( lastFlag != 0 ) { /* if the flag is 0 it means the face is hidden or invisible */
- if (lastFlag==1 && mcol)
+ if (lastFlag==1 && col)
GPU_color_switch(1);
else
GPU_color_switch(0);
@@ -748,7 +758,7 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm,
}
if( startFace < dm->drawObject->nelements/3 ) {
if( lastFlag != 0 ) { /* if the flag is 0 it means the face is hidden or invisible */
- if (lastFlag==1 && mcol)
+ if (lastFlag==1 && col)
GPU_color_switch(1);
else
GPU_color_switch(0);
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index bdeacdf6946..4be5cce38a8 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -2286,9 +2286,6 @@ void DAG_id_flush_update(ID *id, short flag)
/* no point in trying in this cases */
if(!id || id->us <= 1)
id= NULL;
- /* for locked shape keys we make an exception */
- else if(ob_get_key(ob) && (ob->shapeflag & OB_SHAPE_LOCK))
- id= NULL;
}
}
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index 24f996fbb31..716d3110bc3 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -925,7 +925,7 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase)
}
-void filldisplist(ListBase *dispbase, ListBase *to)
+void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal)
{
EditVert *eve, *v1, *vlast;
EditFace *efa;
@@ -1019,6 +1019,9 @@ void filldisplist(ListBase *dispbase, ListBase *to)
index[0]= (intptr_t)efa->v1->tmp.l;
index[1]= (intptr_t)efa->v2->tmp.l;
index[2]= (intptr_t)efa->v3->tmp.l;
+
+ if(flipnormal)
+ SWAP(int, index[0], index[2]);
index+= 3;
efa= efa->next;
@@ -1095,13 +1098,13 @@ static void bevels_to_filledpoly(Curve *cu, ListBase *dispbase)
dl= dl->next;
}
- filldisplist(&front, dispbase);
- filldisplist(&back, dispbase);
+ filldisplist(&front, dispbase, 1);
+ filldisplist(&back, dispbase, 0);
freedisplist(&front);
freedisplist(&back);
- filldisplist(dispbase, dispbase);
+ filldisplist(dispbase, dispbase, 0);
}
@@ -1113,7 +1116,7 @@ static void curve_to_filledpoly(Curve *cu, ListBase *nurb, ListBase *dispbase)
bevels_to_filledpoly(cu, dispbase);
}
else {
- filldisplist(dispbase, dispbase);
+ filldisplist(dispbase, dispbase, 0);
}
}
@@ -1169,20 +1172,30 @@ void makeDispListMBall(Scene *scene, Object *ob)
{
if(!ob || ob->type!=OB_MBALL) return;
+ // XXX: mball stuff uses plenty of global variables
+ // while this is unchanged updating during render is unsafe
+ if(G.rendering) return;
+
freedisplist(&(ob->disp));
-
+
if(ob->type==OB_MBALL) {
if(ob==find_basis_mball(scene, ob)) {
- metaball_polygonize(scene, ob);
+ metaball_polygonize(scene, ob, &ob->disp);
tex_space_mball(ob);
- object_deform_mball(ob);
+ object_deform_mball(ob, &ob->disp);
}
}
boundbox_displist(ob);
}
+void makeDispListMBall_forRender(Scene *scene, Object *ob, ListBase *dispbase)
+{
+ metaball_polygonize(scene, ob, dispbase);
+ object_deform_mball(ob, dispbase);
+}
+
static ModifierData *curve_get_tesselate_point(Scene *scene, Object *ob, int forRender, int editmode)
{
ModifierData *md = modifiers_getVirtualModifierList(ob);
@@ -1315,7 +1328,7 @@ static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *dispba
ModifierData *preTesselatePoint;
Curve *cu= ob->data;
ListBase *nurb= cu->editnurb?cu->editnurb:&cu->nurb;
- int required_mode, totvert;
+ int required_mode, totvert = 0;
int editmode = (!forRender && cu->editnurb);
DerivedMesh *dm= NULL, *ndm;
float (*vertCos)[3] = NULL;
@@ -1855,6 +1868,12 @@ void makeDispListCurveTypes(Scene *scene, Object *ob, int forOrco)
DM_set_object_boundbox (ob, ob->derivedFinal);
} else {
boundbox_displist (ob);
+
+ /* if there is no derivedMesh, object's boundbox is unneeded */
+ if (ob->bb) {
+ MEM_freeN(ob->bb);
+ ob->bb= NULL;
+ }
}
}
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index f604d307551..b8219c4aa35 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -38,6 +38,7 @@
#include "BLI_blenlib.h"
#include "BLI_editVert.h"
+#include "BLI_math_vector.h"
#include "DNA_anim_types.h"
#include "DNA_key_types.h"
@@ -1719,3 +1720,202 @@ void key_to_mesh(KeyBlock *kb, Mesh *me)
VECCOPY(mvert->co, fp);
}
}
+
+/************************* vert coords ************************/
+float (*key_to_vertcos(Object *ob, KeyBlock *kb))[3]
+{
+ float (*vertCos)[3], *co;
+ float *fp= kb->data;
+ int tot= 0, a;
+
+ /* Count of vertex coords in array */
+ if(ob->type == OB_MESH) {
+ Mesh *me= (Mesh*)ob->data;
+ tot= me->totvert;
+ } else if(ob->type == OB_LATTICE) {
+ Lattice *lt= (Lattice*)ob->data;
+ tot= lt->pntsu*lt->pntsv*lt->pntsw;
+ } else if(ELEM(ob->type, OB_CURVE, OB_SURF)) {
+ Curve *cu= (Curve*)ob->data;
+ tot= count_curveverts(&cu->nurb);
+ }
+
+ if (tot == 0) return NULL;
+
+ vertCos= MEM_callocN(tot*sizeof(*vertCos), "key_to_vertcos vertCos");
+
+ /* Copy coords to array */
+ co= (float*)vertCos;
+
+ if(ELEM(ob->type, OB_MESH, OB_LATTICE)) {
+ for (a= 0; a<tot; a++, fp+=3, co+=3) {
+ copy_v3_v3(co, fp);
+ }
+ } else if(ELEM(ob->type, OB_CURVE, OB_SURF)) {
+ Curve *cu= (Curve*)ob->data;
+ Nurb *nu= cu->nurb.first;
+ BezTriple *bezt;
+ BPoint *bp;
+
+ while (nu) {
+ if(nu->bezt) {
+ int i;
+ bezt= nu->bezt;
+ a= nu->pntsu;
+
+ while (a--) {
+ for (i= 0; i<3; i++) {
+ copy_v3_v3(co, fp);
+ fp+= 3; co+= 3;
+ }
+
+ fp+= 3; /* skip alphas */
+
+ bezt++;
+ }
+ }
+ else {
+ bp= nu->bp;
+ a= nu->pntsu*nu->pntsv;
+
+ while (a--) {
+ copy_v3_v3(co, fp);
+
+ fp+= 4;
+ co+= 3;
+
+ bp++;
+ }
+ }
+
+ nu= nu->next;
+ }
+ }
+
+ return vertCos;
+}
+
+void vertcos_to_key(Object *ob, KeyBlock *kb, float (*vertCos)[3])
+{
+ float *co= (float*)vertCos, *fp;
+ int tot= 0, a, elemsize;
+
+ if (kb->data) MEM_freeN(kb->data);
+
+ /* Count of vertex coords in array */
+ if(ob->type == OB_MESH) {
+ Mesh *me= (Mesh*)ob->data;
+ tot= me->totvert;
+ elemsize= me->key->elemsize;
+ } else if(ob->type == OB_LATTICE) {
+ Lattice *lt= (Lattice*)ob->data;
+ tot= lt->pntsu*lt->pntsv*lt->pntsw;
+ elemsize= lt->key->elemsize;
+ } else if(ELEM(ob->type, OB_CURVE, OB_SURF)) {
+ Curve *cu= (Curve*)ob->data;
+ elemsize= cu->key->elemsize;
+ tot= count_curveverts(&cu->nurb);
+ }
+
+ fp= kb->data= MEM_callocN(tot*elemsize, "key_to_vertcos vertCos");
+
+ if (tot == 0) return;
+
+ /* Copy coords to keyblock */
+
+ if(ELEM(ob->type, OB_MESH, OB_LATTICE)) {
+ for (a= 0; a<tot; a++, fp+=3, co+=3) {
+ copy_v3_v3(fp, co);
+ }
+ } else if(ELEM(ob->type, OB_CURVE, OB_SURF)) {
+ Curve *cu= (Curve*)ob->data;
+ Nurb *nu= cu->nurb.first;
+ BezTriple *bezt;
+ BPoint *bp;
+
+ while (nu) {
+ if(nu->bezt) {
+ int i;
+ bezt= nu->bezt;
+ a= nu->pntsu;
+
+ while (a--) {
+ for (i= 0; i<3; i++) {
+ copy_v3_v3(fp, co);
+ fp+= 3; co+= 3;
+ }
+
+ fp+= 3; /* skip alphas */
+
+ bezt++;
+ }
+ }
+ else {
+ bp= nu->bp;
+ a= nu->pntsu*nu->pntsv;
+
+ while (a--) {
+ copy_v3_v3(fp, co);
+
+ fp+= 4;
+ co+= 3;
+
+ bp++;
+ }
+ }
+
+ nu= nu->next;
+ }
+ }
+}
+
+void offset_to_key(Object *ob, KeyBlock *kb, float (*ofs)[3])
+{
+ int a;
+ float *co= (float*)ofs, *fp= kb->data;
+
+ if(ELEM(ob->type, OB_MESH, OB_LATTICE)) {
+ for (a= 0; a<kb->totelem; a++, fp+=3, co+=3) {
+ add_v3_v3(fp, co);
+ }
+ } else if(ELEM(ob->type, OB_CURVE, OB_SURF)) {
+ Curve *cu= (Curve*)ob->data;
+ Nurb *nu= cu->nurb.first;
+ BezTriple *bezt;
+ BPoint *bp;
+
+ while (nu) {
+ if(nu->bezt) {
+ int i;
+ bezt= nu->bezt;
+ a= nu->pntsu;
+
+ while (a--) {
+ for (i= 0; i<3; i++) {
+ add_v3_v3(fp, co);
+ fp+= 3; co+= 3;
+ }
+
+ fp+= 3; /* skip alphas */
+
+ bezt++;
+ }
+ }
+ else {
+ bp= nu->bp;
+ a= nu->pntsu*nu->pntsv;
+
+ while (a--) {
+ add_v3_v3(fp, co);
+
+ fp+= 4;
+ co+= 3;
+
+ bp++;
+ }
+ }
+
+ nu= nu->next;
+ }
+ }
+}
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index 1954bac7e93..5824afd9ded 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -869,12 +869,12 @@ void lattice_deform_verts(Object *laOb, Object *target, DerivedMesh *dm,
end_latt_deform(laOb);
}
-int object_deform_mball(Object *ob)
+int object_deform_mball(Object *ob, ListBase *dispbase)
{
if(ob->parent && ob->parent->type==OB_LATTICE && ob->partype==PARSKEL) {
DispList *dl;
- for (dl=ob->disp.first; dl; dl=dl->next) {
+ for (dl=dispbase->first; dl; dl=dl->next) {
lattice_deform_verts(ob->parent, ob, NULL,
(float(*)[3]) dl->verts, dl->nr, NULL);
}
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index 3acc46967be..da9740a1486 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -226,7 +226,7 @@ void tex_space_mball(Object *ob)
boundbox_set_from_min_max(bb, min, max);
}
-float *make_orco_mball(Object *ob)
+float *make_orco_mball(Object *ob, ListBase *dispbase)
{
BoundBox *bb;
DispList *dl;
@@ -243,7 +243,7 @@ float *make_orco_mball(Object *ob)
loc[2]= (bb->vec[0][2]+bb->vec[1][2])/2.0f;
size[2]= bb->vec[1][2]-loc[2];
- dl= ob->disp.first;
+ dl= dispbase->first;
orcodata= MEM_mallocN(sizeof(float)*3*dl->nr, "MballOrco");
data= dl->verts;
@@ -275,6 +275,19 @@ int is_basis_mball(Object *ob)
return 1;
}
+/* return nonzero if ob1 is a basis mball for ob */
+int is_mball_basis_for(Object *ob1, Object *ob2)
+{
+ int basis1nr, basis2nr;
+ char basis1name[32], basis2name[32];
+
+ splitIDname(ob1->id.name+2, basis1name, &basis1nr);
+ splitIDname(ob2->id.name+2, basis2name, &basis2nr);
+
+ if(!strcmp(basis1name, basis2name)) return is_basis_mball(ob1);
+ else return 0;
+}
+
/* \brief copy some properties from object to other metaball object with same base name
*
* When some properties (wiresize, threshold, update flags) of metaball are changed, then this properties
@@ -876,11 +889,11 @@ CORNER *setcorner (PROCESS* p, int i, int j, int k)
c = (CORNER *) new_pgn_element(sizeof(CORNER));
c->i = i;
- c->x = ((float)i-0.5f)*p->size;
+ c->x = ((float)i-0.5f)*p->size/p->scale[0];
c->j = j;
- c->y = ((float)j-0.5f)*p->size;
+ c->y = ((float)j-0.5f)*p->size/p->scale[1];
c->k = k;
- c->z = ((float)k-0.5f)*p->size;
+ c->z = ((float)k-0.5f)*p->size/p->scale[2];
c->value = p->function(c->x, c->y, c->z);
c->next = p->corners[index];
@@ -1409,9 +1422,9 @@ void find_first_points(PROCESS *mbproc, MetaBall *mb, int a)
workp_v = in_v;
max_len = sqrt((out.x-in.x)*(out.x-in.x) + (out.y-in.y)*(out.y-in.y) + (out.z-in.z)*(out.z-in.z));
- nx = abs((out.x - in.x)/mbproc->size);
- ny = abs((out.y - in.y)/mbproc->size);
- nz = abs((out.z - in.z)/mbproc->size);
+ nx = abs((out.x - in.x)/mbproc->size*mbproc->scale[0]);
+ ny = abs((out.y - in.y)/mbproc->size*mbproc->scale[1]);
+ nz = abs((out.z - in.z)/mbproc->size*mbproc->scale[2]);
MAXN = MAX3(nx,ny,nz);
if(MAXN!=0.0f) {
@@ -1430,9 +1443,9 @@ void find_first_points(PROCESS *mbproc, MetaBall *mb, int a)
if((tmp_v<0.0 && workp_v>=0.0)||(tmp_v>0.0 && workp_v<=0.0)) {
/* indexes of CUBE, which includes "first point" */
- c_i= (int)floor(workp.x/mbproc->size);
- c_j= (int)floor(workp.y/mbproc->size);
- c_k= (int)floor(workp.z/mbproc->size);
+ c_i= (int)floor(workp.x/mbproc->size*mbproc->scale[0]);
+ c_j= (int)floor(workp.y/mbproc->size*mbproc->scale[1]);
+ c_k= (int)floor(workp.z/mbproc->size*mbproc->scale[2]);
/* add CUBE (with indexes c_i, c_j, c_k) to the stack,
* this cube includes found point of Implicit Surface */
@@ -2075,21 +2088,23 @@ void init_metaball_octal_tree(int depth)
subdivide_metaball_octal_node(node, size[0], size[1], size[2], metaball_tree->depth);
}
-void metaball_polygonize(Scene *scene, Object *ob)
+void metaball_polygonize(Scene *scene, Object *ob, ListBase *dispbase)
{
PROCESS mbproc;
MetaBall *mb;
DispList *dl;
int a, nr_cubes;
float *ve, *no, totsize, width;
-
+ float smat[3][3];
+
mb= ob->data;
if(totelem==0) return;
if(!(G.rendering) && (mb->flag==MB_UPDATE_NEVER)) return;
if(G.moving && mb->flag==MB_UPDATE_FAST) return;
- freedisplist(&ob->disp);
+ object_scale_to_mat3(ob, smat);
+
curindex= totindex= 0;
indices= 0;
thresh= mb->thresh;
@@ -2130,6 +2145,7 @@ void metaball_polygonize(Scene *scene, Object *ob)
width= mb->wiresize;
if(G.moving && mb->flag==MB_UPDATE_HALFRES) width*= 2;
}
+
/* nr_cubes is just for safety, minimum is totsize */
nr_cubes= (int)(0.5+totsize/width);
@@ -2140,6 +2156,11 @@ void metaball_polygonize(Scene *scene, Object *ob)
mbproc.cubes= 0;
mbproc.delta = width/(float)(RES*RES);
+ /* to keep constant resolution for any motherball scale */
+ mbproc.scale[0]= smat[0][0];
+ mbproc.scale[1]= smat[1][1];
+ mbproc.scale[2]= smat[2][2];
+
polygonize(&mbproc, mb);
MEM_freeN(mainb);
@@ -2152,9 +2173,8 @@ void metaball_polygonize(Scene *scene, Object *ob)
}
if(curindex) {
-
dl= MEM_callocN(sizeof(DispList), "mbaldisp");
- BLI_addtail(&ob->disp, dl);
+ BLI_addtail(dispbase, dl);
dl->type= DL_INDEX4;
dl->nr= mbproc.vertices.count;
dl->parts= curindex;
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 6ddc4b8bb16..cd8b2eb0a8e 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -1186,6 +1186,12 @@ void mesh_to_curve(Scene *scene, Object *ob)
if (needsFree) {
ob->derivedFinal = NULL;
+
+ /* curve object could have got bounding box only in special cases */
+ if(ob->bb) {
+ MEM_freeN(ob->bb);
+ ob->bb= NULL;
+ }
}
}
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 9b9b289e307..3bd38680c89 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -521,6 +521,7 @@ void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updat
/* create subsurf DM from original mesh at high level */
cddm = CDDM_from_mesh(me, NULL);
+ DM_set_only_copy(cddm, CD_MASK_BAREMESH);
highdm = subsurf_dm_create_local(ob, cddm, totlvl, simple, 0);
gridkey = highdm->getGridKey(highdm);
@@ -644,8 +645,8 @@ static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DispOp op, DMGr
dSkip = (dGridSize-1)/(gridSize-1);
stored_grids = CustomData_get_layer(&me->fdata, CD_FACEGRID);
-
- //#pragma omp parallel for private(i) schedule(static)
+
+ #pragma omp parallel for private(i) if(me->totface*gridSize*gridSize*4 >= CCG_OMP_LIMIT)
for(i = 0; i < me->totface; ++i) {
const int numVerts = mface[i].v4 ? 4 : 3;
MDisps *mdisp = &mdisps[i];
@@ -657,7 +658,7 @@ static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DispOp op, DMGr
(gridkey->mask &&
(!stored_grids ||
CustomData_number_of_layers(&stored_grids[i], CD_PAINTMASK) != gridkey->mask)))
- //#pragma omp critical
+ #pragma omp critical
{
multires_reallocate_mdisps(me, mdisps, gridkey, totlvl);
}
@@ -785,6 +786,7 @@ static void multiresModifier_update(DerivedMesh *dm)
/* create subsurf DM from original mesh at high level */
if (ob->derivedDeform) cddm = CDDM_copy(ob->derivedDeform);
else cddm = CDDM_from_mesh(me, NULL);
+ DM_set_only_copy(cddm, CD_MASK_BAREMESH);
highdm = subsurf_dm_create_local(ob, cddm, totlvl, mmd->simple, 0);
gridkey = highdm->getGridKey(highdm);
@@ -840,6 +842,7 @@ static void multiresModifier_update(DerivedMesh *dm)
if (ob->derivedDeform) cddm = CDDM_copy(ob->derivedDeform);
else cddm = CDDM_from_mesh(me, NULL);
+ DM_set_only_copy(cddm, CD_MASK_BAREMESH);
subdm = subsurf_dm_create_local(ob, cddm, mmd->totlvl, mmd->simple, 0);
cddm->release(cddm);
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 13ea55ebf0f..add011d0950 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -2465,7 +2465,7 @@ void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview)
node= getExecutableNode(ntree);
if(node) {
- if(ntree->progress)
+ if(ntree->progress && totnode)
ntree->progress(ntree->prh, (1.0 - curnode/(float)totnode));
if(ntree->stats_draw) {
char str[64];
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 25d4990113b..88996c40c23 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -407,6 +407,9 @@ void unlink_object(Scene *scene, Object *ob)
if(pchan->custom==ob)
pchan->custom= NULL;
}
+ } else if(ELEM(OB_MBALL, ob->type, obt->type)) {
+ if(is_mball_basis_for(obt, ob))
+ obt->recalc|= OB_RECALC_DATA;
}
sca_remove_ob_poin(obt, ob);
@@ -539,13 +542,7 @@ void unlink_object(Scene *scene, Object *ob)
}
tex= tex->id.next;
}
-
- /* mballs (scene==NULL when called from library.c) */
- if(scene && ob->type==OB_MBALL) {
- obt= find_basis_mball(scene, ob);
- if(obt) freedisplist(&obt->disp);
- }
-
+
/* worlds */
wrld= G.main->world.first;
while(wrld) {
@@ -655,6 +652,14 @@ void unlink_object(Scene *scene, Object *ob)
}
}
}
+ else if(sl->spacetype==SPACE_BUTS) {
+ SpaceButs *sbuts= (SpaceButs *)sl;
+
+ if(sbuts->pinid==(ID *)ob) {
+ sbuts->flag&= ~SB_PIN_CONTEXT;
+ sbuts->pinid= NULL;
+ }
+ }
}
sa= sa->next;
@@ -981,7 +986,7 @@ static char *get_obdata_defname(int type)
case OB_MESH: return "Mesh";
case OB_CURVE: return "Curve";
case OB_SURF: return "Surf";
- case OB_FONT: return "Font";
+ case OB_FONT: return "Text";
case OB_MBALL: return "Mball";
case OB_CAMERA: return "Camera";
case OB_LAMP: return "Lamp";
@@ -1600,20 +1605,8 @@ void object_make_proxy(Object *ob, Object *target, Object *gob)
/* there is also a timing calculation in drawobject() */
-float bluroffs= 0.0f, fieldoffs= 0.0f;
int no_speed_curve= 0;
-/* ugly calls from render */
-void set_mblur_offs(float blur)
-{
- bluroffs= blur;
-}
-
-void set_field_offs(float field)
-{
- fieldoffs= field;
-}
-
void disable_speed_curve(int val)
{
no_speed_curve= val;
@@ -1623,11 +1616,9 @@ void disable_speed_curve(int val)
/* ob can be NULL */
float bsystem_time(struct Scene *scene, Object *ob, float cfra, float ofs)
{
- /* returns float ( see frame_to_float in ipo.c) */
+ /* returns float ( see BKE_curframe in scene.c) */
+ cfra += scene->r.subframe;
- /* bluroffs and fieldoffs are ugly globals that are set by render */
- cfra+= bluroffs+fieldoffs;
-
/* global time */
if (scene)
cfra*= scene->r.framelen;
diff --git a/source/blender/blenkernel/intern/packedFile.c b/source/blender/blenkernel/intern/packedFile.c
index db457f043e7..b01f570898e 100644
--- a/source/blender/blenkernel/intern/packedFile.c
+++ b/source/blender/blenkernel/intern/packedFile.c
@@ -224,7 +224,7 @@ void packAll(Main *bmain, ReportList *reports)
vf->packedfile = newPackedFile(reports, vf->name);
for(sound=bmain->sound.first; sound; sound=sound->id.next)
- if(sound->packedfile == NULL && vf->id.lib==NULL)
+ if(sound->packedfile == NULL && sound->id.lib==NULL)
sound->packedfile = newPackedFile(reports, sound->name);
}
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index aa0ed983154..3a6fb92d63a 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -3925,7 +3925,7 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys)
if(!psys_check_enabled(ob, psys))
return;
- cfra= bsystem_time(scene, ob, (float)scene->r.cfra, 0.0f);
+ cfra= BKE_curframe(scene);
sim.psmd= psys_get_modifier(ob, psys);
/* system was already updated from modifier stack */
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 0e4b36d724d..1bc690eb0ed 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -44,6 +44,7 @@
#include "DNA_group_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
+#include "DNA_sequence_types.h"
#include "BKE_anim.h"
#include "BKE_animsys.h"
@@ -197,6 +198,10 @@ Scene *copy_scene(Main *bmain, Scene *sce, int type)
scen->r.qtcodecdata->cdParms = MEM_dupallocN(scen->r.qtcodecdata->cdParms);
}
+ if(sce->r.ffcodecdata.properties) { /* intentionally check scen not sce. */
+ scen->r.ffcodecdata.properties= IDP_CopyProperty(sce->r.ffcodecdata.properties);
+ }
+
/* NOTE: part of SCE_COPY_LINK_DATA and SCE_COPY_FULL operations
* are done outside of blenkernel with ED_objects_single_users! */
@@ -211,6 +216,12 @@ Scene *copy_scene(Main *bmain, Scene *sce, int type)
id_us_plus((ID *)scen->world);
scen->world= copy_world(scen->world);
}
+
+ if(sce->ed) {
+ scen->ed= MEM_callocN( sizeof(Editing), "addseq");
+ scen->ed->seqbasep= &scen->ed->seqbase;
+ seqbase_dupli_recursive(sce, &scen->ed->seqbase, &sce->ed->seqbase, 0);
+ }
}
sound_create_scene(scen);
@@ -868,22 +879,16 @@ int scene_check_setscene(Scene *sce)
return 1;
}
-/* This (evil) function is needed to cope with two legacy Blender rendering features
-* mblur (motion blur that renders 'subframes' and blurs them together), and fields
-* rendering. Thus, the use of ugly globals from object.c
-*/
-// BAD... EVIL... JUJU...!!!!
-// XXX moved here temporarily
-float frame_to_float (Scene *scene, int cfra) /* see also bsystem_time in object.c */
+/* This function is needed to cope with fractional frames - including two Blender rendering features
+* mblur (motion blur that renders 'subframes' and blurs them together), and fields rendering. */
+
+/* see also bsystem_time in object.c */
+float BKE_curframe(Scene *scene)
{
- extern float bluroffs; /* bad stuff borrowed from object.c */
- extern float fieldoffs;
- float ctime;
-
- ctime= (float)cfra;
- ctime+= bluroffs+fieldoffs;
- ctime*= scene->r.framelen;
-
+ float ctime = scene->r.cfra;
+ ctime+= scene->r.subframe;
+ ctime*= scene->r.framelen;
+
return ctime;
}
@@ -918,7 +923,7 @@ void scene_update_tagged(Scene *scene)
/* recalc scene animation data here (for sequencer) */
{
- float ctime = frame_to_float(scene, scene->r.cfra);
+ float ctime = BKE_curframe(scene);
AnimData *adt= BKE_animdata_from_id(&scene->id);
if(adt && (adt->recalc & ADT_RECALC_ANIM))
@@ -935,7 +940,7 @@ void scene_update_tagged(Scene *scene)
/* applies changes right away, does all sets too */
void scene_update_for_newframe(Scene *sce, unsigned int lay)
{
- float ctime = frame_to_float(sce, sce->r.cfra);
+ float ctime = BKE_curframe(sce);
Scene *sce_iter;
/* clear animation overrides */
diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c
index b5f9c8fe542..56a8edcc4fc 100644
--- a/source/blender/blenkernel/intern/seqeffects.c
+++ b/source/blender/blenkernel/intern/seqeffects.c
@@ -2802,7 +2802,7 @@ static void init_speed_effect(Sequence *seq)
v = (SpeedControlVars *)seq->effectdata;
v->globalSpeed = 1.0;
v->frameMap = 0;
- v->flags = SEQ_SPEED_COMPRESS_IPO_Y;
+ v->flags = 0;
v->length = 0;
}
@@ -2925,14 +2925,8 @@ void sequence_effect_speed_rebuild_map(Scene *scene, Sequence * seq, int force)
for (cfra = 1; cfra < v->length; cfra++) {
if(fcu) {
- if((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) {
- ctime = seq->startdisp + cfra;
- div = 1.0;
- } else {
- ctime= cfra;
- div= v->length / 100.0f;
- if(div==0.0) return;
- }
+ ctime = seq->startdisp + cfra;
+ div = 1.0;
facf = evaluate_fcurve(fcu, ctime/div);
} else {
@@ -2956,14 +2950,8 @@ void sequence_effect_speed_rebuild_map(Scene *scene, Sequence * seq, int force)
for (cfra = 0; cfra < v->length; cfra++) {
if(fcu) {
- if((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) {
- ctime = seq->startdisp + cfra;
- div = 1.0;
- } else {
- ctime= cfra;
- div= v->length / 100.0f;
- if(div==0.0) return;
- }
+ ctime = seq->startdisp + cfra;
+ div = 1.0;
facf = evaluate_fcurve(fcu, ctime / div);
if (v->flags & SEQ_SPEED_COMPRESS_IPO_Y) {
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index d1ab63ca65e..4241f481c30 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -3790,6 +3790,34 @@ ListBase *seq_seqbase(ListBase *seqbase, Sequence *seq)
return NULL;
}
+int seq_swap(Sequence *seq_a, Sequence *seq_b)
+{
+ if(seq_a->len != seq_b->len)
+ return 0;
+
+ /* type checking, could be more advanced but disalow sound vs non-sound copy */
+ if(seq_a->type != seq_b->type) {
+ if(seq_a->type == SEQ_SOUND || seq_b->type == SEQ_SOUND) {
+ return 0;
+ }
+ }
+
+ SWAP(Sequence, *seq_a, *seq_b);
+ SWAP(void *, seq_a->prev, seq_b->prev);
+ SWAP(void *, seq_a->next, seq_b->next);
+
+ SWAP(int, seq_a->start, seq_b->start);
+ SWAP(int, seq_a->startofs, seq_b->startofs);
+ SWAP(int, seq_a->endofs, seq_b->endofs);
+ SWAP(int, seq_a->startstill, seq_b->startstill);
+ SWAP(int, seq_a->endstill, seq_b->endstill);
+ SWAP(int, seq_a->machine, seq_b->machine);
+ SWAP(int, seq_a->startdisp, seq_b->startdisp);
+ SWAP(int, seq_a->enddisp, seq_b->enddisp);
+
+ return 1;
+}
+
/* XXX - hackish function needed for transforming strips! TODO - have some better solution */
void seq_offset_animdata(Scene *scene, Sequence *seq, int ofs)
{
@@ -3832,14 +3860,14 @@ Sequence *get_seq_by_name(ListBase *seqbase, const char *name, int recursive)
}
-Sequence *active_seq_get(Scene *scene)
+Sequence *seq_active_get(Scene *scene)
{
Editing *ed= seq_give_editing(scene, FALSE);
if(ed==NULL) return NULL;
return ed->act_seq;
}
-void active_seq_set(Scene *scene, Sequence *seq)
+void seq_active_set(Scene *scene, Sequence *seq)
{
Editing *ed= seq_give_editing(scene, FALSE);
if(ed==NULL) return;
@@ -3847,6 +3875,35 @@ void active_seq_set(Scene *scene, Sequence *seq)
ed->act_seq= seq;
}
+int seq_active_pair_get(Scene *scene, Sequence **seq_act, Sequence **seq_other)
+{
+ Editing *ed= seq_give_editing(scene, FALSE);
+
+ *seq_act= seq_active_get(scene);
+
+ if(*seq_act == NULL) {
+ return 0;
+ }
+ else {
+ Sequence *seq;
+
+ *seq_other= NULL;
+
+ for(seq= ed->seqbasep->first; seq; seq= seq->next) {
+ if(seq->flag & SELECT && (seq != (*seq_act))) {
+ if(*seq_other) {
+ return 0;
+ }
+ else {
+ *seq_other= seq;
+ }
+ }
+ }
+
+ return (*seq_other != NULL);
+ }
+}
+
/* api like funcs for adding */
void seq_load_apply(Scene *scene, Sequence *seq, SeqLoadInfo *seq_load)
@@ -3861,7 +3918,7 @@ void seq_load_apply(Scene *scene, Sequence *seq, SeqLoadInfo *seq_load)
if(seq_load->flag & SEQ_LOAD_REPLACE_SEL) {
seq_load->flag |= SELECT;
- active_seq_set(scene, seq);
+ seq_active_set(scene, seq);
}
if(seq_load->flag & SEQ_LOAD_SOUND_CACHE) {
@@ -3934,7 +3991,7 @@ Sequence *sequencer_add_sound_strip(bContext *C, ListBase *seqbasep, SeqLoadInfo
AUD_SoundInfo info;
- sound = sound_new_file(CTX_data_main(C), seq_load->path);
+ sound = sound_new_file(CTX_data_main(C), seq_load->path); /* handles relative paths */
if (sound==NULL || sound->playback_handle == NULL) {
//if(op)
@@ -3982,6 +4039,7 @@ Sequence *sequencer_add_sound_strip(bContext *C, ListBase *seqbasep, SeqLoadInfo
Sequence *sequencer_add_movie_strip(bContext *C, ListBase *seqbasep, SeqLoadInfo *seq_load)
{
Scene *scene= CTX_data_scene(C); /* only for sound */
+ char path[sizeof(seq_load->path)];
Sequence *seq, *soundseq; /* generic strip vars */
Strip *strip;
@@ -3989,7 +4047,10 @@ Sequence *sequencer_add_movie_strip(bContext *C, ListBase *seqbasep, SeqLoadInfo
struct anim *an;
- an = openanim(seq_load->path, IB_rect);
+ BLI_strncpy(path, seq_load->path, sizeof(path));
+ BLI_path_abs(path, G.sce);
+
+ an = openanim(path, IB_rect);
if(an==NULL)
return NULL;
@@ -4029,3 +4090,131 @@ Sequence *sequencer_add_movie_strip(bContext *C, ListBase *seqbasep, SeqLoadInfo
return seq;
}
+
+
+static Sequence *seq_dupli(struct Scene *scene, Sequence *seq, int dupe_flag)
+{
+ Sequence *seqn = MEM_dupallocN(seq);
+
+ seq->tmp = seqn;
+ seqn->strip= MEM_dupallocN(seq->strip);
+
+ // XXX: add F-Curve duplication stuff?
+
+ seqn->strip->tstripdata = 0;
+ seqn->strip->tstripdata_startstill = 0;
+ seqn->strip->tstripdata_endstill = 0;
+ seqn->strip->ibuf_startstill = 0;
+ seqn->strip->ibuf_endstill = 0;
+
+ if (seq->strip->crop) {
+ seqn->strip->crop = MEM_dupallocN(seq->strip->crop);
+ }
+
+ if (seq->strip->transform) {
+ seqn->strip->transform = MEM_dupallocN(seq->strip->transform);
+ }
+
+ if (seq->strip->proxy) {
+ seqn->strip->proxy = MEM_dupallocN(seq->strip->proxy);
+ }
+
+ if (seq->strip->color_balance) {
+ seqn->strip->color_balance
+ = MEM_dupallocN(seq->strip->color_balance);
+ }
+
+ if(seq->type==SEQ_META) {
+ seqn->strip->stripdata = 0;
+
+ seqn->seqbase.first= seqn->seqbase.last= 0;
+ /* WATCH OUT!!! - This metastrip is not recursively duplicated here - do this after!!! */
+ /* - seq_dupli_recursive(&seq->seqbase,&seqn->seqbase);*/
+ } else if(seq->type == SEQ_SCENE) {
+ seqn->strip->stripdata = 0;
+ if(seq->scene_sound)
+ seqn->scene_sound = sound_scene_add_scene_sound(scene, seqn, seq->startdisp, seq->enddisp, seq->startofs + seq->anim_startofs);
+ } else if(seq->type == SEQ_MOVIE) {
+ seqn->strip->stripdata =
+ MEM_dupallocN(seq->strip->stripdata);
+ seqn->anim= 0;
+ } else if(seq->type == SEQ_SOUND) {
+ seqn->strip->stripdata =
+ MEM_dupallocN(seq->strip->stripdata);
+ if(seq->scene_sound)
+ seqn->scene_sound = sound_add_scene_sound(scene, seqn, seq->startdisp, seq->enddisp, seq->startofs + seq->anim_startofs);
+
+ seqn->sound->id.us++;
+ } else if(seq->type == SEQ_IMAGE) {
+ seqn->strip->stripdata =
+ MEM_dupallocN(seq->strip->stripdata);
+ } else if(seq->type >= SEQ_EFFECT) {
+ if(seq->seq1 && seq->seq1->tmp) seqn->seq1= seq->seq1->tmp;
+ if(seq->seq2 && seq->seq2->tmp) seqn->seq2= seq->seq2->tmp;
+ if(seq->seq3 && seq->seq3->tmp) seqn->seq3= seq->seq3->tmp;
+
+ if (seq->type & SEQ_EFFECT) {
+ struct SeqEffectHandle sh;
+ sh = get_sequence_effect(seq);
+ if(sh.copy)
+ sh.copy(seq, seqn);
+ }
+
+ seqn->strip->stripdata = 0;
+
+ } else {
+ fprintf(stderr, "Aiiiiekkk! sequence type not "
+ "handled in duplicate!\nExpect a crash"
+ " now...\n");
+ }
+
+ if(dupe_flag & SEQ_DUPE_UNIQUE_NAME)
+ seqbase_unique_name_recursive(&scene->ed->seqbase, seqn);
+
+ return seqn;
+}
+
+Sequence * seq_dupli_recursive(struct Scene *scene, Sequence * seq, int dupe_flag)
+{
+ Sequence * seqn = seq_dupli(scene, seq, dupe_flag);
+ if (seq->type == SEQ_META) {
+ Sequence *s;
+ for(s= seq->seqbase.first; s; s = s->next) {
+ Sequence *n = seq_dupli_recursive(scene, s, dupe_flag);
+ if (n) {
+ BLI_addtail(&seqn->seqbase, n);
+ }
+ }
+ }
+ return seqn;
+}
+
+void seqbase_dupli_recursive(Scene *scene, ListBase *nseqbase, ListBase *seqbase, int dupe_flag)
+{
+ Sequence *seq;
+ Sequence *seqn = 0;
+ Sequence *last_seq = seq_active_get(scene);
+
+ for(seq= seqbase->first; seq; seq= seq->next) {
+ seq->tmp= NULL;
+ if(seq->flag & SELECT) {
+ seqn = seq_dupli(scene, seq, dupe_flag);
+ if (seqn) { /*should never fail */
+ if(dupe_flag & SEQ_DUPE_CONTEXT) {
+ seq->flag &= ~SEQ_ALLSEL;
+ seqn->flag &= ~(SEQ_LEFTSEL+SEQ_RIGHTSEL+SEQ_LOCK);
+ }
+
+ BLI_addtail(nseqbase, seqn);
+ if(seq->type==SEQ_META)
+ seqbase_dupli_recursive(scene, &seqn->seqbase, &seq->seqbase, dupe_flag);
+
+ if(dupe_flag & SEQ_DUPE_CONTEXT) {
+ if (seq == last_seq) {
+ seq_active_set(scene, seqn);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index 6d8c339d2b9..8178ef75a91 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -509,6 +509,27 @@ void default_tex(Tex *tex)
tex->preview = NULL;
}
+void tex_set_type(Tex *tex, int type)
+{
+ switch(type) {
+
+ case TEX_VOXELDATA:
+ if (tex->vd == NULL)
+ tex->vd = BKE_add_voxeldata();
+ break;
+ case TEX_POINTDENSITY:
+ if (tex->pd == NULL)
+ tex->pd = BKE_add_pointdensity();
+ break;
+ case TEX_ENVMAP:
+ if (tex->env == NULL)
+ tex->env = BKE_add_envmap();
+ break;
+ }
+
+ tex->type = type;
+}
+
/* ------------------------------------------------------------------------- */
Tex *add_texture(const char *name)
@@ -1111,6 +1132,7 @@ PointDensity *BKE_add_pointdensity(void)
pd->totpoints = 0;
pd->object = NULL;
pd->psys = 0;
+ pd->psys_cache_space= TEX_PD_WORLDSPACE;
return pd;
}
diff --git a/source/blender/blenlib/BLI_cpu.h b/source/blender/blenlib/BLI_cpu.h
new file mode 100644
index 00000000000..d809f1cc594
--- /dev/null
+++ b/source/blender/blenlib/BLI_cpu.h
@@ -0,0 +1,30 @@
+/*
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef BLI_CPU_H
+#define BLI_CPU_H
+
+int BLI_cpu_support_sse2(void);
+
+#endif
+
diff --git a/source/blender/blenlib/BLI_linklist.h b/source/blender/blenlib/BLI_linklist.h
index 2ce40cf6231..b10d48e3ee6 100644
--- a/source/blender/blenlib/BLI_linklist.h
+++ b/source/blender/blenlib/BLI_linklist.h
@@ -47,11 +47,14 @@ typedef struct LinkNode {
int BLI_linklist_length (struct LinkNode *list);
int BLI_linklist_index (struct LinkNode *list, void *ptr);
+struct LinkNode *BLI_linklist_find (struct LinkNode *list, int index);
+
void BLI_linklist_reverse (struct LinkNode **listp);
void BLI_linklist_prepend (struct LinkNode **listp, void *ptr);
void BLI_linklist_append (struct LinkNode **listp, void *ptr);
void BLI_linklist_prepend_arena (struct LinkNode **listp, void *ptr, struct MemArena *ma);
+void BLI_linklist_insert_after (struct LinkNode **listp, void *ptr);
void BLI_linklist_free (struct LinkNode *list, LinkNodeFreeFP freefunc);
void BLI_linklist_apply (struct LinkNode *list, LinkNodeApplyFP applyfunc, void *userdata);
diff --git a/source/blender/blenlib/BLI_math_base.h b/source/blender/blenlib/BLI_math_base.h
index c143c44c594..bb20cb7c8e1 100644
--- a/source/blender/blenlib/BLI_math_base.h
+++ b/source/blender/blenlib/BLI_math_base.h
@@ -115,6 +115,9 @@ extern "C" {
#ifndef fmodf
#define fmodf(a, b) ((float)fmod(a, b))
#endif
+#ifndef hypotf
+#define hypotf(a, b) ((float)hypot(a, b))
+#endif
#ifdef WIN32
#ifndef FREE_WINDOWS
diff --git a/source/blender/blenlib/BLI_math_inline.h b/source/blender/blenlib/BLI_math_inline.h
index c762144a4b8..d002c0880b2 100644
--- a/source/blender/blenlib/BLI_math_inline.h
+++ b/source/blender/blenlib/BLI_math_inline.h
@@ -38,11 +38,14 @@ extern "C" {
#ifdef BLI_MATH_INLINE
#ifdef _MSC_VER
#define MINLINE static __forceinline
+#define MALWAYS_INLINE MINLINE
#else
#define MINLINE static inline
+#define MALWAYS_INLINE static __attribute__((always_inline))
#endif
#else
#define MINLINE
+#define MALWAYS_INLINE
#endif
#ifdef __cplusplus
diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h
index 31cefb21e7a..77ebcb24975 100644
--- a/source/blender/blenlib/BLI_math_matrix.h
+++ b/source/blender/blenlib/BLI_math_matrix.h
@@ -122,6 +122,9 @@ float determinant_m3(
float g, float h, float i);
float determinant_m4(float A[4][4]);
+void svd_m4(float U[4][4], float s[4], float V[4][4], float A[4][4]);
+void pseudoinverse_m4_m4(float Ainv[4][4], float A[4][4], float epsilon);
+
/****************************** Transformations ******************************/
void scale_m3_fl(float R[3][3], float scale);
diff --git a/source/blender/blenlib/BLI_pbvh.h b/source/blender/blenlib/BLI_pbvh.h
index a376af8572d..6ca7593e30d 100644
--- a/source/blender/blenlib/BLI_pbvh.h
+++ b/source/blender/blenlib/BLI_pbvh.h
@@ -128,6 +128,12 @@ void BLI_pbvh_get_grid_updates(PBVH *bvh, int clear, void ***gridfaces, int *tot
void BLI_pbvh_grids_update(PBVH *bvh, struct DMGridData **grids,
struct DMGridAdjacency *gridadj, void **gridfaces, struct GridKey *gridkey);
+/* vertex deformer */
+float (*BLI_pbvh_get_vertCos(struct PBVH *pbvh))[3];
+void BLI_pbvh_apply_vertCos(struct PBVH *pbvh, float (*vertCos)[3]);
+int BLI_pbvh_isDeformed(struct PBVH *pbvh);
+
+
/* Vertex Iterator */
/* this iterator has quite a lot of code, but it's designed to:
diff --git a/source/blender/blenlib/intern/BLI_bfile.c b/source/blender/blenlib/intern/BLI_bfile.c
index dc593e23bdc..2330beb618d 100644
--- a/source/blender/blenlib/intern/BLI_bfile.c
+++ b/source/blender/blenlib/intern/BLI_bfile.c
@@ -34,6 +34,7 @@
#else
#include <io.h>
#include "BLI_winstuff.h"
+ static char* find_in_pathlist(char* filename, char* pathlist);
#endif
#include <sys/types.h>
#include <sys/stat.h>
@@ -66,7 +67,6 @@
static void chomp(char* line);
static void expand_envvars(char* src, char* dst);
static void fill_paths(BFILE *bfile, const char *path, const char *relpath);
-static char* find_in_pathlist(char* filename, char* pathlist);
static void init_vars_from_file(const char* path);
static void free_paths(BFILE* bfile);
static void setup_temp();
@@ -481,6 +481,8 @@ static void expand_envvars(char* src, char* dst) {
#else
#define SEPARATOR ':'
#endif
+
+#ifdef WIN32
static char* find_in_pathlist(char* filename, char* pathlist) {
char first[FILE_MAX + 10];
char* rest = NULL;
@@ -510,7 +512,7 @@ static char* find_in_pathlist(char* filename, char* pathlist) {
return NULL;
}
}
-
+#endif
/**
Setup fpath and tpath based in the needs of the bfile.
diff --git a/source/blender/blenlib/intern/BLI_linklist.c b/source/blender/blenlib/intern/BLI_linklist.c
index afa4d273090..c903e66057e 100644
--- a/source/blender/blenlib/intern/BLI_linklist.c
+++ b/source/blender/blenlib/intern/BLI_linklist.c
@@ -45,18 +45,28 @@ int BLI_linklist_length(LinkNode *list) {
}
}
-int BLI_linklist_index(struct LinkNode *list, void *ptr)
+int BLI_linklist_index(LinkNode *list, void *ptr)
{
int index;
- for (index = 0; list; list= list->next, index++) {
+ for (index = 0; list; list= list->next, index++)
if (list->link == ptr)
return index;
- }
return -1;
}
+LinkNode *BLI_linklist_find(LinkNode *list, int index)
+{
+ int i;
+
+ for (i = 0; list; list= list->next, i++)
+ if (i == index)
+ return list;
+
+ return NULL;
+}
+
void BLI_linklist_reverse(LinkNode **listp) {
LinkNode *rhead= NULL, *cur= *listp;
@@ -105,6 +115,22 @@ void BLI_linklist_prepend_arena(LinkNode **listp, void *ptr, MemArena *ma) {
*listp= nlink;
}
+void BLI_linklist_insert_after(LinkNode **listp, void *ptr) {
+ LinkNode *nlink= MEM_mallocN(sizeof(*nlink), "nlink");
+ LinkNode *node = *listp;
+
+ nlink->link = ptr;
+
+ if(node) {
+ nlink->next = node->next;
+ node->next = nlink;
+ }
+ else {
+ nlink->next = NULL;
+ *listp = nlink;
+ }
+}
+
void BLI_linklist_free(LinkNode *list, LinkNodeFreeFP freefunc) {
while (list) {
LinkNode *next= list->next;
diff --git a/source/blender/blenlib/intern/cpu.c b/source/blender/blenlib/intern/cpu.c
new file mode 100644
index 00000000000..65e6b34488c
--- /dev/null
+++ b/source/blender/blenlib/intern/cpu.c
@@ -0,0 +1,57 @@
+/**
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "BLI_cpu.h"
+
+int BLI_cpu_support_sse2(void)
+{
+#if defined(__x86_64__) || defined(_M_X64)
+ /* x86_64 always has SSE2 instructions */
+ return 1;
+#elif defined(__GNUC__) && defined(i386)
+ /* for GCC x86 we check cpuid */
+ unsigned int d;
+ __asm__(
+ "pushl %%ebx\n\t"
+ "cpuid\n\t"
+ "popl %%ebx\n\t"
+ : "=d"(d)
+ : "a"(1));
+ return (d & 0x04000000) != 0;
+#elif (defined(_MSC_VER) && defined(_M_IX86))
+ /* also check cpuid for MSVC x86 */
+ unsigned int d;
+ __asm {
+ xor eax, eax
+ inc eax
+ push ebx
+ cpuid
+ pop ebx
+ mov d, edx
+ }
+ return (d & 0x04000000) != 0;
+#endif
+
+ return 0;
+}
+
diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c
index 396ae7ca5ee..6e8f4622488 100644
--- a/source/blender/blenlib/intern/math_matrix.c
+++ b/source/blender/blenlib/intern/math_matrix.c
@@ -1149,3 +1149,458 @@ void print_m4(char *str, float m[][4])
printf("%f %f %f %f\n",m[0][3],m[1][3],m[2][3],m[3][3]);
printf("\n");
}
+
+/*********************************** SVD ************************************
+ * from TNT matrix library
+
+ * Compute the Single Value Decomposition of an arbitrary matrix A
+ * That is compute the 3 matrices U,W,V with U column orthogonal (m,n)
+ * ,W a diagonal matrix and V an orthogonal square matrix s.t.
+ * A = U.W.Vt. From this decomposition it is trivial to compute the
+ * (pseudo-inverse) of A as Ainv = V.Winv.tranpose(U).
+ */
+
+void svd_m4(float U[4][4], float s[4], float V[4][4], float A_[4][4])
+{
+ float A[4][4];
+ float work1[4], work2[4];
+ int m = 4;
+ int n = 4;
+ int maxiter = 200;
+ int nu = minf(m,n);
+
+ float *work = work1;
+ float *e = work2;
+ float eps;
+
+ int i=0, j=0, k=0, p, pp, iter;
+
+ // Reduce A to bidiagonal form, storing the diagonal elements
+ // in s and the super-diagonal elements in e.
+
+ int nct = minf(m-1,n);
+ int nrt = maxf(0,minf(n-2,m));
+
+ copy_m4_m4(A, A_);
+ zero_m4(U);
+ zero_v4(s);
+
+ for (k = 0; k < maxf(nct,nrt); k++) {
+ if (k < nct) {
+
+ // Compute the transformation for the k-th column and
+ // place the k-th diagonal in s[k].
+ // Compute 2-norm of k-th column without under/overflow.
+ s[k] = 0;
+ for (i = k; i < m; i++) {
+ s[k] = hypotf(s[k],A[i][k]);
+ }
+ if (s[k] != 0.0f) {
+ float invsk;
+ if (A[k][k] < 0.0f) {
+ s[k] = -s[k];
+ }
+ invsk = 1.0f/s[k];
+ for (i = k; i < m; i++) {
+ A[i][k] *= invsk;
+ }
+ A[k][k] += 1.0f;
+ }
+ s[k] = -s[k];
+ }
+ for (j = k+1; j < n; j++) {
+ if ((k < nct) && (s[k] != 0.0f)) {
+
+ // Apply the transformation.
+
+ float t = 0;
+ for (i = k; i < m; i++) {
+ t += A[i][k]*A[i][j];
+ }
+ t = -t/A[k][k];
+ for (i = k; i < m; i++) {
+ A[i][j] += t*A[i][k];
+ }
+ }
+
+ // Place the k-th row of A into e for the
+ // subsequent calculation of the row transformation.
+
+ e[j] = A[k][j];
+ }
+ if (k < nct) {
+
+ // Place the transformation in U for subsequent back
+ // multiplication.
+
+ for (i = k; i < m; i++)
+ U[i][k] = A[i][k];
+ }
+ if (k < nrt) {
+
+ // Compute the k-th row transformation and place the
+ // k-th super-diagonal in e[k].
+ // Compute 2-norm without under/overflow.
+ e[k] = 0;
+ for (i = k+1; i < n; i++) {
+ e[k] = hypotf(e[k],e[i]);
+ }
+ if (e[k] != 0.0f) {
+ float invek;
+ if (e[k+1] < 0.0f) {
+ e[k] = -e[k];
+ }
+ invek = 1.0f/e[k];
+ for (i = k+1; i < n; i++) {
+ e[i] *= invek;
+ }
+ e[k+1] += 1.0f;
+ }
+ e[k] = -e[k];
+ if ((k+1 < m) & (e[k] != 0.0f)) {
+ float invek1;
+
+ // Apply the transformation.
+
+ for (i = k+1; i < m; i++) {
+ work[i] = 0.0f;
+ }
+ for (j = k+1; j < n; j++) {
+ for (i = k+1; i < m; i++) {
+ work[i] += e[j]*A[i][j];
+ }
+ }
+ invek1 = 1.0f/e[k+1];
+ for (j = k+1; j < n; j++) {
+ float t = -e[j]*invek1;
+ for (i = k+1; i < m; i++) {
+ A[i][j] += t*work[i];
+ }
+ }
+ }
+
+ // Place the transformation in V for subsequent
+ // back multiplication.
+
+ for (i = k+1; i < n; i++)
+ V[i][k] = e[i];
+ }
+ }
+
+ // Set up the final bidiagonal matrix or order p.
+
+ p = minf(n,m+1);
+ if (nct < n) {
+ s[nct] = A[nct][nct];
+ }
+ if (m < p) {
+ s[p-1] = 0.0f;
+ }
+ if (nrt+1 < p) {
+ e[nrt] = A[nrt][p-1];
+ }
+ e[p-1] = 0.0f;
+
+ // If required, generate U.
+
+ for (j = nct; j < nu; j++) {
+ for (i = 0; i < m; i++) {
+ U[i][j] = 0.0f;
+ }
+ U[j][j] = 1.0f;
+ }
+ for (k = nct-1; k >= 0; k--) {
+ if (s[k] != 0.0f) {
+ for (j = k+1; j < nu; j++) {
+ float t = 0;
+ for (i = k; i < m; i++) {
+ t += U[i][k]*U[i][j];
+ }
+ t = -t/U[k][k];
+ for (i = k; i < m; i++) {
+ U[i][j] += t*U[i][k];
+ }
+ }
+ for (i = k; i < m; i++ ) {
+ U[i][k] = -U[i][k];
+ }
+ U[k][k] = 1.0f + U[k][k];
+ for (i = 0; i < k-1; i++) {
+ U[i][k] = 0.0f;
+ }
+ } else {
+ for (i = 0; i < m; i++) {
+ U[i][k] = 0.0f;
+ }
+ U[k][k] = 1.0f;
+ }
+ }
+
+ // If required, generate V.
+
+ for (k = n-1; k >= 0; k--) {
+ if ((k < nrt) & (e[k] != 0.0f)) {
+ for (j = k+1; j < nu; j++) {
+ float t = 0;
+ for (i = k+1; i < n; i++) {
+ t += V[i][k]*V[i][j];
+ }
+ t = -t/V[k+1][k];
+ for (i = k+1; i < n; i++) {
+ V[i][j] += t*V[i][k];
+ }
+ }
+ }
+ for (i = 0; i < n; i++) {
+ V[i][k] = 0.0f;
+ }
+ V[k][k] = 1.0f;
+ }
+
+ // Main iteration loop for the singular values.
+
+ pp = p-1;
+ iter = 0;
+ eps = powf(2.0f,-52.0f);
+ while (p > 0) {
+ int kase=0;
+ k=0;
+
+ // Test for maximum iterations to avoid infinite loop
+ if(maxiter == 0)
+ break;
+ maxiter--;
+
+ // This section of the program inspects for
+ // negligible elements in the s and e arrays. On
+ // completion the variables kase and k are set as follows.
+
+ // kase = 1 if s(p) and e[k-1] are negligible and k<p
+ // kase = 2 if s(k) is negligible and k<p
+ // kase = 3 if e[k-1] is negligible, k<p, and
+ // s(k), ..., s(p) are not negligible (qr step).
+ // kase = 4 if e(p-1) is negligible (convergence).
+
+ for (k = p-2; k >= -1; k--) {
+ if (k == -1) {
+ break;
+ }
+ if (fabsf(e[k]) <= eps*(fabsf(s[k]) + fabsf(s[k+1]))) {
+ e[k] = 0.0f;
+ break;
+ }
+ }
+ if (k == p-2) {
+ kase = 4;
+ } else {
+ int ks;
+ for (ks = p-1; ks >= k; ks--) {
+ float t;
+ if (ks == k) {
+ break;
+ }
+ t = (ks != p ? fabsf(e[ks]) : 0.f) +
+ (ks != k+1 ? fabsf(e[ks-1]) : 0.0f);
+ if (fabsf(s[ks]) <= eps*t) {
+ s[ks] = 0.0f;
+ break;
+ }
+ }
+ if (ks == k) {
+ kase = 3;
+ } else if (ks == p-1) {
+ kase = 1;
+ } else {
+ kase = 2;
+ k = ks;
+ }
+ }
+ k++;
+
+ // Perform the task indicated by kase.
+
+ switch (kase) {
+
+ // Deflate negligible s(p).
+
+ case 1: {
+ float f = e[p-2];
+ e[p-2] = 0.0f;
+ for (j = p-2; j >= k; j--) {
+ float t = hypotf(s[j],f);
+ float invt = 1.0f/t;
+ float cs = s[j]*invt;
+ float sn = f*invt;
+ s[j] = t;
+ if (j != k) {
+ f = -sn*e[j-1];
+ e[j-1] = cs*e[j-1];
+ }
+
+ for (i = 0; i < n; i++) {
+ t = cs*V[i][j] + sn*V[i][p-1];
+ V[i][p-1] = -sn*V[i][j] + cs*V[i][p-1];
+ V[i][j] = t;
+ }
+ }
+ }
+ break;
+
+ // Split at negligible s(k).
+
+ case 2: {
+ float f = e[k-1];
+ e[k-1] = 0.0f;
+ for (j = k; j < p; j++) {
+ float t = hypotf(s[j],f);
+ float invt = 1.0f/t;
+ float cs = s[j]*invt;
+ float sn = f*invt;
+ s[j] = t;
+ f = -sn*e[j];
+ e[j] = cs*e[j];
+
+ for (i = 0; i < m; i++) {
+ t = cs*U[i][j] + sn*U[i][k-1];
+ U[i][k-1] = -sn*U[i][j] + cs*U[i][k-1];
+ U[i][j] = t;
+ }
+ }
+ }
+ break;
+
+ // Perform one qr step.
+
+ case 3: {
+
+ // Calculate the shift.
+
+ float scale = maxf(maxf(maxf(maxf(
+ fabsf(s[p-1]),fabsf(s[p-2])),fabsf(e[p-2])),
+ fabsf(s[k])),fabsf(e[k]));
+ float invscale = 1.0f/scale;
+ float sp = s[p-1]*invscale;
+ float spm1 = s[p-2]*invscale;
+ float epm1 = e[p-2]*invscale;
+ float sk = s[k]*invscale;
+ float ek = e[k]*invscale;
+ float b = ((spm1 + sp)*(spm1 - sp) + epm1*epm1)*0.5f;
+ float c = (sp*epm1)*(sp*epm1);
+ float shift = 0.0f;
+ float f, g;
+ if ((b != 0.0f) || (c != 0.0f)) {
+ shift = sqrtf(b*b + c);
+ if (b < 0.0f) {
+ shift = -shift;
+ }
+ shift = c/(b + shift);
+ }
+ f = (sk + sp)*(sk - sp) + shift;
+ g = sk*ek;
+
+ // Chase zeros.
+
+ for (j = k; j < p-1; j++) {
+ float t = hypotf(f,g);
+ /* division by zero checks added to avoid NaN (brecht) */
+ float cs = (t == 0.0f)? 0.0f: f/t;
+ float sn = (t == 0.0f)? 0.0f: g/t;
+ if (j != k) {
+ e[j-1] = t;
+ }
+ f = cs*s[j] + sn*e[j];
+ e[j] = cs*e[j] - sn*s[j];
+ g = sn*s[j+1];
+ s[j+1] = cs*s[j+1];
+
+ for (i = 0; i < n; i++) {
+ t = cs*V[i][j] + sn*V[i][j+1];
+ V[i][j+1] = -sn*V[i][j] + cs*V[i][j+1];
+ V[i][j] = t;
+ }
+
+ t = hypotf(f,g);
+ /* division by zero checks added to avoid NaN (brecht) */
+ cs = (t == 0.0f)? 0.0f: f/t;
+ sn = (t == 0.0f)? 0.0f: g/t;
+ s[j] = t;
+ f = cs*e[j] + sn*s[j+1];
+ s[j+1] = -sn*e[j] + cs*s[j+1];
+ g = sn*e[j+1];
+ e[j+1] = cs*e[j+1];
+ if (j < m-1) {
+ for (i = 0; i < m; i++) {
+ t = cs*U[i][j] + sn*U[i][j+1];
+ U[i][j+1] = -sn*U[i][j] + cs*U[i][j+1];
+ U[i][j] = t;
+ }
+ }
+ }
+ e[p-2] = f;
+ iter = iter + 1;
+ }
+ break;
+
+ // Convergence.
+
+ case 4: {
+
+ // Make the singular values positive.
+
+ if (s[k] <= 0.0f) {
+ s[k] = (s[k] < 0.0f ? -s[k] : 0.0f);
+
+ for (i = 0; i <= pp; i++)
+ V[i][k] = -V[i][k];
+ }
+
+ // Order the singular values.
+
+ while (k < pp) {
+ float t;
+ if (s[k] >= s[k+1]) {
+ break;
+ }
+ t = s[k];
+ s[k] = s[k+1];
+ s[k+1] = t;
+ if (k < n-1) {
+ for (i = 0; i < n; i++) {
+ t = V[i][k+1]; V[i][k+1] = V[i][k]; V[i][k] = t;
+ }
+ }
+ if (k < m-1) {
+ for (i = 0; i < m; i++) {
+ t = U[i][k+1]; U[i][k+1] = U[i][k]; U[i][k] = t;
+ }
+ }
+ k++;
+ }
+ iter = 0;
+ p--;
+ }
+ break;
+ }
+ }
+}
+
+void pseudoinverse_m4_m4(float Ainv[4][4], float A[4][4], float epsilon)
+{
+ /* compute moon-penrose pseudo inverse of matrix, singular values
+ below epsilon are ignored for stability (truncated SVD) */
+ float V[4][4], W[4], Wm[4][4], U[4][4];
+ int i;
+
+ transpose_m4(A);
+ svd_m4(V, W, U, A);
+ transpose_m4(U);
+ transpose_m4(V);
+
+ zero_m4(Wm);
+ for(i=0; i<4; i++)
+ Wm[i][i]= (W[i] < epsilon)? 0.0f: 1.0f/W[i];
+
+ transpose_m4(V);
+
+ mul_serie_m4(Ainv, U, Wm, V, 0, 0, 0, 0, 0);
+}
diff --git a/source/blender/blenlib/intern/noise.c b/source/blender/blenlib/intern/noise.c
index d6b8582ef26..141e5438bc9 100644
--- a/source/blender/blenlib/intern/noise.c
+++ b/source/blender/blenlib/intern/noise.c
@@ -199,8 +199,15 @@ float hashvectf[768]= {
/* IMPROVED PERLIN NOISE */
/**************************/
-#define lerp(t, a, b) ((a)+(t)*((b)-(a)))
-#define npfade(t) ((t)*(t)*(t)*((t)*((t)*6-15)+10))
+static float lerp(float t, float a, float b)
+{
+ return (a+t*(b-a));
+}
+
+static float npfade(float t)
+{
+ return (t*t*t*(t*(t*6.0f-15.0f)+10.0f));
+}
static float grad(int hash, float x, float y, float z)
{
diff --git a/source/blender/blenlib/intern/pbvh.c b/source/blender/blenlib/intern/pbvh.c
index 0869ad0c320..5aa45157cfe 100644
--- a/source/blender/blenlib/intern/pbvh.c
+++ b/source/blender/blenlib/intern/pbvh.c
@@ -29,6 +29,7 @@
#include "BKE_DerivedMesh.h"
#include "BKE_subsurf.h"
+#include "BKE_mesh.h" /* for mesh_calc_normals */
#include "gpu_buffers.h"
@@ -126,6 +127,9 @@ struct PBVH {
#ifdef PERFCNTRS
int perf_modified;
#endif
+
+ /* flag are verts/faces deformed */
+ int deformed;
};
#define STACK_FIXED_DEPTH 100
@@ -663,6 +667,15 @@ static void pbvh_free_nodes(PBVH *bvh)
}
}
+ if (bvh->deformed) {
+ if (bvh->verts) {
+ /* if pbvh was deformed, new memory was allocated for verts/faces -- free it */
+
+ MEM_freeN(bvh->verts);
+ MEM_freeN(bvh->faces);
+ }
+ }
+
MEM_freeN(bvh->nodes);
}
@@ -1413,3 +1426,55 @@ void BLI_pbvh_grids_update(PBVH *bvh, DMGridData **grids,
bvh->gridkey= gridkey;
}
+float (*BLI_pbvh_get_vertCos(PBVH *pbvh))[3]
+{
+ int a;
+ float (*vertCos)[3]= NULL;
+
+ if (pbvh->verts) {
+ float *co;
+ MVert *mvert= pbvh->verts;
+
+ vertCos= MEM_callocN(3*pbvh->totvert*sizeof(float), "BLI_pbvh_get_vertCoords");
+ co= (float*)vertCos;
+
+ for (a= 0; a<pbvh->totvert; a++, mvert++, co+= 3) {
+ copy_v3_v3(co, mvert->co);
+ }
+ }
+
+ return vertCos;
+}
+
+void BLI_pbvh_apply_vertCos(PBVH *pbvh, float (*vertCos)[3])
+{
+ int a;
+
+ if (!pbvh->deformed) {
+ if (pbvh->verts) {
+ /* if pbvh is not already deformed, verts/faces points to the */
+ /* original data and applying new coords to this arrays would lead to */
+ /* unneeded deformation -- duplicate verts/faces to avoid this */
+
+ pbvh->verts= MEM_dupallocN(pbvh->verts);
+ pbvh->faces= MEM_dupallocN(pbvh->faces);
+
+ pbvh->deformed= 1;
+ }
+ }
+
+ if (pbvh->verts) {
+ /* copy new verts coords */
+ for (a= 0; a < pbvh->totvert; ++a) {
+ copy_v3_v3(pbvh->verts[a].co, vertCos[a]);
+ }
+
+ /* coordinates are new -- normals should also be updated */
+ mesh_calc_normals(pbvh->verts, pbvh->totvert, pbvh->faces, pbvh->totprim, NULL);
+ }
+}
+
+int BLI_pbvh_isDeformed(PBVH *pbvh)
+{
+ return pbvh->deformed;
+}
diff --git a/source/blender/blenlib/intern/threads.c b/source/blender/blenlib/intern/threads.c
index 0ad6f84e8f0..726ed817f8b 100644
--- a/source/blender/blenlib/intern/threads.c
+++ b/source/blender/blenlib/intern/threads.c
@@ -158,20 +158,20 @@ void BLI_init_threads(ListBase *threadbase, void *(*do_thread)(void *), int tot)
tslot->do_thread= do_thread;
tslot->avail= 1;
}
-
- if(thread_levels == 0) {
- MEM_set_lock_callback(BLI_lock_malloc_thread, BLI_unlock_malloc_thread);
+ }
+
+ if(thread_levels == 0) {
+ MEM_set_lock_callback(BLI_lock_malloc_thread, BLI_unlock_malloc_thread);
#if defined(__APPLE__) && (PARALLEL == 1) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 2)
- /* workaround for Apple gcc 4.2.1 omp vs background thread bug,
- we copy gomp thread local storage pointer to setting it again
- inside the thread that we start */
- thread_tls_data = pthread_getspecific(gomp_tls_key);
+ /* workaround for Apple gcc 4.2.1 omp vs background thread bug,
+ we copy gomp thread local storage pointer to setting it again
+ inside the thread that we start */
+ thread_tls_data = pthread_getspecific(gomp_tls_key);
#endif
- }
-
- thread_levels++;
}
+
+ thread_levels++;
}
/* amount of available threads */
@@ -287,11 +287,11 @@ void BLI_end_threads(ListBase *threadbase)
}
}
BLI_freelistN(threadbase);
-
- thread_levels--;
- if(thread_levels==0)
- MEM_set_lock_callback(NULL, NULL);
}
+
+ thread_levels--;
+ if(thread_levels==0)
+ MEM_set_lock_callback(NULL, NULL);
}
/* System Information */
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 76ec117e947..2bf47fe65d3 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -4564,6 +4564,7 @@ static void lib_link_screen(FileData *fd, Main *main)
if(sc->id.flag & LIB_NEEDLINK) {
sc->id.us= 1;
sc->scene= newlibadr(fd, sc->id.lib, sc->scene);
+ sc->animtimer= NULL; /* saved in rare cases */
sa= sc->areabase.first;
while(sa) {
@@ -5166,6 +5167,10 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
}
snode->nodetree= snode->edittree= NULL;
}
+ else if(sl->spacetype==SPACE_TIME) {
+ SpaceTime *stime= (SpaceTime *)sl;
+ stime->caches.first= stime->caches.last= NULL;
+ }
else if(sl->spacetype==SPACE_LOGIC) {
SpaceLogic *slogic= (SpaceLogic *)sl;
@@ -10862,14 +10867,21 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
SpaceLink *sl;
for (sl= sa->spacedata.first; sl; sl= sl->next) {
if (sl->spacetype == SPACE_NODE) {
- SpaceNode *snode;
-
- snode= (SpaceNode *)sl;
+ SpaceNode *snode= (SpaceNode *)sl;
+
if (snode->v2d.minzoom > 0.09f)
snode->v2d.minzoom= 0.09f;
if (snode->v2d.maxzoom < 2.31f)
snode->v2d.maxzoom= 2.31f;
}
+ else if (sl->spacetype == SPACE_TIME) {
+ SpaceTime *stime= (SpaceTime *)sl;
+
+ /* enable all cache display */
+ stime->cache_display |= TIME_CACHE_DISPLAY;
+ stime->cache_display |= (TIME_CACHE_SOFTBODY|TIME_CACHE_PARTICLES);
+ stime->cache_display |= (TIME_CACHE_CLOTH|TIME_CACHE_SMOKE);
+ }
}
}
}
diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp
index b4185c5021f..a415b90ff08 100644
--- a/source/blender/collada/DocumentImporter.cpp
+++ b/source/blender/collada/DocumentImporter.cpp
@@ -1543,7 +1543,7 @@ private:
vert += 3;
}
- filldisplist(&dispbase, &dispbase);
+ filldisplist(&dispbase, &dispbase, 0);
int tottri = 0;
dl= (DispList*)dispbase.first;
diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c
index 88d6051b23b..11ba3cfffed 100644
--- a/source/blender/editors/animation/anim_ops.c
+++ b/source/blender/editors/animation/anim_ops.c
@@ -69,6 +69,7 @@ static void change_frame_apply(bContext *C, wmOperator *op)
/* set the new frame number */
CFRA= RNA_int_get(op->ptr, "frame");
FRAMENUMBER_MIN_CLAMP(CFRA);
+ SUBFRA = 0.f;
/* do updates */
sound_seek_scene(C);
diff --git a/source/blender/editors/armature/CMakeLists.txt b/source/blender/editors/armature/CMakeLists.txt
index f9136b69d9e..9e22bbd7d44 100644
--- a/source/blender/editors/armature/CMakeLists.txt
+++ b/source/blender/editors/armature/CMakeLists.txt
@@ -27,7 +27,6 @@ SET(INC
../../blenlib
../../makesdna
../../makesrna
- ../../render/extern/include
../../windowmanager
../../../../intern/guardedalloc
../../../../intern/opennl/extern
diff --git a/source/blender/editors/armature/Makefile b/source/blender/editors/armature/Makefile
index 0291bcb1830..4838282de92 100644
--- a/source/blender/editors/armature/Makefile
+++ b/source/blender/editors/armature/Makefile
@@ -50,7 +50,6 @@ CPPFLAGS += -I../../imbuf
CPPFLAGS += -I../../python
CPPFLAGS += -I../../gpu
CPPFLAGS += -I../../makesrna
-CPPFLAGS += -I../../render/extern/include
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
# own include
diff --git a/source/blender/editors/armature/SConscript b/source/blender/editors/armature/SConscript
index fd4b885b730..33e237a14db 100644
--- a/source/blender/editors/armature/SConscript
+++ b/source/blender/editors/armature/SConscript
@@ -5,7 +5,6 @@ sources = env.Glob('*.c')
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
-incs += ' ../../render/extern/include'
incs += ' ../../gpu ../../makesrna #/intern/opennl/extern'
if env['OURPLATFORM'] == 'linux2':
diff --git a/source/blender/editors/armature/meshlaplacian.c b/source/blender/editors/armature/meshlaplacian.c
index 1b1448477ea..546a15467c4 100644
--- a/source/blender/editors/armature/meshlaplacian.c
+++ b/source/blender/editors/armature/meshlaplacian.c
@@ -52,8 +52,6 @@
#include "BLI_polardecomp.h"
#endif
-#include "RE_raytrace.h"
-
#include "ONL_opennl.h"
#include "BLO_sys_types.h" // for intptr_t support
@@ -107,8 +105,7 @@ struct LaplacianSystem {
float *p; /* values from all p vectors */
float *mindist; /* minimum distance to a bone for all vertices */
- RayObject *raytree; /* ray tracing acceleration structure */
- RayFace *faces; /* faces to add to the ray tracing struture */
+ BVHTree *bvhtree; /* ray tracing acceleration structure */
MFace **vface; /* a face that the vertex belongs to */
} heat;
@@ -396,29 +393,65 @@ float laplacian_system_get_solution(int v)
#define WEIGHT_LIMIT_END 0.025f
#define DISTANCE_EPSILON 1e-4f
+typedef struct BVHCallbackUserData {
+ float start[3];
+ float vec[3];
+ LaplacianSystem *sys;
+} BVHCallbackUserData;
+
+static void bvh_callback(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
+{
+ BVHCallbackUserData *data = (struct BVHCallbackUserData*)userdata;
+ MFace *mf = data->sys->heat.mface + index;
+ float (*verts)[3] = data->sys->heat.verts;
+ float lambda, uv[2], n[3], dir[3];
+
+ mul_v3_v3fl(dir, data->vec, hit->dist);
+
+ if(isect_ray_tri_v3(data->start, dir, verts[mf->v1], verts[mf->v2], verts[mf->v3], &lambda, uv)) {
+ normal_tri_v3(n, verts[mf->v1], verts[mf->v2], verts[mf->v3]);
+ if(lambda < 1.0f && dot_v3v3(n, data->vec) < -1e-5f) {
+ hit->index = index;
+ hit->dist *= lambda;
+ }
+ }
+
+ mul_v3_v3fl(dir, data->vec, hit->dist);
+
+ if(isect_ray_tri_v3(data->start, dir, verts[mf->v1], verts[mf->v3], verts[mf->v4], &lambda, uv)) {
+ normal_tri_v3(n, verts[mf->v1], verts[mf->v3], verts[mf->v4]);
+ if(lambda < 1.0f && dot_v3v3(n, data->vec) < -1e-5f) {
+ hit->index = index;
+ hit->dist *= lambda;
+ }
+ }
+}
+
/* Raytracing for vertex to bone/vertex visibility */
static void heat_ray_tree_create(LaplacianSystem *sys)
{
MFace *mface = sys->heat.mface;
+ float (*verts)[3] = sys->heat.verts;
int totface = sys->heat.totface;
int totvert = sys->heat.totvert;
int a;
- sys->heat.raytree = RE_rayobject_vbvh_create(totface);
- sys->heat.faces = MEM_callocN(sizeof(RayFace)*totface, "Heat RayFaces");
+ sys->heat.bvhtree = BLI_bvhtree_new(totface, 0.0f, 4, 6);
sys->heat.vface = MEM_callocN(sizeof(MFace*)*totvert, "HeatVFaces");
for(a=0; a<totface; a++) {
-
MFace *mf = mface+a;
- RayFace *rayface = sys->heat.faces+a;
-
- RayObject *obj = RE_rayface_from_coords(
- rayface, &sys->heat, mf,
- sys->heat.verts[mf->v1], sys->heat.verts[mf->v2],
- sys->heat.verts[mf->v3], mf->v4 ? sys->heat.verts[mf->v4] : 0
- );
- RE_rayobject_add(sys->heat.raytree, obj);
+ float bb[6];
+
+ INIT_MINMAX(bb, bb+3);
+ DO_MINMAX(verts[mf->v1], bb, bb+3);
+ DO_MINMAX(verts[mf->v2], bb, bb+3);
+ DO_MINMAX(verts[mf->v3], bb, bb+3);
+ if(mf->v4) {
+ DO_MINMAX(verts[mf->v4], bb, bb+3);
+ }
+
+ BLI_bvhtree_insert(sys->heat.bvhtree, a, bb, 2);
//Setup inverse pointers to use on isect.orig
sys->heat.vface[mf->v1]= mf;
@@ -426,12 +459,14 @@ static void heat_ray_tree_create(LaplacianSystem *sys)
sys->heat.vface[mf->v3]= mf;
if(mf->v4) sys->heat.vface[mf->v4]= mf;
}
- RE_rayobject_done(sys->heat.raytree);
+
+ BLI_bvhtree_balance(sys->heat.bvhtree);
}
static int heat_ray_source_visible(LaplacianSystem *sys, int vertex, int source)
{
- Isect isec;
+ BVHTreeRayHit hit;
+ BVHCallbackUserData data;
MFace *mface;
float end[3];
int visible;
@@ -440,27 +475,24 @@ static int heat_ray_source_visible(LaplacianSystem *sys, int vertex, int source)
if(!mface)
return 1;
- /* setup isec */
- memset(&isec, 0, sizeof(isec));
- isec.mode= RE_RAY_SHADOW;
- isec.lay= -1;
- isec.orig.ob = &sys->heat;
- isec.orig.face = mface;
- isec.skip = RE_SKIP_CULLFACE;
-
- copy_v3_v3(isec.start, sys->heat.verts[vertex]);
+ data.sys= sys;
+ copy_v3_v3(data.start, sys->heat.verts[vertex]);
if(sys->heat.root) /* bone */
- closest_to_line_segment_v3(end, isec.start,
+ closest_to_line_segment_v3(end, data.start,
sys->heat.root[source], sys->heat.tip[source]);
else /* vertex */
copy_v3_v3(end, sys->heat.source[source]);
- sub_v3_v3v3(isec.vec, end, isec.start);
- isec.labda = 1.0f - 1e-5;
- madd_v3_v3v3fl(isec.start, isec.start, isec.vec, 1e-5);
+ sub_v3_v3v3(data.vec, end, data.start);
+ madd_v3_v3v3fl(data.start, data.start, data.vec, 1e-5);
+ mul_v3_fl(data.vec, 1.0f - 2e-5);
- visible= !RE_rayobject_raycast(sys->heat.raytree, &isec);
+ /* pass normalized vec + distance to bvh */
+ hit.index = -1;
+ hit.dist = normalize_v3(data.vec);
+
+ visible= BLI_bvhtree_ray_cast(sys->heat.bvhtree, data.start, data.vec, 0.0f, &hit, bvh_callback, (void*)&data) == -1;
return visible;
}
@@ -587,9 +619,8 @@ static void heat_laplacian_create(LaplacianSystem *sys)
static void heat_system_free(LaplacianSystem *sys)
{
- RE_rayobject_free(sys->heat.raytree);
+ BLI_bvhtree_free(sys->heat.bvhtree);
MEM_freeN(sys->heat.vface);
- MEM_freeN(sys->heat.faces);
MEM_freeN(sys->heat.mindist);
MEM_freeN(sys->heat.H);
@@ -1050,11 +1081,19 @@ typedef struct MeshDeformBind {
/* direct solver */
int *varidx;
-
- /* raytrace */
- RayObject *raytree;
} MeshDeformBind;
+typedef struct MeshDeformIsect {
+ float start[3];
+ float vec[3];
+ float labda;
+
+ void *face;
+ int isect;
+ float u, v;
+
+} MeshDeformIsect;
+
/* ray intersection */
/* our own triangle intersection, so we can fully control the epsilons and
@@ -1117,63 +1156,7 @@ static int meshdeform_tri_intersect(float orig[3], float end[3], float vert0[3],
return 1;
}
-/* blender's raytracer is not use now, even though it is much faster. it can
- * give problems with rays falling through, so we use our own intersection
- * function above with tweaked epsilons */
-
-#if 0
-static MeshDeformBind *MESHDEFORM_BIND = NULL;
-
-static void meshdeform_ray_coords_func(RayFace *face, float **v1, float **v2, float **v3, float **v4)
-{
- MFace *mface= (MFace*)face;
- float (*cagecos)[3]= MESHDEFORM_BIND->cagecos;
-
- *v1= cagecos[mface->v1];
- *v2= cagecos[mface->v2];
- *v3= cagecos[mface->v3];
- *v4= (mface->v4)? cagecos[mface->v4]: NULL;
-}
-
-static int meshdeform_ray_check_func(Isect *is, RayFace *face)
-{
- return 1;
-}
-
-static void meshdeform_ray_tree_create(MeshDeformBind *mdb)
-{
- MFace *mface;
- float min[3], max[3];
- int a, totface;
-
- /* create a raytrace tree from the mesh */
- INIT_MINMAX(min, max);
-
- for(a=0; a<mdb->totcagevert; a++)
- DO_MINMAX(mdb->cagecos[a], min, max)
-
- MESHDEFORM_BIND= mdb;
-
- mface= mdb->cagedm->getFaceArray(mdb->cagedm);
- totface= mdb->cagedm->getNumFaces(mdb->cagedm);
-
- mdb->raytree= RE_ray_tree_create(64, totface, min, max,
- meshdeform_ray_coords_func, meshdeform_ray_check_func);
-
- for(a=0; a<totface; a++, mface++)
- RE_ray_tree_add_face(mdb->raytree, mface);
-
- RE_ray_tree_done(mdb->raytree);
-}
-
-static void meshdeform_ray_tree_free(MeshDeformBind *mdb)
-{
- MESHDEFORM_BIND= NULL;
- RE_ray_tree_free(mdb->raytree);
-}
-#endif
-
-static int meshdeform_intersect(MeshDeformBind *mdb, Isect *isec)
+static int meshdeform_intersect(MeshDeformBind *mdb, MeshDeformIsect *isec)
{
MFace *mface;
float face[4][3], co[3], uvw[3], len, nor[3], end[3];
@@ -1212,7 +1195,7 @@ static int meshdeform_intersect(MeshDeformBind *mdb, Isect *isec)
len= len_v3v3(isec->start, co)/len_v3v3(isec->start, end);
if(len < isec->labda) {
isec->labda= len;
- isec->hit.face = mface;
+ isec->face = mface;
isec->isect= (INPR(isec->vec, nor) <= 0.0f);
is= 1;
}
@@ -1225,7 +1208,7 @@ static int meshdeform_intersect(MeshDeformBind *mdb, Isect *isec)
static MDefBoundIsect *meshdeform_ray_tree_intersect(MeshDeformBind *mdb, float *co1, float *co2)
{
MDefBoundIsect *isect;
- Isect isec;
+ MeshDeformIsect isec;
float (*cagecos)[3];
MFace *mface;
float vert[4][3], len, end[3];
@@ -1233,21 +1216,15 @@ static MDefBoundIsect *meshdeform_ray_tree_intersect(MeshDeformBind *mdb, float
/* setup isec */
memset(&isec, 0, sizeof(isec));
- isec.mode= RE_RAY_MIRROR; /* we want the closest intersection */
- isec.lay= -1;
isec.labda= 1e10f;
VECADD(isec.start, co1, epsilon);
VECADD(end, co2, epsilon);
sub_v3_v3v3(isec.vec, end, isec.start);
-#if 0
- /*if(RE_ray_tree_intersect(mdb->raytree, &isec)) {*/
-#endif
-
if(meshdeform_intersect(mdb, &isec)) {
len= isec.labda;
- mface=(MFace*)isec.hit.face;
+ mface=(MFace*)isec.face;
/* create MDefBoundIsect */
isect= BLI_memarena_alloc(mdb->memarena, sizeof(*isect));
@@ -1790,11 +1767,6 @@ static void harmonic_coordinates_bind(Scene *scene, MeshDeformModifierData *mmd,
progress_bar(0, "Setting up mesh deform system");
-#if 0
- /* create ray tree */
- meshdeform_ray_tree_create(mdb);
-#endif
-
totinside= 0;
for(a=0; a<mdb->totvert; a++) {
copy_v3_v3(vec, mdb->vertexcos[a]);
@@ -1817,11 +1789,6 @@ static void harmonic_coordinates_bind(Scene *scene, MeshDeformModifierData *mmd,
for(x=0; x<mdb->size; x++)
meshdeform_add_intersections(mdb, x, y, z);
-#if 0
- /* free ray tree */
- meshdeform_ray_tree_free(mdb);
-#endif
-
/* compute exterior and interior tags */
meshdeform_bind_floodfill(mdb);
diff --git a/source/blender/editors/curve/curve_intern.h b/source/blender/editors/curve/curve_intern.h
index dc07822bde2..10c1bd84262 100644
--- a/source/blender/editors/curve/curve_intern.h
+++ b/source/blender/editors/curve/curve_intern.h
@@ -66,6 +66,9 @@ void FONT_OT_change_spacing(struct wmOperatorType *ot);
void FONT_OT_open(struct wmOperatorType *ot);
void FONT_OT_unlink(struct wmOperatorType *ot);
+void FONT_OT_textbox_add(struct wmOperatorType *ot);
+void FONT_OT_textbox_remove(struct wmOperatorType *ot);
+
/* editcurve.c */
void CURVE_OT_hide(struct wmOperatorType *ot);
void CURVE_OT_reveal(struct wmOperatorType *ot);
diff --git a/source/blender/editors/curve/curve_ops.c b/source/blender/editors/curve/curve_ops.c
index 7586023d012..026a10c013c 100644
--- a/source/blender/editors/curve/curve_ops.c
+++ b/source/blender/editors/curve/curve_ops.c
@@ -81,6 +81,9 @@ void ED_operatortypes_curve(void)
WM_operatortype_append(FONT_OT_open);
WM_operatortype_append(FONT_OT_unlink);
+
+ WM_operatortype_append(FONT_OT_textbox_add);
+ WM_operatortype_append(FONT_OT_textbox_remove);
WM_operatortype_append(CURVE_OT_hide);
WM_operatortype_append(CURVE_OT_reveal);
diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c
index 7e8154f9381..186f3f20082 100644
--- a/source/blender/editors/curve/editcurve.c
+++ b/source/blender/editors/curve/editcurve.c
@@ -5219,8 +5219,8 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newname)
float tmp_vec[3] = {0.f, 0.f, 0.f};
if(newname) {
- rename_id((ID *)obedit, "SurfDonut");
- rename_id((ID *)obedit->data, "SurfDonut");
+ rename_id((ID *)obedit, "SurfTorus");
+ rename_id((ID *)obedit->data, "SurfTorus");
}
xzproj= 1;
@@ -5256,54 +5256,62 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newname)
return nu;
}
-static int curve_prim_add(bContext *C, wmOperator *op, int type){
+static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf) {
Object *obedit= CTX_data_edit_object(C);
ListBase *editnurb;
Nurb *nu;
- int newob= 0;//, type= RNA_enum_get(op->ptr, "type");
+ int newob= 0;
int enter_editmode;
unsigned int layer;
float loc[3], rot[3];
float mat[4][4];
-
- //object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
+
if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
return OPERATOR_CANCELLED;
-
- if(obedit==NULL || obedit->type!=OB_CURVE) {
- Curve *cu;
- obedit= ED_object_add_type(C, OB_CURVE, loc, rot, TRUE, layer);
- newob = 1;
-
- cu= (Curve*)obedit->data;
- cu->flag |= CU_DEFORM_FILL;
- if(type & CU_PRIM_PATH)
- cu->flag |= CU_PATH|CU_3D;
- }
- else if(obedit==NULL || obedit->type!=OB_SURF) {
- obedit= ED_object_add_type(C, OB_SURF, loc, rot, TRUE, layer);
- newob = 1;
+ if (!isSurf) { /* adding curve */
+ if(obedit==NULL || obedit->type!=OB_CURVE) {
+ Curve *cu;
+ obedit= ED_object_add_type(C, OB_CURVE, loc, rot, TRUE, layer);
+ newob = 1;
+
+ cu= (Curve*)obedit->data;
+ cu->flag |= CU_DEFORM_FILL;
+ if(type & CU_PRIM_PATH)
+ cu->flag |= CU_PATH|CU_3D;
+ } else DAG_id_flush_update(&obedit->id, OB_RECALC_DATA);
+ } else { /* adding surface */
+ if(obedit==NULL || obedit->type!=OB_SURF) {
+ obedit= ED_object_add_type(C, OB_SURF, loc, rot, TRUE, layer);
+ newob = 1;
+ } else DAG_id_flush_update(&obedit->id, OB_RECALC_DATA);
}
- else DAG_id_flush_update(&obedit->id, OB_RECALC_DATA);
-
-
+
ED_object_new_primitive_matrix(C, obedit, loc, rot, mat);
-
+
nu= add_nurbs_primitive(C, mat, type, newob);
editnurb= curve_get_editcurve(obedit);
BLI_addtail(editnurb, nu);
-
+
/* userdef */
if (newob && !enter_editmode) {
ED_object_exit_editmode(C, EM_FREEDATA);
}
-
+
WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, obedit);
-
+
return OPERATOR_FINISHED;
}
+
+static int curve_prim_add(bContext *C, wmOperator *op, int type) {
+ return curvesurf_prim_add(C, op, type, 0);
+}
+
+static int surf_prim_add(bContext *C, wmOperator *op, int type) {
+ return curvesurf_prim_add(C, op, type, 1);
+}
+
/* ******************** Curves ******************* */
static int add_primitive_bezier_exec(bContext *C, wmOperator *op)
@@ -5424,7 +5432,7 @@ void CURVE_OT_primitive_nurbs_path_add(wmOperatorType *ot)
/* **************** NURBS surfaces ********************** */
static int add_primitive_nurbs_surface_curve_exec(bContext *C, wmOperator *op)
{
- return curve_prim_add(C, op, CU_PRIM_CURVE|CU_NURBS);
+ return surf_prim_add(C, op, CU_PRIM_CURVE|CU_NURBS);
}
void SURFACE_OT_primitive_nurbs_surface_curve_add(wmOperatorType *ot)
@@ -5447,7 +5455,7 @@ void SURFACE_OT_primitive_nurbs_surface_curve_add(wmOperatorType *ot)
static int add_primitive_nurbs_surface_circle_exec(bContext *C, wmOperator *op)
{
- return curve_prim_add(C, op, CU_PRIM_CIRCLE|CU_NURBS);
+ return surf_prim_add(C, op, CU_PRIM_CIRCLE|CU_NURBS);
}
void SURFACE_OT_primitive_nurbs_surface_circle_add(wmOperatorType *ot)
@@ -5470,7 +5478,7 @@ void SURFACE_OT_primitive_nurbs_surface_circle_add(wmOperatorType *ot)
static int add_primitive_nurbs_surface_surface_exec(bContext *C, wmOperator *op)
{
- return curve_prim_add(C, op, CU_PRIM_PATCH|CU_NURBS);
+ return surf_prim_add(C, op, CU_PRIM_PATCH|CU_NURBS);
}
void SURFACE_OT_primitive_nurbs_surface_surface_add(wmOperatorType *ot)
@@ -5493,7 +5501,7 @@ void SURFACE_OT_primitive_nurbs_surface_surface_add(wmOperatorType *ot)
static int add_primitive_nurbs_surface_tube_exec(bContext *C, wmOperator *op)
{
- return curve_prim_add(C, op, CU_PRIM_TUBE|CU_NURBS);
+ return surf_prim_add(C, op, CU_PRIM_TUBE|CU_NURBS);
}
void SURFACE_OT_primitive_nurbs_surface_tube_add(wmOperatorType *ot)
@@ -5516,7 +5524,7 @@ void SURFACE_OT_primitive_nurbs_surface_tube_add(wmOperatorType *ot)
static int add_primitive_nurbs_surface_sphere_exec(bContext *C, wmOperator *op)
{
- return curve_prim_add(C, op, CU_PRIM_SPHERE|CU_NURBS);
+ return surf_prim_add(C, op, CU_PRIM_SPHERE|CU_NURBS);
}
void SURFACE_OT_primitive_nurbs_surface_sphere_add(wmOperatorType *ot)
@@ -5539,7 +5547,7 @@ void SURFACE_OT_primitive_nurbs_surface_sphere_add(wmOperatorType *ot)
static int add_primitive_nurbs_surface_donut_exec(bContext *C, wmOperator *op)
{
- return curve_prim_add(C, op, CU_PRIM_DONUT|CU_NURBS);
+ return surf_prim_add(C, op, CU_PRIM_DONUT|CU_NURBS);
}
void SURFACE_OT_primitive_nurbs_surface_donut_add(wmOperatorType *ot)
diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c
index 46970a401a8..3a5f185c550 100644
--- a/source/blender/editors/curve/editfont.c
+++ b/source/blender/editors/curve/editfont.c
@@ -1363,6 +1363,99 @@ void FONT_OT_text_insert(wmOperatorType *ot)
RNA_def_string(ot->srna, "text", "", 0, "Text", "Text to insert at the cursor position.");
}
+
+/*********************** textbox add operator *************************/
+static int textbox_poll(bContext *C)
+{
+ Object *ob = CTX_data_active_object(C);
+
+ if (!ED_operator_object_active_editable(C) ) return 0;
+ if (ob->type != OB_FONT) return 0;
+
+ return 1;
+}
+
+static int textbox_add_exec(bContext *C, wmOperator *op)
+{
+ Object *obedit= CTX_data_active_object(C);
+ Curve *cu= obedit->data;
+ int i;
+
+ if (cu->totbox < 256) {
+ for (i = cu->totbox; i>cu->actbox; i--) cu->tb[i]= cu->tb[i-1];
+ cu->tb[cu->actbox]= cu->tb[cu->actbox-1];
+ cu->actbox++;
+ cu->totbox++;
+ }
+
+ WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data);
+ return OPERATOR_FINISHED;
+}
+
+void FONT_OT_textbox_add(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Add Textbox";
+ ot->description= "Add a new text box";
+ ot->idname= "FONT_OT_textbox_add";
+
+ /* api callbacks */
+ ot->exec= textbox_add_exec;
+ ot->poll= textbox_poll;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+
+}
+
+
+
+/*********************** textbox remove operator *************************/
+
+
+
+static int textbox_remove_exec(bContext *C, wmOperator *op)
+{
+ Object *obedit= CTX_data_active_object(C);
+ Curve *cu= obedit->data;
+ int i;
+ int index = RNA_int_get(op->ptr, "index");
+
+
+ if (cu->totbox > 1) {
+ for (i = index; i < cu->totbox; i++) cu->tb[i]= cu->tb[i+1];
+ cu->totbox--;
+ if (cu->actbox >= index)
+ cu->actbox--;
+ }
+
+ WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data);
+
+ return OPERATOR_FINISHED;
+}
+
+void FONT_OT_textbox_remove(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Remove Textbox";
+ ot->description= "Remove the textbox";
+ ot->idname= "FONT_OT_textbox_remove";
+
+ /* api callbacks */
+ ot->exec= textbox_remove_exec;
+ ot->poll= textbox_poll;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ RNA_def_int(ot->srna, "index", 0, 0, INT_MAX, "Index", "The current text box.", 0, INT_MAX);
+
+
+}
+
+
+
/***************** editmode enter/exit ********************/
void make_editText(Object *obedit)
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index e06722c1af1..b52297a319c 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -1481,6 +1481,7 @@ static int gpencil_draw_modal (bContext *C, wmOperator *op, wmEvent *event)
/* moving mouse - assumed that mouse button is down if in painting status */
case MOUSEMOVE:
+ case INBETWEEN_MOUSEMOVE:
/* check if we're currently painting */
if (p->status == GP_STATUS_PAINTING) {
/* handle drawing event */
diff --git a/source/blender/editors/include/ED_keyframing.h b/source/blender/editors/include/ED_keyframing.h
index 86a1f5c4031..fc5e3a43a62 100644
--- a/source/blender/editors/include/ED_keyframing.h
+++ b/source/blender/editors/include/ED_keyframing.h
@@ -257,7 +257,7 @@ short fcurve_frame_has_keyframe(struct FCurve *fcu, float frame, short filter);
* Checks whether a keyframe exists for the given ID-block one the given frame.
* - It is recommended to call this method over the other keyframe-checkers directly,
* in case some detail of the implementation changes...
- * - frame: the value of this is quite often result of frame_to_float(CFRA)
+ * - frame: the value of this is quite often result of BKE_curframe()
*/
short id_frame_has_keyframe(struct ID *id, float frame, short filter);
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index 4a4c546ec92..3478447b058 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -55,6 +55,7 @@ void ED_region_set(const struct bContext *C, struct ARegion *ar);
void ED_region_init(struct bContext *C, struct ARegion *ar);
void ED_region_tag_redraw(struct ARegion *ar);
void ED_region_tag_redraw_partial(struct ARegion *ar, struct rcti *rct);
+void ED_region_tag_redraw_overlay(struct ARegion *ar);
void ED_region_panels_init(struct wmWindowManager *wm, struct ARegion *ar);
void ED_region_panels(const struct bContext *C, struct ARegion *ar, int vertical, char *context, int contextnr);
void ED_region_header_init(struct ARegion *ar);
@@ -97,8 +98,8 @@ void ED_screen_set_scene(struct bContext *C, struct Scene *scene);
void ED_screen_delete_scene(struct bContext *C, struct Scene *scene);
void ED_screen_set_subwinactive(struct wmWindow *win, struct wmEvent *event);
void ED_screen_exit(struct bContext *C, struct wmWindow *window, struct bScreen *screen);
-void ED_screen_animation_timer(struct bContext *C, int redraws, int sync, int enable);
-void ED_screen_animation_timer_update(struct bScreen *screen, int redraws);
+void ED_screen_animation_timer(struct bContext *C, int redraws, int refresh, int sync, int enable);
+void ED_screen_animation_timer_update(struct bScreen *screen, int redraws, int refresh);
int ED_screen_full_newspace(struct bContext *C, ScrArea *sa, int type);
void ED_screen_full_prevspace(struct bContext *C, ScrArea *sa);
void ED_screen_full_restore(struct bContext *C, ScrArea *sa);
diff --git a/source/blender/editors/include/ED_screen_types.h b/source/blender/editors/include/ED_screen_types.h
index 03ea9a8f976..c55dafa6f51 100644
--- a/source/blender/editors/include/ED_screen_types.h
+++ b/source/blender/editors/include/ED_screen_types.h
@@ -35,6 +35,7 @@
typedef struct ScreenAnimData {
ARegion *ar; /* do not read from this, only for comparing if region exists */
short redraws;
+ short refresh;
short flag; /* flags for playback */
int sfra; /* frame that playback was started from */
} ScreenAnimData;
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 1f9c2bb9ce0..eda7102e69b 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -24,6 +24,7 @@
*/
#include <float.h>
+#include <limits.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
@@ -2223,7 +2224,6 @@ static int ui_numedit_but_NUM(uiBut *but, uiHandleButtonData *data, float fac, i
softmax= but->softmax;
softrange= softmax - softmin;
-
if(ui_is_a_warp_but(but)) {
/* Mouse location isn't screen clamped to the screen so use a linear mapping
* 2px == 1-int, or 1px == 1-ClickStep */
@@ -2283,15 +2283,18 @@ static int ui_numedit_but_NUM(uiBut *but, uiHandleButtonData *data, float fac, i
/* Use a non-linear mapping of the mouse drag especially for large floats (normal behavior) */
deler= 500;
if(!ui_is_but_float(but)) {
- if((softrange)<100) deler= 200.0;
- if((softrange)<25) deler= 50.0;
+ /* prevent large ranges from getting too out of control */
+ if (softrange > 600) deler = powf(softrange, 0.75);
+
+ if (softrange < 100) deler= 200.0;
+ if (softrange < 25) deler= 50.0;
}
deler /= fac;
- if(ui_is_but_float(but) && softrange > 11) {
+ if(softrange > 11) {
/* non linear change in mouse input- good for high precicsion */
data->dragf+= (((float)(mx-data->draglastx))/deler) * (fabs(data->dragstartx-mx)*0.002);
- } else if (!ui_is_but_float(but) && softrange > 129) { /* only scale large int buttons */
+ } else if (softrange > 129) { /* only scale large int buttons */
/* non linear change in mouse input- good for high precicsionm ints need less fine tuning */
data->dragf+= (((float)(mx-data->draglastx))/deler) * (fabs(data->dragstartx-mx)*0.004);
} else {
@@ -2299,8 +2302,7 @@ static int ui_numedit_but_NUM(uiBut *but, uiHandleButtonData *data, float fac, i
data->dragf+= ((float)(mx-data->draglastx))/deler ;
}
- if(data->dragf>1.0) data->dragf= 1.0;
- if(data->dragf<0.0) data->dragf= 0.0;
+ CLAMP(data->dragf, 0.0, 1.0);
data->draglastx= mx;
tempf= (softmin + data->dragf*softrange);
@@ -2312,7 +2314,7 @@ static int ui_numedit_but_NUM(uiBut *but, uiHandleButtonData *data, float fac, i
CLAMP(temp, softmin, softmax);
lvalue= (int)data->value;
-
+
if(temp != lvalue) {
data->dragchange= 1;
data->value= (double)temp;
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index d91cdd5c20d..0caa8fb71ea 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -431,18 +431,14 @@ static void ui_item_array(uiLayout *layout, uiBlock *block, char *name, int icon
but->type= TOG;
}
}
- else if(ELEM(subtype, PROP_COLOR, PROP_COLOR_GAMMA) && len == 4) {
- but= uiDefAutoButR(block, ptr, prop, 3, "A:", 0, 0, 0, w, UI_UNIT_Y);
- if(slider && but->type==NUM)
- but->type= NUMSLI;
- }
}
uiBlockSetCurLayout(block, layout);
}
-static void ui_item_enum_row(uiLayout *layout, uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, char *uiname, int x, int y, int w, int h, int icon_only)
+static void ui_item_enum_expand(uiLayout *layout, uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, char *uiname, int x, int y, int w, int h, int icon_only)
{
+ uiBut *but;
EnumPropertyItem *item;
const char *identifier;
char *name;
@@ -462,11 +458,14 @@ static void ui_item_enum_row(uiLayout *layout, uiBlock *block, PointerRNA *ptr,
itemw= ui_text_icon_width(block->curlayout, name, icon, 0);
if(icon && strcmp(name, "") != 0 && !icon_only)
- uiDefIconTextButR(block, ROW, 0, icon, name, 0, 0, itemw, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
+ but= uiDefIconTextButR(block, ROW, 0, icon, name, 0, 0, itemw, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
else if(icon)
- uiDefIconButR(block, ROW, 0, icon, 0, 0, itemw, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
+ but= uiDefIconButR(block, ROW, 0, icon, 0, 0, itemw, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
else
- uiDefButR(block, ROW, 0, name, 0, 0, itemw, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
+ but= uiDefButR(block, ROW, 0, name, 0, 0, itemw, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
+
+ if(ui_layout_local_dir(layout) != UI_LAYOUT_HORIZONTAL)
+ but->flag |= UI_TEXT_LEFT;
}
uiBlockSetCurLayout(block, layout);
@@ -614,6 +613,9 @@ PointerRNA uiItemFullO(uiLayout *layout, char *idname, char *name, int icon, IDP
w= ui_text_icon_width(layout, name, icon, 0);
+ if (flag & UI_ITEM_R_NO_BG)
+ uiBlockSetEmboss(block, UI_EMBOSSN);
+
if(icon && strcmp(name, "") != 0)
but= uiDefIconTextButO(block, BUT, ot->idname, context, icon, (char*)name, 0, 0, w, UI_UNIT_Y, NULL);
else if(icon)
@@ -624,7 +626,10 @@ PointerRNA uiItemFullO(uiLayout *layout, char *idname, char *name, int icon, IDP
/* text alignment for toolbar buttons */
if((layout->root->type == UI_LAYOUT_TOOLBAR) && !icon)
but->flag |= UI_TEXT_LEFT;
-
+
+ if (flag & UI_ITEM_R_NO_BG)
+ uiBlockSetEmboss(block, UI_EMBOSS);
+
/* assign properties */
if(properties || (flag & UI_ITEM_O_RETURN_PROPS)) {
PointerRNA *opptr= uiButGetOperatorPtrRNA(but);
@@ -946,7 +951,7 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index
}
/* expanded enum */
else if(type == PROP_ENUM && expand)
- ui_item_enum_row(layout, block, ptr, prop, name, 0, 0, w, h, icon_only);
+ ui_item_enum_expand(layout, block, ptr, prop, name, 0, 0, w, h, icon_only);
/* property with separate label */
else if(type == PROP_ENUM || type == PROP_STRING || type == PROP_POINTER) {
but= ui_item_with_label(layout, block, name, icon, ptr, prop, index, 0, 0, w, h, flag);
@@ -1291,8 +1296,10 @@ static void ui_item_menu(uiLayout *layout, char *name, int icon, uiMenuCreateFun
if(layout->root->type == UI_LAYOUT_HEADER)
uiBlockSetEmboss(block, UI_EMBOSS);
- else if(layout->root->type == UI_LAYOUT_PANEL)
+ else if(layout->root->type == UI_LAYOUT_PANEL) {
but->type= MENU;
+ but->flag |= UI_TEXT_LEFT;
+ }
}
void uiItemM(uiLayout *layout, bContext *C, char *menuname, char *name, int icon)
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index d44e4b2b4dc..fb00d4f968e 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -1795,6 +1795,9 @@ static void uiBlockPicker(uiBlock *block, float *rgb, PointerRNA *ptr, PropertyR
linearrgb_to_srgb_v3_v3(rgb_gamma, rgb);
}
+ /* sneaky way to check for alpha */
+ rgb[3]= FLT_MAX;
+
RNA_property_float_ui_range(ptr, prop, &min, &max, &step, &precision);
RNA_property_float_get_array(ptr, prop, rgb);
rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
@@ -1835,6 +1838,7 @@ static void uiBlockPicker(uiBlock *block, float *rgb, PointerRNA *ptr, PropertyR
uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
bt= uiDefButR(block, NUMSLI, 0, "B ", 0, -100, butwidth, UI_UNIT_Y, ptr, propname, 2, 0.0, 0.0, 0, 0, "");
uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
+
// could use uiItemFullR(col, ptr, prop, -1, 0, UI_ITEM_R_EXPAND|UI_ITEM_R_SLIDER, "", 0);
// but need to use uiButSetFunc for updating other fake buttons
@@ -1847,7 +1851,15 @@ static void uiBlockPicker(uiBlock *block, float *rgb, PointerRNA *ptr, PropertyR
bt= uiDefButF(block, NUMSLI, 0, "V ", 0, -100, butwidth, UI_UNIT_Y, hsv+2, 0.0, max, 10, 3, "");
uiButSetFunc(bt, do_hsv_rna_cb, bt, hsv);
uiBlockEndAlign(block);
-
+
+ if(rgb[3] != FLT_MAX) {
+ bt= uiDefButR(block, NUMSLI, 0, "A ", 0, -120, butwidth, UI_UNIT_Y, ptr, propname, 3, 0.0, 0.0, 0, 0, "");
+ uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
+ }
+ else {
+ rgb[3]= 1.0f;
+ }
+
rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
sprintf(hexcol, "%02X%02X%02X", (unsigned int)(rgb_gamma[0]*255.0), (unsigned int)(rgb_gamma[1]*255.0), (unsigned int)(rgb_gamma[2]*255.0));
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index fb515d55854..52772aaf0e5 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -1333,6 +1333,29 @@ static void colorband_del_cb(bContext *C, void *cb_v, void *coba_v)
rna_update_cb(C, cb_v, NULL);
}
+static void colorband_flip_cb(bContext *C, void *cb_v, void *coba_v)
+{
+ CBData data_tmp[MAXCOLORBAND];
+
+ ColorBand *coba= coba_v;
+ int a;
+
+ for(a=0; a<coba->tot; a++) {
+ data_tmp[a]= coba->data[coba->tot - (a + 1)];
+ }
+ for(a=0; a<coba->tot; a++) {
+ data_tmp[a].pos = 1.0f - data_tmp[a].pos;
+ coba->data[a]= data_tmp[a];
+ }
+
+ /* may as well flip the cur*/
+ coba->cur= coba->tot - (coba->cur + 1);
+
+ ED_undo_push(C, "Flip colorband");
+
+ rna_update_cb(C, cb_v, NULL);
+}
+
/* offset aligns from bottom, standard width 300, height 115 */
static void colorband_buttons_large(uiLayout *layout, uiBlock *block, ColorBand *coba, int xoffs, int yoffs, RNAUpdateCb *cb)
@@ -1343,12 +1366,17 @@ static void colorband_buttons_large(uiLayout *layout, uiBlock *block, ColorBand
if(coba==NULL) return;
- bt= uiDefBut(block, BUT, 0, "Add", 0+xoffs,100+yoffs,50,20, 0, 0, 0, 0, 0, "Add a new color stop to the colorband");
+ bt= uiDefBut(block, BUT, 0, "Add", 0+xoffs,100+yoffs,40,20, 0, 0, 0, 0, 0, "Add a new color stop to the colorband");
uiButSetNFunc(bt, colorband_add_cb, MEM_dupallocN(cb), coba);
- bt= uiDefBut(block, BUT, 0, "Delete", 60+xoffs,100+yoffs,50,20, 0, 0, 0, 0, 0, "Delete the active position");
+ bt= uiDefBut(block, BUT, 0, "Delete", 45+xoffs,100+yoffs,45,20, 0, 0, 0, 0, 0, "Delete the active position");
uiButSetNFunc(bt, colorband_del_cb, MEM_dupallocN(cb), coba);
+
+ /* XXX, todo for later - convert to operator - campbell */
+ bt= uiDefBut(block, BUT, 0, "F", 95+xoffs,100+yoffs,20,20, 0, 0, 0, 0, 0, "Flip colorband");
+ uiButSetNFunc(bt, colorband_flip_cb, MEM_dupallocN(cb), coba);
+
uiDefButS(block, NUM, 0, "", 120+xoffs,100+yoffs,80, 20, &coba->cur, 0.0, (float)(MAX2(0, coba->tot-1)), 0, 0, "Choose active color stop");
bt= uiDefButS(block, MENU, 0, "Interpolation %t|Ease %x1|Cardinal %x3|Linear %x0|B-Spline %x2|Constant %x4",
@@ -1359,6 +1387,8 @@ static void colorband_buttons_large(uiLayout *layout, uiBlock *block, ColorBand
bt= uiDefBut(block, BUT_COLORBAND, 0, "", xoffs,65+yoffs,300,30, coba, 0, 0, 0, 0, "");
uiButSetNFunc(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
+
+
if(coba->tot) {
CBData *cbd= coba->data + coba->cur;
@@ -1381,8 +1411,10 @@ static void colorband_buttons_small(uiLayout *layout, uiBlock *block, ColorBand
uiBlockBeginAlign(block);
bt= uiDefBut(block, BUT, 0, "Add", xs,butr->ymin+20.0f,2.0f*unit,20, NULL, 0, 0, 0, 0, "Add a new color stop to the colorband");
uiButSetNFunc(bt, colorband_add_cb, MEM_dupallocN(cb), coba);
- bt= uiDefBut(block, BUT, 0, "Delete", xs+2.0f*unit,butr->ymin+20.0f,2.0f*unit,20, NULL, 0, 0, 0, 0, "Delete the active position");
+ bt= uiDefBut(block, BUT, 0, "Delete", xs+2.0f*unit,butr->ymin+20.0f,1.5f*unit,20, NULL, 0, 0, 0, 0, "Delete the active position");
uiButSetNFunc(bt, colorband_del_cb, MEM_dupallocN(cb), coba);
+ bt= uiDefBut(block, BUT, 0, "F", xs+3.5f*unit,butr->ymin+20.0f,0.5f*unit,20, NULL, 0, 0, 0, 0, "Flip the color ramp");
+ uiButSetNFunc(bt, colorband_flip_cb, MEM_dupallocN(cb), coba);
uiBlockEndAlign(block);
if(coba->tot) {
@@ -1929,14 +1961,6 @@ void uiTemplateColorWheel(uiLayout *layout, PointerRNA *ptr, char *propname, int
if (value_slider)
uiDefButR(block, HSVCUBE, 0, "", WHEEL_SIZE+6, 0, 14, WHEEL_SIZE, ptr, propname, -1, softmin, softmax, 9, 0, "");
-
- /* maybe a switch for this?
- row= uiLayoutRow(col, 0);
- if(ELEM(RNA_property_subtype(prop), PROP_COLOR, PROP_COLOR_GAMMA) && RNA_property_array_length(ptr, prop) == 4) {
- but= uiDefAutoButR(block, ptr, prop, 3, "A:", 0, 0, 0, WHEEL_SIZE+20, UI_UNIT_Y);
- }
- */
-
}
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index 8f0f794585a..2cfdf2d5e04 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -608,14 +608,67 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol)
/* backdrop non AA */
if(wtb->inner) {
if(wcol->shaded==0) {
-
- /* filled center, solid */
- glColor4ubv((unsigned char*)wcol->inner);
- glBegin(GL_POLYGON);
- for(a=0; a<wtb->totvert; a++)
- glVertex2fv(wtb->inner_v[a]);
- glEnd();
+ if (wcol->alpha_check) {
+ GLubyte checker_stipple_sml[32*32/8] =
+ {
+ 255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0, \
+ 255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0, \
+ 0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255, \
+ 0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255, \
+ 255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0, \
+ 255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0, \
+ 0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255, \
+ 0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255, \
+ };
+
+ float x_mid= 0.0f; /* used for dumb clamping of values */
+
+ /* dark checkers */
+ glColor4ub(100, 100, 100, 255);
+ glBegin(GL_POLYGON);
+ for(a=0; a<wtb->totvert; a++) {
+ glVertex2fv(wtb->inner_v[a]);
+ }
+ glEnd();
+ /* light checkers */
+ glEnable(GL_POLYGON_STIPPLE);
+ glColor4ub(160, 160, 160, 255);
+ glPolygonStipple(checker_stipple_sml);
+ glBegin(GL_POLYGON);
+ for(a=0; a<wtb->totvert; a++) {
+ glVertex2fv(wtb->inner_v[a]);
+ }
+ glEnd();
+ glDisable(GL_POLYGON_STIPPLE);
+
+ /* alpha fill */
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ glColor4ubv((unsigned char*)wcol->inner);
+ glBegin(GL_POLYGON);
+ for(a=0; a<wtb->totvert; a++) {
+ glVertex2fv(wtb->inner_v[a]);
+ x_mid += wtb->inner_v[a][0];
+ }
+ x_mid /= wtb->totvert;
+ glEnd();
+
+ /* 1/2 solid color */
+ glColor4ub(wcol->inner[0], wcol->inner[1], wcol->inner[2], 255);
+ glBegin(GL_POLYGON);
+ for(a=0; a<wtb->totvert; a++)
+ glVertex2f(MIN2(wtb->inner_v[a][0], x_mid), wtb->inner_v[a][1]);
+ glEnd();
+ }
+ else {
+ /* simple fill */
+ glColor4ubv((unsigned char*)wcol->inner);
+ glBegin(GL_POLYGON);
+ for(a=0; a<wtb->totvert; a++)
+ glVertex2fv(wtb->inner_v[a]);
+ glEnd();
+ }
}
else {
char col1[4], col2[4];
@@ -2208,9 +2261,15 @@ static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat
float col[4];
int color_profile = but->block->color_profile;
+ col[3]= 1.0f;
+
if (but->rnaprop) {
if (RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA)
color_profile = BLI_PR_NONE;
+
+ if(RNA_property_array_length(&but->rnapoin, but->rnaprop)==4) {
+ col[3]= RNA_property_float_get_index(&but->rnapoin, but->rnaprop, 3);
+ }
}
widget_init(&wtb);
@@ -2226,8 +2285,10 @@ static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat
wcol->inner[0]= FTOCHAR(col[0]);
wcol->inner[1]= FTOCHAR(col[1]);
wcol->inner[2]= FTOCHAR(col[2]);
+ wcol->inner[3]= FTOCHAR(col[3]);
wcol->shaded = 0;
-
+ wcol->alpha_check = (wcol->inner[3] < 255);
+
widgetbase_draw(&wtb, wcol);
}
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c
index a7a0a854f1b..6cdd1dff1fc 100644
--- a/source/blender/editors/mesh/editmesh_add.c
+++ b/source/blender/editors/mesh/editmesh_add.c
@@ -1262,6 +1262,23 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se
/* ********* add primitive operators ************* */
+static char *get_mesh_defname(int type)
+{
+ switch (type) {
+ case PRIM_PLANE: return "Plane";
+ case PRIM_CUBE: return "Cube";
+ case PRIM_CIRCLE: return "Circle";
+ case PRIM_CYLINDER: return "Tube";
+ case PRIM_CONE: return "Cone";
+ case PRIM_GRID: return "Grid";
+ case PRIM_UVSPHERE: return "Sphere";
+ case PRIM_ICOSPHERE: return "Icosphere";
+ case PRIM_MONKEY: return "Monkey";
+ default:
+ return "Mesh";
+ }
+}
+
static void make_prim_ext(bContext *C, float *loc, float *rot, int enter_editmode, unsigned int layer,
int type, int tot, int seg,
int subdiv, float dia, float depth, int ext, int fill)
@@ -1274,6 +1291,9 @@ static void make_prim_ext(bContext *C, float *loc, float *rot, int enter_editmod
if(obedit==NULL || obedit->type!=OB_MESH) {
obedit= ED_object_add_type(C, OB_MESH, loc, rot, FALSE, layer);
+ rename_id((ID *)obedit, get_mesh_defname(type));
+ rename_id((ID *)obedit->data, get_mesh_defname(type));
+
/* create editmode */
ED_object_enter_editmode(C, EM_DO_UNDO|EM_IGNORE_LAYER); /* rare cases the active layer is messed up */
newob = 1;
diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c
index 4bc5030094e..5ac70d8f54c 100644
--- a/source/blender/editors/mesh/editmesh_mods.c
+++ b/source/blender/editors/mesh/editmesh_mods.c
@@ -186,7 +186,7 @@ static void draw_triangulated(short mcords[][2], short tot)
}
/* do the fill */
- filldisplist(&lb, &lb);
+ filldisplist(&lb, &lb, 0);
/* do the draw */
dl= lb.first; /* filldisplist adds in head of list */
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 13656ca1b7e..a46d154cc22 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -1030,7 +1030,7 @@ void MESH_OT_spin(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* props */
- RNA_def_int(ot->srna, "steps", 9, 0, INT_MAX, "Steps", "Steps", 0, INT_MAX);
+ RNA_def_int(ot->srna, "steps", 9, 0, INT_MAX, "Steps", "Steps", 0, 128);
RNA_def_boolean(ot->srna, "dupli", 0, "Dupli", "Make Duplicates");
RNA_def_float(ot->srna, "degrees", 90.0f, -FLT_MAX, FLT_MAX, "Degrees", "Degrees", -360.0f, 360.0f);
diff --git a/source/blender/editors/metaball/mball_edit.c b/source/blender/editors/metaball/mball_edit.c
index 62261c3c68f..69735d7b041 100644
--- a/source/blender/editors/metaball/mball_edit.c
+++ b/source/blender/editors/metaball/mball_edit.c
@@ -47,6 +47,7 @@
#include "BKE_depsgraph.h"
#include "BKE_object.h"
#include "BKE_context.h"
+#include "BKE_library.h"
#include "ED_screen.h"
#include "ED_view3d.h"
@@ -122,24 +123,39 @@ MetaElem *add_metaball_primitive(bContext *C, float mat[4][4], int type, int new
case MB_BALL:
ml->type = MB_BALL;
ml->expx= ml->expy= ml->expz= 1.0;
+
+ rename_id((ID *)obedit, "Meta Ball");
+ rename_id((ID *)obedit->data, "Meta Ball");
break;
case MB_TUBE:
ml->type = MB_TUBE;
ml->expx= ml->expy= ml->expz= 1.0;
+
+ rename_id((ID *)obedit, "Meta Tube");
+ rename_id((ID *)obedit->data, "Meta Tube");
break;
case MB_PLANE:
ml->type = MB_PLANE;
ml->expx= ml->expy= ml->expz= 1.0;
+
+ rename_id((ID *)obedit, "Meta Plane");
+ rename_id((ID *)obedit->data, "Meta Plane");
break;
case MB_ELIPSOID:
ml->type = MB_ELIPSOID;
ml->expx= 1.2f;
ml->expy= 0.8f;
ml->expz= 1.0;
+
+ rename_id((ID *)obedit, "Meta Ellipsoid");
+ rename_id((ID *)obedit->data, "Meta Ellipsoid");
break;
case MB_CUBE:
ml->type = MB_CUBE;
ml->expx= ml->expy= ml->expz= 1.0;
+
+ rename_id((ID *)obedit, "Meta Cube");
+ rename_id((ID *)obedit->data, "Meta Cube");
break;
default:
break;
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index e29c23b1f4d..92256d5e613 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -490,74 +490,6 @@ void OBJECT_OT_camera_add(wmOperatorType *ot)
/* ***************** add primitives *************** */
-static EnumPropertyItem prop_surface_types[]= {
- {CU_PRIM_CURVE|CU_NURBS, "NURBS_CURVE", ICON_SURFACE_NCURVE, "NURBS Curve", ""},
- {CU_PRIM_CIRCLE|CU_NURBS, "NURBS_CIRCLE", ICON_SURFACE_NCIRCLE, "NURBS Circle", ""},
- {CU_PRIM_PATCH|CU_NURBS, "NURBS_SURFACE", ICON_SURFACE_NSURFACE, "NURBS Surface", ""},
- {CU_PRIM_TUBE|CU_NURBS, "NURBS_TUBE", ICON_SURFACE_NTUBE, "NURBS Tube", ""},
- {CU_PRIM_SPHERE|CU_NURBS, "NURBS_SPHERE", ICON_SURFACE_NSPHERE, "NURBS Sphere", ""},
- {CU_PRIM_DONUT|CU_NURBS, "NURBS_DONUT", ICON_SURFACE_NDONUT, "NURBS Donut", ""},
- {0, NULL, 0, NULL, NULL}
-};
-
-static int object_add_surface_exec(bContext *C, wmOperator *op)
-{
- Object *obedit= CTX_data_edit_object(C);
- ListBase *editnurb;
- Nurb *nu;
- int newob= 0;
- int enter_editmode;
- unsigned int layer;
- float loc[3], rot[3];
- float mat[4][4];
-
- object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
-
- if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
- return OPERATOR_CANCELLED;
-
- if(obedit==NULL || obedit->type!=OB_SURF) {
- obedit= ED_object_add_type(C, OB_SURF, loc, rot, TRUE, layer);
- newob = 1;
- }
- else DAG_id_flush_update(&obedit->id, OB_RECALC_DATA);
-
- ED_object_new_primitive_matrix(C, obedit, loc, rot, mat);
-
- nu= add_nurbs_primitive(C, mat, RNA_enum_get(op->ptr, "type"), newob);
- editnurb= curve_get_editcurve(obedit);
- BLI_addtail(editnurb, nu);
-
- /* userdef */
- if (newob && !enter_editmode) {
- ED_object_exit_editmode(C, EM_FREEDATA);
- }
-
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, obedit);
-
- return OPERATOR_FINISHED;
-}
-
-void OBJECT_OT_surface_add(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name= "Add Surface";
- ot->description = "Add a surface object to the scene";
- ot->idname= "OBJECT_OT_surface_add";
-
- /* api callbacks */
- ot->invoke= WM_menu_invoke;
- ot->exec= object_add_surface_exec;
-
- ot->poll= ED_operator_scene_editable;
-
- /* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
-
- ot->prop= RNA_def_enum(ot->srna, "type", prop_surface_types, 0, "Primitive", "");
- ED_object_add_generic_props(ot, TRUE);
-}
-
static EnumPropertyItem prop_metaball_types[]= {
{MB_BALL, "MBALL_BALL", ICON_META_BALL, "Meta Ball", ""},
{MB_TUBE, "MBALL_TUBE", ICON_META_TUBE, "Meta Tube", ""},
@@ -739,6 +671,19 @@ void OBJECT_OT_armature_add(wmOperatorType *ot)
ED_object_add_generic_props(ot, TRUE);
}
+static char *get_lamp_defname(int type)
+{
+ switch (type) {
+ case LA_LOCAL: return "Point";
+ case LA_SUN: return "Sun";
+ case LA_SPOT: return "Spot";
+ case LA_HEMI: return "Hemi";
+ case LA_AREA: return "Area";
+ default:
+ return "Lamp";
+ }
+}
+
static int object_lamp_add_exec(bContext *C, wmOperator *op)
{
Object *ob;
@@ -755,6 +700,9 @@ static int object_lamp_add_exec(bContext *C, wmOperator *op)
if(ob && ob->data)
((Lamp*)ob->data)->type= type;
+ rename_id((ID *)ob, get_lamp_defname(type));
+ rename_id((ID *)ob->data, get_lamp_defname(type));
+
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 5f61da4ae37..5b434f7eae4 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -1792,6 +1792,11 @@ static int shade_smooth_exec(bContext *C, wmOperator *op)
return (done)? OPERATOR_FINISHED: OPERATOR_CANCELLED;
}
+static int shade_poll(bContext *C)
+{
+ return (ED_operator_object_active_editable(C) && !ED_operator_editmesh(C));
+}
+
void OBJECT_OT_shade_flat(wmOperatorType *ot)
{
/* identifiers */
@@ -1799,7 +1804,7 @@ void OBJECT_OT_shade_flat(wmOperatorType *ot)
ot->idname= "OBJECT_OT_shade_flat";
/* api callbacks */
- ot->poll= ED_operator_object_active_editable;
+ ot->poll= shade_poll;
ot->exec= shade_smooth_exec;
/* flags */
@@ -1813,7 +1818,7 @@ void OBJECT_OT_shade_smooth(wmOperatorType *ot)
ot->idname= "OBJECT_OT_shade_smooth";
/* api callbacks */
- ot->poll= ED_operator_object_active_editable;
+ ot->poll= shade_poll;
ot->exec= shade_smooth_exec;
/* flags */
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c
index 28eb919dbe7..91f054f7209 100644
--- a/source/blender/editors/object/object_relations.c
+++ b/source/blender/editors/object/object_relations.c
@@ -1191,24 +1191,25 @@ enum {
/* Return 1 if make link data is allow, zero otherwise */
static int allow_make_links_data(int ev, Object *ob, Object *obt)
{
- if (ev == MAKE_LINKS_OBDATA) {
- if (ob->type == OB_MESH && obt->type == OB_MESH)
- return(1);
+ switch(ev) {
+ case MAKE_LINKS_OBDATA:
+ if (ob->type == obt->type && ob->type != OB_EMPTY)
+ return 1;
+ break;
+ case MAKE_LINKS_MATERIALS:
+ if (ELEM5(ob->type, OB_MESH, OB_CURVE, OB_FONT, OB_SURF, OB_MBALL) &&
+ ELEM5(obt->type, OB_MESH, OB_CURVE, OB_FONT, OB_SURF, OB_MBALL))
+ return 1;
+ break;
+ case MAKE_LINKS_ANIMDATA:
+ case MAKE_LINKS_DUPLIGROUP:
+ return 1;
+ case MAKE_LINKS_MODIFIERS:
+ if (ob->type != OB_EMPTY && obt->type != OB_EMPTY)
+ return 1;
+ break;
}
- else if (ev == MAKE_LINKS_MATERIALS) {
- if ((ob->type == OB_MESH || ob->type == OB_CURVE || ob->type == OB_FONT || ob->type == OB_SURF || ob->type == OB_MBALL) &&
- (obt->type == OB_MESH || obt->type == OB_CURVE || obt->type == OB_FONT || obt->type == OB_SURF || obt->type == OB_MBALL))
- return(1);
- }
- else if (ev == MAKE_LINKS_ANIMDATA)
- return(1);
- else if (ev == MAKE_LINKS_DUPLIGROUP)
- return(1);
- else if (ev == MAKE_LINKS_MODIFIERS) {
- if (ob->type != OB_EMPTY && obt->type != OB_EMPTY)
- return(1);
- }
- return(0);
+ return 0;
}
static int make_links_data_exec(bContext *C, wmOperator *op)
diff --git a/source/blender/editors/physics/particle_object.c b/source/blender/editors/physics/particle_object.c
index d8ca65fa8c9..059805fdf2d 100644
--- a/source/blender/editors/physics/particle_object.c
+++ b/source/blender/editors/physics/particle_object.c
@@ -69,7 +69,9 @@ static int particle_system_add_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
object_add_particle_system(scene, ob, NULL);
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
+ WM_event_add_notifier(C, NC_OBJECT|ND_POINTCACHE, ob);
return OPERATOR_FINISHED;
}
@@ -107,7 +109,8 @@ static int particle_system_remove_exec(bContext *C, wmOperator *op)
if(scene->basact && scene->basact->object==ob)
WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, NULL);
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
+ WM_event_add_notifier(C, NC_OBJECT|ND_POINTCACHE, ob);
return OPERATOR_FINISHED;
}
@@ -166,7 +169,7 @@ static int new_particle_settings_exec(bContext *C, wmOperator *op)
DAG_scene_sort(scene);
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
return OPERATOR_FINISHED;
}
@@ -214,7 +217,7 @@ static int new_particle_target_exec(bContext *C, wmOperator *op)
DAG_scene_sort(scene);
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
return OPERATOR_FINISHED;
}
@@ -262,7 +265,7 @@ static int remove_particle_target_exec(bContext *C, wmOperator *op)
DAG_scene_sort(scene);
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
return OPERATOR_FINISHED;
}
@@ -300,7 +303,7 @@ static int target_move_up_exec(bContext *C, wmOperator *op)
BLI_insertlink(&psys->targets, pt->prev->prev, pt);
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
break;
}
}
@@ -338,7 +341,7 @@ static int target_move_down_exec(bContext *C, wmOperator *op)
BLI_insertlink(&psys->targets, pt->next, pt);
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
break;
}
}
@@ -376,7 +379,7 @@ static int dupliob_move_up_exec(bContext *C, wmOperator *op)
BLI_remlink(&part->dupliweights, dw);
BLI_insertlink(&part->dupliweights, dw->prev->prev, dw);
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, NULL);
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, NULL);
break;
}
}
@@ -415,7 +418,7 @@ static int copy_particle_dupliob_exec(bContext *C, wmOperator *op)
dw->flag |= PART_DUPLIW_CURRENT;
BLI_addhead(&part->dupliweights, dw);
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, NULL);
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, NULL);
break;
}
}
@@ -461,7 +464,7 @@ static int remove_particle_dupliob_exec(bContext *C, wmOperator *op)
if(dw)
dw->flag |= PART_DUPLIW_CURRENT;
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, NULL);
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, NULL);
return OPERATOR_FINISHED;
}
@@ -498,7 +501,7 @@ static int dupliob_move_down_exec(bContext *C, wmOperator *op)
BLI_remlink(&part->dupliweights, dw);
BLI_insertlink(&part->dupliweights, dw->next, dw);
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, NULL);
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, NULL);
break;
}
}
@@ -590,7 +593,7 @@ static int disconnect_hair_exec(bContext *C, wmOperator *op)
disconnect_hair(scene, ob, psys);
}
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
return OPERATOR_FINISHED;
}
@@ -729,7 +732,7 @@ static int connect_hair_exec(bContext *C, wmOperator *op)
connect_hair(scene, ob, psys);
}
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/physics/physics_pointcache.c b/source/blender/editors/physics/physics_pointcache.c
index 5ebbb00939e..8e53e3c6f50 100644
--- a/source/blender/editors/physics/physics_pointcache.c
+++ b/source/blender/editors/physics/physics_pointcache.c
@@ -115,6 +115,7 @@ static int ptcache_bake_all_exec(bContext *C, wmOperator *op)
BKE_ptcache_make_cache(&baker);
WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene);
+ WM_event_add_notifier(C, NC_OBJECT|ND_POINTCACHE, NULL);
return OPERATOR_FINISHED;
}
@@ -133,6 +134,8 @@ static int ptcache_free_bake_all_exec(bContext *C, wmOperator *op)
}
BLI_freelistN(&pidlist);
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_POINTCACHE, base->object);
}
WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene);
@@ -211,6 +214,7 @@ static int ptcache_bake_exec(bContext *C, wmOperator *op)
BLI_freelistN(&pidlist);
WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene);
+ WM_event_add_notifier(C, NC_OBJECT|ND_POINTCACHE, ob);
return OPERATOR_FINISHED;
}
@@ -218,6 +222,7 @@ static int ptcache_free_bake_exec(bContext *C, wmOperator *op)
{
PointerRNA ptr= CTX_data_pointer_get_type(C, "point_cache", &RNA_PointCache);
PointCache *cache= ptr.data;
+ Object *ob= ptr.id.data;
if(cache->edit) {
if(!cache->edit->edited || 1) {// XXX okee("Lose changes done in particle mode?")) {
@@ -228,6 +233,8 @@ static int ptcache_free_bake_exec(bContext *C, wmOperator *op)
}
else
cache->flag &= ~PTCACHE_BAKED;
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_POINTCACHE, ob);
return OPERATOR_FINISHED;
}
@@ -235,8 +242,11 @@ static int ptcache_bake_from_cache_exec(bContext *C, wmOperator *op)
{
PointerRNA ptr= CTX_data_pointer_get_type(C, "point_cache", &RNA_PointCache);
PointCache *cache= ptr.data;
+ Object *ob= ptr.id.data;
cache->flag |= PTCACHE_BAKED;
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_POINTCACHE, ob);
return OPERATOR_FINISHED;
}
@@ -303,6 +313,7 @@ static int ptcache_add_new_exec(bContext *C, wmOperator *op)
BLI_freelistN(&pidlist);
WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene);
+ WM_event_add_notifier(C, NC_OBJECT|ND_POINTCACHE, ob);
return OPERATOR_FINISHED;
}
@@ -331,6 +342,8 @@ static int ptcache_remove_exec(bContext *C, wmOperator *op)
}
BLI_freelistN(&pidlist);
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_POINTCACHE, ob);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index 268acba1db7..48ad3bbcc94 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -221,7 +221,7 @@ void screen_set_image_output(bContext *C, int mx, int my)
sa= CTX_wm_area(C);
}
else if(scene->r.displaymode==R_OUTPUT_SCREEN) {
- if (CTX_wm_area(C)->spacetype == SPACE_IMAGE)
+ if (CTX_wm_area(C) && CTX_wm_area(C)->spacetype == SPACE_IMAGE)
area_was_image = 1;
/* this function returns with changed context */
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c
index d9b22553c7a..7cc074a74fd 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -60,6 +60,7 @@
#include "ED_screen.h"
#include "ED_view3d.h"
+#include "ED_image.h"
#include "RE_pipeline.h"
#include "IMB_imbuf_types.h"
@@ -304,6 +305,10 @@ static int screen_opengl_render_anim_step(bContext *C, wmOperator *op)
int ok= 0;
int view_context = (oglrender->v3d != NULL);
+ /* update animated image textures for gpu, etc,
+ * call before scene_update_for_newframe so modifiers with textuers dont lag 1 frame */
+ ED_image_update_frame(C);
+
/* go to next frame */
while(CFRA<oglrender->nfra) {
unsigned int lay= screen_opengl_layers(oglrender);
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 758a2b1d8ef..65b2923d884 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -372,6 +372,12 @@ void ED_region_tag_redraw(ARegion *ar)
}
}
+void ED_region_tag_redraw_overlay(ARegion *ar)
+{
+ if(ar)
+ ar->do_draw_overlay= RGN_DRAW;
+}
+
void ED_region_tag_redraw_partial(ARegion *ar, rcti *rct)
{
if(ar) {
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index 4a0a79b2163..1bd1fef4673 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -1651,7 +1651,7 @@ void ED_refresh_viewport_fps(bContext *C)
/* redraws: uses defines from stime->redraws
* enable: 1 - forward on, -1 - backwards on, 0 - off
*/
-void ED_screen_animation_timer(bContext *C, int redraws, int sync, int enable)
+void ED_screen_animation_timer(bContext *C, int redraws, int refresh, int sync, int enable)
{
bScreen *screen= CTX_wm_screen(C);
wmWindowManager *wm= CTX_wm_manager(C);
@@ -1669,6 +1669,7 @@ void ED_screen_animation_timer(bContext *C, int redraws, int sync, int enable)
sad->ar= CTX_wm_region(C);
sad->sfra = scene->r.cfra;
sad->redraws= redraws;
+ sad->refresh= refresh;
sad->flag |= (enable < 0)? ANIMPLAY_FLAG_REVERSE: 0;
sad->flag |= (sync == 0)? ANIMPLAY_FLAG_NO_SYNC: (sync == 1)? ANIMPLAY_FLAG_SYNC: 0;
screen->animtimer->customdata= sad;
@@ -1702,13 +1703,14 @@ static ARegion *time_top_left_3dwindow(bScreen *screen)
return aret;
}
-void ED_screen_animation_timer_update(bScreen *screen, int redraws)
+void ED_screen_animation_timer_update(bScreen *screen, int redraws, int refresh)
{
if(screen && screen->animtimer) {
wmTimer *wt= screen->animtimer;
ScreenAnimData *sad= wt->customdata;
sad->redraws= redraws;
+ sad->refresh= refresh;
sad->ar= NULL;
if(redraws & TIME_REGION)
sad->ar= time_top_left_3dwindow(screen);
@@ -1735,6 +1737,10 @@ void ED_update_for_newframe(const bContext *C, int mute)
//extern void audiostream_scrub(unsigned int frame); /* seqaudio.c */
+ /* update animated image textures for gpu, etc,
+ * call before scene_update_for_newframe so modifiers with textuers dont lag 1 frame */
+ ED_image_update_frame(C);
+
/* this function applies the changes too */
/* XXX future: do all windows */
scene_update_for_newframe(scene, BKE_screen_visible_layers(screen, scene)); /* BKE_scene.h */
@@ -1752,9 +1758,6 @@ void ED_update_for_newframe(const bContext *C, int mute)
if(scene->use_nodes && scene->nodetree)
ntreeCompositTagAnimated(scene->nodetree);
- /* update animated image textures for gpu, etc */
- ED_image_update_frame(C);
-
/* update animated texture nodes */
{
Tex *tex;
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index 4d644cecf66..5aeb50b34c5 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -1504,6 +1504,7 @@ static int frame_offset_exec(bContext *C, wmOperator *op)
delta = RNA_int_get(op->ptr, "delta");
CTX_data_scene(C)->r.cfra += delta;
+ CTX_data_scene(C)->r.subframe = 0.f;
sound_seek_scene(C);
@@ -2359,6 +2360,18 @@ void SCREEN_OT_header_toolbox(wmOperatorType *ot)
/* ****************** anim player, with timer ***************** */
+static int match_area_with_refresh(int spacetype, int refresh)
+{
+ switch (spacetype) {
+ case SPACE_TIME:
+ if (refresh & SPACE_TIME)
+ return 1;
+ break;
+ }
+
+ return 0;
+}
+
static int match_region_with_redraws(int spacetype, int regiontype, int redraws)
{
if(regiontype==RGN_TYPE_WINDOW) {
@@ -2505,6 +2518,9 @@ static int screen_animation_step(bContext *C, wmOperator *op, wmEvent *event)
if(match_region_with_redraws(sa->spacetype, ar->regiontype, sad->redraws))
ED_region_tag_redraw(ar);
}
+
+ if (match_area_with_refresh(sa->spacetype, sad->refresh))
+ ED_area_tag_refresh(sa);
}
/* update frame rate info too
@@ -2548,11 +2564,12 @@ int ED_screen_animation_play(bContext *C, int sync, int mode)
if(screen->animtimer) {
/* stop playback now */
- ED_screen_animation_timer(C, 0, 0, 0);
+ ED_screen_animation_timer(C, 0, 0, 0, 0);
sound_stop_scene(scene);
}
else {
ScrArea *sa= CTX_wm_area(C);
+ int refresh= SPACE_TIME;
if(mode == 1) // XXX only play audio forwards!?
sound_play_scene(scene);
@@ -2561,10 +2578,10 @@ int ED_screen_animation_play(bContext *C, int sync, int mode)
if ((sa) && (sa->spacetype == SPACE_TIME)) {
SpaceTime *stime= (SpaceTime *)sa->spacedata.first;
- ED_screen_animation_timer(C, stime->redraws, sync, mode);
+ ED_screen_animation_timer(C, stime->redraws, refresh, sync, mode);
/* update region if TIME_REGION was set, to leftmost 3d window */
- ED_screen_animation_timer_update(screen, stime->redraws);
+ ED_screen_animation_timer_update(screen, stime->redraws, refresh);
}
else {
int redraws = TIME_REGION|TIME_ALL_3D_WIN;
@@ -2574,7 +2591,7 @@ int ED_screen_animation_play(bContext *C, int sync, int mode)
redraws |= TIME_SEQ;
}
- ED_screen_animation_timer(C, redraws, sync, mode);
+ ED_screen_animation_timer(C, redraws, refresh, sync, mode);
if(screen->animtimer) {
wmTimer *wt= screen->animtimer;
diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c
index 64f00caf479..41908bbe388 100644
--- a/source/blender/editors/sculpt_paint/paint_image.c
+++ b/source/blender/editors/sculpt_paint/paint_image.c
@@ -3552,16 +3552,18 @@ static void blend_color_mix_float(float *cp, const float *cp1, const float *cp2,
cp[3]= mfac*cp1[3] + fac*cp2[3];
}
-static void blend_color_mix_rgb(unsigned char *cp, const unsigned char *cp1, const unsigned char *cp2, const int fac)
+static void blend_color_mix_accum(unsigned char *cp, const unsigned char *cp1, const unsigned char *cp2, const int fac)
{
/* this and other blending modes previously used >>8 instead of /255. both
are not equivalent (>>8 is /256), and the former results in rounding
errors that can turn colors black fast after repeated blending */
const int mfac= 255-fac;
+ const int alpha= cp1[3] + ((fac * cp2[3]) / 255);
cp[0]= (mfac*cp1[0]+fac*cp2[0])/255;
cp[1]= (mfac*cp1[1]+fac*cp2[1])/255;
cp[2]= (mfac*cp1[2]+fac*cp2[2])/255;
+ cp[3]= alpha > 255 ? 255 : alpha;
}
static void do_projectpaint_clone(ProjPaintState *ps, ProjPixel *projPixel, float *rgba, float alpha, float mask)
@@ -3732,7 +3734,8 @@ static void *do_projectpaint_thread(void *ph_v)
bicubic_interpolation_color(ps->reproject_ibuf, projPixel->newColor.ch, NULL, projPixel->projCoSS[0], projPixel->projCoSS[1]);
if(projPixel->newColor.ch[3]) {
mask = ((float)projPixel->mask)/65535.0f;
- blend_color_mix_rgb(projPixel->pixel.ch_pt, projPixel->origColor.ch, projPixel->newColor.ch, (mask*projPixel->newColor.ch[3]));
+ blend_color_mix_accum(projPixel->pixel.ch_pt, projPixel->origColor.ch, projPixel->newColor.ch, (mask*projPixel->newColor.ch[3]));
+
}
}
}
@@ -4872,6 +4875,7 @@ static int paint_modal(bContext *C, wmOperator *op, wmEvent *event)
paint_exit(C, op);
return OPERATOR_FINISHED;
case MOUSEMOVE:
+ case INBETWEEN_MOUSEMOVE:
paint_apply_event(C, op, event);
break;
case TIMER:
diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c
index 03454a305ba..441464c5743 100644
--- a/source/blender/editors/sculpt_paint/paint_stroke.c
+++ b/source/blender/editors/sculpt_paint/paint_stroke.c
@@ -275,7 +275,7 @@ int paint_stroke_modal(bContext *C, wmOperator *op, wmEvent *event)
MEM_freeN(stroke);
return OPERATOR_FINISHED;
}
- else if(first || event->type == MOUSEMOVE || (event->type == TIMER && (event->customdata == stroke->timer))) {
+ else if(first || ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE) || (event->type == TIMER && (event->customdata == stroke->timer))) {
if(stroke->stroke_started) {
if(paint_smooth_stroke(stroke, mouse, event)) {
if(paint_space_stroke_enabled(stroke->brush)) {
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 28c488ef52c..966efd5bab4 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -92,6 +92,11 @@
/* Number of vertices to average in order to determine the flatten distance */
#define FLATTEN_SAMPLE_SIZE 10
+/* ==== FORWARD DEFINITIONS =====
+ *
+ */
+static void sculpt_vertcos_to_key(Object *ob, KeyBlock *kb, float (*vertCos)[3]);
+
/* ===== STRUCTS =====
*
*/
@@ -284,6 +289,9 @@ typedef struct SculptUndoNode {
/* paint mask */
float *pmask;
int pmask_layer_offset;
+
+ /* shape keys */
+ char *shapeName[32]; /* keep size in sync with keyblock dna */
} SculptUndoNode;
static void update_cb(PBVHNode *node, void *data)
@@ -336,11 +344,30 @@ static void sculpt_undo_restore(bContext *C, ListBase *lb)
if(unode->maxvert) {
float *pmask;
+ char *shapeName= (char*)unode->shapeName;
/* regular mesh restore */
if(ss->totvert != unode->maxvert)
continue;
+ if (ss->kb && strcmp(ss->kb->name, shapeName)) {
+ /* shape key has been changed before calling undo operator */
+
+ Key *key= ob_get_key(ob);
+ KeyBlock *kb= key_get_named_keyblock(key, shapeName);
+
+ if (kb) {
+ ob->shapenr= BLI_findindex(&key->block, kb) + 1;
+ ob->shapeflag|= OB_SHAPE_LOCK;
+
+ sculpt_update_mesh_elements(scene, ob, 0);
+ WM_event_add_notifier(C, NC_OBJECT|ND_DATA, ob);
+ } else {
+ /* key has been removed -- skip this undo node */
+ continue;
+ }
+ }
+
index= unode->index;
mvert= ss->mvert;
@@ -352,10 +379,31 @@ static void sculpt_undo_restore(bContext *C, ListBase *lb)
unode->pmask_layer_offset);
}
- for(i=0; i<unode->totvert; i++) {
- swap_v3_v3(mvert[index[i]].co, unode->co[i]);
- mvert[index[i]].flag |= ME_VERT_PBVH_UPDATE;
- if(unode->pmask)
+
+ if (ss->kb) {
+ float (*vertCos)[3];
+ vertCos= key_to_vertcos(ob, ss->kb);
+
+ for(i=0; i<unode->totvert; i++)
+ swap_v3_v3(vertCos[index[i]], unode->co[i]);
+
+ /* propagate new coords to keyblock */
+ sculpt_vertcos_to_key(ob, ss->kb, vertCos);
+
+ /* pbvh uses it's own mvert array, so coords should be */
+ /* propagated to pbvh here */
+ BLI_pbvh_apply_vertCos(ss->pbvh, vertCos);
+
+ MEM_freeN(vertCos);
+ } else {
+ for(i=0; i<unode->totvert; i++) {
+ swap_v3_v3(mvert[index[i]].co, unode->co[i]);
+ mvert[index[i]].flag |= ME_VERT_PBVH_UPDATE;
+ }
+ }
+
+ if(unode->pmask) {
+ for(i=0; i<unode->totvert; i++)
SWAP(float, pmask[index[i]], unode->pmask[i]);
}
}
@@ -401,9 +449,6 @@ static void sculpt_undo_restore(bContext *C, ListBase *lb)
}
if(update) {
- if(ss->kb) sculpt_mesh_to_key(ss->ob, ss->kb);
- if(ss->refkb) sculpt_key_to_mesh(ss->refkb, ob);
-
/* we update all nodes still, should be more clever, but also
needs to work correct when exiting/entering sculpt mode and
the nodes get recreated, though in that case it could do all */
@@ -413,7 +458,7 @@ static void sculpt_undo_restore(bContext *C, ListBase *lb)
if((mmd=paint_multires_active(scene, ob)))
multires_mark_as_modified(ob);
- if(sculpt_modifiers_active(scene, ob))
+ if(ss->modifiers_active || ((Mesh*)ob->data)->id.us > 1)
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
}
}
@@ -520,7 +565,11 @@ SculptUndoNode *sculpt_undo_push_node(SculptSession *ss, PBVHNode *node)
if(unode->grids)
memcpy(unode->grids, grids, sizeof(int)*totgrid);
-
+
+ /* store active shape key */
+ if(ss->kb) BLI_strncpy((char*)unode->shapeName, ss->kb->name, sizeof(ss->kb->name));
+ else unode->shapeName[0]= '\0';
+
return unode;
}
@@ -1449,6 +1498,68 @@ static void do_mask_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int t
}
}
+static void sculpt_vertcos_to_key(Object *ob, KeyBlock *kb, float (*vertCos)[3])
+{
+ Mesh *me= (Mesh*)ob->data;
+ float (*ofs)[3]= NULL;
+ int a, is_basis= 0;
+ KeyBlock *currkey;
+
+ /* for relative keys editing of base should update other keys */
+ if (me->key->type == KEY_RELATIVE)
+ for (currkey = me->key->block.first; currkey; currkey= currkey->next)
+ if(ob->shapenr-1 == currkey->relative) {
+ is_basis= 1;
+ break;
+ }
+
+ if (is_basis) {
+ ofs= key_to_vertcos(ob, kb);
+
+ /* calculate key coord offsets (from previous location) */
+ for (a= 0; a < me->totvert; a++) {
+ VECSUB(ofs[a], vertCos[a], ofs[a]);
+ }
+
+ /* apply offsets on other keys */
+ currkey = me->key->block.first;
+ while (currkey) {
+ int apply_offset = ((currkey != kb) && (ob->shapenr-1 == currkey->relative));
+
+ if (apply_offset)
+ offset_to_key(ob, currkey, ofs);
+
+ currkey= currkey->next;
+ }
+
+ MEM_freeN(ofs);
+ }
+
+ /* modifying of basis key should update mesh */
+ if (kb == me->key->refkey) {
+ MVert *mvert= me->mvert;
+
+ for (a= 0; a < me->totvert; a++, mvert++)
+ VECCOPY(mvert->co, vertCos[a]);
+
+ mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL);
+ }
+
+ /* apply new coords on active key block */
+ vertcos_to_key(ob, kb, vertCos);
+}
+
+/* copy the modified vertices from bvh to the active key */
+static void sculpt_update_keyblock(SculptSession *ss)
+{
+ float (*vertCos)[3]= BLI_pbvh_get_vertCos(ss->pbvh);
+
+ if (vertCos) {
+ sculpt_vertcos_to_key(ss->ob, ss->kb, vertCos);
+ MEM_freeN(vertCos);
+ }
+}
+
static void do_brush_action(Sculpt *sd, SculptSession *ss, StrokeCache *cache)
{
SculptSearchSphereData data;
@@ -1510,13 +1621,15 @@ static void do_brush_action(Sculpt *sd, SculptSession *ss, StrokeCache *cache)
do_mask_brush(sd, ss, nodes, totnode);
break;
}
-
- /* copy the modified vertices from mesh to the active key */
- if(ss->kb) mesh_to_key(ss->ob->data, ss->kb);
-
+
+ /* optimization: we could avoid copying new coords to keyblock at each */
+ /* stroke step if there are no modifiers due to pbvh is used for displaying */
+ /* so to increase speed we'll copy new coords to keyblock when stroke is done */
+ if(ss->kb && ss->modifiers_active) sculpt_update_keyblock(ss);
+
if(nodes)
MEM_freeN(nodes);
- }
+ }
}
/* Flip all the editdata across the axis/axes specified by symm. Used to
@@ -1568,40 +1681,18 @@ static void sculpt_update_tex(Sculpt *sd, SculptSession *ss)
}
}
-void sculpt_key_to_mesh(KeyBlock *kb, Object *ob)
-{
- Mesh *me= ob->data;
-
- key_to_mesh(kb, me);
- mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL);
-}
-
-void sculpt_mesh_to_key(Object *ob, KeyBlock *kb)
-{
- Mesh *me= ob->data;
-
- mesh_to_key(me, kb);
-}
-
void sculpt_update_mesh_elements(Scene *scene, Object *ob, int need_fmap)
{
- DerivedMesh *dm = mesh_get_derived_final(scene, ob, 0);
+ DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
SculptSession *ss = ob->sculpt;
MultiresModifierData *mmd= paint_multires_active(scene, ob);
ss->ob= ob;
- if((ob->shapeflag & OB_SHAPE_LOCK) && !mmd) {
- ss->kb= ob_get_keyblock(ob);
- ss->refkb= ob_get_reference_keyblock(ob);
- }
- else {
- ss->kb= NULL;
- ss->refkb= NULL;
- }
+ ss->modifiers_active= sculpt_modifiers_active(scene, ob);
- /* need to make PBVH with shape key coordinates */
- if(ss->kb) sculpt_key_to_mesh(ss->kb, ss->ob);
+ if((ob->shapeflag & OB_SHAPE_LOCK) && !mmd) ss->kb= ob_get_keyblock(ob);
+ else ss->kb= NULL;
if(mmd) {
ss->multires = mmd;
@@ -1623,6 +1714,17 @@ void sculpt_update_mesh_elements(Scene *scene, Object *ob, int need_fmap)
ss->pbvh = dm->getPBVH(ob, dm);
ss->fmap = (need_fmap && dm->getFaceMap)? dm->getFaceMap(ob, dm): NULL;
+
+ /* if pbvh is deformed, key block is already applied to it */
+ if (ss->kb && !BLI_pbvh_isDeformed(ss->pbvh)) {
+ float (*vertCos)[3]= key_to_vertcos(ob, ss->kb);
+
+ if (vertCos) {
+ /* apply shape keys coordinates to PBVH */
+ BLI_pbvh_apply_vertCos(ss->pbvh, vertCos);
+ MEM_freeN(vertCos);
+ }
+ }
}
static int sculpt_mode_poll(bContext *C)
@@ -1877,9 +1979,7 @@ static void sculpt_update_cache_variants(Sculpt *sd, SculptSession *ss, struct P
static void sculpt_stroke_modifiers_check(bContext *C, SculptSession *ss)
{
- Scene *scene= CTX_data_scene(C);
-
- if(sculpt_modifiers_active(scene, ss->ob)) {
+ if(ss->modifiers_active) {
Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
Brush *brush = paint_brush(&sd->paint);
@@ -2057,7 +2157,6 @@ static void sculpt_restore_mesh(Sculpt *sd, SculptSession *ss)
static void sculpt_flush_update(bContext *C)
{
- Scene *scene = CTX_data_scene(C);
Object *ob = CTX_data_active_object(C);
SculptSession *ss = ob->sculpt;
ARegion *ar = CTX_wm_region(C);
@@ -2067,7 +2166,7 @@ static void sculpt_flush_update(bContext *C)
if(mmd)
multires_mark_as_modified(ob);
- if(sculpt_modifiers_active(scene, ob)) {
+ if(ss->modifiers_active) {
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
ED_region_tag_redraw(ar);
}
@@ -2151,10 +2250,13 @@ static void sculpt_stroke_done(bContext *C, struct PaintStroke *stroke)
BLI_pbvh_update(ss->pbvh, PBVH_UpdateOriginalBB, NULL);
- if(ss->refkb) sculpt_key_to_mesh(ss->refkb, ob);
+ /* optimization: if there is locked key and active modifiers present in */
+ /* the stack, keyblock is updating at each step. otherwise we could update */
+ /* keyblock only when stroke is finished */
+ if(ss->kb && !ss->modifiers_active) sculpt_update_keyblock(ss);
ss->partial_redraw = 0;
-
+
/* try to avoid calling this, only for e.g. linked duplicates now */
if(((Mesh*)ob->data)->id.us > 1)
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
@@ -2391,9 +2493,6 @@ static void sculpt_init_session(Scene *scene, Object *ob)
ob->sculpt = MEM_callocN(sizeof(SculptSession), "sculpt session");
sculpt_update_mesh_elements(scene, ob, 0);
-
- if(ob->sculpt->refkb)
- sculpt_key_to_mesh(ob->sculpt->refkb, ob);
}
static int sculpt_toggle_mode(bContext *C, wmOperator *op)
diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h b/source/blender/editors/sculpt_paint/sculpt_intern.h
index 12a57d84b75..d0f51c4cb65 100644
--- a/source/blender/editors/sculpt_paint/sculpt_intern.h
+++ b/source/blender/editors/sculpt_paint/sculpt_intern.h
@@ -42,8 +42,6 @@ struct SculptUndoNode;
int sculpt_poll(struct bContext *C);
void sculpt_update_mesh_elements(struct Scene *scene, struct Object *ob, int need_fmap);
-void sculpt_key_to_mesh(struct KeyBlock *kb, struct Object *ob);
-void sculpt_mesh_to_key(struct Object *ob, struct KeyBlock *kb);
/* Undo */
void sculpt_undo_push_begin(struct SculptSession *ss, char *name);
diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c
index 01c8ede6a2a..0e2a7f690c5 100644
--- a/source/blender/editors/space_action/action_edit.c
+++ b/source/blender/editors/space_action/action_edit.c
@@ -1138,6 +1138,7 @@ static int actkeys_framejump_exec(bContext *C, wmOperator *op)
if (ked.i1) {
Scene *scene= ac.scene;
CFRA= (int)floor((ked.f1 / ked.i1) + 0.5f);
+ SUBFRA= 0.f;
}
/* set notifier that things have changed */
diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c
index 36aecd02138..96cf79d880f 100644
--- a/source/blender/editors/space_buttons/buttons_ops.c
+++ b/source/blender/editors/space_buttons/buttons_ops.c
@@ -30,6 +30,7 @@
#include "MEM_guardedalloc.h"
+#include "DNA_userdef_types.h"
#include "BKE_context.h"
@@ -129,6 +130,10 @@ static int file_browse_invoke(bContext *C, wmOperator *op, wmEvent *event)
RNA_string_set(op->ptr, "filepath", str);
MEM_freeN(str);
+ if(RNA_struct_find_property(op->ptr, "relative_path"))
+ if(!RNA_property_is_set(op->ptr, "relative_path"))
+ RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
+
WM_event_add_fileselect(C, op);
return OPERATOR_RUNNING_MODAL;
@@ -147,6 +152,6 @@ void BUTTONS_OT_file_browse(wmOperatorType *ot)
ot->cancel= file_browse_cancel;
/* properties */
- WM_operator_properties_filesel(ot, 0, FILE_SPECIAL, FILE_OPENFILE, 0);
+ WM_operator_properties_filesel(ot, 0, FILE_SPECIAL, FILE_OPENFILE, FILE_RELPATH);
}
diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c
index 9028e5f15c6..7c2a2f436cc 100644
--- a/source/blender/editors/space_file/file_ops.c
+++ b/source/blender/editors/space_file/file_ops.c
@@ -545,7 +545,7 @@ void FILE_OT_cancel(struct wmOperatorType *ot)
int file_exec(bContext *C, wmOperator *exec_op)
{
SpaceFile *sfile= CTX_wm_space_file(C);
- char name[FILE_MAX];
+ char filepath[FILE_MAX];
if(sfile->op) {
wmOperator *op= sfile->op;
@@ -567,16 +567,23 @@ int file_exec(bContext *C, wmOperator *exec_op)
}
sfile->op = NULL;
- RNA_string_set(op->ptr, "filename", sfile->params->file);
- BLI_strncpy(name, sfile->params->dir, sizeof(name));
- RNA_string_set(op->ptr, "directory", name);
- strcat(name, sfile->params->file); // XXX unsafe
- if(RNA_struct_find_property(op->ptr, "relative_path"))
- if(RNA_boolean_get(op->ptr, "relative_path"))
- BLI_path_rel(name, G.sce);
+ BLI_join_dirfile(filepath, sfile->params->dir, sfile->params->file);
+ if(RNA_struct_find_property(op->ptr, "relative_path")) {
+ if(RNA_boolean_get(op->ptr, "relative_path")) {
+ BLI_path_rel(filepath, G.sce);
+ }
+ }
- RNA_string_set(op->ptr, "filepath", name);
+ if(RNA_struct_find_property(op->ptr, "filename")) {
+ RNA_string_set(op->ptr, "filename", sfile->params->file);
+ }
+ if(RNA_struct_find_property(op->ptr, "directory")) {
+ RNA_string_set(op->ptr, "directory", sfile->params->dir);
+ }
+ if(RNA_struct_find_property(op->ptr, "filepath")) {
+ RNA_string_set(op->ptr, "filepath", filepath);
+ }
/* some ops have multiple files to select */
{
@@ -612,8 +619,8 @@ int file_exec(bContext *C, wmOperator *exec_op)
folderlist_free(sfile->folders_next);
fsmenu_insert_entry(fsmenu_get(), FS_CATEGORY_RECENT, sfile->params->dir,0, 1);
- BLI_make_file_string(G.sce, name, BLI_gethome(), ".Bfs");
- fsmenu_write_file(fsmenu_get(), name);
+ BLI_make_file_string(G.sce, filepath, BLI_gethome(), ".Bfs");
+ fsmenu_write_file(fsmenu_get(), filepath);
WM_event_fileselect_event(C, op, EVT_FILESELECT_EXEC);
ED_fileselect_clear(C, sfile);
diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c
index 6834dfac58a..a4a72ad2cd4 100644
--- a/source/blender/editors/space_graph/graph_edit.c
+++ b/source/blender/editors/space_graph/graph_edit.c
@@ -1582,6 +1582,7 @@ static int graphkeys_framejump_exec(bContext *C, wmOperator *op)
/* take the average values, rounding to the nearest int for the current frame */
CFRA= (int)floor((ked.f1 / ked.i1) + 0.5f);
+ SUBFRA= 0.f;
sipo->cursorVal= ked.f2 / (float)ked.i1;
}
diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c
index c6d601f9305..fa9acb282c7 100644
--- a/source/blender/editors/space_graph/graph_ops.c
+++ b/source/blender/editors/space_graph/graph_ops.c
@@ -71,6 +71,7 @@ static void graphview_cursor_apply(bContext *C, wmOperator *op)
* NOTE: sync this part of the code with ANIM_OT_change_frame
*/
CFRA= RNA_int_get(op->ptr, "frame");
+ SUBFRA=0.f;
sound_seek_scene(C);
/* set the cursor value */
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index c4265c6e011..f84fd6fc430 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -780,7 +780,6 @@ static int replace_exec(bContext *C, wmOperator *op)
static int replace_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
SpaceImage *sima= CTX_wm_space_image(C);
- char *path= (sima->image)? sima->image->name: U.textudir;
if(!sima->image)
return OPERATOR_CANCELLED;
@@ -788,7 +787,10 @@ static int replace_invoke(bContext *C, wmOperator *op, wmEvent *event)
if(RNA_property_is_set(op->ptr, "filepath"))
return replace_exec(C, op);
- image_filesel(C, op, path);
+ if(!RNA_property_is_set(op->ptr, "relative_path"))
+ RNA_boolean_set(op->ptr, "relative_path", (strncmp(sima->image->name, "//", 2))==0);
+
+ image_filesel(C, op, sima->image->name);
return OPERATOR_RUNNING_MODAL;
}
@@ -808,7 +810,7 @@ void IMAGE_OT_replace(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* properties */
- WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE|MOVIEFILE, FILE_SPECIAL, FILE_OPENFILE, 0); //XXX TODO, relative_path
+ WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE|MOVIEFILE, FILE_SPECIAL, FILE_OPENFILE, FILE_RELPATH);
}
/******************** save image as operator ********************/
diff --git a/source/blender/editors/space_logic/logic_window.c b/source/blender/editors/space_logic/logic_window.c
index 104bcc6286d..26b4b6fc08c 100644
--- a/source/blender/editors/space_logic/logic_window.c
+++ b/source/blender/editors/space_logic/logic_window.c
@@ -3172,9 +3172,9 @@ static int is_sensor_linked(uiBlock *block, bSensor *sens)
/* Sensors code */
-static void draw_sensor_header(uiLayout *layout, PointerRNA *ptr)
+static void draw_sensor_header(uiLayout *layout, PointerRNA *ptr, PointerRNA *logic_ptr)
{
- uiLayout *box, *row;
+ uiLayout *box, *row, *subrow;
box= uiLayoutBox(layout);
row= uiLayoutRow(box, 0);
@@ -3182,6 +3182,12 @@ static void draw_sensor_header(uiLayout *layout, PointerRNA *ptr)
uiItemR(row, ptr, "expanded", UI_ITEM_R_NO_BG, "", 0);
uiItemR(row, ptr, "type", 0, "", 0);
uiItemR(row, ptr, "name", 0, "", 0);
+
+ subrow= uiLayoutRow(row, 0);
+ uiLayoutSetActive(subrow, ((RNA_boolean_get(logic_ptr, "sensors_show_active_states")
+ && RNA_boolean_get(ptr, "expanded")) || RNA_boolean_get(ptr, "pinned")));
+ uiItemR(subrow, ptr, "pinned", UI_ITEM_R_NO_BG, "", 0);
+
uiItemO(row, "", ICON_X, "LOGIC_OT_sensor_remove");
}
@@ -3584,9 +3590,9 @@ void draw_brick_controller(uiLayout *layout, PointerRNA *ptr)
}
/* Actuator code */
-static void draw_actuator_header(uiLayout *layout, PointerRNA *ptr)
+static void draw_actuator_header(uiLayout *layout, PointerRNA *ptr, PointerRNA *logic_ptr)
{
- uiLayout *box, *row;
+ uiLayout *box, *row, *subrow;
box= uiLayoutBox(layout);
row= uiLayoutRow(box, 0);
@@ -3594,6 +3600,12 @@ static void draw_actuator_header(uiLayout *layout, PointerRNA *ptr)
uiItemR(row, ptr, "expanded", UI_ITEM_R_NO_BG, "", 0);
uiItemR(row, ptr, "type", 0, "", 0);
uiItemR(row, ptr, "name", 0, "", 0);
+
+ subrow= uiLayoutRow(row, 0);
+ uiLayoutSetActive(subrow, ((RNA_boolean_get(logic_ptr, "actuators_show_active_states")
+ && RNA_boolean_get(ptr, "expanded")) || RNA_boolean_get(ptr, "pinned")));
+ uiItemR(subrow, ptr, "pinned", UI_ITEM_R_NO_BG, "", 0);
+
uiItemO(row, "", ICON_X, "LOGIC_OT_actuator_remove");
}
@@ -4351,7 +4363,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
PointerRNA logic_ptr, settings_ptr;
- uiLayout *layout, *row, *split, *subsplit, *box, *col;
+ uiLayout *layout, *row, *box;
uiBlock *block;
uiBut *but;
char name[32];
@@ -4367,13 +4379,17 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
block= uiBeginBlock(C, ar, name, UI_EMBOSS);
uiBlockSetHandleFunc(block, do_logic_buts, NULL);
- /* clean ACT_LINKED and ACT_VISIBLE of all potentially visible actuators so that
- we can determine which is actually linked/visible */
+ /* loop over all objects and set visible/linked flags for the logic bricks */
for(a=0; a<count; a++) {
bActuator *act;
bSensor *sens;
+ bController *cont;
+ int iact;
+ short flag;
+
ob= (Object *)idar[a];
+ /* clean ACT_LINKED and ACT_VISIBLE of all potentially visible actuators so that we can determine which is actually linked/visible */
act = ob->actuators.first;
while(act) {
act->flag &= ~(ACT_LINKED|ACT_VISIBLE);
@@ -4385,6 +4401,23 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
sens->flag &= ~(SENS_VISIBLE);
sens = sens->next;
}
+
+ /* mark the linked and visible actuators */
+ cont= ob->controllers.first;
+ while(cont) {
+ flag = ACT_LINKED;
+
+ /* this controller is visible, mark all its actuator */
+ if ((ob->scaflag & OB_ALLSTATE) || (ob->state & cont->state_mask))
+ flag |= ACT_VISIBLE;
+
+ for (iact=0; iact<cont->totlinks; iact++) {
+ act = cont->links[iact];
+ if (act)
+ act->flag |= flag;
+ }
+ cont = cont->next;
+ }
}
/* ****************** Controllers ****************** */
@@ -4393,7 +4426,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, xco, yco, width, 20, U.uistyles.first);
row = uiLayoutRow(layout, 1);
- uiDefBlockBut(block, controller_menu, NULL, "Controllers", xco-10, yco, 70, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
+ uiDefBlockBut(block, controller_menu, NULL, "Controllers", xco-10, yco, 300, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
uiItemR(row, &logic_ptr, "controllers_show_selected_objects", 0, "Sel", 0);
uiItemR(row, &logic_ptr, "controllers_show_active_objects", 0, "Act", 0);
@@ -4403,9 +4436,12 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
bController *cont;
PointerRNA ptr;
uiLayout *split, *subsplit, *col;
- int iact;
+
ob= (Object *)idar[a];
+
+ /* only draw the controller common header if "visible" */
+ if( (ob->scavisflag & OB_VIS_CONT) == 0) continue;
/* Drawing the Controller Header common to all Selected Objects */
@@ -4442,7 +4478,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
/* End of Drawing the Controller Header common to all Selected Objects */
- if (!(ob->scavisflag & OB_VIS_CONT) || !(ob->scaflag & OB_SHOWCONT)) continue;
+ if ((ob->scaflag & OB_SHOWCONT) == 0) continue;
uiItemS(layout);
@@ -4452,16 +4488,6 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
if (!(ob->scaflag & OB_ALLSTATE) && !(ob->state & cont->state_mask))
continue;
- //if (!(cont->state_mask & (1<<stbit)))
- // continue;
-
- /* this controller is visible, mark all its actuator */
- /* XXX: perhaps move this to a preprocessing stage if possible? */
- for (iact=0; iact<cont->totlinks; iact++) {
- bActuator *act = cont->links[iact];
- if (act)
- act->flag |= ACT_VISIBLE;
- }
/* use two nested splits to align inlinks/links properly */
split = uiLayoutSplit(layout, 0.05, 0);
@@ -4501,7 +4527,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, xco, yco, width, 20, U.uistyles.first);
row = uiLayoutRow(layout, 1);
- uiDefBlockBut(block, sensor_menu, NULL, "Sensors", xco-10, yco, 70, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
+ uiDefBlockBut(block, sensor_menu, NULL, "Sensors", xco-10, yco, 300, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
uiItemR(row, &logic_ptr, "sensors_show_selected_objects", 0, "Sel", 0);
uiItemR(row, &logic_ptr, "sensors_show_active_objects", 0, "Act", 0);
@@ -4514,11 +4540,14 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
ob= (Object *)idar[a];
+ /* only draw the sensor common header if "visible" */
+ if((ob->scavisflag & OB_VIS_SENS) == 0) continue;
+
row = uiLayoutRow(layout, 1);
uiDefButBitS(block, TOG, OB_SHOWSENS, B_REDR, ob->id.name+2,(short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 31, 0, 0, "Object name, click to show/hide sensors");
uiItemMenuEnumO(row, "LOGIC_OT_sensor_add", "type", "Add Sensor", 0);
- if (!(ob->scavisflag & OB_VIS_SENS) || !(ob->scaflag & OB_SHOWSENS)) continue;
+ if ((ob->scaflag & OB_SHOWSENS) == 0) continue;
uiItemS(layout);
@@ -4526,7 +4555,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
RNA_pointer_create((ID *)ob, &RNA_Sensor, sens, &ptr);
if ((ob->scaflag & OB_ALLSTATE) ||
- (slogic->scaflag & BUTS_SENS_STATE) ||
+ !(slogic->scaflag & BUTS_SENS_STATE) ||
(sens->totlinks == 0) || /* always display sensor without links so that is can be edited */
(sens->flag & SENS_PIN && slogic->scaflag & BUTS_SENS_STATE) || /* states can hide some sensors, pinned sensors ignore the visible state */
(is_sensor_linked(block, sens))
@@ -4539,7 +4568,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
uiLayoutSetContextPointer(col, "sensor", &ptr);
/* should make UI template for sensor header.. function will do for now */
- draw_sensor_header(col, &ptr);
+ draw_sensor_header(col, &ptr, &logic_ptr);
/* draw the brick contents */
draw_brick_sensor(col, &ptr, C);
@@ -4560,7 +4589,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, xco, yco, width, 20, U.uistyles.first);
row = uiLayoutRow(layout, 1);
- uiDefBlockBut(block, sensor_menu, NULL, "Actuators", xco-10, yco, 70, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
+ uiDefBlockBut(block, actuator_menu, NULL, "Actuators", xco-10, yco, 300, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
uiItemR(row, &logic_ptr, "actuators_show_selected_objects", 0, "Sel", 0);
uiItemR(row, &logic_ptr, "actuators_show_active_objects", 0, "Act", 0);
@@ -4573,11 +4602,14 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
ob= (Object *)idar[a];
+ /* only draw the actuator common header if "visible" */
+ if( (ob->scavisflag & OB_VIS_ACT) == 0) continue;
+
row = uiLayoutRow(layout, 1);
uiDefButBitS(block, TOG, OB_SHOWACT, B_REDR, ob->id.name+2,(short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 31, 0, 0, "Object name, click to show/hide actuators");
uiItemMenuEnumO(row, "LOGIC_OT_actuator_add", "type", "Add Actuator", 0);
- if (!(ob->scavisflag & OB_VIS_ACT) || !(ob->scaflag & OB_SHOWACT)) continue;
+ if ((ob->scaflag & OB_SHOWACT) == 0) continue;
uiItemS(layout);
@@ -4586,7 +4618,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
RNA_pointer_create((ID *)ob, &RNA_Actuator, act, &ptr);
if ((ob->scaflag & OB_ALLSTATE) ||
- (slogic->scaflag & BUTS_ACT_STATE) ||
+ !(slogic->scaflag & BUTS_ACT_STATE) ||
!(act->flag & ACT_LINKED) || /* always display actuators without links so that is can be edited */
(act->flag & ACT_VISIBLE) || /* this actuator has visible connection, display it */
(act->flag & ACT_PIN && slogic->scaflag & BUTS_ACT_STATE) /* states can hide some sensors, pinned sensors ignore the visible state */
@@ -4604,7 +4636,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
uiLayoutSetContextPointer(col, "actuator", &ptr);
/* should make UI template for actuator header.. function will do for now */
- draw_actuator_header(col, &ptr);
+ draw_actuator_header(col, &ptr, &logic_ptr);
/* draw the brick contents */
draw_brick_actuator(col, &ptr, C);
diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c
index aed8472b8d9..bcf186ad4e9 100644
--- a/source/blender/editors/space_outliner/outliner.c
+++ b/source/blender/editors/space_outliner/outliner.c
@@ -1927,7 +1927,8 @@ static int tree_element_active_material(bContext *C, Scene *scene, SpaceOops *so
/* we search for the object parent */
ob= (Object *)outliner_search_back(soops, te, ID_OB);
- if(ob==NULL || ob!=OBACT) return 0; // just paranoia
+ // note: ob->matbits can be NULL when a local object points to a library mesh.
+ if(ob==NULL || ob!=OBACT || ob->matbits==NULL) return 0; // just paranoia
/* searching in ob mat array? */
tes= te->parent;
diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c
index 06c7725984a..1a56cb6d683 100644
--- a/source/blender/editors/space_sequencer/sequencer_add.c
+++ b/source/blender/editors/space_sequencer/sequencer_add.c
@@ -43,6 +43,7 @@
#include "DNA_scene_types.h"
+#include "DNA_userdef_types.h"
#include "BKE_context.h"
#include "BKE_global.h"
@@ -203,7 +204,7 @@ static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op)
if (RNA_boolean_get(op->ptr, "replace_sel")) {
deselect_all_seq(scene);
- active_seq_set(scene, seq);
+ seq_active_set(scene, seq);
seq->flag |= SELECT;
}
@@ -313,6 +314,9 @@ static int sequencer_add_movie_strip_invoke(bContext *C, wmOperator *op, wmEvent
return OPERATOR_CANCELLED;
}
+ if(!RNA_property_is_set(op->ptr, "relative_path"))
+ RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
+
sequencer_generic_invoke_xy__internal(C, op, event, 0);
return WM_operator_filesel(C, op, event);
//return sequencer_add_movie_strip_exec(C, op);
@@ -336,7 +340,7 @@ void SEQUENCER_OT_movie_strip_add(struct wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
- WM_operator_properties_filesel(ot, FOLDERFILE|MOVIEFILE, FILE_SPECIAL, FILE_OPENFILE, 0); //XXX TODO, relative_path
+ WM_operator_properties_filesel(ot, FOLDERFILE|MOVIEFILE, FILE_SPECIAL, FILE_OPENFILE, FILE_RELPATH);
sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_FILES);
RNA_def_boolean(ot->srna, "sound", TRUE, "Sound", "Load sound with the movie");
}
@@ -355,6 +359,9 @@ static int sequencer_add_sound_strip_invoke(bContext *C, wmOperator *op, wmEvent
return OPERATOR_CANCELLED;
}
+ if(!RNA_property_is_set(op->ptr, "relative_path"))
+ RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
+
sequencer_generic_invoke_xy__internal(C, op, event, 0);
return WM_operator_filesel(C, op, event);
//return sequencer_add_sound_strip_exec(C, op);
@@ -378,7 +385,7 @@ void SEQUENCER_OT_sound_strip_add(struct wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
- WM_operator_properties_filesel(ot, FOLDERFILE|SOUNDFILE, FILE_SPECIAL, FILE_OPENFILE, 0); //XXX TODO, relative_path
+ WM_operator_properties_filesel(ot, FOLDERFILE|SOUNDFILE, FILE_SPECIAL, FILE_OPENFILE, FILE_RELPATH);
sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_FILES);
RNA_def_boolean(ot->srna, "cache", FALSE, "Cache", "Cache the sound in memory.");
}
@@ -446,6 +453,9 @@ static int sequencer_add_image_strip_invoke(bContext *C, wmOperator *op, wmEvent
return OPERATOR_CANCELLED;
}
+ if(!RNA_property_is_set(op->ptr, "relative_path"))
+ RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
+
sequencer_generic_invoke_xy__internal(C, op, event, SEQPROP_ENDFRAME);
return WM_operator_filesel(C, op, event);
//return sequencer_add_image_strip_exec(C, op);
@@ -469,7 +479,7 @@ void SEQUENCER_OT_image_strip_add(struct wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
- WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE, FILE_SPECIAL, FILE_OPENFILE, 0); //XXX TODO, relative_path
+ WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE, FILE_SPECIAL, FILE_OPENFILE, FILE_RELPATH);
sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_ENDFRAME|SEQPROP_FILES);
}
@@ -572,7 +582,7 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op)
if (RNA_boolean_get(op->ptr, "replace_sel")) {
deselect_all_seq(scene);
- active_seq_set(scene, seq);
+ seq_active_set(scene, seq);
seq->flag |= SELECT;
}
@@ -593,6 +603,10 @@ static int sequencer_add_effect_strip_invoke(bContext *C, wmOperator *op, wmEven
sequencer_generic_invoke_xy__internal(C, op, event, SEQPROP_ENDFRAME);
if (RNA_property_is_set(op->ptr, "type") && RNA_enum_get(op->ptr, "type")==SEQ_PLUGIN) {
+
+ if(!RNA_property_is_set(op->ptr, "relative_path"))
+ RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
+
/* only plugins need the file selector */
return WM_operator_filesel(C, op, event);
}
@@ -617,7 +631,7 @@ void SEQUENCER_OT_effect_strip_add(struct wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
- WM_operator_properties_filesel(ot, 0, FILE_SPECIAL, FILE_OPENFILE, 0); //XXX TODO, relative_path
+ WM_operator_properties_filesel(ot, 0, FILE_SPECIAL, FILE_OPENFILE, FILE_RELPATH);
sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_ENDFRAME);
RNA_def_enum(ot->srna, "type", sequencer_prop_effect_types, SEQ_CROSS, "Type", "Sequencer effect type");
RNA_def_float_vector(ot->srna, "color", 3, NULL, 0.0f, 1.0f, "Color", "Initialize the strip with this color (only used when type='COLOR')", 0.0f, 1.0f);
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index 4f8ded4e315..bf7f053ad71 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -900,7 +900,7 @@ static void draw_seq_strips(const bContext *C, Editing *ed, ARegion *ar)
Scene *scene= CTX_data_scene(C);
SpaceSeq *sseq= CTX_wm_space_seq(C);
View2D *v2d= &ar->v2d;
- Sequence *last_seq = active_seq_get(scene);
+ Sequence *last_seq = seq_active_get(scene);
int sel = 0, j;
float pixelx = (v2d->cur.xmax - v2d->cur.xmin)/(v2d->mask.xmax - v2d->mask.xmin);
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index dedde7e10c3..6d225647a52 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -75,10 +75,6 @@
/* own include */
#include "sequencer_intern.h"
-/* XXX */
-//static Sequence *_last_seq=0;
-//static int _last_seq_init=0;
-/* XXX */
static void error(const char *dummy) {}
static void waitcursor(int val) {}
static void activate_fileselect(int d1, char *d2, char *d3, void *d4) {}
@@ -167,7 +163,7 @@ static void change_plugin_seq(Scene *scene, char *str) /* called from fileselect
{
Editing *ed= seq_give_editing(scene, FALSE);
struct SeqEffectHandle sh;
- Sequence *last_seq= active_seq_get(scene);
+ Sequence *last_seq= seq_active_get(scene);
if(last_seq && last_seq->type != SEQ_PLUGIN) return;
@@ -393,7 +389,7 @@ void deselect_all_seq(Scene *scene)
if(ed==NULL) return;
SEQP_BEGIN(ed, seq) {
- seq->flag &= SEQ_DESEL;
+ seq->flag &= ~SEQ_ALLSEL;
}
SEQ_END
@@ -406,9 +402,9 @@ void recurs_sel_seq(Sequence *seqm)
seq= seqm->seqbase.first;
while(seq) {
- if(seqm->flag & (SEQ_LEFTSEL+SEQ_RIGHTSEL)) seq->flag &= SEQ_DESEL;
+ if(seqm->flag & (SEQ_LEFTSEL+SEQ_RIGHTSEL)) seq->flag &= ~SEQ_ALLSEL;
else if(seqm->flag & SELECT) seq->flag |= SELECT;
- else seq->flag &= SEQ_DESEL;
+ else seq->flag &= ~SEQ_ALLSEL;
if(seq->seqbase.first) recurs_sel_seq(seq);
@@ -441,7 +437,7 @@ static void reload_sound_strip(Scene *scene, char *name)
Editing *ed;
Sequence *seq, *seqact;
SpaceFile *sfile;
- Sequence *last_seq= active_seq_get(scene);
+ Sequence *last_seq= seq_active_get(scene);
ed= scene->ed;
@@ -483,7 +479,7 @@ static void reload_image_strip(Scene *scene, char *name)
Editing *ed= seq_give_editing(scene, FALSE);
Sequence *seq=NULL, *seqact;
SpaceFile *sfile=NULL;
- Sequence *last_seq= active_seq_get(scene);
+ Sequence *last_seq= seq_active_get(scene);
@@ -519,7 +515,7 @@ static void reload_image_strip(Scene *scene, char *name)
void change_sequence(Scene *scene)
{
Editing *ed= seq_give_editing(scene, FALSE);
- Sequence *last_seq= active_seq_get(scene);
+ Sequence *last_seq= seq_active_get(scene);
Scene *sce;
short event;
@@ -621,7 +617,7 @@ int seq_effect_find_selected(Scene *scene, Sequence *activeseq, int type, Sequen
*error_str= NULL;
if (!activeseq)
- seq2= active_seq_get(scene);
+ seq2= seq_active_get(scene);
for(seq=ed->seqbasep->first; seq; seq=seq->next) {
if(seq->flag & SELECT) {
@@ -684,7 +680,7 @@ int seq_effect_find_selected(Scene *scene, Sequence *activeseq, int type, Sequen
void reassign_inputs_seq_effect(Scene *scene)
{
Editing *ed= seq_give_editing(scene, FALSE);
- Sequence *seq1, *seq2, *seq3, *last_seq = active_seq_get(scene);
+ Sequence *seq1, *seq2, *seq3, *last_seq = seq_active_get(scene);
char *error_msg;
if(last_seq==0 || !(last_seq->type & SEQ_EFFECT)) return;
@@ -753,7 +749,7 @@ static Sequence *del_seq_find_replace_recurs(Scene *scene, Sequence *seq)
static void recurs_del_seq_flag(Scene *scene, ListBase *lb, short flag, short deleteall)
{
Sequence *seq, *seqn;
- Sequence *last_seq = active_seq_get(scene);
+ Sequence *last_seq = seq_active_get(scene);
seq= lb->first;
while(seq) {
@@ -763,7 +759,7 @@ static void recurs_del_seq_flag(Scene *scene, ListBase *lb, short flag, short de
seq->sound->id.us--;
BLI_remlink(lb, seq);
- if(seq==last_seq) active_seq_set(scene, NULL);
+ if(seq==last_seq) seq_active_set(scene, NULL);
if(seq->type==SEQ_META) recurs_del_seq_flag(scene, &seq->seqbase, flag, 1);
if(seq->ipo) seq->ipo->id.us--;
seq_free_sequence(scene, seq);
@@ -772,132 +768,6 @@ static void recurs_del_seq_flag(Scene *scene, ListBase *lb, short flag, short de
}
}
-static Sequence *dupli_seq(struct Scene *scene, Sequence *seq)
-{
- Sequence *seqn = MEM_dupallocN(seq);
-
- seq->tmp = seqn;
- seqn->strip= MEM_dupallocN(seq->strip);
-
- // XXX: add F-Curve duplication stuff?
-
- seqn->strip->tstripdata = 0;
- seqn->strip->tstripdata_startstill = 0;
- seqn->strip->tstripdata_endstill = 0;
- seqn->strip->ibuf_startstill = 0;
- seqn->strip->ibuf_endstill = 0;
-
- if (seq->strip->crop) {
- seqn->strip->crop = MEM_dupallocN(seq->strip->crop);
- }
-
- if (seq->strip->transform) {
- seqn->strip->transform = MEM_dupallocN(seq->strip->transform);
- }
-
- if (seq->strip->proxy) {
- seqn->strip->proxy = MEM_dupallocN(seq->strip->proxy);
- }
-
- if (seq->strip->color_balance) {
- seqn->strip->color_balance
- = MEM_dupallocN(seq->strip->color_balance);
- }
-
- if(seq->type==SEQ_META) {
- seqn->strip->stripdata = 0;
-
- seqn->seqbase.first= seqn->seqbase.last= 0;
- /* WATCH OUT!!! - This metastrip is not recursively duplicated here - do this after!!! */
- /* - recurs_dupli_seq(&seq->seqbase,&seqn->seqbase);*/
- } else if(seq->type == SEQ_SCENE) {
- seqn->strip->stripdata = 0;
- if(seq->scene_sound)
- seqn->scene_sound = sound_scene_add_scene_sound(scene, seqn, seq->startdisp, seq->enddisp, seq->startofs + seq->anim_startofs);
- } else if(seq->type == SEQ_MOVIE) {
- seqn->strip->stripdata =
- MEM_dupallocN(seq->strip->stripdata);
- seqn->anim= 0;
- } else if(seq->type == SEQ_SOUND) {
- seqn->strip->stripdata =
- MEM_dupallocN(seq->strip->stripdata);
- if(seq->scene_sound)
- seqn->scene_sound = sound_add_scene_sound(scene, seqn, seq->startdisp, seq->enddisp, seq->startofs + seq->anim_startofs);
-
- seqn->sound->id.us++;
- } else if(seq->type == SEQ_IMAGE) {
- seqn->strip->stripdata =
- MEM_dupallocN(seq->strip->stripdata);
- } else if(seq->type >= SEQ_EFFECT) {
- if(seq->seq1 && seq->seq1->tmp) seqn->seq1= seq->seq1->tmp;
- if(seq->seq2 && seq->seq2->tmp) seqn->seq2= seq->seq2->tmp;
- if(seq->seq3 && seq->seq3->tmp) seqn->seq3= seq->seq3->tmp;
-
- if (seq->type & SEQ_EFFECT) {
- struct SeqEffectHandle sh;
- sh = get_sequence_effect(seq);
- if(sh.copy)
- sh.copy(seq, seqn);
- }
-
- seqn->strip->stripdata = 0;
-
- } else {
- fprintf(stderr, "Aiiiiekkk! sequence type not "
- "handled in duplicate!\nExpect a crash"
- " now...\n");
- }
-
- seqbase_unique_name_recursive(&scene->ed->seqbase, seqn);
-
- return seqn;
-}
-
-static Sequence * deep_dupli_seq(struct Scene *scene, Sequence * seq)
-{
- Sequence * seqn = dupli_seq(scene, seq);
- if (seq->type == SEQ_META) {
- Sequence * s;
- for(s= seq->seqbase.first; s; s = s->next) {
- Sequence * n = deep_dupli_seq(scene, s);
- if (n) {
- BLI_addtail(&seqn->seqbase, n);
- }
- }
- }
- return seqn;
-}
-
-
-static void recurs_dupli_seq(Scene *scene, ListBase *old, ListBase *new, int do_context)
-{
- Sequence *seq;
- Sequence *seqn = 0;
- Sequence *last_seq = active_seq_get(scene);
-
- for(seq= old->first; seq; seq= seq->next) {
- seq->tmp= NULL;
- if(seq->flag & SELECT) {
- seqn = dupli_seq(scene, seq);
- if (seqn) { /*should never fail */
- if(do_context) {
- seq->flag &= SEQ_DESEL;
- seqn->flag &= ~(SEQ_LEFTSEL+SEQ_RIGHTSEL+SEQ_LOCK);
- }
-
- BLI_addtail(new, seqn);
- if(seq->type==SEQ_META)
- recurs_dupli_seq(scene, &seq->seqbase,&seqn->seqbase, do_context);
-
- if(do_context) {
- if (seq == last_seq) {
- active_seq_set(scene, seqn);
- }
- }
- }
- }
- }
-}
static Sequence *cut_seq_hard(Scene *scene, Sequence * seq, int cutframe)
{
@@ -951,7 +821,7 @@ static Sequence *cut_seq_hard(Scene *scene, Sequence * seq, int cutframe)
if (!skip_dup) {
/* Duplicate AFTER the first change */
- seqn = deep_dupli_seq(scene, seq);
+ seqn = seq_dupli_recursive(scene, seq, SEQ_DUPE_UNIQUE_NAME);
}
if (seqn) {
@@ -1040,7 +910,7 @@ static Sequence *cut_seq_soft(Scene *scene, Sequence * seq, int cutframe)
if (!skip_dup) {
/* Duplicate AFTER the first change */
- seqn = deep_dupli_seq(scene, seq);
+ seqn = seq_dupli_recursive(scene, seq, SEQ_DUPE_UNIQUE_NAME);
}
if (seqn) {
@@ -1190,7 +1060,7 @@ void set_filter_seq(Scene *scene)
void seq_remap_paths(Scene *scene)
{
- Sequence *seq, *last_seq = active_seq_get(scene);
+ Sequence *seq, *last_seq = seq_active_get(scene);
Editing *ed= seq_give_editing(scene, FALSE);
char from[FILE_MAX], to[FILE_MAX], stripped[FILE_MAX];
@@ -1625,11 +1495,11 @@ static int sequencer_cut_exec(bContext *C, wmOperator *op)
SEQP_BEGIN(ed, seq) {
if (cut_side==SEQ_SIDE_LEFT) {
if ( seq->startdisp >= cut_frame ) {
- seq->flag &= SEQ_DESEL;
+ seq->flag &= ~SEQ_ALLSEL;
}
} else {
if ( seq->enddisp <= cut_frame ) {
- seq->flag &= SEQ_DESEL;
+ seq->flag &= ~SEQ_ALLSEL;
}
}
}
@@ -1691,17 +1561,17 @@ static int sequencer_add_duplicate_exec(bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
Editing *ed= seq_give_editing(scene, FALSE);
- ListBase new= {NULL, NULL};
+ ListBase nseqbase= {NULL, NULL};
if(ed==NULL)
return OPERATOR_CANCELLED;
- recurs_dupli_seq(scene, ed->seqbasep, &new, TRUE);
+ seqbase_dupli_recursive(scene, &nseqbase, ed->seqbasep, SEQ_DUPE_UNIQUE_NAME|SEQ_DUPE_CONTEXT);
- if(new.first) {
- Sequence * seq= new.first;
- /* rely on the new list being added at the end */
- addlisttolist(ed->seqbasep, &new);
+ if(nseqbase.first) {
+ Sequence * seq= nseqbase.first;
+ /* rely on the nseqbase list being added at the end */
+ addlisttolist(ed->seqbasep, &nseqbase);
for( ; seq; seq= seq->next)
seqbase_unique_name_recursive(&ed->seqbase, seq);
@@ -1751,7 +1621,7 @@ static int sequencer_delete_exec(bContext *C, wmOperator *op)
MetaStack *ms;
int nothingSelected = TRUE;
- seq=active_seq_get(scene);
+ seq=seq_active_get(scene);
if (seq && seq->flag & SELECT) { /* avoid a loop since this is likely to be selected */
nothingSelected = FALSE;
} else {
@@ -1918,7 +1788,7 @@ static int sequencer_meta_toggle_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Editing *ed= seq_give_editing(scene, FALSE);
- Sequence *last_seq= active_seq_get(scene);
+ Sequence *last_seq= seq_active_get(scene);
MetaStack *ms;
if(last_seq && last_seq->type==SEQ_META && last_seq->flag & SELECT) {
@@ -1930,7 +1800,7 @@ static int sequencer_meta_toggle_exec(bContext *C, wmOperator *op)
ed->seqbasep= &last_seq->seqbase;
- active_seq_set(scene, NULL);
+ seq_active_set(scene, NULL);
}
else {
@@ -1950,7 +1820,7 @@ static int sequencer_meta_toggle_exec(bContext *C, wmOperator *op)
for(seq= ed->seqbasep->first; seq; seq= seq->next)
calc_sequence(scene, seq);
- active_seq_set(scene, ms->parseq);
+ seq_active_set(scene, ms->parseq);
ms->parseq->flag |= SELECT;
recurs_sel_seq(ms->parseq);
@@ -2020,7 +1890,7 @@ static int sequencer_meta_make_exec(bContext *C, wmOperator *op)
seqm->strip->len= seqm->len;
seqm->strip->us= 1;
- active_seq_set(scene, seqm);
+ seq_active_set(scene, seqm);
if( seq_test_overlap(ed->seqbasep, seqm) ) shuffle_seq(ed->seqbasep, seqm, scene);
@@ -2065,7 +1935,7 @@ static int sequencer_meta_separate_exec(bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
Editing *ed= seq_give_editing(scene, FALSE);
- Sequence *seq, *last_seq = active_seq_get(scene); /* last_seq checks ed==NULL */
+ Sequence *seq, *last_seq = seq_active_get(scene); /* last_seq checks ed==NULL */
if(last_seq==NULL || last_seq->type!=SEQ_META)
return OPERATOR_CANCELLED;
@@ -2521,7 +2391,7 @@ static int sequencer_swap_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Editing *ed= seq_give_editing(scene, FALSE);
- Sequence *active_seq = active_seq_get(scene);
+ Sequence *active_seq = seq_active_get(scene);
Sequence *seq, *iseq;
int side= RNA_enum_get(op->ptr, "side");
@@ -2597,7 +2467,7 @@ static int sequencer_rendersize_exec(bContext *C, wmOperator *op)
{
int retval = OPERATOR_CANCELLED;
Scene *scene= CTX_data_scene(C);
- Sequence *active_seq = active_seq_get(scene);
+ Sequence *active_seq = seq_active_get(scene);
if(active_seq==NULL)
return OPERATOR_CANCELLED;
@@ -2670,7 +2540,7 @@ static int sequencer_copy_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- recurs_dupli_seq(scene, ed->seqbasep, &seqbase_clipboard, FALSE);
+ seqbase_dupli_recursive(scene, &seqbase_clipboard, ed->seqbasep, SEQ_DUPE_UNIQUE_NAME);
seqbase_clipboard_frame= scene->r.cfra;
/* Need to remove anything that references the current scene */
@@ -2717,23 +2587,23 @@ static int sequencer_paste_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Editing *ed= seq_give_editing(scene, TRUE); /* create if needed */
- ListBase new = {NULL, NULL};
+ ListBase nseqbase = {NULL, NULL};
int ofs;
Sequence *iseq;
deselect_all_seq(scene);
ofs = scene->r.cfra - seqbase_clipboard_frame;
- recurs_dupli_seq(scene, &seqbase_clipboard, &new, FALSE);
+ seqbase_dupli_recursive(scene, &nseqbase, &seqbase_clipboard, SEQ_DUPE_UNIQUE_NAME);
/* transform pasted strips before adding */
if(ofs) {
- for(iseq= new.first; iseq; iseq= iseq->next) {
+ for(iseq= nseqbase.first; iseq; iseq= iseq->next) {
seq_offset(scene, iseq, ofs);
}
}
- addlisttolist(ed->seqbasep, &new);
+ addlisttolist(ed->seqbasep, &nseqbase);
WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
@@ -2756,3 +2626,45 @@ void SEQUENCER_OT_paste(wmOperatorType *ot)
/* properties */
}
+
+static int sequencer_swap_data_exec(bContext *C, wmOperator *op)
+{
+ Scene *scene= CTX_data_scene(C);
+ Sequence *seq_act;
+ Sequence *seq_other;
+
+ if(seq_active_pair_get(scene, &seq_act, &seq_other) == 0) {
+ BKE_report(op->reports, RPT_ERROR, "Must select 2 strips");
+ return OPERATOR_CANCELLED;
+ }
+
+ if(seq_swap(seq_act, seq_other) == 0) {
+ BKE_report(op->reports, RPT_ERROR, "Strips were not compatible");
+ return OPERATOR_CANCELLED;
+ }
+
+ calc_sequence(scene, seq_act);
+ calc_sequence(scene, seq_other);
+
+ WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
+
+ return OPERATOR_FINISHED;
+}
+
+void SEQUENCER_OT_swap_data(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Sequencer Swap Data";
+ ot->idname= "SEQUENCER_OT_swap_data";
+ ot->description="Swap 2 sequencer strips";
+
+ /* api callbacks */
+ ot->exec= sequencer_swap_data_exec;
+ ot->poll= ED_operator_sequencer_active;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+}
+
diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h
index fd4ee70e258..71953ff3ddd 100644
--- a/source/blender/editors/space_sequencer/sequencer_intern.h
+++ b/source/blender/editors/space_sequencer/sequencer_intern.h
@@ -95,6 +95,7 @@ void SEQUENCER_OT_snap(struct wmOperatorType *ot);
void SEQUENCER_OT_previous_edit(struct wmOperatorType *ot);
void SEQUENCER_OT_next_edit(struct wmOperatorType *ot);
void SEQUENCER_OT_swap(struct wmOperatorType *ot);
+void SEQUENCER_OT_swap_data(struct wmOperatorType *ot);
void SEQUENCER_OT_rendersize(struct wmOperatorType *ot);
void SEQUENCER_OT_view_toggle(struct wmOperatorType *ot);
@@ -145,8 +146,6 @@ enum {
};
/* defines used internally */
-#define SEQ_ALLSEL (SELECT+SEQ_LEFTSEL+SEQ_RIGHTSEL)
-#define SEQ_DESEL ~SEQ_ALLSEL
#define SCE_MARKERS 0 // XXX - dummy
/* sequencer_ops.c */
diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c
index 559a090a2ee..69457e5c6e8 100644
--- a/source/blender/editors/space_sequencer/sequencer_ops.c
+++ b/source/blender/editors/space_sequencer/sequencer_ops.c
@@ -73,6 +73,7 @@ void sequencer_operatortypes(void)
WM_operatortype_append(SEQUENCER_OT_next_edit);
WM_operatortype_append(SEQUENCER_OT_previous_edit);
WM_operatortype_append(SEQUENCER_OT_swap);
+ WM_operatortype_append(SEQUENCER_OT_swap_data);
WM_operatortype_append(SEQUENCER_OT_rendersize);
WM_operatortype_append(SEQUENCER_OT_view_all);
diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c
index 170b9fbda80..83fa8bffd58 100644
--- a/source/blender/editors/space_sequencer/sequencer_select.c
+++ b/source/blender/editors/space_sequencer/sequencer_select.c
@@ -166,7 +166,7 @@ void select_single_seq(Scene *scene, Sequence *seq, int deselect_all) /* BRING B
if(deselect_all)
deselect_all_seq(scene);
- active_seq_set(scene, seq);
+ seq_active_set(scene, seq);
if((seq->type==SEQ_IMAGE) || (seq->type==SEQ_MOVIE)) {
if(seq->strip)
@@ -185,7 +185,7 @@ void select_single_seq(Scene *scene, Sequence *seq, int deselect_all) /* BRING B
void select_neighbor_from_last(Scene *scene, int lr)
{
- Sequence *seq= active_seq_get(scene);
+ Sequence *seq= seq_active_get(scene);
Sequence *neighbor;
int change = 0;
if (seq) {
@@ -231,7 +231,7 @@ static int sequencer_deselect_exec(bContext *C, wmOperator *op)
for(seq= ed->seqbasep->first; seq; seq=seq->next) {
if (desel) {
- seq->flag &= SEQ_DESEL;
+ seq->flag &= ~SEQ_ALLSEL;
}
else {
seq->flag &= ~(SEQ_LEFTSEL+SEQ_RIGHTSEL);
@@ -269,7 +269,7 @@ static int sequencer_select_inverse_exec(bContext *C, wmOperator *op)
for(seq= ed->seqbasep->first; seq; seq=seq->next) {
if (seq->flag & SELECT) {
- seq->flag &= SEQ_DESEL;
+ seq->flag &= ~SEQ_ALLSEL;
}
else {
seq->flag &= ~(SEQ_LEFTSEL+SEQ_RIGHTSEL);
@@ -392,7 +392,7 @@ static int sequencer_select_invoke(bContext *C, wmOperator *op, wmEvent *event)
deselect_all_seq(scene);
if(seq) {
- active_seq_set(scene, seq);
+ seq_active_set(scene, seq);
if ((seq->type == SEQ_IMAGE) || (seq->type == SEQ_MOVIE)) {
if(seq->strip) {
@@ -409,7 +409,7 @@ static int sequencer_select_invoke(bContext *C, wmOperator *op, wmEvent *event)
switch(hand) {
case SEQ_SIDE_NONE:
if (linked_handle==0)
- seq->flag &= SEQ_DESEL;
+ seq->flag &= ~SEQ_ALLSEL;
break;
case SEQ_SIDE_LEFT:
seq->flag ^= SEQ_LEFTSEL;
@@ -794,7 +794,7 @@ static int sequencer_select_active_side_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Editing *ed= seq_give_editing(scene, 0);
- Sequence *seq_act= active_seq_get(scene);
+ Sequence *seq_act= seq_active_get(scene);
if (ed==NULL || seq_act==NULL)
return OPERATOR_CANCELLED;
@@ -860,7 +860,7 @@ static int sequencer_borderselect_exec(bContext *C, wmOperator *op)
if(BLI_isect_rctf(&rq, &rectf, 0)) {
if(selecting) seq->flag |= SELECT;
- else seq->flag &= SEQ_DESEL;
+ else seq->flag &= ~SEQ_ALLSEL;
recurs_sel_seq(seq);
}
}
diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c
index 49c2049c66c..8b7670a55bc 100644
--- a/source/blender/editors/space_sequencer/space_sequencer.c
+++ b/source/blender/editors/space_sequencer/space_sequencer.c
@@ -355,6 +355,7 @@ static void sequencer_main_area_listener(ARegion *ar, wmNotifier *wmn)
case NC_SCENE:
switch(wmn->data) {
case ND_FRAME:
+ case ND_FRAME_RANGE:
case ND_MARKERS:
case ND_SEQUENCER:
ED_region_tag_redraw(ar);
diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c
index 1460d08b396..b2e1bfb9b93 100644
--- a/source/blender/editors/space_time/space_time.c
+++ b/source/blender/editors/space_time/space_time.c
@@ -31,6 +31,7 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
+#include "DNA_particle_types.h"
#include "MEM_guardedalloc.h"
@@ -40,6 +41,7 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_screen.h"
+#include "BKE_pointcache.h"
#include "BKE_utildefines.h"
#include "ED_anim_api.h"
@@ -84,6 +86,174 @@ static void time_draw_sfra_efra(const bContext *C, SpaceTime *stime, ARegion *ar
fdrawline((float)PEFRA, v2d->cur.ymin, (float)PEFRA, v2d->cur.ymax);
}
+#define CACHE_DRAW_HEIGHT 3.0f
+
+static void time_draw_cache(const bContext *C, SpaceTime *stime, ARegion *ar)
+{
+ SpaceTimeCache *stc;
+ float yoffs=0.f;
+
+ if (!(stime->cache_display & TIME_CACHE_DISPLAY))
+ return;
+
+ for (stc= stime->caches.first; stc; stc=stc->next) {
+ float col[4];
+
+ if (!stc->array || !stc->ok)
+ continue;
+
+ glPushMatrix();
+ glTranslatef(0.0, (float)V2D_SCROLL_HEIGHT+yoffs, 0.0);
+ glScalef(1.0, CACHE_DRAW_HEIGHT, 0.0);
+
+ switch(stc->type) {
+ case PTCACHE_TYPE_SOFTBODY:
+ col[0] = 1.0; col[1] = 0.4; col[2] = 0.02;
+ col[3] = 0.1;
+ break;
+ case PTCACHE_TYPE_PARTICLES:
+ col[0] = 1.0; col[1] = 0.1; col[2] = 0.02;
+ col[3] = 0.1;
+ break;
+ case PTCACHE_TYPE_CLOTH:
+ col[0] = 0.1; col[1] = 0.1; col[2] = 0.75;
+ col[3] = 0.1;
+ break;
+ case PTCACHE_TYPE_SMOKE_DOMAIN:
+ case PTCACHE_TYPE_SMOKE_HIGHRES:
+ col[0] = 0.2; col[1] = 0.2; col[2] = 0.2;
+ col[3] = 0.1;
+ break;
+ }
+ glColor4fv(col);
+
+ glEnable(GL_BLEND);
+
+ glRectf((float)stc->startframe, 0.0, (float)stc->endframe, 1.0);
+
+ col[3] = 0.4;
+ if (stc->flag & PTCACHE_BAKED) {
+ col[0] -= 0.4; col[1] -= 0.4; col[2] -= 0.4;
+ }
+ glColor4fv(col);
+
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glVertexPointer(2, GL_FLOAT, 0, stc->array);
+ glDrawArrays(GL_QUADS, 0, stc->len);
+ glDisableClientState(GL_VERTEX_ARRAY);
+
+ glDisable(GL_BLEND);
+
+ glPopMatrix();
+
+ yoffs += CACHE_DRAW_HEIGHT;
+ }
+}
+
+static void time_cache_free(SpaceTime *stime)
+{
+ SpaceTimeCache *stc;
+
+ for (stc= stime->caches.first; stc; stc=stc->next) {
+ if (stc->array) {
+ MEM_freeN(stc->array);
+ stc->array = NULL;
+ }
+ }
+
+ BLI_freelistN(&stime->caches);
+}
+
+static void time_cache_refresh(const bContext *C, SpaceTime *stime, ARegion *ar)
+{
+ Object *ob = CTX_data_active_object(C);
+ PTCacheID *pid;
+ ListBase pidlist;
+
+ time_cache_free(stime);
+
+ if (!(stime->cache_display & TIME_CACHE_DISPLAY) || (!ob))
+ return;
+
+ BKE_ptcache_ids_from_object(&pidlist, ob, NULL, 0);
+
+ /* iterate over pointcaches on the active object,
+ * add spacetimecache and vertex array for each */
+ for(pid=pidlist.first; pid; pid=pid->next) {
+ SpaceTimeCache *stc;
+ float *fp, *array;
+ int i, len;
+
+ switch(pid->type) {
+ case PTCACHE_TYPE_SOFTBODY:
+ if (!(stime->cache_display & TIME_CACHE_SOFTBODY)) continue;
+ break;
+ case PTCACHE_TYPE_PARTICLES:
+ if (!(stime->cache_display & TIME_CACHE_PARTICLES)) continue;
+ break;
+ case PTCACHE_TYPE_CLOTH:
+ if (!(stime->cache_display & TIME_CACHE_CLOTH)) continue;
+ break;
+ case PTCACHE_TYPE_SMOKE_DOMAIN:
+ case PTCACHE_TYPE_SMOKE_HIGHRES:
+ if (!(stime->cache_display & TIME_CACHE_SMOKE)) continue;
+ break;
+ }
+
+ stc= MEM_callocN(sizeof(SpaceTimeCache), "spacetimecache");
+
+ stc->type = pid->type;
+
+ if (pid->cache->flag & PTCACHE_BAKED)
+ stc->flag |= PTCACHE_BAKED;
+ if (pid->cache->flag & PTCACHE_DISK_CACHE)
+ stc->flag |= PTCACHE_DISK_CACHE;
+
+ /* first allocate with maximum number of frames needed */
+ BKE_ptcache_id_time(pid, CTX_data_scene(C), 0, &stc->startframe, &stc->endframe, NULL);
+ len = (stc->endframe - stc->startframe + 1)*4;
+ fp = array = MEM_callocN(len*2*sizeof(float), "temporary timeline cache array");
+
+ /* fill the vertex array with a quad for each cached frame */
+ for (i=stc->startframe; i<=stc->endframe; i++) {
+
+ if (BKE_ptcache_id_exist(pid, i)) {
+ fp[0] = (float)i;
+ fp[1] = 0.0;
+ fp+=2;
+
+ fp[0] = (float)i;
+ fp[1] = 1.0;
+ fp+=2;
+
+ fp[0] = (float)(i+1);
+ fp[1] = 1.0;
+ fp+=2;
+
+ fp[0] = (float)(i+1);
+ fp[1] = 0.0;
+ fp+=2;
+ }
+ }
+ /* update with final number of frames */
+ stc->len = (i-stc->startframe)*4;
+ stc->array = MEM_mallocN(stc->len*2*sizeof(float), "SpaceTimeCache array");
+ memcpy(stc->array, array, stc->len*2*sizeof(float));
+
+ MEM_freeN(array);
+ array = NULL;
+
+ stc->ok = 1;
+
+ BLI_addtail(&stime->caches, stc);
+ }
+
+ /* todo: sort time->caches list for consistent order */
+ // ...
+
+ BLI_freelistN(&pidlist);
+}
+
/* helper function - find actkeycolumn that occurs on cframe, or the nearest one if not found */
static ActKeyColumn *time_cfra_find_ak (ActKeyColumn *ak, float cframe)
{
@@ -206,6 +376,66 @@ static void time_draw_keyframes(const bContext *C, SpaceTime *stime, ARegion *ar
/* ---------------- */
+static void time_refresh(const bContext *C, ScrArea *sa)
+{
+ SpaceTime *stime = (SpaceTime *)sa->spacedata.first;
+ ARegion *ar;
+
+ /* find the main timeline region and refresh cache display*/
+ for (ar= sa->regionbase.first; ar; ar= ar->next) {
+ if (ar->regiontype==RGN_TYPE_WINDOW) {
+ time_cache_refresh(C, stime, ar);
+ break;
+ }
+ }
+}
+
+/* editor level listener */
+static void time_listener(ScrArea *sa, wmNotifier *wmn)
+{
+
+ /* mainly for updating cache display */
+ switch (wmn->category) {
+ case NC_OBJECT:
+ switch (wmn->data) {
+ case ND_POINTCACHE:
+ ED_area_tag_refresh(sa);
+ ED_area_tag_redraw(sa);
+ break;
+ }
+ break;
+ case NC_SCENE:
+ switch (wmn->data) {
+ case ND_OB_ACTIVE:
+ case ND_FRAME:
+ ED_area_tag_refresh(sa);
+ break;
+ case ND_FRAME_RANGE:
+ {
+ ARegion *ar;
+ Scene *scene = wmn->reference;
+
+ for (ar= sa->regionbase.first; ar; ar= ar->next) {
+ if (ar->regiontype==RGN_TYPE_WINDOW) {
+ ar->v2d.tot.xmin= (float)(SFRA - 4);
+ ar->v2d.tot.xmax= (float)(EFRA + 4);
+ break;
+ }
+ }
+ }
+ break;
+ }
+ case NC_SPACE:
+ switch (wmn->data) {
+ case ND_SPACE_CHANGED:
+ ED_area_tag_refresh(sa);
+ break;
+ }
+ }
+}
+
+/* ---------------- */
+
/* add handlers, stuff you only do once or on area/region changes */
static void time_main_area_init(wmWindowManager *wm, ARegion *ar)
{
@@ -235,7 +465,7 @@ static void time_main_area_draw(const bContext *C, ARegion *ar)
/* start and end frame */
time_draw_sfra_efra(C, stime, ar);
-
+
/* grid */
unit= (stime->flag & TIME_DRAWFRAMES)? V2D_UNIT_FRAMES: V2D_UNIT_SECONDS;
grid= UI_view2d_grid_calc(C, v2d, unit, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY, ar->winx, ar->winy);
@@ -254,6 +484,9 @@ static void time_main_area_draw(const bContext *C, ARegion *ar)
UI_view2d_view_orthoSpecial(C, v2d, 1);
draw_markers_time(C, 0);
+ /* caches */
+ time_draw_cache(C, stime, ar);
+
/* reset view matrix */
UI_view2d_view_restore(C);
@@ -277,7 +510,6 @@ static void time_main_area_listener(ARegion *ar, wmNotifier *wmn)
break;
case NC_SCENE:
- /* any scene change for now */
ED_region_tag_redraw(ar);
break;
@@ -377,13 +609,23 @@ static SpaceLink *time_new(const bContext *C)
/* not spacelink itself */
static void time_free(SpaceLink *sl)
{
+ SpaceTime *stime= (SpaceTime *)sl;
+
+ time_cache_free(stime);
}
/* spacetype; init callback in ED_area_initialize() */
/* init is called to (re)initialize an existing editor (file read, screen changes) */
/* validate spacedata, add own area level handlers */
static void time_init(wmWindowManager *wm, ScrArea *sa)
{
+ SpaceTime *stime= (SpaceTime *)sa->spacedata.first;
+ time_cache_free(stime);
+
+ /* enable all cache display */
+ stime->cache_display |= TIME_CACHE_DISPLAY;
+ stime->cache_display |= (TIME_CACHE_SOFTBODY|TIME_CACHE_PARTICLES);
+ stime->cache_display |= (TIME_CACHE_CLOTH|TIME_CACHE_SMOKE);
}
static SpaceLink *time_duplicate(SpaceLink *sl)
@@ -391,6 +633,8 @@ static SpaceLink *time_duplicate(SpaceLink *sl)
SpaceTime *stime= (SpaceTime *)sl;
SpaceTime *stimen= MEM_dupallocN(stime);
+ time_cache_free(stimen);
+
return (SpaceLink *)stimen;
}
@@ -410,6 +654,8 @@ void ED_spacetype_time(void)
st->duplicate= time_duplicate;
st->operatortypes= time_operatortypes;
st->keymap= NULL;
+ st->listener= time_listener;
+ st->refresh= time_refresh;
/* regions: main window */
art= MEM_callocN(sizeof(ARegionType), "spacetype time region");
diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c
index ced745bb5d4..63155a95601 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -430,7 +430,7 @@ static int draw_tface__set_draw(MTFace *tface, MCol *mcol, int matnr)
} else if (tface && tface->mode&TF_OBCOL) {
return 2; /* Don't set color */
} else if (!mcol) {
- return 2; /* Don't set color */
+ return 1; /* Don't set color */
} else {
return 1; /* Set color from mcol */
}
@@ -465,9 +465,9 @@ static void add_tface_color_layer(DerivedMesh *dm)
}
} else if (tface && tface->mode&TF_OBCOL) {
for(j=0;j<4;j++) {
- finalCol[i*4+j].r = Gtexdraw.obcol[0];
- finalCol[i*4+j].g = Gtexdraw.obcol[1];
- finalCol[i*4+j].b = Gtexdraw.obcol[2];
+ finalCol[i*4+j].r = FTOCHAR(Gtexdraw.obcol[0]);
+ finalCol[i*4+j].g = FTOCHAR(Gtexdraw.obcol[1]);
+ finalCol[i*4+j].b = FTOCHAR(Gtexdraw.obcol[2]);
}
} else if (!mcol) {
if (tface) {
@@ -486,9 +486,9 @@ static void add_tface_color_layer(DerivedMesh *dm)
else copy_v3_v3(col, &ma->r);
for(j=0;j<4;j++) {
- finalCol[i*4+j].b = col[2];
- finalCol[i*4+j].g = col[1];
- finalCol[i*4+j].r = col[0];
+ finalCol[i*4+j].b = FTOCHAR(col[2]);
+ finalCol[i*4+j].g = FTOCHAR(col[1]);
+ finalCol[i*4+j].r = FTOCHAR(col[0]);
}
}
else
@@ -535,7 +535,7 @@ static int draw_em_tf_mapped__set_draw(void *userData, int index)
mcol = CustomData_em_get(&em->fdata, efa->data, CD_MCOL);
matnr = efa->mat_nr;
- return draw_tface__set_draw(tface, mcol, matnr);
+ return draw_tface__set_draw_legacy(tface, mcol, matnr);
}
static int wpaint__setSolidDrawOptions(void *userData, int index, int *drawSmooth_r)
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 45bab2ed16e..7cae427112b 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -3927,6 +3927,20 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
cd2=cdata2=0;
glLineWidth(1.0f);
+
+ if((part->draw & PART_DRAW_NUM) && (v3d->flag2 & V3D_RENDER_OVERRIDE)==0){
+ cache=psys->pathcache;
+
+ for(a=0, pa=psys->particles; a<totpart; a++, pa++){
+ float vec_txt[3];
+ val[0]= '\0';
+
+ sprintf(val, "%i", a);
+ /* use worldspace beause object matrix is alredy applied */
+ mul_v3_m4v3(vec_txt, ob->imat, cache[a]->co);
+ view3d_cached_text_draw_add(vec_txt[0], vec_txt[1], vec_txt[2], val, 10, V3D_CACHE_TEXT_WORLDSPACE);
+ }
+ }
}
else if(pdd && ELEM(draw_as, 0, PART_DRAW_CIRC)==0){
glDisableClientState(GL_COLOR_ARRAY);
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 472379ec6e1..92e3b35f614 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -587,7 +587,7 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn)
break;
case NC_BRUSH:
if(wmn->action == NA_EDITED)
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw_overlay(ar);
break;
case NC_MATERIAL:
switch(wmn->data) {
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 96f1e058948..cfae9e7c4d5 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -820,7 +820,7 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d)
}
/* colour depends on whether there is a keyframe */
- if (id_frame_has_keyframe((ID *)ob, /*frame_to_float(scene, CFRA)*/(float)(CFRA), v3d->keyflags))
+ if (id_frame_has_keyframe((ID *)ob, /*BKE_curframe(scene)*/(float)(CFRA), v3d->keyflags))
UI_ThemeColor(TH_VERTEX_SELECT);
else
UI_ThemeColor(TH_TEXT_HI);
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index f74a0381b24..39c27bbff93 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -1242,7 +1242,17 @@ static int viewhome_exec(bContext *C, wmOperator *op) /* was view3d_home() in 2.
minmax_object(base->object, min, max);
}
}
- if(!onedone) return OPERATOR_FINISHED; /* TODO - should this be cancel? */
+ if(!onedone) {
+ ED_region_tag_redraw(ar);
+ /* TODO - should this be cancel?
+ * I think no, because we always move the cursor, with or without
+ * object, but in this case there is no change in the scene,
+ * only the cursor so I choice a ED_region_tag like
+ * smooth_view do for the center_cursor.
+ * See bug #22640
+ */
+ return OPERATOR_FINISHED;
+ }
afm[0]= (max[0]-min[0]);
afm[1]= (max[1]-min[1]);
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 6532a94971d..beea3c9bee4 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -479,6 +479,8 @@ static void view_editmove(unsigned short event)
#define TFM_MODAL_REMOVE_SNAP 17
/* 18 and 19 used by numinput, defined in transform.h
* */
+#define TFM_MODAL_PROPSIZE_UP 20
+#define TFM_MODAL_PROPSIZE_DOWN 21
/* called in transform_ops.c, on each regeneration of keymaps */
wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf)
@@ -503,6 +505,8 @@ wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf)
{TFM_MODAL_REMOVE_SNAP, "REMOVE_SNAP", 0, "Remove Last Snap Point", ""},
{NUM_MODAL_INCREMENT_UP, "INCREMENT_UP", 0, "Numinput Increment Up", ""},
{NUM_MODAL_INCREMENT_DOWN, "INCREMENT_DOWN", 0, "Numinput Increment Down", ""},
+ {TFM_MODAL_PROPSIZE_UP, "PROPORTIONAL_SIZE_UP", 0, "Increase Proportional Influence", ""},
+ {TFM_MODAL_PROPSIZE_DOWN, "PROPORTIONAL_SIZE_DOWN", 0, "Decrease Poportional Influence", ""},
{0, NULL, 0, NULL, NULL}};
wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "Transform Modal Map");
@@ -532,6 +536,11 @@ wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf)
WM_modalkeymap_add_item(keymap, UPARROWKEY, KM_PRESS, 0, 0, NUM_MODAL_INCREMENT_UP);
WM_modalkeymap_add_item(keymap, DOWNARROWKEY, KM_PRESS, 0, 0, NUM_MODAL_INCREMENT_DOWN);
+
+ WM_modalkeymap_add_item(keymap, PAGEUPKEY, KM_PRESS, 0, 0, TFM_MODAL_PROPSIZE_UP);
+ WM_modalkeymap_add_item(keymap, PAGEDOWNKEY, KM_PRESS, 0, 0, TFM_MODAL_PROPSIZE_DOWN);
+ WM_modalkeymap_add_item(keymap, WHEELDOWNMOUSE, KM_PRESS, 0, 0, TFM_MODAL_PROPSIZE_UP);
+ WM_modalkeymap_add_item(keymap, WHEELUPMOUSE, KM_PRESS, 0, 0, TFM_MODAL_PROPSIZE_DOWN);
return keymap;
}
@@ -712,6 +721,20 @@ int transformEvent(TransInfo *t, wmEvent *event)
removeSnapPoint(t);
t->redraw |= TREDRAW_HARD;
break;
+ case TFM_MODAL_PROPSIZE_UP:
+ if(t->flag & T_PROP_EDIT) {
+ t->prop_size*= 1.1f;
+ calculatePropRatio(t);
+ }
+ t->redraw |= TREDRAW_HARD;
+ break;
+ case TFM_MODAL_PROPSIZE_DOWN:
+ if (t->flag & T_PROP_EDIT) {
+ t->prop_size*= 0.90909090f;
+ calculatePropRatio(t);
+ }
+ t->redraw |= TREDRAW_HARD;
+ break;
default:
handled = 0;
break;
@@ -936,10 +959,6 @@ int transformEvent(TransInfo *t, wmEvent *event)
if (t->flag & T_AUTOIK) {
transform_autoik_update(t, 1);
}
- else if(t->flag & T_PROP_EDIT) {
- t->prop_size*= 1.1f;
- calculatePropRatio(t);
- }
else view_editmove(event->type);
t->redraw= 1;
break;
@@ -955,10 +974,6 @@ int transformEvent(TransInfo *t, wmEvent *event)
if (t->flag & T_AUTOIK) {
transform_autoik_update(t, -1);
}
- else if (t->flag & T_PROP_EDIT) {
- t->prop_size*= 0.90909090f;
- calculatePropRatio(t);
- }
else view_editmove(event->type);
t->redraw= 1;
break;
diff --git a/source/blender/imbuf/intern/anim.c b/source/blender/imbuf/intern/anim.c
index 2cb63b7274c..bfc3433875d 100644
--- a/source/blender/imbuf/intern/anim.c
+++ b/source/blender/imbuf/intern/anim.c
@@ -589,9 +589,9 @@ static int startffmpeg(struct anim * anim) {
anim->duration = pFormatCtx->duration * pCodecCtx->frame_rate
/ pCodecCtx->frame_rate_base / AV_TIME_BASE;
#else
- anim->duration = pFormatCtx->duration
+ anim->duration = ceil(pFormatCtx->duration
* av_q2d(pFormatCtx->streams[videoStream]->r_frame_rate)
- / AV_TIME_BASE;
+ / AV_TIME_BASE);
#endif
anim->params = 0;
diff --git a/source/blender/imbuf/intern/targa.c b/source/blender/imbuf/intern/targa.c
index 3c14189a292..09aaccc1ab6 100644
--- a/source/blender/imbuf/intern/targa.c
+++ b/source/blender/imbuf/intern/targa.c
@@ -592,8 +592,10 @@ struct ImBuf *imb_loadtarga(unsigned char *mem, int mem_size, int flags)
if (flags & IB_test) return (ibuf);
if (tga.imgtyp != 1 && tga.imgtyp != 9) { /* happens sometimes (beuh) */
- MEM_freeN(cmap);
- cmap= NULL;
+ if(cmap) {
+ MEM_freeN(cmap);
+ cmap= NULL;
+ }
}
switch(tga.imgtyp){
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index e6688060b22..1933798d7c9 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -209,12 +209,12 @@ typedef struct RenderData {
struct FFMpegCodecData ffcodecdata;
int cfra, sfra, efra; /* frames as in 'images' */
+ float subframe; /* subframe offset from cfra, in 0.0-1.0 */
int psfra, pefra; /* start+end frames of preview range */
int images, framapto;
short flag, threads;
- float ctime; /* use for calcutions */
float framelen, blurfac;
/** For UR edge rendering: give the edges this color */
@@ -1022,6 +1022,7 @@ typedef struct Scene {
#define ID_NEW_US(a) if( (a)->id.newid) {(a)= (void *)(a)->id.newid; (a)->id.us++;}
#define ID_NEW_US2(a) if( ((ID *)a)->newid) {(a)= ((ID *)a)->newid; ((ID *)a)->us++;}
#define CFRA (scene->r.cfra)
+#define SUBFRA (scene->r.subframe)
#define F_CFRA ((float)(scene->r.cfra))
#define SFRA (scene->r.sfra)
#define EFRA (scene->r.efra)
diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h
index 6d73c261f23..a811fd9c014 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -152,7 +152,9 @@ typedef struct ARegion {
short sizex, sizey; /* current split size in pixels (if zero it uses regiontype) */
short do_draw; /* private, cached notifier events */
+ short do_draw_overlay; /* private, cached notifier events */
short swap; /* private, indicator to survive swap-exchange */
+ short pad[3];
struct ARegionType *type; /* callbacks for this region type */
diff --git a/source/blender/makesdna/DNA_sequence_types.h b/source/blender/makesdna/DNA_sequence_types.h
index 9f395d6e876..84d8e8c8e67 100644
--- a/source/blender/makesdna/DNA_sequence_types.h
+++ b/source/blender/makesdna/DNA_sequence_types.h
@@ -276,6 +276,9 @@ typedef struct SpeedControlVars {
#define SEQ_USE_PROXY_CUSTOM_FILE 2097152
#define SEQ_USE_EFFECT_DEFAULT_FADE 4194304
+/* convenience define for all selection flags */
+#define SEQ_ALLSEL (SELECT+SEQ_LEFTSEL+SEQ_RIGHTSEL)
+
/* deprecated, dont use a flag anymore*/
/*#define SEQ_ACTIVE 1048576*/
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index e59cad09d6c..ba9d0380c9f 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -346,6 +346,17 @@ typedef struct SpaceScript {
void *but_refs;
} SpaceScript;
+typedef struct SpaceTimeCache {
+ struct SpaceTimeCache *next, *prev;
+ int type;
+ int flag;
+
+ float *array;
+ int len;
+ int startframe, endframe;
+ int ok;
+} SpaceTimeCache;
+
typedef struct SpaceTime {
SpaceLink *next, *prev;
ListBase regionbase; /* storage of regions for inactive spaces */
@@ -354,6 +365,9 @@ typedef struct SpaceTime {
View2D v2d; /* deprecated, copied to region */
+ ListBase caches;
+ int cache_display, pad;
+
int flag, redraws;
} SpaceTime;
@@ -860,6 +874,13 @@ enum {
#define TIME_CONTINUE_PHYSICS 128
#define TIME_NODES 256
+/* time->cache */
+#define TIME_CACHE_DISPLAY 1
+#define TIME_CACHE_SOFTBODY 2
+#define TIME_CACHE_PARTICLES 4
+#define TIME_CACHE_CLOTH 8
+#define TIME_CACHE_SMOKE 16
+
/* sseq->mainb */
#define SEQ_DRAW_SEQUENCE 0
#define SEQ_DRAW_IMG_IMBUF 1
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 72c067c9752..16a3b95d71a 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -119,7 +119,7 @@ typedef struct uiWidgetColors {
char text_sel[4];
short shaded;
short shadetop, shadedown;
- short pad;
+ short alpha_check;
} uiWidgetColors;
typedef struct uiWidgetStateColors {
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c
index 2914bc96a70..d37f390919d 100644
--- a/source/blender/makesrna/intern/makesrna.c
+++ b/source/blender/makesrna/intern/makesrna.c
@@ -2274,7 +2274,7 @@ RNAProcessItem PROCESS_ITEMS[]= {
{"rna_screen.c", NULL, RNA_def_screen},
{"rna_sculpt_paint.c", NULL, RNA_def_sculpt_paint},
{"rna_sensor.c", NULL, RNA_def_sensor},
- {"rna_sequencer.c", NULL, RNA_def_sequencer},
+ {"rna_sequencer.c", "rna_sequencer_api.c", RNA_def_sequencer},
{"rna_smoke.c", NULL, RNA_def_smoke},
{"rna_space.c", NULL, RNA_def_space},
{"rna_test.c", NULL, RNA_def_test},
diff --git a/source/blender/makesrna/intern/rna_actuator.c b/source/blender/makesrna/intern/rna_actuator.c
index 2ca327f8907..2a29f3332b5 100644
--- a/source/blender/makesrna/intern/rna_actuator.c
+++ b/source/blender/makesrna/intern/rna_actuator.c
@@ -476,6 +476,12 @@ void rna_def_actuator(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, NULL, "rna_Actuator_type_set", "rna_Actuator_type_itemf");
RNA_def_property_ui_text(prop, "Type", "");
+ prop= RNA_def_property(srna, "pinned", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_PIN);
+ RNA_def_property_ui_text(prop, "Pinned", "Display when not linked to a visible states controller");
+ RNA_def_property_ui_icon(prop, ICON_UNPINNED, 1);
+ RNA_def_property_update(prop, NC_LOGIC, NULL);
+
prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_SHOW);
RNA_def_property_ui_text(prop, "Expanded", "Set actuator expanded in the user interface");
diff --git a/source/blender/makesrna/intern/rna_controller.c b/source/blender/makesrna/intern/rna_controller.c
index d9523344414..275a34e3bbb 100644
--- a/source/blender/makesrna/intern/rna_controller.c
+++ b/source/blender/makesrna/intern/rna_controller.c
@@ -113,6 +113,7 @@ static void rna_Controller_state_get(PointerRNA *ptr, int *values)
values[i] = (cont->state_mask & (1<<i));
}
+#if 0 /* editable is set to false, comment for now. */
static void rna_Controller_state_set(PointerRNA *ptr, const int *values)
{
bController *cont= (bController *)ptr->data;
@@ -135,6 +136,7 @@ static void rna_Controller_state_set(PointerRNA *ptr, const int *values)
else cont->state_mask &= ~(1<<i);
}
}
+#endif
#else
diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h
index 3f2bb60fba1..950811ef295 100644
--- a/source/blender/makesrna/intern/rna_internal.h
+++ b/source/blender/makesrna/intern/rna_internal.h
@@ -34,6 +34,7 @@
struct ID;
struct IDProperty;
struct SDNA;
+struct Sequence;
/* Data structures used during define */
@@ -232,6 +233,7 @@ void RNA_api_object_base(struct StructRNA *srna);
void RNA_api_pose_channel(struct StructRNA *srna);
void RNA_api_scene(struct StructRNA *srna);
void RNA_api_scene_render(struct StructRNA *srna);
+void RNA_api_sequence_strip(StructRNA *srna);
void RNA_api_text(struct StructRNA *srna);
void RNA_api_ui_layout(struct StructRNA *srna);
void RNA_api_wm(struct StructRNA *srna);
@@ -340,6 +342,7 @@ PointerRNA rna_pointer_inherit_refine(struct PointerRNA *ptr, struct StructRNA *
int rna_parameter_size(struct PropertyRNA *parm);
int rna_parameter_size_alloc(struct PropertyRNA *parm);
+
#endif /* RNA_INTERNAL_H */
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 4d463939a0c..649bebd0d6b 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2429,6 +2429,13 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Motion Samples", "Number of scene samples to take with motion blur");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+ prop= RNA_def_property(srna, "motion_blur_shutter", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "blurfac");
+ RNA_def_property_range(prop, 0.01f, 10.0f);
+ RNA_def_property_ui_range(prop, 0.01, 2.0f, 1, 0);
+ RNA_def_property_ui_text(prop, "Shutter", "Time taken in frames between shutter open and close");
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
/* border */
prop= RNA_def_property(srna, "use_border", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_BORDER);
@@ -2486,8 +2493,9 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
prop= RNA_def_property(srna, "color_management", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "color_mgt_flag", R_COLOR_MANAGEMENT);
- RNA_def_property_ui_text(prop, "Color Management", "Use color profiles and gamma corrected imaging pipeline");
- RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS|NC_MATERIAL|ND_SHADING_DRAW, "rna_RenderSettings_color_management_update");
+ RNA_def_property_ui_text(prop, "Color Management", "Use linear workflow - gamma corrected imaging pipeline");
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_RenderSettings_color_management_update");
+
prop= RNA_def_property(srna, "use_file_extension", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_EXTENSION);
@@ -2956,7 +2964,7 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_int_funcs(prop, NULL, "rna_Scene_start_frame_set", NULL);
RNA_def_property_range(prop, MINFRAME, MAXFRAME);
RNA_def_property_ui_text(prop, "Start Frame", "First frame of the playback/rendering range");
- RNA_def_property_update(prop, NC_SCENE|ND_FRAME, NULL);
+ RNA_def_property_update(prop, NC_SCENE|ND_FRAME_RANGE, NULL);
prop= RNA_def_property(srna, "frame_end", PROP_INT, PROP_TIME);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
@@ -2964,7 +2972,7 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_int_funcs(prop, NULL, "rna_Scene_end_frame_set", NULL);
RNA_def_property_range(prop, MINFRAME, MAXFRAME);
RNA_def_property_ui_text(prop, "End Frame", "Final frame of the playback/rendering range");
- RNA_def_property_update(prop, NC_SCENE|ND_FRAME, NULL);
+ RNA_def_property_update(prop, NC_SCENE|ND_FRAME_RANGE, NULL);
prop= RNA_def_property(srna, "frame_step", PROP_INT, PROP_TIME);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
diff --git a/source/blender/makesrna/intern/rna_sensor.c b/source/blender/makesrna/intern/rna_sensor.c
index 31fa8f018dc..17137d0d259 100644
--- a/source/blender/makesrna/intern/rna_sensor.c
+++ b/source/blender/makesrna/intern/rna_sensor.c
@@ -260,6 +260,12 @@ static void rna_def_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
+ prop= RNA_def_property(srna, "pinned", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", SENS_PIN);
+ RNA_def_property_ui_text(prop, "Pinned", "Display when not linked to a visible states controller");
+ RNA_def_property_ui_icon(prop, ICON_UNPINNED, 1);
+ RNA_def_property_update(prop, NC_LOGIC, NULL);
+
prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SENS_SHOW);
RNA_def_property_ui_text(prop, "Expanded", "Set sensor expanded in the user interface");
diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c
index c52fd7f5cba..4ee4fde0d8a 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -163,7 +163,7 @@ static void rna_Sequence_anim_endofs_final_set(PointerRNA *ptr, int value)
rna_Sequence_frame_change_update(scene, seq);
}
-static void rna_Sequence_length_set(PointerRNA *ptr, int value)
+static void rna_Sequence_frame_length_set(PointerRNA *ptr, int value)
{
Sequence *seq= (Sequence*)ptr->data;
Scene *scene= (Scene*)ptr->id.data;
@@ -172,7 +172,7 @@ static void rna_Sequence_length_set(PointerRNA *ptr, int value)
rna_Sequence_frame_change_update(scene, seq);
}
-static int rna_Sequence_length_get(PointerRNA *ptr)
+static int rna_Sequence_frame_length_get(PointerRNA *ptr)
{
Sequence *seq= (Sequence*)ptr->data;
return seq_tx_get_final_right(seq, 0)-seq_tx_get_final_left(seq, 0);
@@ -627,7 +627,6 @@ static void rna_def_sequence(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
- FunctionRNA *func;
static const EnumPropertyItem seq_type_items[]= {
{SEQ_IMAGE, "IMAGE", 0, "Image", ""},
@@ -707,11 +706,6 @@ static void rna_def_sequence(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Mute", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_mute_update");
- prop= RNA_def_property(srna, "frame_locked", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_IPO_FRAME_LOCKED);
- RNA_def_property_ui_text(prop, "Frame Locked", "Lock the animation curve to the global frame counter");
- RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
-
prop= RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_LOCK);
RNA_def_property_ui_text(prop, "Lock", "Lock strip so that it can't be transformed");
@@ -719,13 +713,18 @@ static void rna_def_sequence(BlenderRNA *brna)
/* strip positioning */
- prop= RNA_def_property(srna, "length", PROP_INT, PROP_TIME);
- RNA_def_property_int_sdna(prop, NULL, "len");
+ prop= RNA_def_property(srna, "frame_final_length", PROP_INT, PROP_TIME);
RNA_def_property_range(prop, 1, MAXFRAME);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Length", "The length of the contents of this strip before the handles are applied");
- RNA_def_property_int_funcs(prop, "rna_Sequence_length_get", "rna_Sequence_length_set",NULL);
+ RNA_def_property_int_funcs(prop, "rna_Sequence_frame_length_get", "rna_Sequence_frame_length_set",NULL);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
+
+ prop= RNA_def_property(srna, "frame_length", PROP_INT, PROP_TIME);
+ RNA_def_property_int_sdna(prop, NULL, "len");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE|PROP_ANIMATABLE);
+ RNA_def_property_range(prop, 1, MAXFRAME);
+ RNA_def_property_ui_text(prop, "Length", "The length of the contents of this strip before the handles are applied");
prop= RNA_def_property(srna, "frame_start", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "start");
@@ -811,12 +810,7 @@ static void rna_def_sequence(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Speed effect fader position", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- /* functions */
- func= RNA_def_function(srna, "getStripElem", "give_stripelem");
- RNA_def_function_ui_description(func, "Return the strip element from a given frame or None.");
- prop= RNA_def_int(func, "frame", 0, -MAXFRAME, MAXFRAME, "Frame", "The frame to get the strip element from", -MAXFRAME, MAXFRAME);
- RNA_def_property_flag(prop, PROP_REQUIRED);
- RNA_def_function_return(func, RNA_def_pointer(func, "elem", "SequenceElement", "", "strip element of the current frame"));
+ RNA_api_sequence_strip(srna);
}
static void rna_def_editor(BlenderRNA *brna)
diff --git a/source/blender/makesrna/intern/rna_sequencer_api.c b/source/blender/makesrna/intern/rna_sequencer_api.c
new file mode 100644
index 00000000000..425bad9fcd7
--- /dev/null
+++ b/source/blender/makesrna/intern/rna_sequencer_api.c
@@ -0,0 +1,72 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Foundation (2010)
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "RNA_define.h"
+
+#include "BLO_sys_types.h" /* needed for intptr_t used in ED_mesh.h */
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "rna_internal.h"
+
+#include "DNA_scene_types.h"
+#include "DNA_sequence_types.h"
+
+#ifdef RNA_RUNTIME
+
+#include "BKE_report.h"
+#include "BKE_sequencer.h"
+
+static void rna_Sequence_swap_internal(Sequence *seq_self, ReportList *reports, Sequence *seq_other)
+{
+ if(seq_swap(seq_self, seq_other) == 0)
+ BKE_report(reports, RPT_ERROR, "both strips must be the same length");
+}
+
+#else
+
+void RNA_api_sequence_strip(StructRNA *srna)
+{
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ func= RNA_def_function(srna, "getStripElem", "give_stripelem");
+ RNA_def_function_ui_description(func, "Return the strip element from a given frame or None.");
+ parm= RNA_def_int(func, "frame", 0, -MAXFRAME, MAXFRAME, "Frame", "The frame to get the strip element from", -MAXFRAME, MAXFRAME);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ RNA_def_function_return(func, RNA_def_pointer(func, "elem", "SequenceElement", "", "strip element of the current frame"));
+
+ func= RNA_def_function(srna, "swap", "rna_Sequence_swap_internal");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ parm= RNA_def_pointer(func, "other", "Sequence", "Other", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+}
+
+#endif
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 3058fe62e0f..d5b3db1185e 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -603,7 +603,7 @@ static void rna_SpaceTime_redraw_update(Main *bmain, Scene *scene, PointerRNA *p
SpaceTime *st= (SpaceTime*)ptr->data;
bScreen *screen= (bScreen*)ptr->id.data;
- ED_screen_animation_timer_update(screen, st->redraws);
+ ED_screen_animation_timer_update(screen, st->redraws, SPACE_TIME);
}
/* Space Dopesheet */
@@ -1878,6 +1878,32 @@ static void rna_def_space_time(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", TIME_CFRA_NUM);
RNA_def_property_ui_text(prop, "Show Frame Number Indicator", "Show frame number beside the current frame indicator line");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
+
+ /* displaying cache status */
+ prop= RNA_def_property(srna, "show_cache", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "cache_display", TIME_CACHE_DISPLAY);
+ RNA_def_property_ui_text(prop, "Show Cache", "Show the status of cached frames in the timeline");
+ RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
+
+ prop= RNA_def_property(srna, "cache_softbody", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "cache_display", TIME_CACHE_SOFTBODY);
+ RNA_def_property_ui_text(prop, "Softbody", "Show the active object's softbody point cache");
+ RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
+
+ prop= RNA_def_property(srna, "cache_particles", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "cache_display", TIME_CACHE_PARTICLES);
+ RNA_def_property_ui_text(prop, "Particles", "Show the active object's particle point cache");
+ RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
+
+ prop= RNA_def_property(srna, "cache_cloth", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "cache_display", TIME_CACHE_CLOTH);
+ RNA_def_property_ui_text(prop, "Cloth", "Show the active object's cloth point cache");
+ RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
+
+ prop= RNA_def_property(srna, "cache_smoke", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "cache_display", TIME_CACHE_SMOKE);
+ RNA_def_property_ui_text(prop, "Smoke", "Show the active object's smoke cache");
+ RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
}
static void rna_def_console_line(BlenderRNA *brna)
@@ -2202,7 +2228,7 @@ static void rna_def_space_logic(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "sensors_show_active_states", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "scaflag", BUTS_SENS_STATE);
+ RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_SENS_STATE);
RNA_def_property_ui_text(prop, "Show Active States", "Show only sensors connected to active states");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -2239,7 +2265,7 @@ static void rna_def_space_logic(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "actuators_show_active_states", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "scaflag", BUTS_ACT_STATE);
+ RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_ACT_STATE);
RNA_def_property_ui_text(prop, "Show Active States", "Show only actuators connected to active states");
RNA_def_property_update(prop, NC_LOGIC, NULL);
diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c
index 32221e51cb9..a12b8c55552 100644
--- a/source/blender/makesrna/intern/rna_texture.c
+++ b/source/blender/makesrna/intern/rna_texture.c
@@ -160,24 +160,8 @@ static void rna_Texture_nodes_update(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Texture_type_set(PointerRNA *ptr, int value)
{
Tex *tex= (Tex*)ptr->data;
-
- switch(value) {
-
- case TEX_VOXELDATA:
- if (tex->vd == NULL)
- tex->vd = BKE_add_voxeldata();
- break;
- case TEX_POINTDENSITY:
- if (tex->pd == NULL)
- tex->pd = BKE_add_pointdensity();
- break;
- case TEX_ENVMAP:
- if (tex->env == NULL)
- tex->env = BKE_add_envmap();
- break;
- }
- tex->type = value;
+ tex_set_type(tex, value);
}
void rna_TextureSlot_update(Main *bmain, Scene *scene, PointerRNA *ptr)
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index ccea5fbdf93..29d871dd66e 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -35,7 +35,7 @@
#ifdef RNA_RUNTIME
-static void rna_uiItemR(uiLayout *layout, PointerRNA *ptr, char *propname, char *name, int icon, int expand, int slider, int toggle, int icon_only, int event, int full_event, int no_bg, int index)
+static void rna_uiItemR(uiLayout *layout, PointerRNA *ptr, char *propname, char *name, int icon, int expand, int slider, int toggle, int icon_only, int event, int full_event, int emboss, int index)
{
PropertyRNA *prop= RNA_struct_find_property(ptr, propname);
int flag= 0;
@@ -51,14 +51,16 @@ static void rna_uiItemR(uiLayout *layout, PointerRNA *ptr, char *propname, char
flag |= (icon_only)? UI_ITEM_R_ICON_ONLY: 0;
flag |= (event)? UI_ITEM_R_EVENT: 0;
flag |= (full_event)? UI_ITEM_R_FULL_EVENT: 0;
- flag |= (no_bg)? UI_ITEM_R_NO_BG: 0;
+ flag |= (emboss)? 0: UI_ITEM_R_NO_BG;
uiItemFullR(layout, ptr, prop, index, 0, flag, name, icon);
}
-static PointerRNA rna_uiItemO(uiLayout *layout, char *opname, char *name, int icon)
+static PointerRNA rna_uiItemO(uiLayout *layout, char *opname, char *name, int icon, int emboss)
{
- return uiItemFullO(layout, opname, name, icon, NULL, uiLayoutGetOperatorContext(layout), UI_ITEM_O_RETURN_PROPS);
+ int flag= UI_ITEM_O_RETURN_PROPS;
+ flag |= (emboss)? 0: UI_ITEM_R_NO_BG;
+ return uiItemFullO(layout, opname, name, icon, NULL, uiLayoutGetOperatorContext(layout), flag);
}
#else
@@ -85,7 +87,7 @@ static void api_ui_item_op(FunctionRNA *func)
{
PropertyRNA *parm;
parm= RNA_def_string(func, "operator", "", 0, "", "Identifier of the operator.");
- RNA_def_property_flag(parm, PROP_REQUIRED);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
}
static void api_ui_item_op_common(FunctionRNA *func)
@@ -160,7 +162,7 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_boolean(func, "icon_only", 0, "", "Draw only icons in buttons, no text.");
RNA_def_boolean(func, "event", 0, "", "Use button to input key events.");
RNA_def_boolean(func, "full_event", 0, "", "Use button to input full events including modifiers.");
- RNA_def_boolean(func, "no_bg", 0, "", "Don't draw the button itself, just the icon/text.");
+ RNA_def_boolean(func, "emboss", 1, "", "Draw the button itself, just the icon/text.");
RNA_def_int(func, "index", -1, -2, INT_MAX, "", "The index of this button, when set a single member of an array can be accessed, when set to -1 all array members are used.", -2, INT_MAX); /* RNA_NO_INDEX == -1 */
func= RNA_def_function(srna, "props_enum", "uiItemsEnumR");
@@ -186,6 +188,7 @@ void RNA_api_ui_layout(StructRNA *srna)
func= RNA_def_function(srna, "operator", "rna_uiItemO");
api_ui_item_op_common(func);
+ RNA_def_boolean(func, "emboss", 1, "", "Draw the button itself, just the icon/text.");
parm= RNA_def_pointer(func, "properties", "OperatorProperties", "", "Operator properties to fill in, return when 'properties' is set to true.");
RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR);
RNA_def_function_return(func, parm);
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index 52c18b4e581..1797df2abf0 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -114,6 +114,7 @@ EnumPropertyItem event_type_items[] = {
{SELECTMOUSE, "SELECTMOUSE", 0, "Select Mouse", ""},
{0, "", 0, NULL, NULL},
{MOUSEMOVE, "MOUSEMOVE", 0, "Mouse Move", ""},
+ {INBETWEEN_MOUSEMOVE, "INBETWEEN_MOUSEMOVE", 0, "Inbetween Move", ""},
{MOUSEPAN, "TRACKPADPAN", 0, "Mouse/Trackpad Pan", ""},
{MOUSEZOOM, "TRACKPADZOOM", 0, "Mouse/Trackpad Zoom", ""},
{MOUSEROTATE, "MOUSEROTATE", 0, "Mouse/Trackpad Rotate", ""},
diff --git a/source/blender/makesrna/rna_cleanup/rna_api_cleanup.txt b/source/blender/makesrna/rna_cleanup/rna_api_cleanup.txt
new file mode 100644
index 00000000000..83f16e37f0b
--- /dev/null
+++ b/source/blender/makesrna/rna_cleanup/rna_api_cleanup.txt
@@ -0,0 +1,1704 @@
+# non booleans, (much todo)
+ParticleSettings.child_nbr -> child_display_percent
+ParticleSettings.rendered_child_nbr -> child_render_percent
+ParticleSettings.child_random_size -> child_size_random
+ParticleSettings.clumppow -> clump_power
+ParticleSettings.enable_simplify -> use_simplify
+ParticleSettings.rand_group -> use_group_random
+ParticleSettings.ren_as -> render_type
+ParticleSettings.sizemass -> use_size_mass
+ParticleSettings.unborn -> use_unborn
+ParticleSettings.viewport -> use_simplify_viewport
+BuildModifier.randomize -> use_random
+Camera.panorama -> use_panorama
+
+# booleans
+ActionActuator.continue_last_frame -> continue_last_frame
+ActionGroup.expanded -> show_expanded
+ActionGroup.locked -> lock
+ActionGroup.selected -> select
+Actuator.expanded -> show_expanded
+AnimData.nla_enabled -> use_nla
+AnimVizMotionPaths.highlight_keyframes -> show_keyframe_highlight
+AnimVizMotionPaths.search_all_action_keyframes -> use_keyframe_action_all
+AnimVizMotionPaths.show_frame_numbers -> show_frame_numbers
+AnimVizMotionPaths.show_keyframe_numbers -> show_keyframe_numbers
+AnimVizOnionSkinning.only_selected -> show_only_selected
+Area.show_menus -> show_menus
+AreaLamp.dither -> use_dither
+AreaLamp.jitter -> use_jitter
+AreaLamp.only_shadow -> use_only_shadow
+AreaLamp.shadow_layer -> use_only_shadow_layer
+AreaLamp.umbra -> use_umbra
+Armature.auto_ik -> use_auto_ik
+Armature.deform_bbone_rest -> use_deform_b_bone_rest
+Armature.deform_envelope -> use_deform_envelope
+Armature.deform_quaternion -> use_deform_quaternion
+Armature.deform_vertexgroups -> use_deform_vertexgroups
+Armature.delay_deform -> use_deform_delay
+Armature.draw_axes -> show_axes
+Armature.draw_custom_bone_shapes -> show_bone_custom
+Armature.draw_group_colors -> show_group_colors
+Armature.draw_names -> show_names
+Armature.ghost_only_selected -> show_only_ghost_selected
+Armature.layer -> layer
+Armature.layer_protection -> layer_protect
+Armature.x_axis_mirror -> use_mirror_x
+ArmatureModifier.b_bone_rest -> use_b_bone_rest
+ArmatureModifier.invert -> use_vertex_group_invert
+ArmatureModifier.multi_modifier -> use_multi_modifier
+ArmatureModifier.quaternion -> use_preserve_volume
+ArmatureModifier.use_bone_envelopes -> use_bone_envelopes
+ArmatureModifier.use_vertex_groups -> use_vertex_groups
+ArrayModifier.add_offset_object -> use_object_offset
+ArrayModifier.constant_offset -> use_constant_offset
+ArrayModifier.merge_adjacent_vertices -> use_merge_vertex
+ArrayModifier.merge_end_vertices -> use_merge_vertex_end
+ArrayModifier.relative_offset -> use_relative_offset
+BackgroundImage.show_expanded -> show_expanded
+BevelModifier.only_vertices -> use_only_vertex
+BezierSplinePoint.hidden -> hide
+BezierSplinePoint.selected_control_point -> select_control_point
+BezierSplinePoint.selected_handle1 -> select_left_handle
+BezierSplinePoint.selected_handle2 -> select_right_handle
+BoidRule.in_air -> use_in_air
+BoidRule.on_land -> use_on_land
+BoidRuleAvoid.predict -> use_predict
+BoidRuleAvoidCollision.boids -> use_avoid
+BoidRuleAvoidCollision.deflectors -> use_deflect
+BoidRuleFollowLeader.line -> use_line
+BoidRuleGoal.predict -> use_predict
+BoidSettings.allow_climb -> use_climb
+BoidSettings.allow_flight -> use_flight
+BoidSettings.allow_land -> use_land
+Bone.connected -> use_connect
+Bone.cyclic_offset -> use_cyclic_offset
+Bone.deform -> use_deform
+Bone.draw_wire -> show_wire
+Bone.hidden -> hide
+Bone.hinge -> use_hinge
+Bone.inherit_scale -> use_inherit_scale
+Bone.layer -> layer
+Bone.local_location -> use_local_location
+Bone.multiply_vertexgroup_with_envelope -> use_envelope_multiply
+* Bone.restrict_select -> restrict_select
+Bone.selected -> select
+BooleanProperty.default -> default
+BooleanProperty.default_array -> default_array
+Brush.use_accumulate -> use_accumulate
+Brush.use_airbrush -> use_airbrush
+Brush.use_alpha -> use_alpha
+Brush.use_anchor -> use_anchor
+Brush.use_jitter_pressure -> use_jitter_pressure
+Brush.use_persistent -> use_persistent
+Brush.use_rake -> use_rake
+Brush.use_size_pressure -> use_size_pressure
+Brush.use_smooth_stroke -> use_smooth_stroke
+Brush.use_space -> use_space
+Brush.use_spacing_pressure -> use_spacing_pressure
+Brush.use_strength_pressure -> use_strength_pressure
+Brush.use_wrap -> use_wrap
+BuildModifier.randomize -> use_random
+Camera.panorama -> use_panorama
+Camera.show_limits -> show_limits
+Camera.show_mist -> show_mist
+Camera.show_name -> show_name
+Camera.show_passepartout -> show_passepartout
+Camera.show_title_safe -> show_title_safe
+CastModifier.from_radius -> use_radius_as_size
+CastModifier.use_transform -> use_transform
+CastModifier.x -> use_x
+CastModifier.y -> use_y
+CastModifier.z -> use_z
+ChildOfConstraint.use_location_x -> use_location_x
+ChildOfConstraint.use_location_y -> use_location_y
+ChildOfConstraint.use_location_z -> use_location_z
+ChildOfConstraint.use_rotation_x -> use_rotation_x
+ChildOfConstraint.use_rotation_y -> use_rotation_y
+ChildOfConstraint.use_rotation_z -> use_rotation_z
+ChildOfConstraint.use_scale_x -> use_scale_x
+ChildOfConstraint.use_scale_y -> use_scale_y
+ChildOfConstraint.use_scale_z -> use_scale_z
+ClampToConstraint.cyclic -> use_cyclic
+ClothCollisionSettings.enable_collision -> use_collision
+ClothCollisionSettings.enable_self_collision -> use_self_collision
+ClothSettings.pin_cloth -> use_pin_cloth
+ClothSettings.stiffness_scaling -> use_stiffness_scale
+* CollisionSensor.collision_type -> collision_type
+CollisionSensor.pulse -> use_pulse
+CollisionSettings.enabled -> use_collision
+CollisionSettings.kill_particles -> use_particle_kill
+CompositorNodeAlphaOver.convert_premul -> use_convert_premultiply
+CompositorNodeBlur.bokeh -> use_bokeh
+CompositorNodeBlur.gamma -> use_gamma_correct
+CompositorNodeBlur.relative -> use_relative
+CompositorNodeColorSpill.unspill -> use_unspill
+CompositorNodeCrop.crop_size -> use_crop_size
+CompositorNodeDBlur.wrap -> use_wrap
+CompositorNodeDefocus.gamma_correction -> use_gamma_correct
+CompositorNodeDefocus.preview -> use_preview
+CompositorNodeDefocus.use_zbuffer -> use_zbuffer
+CompositorNodeGlare.rotate_45 -> use_rotate_45
+CompositorNodeImage.auto_refresh -> use_auto_refresh
+CompositorNodeImage.cyclic -> use_cyclic
+CompositorNodeInvert.alpha -> use_alpha
+CompositorNodeInvert.rgb -> invert_rgb
+CompositorNodeLensdist.fit -> use_fit
+CompositorNodeLensdist.jitter -> use_jitter
+CompositorNodeLensdist.projector -> use_projector
+CompositorNodeMapValue.use_max -> use_max
+CompositorNodeMapValue.use_min -> use_min
+CompositorNodeMixRGB.alpha -> use_alpha
+CompositorNodeOutputFile.exr_half -> use_exr_half
+CompositorNodeVecBlur.curved -> use_curve
+* Constraint.active -> active
+Constraint.disabled -> is_valid
+Constraint.expanded -> show_expanded
+Constraint.proxy_local -> is_proxy_local
+ConstraintActuator.detect_material -> use_material_detect
+ConstraintActuator.fh_normal -> use_fh_normal
+ConstraintActuator.fh_paralel_axis -> use_fh_paralel_axis
+ConstraintActuator.force_distance -> use_force_distance
+ConstraintActuator.local -> use_local
+ConstraintActuator.normal -> use_normal
+ConstraintActuator.persistent -> use_persistent
+ControlFluidSettings.active -> active
+ControlFluidSettings.reverse_frames -> use_frame_reverse
+Controller.expanded -> show_expanded
+Controller.priority -> use_priority
+Controller.state -> state
+CopyLocationConstraint.invert_x -> invert_x
+CopyLocationConstraint.invert_y -> invert_y
+CopyLocationConstraint.invert_z -> invert_z
+CopyLocationConstraint.use_offset -> use_offset
+CopyLocationConstraint.use_x -> use_x
+CopyLocationConstraint.use_y -> use_y
+CopyLocationConstraint.use_z -> use_z
+CopyRotationConstraint.invert_x -> invert_x
+CopyRotationConstraint.invert_y -> invert_y
+CopyRotationConstraint.invert_z -> invert_z
+CopyRotationConstraint.use_offset -> use_offset
+CopyRotationConstraint.use_x -> use_x
+CopyRotationConstraint.use_y -> use_y
+CopyRotationConstraint.use_z -> use_z
+CopyScaleConstraint.use_offset -> use_offset
+CopyScaleConstraint.use_x -> use_x
+CopyScaleConstraint.use_y -> use_y
+CopyScaleConstraint.use_z -> use_z
+Curve.auto_texspace -> use_auto_texspace
+Curve.back -> use_fill_back
+Curve.draw_handles -> show_handles
+Curve.draw_normals -> show_normals
+Curve.front -> use_fill_front
+Curve.map_along_length -> use_texture_map_length
+Curve.use_deform_fill -> use_fill_deform
+Curve.use_path -> use_path
+Curve.use_path_follow -> use_path_follow
+Curve.use_radius -> use_radius
+Curve.use_stretch -> use_stretch
+Curve.use_time_offset -> use_time_offset
+CurveMapPoint.selected -> select
+CurveMapping.clip -> use_clip
+DelaySensor.repeat -> use_repeat
+DomainFluidSettings.generate_speed_vectors -> use_speed_vectors
+DomainFluidSettings.override_time -> use_time_override
+DomainFluidSettings.reverse_frames -> use_frame_reverse
+*negate* DopeSheet.collapse_summary -> show_expanded_summary
+DopeSheet.display_armature -> show_armature
+DopeSheet.display_camera -> show_camera
+DopeSheet.display_curve -> show_curve
+DopeSheet.display_lamp -> show_lamp
+DopeSheet.display_material -> show_material
+DopeSheet.display_mesh -> show_mesh
+DopeSheet.display_metaball -> show_metaball
+DopeSheet.display_node -> show_node
+DopeSheet.display_particle -> show_particle
+DopeSheet.display_scene -> show_scene
+DopeSheet.display_shapekeys -> show_shapekeys
+DopeSheet.display_summary -> show_summary
+DopeSheet.display_texture -> show_texture
+DopeSheet.display_transforms -> show_transforms
+DopeSheet.display_world -> show_world
+DopeSheet.include_missing_nla -> show_missing_nla
+DopeSheet.only_group_objects -> show_only_group_objects
+DopeSheet.only_selected -> show_only_selected
+Driver.invalid -> is_valid
+Driver.show_debug_info -> show_debug_info
+DriverTarget.use_local_space_transforms -> use_local_space_transform
+EdgeSplitModifier.use_edge_angle -> use_edge_angle
+EdgeSplitModifier.use_sharp -> use_edge_sharp
+EditBone.connected -> is_connected
+EditBone.cyclic_offset -> use_cyclic_offset
+EditBone.deform -> use_deform
+EditBone.draw_wire -> show_wire
+EditBone.hidden -> hide
+EditBone.hinge -> use_hinge
+EditBone.inherit_scale -> use_inherit_scale
+EditBone.layer -> layer
+EditBone.local_location -> use_local_location
+EditBone.locked -> lock
+EditBone.multiply_vertexgroup_with_envelope -> use_envelope_multiply
+EditBone.restrict_select -> restrict_select
+EditBone.selected -> select
+EditBone.selected_head -> select_head
+EditBone.selected_tail -> select_tail
+EditObjectActuator.enable_3d_tracking -> use_track_3d
+EditObjectActuator.local_angular_velocity -> use_local_angular_velocity
+EditObjectActuator.local_linear_velocity -> use_local_linear_velocity
+EditObjectActuator.replace_display_mesh -> use_display_mesh
+EditObjectActuator.replace_physics_mesh -> use_physics_mesh
+EffectSequence.convert_float -> use_float
+EffectSequence.de_interlace -> use_deinterlace
+EffectSequence.flip_x -> use_flip_x
+EffectSequence.flip_y -> use_flip_y
+EffectSequence.premultiply -> use_premultiply
+EffectSequence.proxy_custom_directory -> use_proxy_custom_directory
+EffectSequence.proxy_custom_file -> use_proxy_custom_file
+EffectSequence.reverse_frames -> use_frame_reverse
+EffectSequence.use_color_balance -> use_color_balance
+EffectSequence.use_crop -> use_crop
+EffectSequence.use_proxy -> use_proxy
+EffectSequence.use_translation -> use_translation
+EffectorWeights.do_growing_hair -> use_hair_grow
+EnvironmentMap.ignore_layers -> layer_ignore
+EnvironmentMapTexture.use_filter_size_min -> filter_size_min
+EnvironmentMapTexture.mipmap -> use_mipmap
+EnvironmentMapTexture.mipmap_gauss -> use_mipmap_gauss
+Event.alt -> alt
+Event.ctrl -> ctrl
+Event.oskey -> oskey
+Event.shift -> shift
+ExplodeModifier.alive -> show_alive
+ExplodeModifier.dead -> show_dead
+ExplodeModifier.size -> use_size
+ExplodeModifier.split_edges -> use_edge_split
+ExplodeModifier.unborn -> show_unborn
+FCurve.auto_clamped_handles -> use_auto_handle_clamp
+*negate* FCurve.disabled -> enabled
+FCurve.locked -> lock
+FCurve.muted -> use_mute
+FCurve.selected -> select
+*negate* FCurve.visible -> hide
+FCurveSample.selected -> select
+FModifier.active -> active
+*negate* FModifier.disabled -> enabled
+FModifier.expanded -> show_expanded
+FModifier.muted -> use_mute
+FModifierFunctionGenerator.additive -> use_additive
+FModifierGenerator.additive -> use_additive
+FModifierLimits.use_maximum_x -> use_x_max
+FModifierLimits.use_maximum_y -> use_y_max
+FModifierLimits.use_minimum_x -> use_x_min
+FModifierLimits.use_minimum_y -> use_y_min
+FModifierStepped.use_frame_end -> use_frame_end
+FModifierStepped.use_frame_start -> use_frame_start
+FcurveActuator.add -> use_additive
+FcurveActuator.child -> use_child
+FcurveActuator.force -> use_force
+FcurveActuator.local -> use_local
+FieldSettings.do_absorption -> use_absorption
+FieldSettings.do_location -> use_location
+FieldSettings.do_rotation -> use_rotation
+FieldSettings.force_2d -> use_force_2d
+FieldSettings.global_coordinates -> use_coordinates_global
+FieldSettings.guide_path_add -> use_guide_path_add
+FieldSettings.multiple_springs -> use_multiple_springs
+FieldSettings.root_coordinates -> use_coordinates_root
+FieldSettings.use_coordinates -> use_coordinates_object
+FieldSettings.use_guide_path_weight -> use_guide_path_weight
+FieldSettings.use_max_distance -> use_distance_min
+FieldSettings.use_min_distance -> use_distance_max
+FieldSettings.use_radial_max -> use_radial_max
+FieldSettings.use_radial_min -> use_radial_min
+FileSelectParams.do_filter -> use_filter
+FileSelectParams.filter_blender -> use_filter_blender
+FileSelectParams.filter_folder -> use_filter_folder
+FileSelectParams.filter_font -> use_filter_font
+FileSelectParams.filter_image -> use_filter_image
+FileSelectParams.filter_movie -> use_filter_movie
+FileSelectParams.filter_script -> use_filter_script
+FileSelectParams.filter_sound -> use_filter_sound
+FileSelectParams.filter_text -> use_filter_text
+FileSelectParams.hide_dot -> show_hidden
+Filter2DActuator.enable_motion_blur -> use_motion_blur
+FloorConstraint.sticky -> use_sticky
+FloorConstraint.use_rotation -> use_rotation
+FluidFluidSettings.active -> active
+FluidFluidSettings.export_animated_mesh -> use_animated_mesh
+FollowPathConstraint.use_curve_follow -> use_curve_follow
+FollowPathConstraint.use_curve_radius -> use_curve_radius
+FollowPathConstraint.use_fixed_position -> use_fixed_location
+Function.registered -> registered
+Function.registered_optional -> registered_optional
+GPencilFrame.paint_lock -> lock_paint
+GPencilFrame.selected -> select
+GPencilLayer.active -> active
+GPencilLayer.frame_lock -> lock_frame
+GPencilLayer.hide -> hide
+GPencilLayer.locked -> lock
+GPencilLayer.selected -> select
+GPencilLayer.show_points -> show_points
+GPencilLayer.use_onion_skinning -> use_onion_skin
+GameBooleanProperty.value -> value
+GameObjectSettings.actor -> use_actor
+GameObjectSettings.all_states -> states_all
+GameObjectSettings.anisotropic_friction -> use_anisotropic_friction
+GameObjectSettings.collision_compound -> use_collision_compound
+GameObjectSettings.debug_state -> show_state_debug
+GameObjectSettings.ghost -> use_ghost
+GameObjectSettings.initial_state -> initial_state
+GameObjectSettings.lock_x_axis -> lock_location_x
+GameObjectSettings.lock_x_rot_axis -> lock_rotation_x
+GameObjectSettings.lock_y_axis -> lock_location_y
+GameObjectSettings.lock_y_rot_axis -> lock_rotation_y
+GameObjectSettings.lock_z_axis -> lock_location_z
+GameObjectSettings.lock_z_rot_axis -> lock_rotation_z
+GameObjectSettings.material_physics -> use_material_physics
+*negate* GameObjectSettings.no_sleeping -> use_sleep
+GameObjectSettings.rotate_from_normal -> use_rotate_from_normal
+GameObjectSettings.show_actuators -> show_actuators
+GameObjectSettings.show_controllers -> show_controllers
+GameObjectSettings.show_sensors -> show_sensors
+GameObjectSettings.show_state_panel -> show_state_panel
+GameObjectSettings.use_activity_culling -> use_activity_culling
+GameObjectSettings.use_collision_bounds -> use_collision_bounds
+GameObjectSettings.used_state -> state_used
+GameObjectSettings.visible_state -> state_visible
+GameProperty.debug -> use_debug
+GameSoftBodySettings.bending_const -> use_bending_constraint
+GameSoftBodySettings.cluster_rigid_to_softbody -> use_cluster_rigid_to_softbody
+GameSoftBodySettings.cluster_soft_to_softbody -> use_cluster_soft_to_softbody
+GameSoftBodySettings.shape_match -> use_shape_match
+GlowSequence.only_boost -> use_only_boost
+GreasePencil.use_stroke_endpoints -> use_stroke_endpoints
+Group.layer -> layer
+ID.fake_user -> use_fake_user
+ID.tag -> tag
+Image.animated -> use_snimation
+Image.clamp_x -> use_clamp_x
+Image.clamp_y -> use_clamp_y
+Image.dirty -> is_dirty
+Image.fields -> use_fields
+Image.has_data -> is_data
+Image.premultiply -> use_premultiply
+Image.tiles -> use_tiles
+ImagePaint.invert_stencil -> invert_stencil
+ImagePaint.show_brush -> show_brush
+ImagePaint.show_brush_draw -> show_brush_draw
+ImagePaint.use_backface_cull -> use_backface_cull
+ImagePaint.use_clone_layer -> use_clone_layer
+ImagePaint.use_normal_falloff -> use_normal_falloff
+ImagePaint.use_occlude -> use_occlude
+ImagePaint.use_projection -> use_projection
+ImagePaint.use_stencil_layer -> use_stencil_layer
+ImageSequence.convert_float -> use_float
+ImageSequence.de_interlace -> use_deinterlace
+ImageSequence.flip_x -> use_flip_x
+ImageSequence.flip_y -> use_flip_y
+ImageSequence.premultiply -> use_premultiply
+ImageSequence.proxy_custom_directory -> use_proxy_custom_directory
+ImageSequence.proxy_custom_file -> use_proxy_custom_file
+ImageSequence.reverse_frames -> use_frame_reverse
+ImageSequence.use_color_balance -> use_color_balance
+ImageSequence.use_crop -> use_crop
+ImageSequence.use_proxy -> use_proxy
+ImageSequence.use_translation -> use_translation
+ImageTexture.calculate_alpha -> use_rgb_alpha
+ImageTexture.checker_even -> use_checker_even
+ImageTexture.checker_odd -> use_checker_odd
+ImageTexture.filter_size_minimum -> use_filter_size_min
+ImageTexture.flip_axis -> use_flip_axis
+
+
+ImageTexture.interpolation -> use_interpolation
+ImageTexture.invert_alpha -> invert_alpha
+ImageTexture.mipmap -> use_mipmap
+ImageTexture.mipmap_gauss -> use_mipmap_gauss
+ImageTexture.mirror_x -> use_mirror_x
+ImageTexture.mirror_y -> use_mirror_y
+ImageTexture.normal_map -> use_normal_map
+ImageTexture.use_alpha -> use_use_alpha
+ImageUser.auto_refresh -> use_auto_refresh
+ImageUser.cyclic -> use_cyclic
+* would use is_ * InflowFluidSettings.active -> active
+InflowFluidSettings.export_animated_mesh -> use_export_animated_mesh
+InflowFluidSettings.local_coordinates -> use_local_coordinates
+Itasc.auto_step -> use_auto_step
+
+
+JoystickSensor.all_events -> use_all_events
+
+
+Key.relative -> use_relative
+* would use is_ * KeyConfig.user_defined -> user_defined
+KeyMap.children_expanded -> show_expanded_children
+KeyMap.items_expanded -> show_expanded_items
+* would use is_ * KeyMap.modal -> modal
+KeyMap.user_defined -> use_user_defined
+KeyMapItem.active -> active
+* would use is_pressed * KeyMapItem.alt -> alt
+* would use is_pressed * KeyMapItem.any -> any
+* would use is_pressed * KeyMapItem.ctrl -> ctrl
+KeyMapItem.expanded -> show_expanded
+* would use is_pressed * KeyMapItem.oskey -> oskey
+* would use is_pressed * KeyMapItem.shift -> shift
+
+
+* KeyboardSensor.all_keys -> all_keys
+
+
+* would use is_ * Keyframe.selected -> select
+* would use is_ * Keyframe.selected_handle1 -> select_left_handle
+* would use is_ * Keyframe.selected_handle2 -> select_right_handle
+
+
+KeyingSet.absolute -> use_absolute
+KeyingSet.insertkey_needed -> use_insertkey_needed
+KeyingSet.insertkey_visual -> use_insertkey_visual
+KeyingSet.insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb
+
+
+KeyingSetInfo.insertkey_needed -> use_insertkey_needed
+KeyingSetInfo.insertkey_visual -> use_insertkey_visual
+KeyingSetInfo.insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb
+
+
+KeyingSetPath.entire_array -> use_entire_array
+KeyingSetPath.insertkey_needed -> use_insertkey_needed
+KeyingSetPath.insertkey_visual -> use_insertkey_visual
+KeyingSetPath.insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb
+
+
+KinematicConstraint.pos_lock_x -> lock_location_x
+KinematicConstraint.pos_lock_y -> lock_location_y
+KinematicConstraint.pos_lock_z -> lock_location_z
+KinematicConstraint.rot_lock_x -> lock_rotation_x
+KinematicConstraint.rot_lock_y -> lock_rotation_y
+KinematicConstraint.rot_lock_z -> lock_rotation_z
+KinematicConstraint.use_position -> use_location
+KinematicConstraint.use_rotation -> use_rotation
+KinematicConstraint.use_stretch -> use_stretch
+KinematicConstraint.use_tail -> use_tail
+KinematicConstraint.use_target -> use_target
+
+
+Lamp.diffuse -> use_diffuse
+Lamp.layer -> use_own_layer
+Lamp.negative -> use_negative
+Lamp.specular -> use_specular
+LampSkySettings.use_atmosphere -> use_atmosphere
+LampSkySettings.use_sky -> use_sky
+LampTextureSlot.map_color -> use_map_color
+LampTextureSlot.map_shadow -> use_map_shadow
+Lattice.outside -> use_outside
+LimitLocationConstraint.limit_transform -> limit_transform
+LimitLocationConstraint.use_maximum_x -> use_x_max
+LimitLocationConstraint.use_maximum_y -> use_y_max
+LimitLocationConstraint.use_maximum_z -> use_z_max
+LimitLocationConstraint.use_minimum_x -> use_x_min
+LimitLocationConstraint.use_minimum_y -> use_y_min
+LimitLocationConstraint.use_minimum_z -> use_z_min
+LimitRotationConstraint.limit_transform -> limit_transform
+LimitRotationConstraint.use_limit_x -> use_x_limit
+LimitRotationConstraint.use_limit_y -> use_y_limit
+LimitRotationConstraint.use_limit_z -> use_z_limit
+LimitScaleConstraint.limit_transform -> limit_transform
+LimitScaleConstraint.use_maximum_x -> use_x_max
+LimitScaleConstraint.use_maximum_y -> use_y_max
+LimitScaleConstraint.use_maximum_z -> use_z_max
+LimitScaleConstraint.use_minimum_x -> use_x_min
+LimitScaleConstraint.use_minimum_y -> use_y_min
+LimitScaleConstraint.use_minimum_z -> use_z_min
+
+
+Main.debug -> show_debug
+Main.file_is_saved -> is_saved
+
+
+* MaskModifier.invert -> invert
+
+
+Material.cast_approximate -> use_cast_approximate
+Material.cast_buffer_shadows -> use_cast_buffer_shadows
+Material.cast_shadows_only -> use_cast_shadows_only
+Material.cubic -> use_cubic
+Material.exclude_mist -> use_exclude_mist
+Material.face_texture -> use_face_texture
+Material.face_texture_alpha -> use_face_texture_alpha
+Material.full_oversampling -> use_full_oversampling
+Material.invert_z -> use_invert_z
+Material.light_group_exclusive -> use_light_group_exclusive
+Material.object_color -> use_object_color
+Material.only_shadow -> use_shadow_only
+Material.ray_shadow_bias -> use_ray_shadow_bias
+Material.receive_transparent_shadows -> use_receive_transparent_shadows
+Material.shadeless -> use_shadeless
+Material.shadows -> use_shadows
+Material.tangent_shading -> use_tangent_shading
+Material.traceable -> use_traceable
+Material.transparency -> use_transparency
+Material.use_diffuse_ramp -> use_diffuse_ramp
+Material.use_nodes -> use_nodes
+Material.use_sky -> use_sky
+Material.use_specular_ramp -> use_specular_ramp
+Material.use_textures -> use_textures
+Material.vertex_color_light -> use_vertex_color_light
+Material.vertex_color_paint -> use_vertex_color_paint
+
+
+MaterialHalo.flare_mode -> use_flare_mode
+MaterialHalo.lines -> use_lines
+MaterialHalo.ring -> use_ring
+MaterialHalo.shaded -> use_shaded
+MaterialHalo.soft -> use_soft
+MaterialHalo.star -> use_star
+MaterialHalo.texture -> use_texture
+MaterialHalo.vertex_normal -> use_vertex_normal
+MaterialHalo.xalpha -> use_xalpha
+
+
+MaterialPhysics.align_to_normal -> use_align_to_normal
+
+
+* MaterialRaytraceMirror.enabled -> enabled
+
+
+MaterialStrand.blender_units -> use_blender_units
+MaterialStrand.surface_diffuse -> use_surface_diffuse
+MaterialStrand.tangent_shading -> use_tangent_shading
+
+
+* MaterialSubsurfaceScattering.enabled -> enabled
+
+
+* MaterialTextureSlot.enabled -> enabled
+MaterialTextureSlot.from_dupli -> use_from_dupli
+MaterialTextureSlot.from_original -> use_from_original
+MaterialTextureSlot.map_alpha -> use_map_alpha
+MaterialTextureSlot.map_ambient -> use_map_ambient
+MaterialTextureSlot.map_colordiff -> use_map_colordiff
+MaterialTextureSlot.map_coloremission -> use_map_coloremission
+MaterialTextureSlot.map_colorreflection -> use_map_colorreflection
+MaterialTextureSlot.map_colorspec -> use_map_colorspec
+MaterialTextureSlot.map_colortransmission -> use_map_colortransmission
+MaterialTextureSlot.map_density -> use_map_density
+MaterialTextureSlot.map_diffuse -> use_map_diffuse
+MaterialTextureSlot.map_displacement -> use_map_displacement
+MaterialTextureSlot.map_emission -> use_map_emission
+MaterialTextureSlot.map_emit -> use_map_emit
+MaterialTextureSlot.map_hardness -> use_map_hardness
+MaterialTextureSlot.map_mirror -> use_map_mirror
+MaterialTextureSlot.map_normal -> use_map_normal
+MaterialTextureSlot.map_raymir -> use_map_raymir
+MaterialTextureSlot.map_reflection -> use_map_reflect
+MaterialTextureSlot.map_scattering -> use_map_scatter
+MaterialTextureSlot.map_specular -> use_map_specular
+MaterialTextureSlot.map_translucency -> use_map_translucency
+MaterialTextureSlot.map_warp -> use_map_warp
+MaterialTextureSlot.new_bump -> use_new_bump
+
+
+MaterialVolume.external_shadows -> use_external_shadows
+MaterialVolume.light_cache -> use_light_cache
+
+
+Mesh.all_edges -> show_all_edges
+Mesh.auto_texspace -> use_auto_texspace
+Mesh.autosmooth -> use_autosmooth
+Mesh.double_sided -> use_double_sided
+Mesh.draw_bevel_weights -> show_bevel_weights
+Mesh.draw_creases -> show_creases
+Mesh.draw_edge_angle -> show_edge_angle
+Mesh.draw_edge_lenght -> show_edge_lenght
+Mesh.draw_edges -> show_edges
+Mesh.draw_face_area -> show_face_area
+Mesh.draw_faces -> show_faces
+Mesh.draw_normals -> show_normals
+Mesh.draw_seams -> show_seams
+Mesh.draw_sharp -> show_sharp
+Mesh.draw_vertex_normals -> show_vertex_normals
+Mesh.use_mirror_topology -> use_mirror_topology
+Mesh.use_mirror_x -> use_mirror_x
+Mesh.use_paint_mask -> use_paint_mask
+Mesh.vertex_normal_flip -> use_vertex_normal_flip
+
+
+MeshColorLayer.active -> active
+MeshColorLayer.active_render -> active_render
+
+
+MeshDeformModifier.dynamic -> dynamic
+MeshDeformModifier.invert -> invert
+MeshDeformModifier.is_bound -> is_bound
+
+
+MeshEdge.fgon -> is_fgon
+* MeshEdge.hidden -> hide
+MeshEdge.loose -> use_loose
+MeshEdge.seam -> use_seam
+* MeshEdge.selected -> select
+MeshEdge.sharp -> use_sharp
+
+
+* would use is_ * MeshFace.hidden -> hide
+* would use is_ * MeshFace.selected -> select
+* would use is_ * MeshFace.smooth -> smooth
+
+
+MeshTextureFace.alpha_sort -> use_alpha_sort
+MeshTextureFace.billboard -> use_billboard
+MeshTextureFace.collision -> use_collision
+MeshTextureFace.halo -> use_halo
+* would use is_ * MeshTextureFace.invisible -> invisible
+MeshTextureFace.light -> use_light
+MeshTextureFace.object_color -> use_object_color
+MeshTextureFace.shadow -> use_shadow_face
+MeshTextureFace.shared -> use_blend_shared
+MeshTextureFace.tex -> use_render_texture
+MeshTextureFace.text -> use_bitmap_text
+MeshTextureFace.twoside -> use_twoside
+MeshTextureFace.uv_pinned -> uv_pin
+MeshTextureFace.uv_selected -> uv_select
+* MeshTextureFaceLayer.active -> active
+* MeshTextureFaceLayer.active_clone -> active_clone
+* MeshTextureFaceLayer.active_render -> active_render
+
+
+* MeshVertex.hidden -> hide
+* would use is_ * MeshVertex.selected -> select
+
+
+MetaBall.auto_texspace -> use_auto_texspace
+
+
+* MetaElement.hide -> hide
+* would use is_ * MetaElement.negative -> negative
+
+
+MetaSequence.convert_float -> use_convert_float
+MetaSequence.de_interlace -> use_deinterlace
+MetaSequence.flip_x -> use_flip_x
+MetaSequence.flip_y -> use_flip_y
+MetaSequence.premultiply -> use_convert_premultiply
+MetaSequence.proxy_custom_directory -> use_proxy_custom_directory
+MetaSequence.proxy_custom_file -> use_proxy_custom_file
+MetaSequence.reverse_frames -> use_reverse_frames
+MetaSequence.use_color_balance -> use_color_balance
+MetaSequence.use_crop -> use_crop
+MetaSequence.use_proxy -> use_proxy
+MetaSequence.use_translation -> use_translation
+
+
+MirrorModifier.clip -> use_clipping
+MirrorModifier.mirror_u -> use_mirror_u
+MirrorModifier.mirror_v -> use_mirror_v
+MirrorModifier.mirror_vertex_groups -> use_mirror_vertex_groups
+MirrorModifier.x -> use_x
+MirrorModifier.y -> use_y
+MirrorModifier.z -> use_z
+
+
+Modifier.editmode -> use_in_editmode
+Modifier.expanded -> show_expanded
+Modifier.on_cage -> use_on_cage
+Modifier.realtime -> show_realtime
+Modifier.render -> use_render
+
+
+* MotionPath.editing -> editing
+* MotionPath.use_bone_head -> use_bone_head
+* would use is_ * MotionPathVert.selected -> select
+
+
+MovieSequence.convert_float -> use_convert_float
+MovieSequence.de_interlace -> use_deinterlace
+MovieSequence.flip_x -> use_flip_x
+MovieSequence.flip_y -> use_flip_y
+MovieSequence.premultiply -> use_convert_premultiply
+MovieSequence.proxy_custom_directory -> use_proxy_custom_directory
+MovieSequence.proxy_custom_file -> use_proxy_custom_file
+* MovieSequence.reverse_frames -> use_reverse_frames
+MovieSequence.use_color_balance -> use_color_balance
+MovieSequence.use_crop -> use_crop
+MovieSequence.use_proxy -> use_proxy
+MovieSequence.use_translation -> use_translation
+
+
+MulticamSequence.convert_float -> use_convert_float
+MulticamSequence.de_interlace -> use_deinterlace
+MulticamSequence.flip_x -> use_flip_x
+MulticamSequence.flip_y -> use_flip_y
+MulticamSequence.premultiply -> use_convert_premultiply
+MulticamSequence.proxy_custom_directory -> use_proxy_custom_directory
+MulticamSequence.proxy_custom_file -> use_proxy_custom_file
+* MulticamSequence.reverse_frames -> use_reverse_frames
+MulticamSequence.use_color_balance -> use_color_balance
+MulticamSequence.use_crop -> use_crop
+MulticamSequence.use_proxy -> use_proxy
+MulticamSequence.use_translation -> use_translation
+
+
+MultiresModifier.external -> use_external
+MultiresModifier.optimal_display -> show_optimal
+
+
+
+
+
+
+NetRenderSettings.master_broadcast -> use_master_broadcast
+NetRenderSettings.master_clear -> use_master_clear
+NetRenderSettings.slave_clear -> use_slave_clear
+NetRenderSettings.slave_outputlog -> use_slave_outputlog
+NetRenderSettings.slave_thumb -> use_slave_thumb
+
+
+* I'd use is_ * NlaStrip.active -> active
+NlaStrip.animated_influence -> use_animated_influence
+NlaStrip.animated_time -> use_animated_time
+NlaStrip.animated_time_cyclic -> use_animated_time_cyclic
+NlaStrip.auto_blending -> use_auto_blend
+* I'd use is_ * NlaStrip.muted -> muted
+* I'd use is_ * NlaStrip.reversed -> reversed
+* I'd use is_ * NlaStrip.selected -> select
+
+
+* I'd use is_ * NlaTrack.active -> active
+* I'd use is_ * NlaTrack.locked -> lock
+* I'd use is_ * NlaTrack.muted -> muted
+* I'd use is_ * NlaTrack.selected -> select
+NlaTrack.solo -> is_solo
+
+
+Object.draw_axis -> show_axis
+Object.draw_bounds -> show_bounds
+Object.draw_name -> show_name
+Object.draw_texture_space -> show_texture_space
+Object.draw_transparent -> show_transparent
+Object.draw_wire -> show_wire
+* Object.duplis_used -> is_duplis_used
+* Object.layers -> layers
+Object.lock_location -> lock_location
+Object.lock_rotation -> lock_rotation
+Object.lock_rotation_w -> lock_rotation_w
+Object.lock_rotations_4d -> lock_rotations_4d
+Object.lock_scale -> lock_scale
+* Object.restrict_render -> use_limit_render
+* Object.restrict_select -> use_limit_select
+* Object.restrict_view -> use_limit_view
+* Object.selected -> select
+Object.shape_key_edit_mode -> use_shape_key_edit_mode
+Object.shape_key_lock -> show_shape_key
+Object.slow_parent -> use_slow_parent
+Object.time_offset_add_parent -> use_time_offset_add_parent
+Object.time_offset_edit -> use_time_offset_edit
+Object.time_offset_parent -> use_time_offset_parent
+Object.time_offset_particle -> use_time_offset_particle
+Object.use_dupli_faces_scale -> use_dupli_faces_scale
+Object.use_dupli_frames_speed -> use_dupli_frames_speed
+Object.use_dupli_verts_rotation -> use_dupli_verts_rotation
+Object.x_ray -> show_x_ray
+
+
+* ObjectActuator.add_linear_velocity -> add_linear_velocity
+ObjectActuator.local_angular_velocity -> use_local_angular_velocity
+ObjectActuator.local_force -> use_local_force
+ObjectActuator.local_linear_velocity -> use_local_linear_velocity
+ObjectActuator.local_location -> use_local_location
+ObjectActuator.local_rotation -> use_local_rotation
+ObjectActuator.local_torque -> use_local_torque
+* ObjectActuator.servo_limit_x -> use_limit_servo_x
+* ObjectActuator.servo_limit_y -> use_limit_servo_y
+* ObjectActuator.servo_limit_z -> use_limit_servo_z
+
+
+* ObjectBase.layers -> layers
+* ObjectBase.selected -> select
+* ObjectBase.selected_user -> is_select_user
+
+
+* could be is_ * ObstacleFluidSettings.active -> active
+ObstacleFluidSettings.export_animated_mesh -> use_export_animated_mesh
+
+
+* Operator.has_reports -> has_reports
+OperatorStrokeElement.flip -> use_flip
+
+
+OutflowFluidSettings.active -> active
+OutflowFluidSettings.export_animated_mesh -> use_export_animated_mesh
+
+
+Paint.fast_navigate -> show_low_resolution
+Paint.show_brush -> show_brush
+
+* Panel.bl_default_closed -> bl_default_closed
+* Panel.bl_show_header -> bl_show_header
+
+
+ParentActuator.compound -> use_compound
+ParentActuator.ghost -> use_ghost
+
+
+* Particle.no_disp -> no_disp
+* Particle.rekey -> rekey
+* Particle.unexist -> unexist
+
+
+ParticleBrush.use_puff_volume -> use_puff_volume
+
+
+ParticleEdit.add_interpolate -> use_add_interpolate
+ParticleEdit.auto_velocity -> use_auto_velocity
+ParticleEdit.draw_particles -> show_particles
+ParticleEdit.editable -> is_editable
+ParticleEdit.emitter_deflect -> use_emitter_deflect
+ParticleEdit.fade_time -> use_fade_time
+* ParticleEdit.hair -> hair
+ParticleEdit.keep_lengths -> use_keep_lengths
+ParticleEdit.keep_root -> use_keep_root
+
+
+ParticleFluidSettings.drops -> show_drops
+ParticleFluidSettings.floats -> show_floats
+ParticleFluidSettings.tracer -> show_tracer
+
+
+ParticleInstanceModifier.alive -> show_alive
+ParticleInstanceModifier.children -> use_children
+ParticleInstanceModifier.dead -> show_dead
+ParticleInstanceModifier.keep_shape -> use_keep_shape
+ParticleInstanceModifier.normal -> use_normal
+ParticleInstanceModifier.size -> use_size
+ParticleInstanceModifier.unborn -> show_unborn
+ParticleInstanceModifier.use_path -> use_path
+
+
+ParticleSettings.abs_path_time -> use_abs_path_time
+ParticleSettings.animate_branching -> use_animate_branching
+ParticleSettings.billboard_lock -> lock_billboard
+ParticleSettings.boids_2d -> lock_boids_to_surface
+ParticleSettings.branching -> use_branching
+ParticleSettings.child_effector -> use_child_effector
+ParticleSettings.child_guide -> use_child_guide
+ParticleSettings.child_render -> use_child_render
+ParticleSettings.die_on_collision -> use_die_on_collision
+ParticleSettings.died -> show_died
+ParticleSettings.draw_health -> show_health
+ParticleSettings.emitter -> use_emitter
+ParticleSettings.enable_simplify -> use_simplify
+ParticleSettings.even_distribution -> use_even_distribution
+ParticleSettings.grid_invert -> invert_grid
+ParticleSettings.hair_bspline -> use_hair_bspline
+* ParticleSettings.hair_geometry -> hair_geometry
+ParticleSettings.material_color -> show_material_color
+ParticleSettings.num -> use_number
+ParticleSettings.parent -> use_parent
+ParticleSettings.rand_group -> use_random_group
+ParticleSettings.react_multiple -> use_react_multiple
+ParticleSettings.react_start_end -> use_react_start_end
+ParticleSettings.render_adaptive -> show_path_steps
+ParticleSettings.render_strand -> use_render_strand
+ParticleSettings.rotation_dynamic -> use_rotation_dynamic
+ParticleSettings.self_effect -> use_self_effect
+ParticleSettings.show_size -> show_size
+ParticleSettings.size_deflect -> use_size_deflect
+ParticleSettings.sizemass -> use_multiply_size_mass
+ParticleSettings.symmetric_branching -> use_symmetric_branching
+ParticleSettings.trand -> use_emit_random
+ParticleSettings.unborn -> show_unborn
+ParticleSettings.use_global_dupli -> use_global_dupli
+ParticleSettings.use_group_count -> use_group_count
+ParticleSettings.velocity -> show_velocity
+ParticleSettings.velocity_length -> use_velocity_length
+* ParticleSettings.viewport -> viewport
+ParticleSettings.whole_group -> use_whole_group
+
+
+ParticleSystem.editable -> is_editable
+ParticleSystem.edited -> is_edited
+* ParticleSystem.global_hair -> global_hair
+ParticleSystem.hair_dynamics -> use_hair_dynamics
+ParticleSystem.keyed_timing -> use_keyed_timing
+* ParticleSystem.multiple_caches -> multiple_caches
+ParticleSystem.vertex_group_clump_negate -> invert_vertex_group_clump
+ParticleSystem.vertex_group_density_negate -> invert_vertex_group_density
+ParticleSystem.vertex_group_field_negate -> invert_vertex_group_field
+ParticleSystem.vertex_group_kink_negate -> invert_vertex_group_kink
+ParticleSystem.vertex_group_length_negate -> invert_vertex_group_length
+ParticleSystem.vertex_group_rotation_negate -> invert_vertex_group_rotation
+ParticleSystem.vertex_group_roughness1_negate -> invert_vertex_group_roughness1
+ParticleSystem.vertex_group_roughness2_negate -> invert_vertex_group_roughness2
+ParticleSystem.vertex_group_roughness_end_negate -> invert_vertex_group_roughness_end
+ParticleSystem.vertex_group_size_negate -> invert_vertex_group_size
+ParticleSystem.vertex_group_tangent_negate -> invert_vertex_group_tangent
+ParticleSystem.vertex_group_velocity_negate -> invert_vertex_group_velocity
+
+
+* ParticleTarget.valid -> valid
+
+
+PivotConstraint.use_relative_position -> use_relative_location
+
+
+PointCache.baked -> is_baked
+* PointCache.baking -> baking
+PointCache.disk_cache -> use_disk_cache
+PointCache.external -> use_external
+* PointCache.frames_skipped -> frames_skipped
+PointCache.outdated -> is_outdated
+PointCache.quick_cache -> use_quick_cache
+PointCache.use_library_path -> use_library_path
+
+
+PointDensity.turbulence -> use_turbulence
+
+
+PointLamp.only_shadow -> use_shadow_only
+PointLamp.shadow_layer -> use_shadow_own_layer
+PointLamp.sphere -> use_sphere
+
+
+PoseBone.has_ik -> is_in_ik_chain
+* PoseBone.ik_dof_x -> ik_dof_x
+* PoseBone.ik_dof_y -> ik_dof_y
+* PoseBone.ik_dof_z -> ik_dof_z
+PoseBone.ik_limit_x -> lock_ik_x
+PoseBone.ik_limit_y -> lock_ik_y
+PoseBone.ik_limit_z -> lock_ik_z
+PoseBone.ik_lin_control -> use_ik_lin_control
+PoseBone.ik_rot_control -> use_ik_rot_control
+PoseBone.lock_location -> lock_location
+PoseBone.lock_rotation -> lock_rotation
+PoseBone.lock_rotation_w -> lock_rotation_w
+PoseBone.lock_rotations_4d -> lock_rotations_4d
+PoseBone.lock_scale -> lock_scale
+* PoseBone.selected -> select
+
+
+PoseTemplateSettings.generate_def_rig -> use_generate_def_rig
+
+
+Property.is_never_none -> is_never_none
+Property.is_readonly -> is_readonly
+Property.is_required -> is_required
+Property.registered -> is_registered
+Property.registered_optional -> is_registered_optional
+Property.use_output -> is_output
+
+
+* PythonConstraint.script_error -> is_script_error
+PythonConstraint.use_targets -> use_targets
+
+
+PythonController.debug -> use_debug
+
+
+RandomActuator.always_true -> use_always_true
+
+
+RaySensor.x_ray_mode -> use_x_ray_mode
+
+
+RegionView3D.box_clip -> use_box_clip
+RegionView3D.box_preview -> show_synced_view
+RegionView3D.lock_rotation -> lock_rotation
+
+
+* RenderEngine.bl_postprocess -> use_bl_postprocess
+* RenderEngine.bl_preview -> use_bl_preview
+
+
+* RenderLayer.all_z -> all_z
+* RenderLayer.edge -> edge
+* RenderLayer.enabled -> enabled
+* RenderLayer.halo -> halo
+* RenderLayer.pass_ao -> pass_ao
+* RenderLayer.pass_ao_exclude -> pass_ao_exclude
+* RenderLayer.pass_color -> pass_color
+* RenderLayer.pass_combined -> pass_combined
+* RenderLayer.pass_diffuse -> pass_diffuse
+* RenderLayer.pass_emit -> pass_emit
+* RenderLayer.pass_emit_exclude -> pass_emit_exclude
+* RenderLayer.pass_environment -> pass_environment
+* RenderLayer.pass_environment_exclude -> pass_environment_exclude
+* RenderLayer.pass_indirect -> pass_indirect
+* RenderLayer.pass_indirect_exclude -> pass_indirect_exclude
+* RenderLayer.pass_mist -> pass_mist
+* RenderLayer.pass_normal -> pass_normal
+* RenderLayer.pass_object_index -> pass_object_index
+* RenderLayer.pass_reflection -> pass_reflection
+* RenderLayer.pass_reflection_exclude -> pass_reflection_exclude
+* RenderLayer.pass_refraction -> pass_refraction
+* RenderLayer.pass_refraction_exclude -> pass_refraction_exclude
+* RenderLayer.pass_shadow -> pass_shadow
+* RenderLayer.pass_shadow_exclude -> pass_shadow_exclude
+* RenderLayer.pass_specular -> pass_specular
+* RenderLayer.pass_specular_exclude -> pass_specular_exclude
+* RenderLayer.pass_uv -> pass_uv
+* RenderLayer.pass_vector -> pass_vector
+* RenderLayer.pass_z -> pass_z
+* RenderLayer.sky -> sky
+* RenderLayer.solid -> solid
+* RenderLayer.strand -> strand
+* RenderLayer.visible_layers -> visible_layers
+* RenderLayer.zmask -> zmask
+* RenderLayer.zmask_layers -> zmask_layers
+* RenderLayer.zmask_negate -> zmask_negate
+* RenderLayer.ztransp -> ztransp
+
+
+RenderSettings.backbuf -> use_backbuf
+RenderSettings.bake_active -> use_bake_active
+RenderSettings.bake_clear -> use_bake_clear
+RenderSettings.bake_enable_aa -> use_bake_enable_aa
+RenderSettings.bake_normalized -> use_bake_normalized
+RenderSettings.cineon_log -> use_cineon_log
+RenderSettings.color_management -> use_color_management
+RenderSettings.crop_to_border -> use_crop_to_border
+RenderSettings.edge -> edge
+RenderSettings.exr_half -> use_exr_half
+RenderSettings.exr_preview -> use_exr_preview
+RenderSettings.exr_zbuf -> use_exr_zbuf
+RenderSettings.ffmpeg_autosplit -> use_ffmpeg_autosplit
+RenderSettings.fields -> use_fields
+RenderSettings.fields_still -> use_fields_still
+RenderSettings.free_image_textures -> use_free_image_textures
+RenderSettings.free_unused_nodes -> use_free_unused_nodes
+RenderSettings.full_sample -> use_full_sample
+RenderSettings.is_movie_format -> is_movie_format
+RenderSettings.jpeg2k_ycc -> use_jpeg2k_ycc
+RenderSettings.motion_blur -> use_motion_blur
+* RenderSettings.multiple_engines -> multiple_engines
+RenderSettings.render_antialiasing -> use_render_antialiasing
+* doubled?* RenderSettings.render_stamp -> render_stamp
+RenderSettings.save_buffers -> use_save_buffers
+RenderSettings.simplify_triangulate -> use_simplify_triangulate
+RenderSettings.single_layer -> use_active_layer
+RenderSettings.stamp_camera -> use_stamp_camera
+RenderSettings.stamp_date -> use_stamp_date
+RenderSettings.stamp_filename -> use_stamp_filename
+RenderSettings.stamp_frame -> use_stamp_frame
+RenderSettings.stamp_marker -> use_stamp_marker
+RenderSettings.stamp_note -> use_stamp_note
+RenderSettings.stamp_render_time -> use_stamp_render_time
+RenderSettings.stamp_scene -> use_stamp_scene
+RenderSettings.stamp_sequencer_strip -> use_stamp_sequencer_strip
+RenderSettings.stamp_time -> use_stamp_time
+RenderSettings.tiff_bit -> use_tiff_bit
+RenderSettings.use_border -> use_border
+RenderSettings.use_compositing -> use_compositing
+RenderSettings.use_envmaps -> use_envmaps
+RenderSettings.use_file_extension -> use_file_extension
+RenderSettings.use_game_engine -> use_game_engine
+RenderSettings.use_instances -> use_instances
+RenderSettings.use_local_coords -> use_local_coords
+RenderSettings.use_overwrite -> use_overwrite
+RenderSettings.use_placeholder -> use_placeholder
+RenderSettings.use_radiosity -> use_radiosity
+RenderSettings.use_raytracing -> use_raytrace
+RenderSettings.use_sequencer -> use_sequencer
+RenderSettings.use_sequencer_gl_preview -> use_sequencer_gl_preview
+RenderSettings.use_sequencer_gl_render -> use_sequencer_gl_render
+RenderSettings.use_shadows -> use_shadows
+RenderSettings.use_simplify -> use_simplify
+RenderSettings.use_sss -> use_sss
+RenderSettings.use_textures -> use_textures
+
+
+RigidBodyJointConstraint.disable_linked_collision -> use_disable_linked_collision
+RigidBodyJointConstraint.draw_pivot -> show_pivot
+
+
+Scene.frame_drop -> use_frame_drop
+* Scene.layers -> layers
+* Scene.mute_audio -> mute_audio
+* Scene.nla_tweakmode_on -> is_nla_tweakmode_on
+Scene.pov_radio_always_sample -> use_pov_radio_always_sample
+Scene.pov_radio_display_advanced -> show_pov_radio_advanced
+Scene.pov_radio_enable -> use_pov_radio_enable
+Scene.pov_radio_media -> use_pov_radio_media
+Scene.pov_radio_normal -> use_pov_radio_normal
+Scene.scrub_audio -> use_scrub_audio
+Scene.sync_audio -> use_sync_audio
+Scene.use_gravity -> use_gravity
+Scene.use_nodes -> use_nodes
+Scene.use_preview_range -> use_preview_range
+
+
+SceneGameData.activity_culling -> use_activity_culling
+SceneGameData.auto_start -> use_auto_start
+SceneGameData.fullscreen -> show_fullscreen
+SceneGameData.glsl_extra_textures -> use_glsl_extra_textures
+SceneGameData.glsl_lights -> use_glsl_lights
+SceneGameData.glsl_nodes -> use_glsl_nodes
+SceneGameData.glsl_ramps -> use_glsl_ramps
+SceneGameData.glsl_shaders -> use_glsl_shaders
+SceneGameData.glsl_shadows -> use_glsl_shadows
+SceneGameData.show_debug_properties -> show_debug_properties
+SceneGameData.show_framerate_profile -> show_framerate_profile
+SceneGameData.show_physics_visualization -> show_physics_visualization
+SceneGameData.use_animation_record -> use_animation_record
+SceneGameData.use_deprecation_warnings -> use_deprecation_warnings
+SceneGameData.use_display_lists -> use_display_lists
+SceneGameData.use_frame_rate -> use_frame_rate
+SceneGameData.use_occlusion_culling -> use_occlusion_culling
+
+
+SceneRenderLayer.all_z -> use_all_z
+SceneRenderLayer.edge -> use_edge
+* SceneRenderLayer.enabled -> enabled
+SceneRenderLayer.halo -> use_halo
+SceneRenderLayer.pass_ao -> use_pass_ao
+SceneRenderLayer.pass_ao_exclude -> use_pass_ao_exclude
+SceneRenderLayer.pass_color -> use_pass_color
+SceneRenderLayer.pass_combined -> use_pass_combined
+SceneRenderLayer.pass_diffuse -> use_pass_diffuse
+SceneRenderLayer.pass_emit -> use_pass_emit
+SceneRenderLayer.pass_emit_exclude -> use_pass_emit_exclude
+SceneRenderLayer.pass_environment -> use_pass_environment
+SceneRenderLayer.pass_environment_exclude -> use_pass_environment_exclude
+SceneRenderLayer.pass_indirect -> use_pass_indirect
+SceneRenderLayer.pass_indirect_exclude -> use_pass_indirect_exclude
+SceneRenderLayer.pass_mist -> use_pass_mist
+SceneRenderLayer.pass_normal -> use_pass_normal
+SceneRenderLayer.pass_object_index -> use_pass_object_index
+SceneRenderLayer.pass_reflection -> use_pass_reflection
+SceneRenderLayer.pass_reflection_exclude -> use_pass_reflection_exclude
+SceneRenderLayer.pass_refraction -> use_pass_refraction
+SceneRenderLayer.pass_refraction_exclude -> use_pass_refraction_exclude
+SceneRenderLayer.pass_shadow -> use_pass_shadow
+SceneRenderLayer.pass_shadow_exclude -> use_pass_shadow_exclude
+SceneRenderLayer.pass_specular -> use_pass_specular
+SceneRenderLayer.pass_specular_exclude -> use_pass_specular_exclude
+SceneRenderLayer.pass_uv -> use_pass_uv
+SceneRenderLayer.pass_vector -> use_pass_vector
+SceneRenderLayer.pass_z -> use_pass_z
+SceneRenderLayer.sky -> use_sky
+SceneRenderLayer.solid -> use_solid
+SceneRenderLayer.strand -> use_strand
+SceneRenderLayer.visible_layers -> visible_layers
+SceneRenderLayer.zmask -> use_zmask
+SceneRenderLayer.zmask_layers -> use_zmask_layers
+SceneRenderLayer.zmask_negate -> use_zmask_negate
+SceneRenderLayer.ztransp -> use_ztransp
+
+
+* SceneSequence.convert_float -> convert_float
+* SceneSequence.de_interlace -> de_interlace
+* SceneSequence.flip_x -> flip_x
+* SceneSequence.flip_y -> flip_y
+* SceneSequence.premultiply -> premultiply
+* SceneSequence.proxy_custom_directory -> proxy_custom_directory
+* SceneSequence.proxy_custom_file -> proxy_custom_file
+* SceneSequence.reverse_frames -> reverse_frames
+* SceneSequence.use_color_balance -> use_color_balance
+* SceneSequence.use_crop -> use_crop
+* SceneSequence.use_proxy -> use_proxy
+* SceneSequence.use_translation -> use_translation
+
+
+Scopes.use_full_resolution -> use_full_resolution
+
+
+Screen.animation_playing -> is_animation_playing
+Screen.fullscreen -> is_fullscreen
+
+
+ScrewModifier.use_normal_calculate -> use_normal_calculate
+ScrewModifier.use_normal_flip -> use_normal_flip
+ScrewModifier.use_object_screw_offset -> use_object_screw_offset
+
+
+Sculpt.lock_x -> lock_x
+Sculpt.lock_y -> lock_y
+Sculpt.lock_z -> lock_z
+Sculpt.symmetry_x -> use_symmetry_x
+Sculpt.symmetry_y -> use_symmetry_y
+Sculpt.symmetry_z -> use_symmetry_z
+
+
+Sensor.expanded -> show_expanded
+* Sensor.invert -> invert
+* Sensor.level -> level
+Sensor.pulse_false_level -> use_pulse_false_level
+Sensor.pulse_true_level -> use_pulse_true_level
+Sensor.tap -> use_tap
+
+
+* Sequence.frame_locked -> frame_locked
+* Sequence.left_handle_selected -> select_left_handle
+* Sequence.lock -> lock
+* Sequence.mute -> mute
+* Sequence.right_handle_selected -> select_right_handle
+* Sequence.selected -> select
+* Sequence.use_effect_default_fade -> use_effect_default_fade
+
+
+SequenceColorBalance.inverse_gain -> invert_gain
+SequenceColorBalance.inverse_gamma -> invert_gamma
+SequenceColorBalance.inverse_lift -> invert_lift
+
+
+ShaderNodeExtendedMaterial.diffuse -> use_diffuse
+ShaderNodeExtendedMaterial.invert_normal -> invert_normal
+ShaderNodeExtendedMaterial.specular -> use_specular
+
+
+ShaderNodeMapping.clamp_maximum -> use_clamp_to_max
+ShaderNodeMapping.clamp_minimum -> use_clamp_to_min
+
+
+ShaderNodeMaterial.diffuse -> use_diffuse
+ShaderNodeMaterial.invert_normal -> invert_normal
+ShaderNodeMaterial.specular -> use_specular
+
+
+ShaderNodeMixRGB.alpha -> use_alpha
+
+
+ShapeActionActuator.continue_last_frame -> use_continue_last_frame
+
+
+* ShapeKey.mute -> mute
+
+
+* see below * ShrinkwrapConstraint.use_x -> use_x
+* see below* ShrinkwrapConstraint.use_y -> use_y
+* see below* ShrinkwrapConstraint.use_z -> use_z
+ShrinkwrapModifier.cull_back_faces -> use_cull_back_faces
+ShrinkwrapModifier.cull_front_faces -> use_cull_front_faces
+ShrinkwrapModifier.keep_above_surface -> use_keep_above_surface
+* ShrinkwrapModifier.negative -> negative
+* ShrinkwrapModifier.positive -> positive
+ShrinkwrapModifier.x -> use_x
+ShrinkwrapModifier.y -> use_y
+ShrinkwrapModifier.z -> use_z
+
+
+SimpleDeformModifier.lock_x_axis -> lock_axis_x
+SimpleDeformModifier.lock_y_axis -> lock_axis_y
+SimpleDeformModifier.relative -> use_relative
+
+
+SmokeDomainSettings.dissolve_smoke -> use_dissolve_smoke
+SmokeDomainSettings.dissolve_smoke_log -> use_dissolve_smoke_log
+SmokeDomainSettings.highres -> use_highres
+SmokeDomainSettings.initial_velocity -> use_initial_velocity
+SmokeDomainSettings.viewhighres -> show_highres
+
+
+*negate* SmokeFlowSettings.outflow -> use_outflow
+
+
+SmoothModifier.x -> use_x
+SmoothModifier.y -> use_y
+SmoothModifier.z -> use_z
+
+
+SoftBodySettings.auto_step -> use_auto_step
+SoftBodySettings.diagnose -> use_diagnose
+SoftBodySettings.edge_collision -> use_edge_collision
+SoftBodySettings.estimate_matrix -> use_estimate_matrix
+SoftBodySettings.face_collision -> use_face_collision
+SoftBodySettings.new_aero -> use_new_aero
+SoftBodySettings.self_collision -> use_self_collision
+SoftBodySettings.stiff_quads -> use_stiff_quads
+SoftBodySettings.use_edges -> use_edges
+SoftBodySettings.use_goal -> use_goal
+
+
+* SolidifyModifier.invert -> invert_vertex_groups_influence
+SolidifyModifier.use_even_offset -> use_even_offset
+SolidifyModifier.use_quality_normals -> use_quality_normals
+SolidifyModifier.use_rim -> use_rim
+SolidifyModifier.use_rim_material -> use_rim_material
+
+
+Sound.caching -> use_ram_cache
+
+
+SoundActuator.enable_sound_3d -> use_sound_3d
+
+
+SpaceConsole.show_report_debug -> show_report_debug
+SpaceConsole.show_report_error -> show_report_error
+SpaceConsole.show_report_info -> show_report_info
+SpaceConsole.show_report_operator -> show_report_operator
+SpaceConsole.show_report_warn -> show_report_warn
+
+
+SpaceDopeSheetEditor.automerge_keyframes -> show_automerge_keyframes
+SpaceDopeSheetEditor.realtime_updates -> use_realtime_updates
+SpaceDopeSheetEditor.show_cframe_indicator -> show_cframe_indicator
+SpaceDopeSheetEditor.show_seconds -> show_seconds
+SpaceDopeSheetEditor.show_sliders -> show_sliders
+SpaceDopeSheetEditor.use_marker_sync -> use_marker_sync
+
+
+SpaceGraphEditor.automerge_keyframes -> show_automerge_keyframes
+* SpaceGraphEditor.has_ghost_curves -> has_ghost_curves
+SpaceGraphEditor.only_selected_curves_handles -> use_only_selected_curves_handles
+SpaceGraphEditor.only_selected_keyframe_handles -> use_only_selected_keyframe_handles
+SpaceGraphEditor.realtime_updates -> use_realtime_updates
+SpaceGraphEditor.show_cframe_indicator -> show_cframe_indicator
+SpaceGraphEditor.show_cursor -> show_cursor
+SpaceGraphEditor.show_handles -> show_handles
+SpaceGraphEditor.show_seconds -> show_seconds
+SpaceGraphEditor.show_sliders -> show_sliders
+
+
+SpaceImageEditor.draw_repeated -> show_repeated
+SpaceImageEditor.image_painting -> use_image_paint
+SpaceImageEditor.image_pin -> show_image_pin
+SpaceImageEditor.show_paint -> show_paint
+SpaceImageEditor.show_render -> show_render
+SpaceImageEditor.show_uvedit -> show_uvedit
+SpaceImageEditor.update_automatically -> use_update_automatically
+SpaceImageEditor.use_grease_pencil -> use_grease_pencil
+
+
+SpaceLogicEditor.actuators_show_active_objects -> show_actuators_active_objects
+SpaceLogicEditor.actuators_show_active_states -> show_actuators_active_states
+SpaceLogicEditor.actuators_show_linked_controller -> show_actuators_linked_controller
+SpaceLogicEditor.actuators_show_selected_objects -> show_actuators_selected_objects
+SpaceLogicEditor.controllers_show_active_objects -> show_controllers_active_objects
+SpaceLogicEditor.controllers_show_linked_controller -> show_controllers_linked_controller
+SpaceLogicEditor.controllers_show_selected_objects -> show_controllers_selected_objects
+SpaceLogicEditor.sensors_show_active_objects -> show_sensors_active_objects
+SpaceLogicEditor.sensors_show_active_states -> show_sensors_active_states
+SpaceLogicEditor.sensors_show_linked_controller -> show_sensors_linked_controller
+SpaceLogicEditor.sensors_show_selected_objects -> show_sensors_selected_objects
+
+
+SpaceNLA.realtime_updates -> use_realtime_updates
+SpaceNLA.show_cframe_indicator -> show_cframe_indicator
+SpaceNLA.show_seconds -> show_seconds
+SpaceNLA.show_strip_curves -> show_strip_curves
+
+
+SpaceNodeEditor.backdrop -> show_backdrop
+
+
+SpaceOutliner.match_case_sensitive -> use_match_case_sensitive
+SpaceOutliner.match_complete -> use_match_complete
+SpaceOutliner.show_restriction_columns -> show_restriction_columns
+
+
+SpaceProperties.brush_texture -> show_brush_texture
+SpaceProperties.use_pin_id -> use_pin_id
+
+
+* SpaceSequenceEditor.draw_frames -> draw_frames
+* SpaceSequenceEditor.draw_safe_margin -> draw_safe_margin
+* SpaceSequenceEditor.separate_color_preview -> separate_color_preview
+* SpaceSequenceEditor.show_cframe_indicator -> show_cframe_indicator
+* SpaceSequenceEditor.use_grease_pencil -> use_grease_pencil
+* SpaceSequenceEditor.use_marker_sync -> use_marker_sync
+
+
+SpaceTextEditor.find_all -> use_find_all
+SpaceTextEditor.find_wrap -> use_find_wrap
+SpaceTextEditor.line_numbers -> show_line_numbers
+SpaceTextEditor.live_edit -> use_live_edit
+SpaceTextEditor.overwrite -> use_overwrite
+SpaceTextEditor.syntax_highlight -> use_syntax_highlight
+SpaceTextEditor.word_wrap -> use_word_wrap
+
+
+SpaceTimeline.only_selected -> use_only_selected
+SpaceTimeline.play_all_3d -> use_play_all_3d
+SpaceTimeline.play_anim -> use_play_anim
+SpaceTimeline.play_buttons -> use_play_buttons
+SpaceTimeline.play_image -> use_play_image
+SpaceTimeline.play_nodes -> use_play_nodes
+SpaceTimeline.play_sequencer -> use_play_sequencer
+SpaceTimeline.play_top_left -> use_play_top_left
+SpaceTimeline.show_cframe_indicator -> show_cframe_indicator
+
+
+SpaceUVEditor.constrain_to_image_bounds -> use_constrain_to_image_bounds
+SpaceUVEditor.draw_modified_edges -> show_modified_edges
+SpaceUVEditor.draw_other_objects -> show_other_objects
+SpaceUVEditor.draw_smooth_edges -> show_smooth_edges
+SpaceUVEditor.draw_stretch -> show_stretch
+SpaceUVEditor.live_unwrap -> use_live_unwrap
+SpaceUVEditor.normalized_coordinates -> show_normalized_coordinates
+SpaceUVEditor.snap_to_pixels -> use_snap_to_pixels
+
+
+SpaceView3D.all_object_origins -> show_all_objects_origin
+SpaceView3D.display_background_images -> show_background_images
+SpaceView3D.display_floor -> show_floor
+SpaceView3D.display_render_override -> show_render_override
+SpaceView3D.display_x_axis -> show_axis_x
+SpaceView3D.display_y_axis -> show_axis_y
+SpaceView3D.display_z_axis -> show_axis_z
+* SpaceView3D.layers -> layers
+SpaceView3D.lock_camera_and_layers -> lock_camera_and_layers
+SpaceView3D.manipulator -> use_manipulator
+SpaceView3D.manipulator_rotate -> use_manipulator_rotate
+SpaceView3D.manipulator_scale -> use_manipulator_scale
+SpaceView3D.manipulator_translate -> use_manipulator_translate
+SpaceView3D.occlude_geometry -> use_occlude_geometry
+SpaceView3D.outline_selected -> show_outline_selected
+SpaceView3D.pivot_point_align -> use_pivot_point_align
+SpaceView3D.relationship_lines -> show_relationship_lines
+SpaceView3D.textured_solid -> show_textured_solid
+* SpaceView3D.used_layers -> layers_used
+
+
+SpeedControlSequence.curve_compress_y -> use_curve_compress_y
+SpeedControlSequence.curve_velocity -> use_curve_velocity
+SpeedControlSequence.frame_blending -> use_frame_blend
+
+
+Spline.bezier_u -> use_bezier_u
+Spline.bezier_v -> use_bezier_v
+Spline.cyclic_u -> use_cyclic_u
+Spline.cyclic_v -> use_cyclic_v
+Spline.endpoint_u -> use_endpoint_u
+Spline.endpoint_v -> use_endpoint_v
+* Spline.hide -> hide
+Spline.smooth -> use_smooth
+
+
+
+
+
+
+SplineIKConstraint.chain_offset -> use_chain_offset
+* SplineIKConstraint.even_divisions -> use_even_divisions
+SplineIKConstraint.use_curve_radius -> use_curve_radius
+SplineIKConstraint.y_stretch -> use_y_stretch
+
+
+* SplinePoint.hidden -> hide
+* SplinePoint.selected -> select
+
+
+SpotLamp.auto_clip_end -> use_auto_clip_end
+SpotLamp.auto_clip_start -> use_auto_clip_start
+SpotLamp.halo -> use_halo
+SpotLamp.only_shadow -> use_shadow_only
+SpotLamp.shadow_layer -> use_shadow_own_layer
+SpotLamp.show_cone -> show_cone
+SpotLamp.sphere -> use_sphere
+SpotLamp.square -> use_square
+
+
+* StateActuator.state -> state
+
+
+SubsurfModifier.optimal_display -> show_optimal
+SubsurfModifier.subsurf_uv -> use_subsurf_uv
+
+
+SunLamp.only_shadow -> use_shadow_only
+SunLamp.shadow_layer -> use_shadow_own_layer
+
+
+SurfaceCurve.map_along_length -> use_map_along_length
+SurfaceCurve.vertex_normal_flip -> use_vertex_normal_flip
+
+
+TexMapping.has_maximum -> use_clip_to_max
+TexMapping.has_minimum -> use_clip_to_min
+
+
+Text.dirty -> is_dirty
+Text.memory -> is_in_memory
+Text.modified -> is_modified
+Text.tabs_as_spaces -> use_tabs_as_spaces
+Text.use_module -> use_module
+
+
+TextCharacterFormat.bold -> use_bold
+TextCharacterFormat.italic -> use_italic
+TextCharacterFormat.style -> use_style
+TextCharacterFormat.underline -> use_underline
+TextCharacterFormat.wrap -> use_wrap
+
+
+TextCurve.fast -> use_fast_editing
+TextCurve.map_along_length -> use_map_along_length
+TextCurve.vertex_normal_flip -> use_vertex_normal_flip
+
+
+TextMarker.edit_all -> use_edit_all
+* TextMarker.temporary -> is_temporary
+
+
+Texture.use_color_ramp -> use_color_ramp
+Texture.use_nodes -> use_nodes
+Texture.use_preview_alpha -> use_preview_alpha
+TextureNodeMixRGB.alpha -> use_alpha
+TextureSlot.negate -> use_negate
+TextureSlot.rgb_to_intensity -> use_rgb_to_intensity
+TextureSlot.stencil -> use_stencil
+
+
+ThemeBoneColorSet.colored_constraints -> show_colored_constraints
+ThemeWidgetColors.shaded -> show_shaded
+
+
+* TimelineMarker.selected -> select
+
+
+ToolSettings.auto_normalize -> use_auto_normalize
+ToolSettings.automerge_editing -> use_automerge_editing
+ToolSettings.bone_sketching -> use_bone_sketching
+ToolSettings.etch_autoname -> use_etch_autoname
+ToolSettings.etch_overdraw -> use_etch_overdraw
+ToolSettings.etch_quick -> use_etch_quick
+ToolSettings.mesh_selection_mode -> use_mesh_selection_mode
+ToolSettings.record_with_nla -> use_record_with_nla
+ToolSettings.snap -> use_snap
+ToolSettings.snap_align_rotation -> use_snap_align_rotation
+ToolSettings.snap_peel_object -> use_snap_peel_object
+ToolSettings.snap_project -> use_snap_project
+ToolSettings.use_auto_keying -> use_keyframe_insert_auto
+* ToolSettings.uv_local_view -> show_only_uv_local_view
+ToolSettings.uv_sync_selection -> use_uv_sync_selection
+
+
+TrackToConstraint.target_z -> use_target_z
+
+
+TransformConstraint.extrapolate_motion -> use_motion_extrapolate
+TransformSequence.uniform_scale -> use_uniform_scale
+
+
+UILayout.active -> active
+UILayout.enabled -> enabled
+
+
+UVProjectModifier.override_image -> show_override_image
+
+
+UnitSettings.use_separate -> use_separate
+
+
+UserPreferencesEdit.auto_keyframe_insert_available -> use_keyframe_insert_auto_available
+UserPreferencesEdit.auto_keyframe_insert_keyingset -> use_keyframe_insert_auto_keyingset
+UserPreferencesEdit.drag_immediately -> use_drag_immediately
+UserPreferencesEdit.duplicate_action -> use_duplicate_action
+UserPreferencesEdit.duplicate_armature -> use_duplicate_armature
+UserPreferencesEdit.duplicate_curve -> use_duplicate_curve
+UserPreferencesEdit.duplicate_fcurve -> use_duplicate_fcurve
+UserPreferencesEdit.duplicate_lamp -> use_duplicate_lamp
+UserPreferencesEdit.duplicate_material -> use_duplicate_material
+UserPreferencesEdit.duplicate_mesh -> use_duplicate_mesh
+UserPreferencesEdit.duplicate_metaball -> use_duplicate_metaball
+UserPreferencesEdit.duplicate_particle -> use_duplicate_particle
+UserPreferencesEdit.duplicate_surface -> use_duplicate_surface
+UserPreferencesEdit.duplicate_text -> use_duplicate_text
+UserPreferencesEdit.duplicate_texture -> use_duplicate_texture
+UserPreferencesEdit.enter_edit_mode -> use_enter_edit_mode
+UserPreferencesEdit.global_undo -> use_global_undo
+UserPreferencesEdit.grease_pencil_simplify_stroke -> use_grease_pencil_simplify_stroke
+UserPreferencesEdit.grease_pencil_smooth_stroke -> use_grease_pencil_smooth_stroke
+UserPreferencesEdit.insertkey_xyz_to_rgb -> show_insertkey_xyz_to_rgb
+UserPreferencesEdit.keyframe_insert_needed -> use_keyframe_insert_needed
+UserPreferencesEdit.snap_rotate -> use_snap_grid_rotate
+UserPreferencesEdit.snap_scale -> use_snap_grid_scale
+UserPreferencesEdit.snap_translate -> use_snap_grid_translate
+UserPreferencesEdit.use_auto_keying -> use_auto_keying
+UserPreferencesEdit.use_negative_frames -> use_negative_frames
+UserPreferencesEdit.use_visual_keying -> show_visual_keying
+
+
+
+
+
+
+UserPreferencesFilePaths.auto_save_temporary_files -> use_auto_save_temporary_files
+UserPreferencesFilePaths.compress_file -> use_file_compression
+UserPreferencesFilePaths.filter_file_extensions -> show_only_file_extensions
+UserPreferencesFilePaths.hide_dot_files_datablocks -> show_dot_files_datablocks
+UserPreferencesFilePaths.load_ui -> use_load_ui
+UserPreferencesFilePaths.save_preview_images -> use_save_preview_images
+UserPreferencesFilePaths.use_relative_paths -> use_relative_paths
+
+
+UserPreferencesInput.continuous_mouse -> use_continuous_mouse
+UserPreferencesInput.emulate_3_button_mouse -> use_emulate_3_button_mouse
+UserPreferencesInput.emulate_numpad -> use_emulate_numpad
+UserPreferencesInput.invert_zoom_direction -> invert_zoom
+
+
+UserPreferencesSystem.auto_execute_scripts -> use_scripts_auto_execute
+UserPreferencesSystem.enable_all_codecs -> use_preview_images
+UserPreferencesSystem.international_fonts -> use_fonts_international
+UserPreferencesSystem.tabs_as_spaces -> use_tabs_as_spaces
+UserPreferencesSystem.translate_buttons -> show_translate_buttons
+UserPreferencesSystem.translate_toolbox -> show_translate_toolbox
+UserPreferencesSystem.translate_tooltips -> show_translate_tooltips
+UserPreferencesSystem.use_antialiasing -> show_antialiasing
+UserPreferencesSystem.use_mipmaps -> use_mipmaps
+UserPreferencesSystem.use_textured_fonts -> show_fonts_textured
+UserPreferencesSystem.use_vbos -> use_vertex_buffer_objects
+UserPreferencesSystem.use_weight_color_range -> show_weight_color_range
+
+
+UserPreferencesView.auto_depth -> use_mouse_auto_depth
+UserPreferencesView.auto_perspective -> show_auto_perspective
+UserPreferencesView.directional_menus -> show_directional_menus
+UserPreferencesView.display_object_info -> show_object_info
+UserPreferencesView.global_pivot -> show_global_pivot
+UserPreferencesView.global_scene -> show_global_scene
+UserPreferencesView.open_mouse_over -> use_mouse_over_open
+UserPreferencesView.pin_floating_panels -> show_pin_floating_panels
+UserPreferencesView.rotate_around_selection -> use_rotate_around_selection
+UserPreferencesView.show_mini_axis -> show_mini_axis
+UserPreferencesView.show_playback_fps -> show_playback_fps
+UserPreferencesView.show_splash -> show_splash
+UserPreferencesView.show_view_name -> show_view_name
+UserPreferencesView.tooltips -> use_tooltips
+UserPreferencesView.use_column_layout -> show_column_layout
+UserPreferencesView.use_large_cursors -> show_large_cursors
+UserPreferencesView.use_manipulator -> show_manipulator
+UserPreferencesView.use_middle_mouse_paste -> use_mouse_mmb_paste
+UserPreferencesView.wheel_invert_zoom -> invert_mouse_wheel_zoom
+UserPreferencesView.zoom_to_mouse -> use_zoom_ato_mouse
+
+
+* UserSolidLight.enabled -> use
+
+
+VertexPaint.all_faces -> use_all_faces
+VertexPaint.normals -> use_normals
+VertexPaint.spray -> use_spray
+
+
+VisibilityActuator.children -> show_occluded_children
+VisibilityActuator.occlusion -> show_occluded
+VisibilityActuator.visible -> show
+
+
+VoxelData.still -> use_still
+
+
+WaveModifier.cyclic -> use_cyclic
+WaveModifier.normals -> show_normals
+WaveModifier.x -> use_x
+WaveModifier.x_normal -> use_normal_x
+WaveModifier.y -> use_y
+WaveModifier.y_normal -> use_normal_y
+WaveModifier.z_normal -> use_normal_z
+
+
+World.blend_sky -> use_sky_blend
+World.paper_sky -> use_sky_paper
+World.real_sky -> use_sky_real
+WorldLighting.falloff -> use_falloff
+WorldLighting.pixel_cache -> use_ao_pixel_cache
+WorldLighting.use_ambient_occlusion -> use_ao
+WorldLighting.use_environment_lighting -> use_environment_lighting
+WorldLighting.use_indirect_lighting -> use_indirect_lighting
+WorldMistSettings.use_mist -> use_mist
+WorldStarsSettings.use_stars -> use_stars
+WorldTextureSlot.map_blend -> use_map_blend
+WorldTextureSlot.map_horizon -> use_map_horizon
+WorldTextureSlot.map_zenith_down -> use_map_zenith_down
+WorldTextureSlot.map_zenith_up -> use_map_zenith_up
diff --git a/source/blender/makesrna/rna_cleanup/rna_booleans.txt b/source/blender/makesrna/rna_cleanup/rna_booleans.txt
new file mode 100644
index 00000000000..81530b5764e
--- /dev/null
+++ b/source/blender/makesrna/rna_cleanup/rna_booleans.txt
@@ -0,0 +1,1387 @@
+ActionActuator.continue_last_frame -> continue_last_frame: boolean Restore last frame when switching on/off, otherwise play from the start each time
+ActionGroup.expanded -> show_expanded: boolean Action Group is expanded
+ActionGroup.locked -> use_lock: boolean Action Group is locked
+ActionGroup.selected -> selected: boolean Action Group is selected
+Actuator.expanded -> show_expanded: boolean Set actuator expanded in the user interface
+AnimData.nla_enabled -> use_nla: boolean NLA stack is evaluated when evaluating this block
+AnimVizMotionPaths.highlight_keyframes -> show_keyframe_highlight: boolean Emphasize position of keyframes on Motion Paths
+AnimVizMotionPaths.search_all_action_keyframes -> use_keyframe_action_all: boolean For bone motion paths, search whole Action for keyframes instead of in group with matching name only (is slower)
+AnimVizMotionPaths.show_frame_numbers -> show_frame_numbers: boolean Show frame numbers on Motion Paths
+AnimVizMotionPaths.show_keyframe_numbers -> show_keyframe_numbers: boolean Show frame numbers of Keyframes on Motion Paths
+AnimVizOnionSkinning.only_selected -> showonly_selected: boolean For Pose-Mode drawing, only draw ghosts for selected bones
+Area.show_menus -> show_menus: boolean Show menus in the header
+AreaLamp.dither -> use_dither: boolean Use 2x2 dithering for sampling (Constant Jittered sampling)
+AreaLamp.jitter -> use_jitter: boolean Use noise for sampling (Constant Jittered sampling)
+AreaLamp.only_shadow -> useonly_shadow: boolean Causes light to cast shadows only without illuminating objects
+AreaLamp.shadow_layer -> useonly_shadow_layer: boolean Causes only objects on the same layer to cast shadows
+AreaLamp.umbra -> use_umbra: boolean Emphasize parts that are fully shadowed (Constant Jittered sampling)
+Armature.auto_ik -> use_auto_ik: boolean Add temporaral IK constraints while grabbing bones in Pose Mode
+Armature.deform_bbone_rest -> use_deform_b_bone_rest: boolean Make B-Bones deform already in Rest Position
+Armature.deform_envelope -> use_deform_envelope: boolean Enable Bone Envelopes when defining deform
+Armature.deform_quaternion -> use_deform_quaternion: boolean Enable deform rotation with Quaternions
+Armature.deform_vertexgroups -> use_deform_vertexgroups: boolean Enable Vertex Groups when defining deform
+Armature.delay_deform -> use_deform_delay: boolean Don't deform children when manipulating bones in Pose Mode
+Armature.draw_axes -> show_axes: boolean Draw bone axes
+Armature.draw_custom_bone_shapes -> show_bone_custom: boolean Draw bones with their custom shapes
+Armature.draw_group_colors -> show_group_colors: boolean Draw bone group colors
+Armature.draw_names -> show_names: boolean Draw bone names
+Armature.ghost_only_selected -> showonly_ghost_selected: boolean
+Armature.layer -> layer: boolean Armature layer visibility
+Armature.layer_protection -> layer_protection: boolean Protected layers in Proxy Instances are restored to Proxy settings on file reload and undo
+Armature.x_axis_mirror -> use_mirror_x: boolean Apply changes to matching bone on opposite side of X-Axis
+ArmatureModifier.b_bone_rest -> use_b_bone_rest: boolean Make B-Bones deform already in rest position
+ArmatureModifier.invert -> use_vertex_group_invert: boolean Invert vertex group influence
+ArmatureModifier.multi_modifier -> use_multi_modifier: boolean Use same input as previous modifier, and mix results using overall vgroup
+ArmatureModifier.quaternion -> use_preserve_volume: boolean Deform rotation interpolation with quaternions
+ArmatureModifier.use_bone_envelopes -> use_bone_envelopes: boolean
+ArmatureModifier.use_vertex_groups -> use_vertex_groups: boolean
+ArrayModifier.add_offset_object -> use_object_offset: boolean Add another object's transformation to the total offset
+ArrayModifier.constant_offset -> use_constant_offset: boolean Add a constant offset
+ArrayModifier.merge_adjacent_vertices -> use_merge_vertex: boolean Merge vertices in adjacent duplicates
+ArrayModifier.merge_end_vertices -> use_merge_vertex_end: boolean Merge vertices in first and last duplicates
+ArrayModifier.relative_offset -> use_relative_offset: boolean Add an offset relative to the object's bounding box
+BackgroundImage.show_expanded -> show_expanded: boolean Show the expanded in the user interface
+BevelModifier.only_vertices -> useonly_vertex: boolean Bevel verts/corners, not edges
+BezierSplinePoint.hidden -> hidden: boolean Visibility status
+BezierSplinePoint.selected_control_point -> selected_control_point: boolean Control point selection status
+BezierSplinePoint.selected_handle1 -> selected_handle1: boolean Handle 1 selection status
+BezierSplinePoint.selected_handle2 -> selected_handle2: boolean Handle 2 selection status
+BoidRule.in_air -> use_air: boolean Use rule when boid is flying
+BoidRule.on_land -> use_land: boolean Use rule when boid is on land
+BoidRuleAvoid.predict -> use_predict: boolean Predict target movement
+BoidRuleAvoidCollision.boids -> use_avoid: boolean Avoid collision with other boids
+BoidRuleAvoidCollision.deflectors -> use_deflect: boolean Avoid collision with deflector objects
+BoidRuleFollowLeader.line -> use_line: boolean Follow leader in a line
+BoidRuleGoal.predict -> use_predict: boolean Predict target movement
+BoidSettings.allow_climb -> use_climb: boolean Allow boids to climb goal objects
+BoidSettings.allow_flight -> use_flight: boolean Allow boids to move in air
+BoidSettings.allow_land -> use_land: boolean Allow boids to move on land
+Bone.connected -> is_connected: boolean, (read-only) When bone has a parent, bone's head is struck to the parent's tail
+Bone.cyclic_offset -> use_cyclic_offset: boolean When bone doesn't have a parent, it receives cyclic offset effects
+Bone.deform -> use_deform: boolean Bone does not deform any geometry
+Bone.draw_wire -> show_wire: boolean Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes
+Bone.hidden -> hidden: boolean Bone is not visible when it is not in Edit Mode (i.e. in Object or Pose Modes)
+Bone.hinge -> use_hinge: boolean Bone inherits rotation or scale from parent bone
+Bone.inherit_scale -> use_inherit_scale: boolean Bone inherits scaling from parent bone
+Bone.layer -> layer: boolean Layers bone exists in
+Bone.local_location -> use_local_location: boolean Bone location is set in local space
+Bone.multiply_vertexgroup_with_envelope -> use_envelope_multiply: boolean When deforming bone, multiply effects of Vertex Group weights with Envelope influence
+TODO * Bone.restrict_select -> restrict_select: boolean Bone is able to be selected
+Bone.selected -> selected: boolean
+BooleanProperty.default -> default: boolean, (read-only) Default value for this number
+BooleanProperty.default_array -> default_array: boolean, (read-only) Default value for this array
+Brush.use_accumulate -> use_accumulate: boolean Accumulate stroke dabs on top of each other
+Brush.use_airbrush -> use_airbrush: boolean Keep applying paint effect while holding mouse (spray)
+Brush.use_alpha -> use_alpha: boolean When this is disabled, lock alpha while painting
+Brush.use_anchor -> use_anchor: boolean Keep the brush anchored to the initial location
+Brush.use_jitter_pressure -> use_jitter_pressure: boolean Enable tablet pressure sensitivity for jitter
+Brush.use_persistent -> use_persistent: boolean Sculpts on a persistent layer of the mesh
+Brush.use_rake -> use_rake: boolean Rotate the brush texture to match the stroke direction
+Brush.use_size_pressure -> use_size_pressure: boolean Enable tablet pressure sensitivity for size
+Brush.use_smooth_stroke -> use_smooth_stroke: boolean Brush lags behind mouse and follows a smoother path
+Brush.use_space -> use_space: boolean Limit brush application to the distance specified by spacing
+Brush.use_spacing_pressure -> use_spacing_pressure: boolean Enable tablet pressure sensitivity for spacing
+Brush.use_strength_pressure -> use_strength_pressure: boolean Enable tablet pressure sensitivity for strength
+Brush.use_wrap -> use_wrap: boolean Enable torus wrapping while painting
+BuildModifier.randomize -> use_random: boolean Randomize the faces or edges during build
+Camera.panorama -> use_panorama: boolean Render the scene with a cylindrical camera for pseudo-fisheye lens effects
+Camera.show_limits -> show_limits: boolean Draw the clipping range and focus point on the camera
+Camera.show_mist -> show_mist: boolean Draw a line from the Camera to indicate the mist area
+Camera.show_name -> show_name: boolean Show the active Camera's name in Camera view
+Camera.show_passepartout -> show_passepartout: boolean Show a darkened overlay outside the image area in Camera view
+Camera.show_title_safe -> show_title_safe: boolean Show indicators for the title safe zone in Camera view
+CastModifier.from_radius -> use_radius_as_size: boolean Use radius as size of projection shape (0 = auto)
+CastModifier.use_transform -> use_transform: boolean Use object transform to control projection shape
+CastModifier.x -> use_x: boolean
+CastModifier.y -> use_y: boolean
+CastModifier.z -> use_z: boolean
+ChildOfConstraint.use_location_x -> use_location_x: boolean Use X Location of Parent
+ChildOfConstraint.use_location_y -> use_location_y: boolean Use Y Location of Parent
+ChildOfConstraint.use_location_z -> use_location_z: boolean Use Z Location of Parent
+ChildOfConstraint.use_rotation_x -> use_rotation_x: boolean Use X Rotation of Parent
+ChildOfConstraint.use_rotation_y -> use_rotation_y: boolean Use Y Rotation of Parent
+ChildOfConstraint.use_rotation_z -> use_rotation_z: boolean Use Z Rotation of Parent
+ChildOfConstraint.use_scale_x -> use_scale_x: boolean Use X Scale of Parent
+ChildOfConstraint.use_scale_y -> use_scale_y: boolean Use Y Scale of Parent
+ChildOfConstraint.use_scale_z -> use_scale_z: boolean Use Z Scale of Parent
+ClampToConstraint.cyclic -> use_cyclic: boolean Treat curve as cyclic curve (no clamping to curve bounding box
+ClothCollisionSettings.enable_collision -> use_collision: boolean Enable collisions with other objects
+ClothCollisionSettings.enable_self_collision -> use_self_collision: boolean Enable self collisions
+ClothSettings.pin_cloth -> use_pin_cloth: boolean Enable pinning of cloth vertices to other objects/positions
+ClothSettings.stiffness_scaling -> use_stiffness_scaling: boolean If enabled, stiffness can be scaled along a weight painted vertex group
+TODO * CollisionSensor.collision_type -> collision_type: boolean Toggle collision on material or property
+CollisionSensor.pulse -> use_pulse: boolean Changes to the set of colliding objects generates pulse
+CollisionSettings.enabled -> use_collision: boolean Enable this objects as a collider for physics systems
+CollisionSettings.kill_particles -> use_particle_kill: boolean Kill collided particles
+CompositorNodeAlphaOver.convert_premul -> use_convert_premultiply: boolean
+CompositorNodeBlur.bokeh -> use_bokeh: boolean
+CompositorNodeBlur.gamma -> use_gamma: boolean
+CompositorNodeBlur.relative -> use_relative: boolean
+CompositorNodeColorSpill.unspill -> use_unspill: boolean Compensate all channels (diffenrently) by hand
+CompositorNodeCrop.crop_size -> use_crop_size: boolean Whether to crop the size of the input image
+CompositorNodeDBlur.wrap -> use_wrap: boolean
+CompositorNodeDefocus.gamma_correction -> use_gamma_correct: boolean Enable gamma correction before and after main process
+CompositorNodeDefocus.preview -> use_preview: boolean Enable sampling mode, useful for preview when using low samplecounts
+CompositorNodeDefocus.use_zbuffer -> use_zbuffer: boolean Disable when using an image as input instead of actual zbuffer (auto enabled if node not image based, eg. time node)
+CompositorNodeGlare.rotate_45 -> use_rotate_45: boolean Simple star filter: add 45 degree rotation offset
+CompositorNodeImage.auto_refresh -> use_auto_refresh: boolean
+CompositorNodeImage.cyclic -> use_cyclic: boolean
+CompositorNodeInvert.alpha -> use_alpha: boolean
+CompositorNodeInvert.rgb -> use_rgb: boolean
+CompositorNodeLensdist.fit -> use_fit: boolean For positive distortion factor only: scale image such that black areas are not visible
+CompositorNodeLensdist.jitter -> use_jitter: boolean Enable/disable jittering; faster, but also noisier
+CompositorNodeLensdist.projector -> use_projector: boolean Enable/disable projector mode. Effect is applied in horizontal direction only
+CompositorNodeMapValue.use_max -> use_max: boolean
+CompositorNodeMapValue.use_min -> use_min: boolean
+CompositorNodeMixRGB.alpha -> use_alpha: boolean Include alpha of second input in this operation
+CompositorNodeOutputFile.exr_half -> use_exr_half: boolean
+CompositorNodeVecBlur.curved -> use_curve: boolean Interpolate between frames in a bezier curve, rather than linearly
+TODO * Constraint.active -> active: boolean Constraint is the one being edited
+Constraint.disabled -> is_valid: boolean, (read-only) Constraint has invalid settings and will not be evaluated
+Constraint.expanded -> show_expanded: boolean Constraint's panel is expanded in UI
+Constraint.proxy_local -> proxy_local: boolean Constraint was added in this proxy instance (i.e. did not belong to source Armature)
+ConstraintActuator.detect_material -> use_material_detect: boolean Detect material instead of property
+ConstraintActuator.fh_normal -> use_fh_normal: boolean Add a horizontal spring force on slopes
+ConstraintActuator.fh_paralel_axis -> use_fh_paralel_axis: boolean Keep object axis parallel to normal
+ConstraintActuator.force_distance -> use_force_distance: boolean Force distance of object to point of impact of ray
+ConstraintActuator.local -> use_local: boolean Set ray along object's axis or global axis
+ConstraintActuator.normal -> use_normal: boolean Set object axis along (local axis) or parallel (global axis) to the normal at hit position
+ConstraintActuator.persistent -> use_persistent: boolean Persistent actuator: stays active even if ray does not reach target
+ControlFluidSettings.active -> active: boolean Object contributes to the fluid simulation
+ControlFluidSettings.reverse_frames -> use_frame_reverse: boolean Reverse control object movement
+Controller.expanded -> show_expanded: boolean Set controller expanded in the user interface
+Controller.priority -> use_priority: boolean Mark controller for execution before all non-marked controllers (good for startup scripts)
+Controller.state -> state: boolean, (read-only) Set Controller state index (1 to 30)
+CopyLocationConstraint.invert_x -> invert_x: boolean Invert the X location
+CopyLocationConstraint.invert_y -> invert_y: boolean Invert the Y location
+CopyLocationConstraint.invert_z -> invert_z: boolean Invert the Z location
+CopyLocationConstraint.use_offset -> use_offset: boolean Add original location into copied location
+CopyLocationConstraint.use_x -> use_x: boolean Copy the target's X location
+CopyLocationConstraint.use_y -> use_y: boolean Copy the target's Y location
+CopyLocationConstraint.use_z -> use_z: boolean Copy the target's Z location
+CopyRotationConstraint.invert_x -> invert_x: boolean Invert the X rotation
+CopyRotationConstraint.invert_y -> invert_y: boolean Invert the Y rotation
+CopyRotationConstraint.invert_z -> invert_z: boolean Invert the Z rotation
+CopyRotationConstraint.use_offset -> use_offset: boolean Add original rotation into copied rotation
+CopyRotationConstraint.use_x -> use_x: boolean Copy the target's X rotation
+CopyRotationConstraint.use_y -> use_y: boolean Copy the target's Y rotation
+CopyRotationConstraint.use_z -> use_z: boolean Copy the target's Z rotation
+CopyScaleConstraint.use_offset -> use_offset: boolean Add original scale into copied scale
+CopyScaleConstraint.use_x -> use_x: boolean Copy the target's X scale
+CopyScaleConstraint.use_y -> use_y: boolean Copy the target's Y scale
+CopyScaleConstraint.use_z -> use_z: boolean Copy the target's Z scale
+Curve.auto_texspace -> use_auto_texspace: boolean Adjusts active object's texture space automatically when transforming object
+Curve.back -> use_fill_back: boolean Draw filled back for extruded/beveled curves
+Curve.draw_handles -> show_handles: boolean Display bezier handles in editmode
+Curve.draw_normals -> show_normals: boolean Display 3D curve normals in editmode
+Curve.front -> use_fill_front: boolean Draw filled front for extruded/beveled curves
+Curve.map_along_length -> use_texture_map_length: boolean Generate texture mapping coordinates following the curve direction, rather than the local bounding box
+Curve.use_deform_fill -> use_fill_deform: boolean Fill curve after applying deformation
+Curve.use_path -> use_path: boolean Enable the curve to become a translation path
+Curve.use_path_follow -> use_path_follow: boolean Make curve path children to rotate along the path
+Curve.use_radius -> use_radius: boolean Option for paths: apply the curve radius with path following it and deforming
+Curve.use_stretch -> use_stretch: boolean Option for curve-deform: makes deformed child to stretch along entire path
+Curve.use_time_offset -> use_time_offset: boolean Children will use TimeOffs value as path distance offset
+CurveMapPoint.selected -> selected: boolean Selection state of the curve point
+CurveMapping.clip -> use_clip: boolean Force the curve view to fit a defined boundary
+DelaySensor.repeat -> use_repeat: boolean Toggle repeat option. If selected, the sensor restarts after Delay+Dur logic tics
+DomainFluidSettings.generate_speed_vectors -> use_speed_vectors: boolean Generate speed vectors for vector blur
+DomainFluidSettings.override_time -> use_time_override: boolean Use a custom start and end time (in seconds) instead of the scene's timeline
+DomainFluidSettings.reverse_frames -> use_frame_reverse: boolean Reverse fluid frames
+NEGATE * DopeSheet.collapse_summary -> show_expanded_summary: boolean Collapse summary when shown, so all other channels get hidden. (DopeSheet Editors Only)
+DopeSheet.display_armature -> show_armature: boolean Include visualization of Armature related Animation data
+DopeSheet.display_camera -> show_camera: boolean Include visualization of Camera related Animation data
+DopeSheet.display_curve -> show_curve: boolean Include visualization of Curve related Animation data
+DopeSheet.display_lamp -> show_lamp: boolean Include visualization of Lamp related Animation data
+DopeSheet.display_material -> show_material: boolean Include visualization of Material related Animation data
+DopeSheet.display_mesh -> show_mesh: boolean Include visualization of Mesh related Animation data
+DopeSheet.display_metaball -> show_metaball: boolean Include visualization of Metaball related Animation data
+DopeSheet.display_node -> show_node: boolean Include visualization of Node related Animation data
+DopeSheet.display_particle -> show_particle: boolean Include visualization of Particle related Animation data
+DopeSheet.display_scene -> show_scene: boolean Include visualization of Scene related Animation data
+DopeSheet.display_shapekeys -> show_shapekeys: boolean Include visualization of ShapeKey related Animation data
+DopeSheet.display_summary -> show_summary: boolean Display an additional 'summary' line. (DopeSheet Editors only)
+DopeSheet.display_texture -> show_texture: boolean Include visualization of Texture related Animation data
+DopeSheet.display_transforms -> show_transforms: boolean Include visualization of Object-level Animation data (mostly Transforms)
+DopeSheet.display_world -> show_world: boolean Include visualization of World related Animation data
+DopeSheet.include_missing_nla -> show_missing_nla: boolean Include Animation Data blocks with no NLA data. (NLA Editor only)
+DopeSheet.only_group_objects -> showonly_group_objects: boolean Only include channels from Objects in the specified Group
+DopeSheet.only_selected -> showonly_selected: boolean Only include channels relating to selected objects and data
+Driver.invalid -> is_valid: boolean Driver could not be evaluated in past, so should be skipped
+Driver.show_debug_info -> show_debug_info: boolean Show intermediate values for the driver calculations to allow debugging of drivers
+DriverTarget.use_local_space_transforms -> use_local_space_transform: boolean Use transforms in Local Space (as opposed to the worldspace default)
+EdgeSplitModifier.use_edge_angle -> use_edge_angle: boolean Split edges with high angle between faces
+EdgeSplitModifier.use_sharp -> use_edge_sharp: boolean Split edges that are marked as sharp
+EditBone.connected -> is_connected: boolean When bone has a parent, bone's head is struck to the parent's tail
+EditBone.cyclic_offset -> use_cyclic_offset: boolean When bone doesn't have a parent, it receives cyclic offset effects
+EditBone.deform -> use_deform: boolean Bone does not deform any geometry
+EditBone.draw_wire -> show_wire: boolean Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes
+EditBone.hidden -> hidden: boolean Bone is not visible when in Edit Mode
+EditBone.hinge -> use_hinge: boolean Bone inherits rotation or scale from parent bone
+EditBone.inherit_scale -> use_inherit_scale: boolean Bone inherits scaling from parent bone
+EditBone.layer -> layer: boolean Layers bone exists in
+EditBone.local_location -> use_local_location: boolean Bone location is set in local space
+EditBone.locked -> use_lock: boolean Bone is not able to be transformed when in Edit Mode
+EditBone.multiply_vertexgroup_with_envelope -> use_envelope_multiply: boolean When deforming bone, multiply effects of Vertex Group weights with Envelope influence
+EditBone.restrict_select -> restrict_select: boolean Bone is able to be selected
+EditBone.selected -> selected: boolean
+EditBone.selected_head -> selected_head: boolean
+EditBone.selected_tail -> selected_tail: boolean
+EditObjectActuator.enable_3d_tracking -> use_tracking_3d: boolean Enable 3D tracking
+EditObjectActuator.local_angular_velocity -> use_local_angular_velocity: boolean Apply the rotation locally
+EditObjectActuator.local_linear_velocity -> use_local_linear_velocity: boolean Apply the transformation locally
+EditObjectActuator.replace_display_mesh -> use_display_mesh: boolean Replace the display mesh
+EditObjectActuator.replace_physics_mesh -> use_physics_mesh: boolean Replace the physics mesh (triangle bounds only - compound shapes not supported)
+EffectSequence.convert_float -> use_float: boolean Convert input to float data
+EffectSequence.de_interlace -> use_de_interlace: boolean For video movies to remove fields
+EffectSequence.flip_x -> use_flip_x: boolean Flip on the X axis
+EffectSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
+EffectSequence.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
+EffectSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
+EffectSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
+EffectSequence.reverse_frames -> use_frame_reverse: boolean Reverse frame order
+EffectSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
+EffectSequence.use_crop -> use_crop: boolean Crop image before processing
+EffectSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
+EffectSequence.use_translation -> use_translation: boolean Translate image before processing
+EffectorWeights.do_growing_hair -> use_hair_grow: boolean Use force fields when growing hair
+EnvironmentMap.ignore_layers -> layer_ignore: boolean Hide objects on these layers when generating the Environment Map
+EnvironmentMapTexture.use_filter_size_min -> filter_size_minimum: boolean Use Filter Size as a minimal filter value in pixels
+EnvironmentMapTexture.mipmap -> use_mipmap: boolean Uses auto-generated MIP maps for the image
+EnvironmentMapTexture.mipmap_gauss -> use_mipmap_gauss: boolean Uses Gauss filter to sample down MIP maps
+Event.alt -> alt: boolean, (read-only) True when the Alt/Option key is held
+Event.ctrl -> ctrl: boolean, (read-only) True when the Ctrl key is held
+Event.oskey -> oskey: boolean, (read-only) True when the Cmd key is held
+Event.shift -> shift: boolean, (read-only) True when the Shift key is held
+ExplodeModifier.alive -> show_alive: boolean Show mesh when particles are alive
+ExplodeModifier.dead -> show_dead: boolean Show mesh when particles are dead
+ExplodeModifier.size -> use_size: boolean Use particle size for the shrapnel
+ExplodeModifier.split_edges -> use_edge_split: boolean Split face edges for nicer shrapnel
+ExplodeModifier.unborn -> show_unborn: boolean Show mesh when particles are unborn
+FCurve.auto_clamped_handles -> use_auto_handle_clamp: boolean All auto-handles for F-Curve are clamped
+NEGATE * FCurve.disabled -> enabled: boolean F-Curve could not be evaluated in past, so should be skipped when evaluating
+FCurve.locked -> use_lock: boolean F-Curve's settings cannot be edited
+FCurve.muted -> use_mute: boolean F-Curve is not evaluated
+FCurve.selected -> selected: boolean F-Curve is selected for editing
+NEGATE * FCurve.visible -> hidden: boolean F-Curve and its keyframes are shown in the Graph Editor graphs
+FCurveSample.selected -> selected: boolean Selection status
+FModifier.active -> active: boolean F-Curve Modifier is the one being edited
+NEGATE * FModifier.disabled -> enabled: boolean, (read-only) F-Curve Modifier has invalid settings and will not be evaluated
+FModifier.expanded -> show_expanded: boolean F-Curve Modifier's panel is expanded in UI
+FModifier.muted -> use_mute: boolean F-Curve Modifier will not be evaluated
+FModifierFunctionGenerator.additive -> use_additive: boolean Values generated by this modifier are applied on top of the existing values instead of overwriting them
+FModifierGenerator.additive -> use_additive: boolean Values generated by this modifier are applied on top of the existing values instead of overwriting them
+FModifierLimits.use_maximum_x -> use_x_max: boolean Use the maximum X value
+FModifierLimits.use_maximum_y -> use_y_max: boolean Use the maximum Y value
+FModifierLimits.use_minimum_x -> use_x_min: boolean Use the minimum X value
+FModifierLimits.use_minimum_y -> use_y_min: boolean Use the minimum Y value
+FModifierStepped.use_frame_end -> use_frame_end: boolean Restrict modifier to only act before its 'end' frame
+FModifierStepped.use_frame_start -> use_frame_start: boolean Restrict modifier to only act after its 'start' frame
+FcurveActuator.add -> use_additive: boolean F-Curve is added to the current loc/rot/scale in global or local coordinate according to Local flag
+FcurveActuator.child -> use_child: boolean Update F-Curve on all children Objects as well
+FcurveActuator.force -> use_force: boolean Apply F-Curve as a global or local force depending on the local option (dynamic objects only)
+FcurveActuator.local -> use_local: boolean Let the F-Curve act in local coordinates, used in Force and Add mode
+FieldSettings.do_absorption -> use_absorption: boolean Force gets absorbed by collision objects
+FieldSettings.do_location -> use_location: boolean Effect particles' location
+FieldSettings.do_rotation -> use_rotation: boolean Effect particles' dynamic rotation
+FieldSettings.force_2d -> use_force_2d: boolean Apply force only in 2d
+FieldSettings.global_coordinates -> use_coordinates_global: boolean Use effector/global coordinates for turbulence
+FieldSettings.guide_path_add -> use_guide_path_add: boolean Based on distance/falloff it adds a portion of the entire path
+FieldSettings.multiple_springs -> use_multiple_springs: boolean Every point is effected by multiple springs
+FieldSettings.root_coordinates -> use_coordinates_root: boolean Texture coordinates from root particle locations
+FieldSettings.use_coordinates -> use_coordinates_object: boolean Use object/global coordinates for texture
+FieldSettings.use_guide_path_weight -> use_guide_path_weight: boolean Use curve weights to influence the particle influence along the curve
+FieldSettings.use_max_distance -> use_distance_min: boolean Use a maximum distance for the field to work
+FieldSettings.use_min_distance -> use_distance_max: boolean Use a minimum distance for the field's fall-off
+FieldSettings.use_radial_max -> use_radial_max: boolean Use a maximum radial distance for the field to work
+FieldSettings.use_radial_min -> use_radial_min: boolean Use a minimum radial distance for the field's fall-off
+FileSelectParams.do_filter -> use_filter: boolean Enable filtering of files
+FileSelectParams.filter_blender -> use_filter_blender: boolean Show .blend files
+FileSelectParams.filter_folder -> use_filter_folder: boolean Show folders
+FileSelectParams.filter_font -> use_filter_font: boolean Show font files
+FileSelectParams.filter_image -> use_filter_image: boolean Show image files
+FileSelectParams.filter_movie -> use_filter_movie: boolean Show movie files
+FileSelectParams.filter_script -> use_filter_script: boolean Show script files
+FileSelectParams.filter_sound -> use_filter_sound: boolean Show sound files
+FileSelectParams.filter_text -> use_filter_text: boolean Show text files
+FileSelectParams.hide_dot -> show_hidden: boolean Hide hidden dot files
+Filter2DActuator.enable_motion_blur -> use_motion_blur: boolean Enable/Disable Motion Blur
+FloorConstraint.sticky -> use_sticky: boolean Immobilize object while constrained
+FloorConstraint.use_rotation -> use_rotation: boolean Use the target's rotation to determine floor
+FluidFluidSettings.active -> active: boolean Object contributes to the fluid simulation
+FluidFluidSettings.export_animated_mesh -> use_animated_mesh: boolean Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it
+FollowPathConstraint.use_curve_follow -> use_curve_follow: boolean Object will follow the heading and banking of the curve
+FollowPathConstraint.use_curve_radius -> use_curve_radius: boolean Objects scale by the curve radius
+FollowPathConstraint.use_fixed_position -> use_fixed_position: boolean Object will stay locked to a single point somewhere along the length of the curve regardless of time
+Function.registered -> registered: boolean, (read-only) Function is registered as callback as part of type registration
+Function.registered_optional -> registered_optional: boolean, (read-only) Function is optionally registered as callback part of type registration
+GPencilFrame.paint_lock -> lock_paint: boolean Frame is being edited (painted on)
+GPencilFrame.selected -> selected: boolean Frame is selected for editing in the DopeSheet
+GPencilLayer.active -> active: boolean Set active layer for editing
+GPencilLayer.frame_lock -> lock_frame: boolean Lock current frame displayed by layer
+GPencilLayer.hide -> hidden: boolean Set layer Visibility
+GPencilLayer.locked -> use_lock: boolean Protect layer from further editing and/or frame changes
+GPencilLayer.selected -> selected: boolean Layer is selected for editing in the DopeSheet
+GPencilLayer.show_points -> show_points: boolean Draw the points which make up the strokes (for debugging purposes)
+GPencilLayer.use_onion_skinning -> use_onion_skin: boolean Ghost frames on either side of frame
+GameBooleanProperty.value -> value: boolean Property value
+GameObjectSettings.actor -> use_actor: boolean Object is detected by the Near and Radar sensor
+GameObjectSettings.all_states -> states_all: boolean Set all state bits
+GameObjectSettings.anisotropic_friction -> use_anisotropic_friction: boolean Enable anisotropic friction
+GameObjectSettings.collision_compound -> use_collision_compound: boolean Add children to form a compound collision object
+GameObjectSettings.debug_state -> show_state_debug: boolean Print state debug info in the game engine
+GameObjectSettings.ghost -> use_ghost: boolean Object does not restitute collisions, like a ghost
+GameObjectSettings.initial_state -> initial_state: boolean Initial state when the game starts
+GameObjectSettings.lock_x_axis -> lock_location_x: boolean Disable simulation of linear motion along the X axis
+GameObjectSettings.lock_x_rot_axis -> lock_rotation_x: boolean Disable simulation of angular motion along the X axis
+GameObjectSettings.lock_y_axis -> lock_location_y: boolean Disable simulation of linear motion along the Y axis
+GameObjectSettings.lock_y_rot_axis -> lock_rotation_y: boolean Disable simulation of angular motion along the Y axis
+GameObjectSettings.lock_z_axis -> lock_location_z: boolean Disable simulation of linear motion along the Z axis
+GameObjectSettings.lock_z_rot_axis -> lock_rotation_z: boolean Disable simulation of angular motion along the Z axis
+GameObjectSettings.material_physics -> use_material_physics: boolean Use physics settings in materials
+NEGATE * GameObjectSettings.no_sleeping -> use_sleep: boolean Disable auto (de)activation in physics simulation
+GameObjectSettings.rotate_from_normal -> use_rotate_from_normal: boolean Use face normal to rotate object, so that it points away from the surface
+GameObjectSettings.show_actuators -> show_actuators: boolean Shows actuators for this object in the user interface
+GameObjectSettings.show_controllers -> show_controllers: boolean Shows controllers for this object in the user interface
+GameObjectSettings.show_sensors -> show_sensors: boolean Shows sensors for this object in the user interface
+GameObjectSettings.show_state_panel -> show_state_panel: boolean Show state panel
+GameObjectSettings.use_activity_culling -> use_activity_culling: boolean Disable simulation of angular motion along the Z axis
+GameObjectSettings.use_collision_bounds -> use_collision_bounds: boolean Specify a collision bounds type other than the default
+GameObjectSettings.used_state -> state_used: boolean, (read-only) States which are being used by controllers
+GameObjectSettings.visible_state -> state_visible: boolean State determining which controllers are displayed
+GameProperty.debug -> use_debug: boolean Print debug information for this property
+GameSoftBodySettings.bending_const -> use_bending_constraint: boolean Enable bending constraints
+GameSoftBodySettings.cluster_rigid_to_softbody -> use_cluster_rigid_to_softbody: boolean Enable cluster collision between soft and rigid body
+GameSoftBodySettings.cluster_soft_to_softbody -> use_cluster_soft_to_softbody: boolean Enable cluster collision between soft and soft body
+GameSoftBodySettings.shape_match -> use_shape_match: boolean Enable soft body shape matching goal
+GlowSequence.only_boost -> useonly_boost: boolean Show the glow buffer only
+GreasePencil.use_stroke_endpoints -> use_stroke_endpoints: boolean Only use the first and last parts of the stroke for snapping
+Group.layer -> layer: boolean Layers visible when this groups is instanced as a dupli
+ID.fake_user -> use_fake_user: boolean Saves this datablock even if it has no users
+ID.tag -> tag: boolean Tools can use this to tag data, (initial state is undefined)
+Image.animated -> use_snimation: boolean Use as animated texture in the game engine
+Image.clamp_x -> use_clamp_x: boolean Disable texture repeating horizontally
+Image.clamp_y -> use_clamp_y: boolean Disable texture repeating vertically
+Image.dirty -> is_dirty: boolean, (read-only) Image has changed and is not saved
+Image.fields -> use_fields: boolean Use fields of the image
+Image.has_data -> is_data: boolean, (read-only) True if this image has data
+Image.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
+Image.tiles -> use_tiles: boolean Use of tilemode for faces (default shift-LMB to pick the tile for selected faces)
+ImagePaint.invert_stencil -> invert_stencil: boolean Invert the stencil layer
+ImagePaint.show_brush -> show_brush: boolean Enables brush shape while not drawing
+ImagePaint.show_brush_draw -> show_brush_draw: boolean Enables brush shape while drawing
+ImagePaint.use_backface_cull -> use_backface_cull: boolean Ignore faces pointing away from the view (faster)
+ImagePaint.use_clone_layer -> use_clone_layer: boolean Use another UV layer as clone source, otherwise use 3D the cursor as the source
+ImagePaint.use_normal_falloff -> use_normal_falloff: boolean Paint most on faces pointing towards the view
+ImagePaint.use_occlude -> use_occlude: boolean Only paint onto the faces directly under the brush (slower)
+ImagePaint.use_projection -> use_projection: boolean Use projection painting for improved consistency in the brush strokes
+ImagePaint.use_stencil_layer -> use_stencil_layer: boolean Set the mask layer from the UV layer buttons
+ImageSequence.convert_float -> use_float: boolean Convert input to float data
+ImageSequence.de_interlace -> use_de_interlace: boolean For video movies to remove fields
+ImageSequence.flip_x -> use_flip_x: boolean Flip on the X axis
+ImageSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
+ImageSequence.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
+ImageSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
+ImageSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
+ImageSequence.reverse_frames -> use_frame_reverse: boolean Reverse frame order
+ImageSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
+ImageSequence.use_crop -> use_crop: boolean Crop image before processing
+ImageSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
+ImageSequence.use_translation -> use_translation: boolean Translate image before processing
+ImageTexture.calculate_alpha -> use_rgb_alpha: boolean Calculates an alpha channel based on RGB values in the image
+ImageTexture.checker_even -> use_checker_even: boolean Sets even checker tiles
+ImageTexture.checker_odd -> use_checker_odd: boolean Sets odd checker tiles
+ImageTexture.filter_size_minimum -> use_filter_size_min: boolean Use Filter Size as a minimal filter value in pixels
+ImageTexture.flip_axis -> use_flip_axis: boolean Flips the texture's X and Y axis
+ImageTexture.interpolation -> use_interpolation: boolean Interpolates pixels using Area filter
+ImageTexture.invert_alpha -> invert_alpha: boolean Inverts all the alpha values in the image
+ImageTexture.mipmap -> use_mipmap: boolean Uses auto-generated MIP maps for the image
+ImageTexture.mipmap_gauss -> use_mipmap_gauss: boolean Uses Gauss filter to sample down MIP maps
+ImageTexture.mirror_x -> use_mirror_x: boolean Mirrors the image repetition on the X direction
+ImageTexture.mirror_y -> use_mirror_y: boolean Mirrors the image repetition on the Y direction
+ImageTexture.normal_map -> use_normal_map: boolean Uses image RGB values for normal mapping
+ImageTexture.use_alpha -> use_use_alpha: boolean Uses the alpha channel information in the image
+ImageUser.auto_refresh -> use_auto_refresh: boolean Always refresh image on frame changes
+ImageUser.cyclic -> use_cyclic: boolean Cycle the images in the movie
+TODO would use is_ * InflowFluidSettings.active -> active: boolean Object contributes to the fluid simulation
+InflowFluidSettings.export_animated_mesh -> use_export_animated_mesh: boolean Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it
+InflowFluidSettings.local_coordinates -> use_local_coordinates: boolean Use local coordinates for inflow. (e.g. for rotating objects)
+Itasc.auto_step -> use_auto_step: boolean Automatically determine the optimal number of steps for best performance/accuracy trade off
+JoystickSensor.all_events -> use_all_events: boolean Triggered by all events on this joysticks current type (axis/button/hat)
+Key.relative -> use_relative: boolean Makes shape keys relative
+TODO would use is_ * KeyConfig.user_defined -> user_defined: boolean, (read-only) Indicates that a keyconfig was defined by the user
+KeyMap.children_expanded -> show_expanded_children: boolean Children expanded in the user interface
+KeyMap.items_expanded -> show_expanded_items: boolean Expanded in the user interface
+TODO would use is_ * KeyMap.modal -> modal: boolean, (read-only) Indicates that a keymap is used for translate modal events for an operator
+KeyMap.user_defined -> use_user_defined: boolean Keymap is defined by the user
+KeyMapItem.active -> use_active: boolean Activate or deactivate item
+TODO would use is_pressed * KeyMapItem.alt -> alt: boolean Alt key pressed
+TODO would use is_pressed * KeyMapItem.any -> any: boolean Any modifier keys pressed
+TODO would use is_pressed * KeyMapItem.ctrl -> ctrl: boolean Control key pressed
+KeyMapItem.expanded -> show_expanded: boolean Show key map event and property details in the user interface
+TODO would use is_pressed * KeyMapItem.oskey -> oskey: boolean Operating system key pressed
+TODO would use is_pressed * KeyMapItem.shift -> shift: boolean Shift key pressed
+TODO * KeyboardSensor.all_keys -> all_keys: boolean Trigger this sensor on any keystroke
+TODO would use is_ * Keyframe.selected -> selected: boolean Control point selection status
+TODO would use is_ * Keyframe.selected_handle1 -> selected_handle1: boolean Handle 1 selection status
+TODO would use is_ * Keyframe.selected_handle2 -> selected_handle2: boolean Handle 2 selection status
+KeyingSet.absolute -> use_absolute: boolean Keying Set defines specific paths/settings to be keyframed (i.e. is not reliant on context info)
+KeyingSet.insertkey_needed -> use_insertkey_needed: boolean Only insert keyframes where they're needed in the relevant F-Curves
+KeyingSet.insertkey_visual -> use_insertkey_visual: boolean Insert keyframes based on 'visual transforms'
+KeyingSet.insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis
+KeyingSetInfo.insertkey_needed -> use_insertkey_needed: boolean Only insert keyframes where they're needed in the relevant F-Curves
+KeyingSetInfo.insertkey_visual -> use_insertkey_visual: boolean Insert keyframes based on 'visual transforms'
+KeyingSetInfo.insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis
+KeyingSetPath.entire_array -> use_entire_array: boolean When an 'array/vector' type is chosen (Location, Rotation, Color, etc.), entire array is to be used
+KeyingSetPath.insertkey_needed -> use_insertkey_needed: boolean Only insert keyframes where they're needed in the relevant F-Curves
+KeyingSetPath.insertkey_visual -> use_insertkey_visual: boolean Insert keyframes based on 'visual transforms'
+KeyingSetPath.insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis
+KinematicConstraint.pos_lock_x -> use_lock_pos_x: boolean Constraint position along X axis
+KinematicConstraint.pos_lock_y -> use_lock_pos_y: boolean Constraint position along Y axis
+KinematicConstraint.pos_lock_z -> use_lock_pos_z: boolean Constraint position along Z axis
+KinematicConstraint.rot_lock_x -> use_lock_rot_x: boolean Constraint rotation along X axis
+KinematicConstraint.rot_lock_y -> use_lock_rot_y: boolean Constraint rotation along Y axis
+KinematicConstraint.rot_lock_z -> use_lock_rot_z: boolean Constraint rotation along Z axis
+KinematicConstraint.use_position -> use_position: boolean Chain follows position of target
+KinematicConstraint.use_rotation -> use_rotation: boolean Chain follows rotation of target
+KinematicConstraint.use_stretch -> use_stretch: boolean Enable IK Stretching
+KinematicConstraint.use_tail -> use_tail: boolean Include bone's tail as last element in chain
+KinematicConstraint.use_target -> use_target: boolean Disable for targetless IK
+Lamp.diffuse -> use_diffuse: boolean Lamp does diffuse shading
+Lamp.layer -> use_own_layer: boolean Illuminates objects only on the same layer the lamp is on
+Lamp.negative -> use_negative: boolean Lamp casts negative light
+Lamp.specular -> use_specular: boolean Lamp creates specular highlights
+LampSkySettings.use_atmosphere -> use_atmosphere: boolean Apply sun effect on atmosphere
+LampSkySettings.use_sky -> use_sky: boolean Apply sun effect on sky
+LampTextureSlot.map_color -> use_map_color: boolean Lets the texture affect the basic color of the lamp
+LampTextureSlot.map_shadow -> use_map_shadow: boolean Lets the texture affect the shadow color of the lamp
+Lattice.outside -> use_outside: boolean Only draw, and take into account, the outer vertices
+LimitLocationConstraint.limit_transform -> limit_transform: boolean Transforms are affected by this constraint as well
+LimitLocationConstraint.use_maximum_x -> use_maximum_x: boolean Use the maximum X value
+LimitLocationConstraint.use_maximum_y -> use_maximum_y: boolean Use the maximum Y value
+LimitLocationConstraint.use_maximum_z -> use_maximum_z: boolean Use the maximum Z value
+LimitLocationConstraint.use_minimum_x -> use_minimum_x: boolean Use the minimum X value
+LimitLocationConstraint.use_minimum_y -> use_minimum_y: boolean Use the minimum Y value
+LimitLocationConstraint.use_minimum_z -> use_minimum_z: boolean Use the minimum Z value
+LimitRotationConstraint.limit_transform -> limit_transform: boolean Transforms are affected by this constraint as well
+LimitRotationConstraint.use_limit_x -> use_limit_x: boolean Use the minimum X value
+LimitRotationConstraint.use_limit_y -> use_limit_y: boolean Use the minimum Y value
+LimitRotationConstraint.use_limit_z -> use_limit_z: boolean Use the minimum Z value
+LimitScaleConstraint.limit_transform -> limit_transform: boolean Transforms are affected by this constraint as well
+LimitScaleConstraint.use_maximum_x -> use_maximum_x: boolean Use the maximum X value
+LimitScaleConstraint.use_maximum_y -> use_maximum_y: boolean Use the maximum Y value
+LimitScaleConstraint.use_maximum_z -> use_maximum_z: boolean Use the maximum Z value
+LimitScaleConstraint.use_minimum_x -> use_minimum_x: boolean Use the minimum X value
+LimitScaleConstraint.use_minimum_y -> use_minimum_y: boolean Use the minimum Y value
+LimitScaleConstraint.use_minimum_z -> use_minimum_z: boolean Use the minimum Z value
+Main.debug -> show_debug: boolean Print debugging information in console
+Main.file_is_saved -> is_saved: boolean, (read-only) Has the current session been saved to disk as a .blend file
+TODO * MaskModifier.invert -> invert: boolean Use vertices that are not part of region defined
+Material.cast_approximate -> use_cast_approximate: boolean Allow this material to cast shadows when using approximate ambient occlusion.
+Material.cast_buffer_shadows -> use_cast_buffer_shadows: boolean Allow this material to cast shadows from shadow buffer lamps
+Material.cast_shadows_only -> use_cast_shadows_only: boolean Makes objects with this material appear invisible, only casting shadows (not rendered)
+Material.cubic -> use_cubic: boolean Use cubic interpolation for diffuse values, for smoother transitions
+Material.exclude_mist -> use_exclude_mist: boolean Excludes this material from mist effects (in world settings)
+Material.face_texture -> use_face_texture: boolean Replaces the object's base color with color from face assigned image textures
+Material.face_texture_alpha -> use_face_texture_alpha: boolean Replaces the object's base alpha value with alpha from face assigned image textures
+Material.full_oversampling -> use_full_oversampling: boolean Force this material to render full shading/textures for all anti-aliasing samples
+Material.invert_z -> use_invert_z: boolean Renders material's faces with an inverted Z buffer (scanline only)
+Material.light_group_exclusive -> use_light_group_exclusive: boolean Material uses the light group exclusively - these lamps are excluded from other scene lighting
+Material.object_color -> use_object_color: boolean Modulate the result with a per-object color
+Material.only_shadow -> use_shadow_only: boolean Renders shadows as the material's alpha value, making materials transparent except for shadowed areas
+Material.ray_shadow_bias -> use_ray_shadow_bias: boolean Prevents raytraced shadow errors on surfaces with smooth shaded normals (terminator problem)
+Material.receive_transparent_shadows -> use_receive_transparent_shadows: boolean Allow this object to receive transparent shadows casted through other objects
+Material.shadeless -> use_shadeless: boolean Makes this material insensitive to light or shadow
+Material.shadows -> use_shadows: boolean Allows this material to receive shadows
+Material.tangent_shading -> use_tangent_shading: boolean Use the material's tangent vector instead of the normal for shading - for anisotropic shading effects
+Material.traceable -> use_traceable: boolean Include this material and geometry that uses it in ray tracing calculations
+Material.transparency -> use_transparency: boolean Render material as transparent
+Material.use_diffuse_ramp -> use_diffuse_ramp: boolean Toggle diffuse ramp operations
+Material.use_nodes -> use_nodes: boolean Use shader nodes to render the material
+Material.use_sky -> use_sky: boolean Renders this material with zero alpha, with sky background in place (scanline only)
+Material.use_specular_ramp -> use_specular_ramp: boolean Toggle specular ramp operations
+Material.use_textures -> use_textures: boolean Enable/Disable each texture
+Material.vertex_color_light -> use_vertex_color_light: boolean Add vertex colors as additional lighting
+Material.vertex_color_paint -> use_vertex_color_paint: boolean Replaces object base color with vertex colors (multiplies with 'texture face' face assigned textures)
+MaterialHalo.flare_mode -> use_flare_mode: boolean Renders halo as a lensflare
+MaterialHalo.lines -> use_lines: boolean Renders star shaped lines over halo
+MaterialHalo.ring -> use_ring: boolean Renders rings over halo
+MaterialHalo.shaded -> use_shaded: boolean Lets halo receive light and shadows from external objects
+MaterialHalo.soft -> use_soft: boolean Softens the edges of halos at intersections with other geometry
+MaterialHalo.star -> use_star: boolean Renders halo as a star
+MaterialHalo.texture -> use_texture: boolean Gives halo a texture
+MaterialHalo.vertex_normal -> use_vertex_normal: boolean Uses the vertex normal to specify the dimension of the halo
+MaterialHalo.xalpha -> use_xalpha: boolean Uses extreme alpha
+MaterialPhysics.align_to_normal -> use_align_to_normal: boolean Align dynamic game objects along the surface normal, when inside the physics distance area
+TODO * MaterialRaytraceMirror.enabled -> enabled: boolean Enable raytraced reflections
+MaterialStrand.blender_units -> use_blender_units: boolean Use Blender units for widths instead of pixels
+MaterialStrand.surface_diffuse -> use_surface_diffuse: boolean Make diffuse shading more similar to shading the surface
+MaterialStrand.tangent_shading -> use_tangent_shading: boolean Uses direction of strands as normal for tangent-shading
+TODO * MaterialSubsurfaceScattering.enabled -> enabled: boolean Enable diffuse subsurface scatting effects in a material
+TODO * MaterialTextureSlot.enabled -> enabled: boolean Enable this material texture slot
+MaterialTextureSlot.from_dupli -> use_from_dupli: boolean Dupli's instanced from verts, faces or particles, inherit texture coordinate from their parent
+MaterialTextureSlot.from_original -> use_from_original: boolean Dupli's derive their object coordinates from the original objects transformation
+MaterialTextureSlot.map_alpha -> use_map_alpha: boolean Causes the texture to affect the alpha value
+MaterialTextureSlot.map_ambient -> use_map_ambient: boolean Causes the texture to affect the value of ambient
+MaterialTextureSlot.map_colordiff -> use_map_colordiff: boolean Causes the texture to affect basic color of the material
+MaterialTextureSlot.map_coloremission -> use_map_coloremission: boolean Causes the texture to affect the color of emission
+MaterialTextureSlot.map_colorreflection -> use_map_colorreflection: boolean Causes the texture to affect the color of scattered light
+MaterialTextureSlot.map_colorspec -> use_map_colorspec: boolean Causes the texture to affect the specularity color
+MaterialTextureSlot.map_colortransmission -> use_map_colortransmission: boolean Causes the texture to affect the result color after other light has been scattered/absorbed
+MaterialTextureSlot.map_density -> use_map_density: boolean Causes the texture to affect the volume's density
+MaterialTextureSlot.map_diffuse -> use_map_diffuse: boolean Causes the texture to affect the value of the materials diffuse reflectivity
+MaterialTextureSlot.map_displacement -> use_map_displacement: boolean Let the texture displace the surface
+MaterialTextureSlot.map_emission -> use_map_emission: boolean Causes the texture to affect the volume's emission
+MaterialTextureSlot.map_emit -> use_map_emit: boolean Causes the texture to affect the emit value
+MaterialTextureSlot.map_hardness -> use_map_hardness: boolean Causes the texture to affect the hardness value
+MaterialTextureSlot.map_mirror -> use_map_mirror: boolean Causes the texture to affect the mirror color
+MaterialTextureSlot.map_normal -> use_map_normal: boolean Causes the texture to affect the rendered normal
+MaterialTextureSlot.map_raymir -> use_map_raymir: boolean Causes the texture to affect the ray-mirror value
+MaterialTextureSlot.map_reflection -> use_map_reflection: boolean Causes the texture to affect the reflected light's brightness
+MaterialTextureSlot.map_scattering -> use_map_scattering: boolean Causes the texture to affect the volume's scattering
+MaterialTextureSlot.map_specular -> use_map_specular: boolean Causes the texture to affect the value of specular reflectivity
+MaterialTextureSlot.map_translucency -> use_map_translucency: boolean Causes the texture to affect the translucency value
+MaterialTextureSlot.map_warp -> use_map_warp: boolean Let the texture warp texture coordinates of next channels
+MaterialTextureSlot.new_bump -> use_new_bump: boolean Use new, corrected bump mapping code (backwards compatibility option)
+MaterialVolume.external_shadows -> use_external_shadows: boolean Receive shadows from sources outside the volume (temporary)
+MaterialVolume.light_cache -> use_light_cache: boolean Pre-calculate the shading information into a voxel grid, speeds up shading at slightly less accuracy
+Mesh.all_edges -> show_all_edges: boolean Displays all edges for wireframe in all view modes in the 3D view
+Mesh.auto_texspace -> use_auto_texspace: boolean Adjusts active object's texture space automatically when transforming object
+Mesh.autosmooth -> use_autosmooth: boolean Treats all set-smoothed faces with angles less than the specified angle as 'smooth' during render
+Mesh.double_sided -> use_double_sided: boolean Render/display the mesh with double or single sided lighting
+Mesh.draw_bevel_weights -> show_bevel_weights: boolean Displays weights created for the Bevel modifier
+Mesh.draw_creases -> show_creases: boolean Displays creases created for subsurf weighting
+Mesh.draw_edge_angle -> show_edge_angle: boolean Displays the angles in the selected edges in degrees
+Mesh.draw_edge_lenght -> show_edge_lenght: boolean Displays selected edge lengths
+Mesh.draw_edges -> show_edges: boolean Displays selected edges using highlights in the 3D view and UV editor
+Mesh.draw_face_area -> show_face_area: boolean Displays the area of selected faces
+Mesh.draw_faces -> show_faces: boolean Displays all faces as shades in the 3D view and UV editor
+Mesh.draw_normals -> show_normals: boolean Displays face normals as lines
+Mesh.draw_seams -> show_seams: boolean Displays UV unwrapping seams
+Mesh.draw_sharp -> show_sharp: boolean Displays sharp edges, used with the EdgeSplit modifier
+Mesh.draw_vertex_normals -> show_vertex_normals: boolean Displays vertex normals as lines
+Mesh.use_mirror_topology -> use_mirror_topology: boolean Use topology based mirroring
+Mesh.use_mirror_x -> use_mirror_x: boolean X Axis mirror editing
+Mesh.use_paint_mask -> use_paint_mask: boolean Face selection masking for painting
+Mesh.vertex_normal_flip -> use_vertex_normal_flip: boolean Flip vertex normals towards the camera during render
+MeshColorLayer.active -> use_active: boolean Sets the layer as active for display and editing
+MeshColorLayer.active_render -> use_active_render: boolean Sets the layer as active for rendering
+MeshDeformModifier.dynamic -> dynamic: boolean Recompute binding dynamically on top of other deformers (slower and more memory consuming.)
+MeshDeformModifier.invert -> invert: boolean Invert vertex group influence
+MeshDeformModifier.is_bound -> is_bound: boolean, (read-only) Whether geometry has been bound to control cage
+MeshEdge.fgon -> is_fgon: boolean, (read-only) Fgon edge
+TODO * MeshEdge.hidden -> hidden: boolean
+MeshEdge.loose -> use_loose: boolean, (read-only) Loose edge
+MeshEdge.seam -> use_seam: boolean Seam edge for UV unwrapping
+TODO * MeshEdge.selected -> selected: boolean
+MeshEdge.sharp -> use_sharp: boolean Sharp edge for the EdgeSplit modifier
+TODO would use is_ * MeshFace.hidden -> hidden: boolean
+TODO would use is_ * MeshFace.selected -> selected: boolean
+TODO would use is_ * MeshFace.smooth -> smooth: boolean
+MeshTextureFace.alpha_sort -> use_alpha_sort: boolean Enable sorting of faces for correct alpha drawing (slow, use Clip Alpha instead when possible)
+MeshTextureFace.billboard -> use_billboard: boolean Billboard with Z-axis constraint
+MeshTextureFace.collision -> use_collision: boolean Use face for collision and ray-sensor detection
+MeshTextureFace.halo -> use_halo: boolean Screen aligned billboard
+TODO would use is_ * MeshTextureFace.invisible -> invisible: boolean Make face invisible
+MeshTextureFace.light -> use_light: boolean Use light for face
+MeshTextureFace.object_color -> use_object_color: boolean Use ObColor instead of vertex colors
+MeshTextureFace.shadow -> use_shadow_face: boolean Face is used for shadow
+MeshTextureFace.shared -> use_blend_shared: boolean Blend vertex colors across face when vertices are shared
+MeshTextureFace.tex -> use_render_texture: boolean Render face with texture
+MeshTextureFace.text -> use_bitmap_text: boolean Enable bitmap text on face
+MeshTextureFace.twoside -> use_twoside: boolean Render face two-sided
+MeshTextureFace.uv_pinned -> use_uv_pinned: boolean
+MeshTextureFace.uv_selected -> use_uv_selected: boolean
+TODO * MeshTextureFaceLayer.active -> active: boolean Sets the layer as active for display and editing
+TODO * MeshTextureFaceLayer.active_clone -> active_clone: boolean Sets the layer as active for cloning
+TODO * MeshTextureFaceLayer.active_render -> active_render: boolean Sets the layer as active for rendering
+TODO * MeshVertex.hidden -> hidden: boolean
+TODO would use is_ * MeshVertex.selected -> selected: boolean
+MetaBall.auto_texspace -> use_auto_texspace: boolean Adjusts active object's texture space automatically when transforming object
+TODO * MetaElement.hide -> hide: boolean Hide element
+TODO would use is_ * MetaElement.negative -> negative: boolean Set metaball as negative one
+MetaSequence.convert_float -> use_convert_float: boolean Convert input to float data
+MetaSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
+MetaSequence.flip_x -> use_flip_x: boolean Flip on the X axis
+MetaSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
+MetaSequence.premultiply -> use_convert_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
+MetaSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
+MetaSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
+MetaSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
+MetaSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
+MetaSequence.use_crop -> use_crop: boolean Crop image before processing
+MetaSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
+MetaSequence.use_translation -> use_translation: boolean Translate image before processing
+MirrorModifier.clip -> use_clipping: boolean Prevents vertices from going through the mirror during transform
+MirrorModifier.mirror_u -> use_mirror_u: boolean Mirror the U texture coordinate around the 0.5 point
+MirrorModifier.mirror_v -> use_mirror_v: boolean Mirror the V texture coordinate around the 0.5 point
+MirrorModifier.mirror_vertex_groups -> use_mirror_vertex_groups: boolean Mirror vertex groups (e.g. .R->.L)
+MirrorModifier.x -> use_x: boolean Enable X axis mirror
+MirrorModifier.y -> use_y: boolean Enable Y axis mirror
+MirrorModifier.z -> use_z: boolean Enable Z axis mirror
+Modifier.editmode -> use_in_editmode: boolean Use modifier while in the edit mode
+Modifier.expanded -> show_expanded: boolean Set modifier expanded in the user interface
+Modifier.on_cage -> use_on_cage: boolean Enable direct editing of modifier control cage
+Modifier.realtime -> show_realtime: boolean Realtime display of a modifier
+Modifier.render -> use_render: boolean Use modifier during rendering
+TODO * MotionPath.editing -> editing: boolean Path is being edited
+TODO * MotionPath.use_bone_head -> use_bone_head: boolean, (read-only) For PoseBone paths, use the bone head location when calculating this path
+TODO would use is_ * MotionPathVert.selected -> selected: boolean Path point is selected for editing
+MovieSequence.convert_float -> use_convert_float: boolean Convert input to float data
+MovieSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
+MovieSequence.flip_x -> use_flip_x: boolean Flip on the X axis
+MovieSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
+MovieSequence.premultiply -> use_convert_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
+MovieSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
+MovieSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
+TODO * MovieSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
+MovieSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
+MovieSequence.use_crop -> use_crop: boolean Crop image before processing
+MovieSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
+MovieSequence.use_translation -> use_translation: boolean Translate image before processing
+MulticamSequence.convert_float -> use_convert_float: boolean Convert input to float data
+MulticamSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
+MulticamSequence.flip_x -> use_flip_x: boolean Flip on the X axis
+MulticamSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
+MulticamSequence.premultiply -> use_convert_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
+MulticamSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
+MulticamSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
+TODO * MulticamSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
+MulticamSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
+MulticamSequence.use_crop -> use_crop: boolean Crop image before processing
+MulticamSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
+MulticamSequence.use_translation -> use_translation: boolean Translate image before processing
+MultiresModifier.external -> use_external: boolean, (read-only) Store multires displacements outside the .blend file, to save memory
+MultiresModifier.optimal_display -> show_optimal: boolean Skip drawing/rendering of interior subdivided edges
+NetRenderSettings.master_broadcast -> use_master_broadcast: boolean broadcast master server address on local network
+NetRenderSettings.master_clear -> use_master_clear: boolean delete saved files on exit
+NetRenderSettings.slave_clear -> use_slave_clear: boolean delete downloaded files on exit
+NetRenderSettings.slave_outputlog -> use_slave_outputlog: boolean Output render text log to console as well as sending it to the master
+NetRenderSettings.slave_thumb -> use_slave_thumb: boolean Generate thumbnails on slaves instead of master
+TODO I'd use is_ * NlaStrip.active -> active: boolean, (read-only) NLA Strip is active
+NlaStrip.animated_influence -> use_animated_influence: boolean Influence setting is controlled by an F-Curve rather than automatically determined
+NlaStrip.animated_time -> use_animated_time: boolean Strip time is controlled by an F-Curve rather than automatically determined
+NlaStrip.animated_time_cyclic -> use_animated_time_cyclic: boolean Cycle the animated time within the action start & end
+NlaStrip.auto_blending -> use_auto_blending: boolean Number of frames for Blending In/Out is automatically determined from overlapping strips
+TODO I'd use is_ * NlaStrip.muted -> muted: boolean NLA Strip is not evaluated
+TODO I'd use is_ * NlaStrip.reversed -> reversed: boolean NLA Strip is played back in reverse order (only when timing is automatically determined)
+TODO I'd use is_ * NlaStrip.selected -> selected: boolean NLA Strip is selected
+TODO I'd use is_ * NlaTrack.active -> active: boolean, (read-only) NLA Track is active
+TODO I'd use is_ * NlaTrack.locked -> locked: boolean NLA Track is locked
+TODO I'd use is_ * NlaTrack.muted -> muted: boolean NLA Track is not evaluated
+TODO I'd use is_ * NlaTrack.selected -> selected: boolean NLA Track is selected
+NlaTrack.solo -> is_solo: boolean, (read-only) NLA Track is evaluated itself (i.e. active Action and all other NLA Tracks in the same AnimData block are disabled)
+Object.draw_axis -> show_axis: boolean Displays the object's origin and axis
+Object.draw_bounds -> show_bounds: boolean Displays the object's bounds
+Object.draw_name -> show_name: boolean Displays the object's name
+Object.draw_texture_space -> show_texture_space: boolean Displays the object's texture space
+Object.draw_transparent -> show_transparent: boolean Enables transparent materials for the object (Mesh only)
+Object.draw_wire -> show_wire: boolean Adds the object's wireframe over solid drawing
+TODO * Object.duplis_used -> is_duplis_used: boolean, (read-only)
+TODO * Object.layers -> layers: boolean Layers the object is on
+Object.lock_location -> lock_location: boolean Lock editing of location in the interface
+Object.lock_rotation -> lock_rotation: boolean Lock editing of rotation in the interface
+Object.lock_rotation_w -> lock_rotation_w: boolean Lock editing of 'angle' component of four-component rotations in the interface
+Object.lock_rotations_4d -> lock_rotations_4d: boolean Lock editing of four component rotations by components (instead of as Eulers)
+Object.lock_scale -> lock_scale: boolean Lock editing of scale in the interface
+TODO * Object.restrict_render -> use_limit_render: boolean Restrict renderability
+TODO * Object.restrict_select -> use_limit_select: boolean Restrict selection in the viewport
+TODO * Object.restrict_view -> use_limit_view: boolean Restrict visibility in the viewport
+TODO * Object.selected -> selected: boolean Object selection state
+Object.shape_key_edit_mode -> use_shape_key_edit_mode: boolean Apply shape keys in edit mode (for Meshes only)
+Object.shape_key_lock -> show_shape_key: boolean Always show the current Shape for this Object
+Object.slow_parent -> use_slow_parent: boolean Create a delay in the parent relationship
+Object.time_offset_add_parent -> use_time_offset_add_parent: boolean Add the parents time offset value
+Object.time_offset_edit -> use_time_offset_edit: boolean Use time offset when inserting keys and display time offset for F-Curve and action views
+Object.time_offset_parent -> use_time_offset_parent: boolean Apply the time offset to this objects parent relationship
+Object.time_offset_particle -> use_time_offset_particle: boolean Let the time offset work on the particle effect
+Object.use_dupli_faces_scale -> use_dupli_faces_scale: boolean Scale dupli based on face size
+Object.use_dupli_frames_speed -> use_dupli_frames_speed: boolean Set dupliframes to use the frame
+Object.use_dupli_verts_rotation -> use_dupli_verts_rotation: boolean Rotate dupli according to vertex normal
+Object.x_ray -> show_x_ray: boolean Makes the object draw in front of others
+TODO * ObjectActuator.add_linear_velocity -> add_linear_velocity: boolean Toggles between ADD and SET linV
+ObjectActuator.local_angular_velocity -> use_local_angular_velocity: boolean Angular velocity is defined in local coordinates
+ObjectActuator.local_force -> use_local_force: boolean Force is defined in local coordinates
+ObjectActuator.local_linear_velocity -> use_local_linear_velocity: boolean Velocity is defined in local coordinates
+ObjectActuator.local_location -> use_local_location: boolean Location is defined in local coordinates
+ObjectActuator.local_rotation -> use_local_rotation: boolean Rotation is defined in local coordinates
+ObjectActuator.local_torque -> use_local_torque: boolean Torque is defined in local coordinates
+TODO * ObjectActuator.servo_limit_x -> use_limit_servo_x: boolean Set limit to force along the X axis
+TODO * ObjectActuator.servo_limit_y -> use_limit_servo_y: boolean Set limit to force along the Y axis
+TODO * ObjectActuator.servo_limit_z -> use_limit_servo_z: boolean Set limit to force along the Z axis
+TODO * ObjectBase.layers -> layers: boolean Layers the object base is on
+TODO * ObjectBase.selected -> selected: boolean Object base selection state
+TODO * ObjectBase.selected_user -> is_selected_user: boolean, (read-only) Object base user selection state, used to restore user selection after transformations
+TODO could be is_ * ObstacleFluidSettings.active -> use_active: boolean Object contributes to the fluid simulation
+ObstacleFluidSettings.export_animated_mesh -> use_export_animated_mesh: boolean Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it
+TODO * Operator.has_reports -> has_reports: boolean, (read-only) Operator has a set of reports (warnings and errors) from last execution
+OperatorStrokeElement.flip -> use_flip: boolean
+OutflowFluidSettings.active -> use_active: boolean Object contributes to the fluid simulation
+OutflowFluidSettings.export_animated_mesh -> use_export_animated_mesh: boolean Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it
+Paint.fast_navigate -> show_low_resolution: boolean For multires, show low resolution while navigating the view
+Paint.show_brush -> show_brush: boolean
+TODO * Panel.bl_default_closed -> bl_default_closed: boolean
+TODO * Panel.bl_show_header -> bl_show_header: boolean
+ParentActuator.compound -> use_compound: boolean Add this object shape to the parent shape (only if the parent shape is already compound)
+ParentActuator.ghost -> use_ghost: boolean Make this object ghost while parented (only if not compound)
+TODO * Particle.no_disp -> no_disp: boolean
+TODO * Particle.rekey -> rekey: boolean
+TODO * Particle.unexist -> unexist: boolean
+ParticleBrush.use_puff_volume -> use_puff_volume: boolean Apply puff to unselected end-points, (helps maintain hair volume when puffing root)
+ParticleEdit.add_interpolate -> use_add_interpolate: boolean Interpolate new particles from the existing ones
+ParticleEdit.auto_velocity -> use_auto_velocity: boolean Calculate point velocities automatically
+ParticleEdit.draw_particles -> show_particles: boolean Draw actual particles
+ParticleEdit.editable -> is_editable: boolean, (read-only) A valid edit mode exists
+ParticleEdit.emitter_deflect -> use_emitter_deflect: boolean Keep paths from intersecting the emitter
+ParticleEdit.fade_time -> use_fade_time: boolean Fade paths and keys further away from current frame
+TODO * ParticleEdit.hair -> hair: boolean, (read-only) Editing hair
+ParticleEdit.keep_lengths -> use_keep_lengths: boolean Keep path lengths constant
+ParticleEdit.keep_root -> use_keep_root: boolean Keep root keys unmodified
+ParticleFluidSettings.drops -> show_drops: boolean Show drop particles
+ParticleFluidSettings.floats -> show_floats: boolean Show floating foam particles
+ParticleFluidSettings.tracer -> show_tracer: boolean Show tracer particles
+ParticleInstanceModifier.alive -> show_alive: boolean Show instances when particles are alive
+ParticleInstanceModifier.children -> use_children: boolean Create instances from child particles
+ParticleInstanceModifier.dead -> show_dead: boolean Show instances when particles are dead
+ParticleInstanceModifier.keep_shape -> use_keep_shape: boolean Don't stretch the object
+ParticleInstanceModifier.normal -> use_normal: boolean Create instances from normal particles
+ParticleInstanceModifier.size -> use_size: boolean Use particle size to scale the instances
+ParticleInstanceModifier.unborn -> show_unborn: boolean Show instances when particles are unborn
+ParticleInstanceModifier.use_path -> use_path: boolean Create instances along particle paths
+ParticleSettings.abs_path_time -> use_abs_path_time: boolean Path timing is in absolute frames
+ParticleSettings.animate_branching -> use_animate_branching: boolean Animate branching
+ParticleSettings.billboard_lock -> lock_billboard: boolean Lock the billboards align axis
+ParticleSettings.boids_2d -> lock_boids_to_surface: boolean Constrain boids to a surface
+ParticleSettings.branching -> use_branching: boolean Branch child paths from each other
+ParticleSettings.child_effector -> use_child_effector: boolean Apply effectors to children
+ParticleSettings.child_guide -> use_child_guide: boolean
+ParticleSettings.child_render -> use_child_render: boolean
+ParticleSettings.die_on_collision -> use_die_on_collision: boolean Particles die when they collide with a deflector object
+ParticleSettings.died -> show_died: boolean Show particles after they have died
+ParticleSettings.draw_health -> show_health: boolean Draw boid health
+ParticleSettings.emitter -> use_emitter: boolean Render emitter Object also
+ParticleSettings.enable_simplify -> use_simplify: boolean Remove child strands as the object becomes smaller on the screen
+ParticleSettings.even_distribution -> use_even_distribution: boolean Use even distribution from faces based on face areas or edge lengths
+ParticleSettings.grid_invert -> invert_grid: boolean Invert what is considered object and what is not
+ParticleSettings.hair_bspline -> use_hair_bspline: boolean Interpolate hair using B-Splines
+TODO * ParticleSettings.hair_geometry -> hair_geometry: boolean
+ParticleSettings.material_color -> show_material_color: boolean Draw particles using material's diffuse color
+ParticleSettings.num -> use_number: boolean Show particle number
+ParticleSettings.parent -> use_parent: boolean Render parent particles
+ParticleSettings.rand_group -> use_random_group: boolean Pick objects from group randomly
+ParticleSettings.react_multiple -> use_react_multiple: boolean React multiple times
+ParticleSettings.react_start_end -> use_react_start_end: boolean Give birth to unreacted particles eventually
+ParticleSettings.render_adaptive -> show_path_steps: boolean Draw steps of the particle path
+ParticleSettings.render_strand -> use_render_strand: boolean Use the strand primitive for rendering
+ParticleSettings.rotation_dynamic -> use_rotation_dynamic: boolean Sets rotation to dynamic/constant
+ParticleSettings.self_effect -> use_self_effect: boolean Particle effectors effect themselves
+ParticleSettings.show_size -> show_size: boolean Show particle size
+ParticleSettings.size_deflect -> use_size_deflect: boolean Use particle's size in deflection
+ParticleSettings.sizemass -> use_multiply_size_mass: boolean Multiply mass by particle size
+ParticleSettings.symmetric_branching -> use_symmetric_branching: boolean Start and end points are the same
+ParticleSettings.trand -> use_emit_random: boolean Emit in random order of elements
+ParticleSettings.unborn -> show_unborn: boolean Show particles before they are emitted
+ParticleSettings.use_global_dupli -> use_global_dupli: boolean Use object's global coordinates for duplication
+ParticleSettings.use_group_count -> use_group_count: boolean Use object multiple times in the same group
+ParticleSettings.velocity -> show_velocity: boolean Show particle velocity
+ParticleSettings.velocity_length -> use_velocity_length: boolean Multiply line length by particle speed
+TODO * ParticleSettings.viewport -> viewport: boolean
+ParticleSettings.whole_group -> use_whole_group: boolean Use whole group at once
+ParticleSystem.editable -> is_editable: boolean, (read-only) Particle system can be edited in particle mode
+ParticleSystem.edited -> is_edited: boolean, (read-only) Particle system has been edited in particle mode
+TODO * ParticleSystem.global_hair -> global_hair: boolean, (read-only) Hair keys are in global coordinate space
+ParticleSystem.hair_dynamics -> use_hair_dynamics: boolean Enable hair dynamics using cloth simulation
+ParticleSystem.keyed_timing -> use_keyed_timing: boolean Use key times
+TODO * ParticleSystem.multiple_caches -> multiple_caches: boolean, (read-only) Particle system has multiple point caches
+ParticleSystem.vertex_group_clump_negate -> invert_vertex_group_clump: boolean Negate the effect of the clump vertex group
+ParticleSystem.vertex_group_density_negate -> invert_vertex_group_density: boolean Negate the effect of the density vertex group
+ParticleSystem.vertex_group_field_negate -> invert_vertex_group_field: boolean Negate the effect of the field vertex group
+ParticleSystem.vertex_group_kink_negate -> invert_vertex_group_kink: boolean Negate the effect of the kink vertex group
+ParticleSystem.vertex_group_length_negate -> invert_vertex_group_length: boolean Negate the effect of the length vertex group
+ParticleSystem.vertex_group_rotation_negate -> invert_vertex_group_rotation: boolean Negate the effect of the rotation vertex group
+ParticleSystem.vertex_group_roughness1_negate -> invert_vertex_group_roughness1: boolean Negate the effect of the roughness 1 vertex group
+ParticleSystem.vertex_group_roughness2_negate -> invert_vertex_group_roughness2: boolean Negate the effect of the roughness 2 vertex group
+ParticleSystem.vertex_group_roughness_end_negate -> invert_vertex_group_roughness_end: boolean Negate the effect of the roughness end vertex group
+ParticleSystem.vertex_group_size_negate -> invert_vertex_group_size: boolean Negate the effect of the size vertex group
+ParticleSystem.vertex_group_tangent_negate -> invert_vertex_group_tangent: boolean Negate the effect of the tangent vertex group
+ParticleSystem.vertex_group_velocity_negate -> invert_vertex_group_velocity: boolean Negate the effect of the velocity vertex group
+TODO * ParticleTarget.valid -> valid: boolean Keyed particles target is valid
+PivotConstraint.use_relative_position -> use_relative_position: boolean Offset will be an absolute point in space instead of relative to the target
+PointCache.baked -> is_baked: boolean, (read-only)
+TODO * PointCache.baking -> baking: boolean, (read-only)
+PointCache.disk_cache -> use_disk_cache: boolean Save cache files to disk (.blend file must be saved first)
+PointCache.external -> use_external: boolean Read cache from an external location
+TODO * PointCache.frames_skipped -> frames_skipped: boolean, (read-only)
+PointCache.outdated -> is_outdated: boolean, (read-only)
+PointCache.quick_cache -> use_quick_cache: boolean Update simulation with cache steps
+PointCache.use_library_path -> use_library_path: boolean Use this files path when library linked into another file.
+PointDensity.turbulence -> use_turbulence: boolean Add directed noise to the density at render-time
+PointLamp.only_shadow -> use_shadow_only: boolean Causes light to cast shadows only without illuminating objects
+PointLamp.shadow_layer -> use_shadow_own_layer: boolean Causes only objects on the same layer to cast shadows
+PointLamp.sphere -> use_sphere: boolean Sets light intensity to zero beyond lamp distance
+PoseBone.has_ik -> is_in_ik_chain: boolean, (read-only) Is part of an IK chain
+TODO * PoseBone.ik_dof_x -> ik_dof_x: boolean Allow movement around the X axis
+TODO * PoseBone.ik_dof_y -> ik_dof_y: boolean Allow movement around the Y axis
+TODO * PoseBone.ik_dof_z -> ik_dof_z: boolean Allow movement around the Z axis
+PoseBone.ik_limit_x -> lock_ik_x: boolean Limit movement around the X axis
+PoseBone.ik_limit_y -> lock_ik_y: boolean Limit movement around the Y axis
+PoseBone.ik_limit_z -> lock_ik_z: boolean Limit movement around the Z axis
+PoseBone.ik_lin_control -> use_ik_lin_control: boolean Apply channel size as IK constraint if stretching is enabled
+PoseBone.ik_rot_control -> use_ik_rot_control: boolean Apply channel rotation as IK constraint
+PoseBone.lock_location -> lock_location: boolean Lock editing of location in the interface
+PoseBone.lock_rotation -> lock_rotation: boolean Lock editing of rotation in the interface
+PoseBone.lock_rotation_w -> lock_rotation_w: boolean Lock editing of 'angle' component of four-component rotations in the interface
+PoseBone.lock_rotations_4d -> lock_rotations_4d: boolean Lock editing of four component rotations by components (instead of as Eulers)
+PoseBone.lock_scale -> lock_scale: boolean Lock editing of scale in the interface
+TODO * PoseBone.selected -> selected: boolean
+PoseTemplateSettings.generate_def_rig -> use_generate_def_rig: boolean Create a copy of the metarig, constrainted by the generated rig
+Property.is_never_none -> is_never_none: boolean, (read-only) True when this value can't be set to None
+Property.is_readonly -> is_readonly: boolean, (read-only) Property is editable through RNA
+Property.is_required -> is_required: boolean, (read-only) False when this property is an optional argument in an RNA function
+Property.registered -> is_registered: boolean, (read-only) Property is registered as part of type registration
+Property.registered_optional -> is_registered_optional: boolean, (read-only) Property is optionally registered as part of type registration
+Property.use_output -> is_output: boolean, (read-only) True when this property is an output value from an RNA function
+TODO * PythonConstraint.script_error -> is_script_error: boolean, (read-only) The linked Python script has thrown an error
+PythonConstraint.use_targets -> use_targets: boolean Use the targets indicated in the constraint panel
+PythonController.debug -> use_debug: boolean Continuously reload the module from disk for editing external modules without restarting
+RandomActuator.always_true -> use_always_true: boolean Always false or always true
+RaySensor.x_ray_mode -> use_x_ray_mode: boolean Toggle X-Ray option (see through objects that don't have the property)
+RegionView3D.box_clip -> use_box_clip: boolean Clip objects based on what's visible in other side views
+RegionView3D.box_preview -> show_synced_view: boolean Sync view position between side views
+RegionView3D.lock_rotation -> lock_rotation: boolean Lock view rotation in side views
+TODO * RenderEngine.bl_postprocess -> use_bl_postprocess: boolean
+TODO * RenderEngine.bl_preview -> use_bl_preview: boolean
+TODO * RenderLayer.all_z -> all_z: boolean, (read-only) Fill in Z values for solid faces in invisible layers, for masking
+TODO * RenderLayer.edge -> edge: boolean, (read-only) Render Edge-enhance in this Layer (only works for Solid faces)
+TODO * RenderLayer.enabled -> enabled: boolean, (read-only) Disable or enable the render layer
+TODO * RenderLayer.halo -> halo: boolean, (read-only) Render Halos in this Layer (on top of Solid)
+TODO * RenderLayer.pass_ao -> pass_ao: boolean, (read-only) Deliver AO pass
+TODO * RenderLayer.pass_ao_exclude -> pass_ao_exclude: boolean, (read-only) Exclude AO pass from combined
+TODO * RenderLayer.pass_color -> pass_color: boolean, (read-only) Deliver shade-less color pass
+TODO * RenderLayer.pass_combined -> pass_combined: boolean, (read-only) Deliver full combined RGBA buffer
+TODO * RenderLayer.pass_diffuse -> pass_diffuse: boolean, (read-only) Deliver diffuse pass
+TODO * RenderLayer.pass_emit -> pass_emit: boolean, (read-only) Deliver emission pass
+TODO * RenderLayer.pass_emit_exclude -> pass_emit_exclude: boolean, (read-only) Exclude emission pass from combined
+TODO * RenderLayer.pass_environment -> pass_environment: boolean, (read-only) Deliver environment lighting pass
+TODO * RenderLayer.pass_environment_exclude -> pass_environment_exclude: boolean, (read-only) Exclude environment pass from combined
+TODO * RenderLayer.pass_indirect -> pass_indirect: boolean, (read-only) Deliver indirect lighting pass
+TODO * RenderLayer.pass_indirect_exclude -> pass_indirect_exclude: boolean, (read-only) Exclude indirect pass from combined
+TODO * RenderLayer.pass_mist -> pass_mist: boolean, (read-only) Deliver mist factor pass (0.0-1.0)
+TODO * RenderLayer.pass_normal -> pass_normal: boolean, (read-only) Deliver normal pass
+TODO * RenderLayer.pass_object_index -> pass_object_index: boolean, (read-only) Deliver object index pass
+TODO * RenderLayer.pass_reflection -> pass_reflection: boolean, (read-only) Deliver raytraced reflection pass
+TODO * RenderLayer.pass_reflection_exclude -> pass_reflection_exclude: boolean, (read-only) Exclude raytraced reflection pass from combined
+TODO * RenderLayer.pass_refraction -> pass_refraction: boolean, (read-only) Deliver raytraced refraction pass
+TODO * RenderLayer.pass_refraction_exclude -> pass_refraction_exclude: boolean, (read-only) Exclude raytraced refraction pass from combined
+TODO * RenderLayer.pass_shadow -> pass_shadow: boolean, (read-only) Deliver shadow pass
+TODO * RenderLayer.pass_shadow_exclude -> pass_shadow_exclude: boolean, (read-only) Exclude shadow pass from combined
+TODO * RenderLayer.pass_specular -> pass_specular: boolean, (read-only) Deliver specular pass
+TODO * RenderLayer.pass_specular_exclude -> pass_specular_exclude: boolean, (read-only) Exclude specular pass from combined
+TODO * RenderLayer.pass_uv -> pass_uv: boolean, (read-only) Deliver texture UV pass
+TODO * RenderLayer.pass_vector -> pass_vector: boolean, (read-only) Deliver speed vector pass
+TODO * RenderLayer.pass_z -> pass_z: boolean, (read-only) Deliver Z values pass
+TODO * RenderLayer.sky -> sky: boolean, (read-only) Render Sky in this Layer
+TODO * RenderLayer.solid -> solid: boolean, (read-only) Render Solid faces in this Layer
+TODO * RenderLayer.strand -> strand: boolean, (read-only) Render Strands in this Layer
+TODO * RenderLayer.visible_layers -> visible_layers: boolean, (read-only) Scene layers included in this render layer
+TODO * RenderLayer.zmask -> zmask: boolean, (read-only) Only render what's in front of the solid z values
+TODO * RenderLayer.zmask_layers -> zmask_layers: boolean, (read-only) Zmask scene layers
+TODO * RenderLayer.zmask_negate -> zmask_negate: boolean, (read-only) For Zmask, only render what is behind solid z values instead of in front
+TODO * RenderLayer.ztransp -> ztransp: boolean, (read-only) Render Z-Transparent faces in this Layer (On top of Solid and Halos)
+RenderSettings.backbuf -> use_backbuf: boolean Render backbuffer image
+RenderSettings.bake_active -> use_bake_active: boolean Bake shading on the surface of selected objects to the active object
+RenderSettings.bake_clear -> use_bake_clear: boolean Clear Images before baking
+RenderSettings.bake_enable_aa -> use_bake_enable_aa: boolean Enables Anti-aliasing
+RenderSettings.bake_normalized -> use_bake_normalized: boolean With displacement normalize to the distance, with ambient occlusion normalize without using material settings
+RenderSettings.cineon_log -> use_cineon_log: boolean Convert to logarithmic color space
+RenderSettings.color_management -> use_color_management: boolean Use color profiles and gamma corrected imaging pipeline
+RenderSettings.crop_to_border -> use_crop_to_border: boolean Crop the rendered frame to the defined border size
+RenderSettings.edge -> edge: boolean use_Create a toon outline around the edges of geometry
+RenderSettings.exr_half -> use_exr_half: boolean Use 16 bit floats instead of 32 bit floats per channel
+RenderSettings.exr_preview -> use_exr_preview: boolean When rendering animations, save JPG preview images in same directory
+RenderSettings.exr_zbuf -> use_exr_zbuf: boolean Save the z-depth per pixel (32 bit unsigned int zbuffer)
+RenderSettings.ffmpeg_autosplit -> use_ffmpeg_autosplit: boolean Autosplit output at 2GB boundary
+RenderSettings.fields -> use_fields: boolean Render image to two fields per frame, for interlaced TV output
+RenderSettings.fields_still -> use_fields_still: boolean Disable the time difference between fields
+RenderSettings.free_image_textures -> use_free_image_textures: boolean Free all image texture from memory after render, to save memory before compositing
+RenderSettings.free_unused_nodes -> use_free_unused_nodes: boolean Free Nodes that are not used while compositing, to save memory
+RenderSettings.full_sample -> use_full_sample: boolean Save for every anti-aliasing sample the entire RenderLayer results. This solves anti-aliasing issues with compositing
+RenderSettings.is_movie_format -> is_movie_format: boolean, (read-only) When true the format is a movie
+RenderSettings.jpeg2k_ycc -> use_jpeg2k_ycc: boolean Save luminance-chrominance-chrominance channels instead of RGB colors
+RenderSettings.motion_blur -> use_motion_blur: boolean Use multi-sampled 3D scene motion blur
+TODO * RenderSettings.multiple_engines -> multiple_engines: boolean, (read-only) More than one rendering engine is available
+RenderSettings.render_antialiasing -> use_render_antialiasing: boolean Render and combine multiple samples per pixel to prevent jagged edges
+TODO doubled?* RenderSettings.render_stamp -> render_stamp: boolean Render the stamp info text in the rendered image
+RenderSettings.save_buffers -> use_save_buffers: boolean Save tiles for all RenderLayers and SceneNodes to files in the temp directory (saves memory, required for Full Sample)
+RenderSettings.simplify_triangulate -> use_simplify_triangulate: boolean Disables non-planer quads being triangulated
+RenderSettings.single_layer -> use_active_layer: boolean Only render the active layer
+RenderSettings.stamp_camera -> use_stamp_camera: boolean Include the name of the active camera in image metadata
+RenderSettings.stamp_date -> use_stamp_date: boolean Include the current date in image metadata
+RenderSettings.stamp_filename -> use_stamp_filename: boolean Include the filename of the .blend file in image metadata
+RenderSettings.stamp_frame -> use_stamp_frame: boolean Include the frame number in image metadata
+RenderSettings.stamp_marker -> use_stamp_marker: boolean Include the name of the last marker in image metadata
+RenderSettings.stamp_note -> use_stamp_note: boolean Include a custom note in image metadata
+RenderSettings.stamp_render_time -> use_stamp_render_time: boolean Include the render time in the stamp image
+RenderSettings.stamp_scene -> use_stamp_scene: boolean Include the name of the active scene in image metadata
+RenderSettings.stamp_sequencer_strip -> use_stamp_sequencer_strip: boolean Include the name of the foreground sequence strip in image metadata
+RenderSettings.stamp_time -> use_stamp_time: boolean Include the render frame as HH:MM:SS.FF in image metadata
+RenderSettings.tiff_bit -> use_tiff_bit: boolean Save TIFF with 16 bits per channel
+RenderSettings.use_border -> use_border: boolean Render a user-defined border region, within the frame size. Note, this disables save_buffers and full_sample
+RenderSettings.use_compositing -> use_compositing: boolean Process the render result through the compositing pipeline, if compositing nodes are enabled
+RenderSettings.use_envmaps -> use_envmaps: boolean Calculate environment maps while rendering
+RenderSettings.use_file_extension -> use_file_extension: boolean Add the file format extensions to the rendered file name (eg: filename + .jpg)
+RenderSettings.use_game_engine -> use_game_engine: boolean, (read-only) Current rendering engine is a game engine
+RenderSettings.use_instances -> use_instances: boolean Instance support leads to effective memory reduction when using duplicates
+RenderSettings.use_local_coords -> use_local_coords: boolean Vertex coordinates are stored localy on each primitive. Increases memory usage, but may have impact on speed
+RenderSettings.use_overwrite -> use_overwrite: boolean Overwrite existing files while rendering
+RenderSettings.use_placeholder -> use_placeholder: boolean Create empty placeholder files while rendering frames (similar to Unix 'touch')
+RenderSettings.use_radiosity -> use_radiosity: boolean Calculate radiosity in a pre-process before rendering
+RenderSettings.use_raytracing -> use_raytracing: boolean Pre-calculate the raytrace accelerator and render raytracing effects
+RenderSettings.use_sequencer -> use_sequencer: boolean Process the render (and composited) result through the video sequence editor pipeline, if sequencer strips exist
+RenderSettings.use_sequencer_gl_preview -> use_sequencer_gl_preview: boolean
+RenderSettings.use_sequencer_gl_render -> use_sequencer_gl_render: boolean
+RenderSettings.use_shadows -> use_shadows: boolean Calculate shadows while rendering
+RenderSettings.use_simplify -> use_simplify: boolean Enable simplification of scene for quicker preview renders
+RenderSettings.use_sss -> use_sss: boolean Calculate sub-surface scattering in materials rendering
+RenderSettings.use_textures -> use_textures: boolean Use textures to affect material properties
+RigidBodyJointConstraint.disable_linked_collision -> use_disable_linked_collision: boolean Disable collision between linked bodies
+RigidBodyJointConstraint.draw_pivot -> show_pivot: boolean Display the pivot point and rotation in 3D view
+Scene.frame_drop -> use_frame_drop: boolean Play back dropping frames if frame display is too slow
+TODO * Scene.layers -> layers: boolean Layers visible when rendering the scene
+TODO * Scene.mute_audio -> mute_audio: boolean Play back of audio from Sequence Editor will be muted
+TODO * Scene.nla_tweakmode_on -> is_nla_tweakmode_on: boolean, (read-only) Indicates whether there is any action referenced by NLA being edited. Strictly read-only
+Scene.pov_radio_always_sample -> use_pov_radio_always_sample: boolean Only use the data from the pretrace step and not gather any new samples during the final radiosity pass
+Scene.pov_radio_display_advanced -> show_pov_radio_advanced: boolean Show advanced options
+Scene.pov_radio_enable -> use_pov_radio_enable: boolean Enable povrays radiosity calculation
+Scene.pov_radio_media -> use_pov_radio_media: boolean Radiosity estimation can be affected by media
+Scene.pov_radio_normal -> use_pov_radio_normal: boolean Radiosity estimation can be affected by normals
+Scene.scrub_audio -> use_scrub_audio: boolean Play audio from Sequence Editor while scrubbing
+Scene.sync_audio -> use_sync_audio: boolean Play back and sync with audio clock, dropping frames if frame display is too slow
+Scene.use_gravity -> use_gravity: boolean Use global gravity for all dynamics
+Scene.use_nodes -> use_nodes: boolean Enable the compositing node tree
+Scene.use_preview_range -> use_preview_range: boolean Use an alternative start/end frame for UI playback, rather than the scene start/end frame
+SceneGameData.activity_culling -> use_activity_culling: boolean Activity culling is enabled
+SceneGameData.auto_start -> use_auto_start: boolean Automatically start game at load time
+SceneGameData.fullscreen -> show_fullscreen: boolean Starts player in a new fullscreen display
+SceneGameData.glsl_extra_textures -> use_glsl_extra_textures: boolean Use extra textures like normal or specular maps for GLSL rendering
+SceneGameData.glsl_lights -> use_glsl_lights: boolean Use lights for GLSL rendering
+SceneGameData.glsl_nodes -> use_glsl_nodes: boolean Use nodes for GLSL rendering
+SceneGameData.glsl_ramps -> use_glsl_ramps: boolean Use ramps for GLSL rendering
+SceneGameData.glsl_shaders -> use_glsl_shaders: boolean Use shaders for GLSL rendering
+SceneGameData.glsl_shadows -> use_glsl_shadows: boolean Use shadows for GLSL rendering
+SceneGameData.show_debug_properties -> show_debug_properties: boolean Show properties marked for debugging while the game runs
+SceneGameData.show_framerate_profile -> show_framerate_profile: boolean Show framerate and profiling information while the game runs
+SceneGameData.show_physics_visualization -> show_physics_visualization: boolean Show a visualization of physics bounds and interactions
+SceneGameData.use_animation_record -> use_animation_record: boolean Record animation to fcurves
+SceneGameData.use_deprecation_warnings -> use_deprecation_warnings: boolean Print warnings when using deprecated features in the python API
+SceneGameData.use_display_lists -> use_display_lists: boolean Use display lists to speed up rendering by keeping geometry on the GPU
+SceneGameData.use_frame_rate -> use_frame_rate: boolean Respect the frame rate rather than rendering as many frames as possible
+SceneGameData.use_occlusion_culling -> use_occlusion_culling: boolean Use optimized Bullet DBVT tree for view frustum and occlusion culling
+SceneRenderLayer.all_z -> use_all_z: boolean Fill in Z values for solid faces in invisible layers, for masking
+SceneRenderLayer.edge -> use_edge: boolean Render Edge-enhance in this Layer (only works for Solid faces)
+TODO * SceneRenderLayer.enabled -> enabled: boolean Disable or enable the render layer
+SceneRenderLayer.halo -> use_halo: boolean Render Halos in this Layer (on top of Solid)
+SceneRenderLayer.pass_ao -> use_pass_ao: boolean Deliver AO pass
+SceneRenderLayer.pass_ao_exclude -> use_pass_ao_exclude: boolean Exclude AO pass from combined
+SceneRenderLayer.pass_color -> use_pass_color: boolean Deliver shade-less color pass
+SceneRenderLayer.pass_combined -> use_pass_combined: boolean Deliver full combined RGBA buffer
+SceneRenderLayer.pass_diffuse -> use_pass_diffuse: boolean Deliver diffuse pass
+SceneRenderLayer.pass_emit -> use_pass_emit: boolean Deliver emission pass
+SceneRenderLayer.pass_emit_exclude -> use_pass_emit_exclude: boolean Exclude emission pass from combined
+SceneRenderLayer.pass_environment -> use_pass_environment: boolean Deliver environment lighting pass
+SceneRenderLayer.pass_environment_exclude -> use_pass_environment_exclude: boolean Exclude environment pass from combined
+SceneRenderLayer.pass_indirect -> use_pass_indirect: boolean Deliver indirect lighting pass
+SceneRenderLayer.pass_indirect_exclude -> use_pass_indirect_exclude: boolean Exclude indirect pass from combined
+SceneRenderLayer.pass_mist -> use_pass_mist: boolean Deliver mist factor pass (0.0-1.0)
+SceneRenderLayer.pass_normal -> use_pass_normal: boolean Deliver normal pass
+SceneRenderLayer.pass_object_index -> use_pass_object_index: boolean Deliver object index pass
+SceneRenderLayer.pass_reflection -> use_pass_reflection: boolean Deliver raytraced reflection pass
+SceneRenderLayer.pass_reflection_exclude -> use_pass_reflection_exclude: boolean Exclude raytraced reflection pass from combined
+SceneRenderLayer.pass_refraction -> use_pass_refraction: boolean Deliver raytraced refraction pass
+SceneRenderLayer.pass_refraction_exclude -> use_pass_refraction_exclude: boolean Exclude raytraced refraction pass from combined
+SceneRenderLayer.pass_shadow -> use_pass_shadow: boolean Deliver shadow pass
+SceneRenderLayer.pass_shadow_exclude -> use_pass_shadow_exclude: boolean Exclude shadow pass from combined
+SceneRenderLayer.pass_specular -> use_pass_specular: boolean Deliver specular pass
+SceneRenderLayer.pass_specular_exclude -> use_pass_specular_exclude: boolean Exclude specular pass from combined
+SceneRenderLayer.pass_uv -> use_pass_uv: boolean Deliver texture UV pass
+SceneRenderLayer.pass_vector -> use_pass_vector: boolean Deliver speed vector pass
+SceneRenderLayer.pass_z -> use_pass_z: boolean Deliver Z values pass
+SceneRenderLayer.sky -> use_sky: boolean Render Sky in this Layer
+SceneRenderLayer.solid -> use_solid: boolean Render Solid faces in this Layer
+SceneRenderLayer.strand -> use_strand: boolean Render Strands in this Layer
+SceneRenderLayer.visible_layers -> visible_layers: boolean Scene layers included in this render layer
+SceneRenderLayer.zmask -> use_zmask: boolean Only render what's in front of the solid z values
+SceneRenderLayer.zmask_layers -> use_zmask_layers: boolean Zmask scene layers
+SceneRenderLayer.zmask_negate -> use_zmask_negate: boolean For Zmask, only render what is behind solid z values instead of in front
+SceneRenderLayer.ztransp -> use_ztransp: boolean Render Z-Transparent faces in this Layer (On top of Solid and Halos)
+TODO * SceneSequence.convert_float -> convert_float: boolean Convert input to float data
+TODO * SceneSequence.de_interlace -> de_interlace: boolean For video movies to remove fields
+TODO * SceneSequence.flip_x -> flip_x: boolean Flip on the X axis
+TODO * SceneSequence.flip_y -> flip_y: boolean Flip on the Y axis
+TODO * SceneSequence.premultiply -> premultiply: boolean Convert RGB from key alpha to premultiplied alpha
+TODO * SceneSequence.proxy_custom_directory -> proxy_custom_directory: boolean Use a custom directory to store data
+TODO * SceneSequence.proxy_custom_file -> proxy_custom_file: boolean Use a custom file to read proxy data from
+TODO * SceneSequence.reverse_frames -> reverse_frames: boolean Reverse frame order
+TODO * SceneSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
+TODO * SceneSequence.use_crop -> use_crop: boolean Crop image before processing
+TODO * SceneSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
+TODO * SceneSequence.use_translation -> use_translation: boolean Translate image before processing
+Scopes.use_full_resolution -> use_full_resolution: boolean Sample every pixel of the image
+Screen.animation_playing -> is_animation_playing: boolean, (read-only) Animation playback is active
+Screen.fullscreen -> is_fullscreen: boolean, (read-only) An area is maximised, filling this screen
+ScrewModifier.use_normal_calculate -> use_normal_calculate: boolean Calculate the order of edges (needed for meshes, but not curves)
+ScrewModifier.use_normal_flip -> use_normal_flip: boolean Flip normals of lathed faces
+ScrewModifier.use_object_screw_offset -> use_object_screw_offset: boolean Use the distance between the objects to make a screw
+Sculpt.lock_x -> lock_x: boolean Disallow changes to the X axis of vertices
+Sculpt.lock_y -> lock_y: boolean Disallow changes to the Y axis of vertices
+Sculpt.lock_z -> lock_z: boolean Disallow changes to the Z axis of vertices
+Sculpt.symmetry_x -> use_symmetry_x: boolean Mirror brush across the X axis
+Sculpt.symmetry_y -> use_symmetry_y: boolean Mirror brush across the Y axis
+Sculpt.symmetry_z -> use_symmetry_z: boolean Mirror brush across the Z axis
+Sensor.expanded -> show_expanded: boolean Set sensor expanded in the user interface
+TODO * Sensor.invert -> invert: boolean Invert the level(output) of this sensor
+TODO * Sensor.level -> level: boolean Level detector, trigger controllers of new states(only applicable upon logic state transition)
+Sensor.pulse_false_level -> use_pulse_false_level: boolean Activate FALSE level triggering (pulse mode)
+Sensor.pulse_true_level -> use_pulse_true_level: boolean Activate TRUE level triggering (pulse mode)
+Sensor.tap -> use_tap: boolean Trigger controllers only for an instant, even while the sensor remains true
+TODO * Sequence.frame_locked -> frame_locked: boolean Lock the animation curve to the global frame counter
+TODO * Sequence.left_handle_selected -> left_handle_selected: boolean
+TODO * Sequence.lock -> lock: boolean Lock strip so that it can't be transformed
+TODO * Sequence.mute -> mute: boolean
+TODO * Sequence.right_handle_selected -> right_handle_selected: boolean
+TODO * Sequence.selected -> selected: boolean
+TODO * Sequence.use_effect_default_fade -> use_effect_default_fade: boolean Fade effect using the built-in default (usually make transition as long as effect strip)
+SequenceColorBalance.inverse_gain -> invert_gain: boolean
+SequenceColorBalance.inverse_gamma -> invert_gamma: boolean
+SequenceColorBalance.inverse_lift -> invert_lift: boolean
+ShaderNodeExtendedMaterial.diffuse -> use_diffuse: boolean Material Node outputs Diffuse
+ShaderNodeExtendedMaterial.invert_normal -> invert_normal: boolean Material Node uses inverted normal
+ShaderNodeExtendedMaterial.specular -> use_specular: boolean Material Node outputs Specular
+ShaderNodeMapping.clamp_maximum -> use_clamp_to_maximum: boolean Clamp the output coordinate to a maximum value
+ShaderNodeMapping.clamp_minimum -> use_clamp_to_minimum: boolean Clamp the output coordinate to a minimum value
+ShaderNodeMaterial.diffuse -> use_diffuse: boolean Material Node outputs Diffuse
+ShaderNodeMaterial.invert_normal -> invert_normal: boolean Material Node uses inverted normal
+ShaderNodeMaterial.specular -> use_specular: boolean Material Node outputs Specular
+ShaderNodeMixRGB.alpha -> use_alpha: boolean Include alpha of second input in this operation
+ShapeActionActuator.continue_last_frame -> use_continue_last_frame: boolean Restore last frame when switching on/off, otherwise play from the start each time
+TODO * ShapeKey.mute -> mute: boolean Mute this shape key
+TODO see below * ShrinkwrapConstraint.use_x -> use_x: boolean Projection over X Axis
+TODO see below* ShrinkwrapConstraint.use_y -> use_y: boolean Projection over Y Axis
+TODO see below* ShrinkwrapConstraint.use_z -> use_z: boolean Projection over Z Axis
+ShrinkwrapModifier.cull_back_faces -> use_cull_back_faces: boolean Stop vertices from projecting to a back face on the target
+ShrinkwrapModifier.cull_front_faces -> use_cull_front_faces: boolean Stop vertices from projecting to a front face on the target
+ShrinkwrapModifier.keep_above_surface -> use_keep_above_surface: boolean
+TODO * ShrinkwrapModifier.negative -> negative: boolean Allow vertices to move in the negative direction of axis
+TODO * ShrinkwrapModifier.positive -> positive: boolean Allow vertices to move in the positive direction of axis
+ShrinkwrapModifier.x -> use_x: boolean
+ShrinkwrapModifier.y -> use_y: boolean
+ShrinkwrapModifier.z -> use_z: boolean
+SimpleDeformModifier.lock_x_axis -> lock_axis_x: boolean
+SimpleDeformModifier.lock_y_axis -> lock_axis_y: boolean
+SimpleDeformModifier.relative -> use_relative: boolean Sets the origin of deform space to be relative to the object
+SmokeDomainSettings.dissolve_smoke -> use_dissolve_smoke: boolean Enable smoke to disappear over time
+SmokeDomainSettings.dissolve_smoke_log -> use_dissolve_smoke_log: boolean Using 1/x
+SmokeDomainSettings.highres -> use_highres: boolean Enable high resolution (using amplification)
+SmokeDomainSettings.initial_velocity -> use_initial_velocity: boolean Smoke inherits it's velocity from the emitter particle
+SmokeDomainSettings.viewhighres -> show_highres: boolean Show high resolution (using amplification)
+NEGATE * SmokeFlowSettings.outflow -> use_outflow: boolean Deletes smoke from simulation
+SmoothModifier.x -> use_x: boolean
+SmoothModifier.y -> use_y: boolean
+SmoothModifier.z -> use_z: boolean
+SoftBodySettings.auto_step -> use_auto_step: boolean Use velocities for automagic step sizes
+SoftBodySettings.diagnose -> use_diagnose: boolean Turn on SB diagnose console prints
+SoftBodySettings.edge_collision -> use_edge_collision: boolean Edges collide too
+SoftBodySettings.estimate_matrix -> use_estimate_matrix: boolean estimate matrix .. split to COM , ROT ,SCALE
+SoftBodySettings.face_collision -> use_face_collision: boolean Faces collide too, SLOOOOOW warning
+SoftBodySettings.new_aero -> use_new_aero: boolean New aero(uses angle and length)
+SoftBodySettings.self_collision -> use_self_collision: boolean Enable naive vertex ball self collision
+SoftBodySettings.stiff_quads -> use_stiff_quads: boolean Adds diagonal springs on 4-gons
+SoftBodySettings.use_edges -> use_edges: boolean Use Edges as springs
+SoftBodySettings.use_goal -> use_goal: boolean Define forces for vertices to stick to animated position
+TODO * SolidifyModifier.invert -> invert_vertex_groups_influence: boolean Invert the vertex group influence
+SolidifyModifier.use_even_offset -> use_even_offset: boolean Maintain thickness by adjusting for sharp corners (slow, disable when not needed)
+SolidifyModifier.use_quality_normals -> use_quality_normals: boolean Calculate normals which result in more even thickness (slow, disable when not needed)
+SolidifyModifier.use_rim -> use_rim: boolean Create edge loops between the inner and outer surfaces on face edges (slow, disable when not needed)
+SolidifyModifier.use_rim_material -> use_rim_material: boolean Use in the next material for rim faces
+Sound.caching -> use_ram_caching: boolean The sound file is decoded and loaded into RAM
+SoundActuator.enable_sound_3d -> use_sound_3d: boolean Enable/Disable 3D Sound
+SpaceConsole.show_report_debug -> show_report_debug: boolean Display debug reporting info
+SpaceConsole.show_report_error -> show_report_error: boolean Display error text
+SpaceConsole.show_report_info -> show_report_info: boolean Display general information
+SpaceConsole.show_report_operator -> show_report_operator: boolean Display the operator log
+SpaceConsole.show_report_warn -> show_report_warn: boolean Display warnings
+SpaceDopeSheetEditor.automerge_keyframes -> show_automerge_keyframes: boolean Show handles of Bezier control points
+SpaceDopeSheetEditor.realtime_updates -> use_realtime_updates: boolean When transforming keyframes, changes to the animation data are flushed to other views
+SpaceDopeSheetEditor.show_cframe_indicator -> show_cframe_indicator: boolean Show frame number beside the current frame indicator line
+SpaceDopeSheetEditor.show_seconds -> show_seconds: boolean, (read-only) Show timing in seconds not frames
+SpaceDopeSheetEditor.show_sliders -> show_sliders: boolean Show sliders beside F-Curve channels
+SpaceDopeSheetEditor.use_marker_sync -> use_marker_sync: boolean Sync Markers with keyframe edits
+SpaceGraphEditor.automerge_keyframes -> show_automerge_keyframes: boolean Show handles of Bezier control points
+TODO * SpaceGraphEditor.has_ghost_curves -> has_ghost_curves: boolean Graph Editor instance has some ghost curves stored
+SpaceGraphEditor.only_selected_curves_handles -> use_only_selected_curves_handles: boolean Only keyframes of selected F-Curves are visible and editable
+SpaceGraphEditor.only_selected_keyframe_handles -> use_only_selected_keyframe_handles: boolean Only show and edit handles of selected keyframes
+SpaceGraphEditor.realtime_updates -> use_realtime_updates: boolean When transforming keyframes, changes to the animation data are flushed to other views
+SpaceGraphEditor.show_cframe_indicator -> show_cframe_indicator: boolean Show frame number beside the current frame indicator line
+SpaceGraphEditor.show_cursor -> show_cursor: boolean Show 2D cursor
+SpaceGraphEditor.show_handles -> show_handles: boolean Show handles of Bezier control points
+SpaceGraphEditor.show_seconds -> show_seconds: boolean, (read-only) Show timing in seconds not frames
+SpaceGraphEditor.show_sliders -> show_sliders: boolean Show sliders beside F-Curve channels
+SpaceImageEditor.draw_repeated -> show_repeated: boolean Draw the image repeated outside of the main view
+SpaceImageEditor.image_painting -> use_image_painting: boolean Enable image painting mode
+SpaceImageEditor.image_pin -> show_image_pin: boolean Display current image regardless of object selection
+SpaceImageEditor.show_paint -> show_paint: boolean, (read-only) Show paint related properties
+SpaceImageEditor.show_render -> show_render: boolean, (read-only) Show render related properties
+SpaceImageEditor.show_uvedit -> show_uvedit: boolean, (read-only) Show UV editing related properties
+SpaceImageEditor.update_automatically -> use_update_automatically: boolean Update other affected window spaces automatically to reflect changes during interactive operations such as transform
+SpaceImageEditor.use_grease_pencil -> use_grease_pencil: boolean Display and edit the grease pencil freehand annotations overlay
+SpaceLogicEditor.actuators_show_active_objects -> show_actuators_active_objects: boolean Show actuators of active object
+SpaceLogicEditor.actuators_show_active_states -> show_actuators_active_states: boolean Show only actuators connected to active states
+SpaceLogicEditor.actuators_show_linked_controller -> show_actuators_linked_controller: boolean Show linked objects to the actuator
+SpaceLogicEditor.actuators_show_selected_objects -> show_actuators_selected_objects: boolean Show actuators of all selected objects
+SpaceLogicEditor.controllers_show_active_objects -> show_controllers_active_objects: boolean Show controllers of active object
+SpaceLogicEditor.controllers_show_linked_controller -> show_controllers_linked_controller: boolean Show linked objects to sensor/actuator
+SpaceLogicEditor.controllers_show_selected_objects -> show_controllers_selected_objects: boolean Show controllers of all selected objects
+SpaceLogicEditor.sensors_show_active_objects -> show_sensors_active_objects: boolean Show sensors of active object
+SpaceLogicEditor.sensors_show_active_states -> show_sensors_active_states: boolean Show only sensors connected to active states
+SpaceLogicEditor.sensors_show_linked_controller -> show_sensors_linked_controller: boolean Show linked objects to the controller
+SpaceLogicEditor.sensors_show_selected_objects -> show_sensors_selected_objects: boolean Show sensors of all selected objects
+SpaceNLA.realtime_updates -> use_realtime_updates: boolean When transforming strips, changes to the animation data are flushed to other views
+SpaceNLA.show_cframe_indicator -> show_cframe_indicator: boolean Show frame number beside the current frame indicator line
+SpaceNLA.show_seconds -> show_seconds: boolean, (read-only) Show timing in seconds not frames
+SpaceNLA.show_strip_curves -> show_strip_curves: boolean Show influence curves on strips
+SpaceNodeEditor.backdrop -> show_backdrop: boolean Use active Viewer Node output as backdrop for compositing nodes
+SpaceOutliner.match_case_sensitive -> use_match_case_sensitive: boolean Only use case sensitive matches of search string
+SpaceOutliner.match_complete -> use_match_complete: boolean Only use complete matches of search string
+SpaceOutliner.show_restriction_columns -> show_restriction_columns: boolean Show column
+SpaceProperties.brush_texture -> show_brush_texture: boolean Show brush textures
+SpaceProperties.use_pin_id -> use_pin_id: boolean Use the pinned context
+TODO * SpaceSequenceEditor.draw_frames -> draw_frames: boolean Draw frames rather than seconds
+TODO * SpaceSequenceEditor.draw_safe_margin -> draw_safe_margin: boolean Draw title safe margins in preview
+TODO * SpaceSequenceEditor.separate_color_preview -> separate_color_preview: boolean Separate color channels in preview
+TODO * SpaceSequenceEditor.show_cframe_indicator -> show_cframe_indicator: boolean Show frame number beside the current frame indicator line
+TODO * SpaceSequenceEditor.use_grease_pencil -> use_grease_pencil: boolean Display and edit the grease pencil freehand annotations overlay
+TODO * SpaceSequenceEditor.use_marker_sync -> use_marker_sync: boolean Transform markers as well as strips
+SpaceTextEditor.find_all -> use_find_all: boolean Search in all text datablocks, instead of only the active one
+SpaceTextEditor.find_wrap -> use_find_wrap: boolean Search again from the start of the file when reaching the end
+SpaceTextEditor.line_numbers -> show_line_numbers: boolean Show line numbers next to the text
+SpaceTextEditor.live_edit -> use_live_edit: boolean Run python while editing
+SpaceTextEditor.overwrite -> use_overwrite: boolean Overwrite characters when typing rather than inserting them
+SpaceTextEditor.syntax_highlight -> use_syntax_highlight: boolean Syntax highlight for scripting
+SpaceTextEditor.word_wrap -> use_word_wrap: boolean Wrap words if there is not enough horizontal space
+SpaceTimeline.only_selected -> use_only_selected: boolean Show keyframes for active Object and/or its selected channels only
+SpaceTimeline.play_all_3d -> use_play_all_3d: boolean
+SpaceTimeline.play_anim -> use_play_anim: boolean
+SpaceTimeline.play_buttons -> use_play_buttons: boolean
+SpaceTimeline.play_image -> use_play_image: boolean
+SpaceTimeline.play_nodes -> use_play_nodes: boolean
+SpaceTimeline.play_sequencer -> use_play_sequencer: boolean
+SpaceTimeline.play_top_left -> use_play_top_left: boolean
+SpaceTimeline.show_cframe_indicator -> show_cframe_indicator: boolean Show frame number beside the current frame indicator line
+SpaceUVEditor.constrain_to_image_bounds -> use_constrain_to_image_bounds: boolean Constraint to stay within the image bounds while editing
+SpaceUVEditor.draw_modified_edges -> show_modified_edges: boolean Draw edges after modifiers are applied
+SpaceUVEditor.draw_other_objects -> show_other_objects: boolean Draw other selected objects that share the same image
+SpaceUVEditor.draw_smooth_edges -> show_smooth_edges: boolean Draw UV edges anti-aliased
+SpaceUVEditor.draw_stretch -> show_stretch: boolean Draw faces colored according to the difference in shape between UVs and their 3D coordinates (blue for low distortion, red for high distortion)
+SpaceUVEditor.live_unwrap -> use_live_unwrap: boolean Continuously unwrap the selected UV island while transforming pinned vertices
+SpaceUVEditor.normalized_coordinates -> show_normalized_coordinates: boolean Display UV coordinates from 0.0 to 1.0 rather than in pixels
+SpaceUVEditor.snap_to_pixels -> use_snap_to_pixels: boolean Snap UVs to pixel locations while editing
+SpaceView3D.all_object_origins -> show_all_objects_origin: boolean Show the object origin center dot for all (selected and unselected) objects
+SpaceView3D.display_background_images -> show_background_images: boolean Display reference images behind objects in the 3D View
+SpaceView3D.display_floor -> show_floor: boolean Show the ground plane grid in perspective view
+SpaceView3D.display_render_override -> show_render_override: boolean Display only objects which will be rendered
+SpaceView3D.display_x_axis -> show_axis_x: boolean Show the X axis line in perspective view
+SpaceView3D.display_y_axis -> show_axis_y: boolean Show the Y axis line in perspective view
+SpaceView3D.display_z_axis -> show_axis_z: boolean Show the Z axis line in perspective view
+TODO * SpaceView3D.layers -> layers: boolean Layers visible in this 3D View
+SpaceView3D.lock_camera_and_layers -> lock_camera_and_layers: boolean Use the scene's active camera and layers in this view, rather than local layers
+SpaceView3D.manipulator -> use_manipulator: boolean Use a 3D manipulator widget for controlling transforms
+SpaceView3D.manipulator_rotate -> use_manipulator_rotate: boolean Use the manipulator for rotation transformations
+SpaceView3D.manipulator_scale -> use_manipulator_scale: boolean Use the manipulator for scale transformations
+SpaceView3D.manipulator_translate -> use_manipulator_translate: boolean Use the manipulator for movement transformations
+SpaceView3D.occlude_geometry -> use_occlude_geometry: boolean Limit selection to visible (clipped with depth buffer)
+SpaceView3D.outline_selected -> show_outline_selected: boolean Show an outline highlight around selected objects in non-wireframe views
+SpaceView3D.pivot_point_align -> use_pivot_point_align: boolean Manipulate object centers only
+SpaceView3D.relationship_lines -> show_relationship_lines: boolean Show dashed lines indicating parent or constraint relationships
+SpaceView3D.textured_solid -> show_textured_solid: boolean Display face-assigned textures in solid view
+TODO * SpaceView3D.used_layers -> used_layers: boolean, (read-only) Layers that contain something
+SpeedControlSequence.curve_compress_y -> use_curve_compress_y: boolean Scale F-Curve value to get the target frame number, F-Curve value runs from 0.0 to 1.0
+SpeedControlSequence.curve_velocity -> use_curve_velocity: boolean Interpret the F-Curve value as a velocity instead of a frame number
+SpeedControlSequence.frame_blending -> use_frame_blending: boolean Blend two frames into the target for a smoother result
+Spline.bezier_u -> use_bezier_u: boolean Make this nurbs curve or surface act like a bezier spline in the U direction (Order U must be 3 or 4, Cyclic U must be disabled)
+Spline.bezier_v -> use_bezier_v: boolean Make this nurbs surface act like a bezier spline in the V direction (Order V must be 3 or 4, Cyclic V must be disabled)
+Spline.cyclic_u -> use_cyclic_u: boolean Make this curve or surface a closed loop in the U direction
+Spline.cyclic_v -> use_cyclic_v: boolean Make this surface a closed loop in the V direction
+Spline.endpoint_u -> use_endpoint_u: boolean Make this nurbs curve or surface meet the endpoints in the U direction (Cyclic U must be disabled)
+Spline.endpoint_v -> use_endpoint_v: boolean Make this nurbs surface meet the endpoints in the V direction (Cyclic V must be disabled)
+TODO * Spline.hide -> hide: boolean Hide this curve in editmode
+Spline.smooth -> use_smooth: boolean Smooth the normals of the surface or beveled curve
+SplineIKConstraint.chain_offset -> use_chain_offset: boolean Offset the entire chain relative to the root joint
+TODO * SplineIKConstraint.even_divisions -> use_even_divisions: boolean Ignore the relative lengths of the bones when fitting to the curve
+SplineIKConstraint.use_curve_radius -> use_curve_radius: boolean Average radius of the endpoints is used to tweak the X and Z Scaling of the bones, on top of XZ Scale mode
+SplineIKConstraint.y_stretch -> use_y_stretch: boolean Stretch the Y axis of the bones to fit the curve
+TODO * SplinePoint.hidden -> hidden: boolean Visibility status
+TODO * SplinePoint.selected -> selected: boolean Selection status
+SpotLamp.auto_clip_end -> use_auto_clip_end: boolean Automatic calculation of clipping-end, based on visible vertices
+SpotLamp.auto_clip_start -> use_auto_clip_start: boolean Automatic calculation of clipping-start, based on visible vertices
+SpotLamp.halo -> use_halo: boolean Renders spotlight with a volumetric halo (Buffer Shadows)
+SpotLamp.only_shadow -> use_shadow_only: boolean Causes light to cast shadows only without illuminating objects
+SpotLamp.shadow_layer -> use_shadow_own_layer: boolean Causes only objects on the same layer to cast shadows
+SpotLamp.show_cone -> show_cone: boolean Draw transparent cone in 3D view to visualize which objects are contained in it
+SpotLamp.sphere -> use_sphere: boolean Sets light intensity to zero beyond lamp distance
+SpotLamp.square -> use_square: boolean Casts a square spot light shape
+TODO * StateActuator.state -> state: boolean
+SubsurfModifier.optimal_display -> show_optimal: boolean Skip drawing/rendering of interior subdivided edges
+SubsurfModifier.subsurf_uv -> use_subsurf_uv: boolean Use subsurf to subdivide UVs
+SunLamp.only_shadow -> use_shadow_only: boolean Causes light to cast shadows only without illuminating objects
+SunLamp.shadow_layer -> use_shadow_own_layer: boolean Causes only objects on the same layer to cast shadows
+SurfaceCurve.map_along_length -> use_map_along_length: boolean Generate texture mapping coordinates following the curve direction, rather than the local bounding box
+SurfaceCurve.vertex_normal_flip -> use_vertex_normal_flip: boolean Flip vertex normals towards the camera during render
+TexMapping.has_maximum -> use_clip_to_maximum: boolean Whether to use maximum clipping value
+TexMapping.has_minimum -> use_clip_to_minimum: boolean Whether to use minimum clipping value
+Text.dirty -> is_dirty: boolean, (read-only) Text file has been edited since last save
+Text.memory -> is_in_memory: boolean, (read-only) Text file is in memory, without a corresponding file on disk
+Text.modified -> is_modified: boolean, (read-only) Text file on disk is different than the one in memory
+Text.tabs_as_spaces -> use_tabs_as_spaces: boolean Automatically converts all new tabs into spaces
+Text.use_module -> use_module: boolean Register this text as a module on loading, Text name must end with '.py'
+TextCharacterFormat.bold -> use_bold: boolean
+TextCharacterFormat.italic -> use_italic: boolean
+TextCharacterFormat.style -> use_style: boolean
+TextCharacterFormat.underline -> use_underline: boolean
+TextCharacterFormat.wrap -> use_wrap: boolean
+TextCurve.fast -> use_fast_editing: boolean Don't fill polygons while editing
+TextCurve.map_along_length -> use_map_along_length: boolean Generate texture mapping coordinates following the curve direction, rather than the local bounding box
+TextCurve.vertex_normal_flip -> use_vertex_normal_flip: boolean Flip vertex normals towards the camera during render
+TextMarker.edit_all -> use_edit_all: boolean, (read-only) Edit all markers of the same group as one
+TODO * TextMarker.temporary -> is_temporary: boolean, (read-only) Marker is temporary
+Texture.use_color_ramp -> use_color_ramp: boolean Toggle color ramp operations
+Texture.use_nodes -> use_nodes: boolean Make this a node-based texture
+Texture.use_preview_alpha -> use_preview_alpha: boolean Show Alpha in Preview Render
+TextureNodeMixRGB.alpha -> use_alpha: boolean Include alpha of second input in this operation
+TextureSlot.negate -> use_negate: boolean Inverts the values of the texture to reverse its effect
+TextureSlot.rgb_to_intensity -> use_rgb_to_intensity: boolean Converts texture RGB values to intensity (gray) values
+TextureSlot.stencil -> use_stencil: boolean Use this texture as a blending value on the next texture
+ThemeBoneColorSet.colored_constraints -> show_colored_constraints: boolean Allow the use of colors indicating constraints/keyed status
+ThemeWidgetColors.shaded -> show_shaded: boolean
+TODO * TimelineMarker.selected -> selected: boolean Marker selection state
+ToolSettings.auto_normalize -> use_auto_normalize: boolean Ensure all bone-deforming vertex groups add up to 1.0 while weight painting
+ToolSettings.automerge_editing -> use_automerge_editing: boolean Automatically merge vertices moved to the same location
+ToolSettings.bone_sketching -> use_bone_sketching: boolean DOC BROKEN
+ToolSettings.etch_autoname -> use_etch_autoname: boolean DOC BROKEN
+ToolSettings.etch_overdraw -> use_etch_overdraw: boolean DOC BROKEN
+ToolSettings.etch_quick -> use_etch_quick: boolean DOC BROKEN
+ToolSettings.mesh_selection_mode -> use_mesh_selection_mode: boolean Which mesh elements selection works on
+ToolSettings.record_with_nla -> use_record_with_nla: boolean Add a new NLA Track + Strip for every loop/pass made over the animation to allow non-destructive tweaking
+ToolSettings.snap -> use_snap: boolean Snap during transform
+ToolSettings.snap_align_rotation -> use_snap_align_rotation: boolean Align rotation with the snapping target
+ToolSettings.snap_peel_object -> use_snap_peel_object: boolean Consider objects as whole when finding volume center
+ToolSettings.snap_project -> use_snap_project: boolean Project vertices on the surface of other objects
+ToolSettings.use_auto_keying -> use_keyframe_insert_auto: boolean Automatic keyframe insertion for Objects and Bones
+TODO * ToolSettings.uv_local_view -> showonly_uv_local_view: boolean Draw only faces with the currently displayed image assigned
+ToolSettings.uv_sync_selection -> use_uv_sync_selection: boolean Keep UV and edit mode mesh selection in sync
+TrackToConstraint.target_z -> use_target_z: boolean Target's Z axis, not World Z axis, will constraint the Up direction
+TransformConstraint.extrapolate_motion -> use_motion_extrapolate: boolean Extrapolate ranges
+TransformSequence.uniform_scale -> use_uniform_scale: boolean Scale uniformly, preserving aspect ratio
+UILayout.active -> active: boolean
+UILayout.enabled -> enabled: boolean
+UVProjectModifier.override_image -> show_override_image: boolean Override faces' current images with the given image
+UnitSettings.use_separate -> use_separate: boolean Display units in pairs
+UserPreferencesEdit.auto_keyframe_insert_available -> use_keyframe_insert_auto_available: boolean Automatic keyframe insertion in available curves
+UserPreferencesEdit.auto_keyframe_insert_keyingset -> use_keyframe_insert_auto_keyingset: boolean Automatic keyframe insertion using active Keying Set
+UserPreferencesEdit.drag_immediately -> use_drag_immediately: boolean Moving things with a mouse drag confirms when releasing the button
+UserPreferencesEdit.duplicate_action -> use_duplicate_action: boolean Causes actions to be duplicated with the object
+UserPreferencesEdit.duplicate_armature -> use_duplicate_armature: boolean Causes armature data to be duplicated with the object
+UserPreferencesEdit.duplicate_curve -> use_duplicate_curve: boolean Causes curve data to be duplicated with the object
+UserPreferencesEdit.duplicate_fcurve -> use_duplicate_fcurve: boolean Causes F-curve data to be duplicated with the object
+UserPreferencesEdit.duplicate_lamp -> use_duplicate_lamp: boolean Causes lamp data to be duplicated with the object
+UserPreferencesEdit.duplicate_material -> use_duplicate_material: boolean Causes material data to be duplicated with the object
+UserPreferencesEdit.duplicate_mesh -> use_duplicate_mesh: boolean Causes mesh data to be duplicated with the object
+UserPreferencesEdit.duplicate_metaball -> use_duplicate_metaball: boolean Causes metaball data to be duplicated with the object
+UserPreferencesEdit.duplicate_particle -> use_duplicate_particle: boolean Causes particle systems to be duplicated with the object
+UserPreferencesEdit.duplicate_surface -> use_duplicate_surface: boolean Causes surface data to be duplicated with the object
+UserPreferencesEdit.duplicate_text -> use_duplicate_text: boolean Causes text data to be duplicated with the object
+UserPreferencesEdit.duplicate_texture -> use_duplicate_texture: boolean Causes texture data to be duplicated with the object
+UserPreferencesEdit.enter_edit_mode -> use_enter_edit_mode: boolean Enter Edit Mode automatically after adding a new object
+UserPreferencesEdit.global_undo -> use_global_undo: boolean Global undo works by keeping a full copy of the file itself in memory, so takes extra memory
+UserPreferencesEdit.grease_pencil_simplify_stroke -> use_grease_pencil_simplify_stroke: boolean Simplify the final stroke
+UserPreferencesEdit.grease_pencil_smooth_stroke -> use_grease_pencil_smooth_stroke: boolean Smooth the final stroke
+UserPreferencesEdit.insertkey_xyz_to_rgb -> show_insertkey_xyz_to_rgb: boolean Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis
+UserPreferencesEdit.keyframe_insert_needed -> use_keyframe_insert_needed: boolean Keyframe insertion only when keyframe needed
+UserPreferencesEdit.snap_rotate -> use_snap_grid_rotate: boolean Snap objects and sub-objects to grid units when rotating
+UserPreferencesEdit.snap_scale -> use_snap_grid_scale: boolean Snap objects and sub-objects to grid units when scaling
+UserPreferencesEdit.snap_translate -> use_snap_grid_translate: boolean Snap objects and sub-objects to grid units when moving
+UserPreferencesEdit.use_auto_keying -> use_auto_keying: boolean Automatic keyframe insertion for Objects and Bones
+UserPreferencesEdit.use_negative_frames -> use_negative_frames: boolean Current frame number can be manually set to a negative value
+UserPreferencesEdit.use_visual_keying -> show_visual_keying: boolean Use Visual keying automatically for constrained objects
+
+UserPreferencesFilePaths.auto_save_temporary_files -> use_auto_save_temporary_files: boolean Automatic saving of temporary files
+UserPreferencesFilePaths.compress_file -> use_file_compression: boolean Enable file compression when saving .blend files
+UserPreferencesFilePaths.filter_file_extensions -> showonly_file_extensions: boolean Display only files with extensions in the image select window
+UserPreferencesFilePaths.hide_dot_files_datablocks -> show_dot_files_datablocks: boolean Hide files/datablocks that start with a dot(.*)
+UserPreferencesFilePaths.load_ui -> use_load_ui: boolean Load user interface setup when loading .blend files
+UserPreferencesFilePaths.save_preview_images -> use_save_preview_images: boolean Enables automatic saving of preview images in the .blend file
+UserPreferencesFilePaths.use_relative_paths -> use_relative_paths: boolean Default relative path option for the file selector
+UserPreferencesInput.continuous_mouse -> use_continuous_mouse: boolean Allow moving the mouse outside the view on some manipulations (transform, ui control drag)
+UserPreferencesInput.emulate_3_button_mouse -> use_emulate_3_button_mouse: boolean Emulates Middle Mouse with Alt+LeftMouse (doesn't work with Left Mouse Select option)
+UserPreferencesInput.emulate_numpad -> use_emulate_numpad: boolean Causes the 1 to 0 keys to act as the numpad (useful for laptops)
+UserPreferencesInput.invert_zoom_direction -> invert_zoom: boolean Invert the axis of mouse movement for zooming
+UserPreferencesSystem.auto_execute_scripts -> use_scripts_auto_execute: boolean Allow any .blend file to run scripts automatically (unsafe with blend files from an untrusted source)
+UserPreferencesSystem.enable_all_codecs -> use_preview_images: boolean Enables automatic saving of preview images in the .blend file (Windows only)
+UserPreferencesSystem.international_fonts -> use_fonts_international: boolean Use international fonts
+UserPreferencesSystem.tabs_as_spaces -> use_tabs_as_spaces: boolean Automatically converts all new tabs into spaces for new and loaded text files
+UserPreferencesSystem.translate_buttons -> show_translate_buttons: boolean Translate button labels
+UserPreferencesSystem.translate_toolbox -> show_translate_toolbox: boolean Translate toolbox menu
+UserPreferencesSystem.translate_tooltips -> show_translate_tooltips: boolean Translate Tooltips
+UserPreferencesSystem.use_antialiasing -> show_antialiasing: boolean Use anti-aliasing for the 3D view (may impact redraw performance)
+UserPreferencesSystem.use_mipmaps -> use_mipmaps: boolean Scale textures for the 3D View (looks nicer but uses more memory and slows image reloading)
+UserPreferencesSystem.use_textured_fonts -> show_fonts_textured: boolean Use textures for drawing international fonts
+UserPreferencesSystem.use_vbos -> use_vertex_buffer_objects: boolean Use Vertex Buffer Objects (or Vertex Arrays, if unsupported) for viewport rendering
+UserPreferencesSystem.use_weight_color_range -> show_weight_color_range: boolean Enable color range used for weight visualization in weight painting mode
+UserPreferencesView.auto_depth -> use_mouse_auto_depth: boolean Use the depth under the mouse to improve view pan/rotate/zoom functionality
+UserPreferencesView.auto_perspective -> show_auto_perspective: boolean Automatically switch between orthographic and perspective when changing from top/front/side views
+UserPreferencesView.directional_menus -> show_directional_menus: boolean Otherwise menus, etc will always be top to bottom, left to right, no matter opening direction
+UserPreferencesView.display_object_info -> show_object_info: boolean Display objects name and frame number in 3D view
+UserPreferencesView.global_pivot -> show_global_pivot: boolean Lock the same rotation/scaling pivot in all 3D Views
+UserPreferencesView.global_scene -> show_global_scene: boolean Forces the current Scene to be displayed in all Screens
+UserPreferencesView.open_mouse_over -> use_mouse_over_open: boolean Open menu buttons and pulldowns automatically when the mouse is hovering
+UserPreferencesView.pin_floating_panels -> show_pin_floating_panels: boolean Make floating panels invoked by a hotkey (e.g. N Key) open at the previous location
+UserPreferencesView.rotate_around_selection -> use_rotate_around_selection: boolean Use selection as the pivot point
+UserPreferencesView.show_mini_axis -> show_mini_axis: boolean Show a small rotating 3D axis in the bottom left corner of the 3D View
+UserPreferencesView.show_playback_fps -> show_playback_fps: boolean Show the frames per second screen refresh rate, while animation is played back
+UserPreferencesView.show_splash -> show_splash: boolean Display splash screen on startup
+UserPreferencesView.show_view_name -> show_view_name: boolean Show the name of the view's direction in each 3D View
+UserPreferencesView.tooltips -> use_tooltips: boolean Display tooltips
+UserPreferencesView.use_column_layout -> show_column_layout: boolean Use a column layout for toolbox
+UserPreferencesView.use_large_cursors -> show_large_cursors: boolean Use large mouse cursors when available
+UserPreferencesView.use_manipulator -> show_manipulator: boolean Use 3D transform manipulator
+UserPreferencesView.use_middle_mouse_paste -> use_mouse_mmb_paste: boolean In text window, paste with middle mouse button instead of panning
+UserPreferencesView.wheel_invert_zoom -> invert_mouse_wheel_zoom: boolean Swap the Mouse Wheel zoom direction
+UserPreferencesView.zoom_to_mouse -> use_zoom_ato_mouse: boolean Zoom in towards the mouse pointer's position in the 3D view, rather than the 2D window center
+UserSolidLight.enabled -> use: boolean Enable this OpenGL light in solid draw mode
+VertexPaint.all_faces -> use_all_faces: boolean Paint on all faces inside brush
+VertexPaint.normals -> use_normals: boolean Applies the vertex normal before painting
+VertexPaint.spray -> use_spray: boolean Keep applying paint effect while holding mouse
+VisibilityActuator.children -> show_occluded_children: boolean Set all the children of this object to the same visibility/occlusion recursively
+VisibilityActuator.occlusion -> show_occluded: boolean Set the object to occlude objects behind it. Initialized from the object type in physics button
+VisibilityActuator.visible -> show: boolean Set the objects visible. Initialized from the objects render restriction toggle (access in the outliner)
+VoxelData.still -> use_still: boolean Always render a still frame from the voxel data sequence
+WaveModifier.cyclic -> use_cyclic: boolean Cyclic wave effect
+WaveModifier.normals -> show_normals: boolean Displace along normals
+WaveModifier.x -> use_x: boolean X axis motion
+WaveModifier.x_normal -> use_normal_x: boolean Enable displacement along the X normal
+WaveModifier.y -> use_y: boolean Y axis motion
+WaveModifier.y_normal -> use_normal_y: boolean Enable displacement along the Y normal
+WaveModifier.z_normal -> use_normal_z: boolean Enable displacement along the Z normal
+World.blend_sky -> use_sky_blend: boolean Render background with natural progression from horizon to zenith
+World.paper_sky -> use_sky_paper: boolean Flatten blend or texture coordinates
+World.real_sky -> use_sky_real: boolean Render background with a real horizon, relative to the camera angle
+WorldLighting.falloff -> use_falloff: boolean
+WorldLighting.pixel_cache -> use_ambient_occlusion_pixel_cache: boolean Cache AO results in pixels and interpolate over neighbouring pixels for speedup (for Approximate)
+WorldLighting.use_ambient_occlusion -> use_ambient_occlusion: boolean Use Ambient Occlusion to add shadowing based on distance between objects
+WorldLighting.use_environment_lighting -> use_environment_lighting: boolean Add light coming from the environment
+WorldLighting.use_indirect_lighting -> use_indirect_lighting: boolean Add indirect light bouncing of surrounding objects
+WorldMistSettings.use_mist -> use_mist: boolean Occlude objects with the environment color as they are further away
+WorldStarsSettings.use_stars -> use_stars: boolean Enable starfield generation
+WorldTextureSlot.map_blend -> use_map_blend: boolean Affect the color progression of the background
+WorldTextureSlot.map_horizon -> use_map_horizon: boolean Affect the color of the horizon
+WorldTextureSlot.map_zenith_down -> use_map_zenith_down: boolean Affect the color of the zenith below
+WorldTextureSlot.map_zenith_up -> use_map_zenith_up: boolean Affect the color of the zenith above
diff --git a/source/blender/makesrna/rna_cleanup/rna_cleaner.py b/source/blender/makesrna/rna_cleanup/rna_cleaner.py
new file mode 100755
index 00000000000..3b3c0e3014e
--- /dev/null
+++ b/source/blender/makesrna/rna_cleanup/rna_cleaner.py
@@ -0,0 +1,269 @@
+#! /usr/bin/env python3
+
+"""
+This script is used to help cleaning RNA api.
+
+Typical line in the input file (elements in [] are optional).
+
+[comment *] ToolSettings.snap_align_rotation -> use_snap_align_rotation: boolean [Align rotation with the snapping target]
+"""
+
+
+def font_bold(mystring):
+ """
+ Formats the string as bold, to be used in printouts.
+ """
+ font_bold = "\033[1m"
+ font_reset = "\033[0;0m"
+ return font_bold + mystring + font_reset
+
+
+def usage():
+ """
+ Prints script usage.
+ """
+ import sys
+ scriptname = sys.argv[0]
+ sort_choices_string = '|'.join(sort_choices)
+ message = "\nUSAGE:"
+ message += "\n%s input-file (.txt|.py) order-priority (%s).\n" % (font_bold(scriptname), sort_choices_string)
+ message += "%s -h for help\n" % font_bold(scriptname)
+ print(message)
+ exit()
+
+
+def help():
+ """
+ Prints script' help.
+ """
+ message = '\nHELP:'
+ message += '\nRun this script to re-format the edits you make in the input file.\n'
+ message += 'Do quick modification to important fields like \'to\' and don\'t care about fields like \'changed\' or \'description\' and save.\n'
+ message += 'The script outputs 3 files:\n'
+ message += ' 1) *_clean.txt: is formatted same as the .txt input, can be edited by user.\n'
+ message += ' 2) *_clean.py: is formatted same as the .py input, can be edited by user.\n'
+ message += ' 3) rna_api.py is not formatted for readability and go under complete check. Can be used for rna cleanup.\n'
+ print(message)
+ usage()
+
+
+def check_commandline():
+ """
+ Takes parameters from the commandline.
+ """
+ import sys
+ # Usage
+ if len(sys.argv)==1 or len(sys.argv)>3:
+ usage()
+ if sys.argv[1]!= '-h':
+ input_filename = sys.argv[1]
+ else:
+ help()
+ if not (input_filename[-4:] == '.txt' or input_filename[-3:] == '.py'):
+ print ('\nBad input file extension... exiting.')
+ usage()
+ if len(sys.argv)==2:
+ order_priority = default_sort_choice
+ print ('\nSecond parameter missing: choosing to order by %s.' % font_bold(order_priority))
+ elif len(sys.argv)==3:
+ order_priority = sys.argv[2]
+ if order_priority not in sort_choices:
+ print('\nWrong order_priority... exiting.')
+ usage()
+ return (input_filename, order_priority)
+
+
+def check_prefix(prop):
+ # reminder: props=[comment, changed, bclass, bfrom, bto, kwcheck, btype, description]
+ if '_' in prop:
+ prefix = prop.split('_')[0]
+ if prefix not in kw_prefixes:
+ return 'BAD-PREFIX: ' + prefix
+ else:
+ return prefix + '_'
+ elif prop in kw:
+ return 'SPECIAL-KEYWORD: ' + prop
+ else:
+ return 'BAD-KEYWORD: ' + prop
+
+
+def check_if_changed(a,b):
+ if a != b: return 'changed'
+ else: return 'same'
+
+
+def get_props_from_txt(input_filename):
+ """
+ If the file is *.txt, the script assumes it is formatted as outlined in this script docstring
+ """
+
+ file=open(input_filename,'r')
+ file_lines=file.readlines()
+ file.close()
+
+ props_list=[]
+ props_length_max=[0,0,0,0,0,0,0,0]
+ for line in file_lines:
+
+ # debug
+ #print(line)
+
+ # empty line or comment
+ if not line.strip() or line.startswith('#'):
+ continue
+
+ # class
+ [bclass, tail] = [x.strip() for x in line.split('.', 1)]
+
+ # comment
+ if '*' in bclass:
+ [comment, bclass] = [x.strip() for x in bclass.split('*', 1)]
+ else:
+ comment= ''
+
+ # skipping the header if we have one.
+ # the header is assumed to be "NOTE * CLASS.FROM -> TO: TYPE DESCRIPTION"
+ if comment == 'NOTE' and bclass == 'CLASS':
+ continue
+
+ # from
+ [bfrom, tail] = [x.strip() for x in tail.split('->', 1)]
+
+ # to
+ [bto, tail] = [x.strip() for x in tail.split(':', 1)]
+
+ # type, description
+ try:
+ [btype, description] = tail.split(None, 1)
+ if '"' in description:
+ description.replace('"', "'")
+ except ValueError:
+ [btype, description] = [tail,'NO DESCRIPTION']
+
+ # keyword-check
+ kwcheck = check_prefix(bto)
+
+ # changed
+ changed = check_if_changed(bfrom, bto)
+
+ # lists formatting
+ props=[comment, changed, bclass, bfrom, bto, kwcheck, btype, description]
+ props_list.append(props)
+ props_length_max=list(map(max,zip(props_length_max,list(map(len,props)))))
+
+ return (props_list,props_length_max)
+
+
+def get_props_from_py(input_filename):
+ """
+ If the file is *.py, the script assumes it contains a python list (as "rna_api=[...]")
+ This means that this script executes the text in the py file with an exec(text).
+ """
+ # adds the list "rna_api" to this function's scope
+ rna_api = __import__(input_filename[:-3]).rna_api
+
+ props_length_max = [0 for i in rna_api[0]] # this way if the vector will take more elements we are safe
+ for props in rna_api:
+ [comment, changed, bclass, bfrom, bto, kwcheck, btype, description] = props
+ kwcheck = check_prefix(bto) # keyword-check
+ changed = check_if_changed(bfrom, bto) # changed?
+ props=[comment, changed, bclass, bfrom, bto, kwcheck, btype, description]
+ props_length = list(map(len,props)) # lengths
+ props_length_max = list(map(max,zip(props_length_max,props_length))) # max lengths
+ return (rna_api,props_length_max)
+
+
+def get_props(input_filename):
+ if input_filename[-4:] == '.txt':
+ props_list,props_length_max = get_props_from_txt(input_filename)
+ elif input_filename[-3:] == '.py':
+ props_list,props_length_max = get_props_from_py(input_filename)
+ return (props_list,props_length_max)
+
+
+def sort(props_list, sort_priority):
+ """
+ reminder
+ props=[comment, changed, bclass, bfrom, bto, kwcheck, btype, description]
+ """
+
+ # order based on the i-th element in lists
+ i = sort_choices.index(sort_priority)
+ if i == 0:
+ props_list = sorted(props_list, key=lambda p: p[i], reverse=True)
+ else:
+ props_list = sorted(props_list, key=lambda p: p[i])
+
+ print ('\nSorted by %s.' % font_bold(sort_priority))
+ return props_list
+
+
+def write_files(props_list, props_length_max):
+ """
+ Writes in 3 files:
+ * output_filename_txt: formatted as txt input file
+ * output_filename_py: formatted for readability (could be worked on)
+ * rna_api.py: unformatted, just as final output
+ """
+
+ # if needed will use os.path
+ if input_filename[-4:] == '.txt':
+ if input_filename[-9:] == '_work.txt':
+ base_filename = input_filename[:-9]
+ else:
+ base_filename = input_filename[:-4]
+ elif input_filename[-3:] == '.py':
+ if input_filename[-8:] == '_work.py':
+ base_filename = input_filename[:-8]
+ else:
+ base_filename = input_filename[:-3]
+
+ f_rna = open("rna_api.py",'w')
+ f_txt = open(base_filename+'_work.txt','w')
+ f_py = open(base_filename+'_work.py','w')
+
+ # reminder: props=[comment, changed, bclass, bfrom, bto, kwcheck, btype, description]
+ # [comment *] ToolSettings.snap_align_rotation -> use_snap_align_rotation: boolean [Align rotation with the snapping target]
+ rna = py = txt = ''
+ props_list = [['NOTE', 'CHANGED', 'CLASS', 'FROM', 'TO', 'KEYWORD-CHECK', 'TYPE', 'DESCRIPTION']] + props_list
+ for props in props_list:
+ #txt
+ if props[0] != '': txt += '%s * ' % props[0] # comment
+ txt += '%s.%s -> %s: %s %s\n' % tuple(props[2:5] + props[6:]) # skipping keyword-check
+ # rna_api
+ if props[0] == 'NOTE': indent = '# '
+ else: indent = ' '
+ rna += indent + '("%s", "%s", "%s", "%s", "%s"),\n' % tuple(props[2:5] + props[6:])
+ # py
+ if props[0] == 'NOTE': indent = '# '
+ else: indent = ' '
+ blanks = [' '* (x[0]-x[1]) for x in zip(props_length_max,list(map(len,props)))]
+ props = ['"%s"%s'%(x[0],x[1]) for x in zip(props,blanks)]
+ py += indent + '(%s, %s, %s, %s, %s, %s, %s, %s),\n' % tuple(props)
+ f_txt.write(txt)
+ f_py.write("rna_api = [\n%s]\n" % py)
+ f_rna.write("rna_api = [\n%s]\n" % rna)
+
+ print ('\nSaved %s, %s and %s.\n' % (font_bold(f_txt.name), font_bold(f_py.name), font_bold(f_rna.name) ) )
+
+
+def main():
+
+ global input_filename
+ global sort_choices, default_sort_choice
+ global kw_prefixes, kw
+
+ sort_choices = ['note','changed','class','from','to','kw']
+ default_sort_choice = sort_choices[0]
+ kw_prefixes = ['invert','is','lock','show','showonly','use','useonly']
+ kw = ['hidden','selected','layer','state']
+
+ input_filename, sort_priority = check_commandline()
+ props_list,props_length_max = get_props(input_filename)
+ props_list = sort(props_list,sort_priority)
+ write_files(props_list,props_length_max)
+
+
+if __name__=='__main__':
+ main()
+
diff --git a/source/blender/modifiers/intern/MOD_build.c b/source/blender/modifiers/intern/MOD_build.c
index 05ef85b818a..47693ba337e 100644
--- a/source/blender/modifiers/intern/MOD_build.c
+++ b/source/blender/modifiers/intern/MOD_build.c
@@ -41,6 +41,7 @@
#include "BKE_modifier.h"
#include "BKE_object.h"
#include "BKE_particle.h"
+#include "BKE_scene.h"
static void initData(ModifierData *md)
@@ -106,7 +107,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
frac = bsystem_time(md->scene, ob, md->scene->r.cfra,
bmd->start - 1.0f) / bmd->length;
} else {
- frac = md->scene->r.cfra - bmd->start / bmd->length;
+ frac = BKE_curframe(md->scene) - bmd->start / bmd->length;
}
CLAMP(frac, 0.0, 1.0);
diff --git a/source/blender/modifiers/intern/MOD_collision.c b/source/blender/modifiers/intern/MOD_collision.c
index af8e7605128..7f70bd8f709 100644
--- a/source/blender/modifiers/intern/MOD_collision.c
+++ b/source/blender/modifiers/intern/MOD_collision.c
@@ -40,6 +40,7 @@
#include "BKE_modifier.h"
#include "BKE_object.h"
#include "BKE_pointcache.h"
+#include "BKE_scene.h"
static void initData(ModifierData *md)
@@ -119,7 +120,7 @@ static void deformVerts(
CDDM_apply_vert_coords(dm, vertexCos);
CDDM_calc_normals(dm);
- current_time = bsystem_time (md->scene, ob, ( float ) md->scene->r.cfra, 0.0 );
+ current_time = BKE_curframe(md->scene);
if(G.rt > 0)
printf("current_time %f, collmd->time %f\n", current_time, collmd->time);
diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c
index 531aaff504b..e73c3e29f66 100644
--- a/source/blender/modifiers/intern/MOD_displace.c
+++ b/source/blender/modifiers/intern/MOD_displace.c
@@ -124,7 +124,7 @@ static int isDisabled(ModifierData *md, int useRenderParams)
{
DisplaceModifierData *dmd = (DisplaceModifierData*) md;
- return !dmd->texture;
+ return (!dmd->texture || dmd->strength == 0.0f);
}
static void updateDepgraph(
diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c
index a45ee19b68d..7d506ebfae0 100644
--- a/source/blender/modifiers/intern/MOD_explode.c
+++ b/source/blender/modifiers/intern/MOD_explode.c
@@ -39,13 +39,14 @@
#include "BLI_edgehash.h"
#include "BKE_cdderivedmesh.h"
+#include "BKE_deform.h"
#include "BKE_lattice.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_object.h"
#include "BKE_particle.h"
+#include "BKE_scene.h"
#include "BKE_utildefines.h"
-#include "BKE_deform.h"
#include "MEM_guardedalloc.h"
@@ -682,7 +683,7 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd,
timestep= psys_get_timestep(&sim);
//if(part->flag & PART_GLOB_TIME)
- cfra=bsystem_time(scene, 0,(float)scene->r.cfra,0.0);
+ cfra= BKE_curframe(scene);
//else
// cfra=bsystem_time(scene, ob,(float)scene->r.cfra,0.0);
diff --git a/source/blender/modifiers/intern/MOD_wave.c b/source/blender/modifiers/intern/MOD_wave.c
index 23e13266d80..4b55d113536 100644
--- a/source/blender/modifiers/intern/MOD_wave.c
+++ b/source/blender/modifiers/intern/MOD_wave.c
@@ -38,6 +38,7 @@
#include "BKE_DerivedMesh.h"
#include "BKE_object.h"
#include "BKE_deform.h"
+#include "BKE_scene.h"
#include "depsgraph_private.h"
@@ -247,7 +248,7 @@ static void waveModifier_do(WaveModifierData *md,
MVert *mvert = NULL;
MDeformVert *dvert = NULL;
int defgrp_index;
- float ctime = bsystem_time(scene, ob, (float)scene->r.cfra, 0.0);
+ float ctime = BKE_curframe(scene);
float minfac =
(float)(1.0 / exp(wmd->width * wmd->narrow * wmd->width * wmd->narrow));
float lifefac = wmd->height;
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c b/source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c
index d2eb27d13c6..6f29548fcc3 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c
@@ -47,7 +47,12 @@ static void node_composit_exec_output_file(void *data, bNode *node, bNodeStack *
if(nif->sfra!=nif->efra && (rd->cfra<nif->sfra || rd->cfra>nif->efra)) {
return; /* BAIL OUT RETURN */
}
- else {
+ else if (!G.rendering) {
+ /* only output files when rendering a sequence -
+ * otherwise, it overwrites the output files just
+ * scrubbing through the timeline when the compositor updates */
+ return;
+ } else {
CompBuf *cbuf= typecheck_compbuf(in[0]->data, CB_RGBA);
ImBuf *ibuf= IMB_allocImBuf(cbuf->x, cbuf->y, 32, 0, 0);
char string[256];
diff --git a/source/blender/python/doc/examples/bpy.data.py b/source/blender/python/doc/examples/bpy.data.py
new file mode 100644
index 00000000000..0c2a463c01b
--- /dev/null
+++ b/source/blender/python/doc/examples/bpy.data.py
@@ -0,0 +1,28 @@
+import bpy
+
+
+# print all objects
+for obj in bpy.data.objects:
+ print(obj.name)
+
+
+# print all scene names in a list
+print(bpy.data.scenes.keys())
+
+
+# remove mesh Cube
+if "Cube" in bpy.data.meshes:
+ mesh = bpy.data.meshes["Cube"]
+ print("removing mesh", mesh)
+ bpy.data.meshes.unlink(mesh)
+
+
+# write images into a file next to the blend
+file = open(bpy.data.filepath.replace(".blend", ".txt"), 'w')
+
+for image in bpy.data.images:
+ file.write("%s %dx%d\n" % (image.filepath, image.size[0], image.size[1]))
+
+file.close()
+
+
diff --git a/source/blender/python/doc/examples/mathutils.py b/source/blender/python/doc/examples/mathutils.py
index dee8fa4d6bd..6cd11a1baaa 100644
--- a/source/blender/python/doc/examples/mathutils.py
+++ b/source/blender/python/doc/examples/mathutils.py
@@ -1,8 +1,9 @@
import mathutils
+from math import radians
vec = mathutils.Vector(1.0, 2.0, 3.0)
-mat_rot = mathutils.RotationMatrix(90, 4, 'X')
+mat_rot = mathutils.RotationMatrix(radians(90), 4, 'X')
mat_trans = mathutils.TranslationMatrix(vec)
mat = mat_trans * mat_rot
diff --git a/source/blender/python/doc/sphinx_doc_gen.py b/source/blender/python/doc/sphinx_doc_gen.py
index 6363e14d85c..27524c66c36 100644
--- a/source/blender/python/doc/sphinx_doc_gen.py
+++ b/source/blender/python/doc/sphinx_doc_gen.py
@@ -178,7 +178,11 @@ def pyprop2sphinx(ident, fw, identifier, py_prop):
'''
python property to sphinx
'''
- fw(ident + ".. attribute:: %s\n\n" % identifier)
+ # readonly properties use "data" directive, variables use "attribute" directive
+ if py_prop.fset is None:
+ fw(ident + ".. data:: %s\n\n" % identifier)
+ else:
+ fw(ident + ".. attribute:: %s\n\n" % identifier)
write_indented_lines(ident + " ", fw, py_prop.__doc__)
if py_prop.fset is None:
fw(ident + " (readonly)\n\n")
@@ -296,7 +300,7 @@ def rna2sphinx(BASEPATH):
if bpy.app.build_revision != "Unknown":
version_string = version_string + " r" + bpy.app.build_revision
- fw("project = 'Blender 3D'\n")
+ fw("project = 'Blender'\n")
# fw("master_doc = 'index'\n")
fw("copyright = u'Blender Foundation'\n")
fw("version = '%s - UNSTABLE API'\n" % version_string)
@@ -323,7 +327,7 @@ def rna2sphinx(BASEPATH):
fw("\n")
fw("This document is an API reference for Blender %s. built %s.\n" % (version_string, bpy.app.build_date))
fw("\n")
- fw("An introduction to blender and python can be found at <http://wiki.blender.org/index.php/Dev:2.5/Py/API/Intro>\n")
+ fw("An introduction to Blender and Python can be found at <http://wiki.blender.org/index.php/Dev:2.5/Py/API/Intro>\n")
fw("\n")
fw("`A PDF version of this document is also available <blender_python_reference_250.pdf>`__\n")
fw("\n")
@@ -350,6 +354,7 @@ def rna2sphinx(BASEPATH):
fw("\n")
fw(".. toctree::\n")
fw(" :maxdepth: 1\n\n")
+ fw(" bpy.data.rst\n\n") # note: not actually a module
fw(" bpy.ops.rst\n\n")
fw(" bpy.types.rst\n\n")
@@ -390,8 +395,8 @@ def rna2sphinx(BASEPATH):
filepath = os.path.join(BASEPATH, "bpy.ops.rst")
file = open(filepath, "w")
fw = file.write
- fw("Blender Operators (bpy.ops)\n")
- fw("===========================\n\n")
+ fw("Operators (bpy.ops)\n")
+ fw("===================\n\n")
fw(".. toctree::\n")
fw(" :glob:\n\n")
fw(" bpy.ops.*\n\n")
@@ -400,14 +405,37 @@ def rna2sphinx(BASEPATH):
filepath = os.path.join(BASEPATH, "bpy.types.rst")
file = open(filepath, "w")
fw = file.write
- fw("Blender Types (bpy.types)\n")
- fw("=========================\n\n")
+ fw("Types (bpy.types)\n")
+ fw("=================\n\n")
fw(".. toctree::\n")
fw(" :glob:\n\n")
fw(" bpy.types.*\n\n")
file.close()
+ # not actually a module, only write this file so we
+ # can reference in the TOC
+ filepath = os.path.join(BASEPATH, "bpy.data.rst")
+ file = open(filepath, "w")
+ fw = file.write
+ fw("Data Access (bpy.data)\n")
+ fw("======================\n\n")
+ fw(".. module:: bpy\n")
+ fw("\n")
+ fw("This module is used for all blender/python access.\n")
+ fw("\n")
+ fw(".. literalinclude:: ../examples/bpy.data.py\n")
+ fw("\n")
+ fw(".. data:: data\n")
+ fw("\n")
+ fw(" Access to blenders internal data\n")
+ fw("\n")
+ fw(" :type: :class:`bpy.types.Main`\n")
+ file.close()
+
+ EXAMPLE_SET_USED.add("bpy.data")
+
+
# python modules
from bpy import utils as module
pymodule2sphinx(BASEPATH, "bpy.utils", module, "Utilities (bpy.utils)")
@@ -424,7 +452,7 @@ def rna2sphinx(BASEPATH):
del module
import blf as module
- pymodule2sphinx(BASEPATH, "blf", module, "Blender Font Drawing (blf)")
+ pymodule2sphinx(BASEPATH, "blf", module, "Font Drawing (blf)")
del module
# game engine
@@ -523,12 +551,21 @@ def rna2sphinx(BASEPATH):
fw(".. class:: %s\n\n" % struct.identifier)
fw(" %s\n\n" % struct.description)
-
- for prop in struct.properties:
- fw(" .. attribute:: %s\n\n" % prop.identifier)
+
+ # properties sorted in alphabetical order
+ zip_props_ids = zip(struct.properties, [prop.identifier for prop in struct.properties])
+ zip_props_ids = sorted(zip_props_ids, key=lambda p: p[1])
+ sorted_struct_properties = [x[0] for x in zip_props_ids]
+
+ for prop in sorted_struct_properties:
+ type_descr = prop.get_type_description(class_fmt=":class:`%s`")
+ # readonly properties use "data" directive, variables properties use "attribute" directive
+ if 'readonly' in type_descr:
+ fw(" .. data:: %s\n\n" % prop.identifier)
+ else:
+ fw(" .. attribute:: %s\n\n" % prop.identifier)
if prop.description:
fw(" %s\n\n" % prop.description)
- type_descr = prop.get_type_description(class_fmt=":class:`%s`")
fw(" :type: %s\n\n" % type_descr)
# python attributes
diff --git a/source/blender/python/doc/sphinx_doc_gen.sh b/source/blender/python/doc/sphinx_doc_gen.sh
index 03fe9a2efec..4f5f55af2bd 100755
--- a/source/blender/python/doc/sphinx_doc_gen.sh
+++ b/source/blender/python/doc/sphinx_doc_gen.sh
@@ -8,7 +8,7 @@ SSH_HOST="ideasman42@emo.blender.org"
SSH_UPLOAD="/data/www/vhosts/www.blender.org/documentation/250PythonDoc"
# dont delete existing docs, now partial updates are used for quick builds.
-$BLENDER -b -P ./source/blender/python/doc/sphinx_doc_gen.py
+$BLENDER --background --python ./source/blender/python/doc/sphinx_doc_gen.py
# html
sphinx-build source/blender/python/doc/sphinx-in source/blender/python/doc/sphinx-out
diff --git a/source/blender/python/generic/geometry.c b/source/blender/python/generic/geometry.c
index 18907bb3012..586c6a3406d 100644
--- a/source/blender/python/generic/geometry.c
+++ b/source/blender/python/generic/geometry.c
@@ -419,7 +419,7 @@ static PyObject *M_Geometry_PolyFill( PyObject * self, PyObject * polyLineSeq )
}
else if (totpoints) {
/* now make the list to return */
- filldisplist(&dispbase, &dispbase);
+ filldisplist(&dispbase, &dispbase, 0);
/* The faces are stored in a new DisplayList
thats added to the head of the listbase */
diff --git a/source/blender/python/generic/mathutils.c b/source/blender/python/generic/mathutils.c
index 95be795dd4e..f0571f32f58 100644
--- a/source/blender/python/generic/mathutils.c
+++ b/source/blender/python/generic/mathutils.c
@@ -168,7 +168,7 @@ static char M_Mathutils_RotationMatrix_doc[] =
"\n"
" Create a matrix representing a rotation.\n"
"\n"
-" :arg angle: The angle of rotation desired.\n"
+" :arg angle: The angle of rotation desired, in radians.\n"
" :type angle: float\n"
" :arg size: The size of the rotation matrix to construct [2, 4].\n"
" :type size: int\n"
diff --git a/source/blender/python/intern/bpy_driver.c b/source/blender/python/intern/bpy_driver.c
index 8f49263b375..e5719a84fdd 100644
--- a/source/blender/python/intern/bpy_driver.c
+++ b/source/blender/python/intern/bpy_driver.c
@@ -59,10 +59,6 @@ static int bpy_pydriver_create_dict(void)
mod = PyImport_ImportModule("math");
if (mod) {
PyDict_Merge(d, PyModule_GetDict(mod), 0); /* 0 - dont overwrite existing values */
-
- /* Only keep for backwards compat! - just import all math into root, they are standard */
- PyDict_SetItemString(d, "math", mod);
- PyDict_SetItemString(d, "m", mod);
Py_DECREF(mod);
}
diff --git a/source/blender/python/intern/bpy_props.c b/source/blender/python/intern/bpy_props.c
index 3d7c0b133db..c278ad56ab9 100644
--- a/source/blender/python/intern/bpy_props.c
+++ b/source/blender/python/intern/bpy_props.c
@@ -586,7 +586,7 @@ PyObject *BPy_StringProperty(PyObject *self, PyObject *args, PyObject *kw)
}
prop= RNA_def_property(srna, id, PROP_STRING, subtype);
- if(maxlen != 0) RNA_def_property_string_maxlength(prop, maxlen);
+ if(maxlen != 0) RNA_def_property_string_maxlength(prop, maxlen + 1); /* +1 since it includes null terminator */
if(def) RNA_def_property_string_default(prop, def);
RNA_def_property_ui_text(prop, name, description);
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index 2da8570c3a0..331474a85e3 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -189,7 +189,8 @@ struct Render
ListBase strandsurface;
/* use this instead of R.r.cfra */
- float cfra;
+ float cfra;
+ float mblur_offs, field_offs;
/* render database */
int totvlak, totvert, tothalo, totstrand, totlamp;
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index deb3d99f9ed..582b5926509 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -851,25 +851,23 @@ static void autosmooth(Render *re, ObjectRen *obr, float mat[][4], int degr)
static float *get_object_orco(Render *re, Object *ob)
{
float *orco;
-
+
if (!re->orco_hash)
re->orco_hash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "get_object_orco gh");
-
+
orco = BLI_ghash_lookup(re->orco_hash, ob);
-
+
if (!orco) {
if (ELEM(ob->type, OB_CURVE, OB_FONT)) {
orco = make_orco_curve(re->scene, ob);
} else if (ob->type==OB_SURF) {
orco = make_orco_surf(ob);
- } else if (ob->type==OB_MBALL) {
- orco = make_orco_mball(ob);
}
-
+
if (orco)
BLI_ghash_insert(re->orco_hash, ob, orco);
}
-
+
return orco;
}
@@ -1520,7 +1518,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
RNG *rng= 0;
float loc[3],loc1[3],loc0[3],mat[4][4],nmat[3][3],co[3],nor[3],time;
float strandlen=0.0f, curlen=0.0f;
- float hasize, pa_size, r_tilt, r_length, cfra=bsystem_time(re->scene, ob, (float)re->scene->r.cfra, 0.0);
+ float hasize, pa_size, r_tilt, r_length, cfra= BKE_curframe(re->scene);
float pa_time, pa_birthtime, pa_dietime;
float random, simplify[2];
int i, a, k, max_k=0, totpart, dosimplify = 0, dosurfacecache = 0;
@@ -1639,7 +1637,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
if(part->flag & PART_GLOB_TIME)
#endif // XXX old animation system
- cfra = bsystem_time(re->scene, 0, (float)re->scene->r.cfra, 0.0);
+ cfra = BKE_curframe(re->scene);
///* 2.4 setup reactors */
// if(part->type == PART_REACTOR){
@@ -2369,6 +2367,7 @@ static void init_render_mball(Render *re, ObjectRen *obr)
Material *ma;
float *data, *nors, *orco, mat[4][4], imat[3][3], xn, yn, zn;
int a, need_orco, vlakindex, *index;
+ ListBase dispbase= {NULL, NULL};
if (ob!=find_basis_mball(re->scene, ob))
return;
@@ -2383,14 +2382,22 @@ static void init_render_mball(Render *re, ObjectRen *obr)
if(ma->texco & TEXCO_ORCO) {
need_orco= 1;
}
-
- makeDispListMBall(re->scene, ob);
- dl= ob->disp.first;
+
+ makeDispListMBall_forRender(re->scene, ob, &dispbase);
+ dl= dispbase.first;
if(dl==0) return;
data= dl->verts;
nors= dl->nors;
- orco= get_object_orco(re, ob);
+ if(need_orco) {
+ orco= get_object_orco(re, ob);
+
+ if (!orco) {
+ /* orco hasn't been found in cache - create new one and add to cache */
+ orco= make_orco_mball(ob, &dispbase);
+ set_object_orco(re, ob, orco);
+ }
+ }
for(a=0; a<dl->nr; a++, data+=3, nors+=3, orco+=3) {
@@ -2447,10 +2454,7 @@ static void init_render_mball(Render *re, ObjectRen *obr)
}
/* enforce display lists remade */
- freedisplist(&ob->disp);
-
- /* this enforces remake for real, orco displist is small (in scale) */
- ob->recalc |= OB_RECALC_DATA;
+ freedisplist(&dispbase);
}
/* ------------------------------------------------------------------------- */
@@ -4545,7 +4549,6 @@ static void init_render_object(Render *re, Object *ob, Object *par, DupliObject
void RE_Database_Free(Render *re)
{
- Object *ob = NULL;
LampRen *lar;
/* statistics for debugging render memory usage */
@@ -4572,21 +4575,8 @@ void RE_Database_Free(Render *re)
BLI_freelistN(&re->lights);
free_renderdata_tables(re);
-
- /* free orco. check all objects because of duplis and sets */
- ob= G.main->object.first;
- while(ob) {
- if(ob->type==OB_MBALL) {
- if(ob->disp.first && ob->disp.first!=ob->disp.last) {
- DispList *dl= ob->disp.first;
- BLI_remlink(&ob->disp, dl);
- freedisplist(&ob->disp);
- BLI_addtail(&ob->disp, dl);
- }
- }
- ob= ob->id.next;
- }
+ /* free orco */
free_mesh_orco_hash(re);
#if 0 /* radio can be redone better */
end_radio_render();
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 180f8a960db..722ce55e950 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -1302,6 +1302,8 @@ void RE_InitState(Render *re, Render *source, RenderData *rd, SceneRenderLayer *
/* we clip faces with a minimum of 2 pixel boundary outside of image border. see zbuf.c */
re->clipcrop= 1.0f + 2.0f/(float)(re->winx>re->winy?re->winy:re->winx);
+ re->mblur_offs = re->field_offs = 0.f;
+
RE_init_threadcount(re);
}
@@ -1762,6 +1764,7 @@ static void do_render_3d(Render *re)
/* internal */
// re->cfra= cfra; /* <- unused! */
+ re->scene->r.subframe = re->mblur_offs + re->field_offs;
/* make render verts/faces/halos/lamps */
if(render_scene_needs_vector(re))
@@ -1778,6 +1781,8 @@ static void do_render_3d(Render *re)
/* free all render verts etc */
RE_Database_Free(re);
+
+ re->scene->r.subframe = 0.f;
}
/* called by blur loop, accumulate RGBA key alpha */
@@ -1877,7 +1882,7 @@ static void do_render_blur_3d(Render *re)
/* do the blur steps */
while(blur--) {
- set_mblur_offs( re->r.blurfac*((float)(re->r.mblur_samples-blur))/(float)re->r.mblur_samples );
+ re->mblur_offs = re->r.blurfac*((float)(re->r.mblur_samples-blur))/(float)re->r.mblur_samples;
re->i.curblur= re->r.mblur_samples-blur; /* stats */
@@ -1895,7 +1900,7 @@ static void do_render_blur_3d(Render *re)
re->result= rres;
BLI_rw_mutex_unlock(&re->resultmutex);
- set_mblur_offs(0.0f);
+ re->mblur_offs = 0.0f;
re->i.curblur= 0; /* stats */
/* weak... the display callback wants an active renderlayer pointer... */
@@ -1975,15 +1980,17 @@ static void do_render_fields_3d(Render *re)
re->i.curfield= 2; /* stats */
re->flag |= R_SEC_FIELD;
- if((re->r.mode & R_FIELDSTILL)==0)
- set_field_offs(0.5f);
+ if((re->r.mode & R_FIELDSTILL)==0) {
+ re->field_offs = 0.5f;
+ }
RE_SetCamera(re, re->scene->camera);
if(re->r.mode & R_MBLUR)
do_render_blur_3d(re);
else
do_render_3d(re);
re->flag &= ~R_SEC_FIELD;
- set_field_offs(0.0f);
+
+ re->field_offs = 0.0f;
rr2= re->result;
}
@@ -2448,7 +2455,7 @@ static void do_render_seq(Render * re)
if(recurs_depth==0) {
/* otherwise sequencer animation isnt updated */
- BKE_animsys_evaluate_all_animation(G.main, (float)cfra); // XXX, was frame_to_float(re->scene, cfra)
+ BKE_animsys_evaluate_all_animation(G.main, (float)cfra); // XXX, was BKE_curframe(re->scene)
}
recurs_depth++;
@@ -2748,7 +2755,7 @@ void RE_BlenderFrame(Render *re, Scene *scene, SceneRenderLayer *srl, unsigned i
MEM_reset_peak_memory();
do_render_all_options(re);
}
-
+
/* UGLY WARNING */
G.rendering= 0;
}
@@ -2946,7 +2953,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, unsigned int lay, int sfra, int ef
mh->end_movie();
scene->r.cfra= cfrao;
-
+
/* UGLY WARNING */
G.rendering= 0;
}
diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c
index 6ae9038437b..4f86f67f0e3 100644
--- a/source/blender/render/intern/source/pointdensity.c
+++ b/source/blender/render/intern/source/pointdensity.c
@@ -39,6 +39,7 @@
#include "BKE_main.h"
#include "BKE_object.h"
#include "BKE_particle.h"
+#include "BKE_scene.h"
#include "BKE_texture.h"
#include "DNA_meshdata_types.h"
@@ -95,7 +96,7 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa
ParticleKey state;
ParticleSimulationData sim = {re->scene, ob, psys, NULL};
ParticleData *pa=NULL;
- float cfra = bsystem_time(re->scene, ob, (float)re->scene->r.cfra, 0.0);
+ float cfra = BKE_curframe(re->scene);
int i, childexists;
int total_particles, offset=0;
int data_used = point_data_used(pd);
diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c
index b184b681846..bdc1dcc2782 100644
--- a/source/blender/render/intern/source/rayshade.c
+++ b/source/blender/render/intern/source/rayshade.c
@@ -41,9 +41,10 @@
#include "BKE_node.h"
#include "BKE_utildefines.h"
-#include "BLI_math.h"
#include "BLI_blenlib.h"
+#include "BLI_cpu.h"
#include "BLI_jitter.h"
+#include "BLI_math.h"
#include "BLI_rand.h"
#include "PIL_time.h"
@@ -98,7 +99,7 @@ RayObject* RE_rayobject_create(Render *re, int type, int size)
//TODO
//if(detect_simd())
#ifdef __SSE__
- type = R_RAYSTRUCTURE_SIMD_SVBVH;
+ type = BLI_cpu_support_sse2()? R_RAYSTRUCTURE_SIMD_SVBVH: R_RAYSTRUCTURE_VBVH;
#else
type = R_RAYSTRUCTURE_VBVH;
#endif
@@ -370,6 +371,10 @@ static void makeraytree_single(Render *re)
if(has_special_rayobject(re, obi))
{
RayObject *obj = makeraytree_object(re, obi);
+
+ if(test_break(re))
+ break;
+
RE_rayobject_add( re->raytree, obj );
}
else
diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c
index 9b087900734..e982c1a12a7 100644
--- a/source/blender/render/intern/source/texture.c
+++ b/source/blender/render/intern/source/texture.c
@@ -98,7 +98,7 @@ void init_render_texture(Render *re, Tex *tex)
if(tex->type==TEX_PLUGIN) {
if(tex->plugin && tex->plugin->doit) {
if(tex->plugin->cfra) {
- *(tex->plugin->cfra)= (float)cfra; //frame_to_float(re->scene, cfra); // XXX old animsys - timing stuff to be fixed
+ *(tex->plugin->cfra)= (float)cfra; //BKE_curframe(re->scene); // XXX old animsys - timing stuff to be fixed
}
}
}
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index 199b17b9810..927ea00ae37 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -183,6 +183,7 @@ typedef struct wmNotifier {
#define ND_KEYINGSET (12<<16)
#define ND_TOOLSETTINGS (13<<16)
#define ND_LAYER (14<<16)
+#define ND_FRAME_RANGE (15<<16)
/* NC_OBJECT Object */
#define ND_TRANSFORM (16<<16)
@@ -195,6 +196,7 @@ typedef struct wmNotifier {
#define ND_KEYS (23<<16)
#define ND_CONSTRAINT (24<<16)
#define ND_PARTICLE (25<<16)
+#define ND_POINTCACHE (26<<16)
/* NC_MATERIAL Material */
#define ND_SHADING (30<<16)
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index 0331613d392..d2afef3b117 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -642,6 +642,13 @@ static int wm_draw_update_test_window(wmWindow *win)
{
ScrArea *sa;
ARegion *ar;
+
+ for(ar= win->screen->regionbase.first; ar; ar= ar->next) {
+ if(ar->do_draw_overlay) {
+ wm_tag_redraw_overlay(win, ar);
+ ar->do_draw_overlay= 0;
+ }
+ }
if(win->screen->do_refresh)
return 1;
@@ -687,8 +694,11 @@ static int wm_automatic_draw_method(wmWindow *win)
void wm_tag_redraw_overlay(wmWindow *win, ARegion *ar)
{
/* for draw triple gestures, paint cursors don't need region redraw */
- if(ar && win && wm_automatic_draw_method(win) != USER_DRAW_TRIPLE)
- ED_region_tag_redraw(ar);
+ if(ar && win) {
+ if(wm_automatic_draw_method(win) != USER_DRAW_TRIPLE)
+ ED_region_tag_redraw(ar);
+ win->screen->do_draw_paintcursor= 1;
+ }
}
void wm_draw_update(bContext *C)
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 70e804758b2..330244e910e 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -1614,7 +1614,7 @@ void wm_event_do_handlers(bContext *C)
while( (event= win->queue.first) ) {
int action = WM_HANDLER_CONTINUE;
- if((G.f & G_DEBUG) && event && event->type!=MOUSEMOVE)
+ if((G.f & G_DEBUG) && event && !ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE))
printf("pass on evt %d val %d\n", event->type, event->val);
wm_eventemulation(event);
@@ -2138,6 +2138,7 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int t
case GHOST_kEventCursorMove: {
if(win->active) {
GHOST_TEventCursorData *cd= customdata;
+ wmEvent *lastevent= win->queue.last;
#if defined(__APPLE__) && defined(GHOST_COCOA)
//Cocoa already uses coordinates with y=0 at bottom, and returns inwindow coordinates on mouse moved event
@@ -2156,6 +2157,12 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int t
event.type= MOUSEMOVE;
+ /* some painting operators want accurate mouse events, they can
+ handle inbetween mouse move moves, others can happily ignore
+ them for better performance */
+ if(lastevent && lastevent->type == MOUSEMOVE)
+ lastevent->type = INBETWEEN_MOUSEMOVE;
+
update_tablet_data(win, &event);
wm_event_add(win, &event);
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 17a04cab7be..be6ef77526e 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -220,7 +220,9 @@ static void wm_window_match_do(bContext *C, ListBase *oldwmlist)
if(win->active)
wm->winactive= win;
- GHOST_SetWindowUserData(win->ghostwin, win); /* pointer back */
+ if(!G.background) /* file loading in background mode still calls this */
+ GHOST_SetWindowUserData(win->ghostwin, win); /* pointer back */
+
oldwin->ghostwin= NULL;
win->eventstate= oldwin->eventstate;
@@ -533,6 +535,22 @@ static ImBuf *blend_file_thumb(const char *path, Scene *scene, int **thumb_pt)
return ibuf;
}
+/* easy access from gdb */
+int write_crash_blend(void)
+{
+ char path[FILE_MAX];
+ BLI_strncpy(path, G.sce, sizeof(path));
+ BLI_replace_extension(path, sizeof(path), "_crash.blend");
+ if(BLO_write_file(G.main, path, G.fileflags, NULL, NULL)) {
+ printf("written: %s\n", path);
+ return 1;
+ }
+ else {
+ printf("failed: %s\n", path);
+ return 0;
+ }
+}
+
int WM_write_file(bContext *C, char *target, int fileflags, ReportList *reports)
{
Library *li;
diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c
index ca6cabe3cce..e79d08dc2f1 100644
--- a/source/blender/windowmanager/intern/wm_keymap.c
+++ b/source/blender/windowmanager/intern/wm_keymap.c
@@ -708,8 +708,11 @@ void WM_keymap_restore_item_to_default(bContext *C, wmKeyMap *keymap, wmKeyMapIt
WM_keymap_properties_reset(kmi);
}
- kmi->properties= IDP_CopyProperty(orig->properties);
- kmi->ptr->data= kmi->properties;
+
+ if (orig->properties) {
+ kmi->properties= IDP_CopyProperty(orig->properties);
+ kmi->ptr->data= kmi->properties;
+ }
kmi->propvalue = orig->propvalue;
kmi->type = orig->type;
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 1531763120d..7ee7396df67 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -789,8 +789,6 @@ void WM_operator_properties_filesel(wmOperatorType *ot, int filter, short type,
PropertyRNA *prop;
RNA_def_string_file_path(ot->srna, "filepath", "", FILE_MAX, "File Path", "Path to file");
- RNA_def_string_file_name(ot->srna, "filename", "", FILE_MAX, "File Name", "Name of the file");
- RNA_def_string_dir_path(ot->srna, "directory", "", FILE_MAX, "Directory", "Directory of the file");
if (action == FILE_SAVE) {
prop= RNA_def_boolean(ot->srna, "check_existing", 1, "Check Existing", "Check and warn on overwriting existing files");
@@ -1653,6 +1651,9 @@ static void WM_OT_link_append(wmOperatorType *ot)
RNA_def_boolean(ot->srna, "active_layer", 1, "Active Layer", "Put the linked objects on the active layer");
RNA_def_boolean(ot->srna, "instance_groups", 1, "Instance Groups", "Create instances for each group as a DupliGroup");
+ RNA_def_string_file_name(ot->srna, "filename", "", FILE_MAX, "File Name", "Name of the file");
+ RNA_def_string_dir_path(ot->srna, "directory", "", FILE_MAX, "Directory", "Directory of the file");
+
RNA_def_collection_runtime(ot->srna, "files", &RNA_OperatorFileListElement, "Files", "");
}
diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h
index a93214e9a54..6cb3971bd21 100644
--- a/source/blender/windowmanager/wm_event_types.h
+++ b/source/blender/windowmanager/wm_event_types.h
@@ -70,6 +70,7 @@
/* mapped with userdef */
#define WHEELINMOUSE 0x00c
#define WHEELOUTMOUSE 0x00d
+#define INBETWEEN_MOUSEMOVE 0x011
/* SYSTEM : 0x01xx */
diff --git a/source/creator/creator.c b/source/creator/creator.c
index 2def6c8a3ca..3843e284a01 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -234,11 +234,11 @@ static int print_help(int argc, char **argv, void *data)
BLI_argsPrintArgDoc(ba, "--window-geometry");
printf("\n");
- printf ("Game Engine specific options:\n");
+ printf ("Game Engine Specific Options:\n");
BLI_argsPrintArgDoc(ba, "-g");
printf("\n");
- printf ("Misc options:\n");
+ printf ("Misc Options:\n");
BLI_argsPrintArgDoc(ba, "--debug");
BLI_argsPrintArgDoc(ba, "--debug-fpe");
@@ -273,10 +273,25 @@ static int print_help(int argc, char **argv, void *data)
printf ("Other Options:\n");
BLI_argsPrintOtherDoc(ba);
+ printf ("Argument Parsing:\n");
+ printf ("\targuments must be separated by white space. eg\n");
+ printf ("\t\t\"blender -ba test.blend\"\n");
+ printf ("\t...will ignore the 'a'\n");
+ printf ("\t\t\"blender -b test.blend -f8\"\n");
+ printf ("\t...will ignore 8 because there is no space between the -f and the frame value\n\n");
+
+ printf ("Argument Order:\n");
+ printf ("Arguments are executed in the order they are given. eg\n");
+ printf ("\t\t\"blender --background test.blend --render-frame 1 --render-output /tmp\"\n");
+ printf ("\t...will not render to /tmp because '--render-frame 1' renders before the output path is set\n");
+ printf ("\t\t\"blender --background --render-output /tmp test.blend --render-frame 1\"\n");
+ printf ("\t...will not render to /tmp because loading the blend file overwrites the render output that was set\n");
+ printf ("\t\t\"blender --background test.blend --render-output /tmp --render-frame 1\" works as expected.\n\n");
+
printf ("\nEnvironment Variables:\n");
printf (" $HOME\t\t\tStore files such as .blender/ .B.blend .Bfs .Blog here.\n");
printf (" $BLENDERPATH System directory to use for data files and scripts.\n");
- printf (" For this build of blender the default BLENDERPATH is...\n");
+ printf (" For this build of blender the default $BLENDERPATH is...\n");
printf (" \"%s\"\n", blender_path);
printf (" setting the $BLENDERPATH will override this\n");
#ifdef WIN32
@@ -289,19 +304,6 @@ static int print_help(int argc, char **argv, void *data)
#endif
printf (" $PYTHONHOME Path to the python directory, eg. /usr/lib/python.\n\n");
- printf ("Note: Arguments must be separated by white space. eg:\n");
- printf (" \"blender -ba test.blend\"\n");
- printf (" ...will ignore the 'a'\n");
- printf (" \"blender -b test.blend -f8\"\n");
- printf (" ...will ignore 8 because there is no space between the -f and the frame value\n\n");
-
- printf ("Note: Arguments are executed in the order they are given. eg:\n");
- printf (" \"blender --background test.blend --render-frame 1 --render-output /tmp\"\n");
- printf (" ...will not render to /tmp because '--render-frame 1' renders before the output path is set\n");
- printf (" \"blender --background --render-output /tmp test.blend --render-frame 1\"\n");
- printf (" ...will not render to /tmp because loading the blend file overwrites the render output that was set\n");
- printf (" \"blender --background test.blend --render-output /tmp --render-frame 1\" works as expected.\n\n");
-
exit(0);
return 0;
@@ -685,10 +687,22 @@ static int render_frame(int argc, char **argv, void *data)
Scene *scene= CTX_data_scene(C);
if (argc > 1) {
- int frame = atoi(argv[1]);
Render *re = RE_NewRender(scene->id.name);
+ int frame;
ReportList reports;
+ switch(*argv[1]) {
+ case '+':
+ frame= scene->r.sfra + atoi(argv[1]+1);
+ break;
+ case '-':
+ frame= (scene->r.efra - atoi(argv[1]+1)) + 1;
+ break;
+ default:
+ frame= atoi(argv[1]);
+ break;
+ }
+
BKE_reports_init(&reports, RPT_PRINT);
frame = MIN2(MAXFRAME, MAX2(MINAFRAME, frame));
@@ -966,7 +980,7 @@ void setupArguments(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle)
/* fourth pass: processing arguments */
BLI_argsAdd(ba, 4, "-g", NULL, game_doc, set_ge_parameters, syshandle);
- BLI_argsAdd(ba, 4, "-f", "--render-frame", "<frame>\n\tRender frame <frame> and save it", render_frame, C);
+ BLI_argsAdd(ba, 4, "-f", "--render-frame", "<frame>\n\tRender frame <frame> and save it.\n\t+<frame> start frame relative, -<frame> end frame relative.", render_frame, C);
BLI_argsAdd(ba, 4, "-a", "--render-anim", "\n\tRender frames from start to end (inclusive)", render_animation, C);
BLI_argsAdd(ba, 4, "-S", "--scene", "<name>\n\tSet the active scene <name> for rendering", set_scene, NULL);
BLI_argsAdd(ba, 4, "-s", "--frame-start", "<frame>\n\tSet start to frame <frame> (use before the -a argument)", set_start_frame, C);