svn merge -r 21508:22111 https://svn.blender.org/svnroot/bf-blender/branches/blender2...
[blender.git] / source / blender / makesrna / intern / rna_scene.c
index bd23fc9e1f6ac2bf0f478757a2912fa34b1f9c38..4985d26f03977a595ced5e25ef5abce6ec2373a2 100644 (file)
@@ -111,10 +111,67 @@ static void rna_Scene_end_frame_set(PointerRNA *ptr, int value)
        data->r.efra= value;
 }
 
+static int rna_Scene_use_preview_range_get(PointerRNA *ptr)
+{
+       Scene *data= (Scene*)ptr->data;
+       
+       /* this is simply overloaded to assume that preview-range 
+        * start frame cannot be less than 1 when on,
+        * so psfra=0 means 'off'
+        */
+       return (data->r.psfra != 0);
+}
+
+static void rna_Scene_use_preview_range_set(PointerRNA *ptr, int value)
+{
+       Scene *data= (Scene*)ptr->data;
+       
+       /* if enable, copy range from render-range, otherwise just clear */
+       if (value) {
+               data->r.psfra= data->r.sfra;
+               data->r.pefra= data->r.efra;
+       }
+       else
+               data->r.psfra= 0;
+}
+
+
+static void rna_Scene_preview_range_start_frame_set(PointerRNA *ptr, int value)
+{
+       Scene *data= (Scene*)ptr->data;
+       
+       /* check if enabled already */
+       if (data->r.psfra == 0) {
+               /* set end of preview range to end frame, then clamp as per normal */
+               // TODO: or just refuse to set instead?
+               data->r.pefra= data->r.efra;
+       }
+       
+       /* now set normally */
+       CLAMP(value, 1, data->r.pefra);
+       data->r.psfra= value;
+}
+
+static void rna_Scene_preview_range_end_frame_set(PointerRNA *ptr, int value)
+{
+       Scene *data= (Scene*)ptr->data;
+       
+       /* check if enabled already */
+       if (data->r.psfra == 0) {
+               /* set start of preview range to start frame, then clamp as per normal */
+               // TODO: or just refuse to set instead?
+               data->r.psfra= data->r.sfra; 
+       }
+       
+       /* now set normally */
+       CLAMP(value, data->r.psfra, MAXFRAME);
+       data->r.pefra= value;
+}
+
 static void rna_Scene_frame_update(bContext *C, PointerRNA *ptr)
 {
        //Scene *scene= ptr->id.data;
-       //update_for_newframe();
+       //ED_update_for_newframe(C);
 }
 
 static int rna_SceneRenderData_threads_get(PointerRNA *ptr)
@@ -232,6 +289,18 @@ static int rna_SceneRenderData_multiple_engines_get(PointerRNA *ptr)
        return (BLI_countlist(&R_engines) > 1);
 }
 
