accident when merge. revert to r37405

This commit is contained in:
Xiao Xiangquan 2011-06-11 18:15:46 +00:00
commit 12f0795d49
38 changed files with 254 additions and 484 deletions

@ -53,17 +53,8 @@ if(NOT DEFINED PYTHON_INCLUDE_DIRS)
if(NOT _Found_PYTHON_H)
message(FATAL_ERROR "Python.h not found")
endif()
unset(_Found_PYTHON_H)
unset(_Python_HEADER)
unset(_CURRENT_ABI_FLAGS)
unset(_CURRENT_PATH)
endif()
unset(_Python_ABI_FLAGS)
unset(_Python_PATHS)
#=============================================================================
# now the python versions are found

@ -5,25 +5,14 @@
# use it instead of include_directories()
macro(blender_include_dirs
includes)
set(_ALL_INCS "")
foreach(_INC ${ARGV})
get_filename_component(_ABS_INC ${_INC} ABSOLUTE)
list(APPEND _ALL_INCS ${_ABS_INC})
foreach(inc ${ARGV})
get_filename_component(abs_inc ${inc} ABSOLUTE)
list(APPEND all_incs ${abs_inc})
endforeach()
include_directories(${_ALL_INCS})
unset(_INC)
unset(_ABS_INC)
unset(_ALL_INCS)
include_directories(${all_incs})
endmacro()
set(_ALL_INCS "")
foreach(_INC ${ARGV})
get_filename_component(_ABS_INC ${_INC} ABSOLUTE)
list(APPEND _ALL_INCS ${_ABS_INC})
include_directories(SYSTEM ${_ALL_INCS})
unset(_INC)
unset(_ABS_INC)
unset(_ALL_INCS)
macro(blender_source_group
sources)
@ -31,17 +20,14 @@ macro(blender_source_group
# Group by location on disk
source_group("Source Files" FILES CMakeLists.txt)
foreach(_SRC ${sources})
get_filename_component(_SRC_EXT ${_SRC} EXT)
if(${_SRC_EXT} MATCHES ".h" OR ${_SRC_EXT} MATCHES ".hpp")
source_group("Header Files" FILES ${_SRC})
foreach(SRC ${sources})
get_filename_component(SRC_EXT ${SRC} EXT)
if(${SRC_EXT} MATCHES ".h" OR ${SRC_EXT} MATCHES ".hpp")
source_group("Header Files" FILES ${SRC})
else()
source_group("Source Files" FILES ${_SRC})
source_group("Source Files" FILES ${SRC})
endif()
endforeach()
unset(_SRC)
unset(_SRC_EXT)
endmacro()
@ -197,11 +183,10 @@ macro(setup_liblinks
endif()
if(WITH_IMAGE_OPENEXR)
if(WIN32 AND NOT UNIX)
foreach(_LOOP_VAR ${OPENEXR_LIB})
target_link_libraries(${target} debug ${_LOOP_VAR}_d)
target_link_libraries(${target} optimized ${_LOOP_VAR})
foreach(loop_var ${OPENEXR_LIB})
target_link_libraries(${target} debug ${loop_var}_d)
target_link_libraries(${target} optimized ${loop_var})
endforeach()
unset(_LOOP_VAR)
else()
target_link_libraries(${target} ${OPENEXR_LIB})
endif()
@ -214,11 +199,10 @@ macro(setup_liblinks
endif()
if(WITH_OPENCOLLADA)
if(WIN32 AND NOT UNIX)
foreach(_LOOP_VAR ${OPENCOLLADA_LIB})
target_link_libraries(${target} debug ${_LOOP_VAR}_d)
target_link_libraries(${target} optimized ${_LOOP_VAR})
foreach(loop_var ${OPENCOLLADA_LIB})
target_link_libraries(${target} debug ${loop_var}_d)
target_link_libraries(${target} optimized ${loop_var})
endforeach()
unset(_LOOP_VAR)
target_link_libraries(${target} debug ${PCRE_LIB}_d)
target_link_libraries(${target} optimized ${PCRE_LIB})
if(EXPAT_LIB)
@ -475,13 +459,4 @@ macro(blender_project_hack_post)
unset(_reset_standard_cflags_rel)
unset(_reset_standard_cxxflags_rel)
# --------------------------------------------------
# workaround for omission in cmake 2.8.4's GNU.cmake
if(CMAKE_COMPILER_IS_GNUCC)
if(NOT DARWIN)
set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
endif()
endif()
endmacro()

@ -37,11 +37,6 @@ def is_dict(obj):
return hasattr(obj, 'keys') and hasattr(getattr(obj, 'keys'), '__call__')
def is_struct_seq(obj):
"""Returns whether obj is a structured sequence subclass: sys.float_info"""
return isinstance(obj, tuple) and hasattr(obj, 'n_fields')
def complete_names(word, namespace):
"""Complete variable names or attributes
@ -179,7 +174,7 @@ def complete(word, namespace, private=True):
if type(obj) in (bool, float, int, str):
return []
# an extra char '[', '(' or '.' will be added
if hasattr(obj, '__getitem__') and not is_struct_seq(obj):
if hasattr(obj, '__getitem__'):
# list or dictionary
matches = complete_indices(word, namespace, obj)
elif hasattr(obj, '__call__'):

@ -80,7 +80,7 @@ def get_console(console_id):
if console_data:
console, stdout, stderr = console_data
# XXX, bug in python 3.1.2, 3.2 ? (worked in 3.1.1)
# XXX, bug in python 3.1.2 ? (worked in 3.1.1)
# seems there is no way to clear StringIO objects for writing, have to make new ones each time.
import io
stdout = io.StringIO()

@ -99,9 +99,8 @@ class DATA_PT_normals(MeshButtonsPanel, bpy.types.Panel):
split.prop(mesh, "show_double_sided")
class DATA_PT_texture_space(MeshButtonsPanel, bpy.types.Panel):
bl_label = "Texture Space"
bl_options = {'DEFAULT_CLOSED'}
class DATA_PT_settings(MeshButtonsPanel, bpy.types.Panel):
bl_label = "Settings"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
def draw(self, context):
@ -110,13 +109,8 @@ class DATA_PT_texture_space(MeshButtonsPanel, bpy.types.Panel):
mesh = context.mesh
layout.prop(mesh, "texture_mesh")
layout.separator()
layout.prop(mesh, "use_auto_texspace")
row = layout.row()
row.column().prop(mesh, "texspace_location", text="Location")
row.column().prop(mesh, "texspace_size", text="Size")
class DATA_PT_vertex_groups(MeshButtonsPanel, bpy.types.Panel):
bl_label = "Vertex Groups"

@ -71,10 +71,6 @@ class DATA_PT_metaball(DataButtonsPanel, bpy.types.Panel):
layout.label(text="Update:")
layout.prop(mball, "update_method", expand=True)
row = layout.row()
row.column().prop(mball, "texspace_location")
row.column().prop(mball, "texspace_size")
class DATA_PT_metaball_element(DataButtonsPanel, bpy.types.Panel):
bl_label = "Active Element"

@ -483,10 +483,11 @@ class DATA_PT_modifiers(ModifierButtonsPanel, bpy.types.Panel):
col.label(text="Mode:")
col.prop(md, "wrap_method", text="")
if md.wrap_method == 'PROJECT':
split = layout.split(percentage=0.25)
col = split.column()
if md.wrap_method == 'PROJECT':
col.label(text="Axis:")
col.prop(md, "use_project_x")
col.prop(md, "use_project_y")
@ -498,6 +499,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, bpy.types.Panel):
col.prop(md, "use_positive_direction")
col = split.column()
col.label(text="Cull Faces:")
col.prop(md, "cull_face", expand=True)

@ -254,7 +254,8 @@ class RENDER_PT_post_processing(RenderButtonsPanel, bpy.types.Panel):
col.prop(rd, "use_compositing")
col.prop(rd, "use_sequencer")
split.prop(rd, "dither_intensity", text="Dither", slider=True)
col = split.column()
col.prop(rd, "dither_intensity", text="Dither", slider=True)
layout.separator()

@ -180,6 +180,7 @@ static void clean_paths(Main *main)
BLI_bpathIterator_free(bpi);
for(scene= main->scene.first; scene; scene= scene->id.next) {
BLI_clean(scene->r.backbuf);
BLI_clean(scene->r.pic);
}
}

@ -475,7 +475,8 @@ Scene *add_scene(const char *name)
sce->audio.doppler_factor = 1.0;
sce->audio.speed_of_sound = 343.3;
BLI_strncpy(sce->r.pic, U.renderdir, sizeof(sce->r.pic));
strcpy(sce->r.backbuf, "//backbuf");
strcpy(sce->r.pic, U.renderdir);
BLI_init_rctf(&sce->r.safety, 0.1f, 0.9f, 0.1f, 0.9f);
sce->r.osa= 8;

@ -71,9 +71,8 @@ void PE_undo_push(struct Scene *scene, const char *str);
void PE_undo_step(struct Scene *scene, int step);
void PE_undo(struct Scene *scene);
void PE_redo(struct Scene *scene);
void PE_undo_menu(struct Scene *scene, struct Object *ob);
int PE_undo_valid(struct Scene *scene);
void PE_undo_number(struct Scene *scene, int nr);
char *PE_undo_get_name(struct Scene *scene, int nr, int *active);
#endif /* ED_PARTICLE_H */

@ -45,7 +45,6 @@ struct uiHandleButtonData;
struct wmEvent;
struct wmOperatorType;
struct wmWindow;
struct wmTimer;
struct uiStyle;
struct uiWidgetColors;
struct uiLayout;
@ -109,7 +108,7 @@ typedef enum {
/* uiBut->flag */
#define UI_SELECT 1 /* use when the button is pressed */
#define UI_SCROLLED 2 /* temp hidden, scrolled away */
/*#define UI_MOUSE_OVER 2*/ /*UNUSED, free flag*/
#define UI_ACTIVE 4
#define UI_HAS_ICON 8
#define UI_TEXTINPUT 16
@ -117,8 +116,8 @@ typedef enum {
/* warn: rest of uiBut->flag in UI_interface.h */
/* internal panel drawing defines */
#define PNL_GRID (UI_UNIT_Y / 5) /* 4 default */
#define PNL_HEADER UI_UNIT_Y /* 20 default */
#define PNL_GRID 4
#define PNL_HEADER 20
/* panel->flag */
#define PNL_SELECT 1
@ -370,7 +369,7 @@ extern void ui_convert_to_unit_alt_name(uiBut *but, char *str, int maxlen);
extern int ui_set_but_string(struct bContext *C, uiBut *but, const char *str);
extern int ui_get_but_string_max_length(uiBut *but);
extern void ui_set_but_default(struct bContext *C, short all);
extern void ui_set_but_default(struct bContext *C, uiBut *but, short all);
extern void ui_set_but_soft_range(uiBut *but, double value);
@ -397,8 +396,6 @@ struct uiPopupBlockHandle {
void (*cancel_func)(void *arg);
void *popup_arg;
struct wmTimer *scrolltimer;
/* for operator popups */
struct wmOperatorType *optype;
int opcontext;
@ -419,11 +416,9 @@ void ui_block_func_ICONTEXTROW(struct bContext *C, uiLayout *layout, void *arg_b
struct ARegion *ui_tooltip_create(struct bContext *C, struct ARegion *butregion, uiBut *but);
void ui_tooltip_free(struct bContext *C, struct ARegion *ar);
uiBut *ui_popup_menu_memory(struct uiBlock *block, struct uiBut *but);
float *ui_block_hsv_get(struct uiBlock *block);
void ui_popup_block_scrolltest(struct uiBlock *block);
uiBut *ui_popup_menu_memory(uiBlock *block, uiBut *but);
float *ui_block_hsv_get(uiBlock *block);
/* searchbox for string button */
ARegion *ui_searchbox_create(struct bContext *C, struct ARegion *butregion, uiBut *but);
@ -486,11 +481,6 @@ void ui_widget_color_init(struct ThemeUI *tui);
void ui_draw_menu_item(struct uiFontStyle *fstyle, rcti *rect, const char *name, int iconid, int state);
void ui_draw_preview_item(struct uiFontStyle *fstyle, rcti *rect, const char *name, int iconid, int state);
extern unsigned char checker_stipple_sml[];
/* used for transp checkers */
#define UI_TRANSP_DARK 100
#define UI_TRANSP_LIGHT 160
/* interface_style.c */
void uiStyleInit(void);

@ -174,14 +174,14 @@ void ED_object_add_generic_props(wmOperatorType *ot, int do_editmode)
PropertyRNA *prop;
/* note: this property gets hidden for add-camera operator */
RNA_def_boolean(ot->srna, "view_align", 0, "Align to View", "Align the new object to the view");
RNA_def_boolean(ot->srna, "view_align", 0, "Align to View", "Align the new object to the view.");
if(do_editmode) {
prop= RNA_def_boolean(ot->srna, "enter_editmode", 0, "Enter Editmode", "Enter editmode when adding this object");
prop= RNA_def_boolean(ot->srna, "enter_editmode", 0, "Enter Editmode", "Enter editmode when adding this object.");
RNA_def_property_flag(prop, PROP_HIDDEN);
}
RNA_def_float_vector_xyz(ot->srna, "location", 3, NULL, -FLT_MAX, FLT_MAX, "Location", "Location for the newly added object", -FLT_MAX, FLT_MAX);
RNA_def_float_vector_xyz(ot->srna, "location", 3, NULL, -FLT_MAX, FLT_MAX, "Location", "Location for the newly added object.", -FLT_MAX, FLT_MAX);
RNA_def_float_rotation(ot->srna, "rotation", 3, NULL, -FLT_MAX, FLT_MAX, "Rotation", "Rotation for the newly added object", -FLT_MAX, FLT_MAX);
prop = RNA_def_boolean_layer_member(ot->srna, "layers", 20, NULL, "Layer", "");
@ -637,7 +637,7 @@ static int object_armature_add_exec(bContext *C, wmOperator *op)
else DAG_id_tag_update(&obedit->id, OB_RECALC_DATA);
if(obedit==NULL) {
BKE_report(op->reports, RPT_ERROR, "Cannot create editmode armature");
BKE_report(op->reports, RPT_ERROR, "Cannot create editmode armature.");
return OPERATOR_CANCELLED;
}
@ -1382,7 +1382,7 @@ static int convert_exec(bContext *C, wmOperator *op)
void OBJECT_OT_convert(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Convert to";
ot->name= "Convert";
ot->description = "Convert selected objects to another type";
ot->idname= "OBJECT_OT_convert";
@ -1395,8 +1395,8 @@ void OBJECT_OT_convert(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* properties */
ot->prop= RNA_def_enum(ot->srna, "target", convert_target_items, OB_MESH, "Target", "Type of object to convert to");
RNA_def_boolean(ot->srna, "keep_original", 0, "Keep Original", "Keep original objects instead of replacing them");
ot->prop= RNA_def_enum(ot->srna, "target", convert_target_items, OB_MESH, "Target", "Type of object to convert to.");
RNA_def_boolean(ot->srna, "keep_original", 0, "Keep Original", "Keep original objects instead of replacing them.");
}
/**************************** Duplicate ************************/
@ -1716,7 +1716,7 @@ void OBJECT_OT_duplicate(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* to give to transform */
RNA_def_boolean(ot->srna, "linked", 0, "Linked", "Duplicate object but not object data, linking to the original data");
RNA_def_boolean(ot->srna, "linked", 0, "Linked", "Duplicate object but not object data, linking to the original data.");
prop= RNA_def_enum(ot->srna, "mode", transform_mode_types, TFM_TRANSLATION, "Mode", "");
RNA_def_property_flag(prop, PROP_HIDDEN);
}
@ -1786,8 +1786,8 @@ void OBJECT_OT_add_named(wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
RNA_def_boolean(ot->srna, "linked", 0, "Linked", "Duplicate object but not object data, linking to the original data");
RNA_def_string(ot->srna, "name", "Cube", 24, "Name", "Object name to add");
RNA_def_boolean(ot->srna, "linked", 0, "Linked", "Duplicate object but not object data, linking to the original data.");
RNA_def_string(ot->srna, "name", "Cube", 24, "Name", "Object name to add.");
}
@ -1812,11 +1812,11 @@ static int join_exec(bContext *C, wmOperator *op)
Object *ob= CTX_data_active_object(C);
if(scene->obedit) {
BKE_report(op->reports, RPT_ERROR, "This data does not support joining in editmode");
BKE_report(op->reports, RPT_ERROR, "This data does not support joining in editmode.");
return OPERATOR_CANCELLED;
}
else if(object_data_is_libdata(ob)) {
BKE_report(op->reports, RPT_ERROR, "Can't edit external libdata");
BKE_report(op->reports, RPT_ERROR, "Can't edit external libdata.");
return OPERATOR_CANCELLED;
}
@ -1865,11 +1865,11 @@ static int join_shapes_exec(bContext *C, wmOperator *op)
Object *ob= CTX_data_active_object(C);
if(scene->obedit) {
BKE_report(op->reports, RPT_ERROR, "This data does not support joining in editmode");
BKE_report(op->reports, RPT_ERROR, "This data does not support joining in editmode.");
return OPERATOR_CANCELLED;
}
else if(object_data_is_libdata(ob)) {
BKE_report(op->reports, RPT_ERROR, "Can't edit external libdata");
BKE_report(op->reports, RPT_ERROR, "Can't edit external libdata.");
return OPERATOR_CANCELLED;
}

@ -203,9 +203,9 @@ static int object_shape_key_mirror(bContext *C, Object *ob)
fp1= ((float *)kb->data) + i1*3;
fp2= ((float *)kb->data) + i2*3;
copy_v3_v3(tvec, fp1);
copy_v3_v3(fp1, fp2);
copy_v3_v3(fp2, tvec);
VECCOPY(tvec, fp1);
VECCOPY(fp1, fp2);
VECCOPY(fp2, tvec);
/* flip x axis */
fp1[0] = -fp1[0];
@ -217,46 +217,7 @@ static int object_shape_key_mirror(bContext *C, Object *ob)
mesh_octree_table(ob, NULL, NULL, 'e');
}
else if (ob->type == OB_LATTICE) {
Lattice *lt= ob->data;
int i1, i2;
float *fp1, *fp2;
int u, v, w;
/* half but found up odd value */
const int pntsu_half = (((lt->pntsu / 2) + (lt->pntsu % 2))) ;
/* currently editmode isnt supported by mesh so
* ignore here for now too */
/* if(lt->editlatt) lt= lt->editlatt->latt; */
for(w=0; w<lt->pntsw; w++) {
for(v=0; v<lt->pntsv; v++) {
for(u=0; u<pntsu_half; u++) {
int u_inv= (lt->pntsu - 1) - u;
float tvec[3];
if(u == u_inv) {
i1= LT_INDEX(lt, u, v, w);
fp1= ((float *)kb->data) + i1*3;
fp1[0]= -fp1[0];
}
else {
i1= LT_INDEX(lt, u, v, w);
i2= LT_INDEX(lt, u_inv, v, w);
fp1= ((float *)kb->data) + i1*3;
fp2= ((float *)kb->data) + i2*3;
copy_v3_v3(tvec, fp1);
copy_v3_v3(fp1, fp2);
copy_v3_v3(fp2, tvec);
fp1[0]= -fp1[0];
fp2[0]= -fp2[0];
}
}
}
}
}
/* todo, other types? */
MEM_freeN(tag_elem);
}

@ -77,7 +77,6 @@
static void vgroup_remap_update_users(Object *ob, int *map);
static void vgroup_delete_edit_mode(Object *ob, bDeformGroup *defgroup);
static void vgroup_delete_object_mode(Object *ob, bDeformGroup *dg);
static void vgroup_delete_all(Object *ob);
static Lattice *vgroup_edit_lattice(Object *ob)
{
@ -139,30 +138,22 @@ void ED_vgroup_delete(Object *ob, bDeformGroup *defgroup)
vgroup_delete_object_mode(ob, dg);
}
int ED_vgroup_data_create(ID *id)
void ED_vgroup_data_create(ID *id)
{
/* create deform verts */
if(GS(id->name)==ID_ME) {
Mesh *me= (Mesh *)id;
me->dvert= CustomData_add_layer(&me->vdata, CD_MDEFORMVERT, CD_CALLOC, NULL, me->totvert);
return TRUE;
}
else if(GS(id->name)==ID_LT) {
Lattice *lt= (Lattice *)id;
lt->dvert= MEM_callocN(sizeof(MDeformVert)*lt->pntsu*lt->pntsv*lt->pntsw, "lattice deformVert");
return TRUE;
}
else {
return FALSE;
}
}
static int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_tot)
{
*dvert_tot = 0;
*dvert_arr = NULL;
if(id) {
switch(GS(id->name)) {
case ID_ME:
@ -175,6 +166,8 @@ static int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_to
int i;
if (!CustomData_has_layer(&em->vdata, CD_MDEFORMVERT)) {
*dvert_tot = 0;
*dvert_arr = NULL;
return 0;
}
@ -202,10 +195,9 @@ static int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_to
return 1;
}
else {
else
return 0;
}
}
case ID_LT:
{
int i=0;
@ -230,6 +222,8 @@ static int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_to
}
}
*dvert_arr= NULL;
*dvert_tot= 0;
return 0;
}
@ -271,24 +265,13 @@ int ED_vgroup_copy_array(Object *ob, Object *ob_from)
int i;
int totdef_from= BLI_countlist(&ob_from->defbase);
int totdef= BLI_countlist(&ob->defbase);
short new_vgroup= FALSE;
ED_vgroup_give_parray(ob_from->data, &dvert_array_from, &dvert_tot_from);
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
if((dvert_array == NULL) && (dvert_array_from != NULL) && ED_vgroup_data_create(ob->data)) {
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
new_vgroup= TRUE;
}
if(ob==ob_from || dvert_tot==0 || (dvert_tot != dvert_tot_from) || dvert_array_from==NULL || dvert_array==NULL) {
if (dvert_array) MEM_freeN(dvert_array);
if (dvert_array_from) MEM_freeN(dvert_array_from);
if(new_vgroup == TRUE) {
/* free the newly added vgroup since it wasn't compatible */
vgroup_delete_all(ob);
}
return 0;
}
@ -1032,15 +1015,35 @@ static void vgroup_clean_all(Object *ob, float eul, int keep_single)
if (dvert_array) MEM_freeN(dvert_array);
}
static void dvert_mirror_op(MDeformVert *dvert, MDeformVert *dvert_mirr,
const char sel, const char sel_mirr,
const int *flip_map,
const short mirror_weights, const short flip_vgroups)
void ED_vgroup_mirror(Object *ob, int mirror_weights, int flip_vgroups)
{
BLI_assert(sel || sel_mirr);
EditVert *eve, *eve_mirr;
MDeformVert *dvert, *dvert_mirr;
int *flip_map;
if(sel_mirr && sel) {
if(mirror_weights==0 && flip_vgroups==0)
return;
/* only the active group */
if(ob->type == OB_MESH) {
Mesh *me= ob->data;
EditMesh *em = BKE_mesh_get_editmesh(me);
EM_cache_x_mirror_vert(ob, em);
if(!CustomData_has_layer(&em->vdata, CD_MDEFORMVERT))
return;
flip_map= defgroup_flip_map(ob, 0);
/* Go through the list of editverts and assign them */
for(eve=em->verts.first; eve; eve=eve->next){
if((eve_mirr=eve->tmp.v)) {
if((eve_mirr->f & SELECT || eve->f & SELECT) && (eve != eve_mirr)) {
dvert= CustomData_em_get(&em->vdata, eve->data, CD_MDEFORMVERT);
dvert_mirr= CustomData_em_get(&em->vdata, eve_mirr->data, CD_MDEFORMVERT);
if(dvert && dvert_mirr) {
if(eve_mirr->f & SELECT && eve->f & SELECT) {
/* swap */
if(mirror_weights)
SWAP(MDeformVert, *dvert, *dvert_mirr);
@ -1051,7 +1054,7 @@ static void dvert_mirror_op(MDeformVert *dvert, MDeformVert *dvert_mirr,
}
else {
/* dvert should always be the target */
if(sel_mirr) {
if(eve_mirr->f & SELECT) {
SWAP(MDeformVert *, dvert, dvert_mirr);
}
@ -1061,46 +1064,6 @@ static void dvert_mirror_op(MDeformVert *dvert, MDeformVert *dvert_mirr,
defvert_flip(dvert, flip_map);
}
}
}
void ED_vgroup_mirror(Object *ob, const short mirror_weights, const short flip_vgroups)
{
#define VGROUP_MIRR_OP dvert_mirror_op(dvert, dvert_mirr, sel, sel_mirr, flip_map, mirror_weights, flip_vgroups)
EditVert *eve, *eve_mirr;
MDeformVert *dvert, *dvert_mirr;
short sel, sel_mirr;
int *flip_map;
if(mirror_weights==0 && flip_vgroups==0)
return;
flip_map= defgroup_flip_map(ob, 0);
/* only the active group */
if(ob->type == OB_MESH) {
Mesh *me= ob->data;
EditMesh *em = BKE_mesh_get_editmesh(me);
if(!CustomData_has_layer(&em->vdata, CD_MDEFORMVERT)) {
MEM_freeN(flip_map);
return;
}
EM_cache_x_mirror_vert(ob, em);
/* Go through the list of editverts and assign them */
for(eve=em->verts.first; eve; eve=eve->next){
if((eve_mirr=eve->tmp.v)) {
sel= eve->f & SELECT;
sel_mirr= eve_mirr->f & SELECT;
if((sel || sel_mirr) && (eve != eve_mirr)) {
dvert= CustomData_em_get(&em->vdata, eve->data, CD_MDEFORMVERT);
dvert_mirr= CustomData_em_get(&em->vdata, eve_mirr->data, CD_MDEFORMVERT);
if(dvert && dvert_mirr) {
VGROUP_MIRR_OP;
}
}
@ -1108,58 +1071,10 @@ void ED_vgroup_mirror(Object *ob, const short mirror_weights, const short flip_v
}
}
MEM_freeN(flip_map);
BKE_mesh_end_editmesh(me, em);
}
else if (ob->type == OB_LATTICE) {
Lattice *lt= ob->data;
int i1, i2;
int u, v, w;
int pntsu_half;
/* half but found up odd value */
if(lt->editlatt) lt= lt->editlatt->latt;
if(lt->pntsu == 1 || lt->dvert == NULL) {
MEM_freeN(flip_map);
return;
}
/* unlike editmesh we know that by only looping over the first hald of
* the 'u' indicies it will cover all points except the middle which is
* ok in this case */
pntsu_half= lt->pntsu / 2;
for(w=0; w<lt->pntsw; w++) {
for(v=0; v<lt->pntsv; v++) {
for(u=0; u<pntsu_half; u++) {
int u_inv= (lt->pntsu - 1) - u;
if(u != u_inv) {
BPoint *bp, *bp_mirr;
i1= LT_INDEX(lt, u, v, w);
i2= LT_INDEX(lt, u_inv, v, w);
bp= &lt->def[i1];
bp_mirr= &lt->def[i2];
sel= bp->f1 & SELECT;
sel_mirr= bp_mirr->f1 & SELECT;
if(sel || sel_mirr) {
dvert= &lt->dvert[i1];
dvert_mirr= &lt->dvert[i2];
VGROUP_MIRR_OP;
}
}
}
}
}
}
MEM_freeN(flip_map);
#undef VGROUP_MIRR_OP
}
static void vgroup_remap_update_users(Object *ob, int *map)
@ -2005,25 +1920,17 @@ void OBJECT_OT_vertex_group_copy_to_linked(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
static int vertex_group_copy_to_selected_exec(bContext *C, wmOperator *op)
static int vertex_group_copy_to_selected_exec(bContext *C, wmOperator *UNUSED(op))
{
Object *obact= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
int change= 0;
int fail= 0;
CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects)
{
if(obact != ob) {
if(ED_vgroup_copy_array(ob, obact)) change++;
else fail++;
}
if(obact != ob)
ED_vgroup_copy_array(ob, obact);
}
CTX_DATA_END;
if((change == 0 && fail == 0) || fail) {
BKE_reportf(op->reports, RPT_ERROR, "Copy to VGroups to Selected warning done %d, failed %d, object data must have matching indicies", change, fail);
}
return OPERATOR_FINISHED;
}

@ -3970,6 +3970,18 @@ int PE_undo_valid(Scene *scene)
return 0;
}
static void PTCacheUndo_number(Scene *scene, PTCacheEdit *edit, int nr)
{
PTCacheUndo *undo;
int a=1;
for(undo= edit->undo.first; undo; undo= undo->next, a++) {
if(a==nr) break;
}
edit->curundo= undo;
PE_undo_step(scene, 0);
}
static void PTCacheUndo_clear(PTCacheEdit *edit)
{
PTCacheUndo *undo;
@ -3995,38 +4007,32 @@ void PE_redo(Scene *scene)
PE_undo_step(scene, -1);
}
void PE_undo_number(Scene *scene, int nr)
void PE_undo_menu(Scene *scene, Object *ob)
{
PTCacheEdit *edit= PE_get_current(scene, OBACT);
PTCacheEdit *edit= PE_get_current(scene, ob);
PTCacheUndo *undo;
int a=0;
DynStr *ds;
short event=0;
char *menu;
for(undo= edit->undo.first; undo; undo= undo->next, a++) {
if(a==nr) break;
if(!edit) return;
ds= BLI_dynstr_new();
BLI_dynstr_append(ds, "Particlemode Undo History %t");
for(undo= edit->undo.first; undo; undo= undo->next) {
BLI_dynstr_append(ds, "|");
BLI_dynstr_append(ds, undo->name);
}
edit->curundo= undo;
PE_undo_step(scene, 0);
}
menu= BLI_dynstr_get_cstring(ds);
BLI_dynstr_free(ds);
/* get name of undo item, return null if no item with this index */
/* if active pointer, set it to 1 if true */
char *PE_undo_get_name(Scene *scene, int nr, int *active)
{
PTCacheEdit *edit= PE_get_current(scene, OBACT);
PTCacheUndo *undo;
// XXX event= pupmenu_col(menu, 20);
MEM_freeN(menu);
if(active) *active= 0;
if(edit) {
undo= BLI_findlink(&edit->undo, nr);
if(undo) {
if(active && undo==edit->curundo)
*active= 1;
return undo->name;
}
}
return NULL;
if(event>0) PTCacheUndo_number(scene, edit, event);
}
/************************ utilities ******************************/

@ -184,7 +184,8 @@ void render_view_open(bContext *C, int mx, int my)
area_was_image = 1;
/* this function returns with changed context */
sa= ED_screen_full_newspace(C, CTX_wm_area(C), SPACE_IMAGE);
ED_screen_full_newspace(C, CTX_wm_area(C), SPACE_IMAGE);
sa= CTX_wm_area(C);
}
if(!sa) {

@ -3692,27 +3692,15 @@ static void do_projectpaint_draw(ProjPaintState *ps, ProjPixel *projPixel, float
}
}
static void do_projectpaint_draw_f(ProjPaintState *ps, ProjPixel *projPixel, float *rgba, float alpha, float mask, int use_color_correction) {
static void do_projectpaint_draw_f(ProjPaintState *ps, ProjPixel *projPixel, float *rgba, float alpha, float mask) {
if (ps->is_texbrush) {
/* rgba already holds a texture result here from higher level function */
float rgba_br[3];
if(use_color_correction){
srgb_to_linearrgb_v3_v3(rgba_br, ps->brush->rgb);
mul_v3_v3(rgba, rgba_br);
}
else{
mul_v3_v3(rgba, ps->brush->rgb);
}
}
else {
if(use_color_correction){
srgb_to_linearrgb_v3_v3(rgba, ps->brush->rgb);
rgba[0] *= ps->brush->rgb[0];
rgba[1] *= ps->brush->rgb[1];
rgba[2] *= ps->brush->rgb[2];
}
else {
VECCOPY(rgba, ps->brush->rgb);
}
rgba[3] = 1.0;
}
if (ps->is_airbrush==0 && mask < 1.0f) {
IMB_blend_color_float(projPixel->newColor.f, projPixel->newColor.f, rgba, alpha, ps->blend);
@ -3748,7 +3736,6 @@ static void *do_projectpaint_thread(void *ph_v)
float falloff;
int bucket_index;
int is_floatbuf = 0;
int use_color_correction = 0;
const short tool = ps->tool;
rctf bucket_bounds;
@ -3854,7 +3841,6 @@ static void *do_projectpaint_thread(void *ph_v)
last_projIma->touch = 1;
is_floatbuf = last_projIma->ibuf->rect_float ? 1 : 0;
use_color_correction = (last_projIma->ibuf->profile == IB_PROFILE_LINEAR_RGB) ? 1 : 0;
}
last_partial_redraw_cell = last_projIma->partRedrawRect + projPixel->bb_cell_index;
@ -3885,7 +3871,7 @@ static void *do_projectpaint_thread(void *ph_v)
else do_projectpaint_smear(ps, projPixel, alpha, mask, smearArena, &smearPixels, co);
break;
default:
if (is_floatbuf) do_projectpaint_draw_f(ps, projPixel, rgba, alpha, mask, use_color_correction);
if (is_floatbuf) do_projectpaint_draw_f(ps, projPixel, rgba, alpha, mask);
else do_projectpaint_draw(ps, projPixel, rgba, alpha, mask);
break;
}
@ -4001,7 +3987,7 @@ static int project_paint_sub_stroke(ProjPaintState *ps, BrushPainter *painter, c
// we may want to use this later
// brush_painter_require_imbuf(painter, ((ibuf->rect_float)? 1: 0), 0, 0);
if (brush_painter_paint(painter, project_paint_op, pos, time, pressure, ps, 0)) {
if (brush_painter_paint(painter, project_paint_op, pos, time, pressure, ps)) {
return 1;
}
else return 0;
@ -4072,6 +4058,7 @@ static void imapaint_dirty_region(Image *ima, ImBuf *ibuf, int x, int y, int w,
static void imapaint_image_update(SpaceImage *sima, Image *image, ImBuf *ibuf, short texpaint)
{
if(ibuf->rect_float)
/* TODO - should just update a portion from imapaintpartial! */
ibuf->userflags |= IB_RECT_INVALID; /* force recreate of char rect */
if(ibuf->mipmap[0])
@ -4268,8 +4255,8 @@ static ImBuf *imapaint_lift_clone(ImBuf *ibuf, ImBuf *ibufb, int *pos)
static void imapaint_convert_brushco(ImBuf *ibufb, float *pos, int *ipos)
{
ipos[0]= (int)floorf((pos[0] - ibufb->x/2) + 1.0f);
ipos[1]= (int)floorf((pos[1] - ibufb->y/2) + 1.0f);
ipos[0]= (int)(pos[0] - ibufb->x/2);
ipos[1]= (int)(pos[1] - ibufb->y/2);
}
/* dosnt run for projection painting
@ -4422,7 +4409,7 @@ static int imapaint_paint_sub_stroke(ImagePaintState *s, BrushPainter *painter,
brush_painter_require_imbuf(painter, ((ibuf->rect_float)? 1: 0), 0, 0);
if (brush_painter_paint(painter, imapaint_paint_op, pos, time, pressure, s, ibuf->profile == IB_PROFILE_LINEAR_RGB)) {
if (brush_painter_paint(painter, imapaint_paint_op, pos, time, pressure, s)) {
if (update)
imapaint_image_update(s->sima, image, ibuf, texpaint);
return 1;
@ -4876,7 +4863,12 @@ static void paint_apply_event(bContext *C, wmOperator *op, wmEvent *event)
PointerRNA itemptr;
float pressure, mousef[2];
double time;
int tablet;
int tablet, mouse[2];
// XXX +1 matches brush location better but
// still not exact, find out why and fix ..
mouse[0]= event->mval[0] + 1;
mouse[1]= event->mval[1] + 1;
time= PIL_check_seconds_timer();
@ -4896,8 +4888,8 @@ static void paint_apply_event(bContext *C, wmOperator *op, wmEvent *event)
pressure= pop->prev_pressure ? pop->prev_pressure : 1.0f;
if(pop->first) {
pop->prevmouse[0]= event->mval[0];
pop->prevmouse[1]= event->mval[1];
pop->prevmouse[0]= mouse[0];
pop->prevmouse[1]= mouse[1];
pop->starttime= time;
/* special exception here for too high pressure values on first touch in
@ -4916,8 +4908,8 @@ static void paint_apply_event(bContext *C, wmOperator *op, wmEvent *event)
/* fill in stroke */
RNA_collection_add(op->ptr, "stroke", &itemptr);
mousef[0] = (float)(event->mval[0]);
mousef[1] = (float)(event->mval[1]);
mousef[0] = (float)(mouse[0]);
mousef[1] = (float)(mouse[1]);
RNA_float_set_array(&itemptr, "mouse", mousef);
RNA_float_set(&itemptr, "time", (float)(time - pop->starttime));
RNA_float_set(&itemptr, "pressure", pressure);
@ -5020,45 +5012,31 @@ static int get_imapaint_zoom(bContext *C, float *zoomx, float *zoomy)
static void brush_drawcursor(bContext *C, int x, int y, void *UNUSED(customdata))
{
#define PX_SIZE_FADE_MAX 12.0f
#define PX_SIZE_FADE_MIN 4.0f
Brush *brush= image_paint_brush(C);
Paint *paint= paint_get_active(CTX_data_scene(C));
if(paint && brush && paint->flags & PAINT_SHOW_BRUSH) {
if(paint && brush) {
float zoomx, zoomy;
const float size= (float)brush_size(brush);
const short use_zoom= get_imapaint_zoom(C, &zoomx, &zoomy);
const float pixel_size= MAX2(size * zoomx, size * zoomy);
float alpha= 0.5f;
/* fade out the brush (cheap trick to work around brush interfearing with sampling [#])*/
if(pixel_size < PX_SIZE_FADE_MIN) {
if(!(paint->flags & PAINT_SHOW_BRUSH))
return;
}
else if (pixel_size < PX_SIZE_FADE_MAX) {
alpha *= (pixel_size - PX_SIZE_FADE_MIN) / (PX_SIZE_FADE_MAX - PX_SIZE_FADE_MIN);
}
glPushMatrix();
glTranslatef((float)x, (float)y, 0.0f);
if(use_zoom)
if(get_imapaint_zoom(C, &zoomx, &zoomy))
glScalef(zoomx, zoomy, 1.0f);
glColor4f(brush->add_col[0], brush->add_col[1], brush->add_col[2], alpha);
glColor4f(brush->add_col[0], brush->add_col[1], brush->add_col[2], 0.5f);
glEnable( GL_LINE_SMOOTH );
glEnable(GL_BLEND);
glutil_draw_lined_arc(0, (float)(M_PI*2.0), size, 40);
glutil_draw_lined_arc(0, (float)(M_PI*2.0), (float)brush_size(brush), 40);
glDisable(GL_BLEND);
glDisable( GL_LINE_SMOOTH );
glPopMatrix();
}
#undef PX_SIZE_FADE_MAX
#undef PX_SIZE_FADE_MIN
}
static void toggle_paint_cursor(bContext *C, int enable)

@ -65,7 +65,6 @@ int paint_space_stroke_enabled(struct Brush *br);
int paint_stroke_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
int paint_stroke_exec(struct bContext *C, struct wmOperator *op);
int paint_stroke_cancel(struct bContext *C, struct wmOperator *op);
struct ViewContext *paint_stroke_view_context(struct PaintStroke *stroke);
void *paint_stroke_mode_data(struct PaintStroke *stroke);
void paint_stroke_set_mode_data(struct PaintStroke *stroke, void *mode_data);

@ -916,19 +916,6 @@ int paint_stroke_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
int paint_stroke_cancel(bContext *C, wmOperator *op)
{
PaintStroke *stroke = op->customdata;
if(stroke->done)
stroke->done(C, stroke);
MEM_freeN(stroke);
op->customdata = NULL;
return OPERATOR_CANCELLED;
}
ViewContext *paint_stroke_view_context(PaintStroke *stroke)
{
return &stroke->vc;

@ -301,7 +301,7 @@ static void wpaint_mirror_vgroup_ensure(Object *ob, int *vgroup_mirror)
flip_side_name(name, defgroup->name, FALSE);
if(strcmp(name, defgroup->name) != 0) {
for (curdef= ob->defbase.first, mirrdef= 0; curdef; curdef=curdef->next, mirrdef++) {
for (curdef= ob->defbase.first, mirrdef; curdef; curdef=curdef->next, mirrdef++) {
if (!strcmp(curdef->name, name)) {
break;
}
@ -1600,13 +1600,6 @@ static int wpaint_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_RUNNING_MODAL;
}
static int wpaint_cancel(bContext *C, wmOperator *op)
{
paint_stroke_cancel(C, op);
return OPERATOR_CANCELLED;
}
void PAINT_OT_weight_paint(wmOperatorType *ot)
{
@ -1619,7 +1612,6 @@ void PAINT_OT_weight_paint(wmOperatorType *ot)
ot->modal= paint_stroke_modal;
/* ot->exec= vpaint_exec; <-- needs stroke property */
ot->poll= weight_paint_poll;
ot->cancel= wpaint_cancel;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING;
@ -1900,13 +1892,6 @@ static int vpaint_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_RUNNING_MODAL;
}
static int vpaint_cancel(bContext *C, wmOperator *op)
{
paint_stroke_cancel(C, op);
return OPERATOR_CANCELLED;
}
void PAINT_OT_vertex_paint(wmOperatorType *ot)
{
/* identifiers */
@ -1918,7 +1903,6 @@ void PAINT_OT_vertex_paint(wmOperatorType *ot)
ot->modal= paint_stroke_modal;
/* ot->exec= vpaint_exec; <-- needs stroke property */
ot->poll= vertex_paint_poll;
ot->cancel= vpaint_cancel;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING;

@ -3559,24 +3559,6 @@ static int sculpt_brush_stroke_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
static int sculpt_brush_stroke_cancel(bContext *C, wmOperator *op)
{
Object *ob= CTX_data_active_object(C);
SculptSession *ss = ob->sculpt;
Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
paint_stroke_cancel(C, op);
if(ss->cache) {
sculpt_cache_free(ss->cache);
ss->cache = NULL;
}
sculpt_brush_exit_tex(sd);
return OPERATOR_CANCELLED;
}
static void SCULPT_OT_brush_stroke(wmOperatorType *ot)
{
static EnumPropertyItem stroke_mode_items[] = {
@ -3595,7 +3577,6 @@ static void SCULPT_OT_brush_stroke(wmOperatorType *ot)
ot->modal= paint_stroke_modal;
ot->exec= sculpt_brush_stroke_exec;
ot->poll= sculpt_poll;
ot->cancel= sculpt_brush_stroke_cancel;
/* flags (sculpt does own undo? (ton) */
ot->flag= OPTYPE_BLOCKING;

@ -556,20 +556,20 @@ static void uiblock_layer_pass_buttons(uiLayout *layout, RenderResult *rr, Image
/* menu buts */
if(render_slot) {
strp= slot_menu();
but= uiDefButS(block, MENU, 0, strp, 0, 0, wmenu1, UI_UNIT_Y, render_slot, 0,0,0,0, "Select Slot");
but= uiDefButS(block, MENU, 0, strp, 0, 0, wmenu1, 20, render_slot, 0,0,0,0, "Select Slot");
uiButSetFunc(but, image_multi_cb, rr, iuser);
MEM_freeN(strp);
}
if(rr) {
strp= layer_menu(rr, &iuser->layer);
but= uiDefButS(block, MENU, 0, strp, 0, 0, wmenu2, UI_UNIT_Y, &iuser->layer, 0,0,0,0, "Select Layer");
but= uiDefButS(block, MENU, 0, strp, 0, 0, wmenu2, 20, &iuser->layer, 0,0,0,0, "Select Layer");
uiButSetFunc(but, image_multi_cb, rr, iuser);
MEM_freeN(strp);
rl= BLI_findlink(&rr->layers, iuser->layer - (rr->rectf?1:0)); /* fake compo layer, return NULL is meant to be */
strp= pass_menu(rl, &iuser->pass);
but= uiDefButS(block, MENU, 0, strp, 0, 0, wmenu3, UI_UNIT_Y, &iuser->pass, 0,0,0,0, "Select Pass");
but= uiDefButS(block, MENU, 0, strp, 0, 0, wmenu3, 20, &iuser->pass, 0,0,0,0, "Select Pass");
uiButSetFunc(but, image_multi_cb, rr, iuser);
MEM_freeN(strp);
}

@ -1086,13 +1086,6 @@ static int snode_bg_viewmove_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_RUNNING_MODAL;
}
static int snode_bg_viewmove_cancel(bContext *UNUSED(C), wmOperator *op)
{
MEM_freeN(op->customdata);
op->customdata= NULL;
return OPERATOR_CANCELLED;
}
void NODE_OT_backimage_move(wmOperatorType *ot)
{
@ -1105,7 +1098,6 @@ void NODE_OT_backimage_move(wmOperatorType *ot)
ot->invoke= snode_bg_viewmove_invoke;
ot->modal= snode_bg_viewmove_modal;
ot->poll= composite_node_active;
ot->cancel= snode_bg_viewmove_cancel;
/* flags */
ot->flag= OPTYPE_BLOCKING;
@ -1392,14 +1384,6 @@ static int node_resize_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_CANCELLED|OPERATOR_PASS_THROUGH;
}
static int node_resize_cancel(bContext *UNUSED(C), wmOperator *op)
{
MEM_freeN(op->customdata);
op->customdata= NULL;
return OPERATOR_CANCELLED;
}
void NODE_OT_resize(wmOperatorType *ot)
{
/* identifiers */
@ -1410,7 +1394,6 @@ void NODE_OT_resize(wmOperatorType *ot)
ot->invoke= node_resize_invoke;
ot->modal= node_resize_modal;
ot->poll= ED_operator_node_active;
ot->cancel= node_resize_cancel;
/* flags */
ot->flag= OPTYPE_BLOCKING;
@ -2296,18 +2279,6 @@ static int node_link_invoke(bContext *C, wmOperator *op, wmEvent *event)
}
}
static int node_link_cancel(bContext *C, wmOperator *op)
{
SpaceNode *snode= CTX_wm_space_node(C);
bNodeLinkDrag *nldrag= op->customdata;
nodeRemLink(snode->edittree, nldrag->link);
BLI_remlink(&snode->linkdrag, nldrag);
MEM_freeN(nldrag);
return OPERATOR_CANCELLED;
}
void NODE_OT_link(wmOperatorType *ot)
{
/* identifiers */
@ -2319,7 +2290,6 @@ void NODE_OT_link(wmOperatorType *ot)
ot->modal= node_link_modal;
// ot->exec= node_link_exec;
ot->poll= ED_operator_node_active;
ot->cancel= node_link_cancel;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING;
@ -2432,7 +2402,6 @@ void NODE_OT_links_cut(wmOperatorType *ot)
ot->invoke= WM_gesture_lines_invoke;
ot->modal= WM_gesture_lines_modal;
ot->exec= cut_links_exec;
ot->cancel= WM_gesture_lines_cancel;
ot->poll= ED_operator_node_active;

@ -1557,7 +1557,7 @@ static void restore_localviewdata(ScrArea *sa, int free)
}
}
static void endlocalview(Main *bmain, Scene *scene, ScrArea *sa)
static void endlocalview(Scene *scene, ScrArea *sa)
{
View3D *v3d= sa->spacedata.first;
struct Base *base;
@ -1583,8 +1583,6 @@ static void endlocalview(Main *bmain, Scene *scene, ScrArea *sa)
base->object->lay= base->lay;
}
}
DAG_on_visible_update(bmain, FALSE);
}
}
@ -1593,7 +1591,7 @@ static int localview_exec(bContext *C, wmOperator *UNUSED(unused))
View3D *v3d= CTX_wm_view3d(C);
if(v3d->localvd)
endlocalview(CTX_data_main(C), CTX_data_scene(C), CTX_wm_area(C));
endlocalview(CTX_data_scene(C), CTX_wm_area(C));
else
initlocalview(CTX_data_main(C), CTX_data_scene(C), CTX_wm_area(C));

@ -4140,7 +4140,7 @@ void param_construct_end(ParamHandle *handle, ParamBool fill, ParamBool impl)
param_assert(phandle->state == PHANDLE_STATE_ALLOCATED);
phandle->ncharts = p_connect_pairs(phandle, (PBool)impl);
phandle->ncharts = p_connect_pairs(phandle, impl);
phandle->charts = p_split_charts(phandle, chart, phandle->ncharts);
p_chart_delete(phandle->construction_chart);
@ -4189,7 +4189,7 @@ void param_lscm_begin(ParamHandle *handle, ParamBool live, ParamBool abf)
for (i = 0; i < phandle->ncharts; i++) {
for (f=phandle->charts[i]->faces; f; f=f->nextlink)
p_face_backup_uvs(f);
p_chart_lscm_begin(phandle->charts[i], (PBool)live, (PBool)abf);
p_chart_lscm_begin(phandle->charts[i], live, abf);
}
}

@ -253,13 +253,20 @@ typedef struct RenderData {
*/
short yparts;
short planes, imtype, subimtype, quality;
short winpos, planes, imtype, subimtype;
/** Mode bits: */
/* 0: Enable backbuffering for images */
short bufflag;
short quality;
/**
* Render to image editor, fullscreen or to new window.
*/
short displaymode;
short rpad1, rpad2;
/**
* Flags for render settings. Use bit-masking to access the settings.
*/
@ -315,7 +322,11 @@ typedef struct RenderData {
/**
* Adjustment factors for the aspect ratio in the x direction, was a short in 2.45
*/
float xasp, yasp;
float xasp;
/**
* Adjustment factors for the aspect ratio in the x direction, was a short in 2.45
*/
float yasp;
float frs_sec_base;
@ -338,8 +349,8 @@ typedef struct RenderData {
short bake_normal_space, bake_quad_split;
float bake_maxdist, bake_biasdist, bake_pad;
/* path to render output */
char pic[240];
/* paths to backbufffer, output */
char backbuf[160], pic[160];
/* stamps flags. */
int stamp;

@ -305,7 +305,7 @@ typedef struct UserDef {
int savetime;
char tempdir[160]; // FILE_MAXDIR length
char fontdir[160];
char renderdir[240]; // FILE_MAX length
char renderdir[160];
char textudir[160];
char plugtexdir[160];
char plugseqdir[160];

@ -238,13 +238,6 @@ static void rna_UserDef_weight_color_update(Main *bmain, Scene *scene, PointerRN
static void rna_UserDef_viewport_lights_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
/* if all lights are off gpu_draw resets them all, [#27627]
* so disallow them all to be disabled */
if(U.light[0].flag==0 && U.light[1].flag==0 && U.light[2].flag==0) {
SolidLight *light= ptr->data;
light->flag |= 1;
}
WM_main_add_notifier(NC_SPACE|ND_SPACE_VIEW3D|NS_VIEW3D_GPU, NULL);
rna_userdef_update(bmain, scene, ptr);
}

@ -214,7 +214,7 @@ struct Render
ListBase instancetable;
int totinstance;
struct Image *bakebuf;
struct Image *backbuf, *bakebuf;
struct GHash *orco_hash;

@ -4665,6 +4665,7 @@ void RE_Database_Free(Render *re)
re->totvlak=re->totvert=re->totstrand=re->totlamp=re->tothalo= 0;
re->i.convertdone= 0;
re->backbuf= NULL;
re->bakebuf= NULL;
if(re->scene)

@ -149,6 +149,7 @@ static Render *envmap_render_copy(Render *re, EnvMap *env)
envre->r.layers.first= envre->r.layers.last= NULL;
envre->r.filtertype= 0;
envre->r.xparts= envre->r.yparts= 2;
envre->r.bufflag= 0;
envre->r.size= 100;
envre->r.yasp= envre->r.xasp= 1;

@ -2065,6 +2065,36 @@ static void do_render_fields_3d(Render *re)
re->display_draw(re->ddh, re->result, NULL);
}
static void load_backbuffer(Render *re)
{
if(re->r.alphamode == R_ADDSKY) {
ImBuf *ibuf;
char name[256];
BLI_strncpy(name, re->r.backbuf, sizeof(name));
BLI_path_abs(name, re->main->name);
BLI_path_frame(name, re->r.cfra, 0);
if(re->backbuf) {
re->backbuf->id.us--;
if(re->backbuf->id.us<1)
BKE_image_signal(re->backbuf, NULL, IMA_SIGNAL_RELOAD);
}
re->backbuf= BKE_add_image_file(name);
ibuf= BKE_image_get_ibuf(re->backbuf, NULL);
if(ibuf==NULL) {
// error() doesnt work with render window open
//error("No backbuf there!");
printf("Error: No backbuf %s\n", name);
}
else {
if (re->r.mode & R_FIELDS)
image_de_interlace(re->backbuf, re->r.mode & R_ODDFIELD);
}
}
}
/* main render routine, no compositing */
static void do_render_fields_blur_3d(Render *re)
{
@ -2076,6 +2106,10 @@ static void do_render_fields_blur_3d(Render *re)
return;
}
/* backbuffer initialize */
if(re->r.bufflag & 1)
load_backbuffer(re);
/* now use renderdata and camera to set viewplane */
RE_SetCamera(re, camera);

@ -502,6 +502,21 @@ int shadeHaloFloat(HaloRen *har, float *col, int zz,
/* ------------------------------------------------------------------------- */
static void fillBackgroundImage(float *collector, float fx, float fy)
{
collector[0] = 0.0;
collector[1] = 0.0;
collector[2] = 0.0;
collector[3] = 0.0;
if(R.backbuf) {
float dx= 1.0f/(float)R.winx;
float dy= 1.0f/(float)R.winy;
image_sample(R.backbuf, fx*dx, fy*dy, dx, dy, collector);
}
}
/* Only view vector is important here. Result goes to colf[3] */
void shadeSkyView(float *colf, float *rco, float *view, float *dxyview, short thread)
{
@ -611,14 +626,18 @@ void shadeSkyPixel(float *collector, float fx, float fy, short thread)
float fac;
if((R.wrld.skytype & (WO_SKYBLEND+WO_SKYTEX))==0) {
/* 1. solid color */
/* 1. Do a backbuffer image: */
if(R.r.bufflag & 1) {
fillBackgroundImage(collector, fx, fy);
}
else if((R.wrld.skytype & (WO_SKYBLEND+WO_SKYTEX))==0) {
/* 2. solid color */
VECCOPY(collector, &R.wrld.horr);
collector[3] = 0.0f;
}
else {
/* 2. */
/* 3. */
/* This one true because of the context of this routine */
if(R.wrld.skytype & WO_SKYPAPER) {

@ -43,6 +43,9 @@ set(INC
../../../intern/ghost
../../../intern/opennl/extern
../../../source/gameengine/BlenderRoutines
)
set(INC_SYS
${ZLIB_INCLUDE_DIRS}
${OPENGL_INCLUDE_DIR}
${GLEW_INCLUDE_PATH}
@ -50,7 +53,6 @@ set(INC
set(SRC
intern/wm.c
intern/wm_apple.c
intern/wm_cursors.c
intern/wm_dragdrop.c
intern/wm_draw.c
@ -87,17 +89,18 @@ if(WITH_OPENCOLLADA)
endif()
if(WITH_CODEC_QUICKTIME)
list(APPEND INC ../quicktime ${QUICKTIME_INC})
list(APPEND INC ../quicktime)
list(APPEND INC_SYS ${QUICKTIME_INC})
add_definitions(-DWITH_QUICKTIME)
endif()
if(WITH_CODEC_FFMPEG)
list(APPEND INC ${FFMPEG_INC})
list(APPEND INC_SYS ${FFMPEG_INC})
add_definitions(-DWITH_FFMPEG)
endif()
if(WITH_PYTHON)
list(APPEND INC ../python ${PYTHON_INCLUDE_DIRS})
list(APPEND INC ../python)
add_definitions(-DWITH_PYTHON)
if(WITH_PYTHON_SECURITY)
@ -109,12 +112,16 @@ if(WITH_GAMEENGINE)
add_definitions(-DWITH_GAMEENGINE)
endif()
if(WITH_COCOA)
list(REMOVE_ITEM SRC "${CMAKE_CURRENT_SOURCE_DIR}/intern/wm_apple.c")
if(APPLE)
if(NOT WITH_COCOA)
list(APPEND SRC
intern/wm_apple.c
)
endif()
endif()
if(WITH_BUILDINFO)
add_definitions(-DNAN_BUILDINFO)
endif()
blender_add_lib_nolist(bf_windowmanager "${SRC}" "${INC}")
blender_add_lib_nolist(bf_windowmanager "${SRC}" "${INC}" "${INC_SYS}")

@ -183,12 +183,6 @@ endif()
message(STATUS "Player Skipping: (${REM_MSG})")
endif()
target_link_libraries(blenderplayer ${BLENDER_SORTED_LIBS})
unset(SEARCHLIB)
unset(SORTLIB)
unset(REMLIB)
unset(REM_MSG)
# else()
# target_link_libraries(blenderplayer ${BLENDER_LINK_LIBS})
# endif()

@ -876,12 +876,6 @@ endif()
message(STATUS "Blender Skipping: (${REM_MSG})")
endif()
target_link_libraries(blender ${BLENDER_SORTED_LIBS})
unset(SEARCHLIB)
unset(SORTLIB)
unset(REMLIB)
unset(REM_MSG)
#else()
# target_link_libraries(blender ${BLENDER_LINK_LIBS})
#endif()

@ -538,7 +538,7 @@ static int set_output(int argc, const char **argv, void *data)
if (argc >= 1){
if (CTX_data_scene(C)) {
Scene *scene= CTX_data_scene(C);
BLI_strncpy(scene->r.pic, argv[1], sizeof(scene->r.pic));
BLI_strncpy(scene->r.pic, argv[1], FILE_MAXDIR);
} else {
printf("\nError: no blend loaded. cannot use '-o / --render-output'.\n");
}