+static int rna_SceneRenderData_use_game_engine_get(PointerRNA *ptr)
+{
+       RenderData *rd= (RenderData*)ptr->data;
+       RenderEngineType *type;
+
+       for(type=R_engines.first; type; type=type->next)
+               if(strcmp(type->idname, rd->engine) == 0)
+                       return (type->flag & RE_GAME);
+       
+       return 0;
+}
+
 static void rna_SceneRenderLayer_layer_set(PointerRNA *ptr, const int *values)
 {
        SceneRenderLayer *rl= (SceneRenderLayer*)ptr->data;
@@ -254,52 +323,6 @@ static void rna_SceneRenderLayer_pass_update(bContext *C, PointerRNA *ptr)
 
 #else
 
-static void rna_def_sculpt(BlenderRNA  *brna)
-{
-       StructRNA *srna;
-       PropertyRNA *prop;
-
-       srna= RNA_def_struct(brna, "Sculpt", NULL);
-       RNA_def_struct_nested(brna, srna, "Scene");
-       RNA_def_struct_ui_text(srna, "Sculpt", "");
-       
-       prop= RNA_def_property(srna, "brush", PROP_POINTER, PROP_NONE);
-       RNA_def_property_struct_type(prop, "Brush");
-       RNA_def_property_ui_text(prop, "Brush", "");
-
-       prop= RNA_def_property(srna, "symmetry_x", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_X);
-       RNA_def_property_ui_text(prop, "Symmetry X", "Mirror brush across the X axis.");
-
-       prop= RNA_def_property(srna, "symmetry_y", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_Y);
-       RNA_def_property_ui_text(prop, "Symmetry Y", "Mirror brush across the Y axis.");
-
-       prop= RNA_def_property(srna, "symmetry_z", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_Z);
-       RNA_def_property_ui_text(prop, "Symmetry Z", "Mirror brush across the Z axis.");
-
-       prop= RNA_def_property(srna, "lock_x", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_LOCK_X);
-       RNA_def_property_ui_text(prop, "Lock X", "Disallow changes to the X axis of vertices.");
-
-       prop= RNA_def_property(srna, "lock_y", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_LOCK_Y);
-       RNA_def_property_ui_text(prop, "Lock Y", "Disallow changes to the Y axis of vertices.");
-
-       prop= RNA_def_property(srna, "lock_z", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_LOCK_Z);
-       RNA_def_property_ui_text(prop, "Lock Z", "Disallow changes to the Z axis of vertices.");
-
-       prop= RNA_def_property(srna, "show_brush", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_DRAW_BRUSH);
-       RNA_def_property_ui_text(prop, "Show Brush", "");
-
-       prop= RNA_def_property(srna, "partial_redraw", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_DRAW_FAST);
-       RNA_def_property_ui_text(prop, "Partial Redraw", "Optimize sculpting by only refreshing modified faces.");
-}
-
 static void rna_def_tool_settings(BlenderRNA  *brna)
 {
        StructRNA *srna;
@@ -339,14 +362,22 @@ static void rna_def_tool_settings(BlenderRNA  *brna)
        RNA_def_property_struct_type(prop, "Sculpt");
        RNA_def_property_ui_text(prop, "Sculpt", "");
        
-       prop= RNA_def_property(srna, "vpaint", PROP_POINTER, PROP_NONE);
-       RNA_def_property_struct_type(prop, "VPaint");
+       prop= RNA_def_property(srna, "vertex_paint", PROP_POINTER, PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "vpaint");
        RNA_def_property_ui_text(prop, "Vertex Paint", "");
 
-       prop= RNA_def_property(srna, "wpaint", PROP_POINTER, PROP_NONE);
-       RNA_def_property_struct_type(prop, "VPaint");
+       prop= RNA_def_property(srna, "weight_paint", PROP_POINTER, PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "wpaint");
        RNA_def_property_ui_text(prop, "Weight Paint", "");
 
+       prop= RNA_def_property(srna, "image_paint", PROP_POINTER, PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "imapaint");
+       RNA_def_property_ui_text(prop, "Image Paint", "");
+
+       prop= RNA_def_property(srna, "particle_edit", PROP_POINTER, PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "particle");
+       RNA_def_property_ui_text(prop, "Particle Edit", "");
+
        /* Transform */
        prop= RNA_def_property(srna, "proportional_editing", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "proportional", 0);
@@ -410,9 +441,6 @@ static void rna_def_tool_settings(BlenderRNA  *brna)
        prop= RNA_def_property(srna, "vertex_group_weight", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "vgroup_weight");
        RNA_def_property_ui_text(prop, "Vertex Group Weight", "Weight to assign in vertex groups.");
-
-       /* Sculpt */
-       rna_def_sculpt(brna);
 }
 
 void rna_def_render_layer_common(StructRNA *srna, int scene)
@@ -899,6 +927,19 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
                {256, "OCTREE_RES_256", 0, "256", ""},
                {512, "OCTREE_RES_512", 0, "512", ""},
                {0, NULL, 0, NULL, NULL}};
+
+       static EnumPropertyItem raytrace_structure_items[] = {
+               {R_RAYSTRUCTURE_HIER_BVH_BVH, "{R_RAYSTRUCTURE_HIER_BVH_BVH", 0, "BVH of BVH's", "Create a BVH of objects (each object has it own BVH)"},
+               {R_RAYSTRUCTURE_HIER_BVH_OCTREE, "{R_RAYSTRUCTURE_HIER_BVH_OCTREE", 0, "BVH of octree", "Create a BVH of objects (each object has it own octree)"},
+               {R_RAYSTRUCTURE_SINGLE_BVH, "{R_RAYSTRUCTURE_SINGLE_BVH", 0, "Single BVH", "BVH of all primitives (no instance support)"},
+               {R_RAYSTRUCTURE_SINGLE_OCTREE, "{R_RAYSTRUCTURE_SINGLE_OCTREE", 0, "Octree", "Octree of all primitives (no instance support)"},
+               {0, NULL, 0, NULL, NULL}};
+
+       static EnumPropertyItem raytrace_tree_type_items[] = {
+               {R_RAYTRACE_TREE_BVH, "{R_RAYTRACE_TREE_BVH", 0, "BVH", "rayobject_bvh.c"},
+               {R_RAYTRACE_TREE_BLIBVH, "{R_RAYTRACE_TREE_BLIBVH", 0, "BLIbvh", "rayobject_blibvh.c"},
+               {R_RAYTRACE_TREE_BIH, "{R_RAYSTRUCTURE_SINGLE_BVH", 0, "BIH", "rayobject_bih.c"},
+               {0, NULL, 0, NULL, NULL}};
                
        static EnumPropertyItem fixed_oversample_items[] = {
                {5, "OVERSAMPLE_5", 0, "5", ""},
@@ -1047,7 +1088,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
 #endif
 
        static EnumPropertyItem engine_items[] = {
-               {0, "BLENDER", 0, "Blender", ""},
+               {0, "BLENDER_RENDER", 0, "Blender Render", ""},
                {0, NULL, 0, NULL, NULL}};
 
        srna= RNA_def_struct(brna, "SceneRenderData", NULL);
@@ -1310,6 +1351,18 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
        RNA_def_property_enum_items(prop, octree_resolution_items);
        RNA_def_property_ui_text(prop, "Octree Resolution", "Resolution of raytrace accelerator. Use higher resolutions for larger scenes.");
        RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop= RNA_def_property(srna, "raytrace_structure", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "raystructure");
+       RNA_def_property_enum_items(prop, raytrace_structure_items);
+       RNA_def_property_ui_text(prop, "Raytrace Acceleration Structure", "Type of raytrace accelerator structure.");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop= RNA_def_property(srna, "raytrace_tree_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "raytrace_tree_type");
+       RNA_def_property_enum_items(prop, raytrace_tree_type_items);
+       RNA_def_property_ui_text(prop, "Raytrace tree type", "Type of raytrace accelerator structure.");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
        
        prop= RNA_def_property(srna, "antialiasing", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "mode", R_OSA);
@@ -1579,23 +1632,31 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
        RNA_def_property_enum_items(prop, engine_items);
        RNA_def_property_enum_funcs(prop, "rna_SceneRenderData_engine_get", "rna_SceneRenderData_engine_set", "rna_SceneRenderData_engine_itemf");
        RNA_def_property_ui_text(prop, "Engine", "Engine to use for rendering.");
+       RNA_def_property_update(prop, NC_WINDOW, NULL);
 
        prop= RNA_def_property(srna, "multiple_engines", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_funcs(prop, "rna_SceneRenderData_multiple_engines_get", NULL);
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
-       RNA_def_property_ui_text(prop, "Multiple Engine", "More than one rendering engine is available.");
+       RNA_def_property_ui_text(prop, "Multiple Engines", "More than one rendering engine is available.");
+
+       prop= RNA_def_property(srna, "use_game_engine", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_funcs(prop, "rna_SceneRenderData_use_game_engine_get", NULL);
+       RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+       RNA_def_property_ui_text(prop, "Use Game Engine", "Current rendering engine is a game engine.");
 }
 
 void RNA_def_scene(BlenderRNA *brna)
 {
        StructRNA *srna;
        PropertyRNA *prop;
-
+       
+       /* Struct definition */
        srna= RNA_def_struct(brna, "Scene", "ID");
        RNA_def_struct_ui_text(srna, "Scene", "Scene consisting objects and defining time and render related settings.");
        RNA_def_struct_ui_icon(srna, ICON_SCENE_DATA);
        RNA_def_struct_clear_flag(srna, STRUCT_ID_REFCOUNT);
-
+       
+       /* Global Settings */
        prop= RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE);
        RNA_def_property_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "Camera", "Active camera used for rendering the scene.");
@@ -1603,24 +1664,30 @@ void RNA_def_scene(BlenderRNA *brna)
        prop= RNA_def_property(srna, "world", PROP_POINTER, PROP_NONE);
        RNA_def_property_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "World", "World used for rendering the scene.");
+       RNA_def_property_update(prop, NC_WORLD, NULL);
 
        prop= RNA_def_property(srna, "cursor_location", PROP_FLOAT, PROP_VECTOR);
        RNA_def_property_float_sdna(prop, NULL, "cursor");
        RNA_def_property_ui_text(prop, "Cursor Location", "3D cursor location.");
        RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 4);
-
+       RNA_def_property_update(prop, NC_WINDOW, NULL);
+       
+       /* Bases/Objects */
        prop= RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE);
        RNA_def_property_collection_sdna(prop, NULL, "base", NULL);
        RNA_def_property_struct_type(prop, "Object");
        RNA_def_property_ui_text(prop, "Objects", "");
        RNA_def_property_collection_funcs(prop, 0, 0, 0, "rna_Scene_objects_get", 0, 0, 0, 0, 0);
 
+       /* Layers */
        prop= RNA_def_property(srna, "visible_layers", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "lay", 1);
        RNA_def_property_array(prop, 20);
        RNA_def_property_ui_text(prop, "Visible Layers", "Layers visible when rendering the scene.");
        RNA_def_property_boolean_funcs(prop, NULL, "rna_Scene_layer_set");
-
+       
+       
+       /* Frame Range Stuff */
        prop= RNA_def_property(srna, "current_frame", PROP_INT, PROP_NONE);
        RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE);
        RNA_def_property_int_sdna(prop, NULL, "r.cfra");
@@ -1647,20 +1714,46 @@ void RNA_def_scene(BlenderRNA *brna)
        RNA_def_property_int_sdna(prop, NULL, "frame_step");
        RNA_def_property_ui_text(prop, "Frame Step", "Number of frames to skip forward while rendering/playing back each frame");
        RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-
+       
+       /* Preview Range (frame-range for UI playback) */
+       prop=RNA_def_property(srna, "use_preview_range", PROP_BOOLEAN, PROP_NONE); /* use_preview_range is not really a separate setting in SDNA */
+       RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE);
+       RNA_def_property_boolean_funcs(prop, "rna_Scene_use_preview_range_get", "rna_Scene_use_preview_range_set");
+       RNA_def_property_ui_text(prop, "Use Preview Range", "");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+       
+       prop= RNA_def_property(srna, "preview_range_start_frame", PROP_INT, PROP_NONE);
+       RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE);
+       RNA_def_property_int_sdna(prop, NULL, "r.psfra");
+       RNA_def_property_int_funcs(prop, NULL, "rna_Scene_preview_range_start_frame_set", NULL);
+       RNA_def_property_ui_text(prop, "Preview Range Start Frame", "");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+       
+       prop= RNA_def_property(srna, "preview_range_end_frame", PROP_INT, PROP_NONE);
+       RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE);
+       RNA_def_property_int_sdna(prop, NULL, "r.pefra");
+       RNA_def_property_int_funcs(prop, NULL, "rna_Scene_preview_range_end_frame_set", NULL);
+       RNA_def_property_ui_text(prop, "Preview Range End Frame", "");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+       
+       /* Stamp */
        prop= RNA_def_property(srna, "stamp_note", PROP_STRING, PROP_NONE);
        RNA_def_property_string_sdna(prop, NULL, "r.stamp_udata");
        RNA_def_property_ui_text(prop, "Stamp Note", "User define note for the render stamping.");
        RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-
+       
+       /* Nodes (Compositing) */
        prop= RNA_def_property(srna, "nodetree", PROP_POINTER, PROP_NONE);
        RNA_def_property_ui_text(prop, "Node Tree", "Compositing node tree.");
        
+       /* Sequencer */
        prop= RNA_def_property(srna, "sequence_editor", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "ed");
        RNA_def_property_struct_type(prop, "SequenceEditor");
        RNA_def_property_ui_text(prop, "Sequence Editor", "");
        
+       /* Keying Sets */
+               // TODO: hide the fact that active keyingset is an int?
        prop= RNA_def_property(srna, "keyingsets", PROP_COLLECTION, PROP_NONE);
        RNA_def_property_collection_sdna(prop, NULL, "keyingsets", NULL);
        RNA_def_property_struct_type(prop, "KeyingSet");
@@ -1669,17 +1762,20 @@ void RNA_def_scene(BlenderRNA *brna)
        prop= RNA_def_property(srna, "active_keyingset", PROP_INT, PROP_NONE);
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "Active Keying Set", "Current Keying Set index.");
-
+       
+       /* Tool Settings */
        prop= RNA_def_property(srna, "tool_settings", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "toolsettings");
        RNA_def_property_struct_type(prop, "ToolSettings");
        RNA_def_property_ui_text(prop, "Tool Settings", "");
-
+       
+       /* Render Data */
        prop= RNA_def_property(srna, "render_data", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "r");
        RNA_def_property_struct_type(prop, "SceneRenderData");
        RNA_def_property_ui_text(prop, "Render Data", "");
-
+       
+       /* Markers */
        prop= RNA_def_property(srna, "timeline_markers", PROP_COLLECTION, PROP_NONE);
        RNA_def_property_collection_sdna(prop, NULL, "markers", NULL);
        RNA_def_property_struct_type(prop, "TimelineMarker");