From 513f363ea05e9c9cf77588eb86dd4984f8aad60d Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 14 Apr 2012 11:58:52 +0000 Subject: [PATCH 001/156] Silencing some compiler warnings on Windows argv is defined as "char *" here so that unicode magic can happen causing problems later on when "const char**" is expected instead. While this fix is redundant on other platforms, it's a lot less confusing than some of the alternative fixes. --- source/creator/creator.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/creator/creator.c b/source/creator/creator.c index 308cdab9726..1093f71260c 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -1256,7 +1256,7 @@ int main(int argc, const char **argv) #endif /* first test for background */ - ba = BLI_argsInit(argc, argv); /* skip binary path */ + ba = BLI_argsInit(argc, (const char **)argv); /* skip binary path */ setupArguments(C, ba, &syshandle); BLI_argsParse(ba, 1, NULL, NULL); @@ -1281,7 +1281,7 @@ int main(int argc, const char **argv) BLI_argsParse(ba, 2, NULL, NULL); BLI_argsParse(ba, 3, NULL, NULL); - WM_init(C, argc, argv); + WM_init(C, argc, (const char **)argv); /* this is properly initialized with user defs, but this is default */ /* call after loading the startup.blend so we can read U.tempdir */ @@ -1294,7 +1294,7 @@ int main(int argc, const char **argv) else { BLI_argsParse(ba, 3, NULL, NULL); - WM_init(C, argc, argv); + WM_init(C, argc, (const char **)argv); /* don't use user preferences temp dir */ BLI_init_temporary_dir(NULL); From 310c0b9f100bbaf0c51888808fcb9fbf11ea27f9 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Sat, 14 Apr 2012 15:06:41 +0000 Subject: [PATCH 002/156] Fixed another bunch of i18n bugs (thx to Leon Cheung for spotting them), among which: * Drag'n'drop translation in Outliner * "Execute" button in file window * "Labels" of spacing elements, in multi-column enums * A glitch with nodes "Value to RGB", they where called "ColorRamp" in node_type_base() call. This is not definitive, though, as it appears that UI node names are determined by this call, while it should be by "defines" in rna_nodetrre_types.h, I guess... Anyway, not good to have such things in two different places! Also moved default context name under BLF_translation.h, much better to have those all in one place, accessible from whole Blender code! --- source/blender/blenfont/BLF_translation.h | 15 +++++++++ source/blender/editors/space_file/file_draw.c | 8 ++--- source/blender/editors/space_file/filesel.c | 2 +- .../blender/editors/space_node/node_buttons.c | 4 ++- .../editors/space_outliner/CMakeLists.txt | 5 +++ .../blender/editors/space_outliner/SConscript | 8 +++-- .../editors/space_outliner/outliner_edit.c | 33 ++++++++++++------- source/blender/editors/util/CMakeLists.txt | 4 +++ source/blender/editors/util/SConscript | 6 +++- .../composite/nodes/node_composite_valToRgb.c | 2 +- .../nodes/shader/nodes/node_shader_valToRgb.c | 2 +- .../texture/nodes/node_texture_valToRgb.c | 2 +- source/blender/windowmanager/WM_types.h | 3 -- .../windowmanager/intern/wm_dragdrop.c | 12 +++++-- .../windowmanager/intern/wm_operators.c | 13 ++++---- 15 files changed, 84 insertions(+), 35 deletions(-) diff --git a/source/blender/blenfont/BLF_translation.h b/source/blender/blenfont/BLF_translation.h index 5e2fee36af0..2c786f87521 100644 --- a/source/blender/blenfont/BLF_translation.h +++ b/source/blender/blenfont/BLF_translation.h @@ -67,6 +67,7 @@ const char *BLF_translate_do_tooltip(const char *contex, const char *msgid); /* The "translation-marker" macro. */ #define N_(msgid) msgid +#define CTX_N_(context, msgid) msgid /* Those macros should be used everywhere in UI code. */ #ifdef WITH_INTERNATIONAL /* #define _(msgid) BLF_gettext(msgid) */ @@ -82,4 +83,18 @@ const char *BLF_translate_do_tooltip(const char *contex, const char *msgid); #define CTX_TIP_(context, msgid) msgid #endif +/****************************************************************************** + * All i18n contexts must be defined here. + * This is a nice way to be sure not to use a context twice for different + * things, and limit the number of existing contexts! + */ + +/* Default, void context. Just in case... */ +#define BLF_I18NCONTEXT_DEFAULT "" + +/* Default context for operator names/labels. */ +#define BLF_I18NCONTEXT_OPERATOR_DEFAULT "Operator" + + + #endif /* __BLF_TRANSLATION_H__ */ diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 4d764bff311..d312ccf8aa1 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -223,11 +223,11 @@ void file_draw_buttons(const bContext *C, ARegion *ar) /* Execute / cancel buttons. */ if (loadbutton) { - - uiDefButO(block, BUT, "FILE_OT_execute", WM_OP_EXEC_REGION_WIN, IFACE_(params->title), - max_x - loadbutton, line1_y, loadbutton, btn_h, TIP_(params->title)); + /* params->title is already translated! */ + uiDefButO(block, BUT, "FILE_OT_execute", WM_OP_EXEC_REGION_WIN, params->title, + max_x - loadbutton, line1_y, loadbutton, btn_h, ""); uiDefButO(block, BUT, "FILE_OT_cancel", WM_OP_EXEC_REGION_WIN, IFACE_("Cancel"), - max_x - loadbutton, line2_y, loadbutton, btn_h, TIP_("Cancel")); + max_x - loadbutton, line2_y, loadbutton, btn_h, ""); } uiEndBlock(C, block); diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index 3ed3c0690a2..55093c7e5de 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -123,7 +123,7 @@ short ED_fileselect_set_params(SpaceFile *sfile) const short is_directory= (RNA_struct_find_property(op->ptr, "directory") != NULL); const short is_relative_path= (RNA_struct_find_property(op->ptr, "relative_path") != NULL); - BLI_strncpy(params->title, op->type->name, sizeof(params->title)); + BLI_strncpy(params->title, RNA_struct_ui_name(op->type->srna), sizeof(params->title)); if (RNA_struct_find_property(op->ptr, "filemode")) params->type = RNA_int_get(op->ptr, "filemode"); diff --git a/source/blender/editors/space_node/node_buttons.c b/source/blender/editors/space_node/node_buttons.c index c67cb5f7c71..f7d517915da 100644 --- a/source/blender/editors/space_node/node_buttons.c +++ b/source/blender/editors/space_node/node_buttons.c @@ -44,6 +44,8 @@ #include "BLI_rand.h" #include "BLI_utildefines.h" +#include "BLF_translation.h" + #include "BKE_context.h" #include "BKE_global.h" #include "BKE_node.h" @@ -150,7 +152,7 @@ void node_buttons_register(ARegionType *art) pt= MEM_callocN(sizeof(PanelType), "spacetype node panel active node"); strcpy(pt->idname, "NODE_PT_item"); - strcpy(pt->label, "Active Node"); + strcpy(pt->label, IFACE_("Active Node")); pt->draw= active_node_panel; pt->poll= active_node_poll; BLI_addtail(&art->paneltypes, pt); diff --git a/source/blender/editors/space_outliner/CMakeLists.txt b/source/blender/editors/space_outliner/CMakeLists.txt index 27b4a568860..5a7bbc21934 100644 --- a/source/blender/editors/space_outliner/CMakeLists.txt +++ b/source/blender/editors/space_outliner/CMakeLists.txt @@ -22,6 +22,7 @@ set(INC ../include ../../blenkernel ../../blenlib + ../../blenfont ../../blenloader ../../imbuf ../../makesdna @@ -47,4 +48,8 @@ set(SRC outliner_intern.h ) +if(WITH_INTERNATIONAL) + add_definitions(-DWITH_INTERNATIONAL) +endif() + blender_add_lib(bf_editor_space_outliner "${SRC}" "${INC}" "${INC_SYS}") diff --git a/source/blender/editors/space_outliner/SConscript b/source/blender/editors/space_outliner/SConscript index ab0b8582d33..a6f2e3c2a5d 100644 --- a/source/blender/editors/space_outliner/SConscript +++ b/source/blender/editors/space_outliner/SConscript @@ -2,9 +2,13 @@ Import ('env') sources = env.Glob('*.c') +defs = [] -incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' +incs = '../include ../../blenlib ../../blenfont ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc ../../makesrna ../../blenloader' incs += ' #/extern/glew/include' -env.BlenderLib ( 'bf_editors_space_outliner', sources, Split(incs), [], libtype=['core'], priority=[60] ) +if env['WITH_BF_INTERNATIONAL']: + defs.append('WITH_INTERNATIONAL') + +env.BlenderLib ( 'bf_editors_space_outliner', sources, Split(incs), defines=defs, libtype=['core'], priority=[60] ) diff --git a/source/blender/editors/space_outliner/outliner_edit.c b/source/blender/editors/space_outliner/outliner_edit.c index c59cd626a93..981c4a5d867 100644 --- a/source/blender/editors/space_outliner/outliner_edit.c +++ b/source/blender/editors/space_outliner/outliner_edit.c @@ -65,6 +65,7 @@ # include #endif +#include "BLF_translation.h" #include "BKE_animsys.h" #include "BKE_context.h" @@ -1538,7 +1539,7 @@ static int parent_drop_invoke(bContext *C, wmOperator *op, wmEvent *event) } else { /* Menu creation */ - uiPopupMenu *pup= uiPupMenuBegin(C, "Set Parent To", ICON_NONE); + uiPopupMenu *pup= uiPupMenuBegin(C, IFACE_("Set Parent To"), ICON_NONE); uiLayout *layout= uiPupMenuLayout(pup); PointerRNA ptr; @@ -1548,7 +1549,8 @@ static int parent_drop_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_string_set(&ptr, "child", childname); RNA_enum_set(&ptr, "type", PAR_OBJECT); /* Cannot use uiItemEnumO()... have multiple properties to set. */ - uiItemFullO(layout, "OUTLINER_OT_parent_drop", "Object", 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); + uiItemFullO(layout, "OUTLINER_OT_parent_drop", IFACE_("Object"), + 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); /* par becomes parent, make the associated menus */ if (par->type==OB_ARMATURE) { @@ -1556,57 +1558,66 @@ static int parent_drop_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_string_set(&ptr, "parent", parname); RNA_string_set(&ptr, "child", childname); RNA_enum_set(&ptr, "type", PAR_ARMATURE); - uiItemFullO(layout, "OUTLINER_OT_parent_drop", "Armature Deform", 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); + uiItemFullO(layout, "OUTLINER_OT_parent_drop", IFACE_("Armature Deform"), + 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); WM_operator_properties_create(&ptr, "OUTLINER_OT_parent_drop"); RNA_string_set(&ptr, "parent", parname); RNA_string_set(&ptr, "child", childname); RNA_enum_set(&ptr, "type", PAR_ARMATURE_NAME); - uiItemFullO(layout, "OUTLINER_OT_parent_drop", " With Empty Groups", 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); + uiItemFullO(layout, "OUTLINER_OT_parent_drop", IFACE_(" With Empty Groups"), + 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); WM_operator_properties_create(&ptr, "OUTLINER_OT_parent_drop"); RNA_string_set(&ptr, "parent", parname); RNA_string_set(&ptr, "child", childname); RNA_enum_set(&ptr, "type", PAR_ARMATURE_ENVELOPE); - uiItemFullO(layout, "OUTLINER_OT_parent_drop", " With Envelope Weights", 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); + uiItemFullO(layout, "OUTLINER_OT_parent_drop", IFACE_(" With Envelope Weights"), + 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); WM_operator_properties_create(&ptr, "OUTLINER_OT_parent_drop"); RNA_string_set(&ptr, "parent", parname); RNA_string_set(&ptr, "child", childname); RNA_enum_set(&ptr, "type", PAR_ARMATURE_AUTO); - uiItemFullO(layout, "OUTLINER_OT_parent_drop", " With Automatic Weights", 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); + uiItemFullO(layout, "OUTLINER_OT_parent_drop", IFACE_(" With Automatic Weights"), + 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); WM_operator_properties_create(&ptr, "OUTLINER_OT_parent_drop"); RNA_string_set(&ptr, "parent", parname); RNA_string_set(&ptr, "child", childname); RNA_enum_set(&ptr, "type", PAR_BONE); - uiItemFullO(layout, "OUTLINER_OT_parent_drop", "Bone", 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); + uiItemFullO(layout, "OUTLINER_OT_parent_drop", IFACE_("Bone"), + 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); } else if (par->type==OB_CURVE) { WM_operator_properties_create(&ptr, "OUTLINER_OT_parent_drop"); RNA_string_set(&ptr, "parent", parname); RNA_string_set(&ptr, "child", childname); RNA_enum_set(&ptr, "type", PAR_CURVE); - uiItemFullO(layout, "OUTLINER_OT_parent_drop", "Curve Deform", 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); + uiItemFullO(layout, "OUTLINER_OT_parent_drop", IFACE_("Curve Deform"), + 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); WM_operator_properties_create(&ptr, "OUTLINER_OT_parent_drop"); RNA_string_set(&ptr, "parent", parname); RNA_string_set(&ptr, "child", childname); RNA_enum_set(&ptr, "type", PAR_FOLLOW); - uiItemFullO(layout, "OUTLINER_OT_parent_drop", "Follow Path", 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); + uiItemFullO(layout, "OUTLINER_OT_parent_drop", IFACE_("Follow Path"), + 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); WM_operator_properties_create(&ptr, "OUTLINER_OT_parent_drop"); RNA_string_set(&ptr, "parent", parname); RNA_string_set(&ptr, "child", childname); RNA_enum_set(&ptr, "type", PAR_PATH_CONST); - uiItemFullO(layout, "OUTLINER_OT_parent_drop", "Path Constraint", 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); + uiItemFullO(layout, "OUTLINER_OT_parent_drop", IFACE_("Path Constraint"), + 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); } else if (par->type == OB_LATTICE) { WM_operator_properties_create(&ptr, "OUTLINER_OT_parent_drop"); RNA_string_set(&ptr, "parent", parname); RNA_string_set(&ptr, "child", childname); RNA_enum_set(&ptr, "type", PAR_LATTICE); - uiItemFullO(layout, "OUTLINER_OT_parent_drop", "Lattice Deform", 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); + uiItemFullO(layout, "OUTLINER_OT_parent_drop", IFACE_("Lattice Deform"), + 0, ptr.data, WM_OP_EXEC_DEFAULT, 0); } uiPupMenuEnd(C, pup); diff --git a/source/blender/editors/util/CMakeLists.txt b/source/blender/editors/util/CMakeLists.txt index 8eab2fda545..c13e6c16413 100644 --- a/source/blender/editors/util/CMakeLists.txt +++ b/source/blender/editors/util/CMakeLists.txt @@ -89,4 +89,8 @@ set(SRC ../include/UI_view2d.h ) +if(WITH_INTERNATIONAL) + add_definitions(-DWITH_INTERNATIONAL) +endif() + blender_add_lib(bf_editor_util "${SRC}" "${INC}" "${INC_SYS}") diff --git a/source/blender/editors/util/SConscript b/source/blender/editors/util/SConscript index 0a49c9c24a6..74879e54850 100644 --- a/source/blender/editors/util/SConscript +++ b/source/blender/editors/util/SConscript @@ -2,10 +2,14 @@ Import ('env') sources = env.Glob('*.c') +defs = [] incs = '../include ../../blenfont ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' incs += ' ../../makesrna ../../bmesh' incs += ' ../../blenloader' -env.BlenderLib ( 'bf_editors_util', sources, Split(incs), [], libtype=['core','player'], priority=[330,210] ) +if env['WITH_BF_INTERNATIONAL']: + defs.append('WITH_INTERNATIONAL') + +env.BlenderLib ( 'bf_editors_util', sources, Split(incs), defines=defs, libtype=['core','player'], priority=[330,210] ) diff --git a/source/blender/nodes/composite/nodes/node_composite_valToRgb.c b/source/blender/nodes/composite/nodes/node_composite_valToRgb.c index 86986f6038d..841d3e90491 100644 --- a/source/blender/nodes/composite/nodes/node_composite_valToRgb.c +++ b/source/blender/nodes/composite/nodes/node_composite_valToRgb.c @@ -87,7 +87,7 @@ void register_node_type_cmp_valtorgb(bNodeTreeType *ttype) { static bNodeType ntype; - node_type_base(ttype, &ntype, CMP_NODE_VALTORGB, "ColorRamp", NODE_CLASS_CONVERTOR, NODE_OPTIONS); + node_type_base(ttype, &ntype, CMP_NODE_VALTORGB, "Value to RGB", NODE_CLASS_CONVERTOR, NODE_OPTIONS); node_type_socket_templates(&ntype, cmp_node_valtorgb_in, cmp_node_valtorgb_out); node_type_size(&ntype, 240, 200, 300); node_type_init(&ntype, node_composit_init_valtorgb); diff --git a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c b/source/blender/nodes/shader/nodes/node_shader_valToRgb.c index 7e513135203..7cc30e6f192 100644 --- a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c +++ b/source/blender/nodes/shader/nodes/node_shader_valToRgb.c @@ -75,7 +75,7 @@ void register_node_type_sh_valtorgb(bNodeTreeType *ttype) { static bNodeType ntype; - node_type_base(ttype, &ntype, SH_NODE_VALTORGB, "ColorRamp", NODE_CLASS_CONVERTOR, NODE_OPTIONS); + node_type_base(ttype, &ntype, SH_NODE_VALTORGB, "Value to RGB", NODE_CLASS_CONVERTOR, NODE_OPTIONS); node_type_compatibility(&ntype, NODE_OLD_SHADING|NODE_NEW_SHADING); node_type_socket_templates(&ntype, sh_node_valtorgb_in, sh_node_valtorgb_out); node_type_size(&ntype, 240, 200, 300); diff --git a/source/blender/nodes/texture/nodes/node_texture_valToRgb.c b/source/blender/nodes/texture/nodes/node_texture_valToRgb.c index 1d282b4d4cc..45c5de39044 100644 --- a/source/blender/nodes/texture/nodes/node_texture_valToRgb.c +++ b/source/blender/nodes/texture/nodes/node_texture_valToRgb.c @@ -66,7 +66,7 @@ void register_node_type_tex_valtorgb(bNodeTreeType *ttype) { static bNodeType ntype; - node_type_base(ttype, &ntype, TEX_NODE_VALTORGB, "ColorRamp", NODE_CLASS_CONVERTOR, NODE_OPTIONS); + node_type_base(ttype, &ntype, TEX_NODE_VALTORGB, "Value to RGB", NODE_CLASS_CONVERTOR, NODE_OPTIONS); node_type_socket_templates(&ntype, valtorgb_in, valtorgb_out); node_type_size(&ntype, 240, 200, 300); node_type_init(&ntype, valtorgb_init); diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 4aa2c3f6405..7cbeab6a02e 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -428,9 +428,6 @@ typedef struct wmTimer { int sleep; /* internal, put timers to sleep when needed */ } wmTimer; -/* Default context for operator names/labels. */ -#define WM_OPERATOR_DEFAULT_I18NCONTEXT "Operator" - typedef struct wmOperatorType { const char *name; /* text for ui, undo */ const char *idname; /* unique identifier */ diff --git a/source/blender/windowmanager/intern/wm_dragdrop.c b/source/blender/windowmanager/intern/wm_dragdrop.c index 5283bc0a7a5..bbb2a54887e 100644 --- a/source/blender/windowmanager/intern/wm_dragdrop.c +++ b/source/blender/windowmanager/intern/wm_dragdrop.c @@ -36,6 +36,8 @@ #include "MEM_guardedalloc.h" +#include "BLF_translation.h" + #include "BLI_blenlib.h" #include "BIF_gl.h" @@ -55,6 +57,8 @@ #include "UI_interface.h" #include "UI_interface_icons.h" +#include "RNA_access.h" + #include "WM_api.h" #include "WM_types.h" #include "wm_event_system.h" @@ -179,8 +183,10 @@ static const char *dropbox_active(bContext *C, ListBase *handlers, wmDrag *drag, if (handler->dropboxes) { wmDropBox *drop = handler->dropboxes->first; for (; drop; drop = drop->next) { - if (drop->poll(C, drag, event)) - return drop->ot->name; + if (drop->poll(C, drag, event)) + /* XXX Doing translation here might not be ideal, but later we have no more + * access to ot (and hence op context)... */ + return RNA_struct_ui_name(drop->ot->srna); } } } @@ -220,7 +226,7 @@ static void wm_drop_operator_options(bContext *C, wmDrag *drag, wmEvent *event) /* check buttons (XXX todo rna and value) */ if (UI_but_active_drop_name(C) ) { - strcpy(drag->opname, "Paste name"); + strcpy(drag->opname, IFACE_("Paste name")); } else { const char *opname = wm_dropbox_active(C, drag, event); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index be7913b9181..a0992bb65bc 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -147,7 +147,7 @@ void WM_operatortype_append(void (*opfunc)(wmOperatorType *)) ot = MEM_callocN(sizeof(wmOperatorType), "operatortype"); ot->srna = RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties"); /* Set the default i18n context now, so that opfunc can redefine it if needed! */ - RNA_def_struct_translation_context(ot->srna, WM_OPERATOR_DEFAULT_I18NCONTEXT); + RNA_def_struct_translation_context(ot->srna, BLF_I18NCONTEXT_OPERATOR_DEFAULT); opfunc(ot); if (ot->name == NULL) { @@ -169,7 +169,7 @@ void WM_operatortype_append_ptr(void (*opfunc)(wmOperatorType *, void *), void * ot = MEM_callocN(sizeof(wmOperatorType), "operatortype"); ot->srna = RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties"); /* Set the default i18n context now, so that opfunc can redefine it if needed! */ - RNA_def_struct_translation_context(ot->srna, WM_OPERATOR_DEFAULT_I18NCONTEXT); + RNA_def_struct_translation_context(ot->srna, BLF_I18NCONTEXT_OPERATOR_DEFAULT); opfunc(ot, userdata); RNA_def_struct_ui_text(ot->srna, ot->name, ot->description ? ot->description : N_("(undocumented operator)")); RNA_def_struct_identifier(ot->srna, ot->idname); @@ -371,7 +371,7 @@ wmOperatorType *WM_operatortype_append_macro(const char *idname, const char *nam RNA_def_struct_ui_text(ot->srna, ot->name, ot->description); RNA_def_struct_identifier(ot->srna, ot->idname); - RNA_def_struct_translation_context(ot->srna, WM_OPERATOR_DEFAULT_I18NCONTEXT); + RNA_def_struct_translation_context(ot->srna, BLF_I18NCONTEXT_OPERATOR_DEFAULT); BLI_ghash_insert(global_ops_hash, (void *)ot->idname, ot); @@ -396,7 +396,7 @@ void WM_operatortype_append_macro_ptr(void (*opfunc)(wmOperatorType *, void *), ot->description = N_("(undocumented operator)"); /* Set the default i18n context now, so that opfunc can redefine it if needed! */ - RNA_def_struct_translation_context(ot->srna, WM_OPERATOR_DEFAULT_I18NCONTEXT); + RNA_def_struct_translation_context(ot->srna, BLF_I18NCONTEXT_OPERATOR_DEFAULT); opfunc(ot, userdata); RNA_def_struct_ui_text(ot->srna, ot->name, ot->description); @@ -2237,9 +2237,10 @@ static int wm_console_toggle_op(bContext *UNUSED(C), wmOperator *UNUSED(op)) static void WM_OT_console_toggle(wmOperatorType *ot) { - ot->name = "Toggle System Console"; + /* XXX Have to mark these for xgettext, as under linux they do not exists... */ + ot->name = CTX_N_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Toggle System Console"); ot->idname = "WM_OT_console_toggle"; - ot->description = "Toggle System Console"; + ot->description = N_("Toggle System Console"); ot->exec = wm_console_toggle_op; ot->poll = WM_operator_winactive; From e5bda9f8270d390a694c256731d292cc1c5c5235 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Sat, 14 Apr 2012 15:44:31 +0000 Subject: [PATCH 003/156] Fixed some UI message typos (spotted by Leon Cheung, thx). --- source/blender/editors/mesh/editmesh_tools.c | 2 +- source/blender/editors/space_clip/tracking_ops.c | 8 +++++--- source/blender/editors/space_sequencer/sequencer_edit.c | 3 ++- source/blender/makesrna/intern/rna_armature.c | 2 +- source/blender/makesrna/intern/rna_constraint.c | 4 ++-- source/blender/makesrna/intern/rna_fluidsim.c | 2 +- source/blender/makesrna/intern/rna_modifier.c | 4 ++-- source/blender/makesrna/intern/rna_object_force.c | 2 +- source/blender/makesrna/intern/rna_particle.c | 2 +- source/blender/makesrna/intern/rna_tracking.c | 2 +- 10 files changed, 17 insertions(+), 14 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 4cbce3c3764..2c7d43f948e 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -1189,7 +1189,7 @@ void MESH_OT_vert_connect(wmOperatorType *ot) /* identifiers */ ot->name = "Vertex Connect"; ot->idname = "MESH_OT_vert_connect"; - ot->description = "Connect 2 vertices in a face with by an edge, splitting the face in half"; + ot->description = "Connect 2 vertices of a face by an edge, splitting the face in two"; /* api callbacks */ ot->exec = edbm_vert_connect; diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c index 79569b82476..35986fa2700 100644 --- a/source/blender/editors/space_clip/tracking_ops.c +++ b/source/blender/editors/space_clip/tracking_ops.c @@ -2433,7 +2433,7 @@ void CLIP_OT_set_plane(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; /* properties */ - RNA_def_enum(ot->srna, "plane", plane_items, 0, "Plane", "Plane to be sued for orientation"); + RNA_def_enum(ot->srna, "plane", plane_items, 0, "Plane", "Plane to be used for orientation"); } /********************** set axis operator *********************/ @@ -3517,8 +3517,10 @@ void CLIP_OT_clean_tracks(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; /* properties */ - RNA_def_int(ot->srna, "frames", 0, 0, INT_MAX, "Tracked Frames", "Effect on tracks which are tracked less than specified amount of frames", 0, INT_MAX); - RNA_def_float(ot->srna, "error", 0.0f, 0.0f, FLT_MAX, "Reprojection Error", "Effect on tracks with have got larger re-projection error", 0.0f, 100.0f); + RNA_def_int(ot->srna, "frames", 0, 0, INT_MAX, "Tracked Frames", + "Effect on tracks which are tracked less than specified amount of frames", 0, INT_MAX); + RNA_def_float(ot->srna, "error", 0.0f, 0.0f, FLT_MAX, "Reprojection Error", + "Effect on tracks which have got larger re-projection error", 0.0f, 100.0f); RNA_def_enum(ot->srna, "action", actions_items, 0, "Action", "Cleanup action to execute"); } diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index 29fdf80f667..38183ac52c7 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -1319,7 +1319,8 @@ void SEQUENCER_OT_reload(struct wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER; /* no undo, the data changed is stored outside 'main' */ - prop = RNA_def_boolean(ot->srna, "adjust_length", 0, "Adjust Length", "Adjust lenght of strips to their data length"); + prop = RNA_def_boolean(ot->srna, "adjust_length", 0, "Adjust Length", + "Adjust lenght of strips to their data lenght"); RNA_def_property_flag(prop, PROP_SKIP_SAVE); } diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c index 5bd5bb1a778..79b776572cf 100644 --- a/source/blender/makesrna/intern/rna_armature.c +++ b/source/blender/makesrna/intern/rna_armature.c @@ -952,7 +952,7 @@ static void rna_def_armature(BlenderRNA *brna) prop = RNA_def_property(srna, "use_auto_ik", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_AUTO_IK); - RNA_def_property_ui_text(prop, "Auto IK", "Add temporaral IK constraints while grabbing bones in Pose Mode"); + RNA_def_property_ui_text(prop, "Auto IK", "Add temporary IK constraints while grabbing bones in Pose Mode"); RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); RNA_def_property_flag(prop, PROP_LIB_EXCEPTION); diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index 325d6721cd4..6d67f0c00dd 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -1501,7 +1501,7 @@ static void rna_def_constraint_clamp_to(BlenderRNA *brna) srna = RNA_def_struct(brna, "ClampToConstraint", "Constraint"); RNA_def_struct_ui_text(srna, "Clamp To Constraint", - "Constrains an object's location to the nearest point along the target path"); + "Constrain an object's location to the nearest point along the target path"); RNA_def_struct_sdna_from(srna, "bClampToConstraint", "data"); prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE); @@ -1541,7 +1541,7 @@ static void rna_def_constraint_transform(BlenderRNA *brna) {0, NULL, 0, NULL, NULL}}; srna = RNA_def_struct(brna, "TransformConstraint", "Constraint"); - RNA_def_struct_ui_text(srna, "Transformation Constraint", "Maps transformations of the target to the object"); + RNA_def_struct_ui_text(srna, "Transformation Constraint", "Map transformations of the target to the object"); RNA_def_struct_sdna_from(srna, "bTransformConstraint", "data"); prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c index 057f82a44e9..86f03c43e7c 100644 --- a/source/blender/makesrna/intern/rna_fluidsim.c +++ b/source/blender/makesrna/intern/rna_fluidsim.c @@ -598,7 +598,7 @@ static void rna_def_fluidsim_particle(BlenderRNA *brna) RNA_def_property_range(prop, 0.0, 2.0); RNA_def_property_ui_text(prop, "Alpha Influence", "Amount of particle alpha change, inverse of size influence: 0=off (all same alpha), " - "1=full (large particles get lower alphas, smaller ones higher values)"); + "1=full (larger particles get lower alphas, smaller ones higher values)"); prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH); RNA_def_property_string_maxlength(prop, FILE_MAX); diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index c2616e8655e..ca1b3a86087 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -2709,7 +2709,7 @@ static void rna_def_modifier_weightvgedit(BlenderRNA *brna) prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, weightvg_edit_falloff_type_items); - RNA_def_property_ui_text(prop, "Falloff Type", "How weights are mapped to there new values"); + RNA_def_property_ui_text(prop, "Falloff Type", "How weights are mapped to their new values"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); prop = RNA_def_property(srna, "use_add", PROP_BOOLEAN, PROP_NONE); @@ -2907,7 +2907,7 @@ static void rna_def_modifier_weightvgproximity(BlenderRNA *brna) prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, weightvg_proximity_falloff_type_items); - RNA_def_property_ui_text(prop, "Falloff Type", "How weights are mapped to there new values"); + RNA_def_property_ui_text(prop, "Falloff Type", "How weights are mapped to their new values"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); /* Common masking properties. */ diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c index d7dc09932cb..c52b6251223 100644 --- a/source/blender/makesrna/intern/rna_object_force.c +++ b/source/blender/makesrna/intern/rna_object_force.c @@ -1650,7 +1650,7 @@ static void rna_def_softbody(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "colball"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); /* code is not ready for that yet */ RNA_def_property_range(prop, -10.0f, 10.0f); - RNA_def_property_ui_text(prop, "Ball Size", "Absolute ball size or factor if not manual adjusted"); + RNA_def_property_ui_text(prop, "Ball Size", "Absolute ball size or factor if not manually adjusted"); RNA_def_property_update(prop, 0, "rna_softbody_update"); prop = RNA_def_property(srna, "ball_stiff", PROP_FLOAT, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index d1ccccd7387..b89f7e0c01c 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -1181,7 +1181,7 @@ static void rna_def_fluid_settings(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "viscosity_beta"); RNA_def_property_range(prop, 0.0f, 100.0f); RNA_def_property_ui_range(prop, 0.0f, 2.0f, 1, 3); - RNA_def_property_ui_text(prop, "Stiff viscosity", "Creates viscosity for expanding fluid)"); + RNA_def_property_ui_text(prop, "Stiff viscosity", "Creates viscosity for expanding fluid"); RNA_def_property_update(prop, 0, "rna_Particle_reset"); /* Double density relaxation */ diff --git a/source/blender/makesrna/intern/rna_tracking.c b/source/blender/makesrna/intern/rna_tracking.c index 56222c67a23..8d331670135 100644 --- a/source/blender/makesrna/intern/rna_tracking.c +++ b/source/blender/makesrna/intern/rna_tracking.c @@ -1074,7 +1074,7 @@ static void rna_def_trackingTrack(BlenderRNA *brna) RNA_def_property_array(prop, 3); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Color", - "Color of the track in the Movie Track Editor and the 3D viewport after a solve"); + "Color of the track in the Movie Clip Editor and the 3D viewport after a solve"); RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); /* average error */ From 9cd72eef995ae730f3fd30276db997c845b7b40c Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Sat, 14 Apr 2012 16:06:59 +0000 Subject: [PATCH 004/156] Minor fix to recent i18n commits. --- source/blender/windowmanager/intern/wm_operators.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index a0992bb65bc..3e81568d42a 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -2237,8 +2237,9 @@ static int wm_console_toggle_op(bContext *UNUSED(C), wmOperator *UNUSED(op)) static void WM_OT_console_toggle(wmOperatorType *ot) { - /* XXX Have to mark these for xgettext, as under linux they do not exists... */ - ot->name = CTX_N_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Toggle System Console"); + /* XXX Have to mark these for xgettext, as under linux they do not exists... + * And even worth, have to give the context as text, as xgettext doesn’t expand macros. :( */ + ot->name = CTX_N_("Operator"/* BLF_I18NCONTEXT_OPERATOR_DEFAULT */, "Toggle System Console"); ot->idname = "WM_OT_console_toggle"; ot->description = N_("Toggle System Console"); From 6c285ce1a62bdbccd6135eee6455baea70d67885 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Sat, 14 Apr 2012 16:24:30 +0000 Subject: [PATCH 005/156] Minor fix to UI messages. --- source/blender/makesrna/intern/rna_space.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 5e0a20c51ad..8d4b5a32969 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -1355,7 +1355,7 @@ static void rna_def_background_image(BlenderRNA *brna) prop = RNA_def_property(srna, "show_on_foreground", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_BGPIC_FOREGROUND); - RNA_def_property_ui_text(prop, "Show On Foreground", "Show this image in fround of objects in viewport"); + RNA_def_property_ui_text(prop, "Show On Foreground", "Show this image in front of objects in viewport"); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); } From 51211b94199cc0b723acb19ec948b522a911243f Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sat, 14 Apr 2012 18:05:44 +0000 Subject: [PATCH 006/156] Revert rename of ColorRamp node from r45629. Don't make such changes based on an assumption, it could be wrong and coordinate with the UI team first! --- source/blender/nodes/composite/nodes/node_composite_valToRgb.c | 2 +- source/blender/nodes/shader/nodes/node_shader_valToRgb.c | 2 +- source/blender/nodes/texture/nodes/node_texture_valToRgb.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/nodes/composite/nodes/node_composite_valToRgb.c b/source/blender/nodes/composite/nodes/node_composite_valToRgb.c index 841d3e90491..86986f6038d 100644 --- a/source/blender/nodes/composite/nodes/node_composite_valToRgb.c +++ b/source/blender/nodes/composite/nodes/node_composite_valToRgb.c @@ -87,7 +87,7 @@ void register_node_type_cmp_valtorgb(bNodeTreeType *ttype) { static bNodeType ntype; - node_type_base(ttype, &ntype, CMP_NODE_VALTORGB, "Value to RGB", NODE_CLASS_CONVERTOR, NODE_OPTIONS); + node_type_base(ttype, &ntype, CMP_NODE_VALTORGB, "ColorRamp", NODE_CLASS_CONVERTOR, NODE_OPTIONS); node_type_socket_templates(&ntype, cmp_node_valtorgb_in, cmp_node_valtorgb_out); node_type_size(&ntype, 240, 200, 300); node_type_init(&ntype, node_composit_init_valtorgb); diff --git a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c b/source/blender/nodes/shader/nodes/node_shader_valToRgb.c index 7cc30e6f192..7e513135203 100644 --- a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c +++ b/source/blender/nodes/shader/nodes/node_shader_valToRgb.c @@ -75,7 +75,7 @@ void register_node_type_sh_valtorgb(bNodeTreeType *ttype) { static bNodeType ntype; - node_type_base(ttype, &ntype, SH_NODE_VALTORGB, "Value to RGB", NODE_CLASS_CONVERTOR, NODE_OPTIONS); + node_type_base(ttype, &ntype, SH_NODE_VALTORGB, "ColorRamp", NODE_CLASS_CONVERTOR, NODE_OPTIONS); node_type_compatibility(&ntype, NODE_OLD_SHADING|NODE_NEW_SHADING); node_type_socket_templates(&ntype, sh_node_valtorgb_in, sh_node_valtorgb_out); node_type_size(&ntype, 240, 200, 300); diff --git a/source/blender/nodes/texture/nodes/node_texture_valToRgb.c b/source/blender/nodes/texture/nodes/node_texture_valToRgb.c index 45c5de39044..1d282b4d4cc 100644 --- a/source/blender/nodes/texture/nodes/node_texture_valToRgb.c +++ b/source/blender/nodes/texture/nodes/node_texture_valToRgb.c @@ -66,7 +66,7 @@ void register_node_type_tex_valtorgb(bNodeTreeType *ttype) { static bNodeType ntype; - node_type_base(ttype, &ntype, TEX_NODE_VALTORGB, "Value to RGB", NODE_CLASS_CONVERTOR, NODE_OPTIONS); + node_type_base(ttype, &ntype, TEX_NODE_VALTORGB, "ColorRamp", NODE_CLASS_CONVERTOR, NODE_OPTIONS); node_type_socket_templates(&ntype, valtorgb_in, valtorgb_out); node_type_size(&ntype, 240, 200, 300); node_type_init(&ntype, valtorgb_init); From ab6c8c2565a76ec37a3170eb21d2c31913111b83 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Sat, 14 Apr 2012 20:24:12 +0000 Subject: [PATCH 007/156] Fluidsim: a) Remove "animatable" flag from resolution property b) "Hide fluid surface": Add description and changed prperty name. Nobody really understood the purpose of that checkbox. --- source/blender/makesrna/intern/rna_fluidsim.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c index 86f03c43e7c..702d54c1559 100644 --- a/source/blender/makesrna/intern/rna_fluidsim.c +++ b/source/blender/makesrna/intern/rna_fluidsim.c @@ -287,11 +287,13 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "resolutionxyz"); RNA_def_property_range(prop, 1, 1024); RNA_def_property_ui_text(prop, "Resolution", "Domain resolution in X,Y and Z direction"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); prop = RNA_def_property(srna, "preview_resolution", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "previewresxyz"); RNA_def_property_range(prop, 1, 100); RNA_def_property_ui_text(prop, "Preview Resolution", "Preview resolution in X,Y and Z direction"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); prop = RNA_def_property(srna, "viewport_display_mode", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "guiDisplayMode"); @@ -421,7 +423,7 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna) prop = RNA_def_property(srna, "surface_noobs", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSSG_NOOBS); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_ui_text(prop, "Hide fluid surface", ""); + RNA_def_property_ui_text(prop, "Remove air bubbles", "Removes the air space between fluid surface and obstacles. WARNING: Can result in a dissolving surface in other areas."); /* particles */ From 73a77650d0ffdc372fbcb308590faf6a38337be8 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Sat, 14 Apr 2012 20:35:39 +0000 Subject: [PATCH 008/156] Fluidsim: Text fix. --- source/blender/makesrna/intern/rna_fluidsim.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c index 702d54c1559..7ada0e9b04a 100644 --- a/source/blender/makesrna/intern/rna_fluidsim.c +++ b/source/blender/makesrna/intern/rna_fluidsim.c @@ -423,7 +423,7 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna) prop = RNA_def_property(srna, "surface_noobs", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSSG_NOOBS); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_ui_text(prop, "Remove air bubbles", "Removes the air space between fluid surface and obstacles. WARNING: Can result in a dissolving surface in other areas."); + RNA_def_property_ui_text(prop, "Remove air bubbles", "Removes the air gap between fluid surface and obstacles. WARNING: Can result in a dissolving surface in other areas."); /* particles */ From 8d665ccdcc8c8d325b93a0ea089fcda676734611 Mon Sep 17 00:00:00 2001 From: Antony Riakiotakis Date: Sat, 14 Apr 2012 21:26:50 +0000 Subject: [PATCH 009/156] Fix linking issue with MinGW. For some reason ffmpeg needs to be enabled. Some kind of bizarre linking order issue seems to be the case but since it touches so many areas of the code I prefer to simply enable by default. --- CMakeLists.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e3ce376ff7d..b89ecdb014b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -194,7 +194,14 @@ option(WITH_IMAGE_REDCODE "Enable RedCode Image Support" OFF) option(WITH_IMAGE_FRAMESERVER "Enable image FrameServer Support for rendering" ON) # Audio/Video format support -option(WITH_CODEC_FFMPEG "Enable FFMPeg Support (http://ffmpeg.org)" OFF) +if(MINGW) + set(PLATFORM_DEFAULT ON) +else() + set(PLATFORM_DEFAULT OFF) +endif() +option(WITH_CODEC_FFMPEG "Enable FFMPeg Support (http://ffmpeg.org)" (PLATFORM_DEFAULT) +unset(PLATFORM_DEFAULT) + option(WITH_CODEC_SNDFILE "Enable libsndfile Support (http://www.mega-nerd.com/libsndfile)" OFF) if(APPLE OR (WIN32 AND NOT UNIX)) option(WITH_CODEC_QUICKTIME "Enable Quicktime Support" OFF) From 44f10d889e52ed92b540ea9e447ab9a95ecc0ed0 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sat, 14 Apr 2012 21:48:34 +0000 Subject: [PATCH 010/156] Blender Internal: * Remove some remaining (already commented) radiosity cruft. --- source/blender/render/SConscript | 2 +- source/blender/render/extern/include/RE_render_ext.h | 3 --- source/blender/render/intern/source/convertblender.c | 4 +--- source/blender/render/intern/source/shadeoutput.c | 2 +- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/source/blender/render/SConscript b/source/blender/render/SConscript index 53af2f9b2c2..903306c36ff 100644 --- a/source/blender/render/SConscript +++ b/source/blender/render/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('intern/source/*.c') raysources = env.Glob('intern/raytrace/*.cpp') incs = 'intern/include #/intern/guardedalloc ../blenlib ../makesdna ../makesrna' -incs += ' extern/include ../blenkernel ../radiosity/extern/include ../imbuf ../blenfont' +incs += ' extern/include ../blenkernel ../imbuf ../blenfont' incs += ' ../include ../blenloader ../../../intern/smoke/extern ../../../intern/mikktspace ../bmesh' cflags_raytrace = env['CCFLAGS'] diff --git a/source/blender/render/extern/include/RE_render_ext.h b/source/blender/render/extern/include/RE_render_ext.h index 054aaccb177..9d7393f9414 100644 --- a/source/blender/render/extern/include/RE_render_ext.h +++ b/source/blender/render/extern/include/RE_render_ext.h @@ -50,9 +50,6 @@ struct MTex; struct ImBuf; struct DerivedMesh; -// RADIO REMOVED, Maybe this will be useful later -//void RE_zbufferall_radio(struct RadView *vw, struct RNode **rg_elem, int rg_totelem, struct Render *re); - /* particle.c, effect.c, editmesh_modes.c and brush.c, returns 1 if rgb, 0 otherwise */ int externtex(struct MTex *mtex, const float vec[3], float *tin, float *tr, float *tg, float *tb, float *ta, const int thread); diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 21cfb8b6db7..11895eae441 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -4675,9 +4675,7 @@ void RE_Database_Free(Render *re) /* free orco */ free_mesh_orco_hash(re); -#if 0 /* radio can be redone better */ - end_radio_render(); -#endif + end_render_materials(re->main); end_render_textures(re); diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c index 5951006c7b5..7f8b0ac80ed 100644 --- a/source/blender/render/intern/source/shadeoutput.c +++ b/source/blender/render/intern/source/shadeoutput.c @@ -1854,7 +1854,7 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr) } shr->alpha= shi->alpha; - /* from now stuff everything in shr->combined: ambient, AO, radio, ramps, exposure */ + /* from now stuff everything in shr->combined: ambient, AO, ramps, exposure */ if (!(ma->sss_flag & MA_DIFF_SSS) || !sss_pass_done(&R, ma)) { if (R.r.mode & R_SHADOW) { /* add AO in combined? */ From 48ed63b1a5cb7808df66aaeb16d7ea8cf36a7e34 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sat, 14 Apr 2012 21:55:38 +0000 Subject: [PATCH 011/156] Scons ToDo: * Made Smoke building optional, added WITH_BF_SMOKE. * Enabled per default in btools.py --- build_files/scons/tools/btools.py | 2 ++ source/blender/blenkernel/SConscript | 4 +++- source/blender/gpu/SConscript | 3 ++- source/blender/render/SConscript | 3 ++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/build_files/scons/tools/btools.py b/build_files/scons/tools/btools.py index bb1948b2c16..f822453367f 100644 --- a/build_files/scons/tools/btools.py +++ b/build_files/scons/tools/btools.py @@ -154,6 +154,7 @@ def validate_arguments(args, bc): 'WITH_BF_BOOLEAN', 'WITH_BF_REMESH', 'WITH_BF_OCEANSIM', + 'WITH_BF_SMOKE', 'WITH_BF_CXX_GUARDEDALLOC', 'WITH_BF_JEMALLOC', 'WITH_BF_STATICJEMALLOC', 'BF_JEMALLOC', 'BF_JEMALLOC_INC', 'BF_JEMALLOC_LIBPATH', 'BF_JEMALLOC_LIB', 'BF_JEMALLOC_LIB_STATIC', 'BUILDBOT_BRANCH', @@ -264,6 +265,7 @@ def read_opts(env, cfg, args): (BoolVariable('WITH_BF_BOOLEAN', 'Build with boolean modifier', True)), (BoolVariable('WITH_BF_REMESH', 'Build with remesh modifier', True)), (BoolVariable('WITH_BF_OCEANSIM', 'Build with ocean simulation', False)), + (BoolVariable('WITH_BF_SMOKE', 'Build with smoke simulation', True)), ('BF_PROFILE_FLAGS', 'Profiling compiler flags', ''), (BoolVariable('WITH_BF_OPENAL', 'Use OpenAL if true', False)), ('BF_OPENAL', 'Base path for OpenAL', ''), diff --git a/source/blender/blenkernel/SConscript b/source/blender/blenkernel/SConscript index 684c3d8683b..fe27e78abc0 100644 --- a/source/blender/blenkernel/SConscript +++ b/source/blender/blenkernel/SConscript @@ -23,7 +23,9 @@ incs += ' ' + env['BF_ZLIB_INC'] defs = [ 'GLEW_STATIC' ] -defs.append('WITH_SMOKE') # TODO, make optional +if env['WITH_BF_SMOKE']: + defs.append('WITH_SMOKE') + defs.append('WITH_FRAMESERVER') # TODO, make optional if env['WITH_BF_PYTHON']: diff --git a/source/blender/gpu/SConscript b/source/blender/gpu/SConscript index ee4491c1c77..181af6bb1d4 100644 --- a/source/blender/gpu/SConscript +++ b/source/blender/gpu/SConscript @@ -13,6 +13,7 @@ if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): incs += ' ' + env['BF_OPENGL_INC'] -defs.append('WITH_SMOKE') # TODO, make optional +if env['WITH_BF_SMOKE']: + defs.append('WITH_SMOKE') env.BlenderLib ( 'bf_gpu', sources, Split(incs), defines = defs, libtype=['core','player'], priority=[160,110] ) diff --git a/source/blender/render/SConscript b/source/blender/render/SConscript index 903306c36ff..db35764a31c 100644 --- a/source/blender/render/SConscript +++ b/source/blender/render/SConscript @@ -14,7 +14,8 @@ cxxflags_raytrace = env['CXXFLAGS'] defs = [] defs_raytrace = [] -defs.append('WITH_SMOKE') # TODO, make optional +if env['WITH_BF_SMOKE']: + defs.append('WITH_SMOKE') if env['WITH_BF_PYTHON']: incs += ' ../python' From f725a3d6c45efa281a3586206ca7ee153eaaf851 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sat, 14 Apr 2012 22:19:29 +0000 Subject: [PATCH 012/156] Scons ToDo: * Made Frameserver building optional, added WITH_BF_FRAMESERVER. * Enabled per default in btools.py --- build_files/scons/tools/btools.py | 3 +++ source/blender/blenkernel/SConscript | 3 ++- source/blender/makesrna/SConscript | 3 +++ source/blender/makesrna/intern/SConscript | 3 ++- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/build_files/scons/tools/btools.py b/build_files/scons/tools/btools.py index f822453367f..544f7f066ce 100644 --- a/build_files/scons/tools/btools.py +++ b/build_files/scons/tools/btools.py @@ -107,6 +107,7 @@ def validate_arguments(args, bc): 'WITH_BF_FFMPEG', 'BF_FFMPEG_LIB','BF_FFMPEG_EXTRA', 'BF_FFMPEG', 'BF_FFMPEG_INC', 'BF_FFMPEG_DLL', 'WITH_BF_STATICFFMPEG', 'BF_FFMPEG_LIB_STATIC', 'WITH_BF_OGG', 'BF_OGG', 'BF_OGG_LIB', + 'WITH_BF_FRAMESERVER', 'WITH_BF_JPEG', 'BF_JPEG', 'BF_JPEG_INC', 'BF_JPEG_LIB', 'BF_JPEG_LIBPATH', 'WITH_BF_OPENJPEG', 'BF_OPENJPEG', 'BF_OPENJPEG_INC', 'BF_OPENJPEG_LIB', 'BF_OPENJPEG_LIBPATH', 'WITH_BF_REDCODE', 'BF_REDCODE', 'BF_REDCODE_INC', 'BF_REDCODE_LIB', 'BF_REDCODE_LIBPATH', @@ -313,6 +314,8 @@ def read_opts(env, cfg, args): (BoolVariable('WITH_BF_CINEON', 'Support CINEON and DPX image formats if true', True)), (BoolVariable('WITH_BF_HDR', 'Support HDR image formats if true', True)), + + (BoolVariable('WITH_BF_FRAMESERVER', 'Support export to a frameserver', True)), (BoolVariable('WITH_BF_FFMPEG', 'Use FFMPEG if true', False)), ('BF_FFMPEG', 'FFMPEG base path', ''), diff --git a/source/blender/blenkernel/SConscript b/source/blender/blenkernel/SConscript index fe27e78abc0..00c2cf1696e 100644 --- a/source/blender/blenkernel/SConscript +++ b/source/blender/blenkernel/SConscript @@ -26,7 +26,8 @@ defs = [ 'GLEW_STATIC' ] if env['WITH_BF_SMOKE']: defs.append('WITH_SMOKE') -defs.append('WITH_FRAMESERVER') # TODO, make optional +if env['WITH_BF_FRAMESERVER']: + defs.append('WITH_FRAMESERVER') if env['WITH_BF_PYTHON']: incs += ' ../python' diff --git a/source/blender/makesrna/SConscript b/source/blender/makesrna/SConscript index ce87e0ef482..d4ee86b281c 100644 --- a/source/blender/makesrna/SConscript +++ b/source/blender/makesrna/SConscript @@ -35,6 +35,9 @@ if env['WITH_BF_CINEON']: if env['WITH_BF_HDR']: defs.append('WITH_HDR') +if env['WITH_BF_FRAMESERVER']: + defs.append('WITH_FRAMESERVER') + if env['WITH_BF_FFMPEG']: defs.append('WITH_FFMPEG') incs += ' ' + env['BF_FFMPEG_INC'] diff --git a/source/blender/makesrna/intern/SConscript b/source/blender/makesrna/intern/SConscript index 60818680d0c..c8d7e0ae421 100644 --- a/source/blender/makesrna/intern/SConscript +++ b/source/blender/makesrna/intern/SConscript @@ -54,7 +54,8 @@ if env['WITH_BF_CINEON']: if env['WITH_BF_HDR']: defs.append('WITH_HDR') -defs.append('WITH_FRAMESERVER') # TODO, make optional +if env['WITH_BF_FRAMESERVER']: + defs.append('WITH_FRAMESERVER') if env['WITH_BF_FFMPEG']: defs.append('WITH_FFMPEG') From 9e68c3cb3f556af749f6a53e32086316c64b74d5 Mon Sep 17 00:00:00 2001 From: Antony Riakiotakis Date: Sat, 14 Apr 2012 22:21:50 +0000 Subject: [PATCH 013/156] Hrm...parse error from previous commit --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b89ecdb014b..e56c5a920f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -199,7 +199,7 @@ if(MINGW) else() set(PLATFORM_DEFAULT OFF) endif() -option(WITH_CODEC_FFMPEG "Enable FFMPeg Support (http://ffmpeg.org)" (PLATFORM_DEFAULT) +option(WITH_CODEC_FFMPEG "Enable FFMPeg Support (http://ffmpeg.org)" PLATFORM_DEFAULT) unset(PLATFORM_DEFAULT) option(WITH_CODEC_SNDFILE "Enable libsndfile Support (http://www.mega-nerd.com/libsndfile)" OFF) From 3f605bff4be79c642ebca58ffef5dc6b66d0858e Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sat, 14 Apr 2012 22:33:48 +0000 Subject: [PATCH 014/156] Scons: * Add new scons options to 'blenderlite' target * Remove ancient yafray comment --- SConstruct | 2 ++ source/blender/editors/space_view3d/drawobject.c | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/SConstruct b/SConstruct index ff668a97483..e73d654a0c8 100644 --- a/SConstruct +++ b/SConstruct @@ -251,6 +251,7 @@ if 'blenderlite' in B.targets: target_env_defs['WITH_BF_REDCODE'] = False target_env_defs['WITH_BF_DDS'] = False target_env_defs['WITH_BF_CINEON'] = False + target_env_defs['WITH_BF_FRAMESERVER'] = False target_env_defs['WITH_BF_HDR'] = False target_env_defs['WITH_BF_ZLIB'] = False target_env_defs['WITH_BF_SDL'] = False @@ -261,6 +262,7 @@ if 'blenderlite' in B.targets: target_env_defs['BF_BUILDINFO'] = False target_env_defs['WITH_BF_FLUID'] = False target_env_defs['WITH_BF_OCEANSIM'] = False + target_env_defs['WITH_BF_SMOKE'] = False target_env_defs['WITH_BF_DECIMATE'] = False target_env_defs['WITH_BF_BOOLEAN'] = False target_env_defs['WITH_BF_REMESH'] = False diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 51b238eb586..bdc07ccc98c 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -1288,7 +1288,6 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, if (la->mode & LA_SPHERE) { drawcircball(GL_LINE_LOOP, vec, la->dist, imat); } - /* yafray: for photonlight also draw lightcone as for spot */ } glPopMatrix(); /* back in object space */ From e7f1033dcb91ea3fdc4e301efbafc84cd151e05a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 15 Apr 2012 07:24:14 +0000 Subject: [PATCH 015/156] style cleanup: for loop macros, also add a config file for uncrustify source formatter (able to get very close to our own style guide). --- source/blender/blenkernel/BKE_context.h | 7 ++++-- source/blender/blenkernel/BKE_sequencer.h | 14 +++++------ source/blender/makesrna/RNA_access.h | 30 +++++++++++------------ source/blender/makesrna/RNA_types.h | 6 +++-- 4 files changed, 30 insertions(+), 27 deletions(-) diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h index 944cce675cc..b2bd840a09a 100644 --- a/source/blender/blenkernel/BKE_context.h +++ b/source/blender/blenkernel/BKE_context.h @@ -212,8 +212,11 @@ void CTX_data_list_add(bContextDataResult *result, void *data); ListBase ctx_data_list; \ CollectionPointerLink *ctx_link; \ CTX_data_##member(C, &ctx_data_list); \ - for(ctx_link=ctx_data_list.first; ctx_link; ctx_link=ctx_link->next) {\ - Type instance= ctx_link->ptr.data; + for (ctx_link = ctx_data_list.first; \ + ctx_link; \ + ctx_link = ctx_link->next) \ + { \ + Type instance = ctx_link->ptr.data; #define CTX_DATA_END \ } \ diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h index 7a84e71c763..598d1b681bc 100644 --- a/source/blender/blenkernel/BKE_sequencer.h +++ b/source/blender/blenkernel/BKE_sequencer.h @@ -69,14 +69,14 @@ void seq_array(struct Editing *ed, struct Sequence ***seqarray, int *tot, int us #define SEQP_BEGIN(ed, _seq) \ { \ SeqIterator iter; \ - for(seq_begin(ed, &iter, 1); iter.valid; seq_next(&iter)) { \ - _seq= iter.seq; + for (seq_begin(ed, &iter, 1); iter.valid; seq_next(&iter)) { \ + _seq = iter.seq; #define SEQ_BEGIN(ed, _seq) \ { \ SeqIterator iter; \ - for(seq_begin(ed, &iter, 0); iter.valid; seq_next(&iter)) { \ - _seq= iter.seq; + for (seq_begin(ed, &iter, 0); iter.valid; seq_next(&iter)) { \ + _seq = iter.seq; #define SEQ_END \ } \ @@ -138,12 +138,10 @@ struct SeqEffectHandle { int (*early_out)(struct Sequence *seq, float facf0, float facf1); /* stores the y-range of the effect IPO */ - void (*store_icu_yrange)(struct Sequence * seq, - short adrcode, float *ymin, float *ymax); + void (*store_icu_yrange)(struct Sequence * seq, short adrcode, float *ymin, float *ymax); /* stores the default facf0 and facf1 if no IPO is present */ - void (*get_default_fac)(struct Sequence *seq, float cfra, - float * facf0, float * facf1); + void (*get_default_fac)(struct Sequence *seq, float cfra, float * facf0, float * facf1); /* execute the effect * sequence effects are only required to either support diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 84301c8000f..da73a25d197 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -902,11 +902,11 @@ void RNA_collection_clear(PointerRNA *ptr, const char *name); #define RNA_BEGIN(sptr, itemptr, propname) \ { \ CollectionPropertyIterator rna_macro_iter; \ - for(RNA_collection_begin(sptr, propname, &rna_macro_iter); \ - rna_macro_iter.valid; \ - RNA_property_collection_next(&rna_macro_iter)) \ + for (RNA_collection_begin(sptr, propname, &rna_macro_iter); \ + rna_macro_iter.valid; \ + RNA_property_collection_next(&rna_macro_iter)) \ { \ - PointerRNA itemptr= rna_macro_iter.ptr; + PointerRNA itemptr = rna_macro_iter.ptr; #define RNA_END \ } \ @@ -916,11 +916,11 @@ void RNA_collection_clear(PointerRNA *ptr, const char *name); #define RNA_PROP_BEGIN(sptr, itemptr, prop) \ { \ CollectionPropertyIterator rna_macro_iter; \ - for(RNA_property_collection_begin(sptr, prop, &rna_macro_iter); \ - rna_macro_iter.valid; \ - RNA_property_collection_next(&rna_macro_iter)) \ + for (RNA_property_collection_begin(sptr, prop, &rna_macro_iter); \ + rna_macro_iter.valid; \ + RNA_property_collection_next(&rna_macro_iter)) \ { \ - PointerRNA itemptr= rna_macro_iter.ptr; + PointerRNA itemptr = rna_macro_iter.ptr; #define RNA_PROP_END \ } \ @@ -930,14 +930,14 @@ void RNA_collection_clear(PointerRNA *ptr, const char *name); #define RNA_STRUCT_BEGIN(sptr, prop) \ { \ CollectionPropertyIterator rna_macro_iter; \ - for(RNA_property_collection_begin( \ - sptr, \ - RNA_struct_iterator_property(sptr->type), \ - &rna_macro_iter); \ - rna_macro_iter.valid; \ - RNA_property_collection_next(&rna_macro_iter)) \ + for (RNA_property_collection_begin( \ + sptr, \ + RNA_struct_iterator_property(sptr->type), \ + &rna_macro_iter); \ + rna_macro_iter.valid; \ + RNA_property_collection_next(&rna_macro_iter)) \ { \ - PropertyRNA *prop= rna_macro_iter.ptr.data; + PropertyRNA *prop = rna_macro_iter.ptr.data; #define RNA_STRUCT_END \ } \ diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index e826b81d617..c3beffbe223 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -346,8 +346,10 @@ typedef enum StructFlag { typedef int (*StructValidateFunc)(struct PointerRNA *ptr, void *data, int *have_function); typedef int (*StructCallbackFunc)(struct bContext *C, struct PointerRNA *ptr, struct FunctionRNA *func, ParameterList *list); typedef void (*StructFreeFunc)(void *data); -typedef struct StructRNA *(*StructRegisterFunc)(struct Main *bmain, struct ReportList *reports, void *data, - const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free); +typedef struct StructRNA *(*StructRegisterFunc)( + struct Main *bmain, struct ReportList *reports, void *data, const char *identifier, + StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free); + typedef void (*StructUnregisterFunc)(struct Main *bmain, struct StructRNA *type); typedef void **(*StructInstanceFunc)(PointerRNA *ptr); From a8077c8222876bdc67cfbc9ae56b04a12c8657e9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 15 Apr 2012 07:32:56 +0000 Subject: [PATCH 016/156] disallow invalid mingw configurations, not just disable by default but disallow the built to run if they are set by the developer. --- CMakeLists.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index e56c5a920f2..68efd0759fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -364,6 +364,19 @@ if(WITH_GHOST_SDL OR WITH_HEADLESS) set(WITH_GHOST_XDND OFF) endif() +if(MINGW) + if(WITH_CODEC_QUICKTIME) + message(FATAL_ERROR "MINGW requires WITH_CODEC_QUICKTIME to be OFF " + "because it is currently unsupported, remove this " + "line if youre a developer who wants to add support.") + endif() + + if((NOT WITH_CODEC_FFMPEG) AND (WITH_CYCLES OR WITH_IMAGE_OPENEXR OR WITH_IMAGE_TIFF)) + message(FATAL_ERROR "MINGW has a problem with: WITH_CYCLES/WITH_IMAGE_OPENEXR/WITH_IMAGE_TIFF " + "when WITH_CODEC_FFMPEG is disabled, enable FFMPEG or disable CYCLES/EXR/TIFF.") + endif() +endif() + TEST_SSE_SUPPORT(COMPILER_SSE_FLAG COMPILER_SSE2_FLAG) From a73d0d3e72940ecd0e3e60c8e4e858c7e00ff5e2 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 15 Apr 2012 07:54:07 +0000 Subject: [PATCH 017/156] code cleanup: dont include BLI_winstuff.h on non windows systems, also cleanup some defines/includes for windows. --- source/blender/avi/intern/avi.c | 4 +- source/blender/avi/intern/options.c | 5 +- source/blender/blenkernel/intern/depsgraph.c | 5 +- source/blender/blenkernel/intern/screen.c | 4 +- source/blender/blenkernel/intern/unit.c | 5 +- source/blender/blenlib/BLI_winstuff.h | 52 +++++++++---------- source/blender/blenlib/intern/fileops.c | 18 +++---- source/blender/blenlib/intern/storage.c | 19 +++---- .../blender/blenloader/intern/readblenentry.c | 4 +- source/blender/blenloader/intern/readfile.c | 8 +-- source/blender/blenloader/intern/runtime.c | 6 +-- source/blender/blenloader/intern/writefile.c | 10 ++-- .../editors/interface/interface_icons.c | 11 ++-- .../editors/sculpt_paint/paint_image.c | 3 +- .../editors/space_console/space_console.c | 2 +- source/blender/editors/space_file/file_draw.c | 3 +- source/blender/editors/space_file/file_ops.c | 3 +- source/blender/editors/space_file/filelist.c | 2 +- source/blender/editors/space_file/filesel.c | 22 +++----- source/blender/editors/space_file/fsmenu.c | 22 ++++---- .../blender/editors/space_text/text_header.c | 6 +-- source/blender/gpu/intern/gpu_extensions.c | 4 +- source/blender/imbuf/intern/thumbs.c | 21 ++++---- .../blender/windowmanager/intern/wm_files.c | 17 +++--- source/creator/creator.c | 2 +- 25 files changed, 134 insertions(+), 124 deletions(-) diff --git a/source/blender/avi/intern/avi.c b/source/blender/avi/intern/avi.c index 0658317a0bd..59ce879520e 100644 --- a/source/blender/avi/intern/avi.c +++ b/source/blender/avi/intern/avi.c @@ -43,7 +43,9 @@ #include "MEM_guardedalloc.h" #include "MEM_sys_types.h" -#include "BLI_winstuff.h" +#ifdef WIN32 +# include "BLI_winstuff.h" +#endif #include "AVI_avi.h" #include "avi_intern.h" diff --git a/source/blender/avi/intern/options.c b/source/blender/avi/intern/options.c index 483b708bee6..a2fd756ddaa 100644 --- a/source/blender/avi/intern/options.c +++ b/source/blender/avi/intern/options.c @@ -34,12 +34,13 @@ * \ingroup avi */ - #include "AVI_avi.h" #include "avi_intern.h" #include "endian.h" -#include "BLI_winstuff.h" +#ifdef WIN32 +# include "BLI_winstuff.h" +#endif /* avi_set_compress_options gets its own file... now don't WE feel important? */ diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 39fa5d2f7e7..366e808d32c 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -34,7 +34,10 @@ #include "MEM_guardedalloc.h" -#include "BLI_winstuff.h" +#ifdef WIN32 +# include "BLI_winstuff.h" +#endif + #include "BLI_utildefines.h" #include "BLI_listbase.h" #include "BLI_ghash.h" diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index 158fc91c03c..af0c5eae9a8 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -30,7 +30,9 @@ * \ingroup bke */ -#include "BLI_winstuff.h" +#ifdef WIN32 +# include "BLI_winstuff.h" +#endif #include #include diff --git a/source/blender/blenkernel/intern/unit.c b/source/blender/blenkernel/intern/unit.c index b3c979afac4..7a71853641d 100644 --- a/source/blender/blenkernel/intern/unit.c +++ b/source/blender/blenkernel/intern/unit.c @@ -34,7 +34,10 @@ #include "BLI_math.h" #include "BLI_string.h" #include "BLI_string_utf8.h" -#include "BLI_winstuff.h" + +#ifdef WIN32 +# include "BLI_winstuff.h" +#endif #define TEMP_STR_SIZE 256 diff --git a/source/blender/blenlib/BLI_winstuff.h b/source/blender/blenlib/BLI_winstuff.h index 821946727f2..33ca7d235fa 100644 --- a/source/blender/blenlib/BLI_winstuff.h +++ b/source/blender/blenlib/BLI_winstuff.h @@ -33,28 +33,30 @@ * \brief Compatibility-like things for windows. */ -#ifdef _WIN32 - -#ifndef FREE_WINDOWS -#pragma warning(once: 4761 4305 4244 4018) -#else -#ifdef WINVER -#undef WINVER +#ifndef _WIN32 +# error "This include is for Windows only!" #endif +#ifndef FREE_WINDOWS +# pragma warning(once: 4761 4305 4244 4018) +#else +# ifdef WINVER +# undef WINVER +# endif + /* Some stuff requires WINVER 0x500, but mingw's default is 0x400 */ -#define WINVER 0x0501 +# define WINVER 0x0501 #endif #define WIN32_LEAN_AND_MEAN #ifndef WIN32_SKIP_HKEY_PROTECTION -#undef HKEY -#define HKEY WIN32_HKEY // prevent competing definitions -#include -#undef HKEY +# undef HKEY +# define HKEY WIN32_HKEY // prevent competing definitions +# include +# undef HKEY #else -#include +# include #endif #undef near @@ -83,10 +85,10 @@ extern "C" { #define MAXPATHLEN MAX_PATH #ifndef S_ISREG -#define S_ISREG(x) (((x)&_S_IFREG) == _S_IFREG) +# define S_ISREG(x) (((x)&_S_IFREG) == _S_IFREG) #endif #ifndef S_ISDIR -#define S_ISDIR(x) (((x)&_S_IFDIR) == _S_IFDIR) +# define S_ISDIR(x) (((x)&_S_IFDIR) == _S_IFDIR) #endif /* defines for using ISO C++ conformant names */ @@ -98,21 +100,21 @@ typedef unsigned int mode_t; /* use functions that take a 64 bit offset for files larger than 4GB */ #ifndef FREE_WINDOWS -#include -#define fseek(stream, offset, origin) _fseeki64(stream, offset, origin) -#define ftell(stream) _ftelli64(stream) -#define lseek(fd, offset, origin) _lseeki64(fd, offset, origin) -#define tell(fd) _telli64(fd) +# include +# define fseek(stream, offset, origin) _fseeki64(stream, offset, origin) +# define ftell(stream) _ftelli64(stream) +# define lseek(fd, offset, origin) _lseeki64(fd, offset, origin) +# define tell(fd) _telli64(fd) #endif /* mingw using _SSIZE_T_ to declare ssize_t type */ #ifndef _SSIZE_T_ -#define _SSIZE_T_ +# define _SSIZE_T_ /* python uses HAVE_SSIZE_T */ -#ifndef HAVE_SSIZE_T -#define HAVE_SSIZE_T 1 +# ifndef HAVE_SSIZE_T +# define HAVE_SSIZE_T 1 typedef long ssize_t; -#endif +# endif #endif struct dirent { @@ -148,7 +150,5 @@ int BLI_getInstallationDir(char *str); } #endif -#endif /* _WIN32 */ - #endif /* __BLI_WINSTUFF_H__ */ diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c index 1b734c674e2..93312f04692 100644 --- a/source/blender/blenlib/intern/fileops.c +++ b/source/blender/blenlib/intern/fileops.c @@ -43,16 +43,16 @@ #ifdef WIN32 #include -#include "BLI_winstuff.h" -#include "BLI_callbacks.h" -#include "utf_winfunc.h" -#include "utfconv.h" +# include "BLI_winstuff.h" +# include "BLI_callbacks.h" +# include "utf_winfunc.h" +# include "utfconv.h" #else -#include // for read close -#include -#include -#include -#include +# include // for read close +# include +# include +# include +# include #endif #include "MEM_guardedalloc.h" diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c index b0c0f106f06..9bcbdcce12e 100644 --- a/source/blender/blenlib/intern/storage.c +++ b/source/blender/blenlib/intern/storage.c @@ -68,20 +68,17 @@ #include #include /* strcpy etc.. */ -#ifndef WIN32 -#include -#include /* */ -#include -#endif - #ifdef WIN32 -#include -#include -#include "BLI_winstuff.h" -#include "utfconv.h" +# include +# include +# include "BLI_winstuff.h" +# include "utfconv.h" +#else +# include +# include +# include #endif - /* lib includes */ #include "MEM_guardedalloc.h" diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c index ccf0c226570..49990a953f6 100644 --- a/source/blender/blenloader/intern/readblenentry.c +++ b/source/blender/blenloader/intern/readblenentry.c @@ -64,8 +64,8 @@ #include "BLO_sys_types.h" // needed for intptr_t -#ifdef _WIN32 -#include "BLI_winstuff.h" +#ifdef WIN32 +# include "BLI_winstuff.h" #endif /* local prototypes --------------------- */ diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index e9a5dada044..55f0ccebf95 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -42,11 +42,11 @@ #include /* for va_start/end */ #ifndef WIN32 - #include // for read close +# include // for read close #else - #include // for open close read -#include "winsock2.h" -#include "BLI_winstuff.h" +# include // for open close read +# include "winsock2.h" +# include "BLI_winstuff.h" #endif /* allow readfile to use deprecated functionality */ diff --git a/source/blender/blenloader/intern/runtime.c b/source/blender/blenloader/intern/runtime.c index 814061b7318..2f86c810da0 100644 --- a/source/blender/blenloader/intern/runtime.c +++ b/source/blender/blenloader/intern/runtime.c @@ -39,10 +39,10 @@ #include #ifdef WIN32 -#include // read, open -#include "BLI_winstuff.h" +# include // read, open +# include "BLI_winstuff.h" #else // ! WIN32 -#include // read +# include // read #endif #include "BLO_readfile.h" diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 7f2bb72bf49..dc5546d38dd 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -81,12 +81,12 @@ Any case: direct data is ALWAYS after the lib block #include "zlib.h" #ifndef WIN32 -#include +# include #else -#include "winsock2.h" -#include -#include // for getpid -#include "BLI_winstuff.h" +# include "winsock2.h" +# include +# include // for getpid +# include "BLI_winstuff.h" #endif /* allow writefile to use deprecated functionality (for forward compatibility code) */ diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c index ba7c12d164b..e20b60cd77e 100644 --- a/source/blender/editors/interface/interface_icons.c +++ b/source/blender/editors/interface/interface_icons.c @@ -33,12 +33,13 @@ #include #ifndef WIN32 -#include +# include #else -#include -#include -#include "BLI_winstuff.h" -#endif +# include +# include +# include "BLI_winstuff.h" +#endif + #include "MEM_guardedalloc.h" #include "GPU_extensions.h" diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index 18f3094fa31..9f7cc7a75b1 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -41,8 +41,9 @@ #include "MEM_guardedalloc.h" #ifdef WIN32 -#include "BLI_winstuff.h" +# include "BLI_winstuff.h" #endif + #include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_dynstr.h" diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index b71ca6c36c4..39757aa393a 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -28,7 +28,7 @@ #include #ifdef WIN32 -#include "BLI_winstuff.h" +# include "BLI_winstuff.h" #endif #include "MEM_guardedalloc.h" diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index d312ccf8aa1..516f6532c4a 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -35,8 +35,9 @@ #include "BLI_blenlib.h" #include "BLI_utildefines.h" #include "BLI_dynstr.h" + #ifdef WIN32 -#include "BLI_winstuff.h" +# include "BLI_winstuff.h" #endif #include "BIF_gl.h" diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index 62b7aafb187..eb706dcca75 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -37,8 +37,9 @@ #include "BLI_blenlib.h" #include "BLI_utildefines.h" + #ifdef WIN32 -#include "BLI_winstuff.h" +# include "BLI_winstuff.h" #endif #include "ED_screen.h" diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index 71ead483d06..a48fc6b23f6 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -50,7 +50,7 @@ #include "BLI_utildefines.h" #ifdef WIN32 -#include "BLI_winstuff.h" +# include "BLI_winstuff.h" #endif #include "BKE_context.h" diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index 55093c7e5de..a7197cb31e6 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -36,22 +36,16 @@ #include #include -#ifdef WIN32 -#include -#include -#include "BLI_winstuff.h" -#else -#include -#include -#endif - /* path/file handeling stuff */ -#ifndef WIN32 - #include - #include +#ifdef WIN32 +# include +# include +# include "BLI_winstuff.h" #else - #include - #include "BLI_winstuff.h" +# include +# include +# include +# include #endif #include "DNA_space_types.h" diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index ddd4b31d145..48449ac8870 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -44,20 +44,20 @@ #include "BLI_dynstr.h" #ifdef WIN32 -#include /* need to include windows.h so _WIN32_IE is defined */ -#ifndef _WIN32_IE -#define _WIN32_IE 0x0400 /* minimal requirements for SHGetSpecialFolderPath on MINGW MSVC has this defined already */ -#endif -#include /* for SHGetSpecialFolderPath, has to be done before BLI_winstuff because 'near' is disabled through BLI_windstuff */ -#include "BLI_winstuff.h" +# include /* need to include windows.h so _WIN32_IE is defined */ +# ifndef _WIN32_IE +# define _WIN32_IE 0x0400 /* minimal requirements for SHGetSpecialFolderPath on MINGW MSVC has this defined already */ +# endif +# include /* for SHGetSpecialFolderPath, has to be done before BLI_winstuff + * because 'near' is disabled through BLI_windstuff */ +# include "BLI_winstuff.h" #endif #ifdef __APPLE__ -/* XXX BIG WARNING: carbon.h can not be included in blender code, it conflicts with struct ID */ -#define ID ID_ -#include - -#endif + /* XXX BIG WARNING: carbon.h can not be included in blender code, it conflicts with struct ID */ +# define ID ID_ +# include +#endif /* __APPLE__ */ #ifdef __linux__ #include diff --git a/source/blender/editors/space_text/text_header.c b/source/blender/editors/space_text/text_header.c index a7b455a6ff3..b0cd6aeaab4 100644 --- a/source/blender/editors/space_text/text_header.c +++ b/source/blender/editors/space_text/text_header.c @@ -39,10 +39,10 @@ #include #ifndef _WIN32 -#include +# include #else -#include -#include "BLI_winstuff.h" +# include +# include "BLI_winstuff.h" #endif #include "DNA_windowmanager_types.h" diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c index 40e6a8b2a35..605b2d8901e 100644 --- a/source/blender/gpu/intern/gpu_extensions.c +++ b/source/blender/gpu/intern/gpu_extensions.c @@ -51,7 +51,9 @@ #include #include -#include "BLI_winstuff.h" +#ifdef WIN32 +# include "BLI_winstuff.h" +#endif /* Extensions support */ diff --git a/source/blender/imbuf/intern/thumbs.c b/source/blender/imbuf/intern/thumbs.c index f5c22b67c1b..5c54fbab0cf 100644 --- a/source/blender/imbuf/intern/thumbs.c +++ b/source/blender/imbuf/intern/thumbs.c @@ -53,17 +53,18 @@ #include #ifdef WIN32 -#include /* need to include windows.h so _WIN32_IE is defined */ -#ifndef _WIN32_IE -#define _WIN32_IE 0x0400 /* minimal requirements for SHGetSpecialFolderPath on MINGW MSVC has this defined already */ -#endif -#include /* for SHGetSpecialFolderPath, has to be done before BLI_winstuff because 'near' is disabled through BLI_windstuff */ -#include /* getpid */ -#include /* chdir */ -#include "BLI_winstuff.h" -#include "utfconv.h" +# include /* need to include windows.h so _WIN32_IE is defined */ +# ifndef _WIN32_IE +# define _WIN32_IE 0x0400 /* minimal requirements for SHGetSpecialFolderPath on MINGW MSVC has this defined already */ +# endif +# include /* for SHGetSpecialFolderPath, has to be done before BLI_winstuff + * because 'near' is disabled through BLI_windstuff */ +# include /* getpid */ +# include /* chdir */ +# include "BLI_winstuff.h" +# include "utfconv.h" #else -#include +# include #endif #define URI_MAX FILE_MAX*3 + 8 diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 763f1e3b11b..0ffd9e00f7e 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -38,15 +38,16 @@ #include "zlib.h" /* wm_read_exotic() */ #ifdef WIN32 -#include /* need to include windows.h so _WIN32_IE is defined */ -#ifndef _WIN32_IE -#define _WIN32_IE 0x0400 /* minimal requirements for SHGetSpecialFolderPath on MINGW MSVC has this defined already */ -#endif -#include /* for SHGetSpecialFolderPath, has to be done before BLI_winstuff because 'near' is disabled through BLI_windstuff */ -#include /* getpid */ -#include "BLI_winstuff.h" +# include /* need to include windows.h so _WIN32_IE is defined */ +# ifndef _WIN32_IE +# define _WIN32_IE 0x0400 /* minimal requirements for SHGetSpecialFolderPath on MINGW MSVC has this defined already */ +# endif +# include /* for SHGetSpecialFolderPath, has to be done before BLI_winstuff + * because 'near' is disabled through BLI_windstuff */ +# include /* getpid */ +# include "BLI_winstuff.h" #else -#include /* getpid */ +# include /* getpid */ #endif #include "MEM_guardedalloc.h" diff --git a/source/creator/creator.c b/source/creator/creator.c index 1093f71260c..140fdc7ff7e 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -54,7 +54,7 @@ #include "MEM_guardedalloc.h" #ifdef WIN32 -#include "BLI_winstuff.h" +# include "BLI_winstuff.h" #endif #include "BLI_args.h" From ac07f8983865d3bddd583210f40538f116403b92 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 15 Apr 2012 08:48:11 +0000 Subject: [PATCH 018/156] Fix #30948: add scene > copy settings did not copy settings like units, audio, game data, and tool settings. What exactly should be copied is a bit up to interpretation, but I think these make sense, and things like audio or game data used to be part of render settings which do get copied so at least for those it was a regression. --- source/blender/blenkernel/intern/scene.c | 63 +++++++++++++----------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 7c242da9aff..c950a6ccdb5 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -123,6 +123,12 @@ Scene *copy_scene(Scene *sce, int type) lb= scen->r.layers; scen->r= sce->r; scen->r.layers= lb; + scen->unit= sce->unit; + scen->physics_settings= sce->physics_settings; + scen->gm= sce->gm; + scen->audio= sce->audio; + + MEM_freeN(scen->toolsettings); } else { scen= copy_libblock(&sce->id); @@ -137,37 +143,9 @@ Scene *copy_scene(Scene *sce, int type) scen->ed= NULL; scen->theDag= NULL; scen->obedit= NULL; - scen->toolsettings= MEM_dupallocN(sce->toolsettings); scen->stats= NULL; scen->fps_info= NULL; - ts= scen->toolsettings; - if (ts) { - if (ts->vpaint) { - ts->vpaint= MEM_dupallocN(ts->vpaint); - ts->vpaint->paintcursor= NULL; - ts->vpaint->vpaint_prev= NULL; - ts->vpaint->wpaint_prev= NULL; - copy_paint(&ts->vpaint->paint, &ts->vpaint->paint); - } - if (ts->wpaint) { - ts->wpaint= MEM_dupallocN(ts->wpaint); - ts->wpaint->paintcursor= NULL; - ts->wpaint->vpaint_prev= NULL; - ts->wpaint->wpaint_prev= NULL; - copy_paint(&ts->wpaint->paint, &ts->wpaint->paint); - } - if (ts->sculpt) { - ts->sculpt= MEM_dupallocN(ts->sculpt); - copy_paint(&ts->sculpt->paint, &ts->sculpt->paint); - } - - copy_paint(&ts->imapaint.paint, &ts->imapaint.paint); - ts->imapaint.paintcursor= NULL; - - ts->particle.paintcursor= NULL; - } - BLI_duplicatelist(&(scen->markers), &(sce->markers)); BLI_duplicatelist(&(scen->transform_spaces), &(sce->transform_spaces)); BLI_duplicatelist(&(scen->r.layers), &(sce->r.layers)); @@ -188,6 +166,35 @@ Scene *copy_scene(Scene *sce, int type) base= base->next; } } + + /* tool settings */ + scen->toolsettings= MEM_dupallocN(sce->toolsettings); + + ts= scen->toolsettings; + if (ts) { + if (ts->vpaint) { + ts->vpaint= MEM_dupallocN(ts->vpaint); + ts->vpaint->paintcursor= NULL; + ts->vpaint->vpaint_prev= NULL; + ts->vpaint->wpaint_prev= NULL; + copy_paint(&ts->vpaint->paint, &ts->vpaint->paint); + } + if (ts->wpaint) { + ts->wpaint= MEM_dupallocN(ts->wpaint); + ts->wpaint->paintcursor= NULL; + ts->wpaint->vpaint_prev= NULL; + ts->wpaint->wpaint_prev= NULL; + copy_paint(&ts->wpaint->paint, &ts->wpaint->paint); + } + if (ts->sculpt) { + ts->sculpt= MEM_dupallocN(ts->sculpt); + copy_paint(&ts->sculpt->paint, &ts->sculpt->paint); + } + + copy_paint(&ts->imapaint.paint, &ts->imapaint.paint); + ts->imapaint.paintcursor= NULL; + ts->particle.paintcursor= NULL; + } /* make a private copy of the avicodecdata */ if (sce->r.avicodecdata) { From 637387b8ac81d74167aeae0a47b9ac1264c2ea05 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 15 Apr 2012 09:20:42 +0000 Subject: [PATCH 019/156] Fix #30949: live unwrap when marking seams did not work with bmesh. --- source/blender/editors/include/ED_uvedit.h | 2 ++ source/blender/editors/mesh/editmesh_select.c | 2 ++ source/blender/editors/mesh/editmesh_tools.c | 7 +++++-- source/blender/editors/uvedit/uvedit_unwrap_ops.c | 12 +++++++++++- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/include/ED_uvedit.h b/source/blender/editors/include/ED_uvedit.h index f122987b4e1..dfdbb1969cf 100644 --- a/source/blender/editors/include/ED_uvedit.h +++ b/source/blender/editors/include/ED_uvedit.h @@ -78,6 +78,8 @@ void ED_uvedit_live_unwrap_begin(struct Scene *scene, struct Object *obedit); void ED_uvedit_live_unwrap_re_solve(void); void ED_uvedit_live_unwrap_end(short cancel); +void ED_uvedit_live_unwrap(struct Scene *scene, struct Object *obedit); + /* single call up unwrap using scene settings, used for edge tag unwrapping */ void ED_unwrap_lscm(struct Scene *scene, struct Object *obedit, const short sel); diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 355d64a9fe1..e40f068ee59 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -56,6 +56,7 @@ #include "ED_mesh.h" #include "ED_screen.h" +#include "ED_uvedit.h" #include "ED_view3d.h" #include "BIF_gl.h" @@ -1399,6 +1400,7 @@ static void mouse_mesh_shortest_path(bContext *C, int mval[2]) case EDGE_MODE_TAG_SEAM: me->drawflag |= ME_DRAWSEAMS; + ED_uvedit_live_unwrap(vc.scene, vc.obedit); break; case EDGE_MODE_TAG_SHARP: me->drawflag |= ME_DRAWSHARP; diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 2c7d43f948e..73027c8fa7e 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -58,10 +58,11 @@ #include "WM_types.h" #include "ED_mesh.h" -#include "ED_view3d.h" +#include "ED_object.h" #include "ED_screen.h" #include "ED_transform.h" -#include "ED_object.h" +#include "ED_uvedit.h" +#include "ED_view3d.h" #include "RE_render_ext.h" @@ -1056,6 +1057,7 @@ void MESH_OT_edge_face_add(wmOperatorType *ot) static int edbm_mark_seam(bContext *C, wmOperator *op) { + Scene *scene = CTX_data_scene(C); Object *obedit = CTX_data_edit_object(C); Mesh *me = ((Mesh *)obedit->data); BMEditMesh *em = BMEdit_FromObject(obedit); @@ -1085,6 +1087,7 @@ static int edbm_mark_seam(bContext *C, wmOperator *op) } } + ED_uvedit_live_unwrap(scene, obedit); EDBM_update_generic(C, em, TRUE); return OPERATOR_FINISHED; diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index a3cbcc57a9c..136134a95b0 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -268,7 +268,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, BLI_addfilledge(firstv, v); - /*mode 2 enables faster handling of tri/quads*/ + /* mode 2 enables faster handling of tri/quads */ BLI_edgefill(2); for (sefa = fillfacebase.first; sefa; sefa = sefa->next) { ls[0] = sefa->v1->tmp.p; @@ -829,6 +829,16 @@ void ED_uvedit_live_unwrap_end(short cancel) } } +void ED_uvedit_live_unwrap(Scene *scene, Object *obedit) +{ + BMEditMesh *em = BMEdit_FromObject(obedit); + + if (scene->toolsettings->edge_mode_live_unwrap && + CustomData_has_layer(&em->bm->ldata, CD_MLOOPUV)) { + ED_unwrap_lscm(scene, obedit, FALSE); /* unwrap all not just sel */ + } +} + /*************** UV Map Common Transforms *****************/ #define VIEW_ON_EQUATOR 0 From 5c4a7171fed4a323ebf9f00bcece99372bcc7187 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 15 Apr 2012 09:34:57 +0000 Subject: [PATCH 020/156] qtcreator/netbeans generators: fix for error getting project info when svn isnt found (common on windows) --- build_files/cmake/project_info.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/build_files/cmake/project_info.py b/build_files/cmake/project_info.py index 77574f17e2e..3f64ac51a4d 100755 --- a/build_files/cmake/project_info.py +++ b/build_files/cmake/project_info.py @@ -231,8 +231,13 @@ def project_name_get(path, fallback="Blender", prefix="Blender_"): return fallback import subprocess - info = subprocess.Popen(["svn", "info", path], - stdout=subprocess.PIPE).communicate()[0] + try: + info = subprocess.Popen(["svn", "info", path], + stdout=subprocess.PIPE).communicate()[0] + except: + # possibly 'svn' isnt found/installed + return fallback + # string version, we only want the URL info = info.decode(encoding="utf-8", errors="ignore") From 9ef26d145c635724d236b8b4ec69a489cb6dfe28 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sun, 15 Apr 2012 09:39:51 +0000 Subject: [PATCH 021/156] Fix [#30959] "undocumented operator" tooltip for Collada im- and export * Also change UI name for ColorRamp node in rna_nodetree_types.h (Had a different name than in the actual UI) --- source/blender/makesrna/intern/rna_nodetree_types.h | 6 +++--- source/blender/windowmanager/intern/wm_operators.c | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/source/blender/makesrna/intern/rna_nodetree_types.h b/source/blender/makesrna/intern/rna_nodetree_types.h index 745a956d831..5352bbd0e0f 100644 --- a/source/blender/makesrna/intern/rna_nodetree_types.h +++ b/source/blender/makesrna/intern/rna_nodetree_types.h @@ -37,7 +37,7 @@ DefNode( ShaderNode, SH_NODE_MATERIAL, def_sh_material, "MATER DefNode( ShaderNode, SH_NODE_RGB, 0, "RGB", RGB, "RGB", "" ) DefNode( ShaderNode, SH_NODE_VALUE, 0, "VALUE", Value, "Value", "" ) DefNode( ShaderNode, SH_NODE_MIX_RGB, def_mix_rgb, "MIX_RGB", MixRGB, "MixRGB", "" ) -DefNode( ShaderNode, SH_NODE_VALTORGB, def_colorramp, "VALTORGB", ValToRGB, "Value to RGB", "" ) +DefNode( ShaderNode, SH_NODE_VALTORGB, def_colorramp, "VALTORGB", ValToRGB, "ColorRamp", "" ) DefNode( ShaderNode, SH_NODE_RGBTOBW, 0, "RGBTOBW", RGBToBW, "RGB to BW", "" ) DefNode( ShaderNode, SH_NODE_TEXTURE, def_texture, "TEXTURE", Texture, "Texture", "" ) DefNode( ShaderNode, SH_NODE_NORMAL, 0, "NORMAL", Normal, "Normal", "" ) @@ -94,7 +94,7 @@ DefNode( CompositorNode, CMP_NODE_VIEWER, 0, "VIEWE DefNode( CompositorNode, CMP_NODE_RGB, 0, "RGB", RGB, "RGB", "" ) DefNode( CompositorNode, CMP_NODE_VALUE, 0, "VALUE", Value, "Value", "" ) DefNode( CompositorNode, CMP_NODE_MIX_RGB, def_mix_rgb, "MIX_RGB", MixRGB, "Mix RGB", "" ) -DefNode( CompositorNode, CMP_NODE_VALTORGB, def_colorramp, "VALTORGB", ValToRGB, "Value to RGB", "" ) +DefNode( CompositorNode, CMP_NODE_VALTORGB, def_colorramp, "VALTORGB", ValToRGB, "ColorRamp", "" ) DefNode( CompositorNode, CMP_NODE_RGBTOBW, 0, "RGBTOBW", RGBToBW, "RGB to BW", "" ) DefNode( CompositorNode, CMP_NODE_NORMAL, 0, "NORMAL", Normal, "Normal", "" ) DefNode( CompositorNode, CMP_NODE_CURVE_VEC, def_vector_curve, "CURVE_VEC", CurveVec, "Vector Curve", "" ) @@ -166,7 +166,7 @@ DefNode( TextureNode, TEX_NODE_BRICKS, def_tex_bricks, "BRICK DefNode( TextureNode, TEX_NODE_MATH, def_math, "MATH", Math, "Math", "" ) DefNode( TextureNode, TEX_NODE_MIX_RGB, def_mix_rgb, "MIX_RGB", MixRGB, "Mix RGB", "" ) DefNode( TextureNode, TEX_NODE_RGBTOBW, 0, "RGBTOBW", RGBToBW, "RGB to BW", "" ) -DefNode( TextureNode, TEX_NODE_VALTORGB, def_colorramp, "VALTORGB", ValToRGB, "Value to RGB", "" ) +DefNode( TextureNode, TEX_NODE_VALTORGB, def_colorramp, "VALTORGB", ValToRGB, "ColorRamp", "" ) DefNode( TextureNode, TEX_NODE_IMAGE, def_tex_image, "IMAGE", Image, "Image", "" ) DefNode( TextureNode, TEX_NODE_CURVE_RGB, def_rgb_curve, "CURVE_RGB", CurveRGB, "RGB Curve", "" ) DefNode( TextureNode, TEX_NODE_INVERT, 0, "INVERT", Invert, "Invert", "" ) diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 3e81568d42a..b15d408df64 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -2147,6 +2147,7 @@ static int wm_collada_export_exec(bContext *C, wmOperator *op) static void WM_OT_collada_export(wmOperatorType *ot) { ot->name = "Export COLLADA"; + ot->description = "Save a Collada file"; ot->idname = "WM_OT_collada_export"; ot->invoke = wm_collada_export_invoke; @@ -2181,6 +2182,7 @@ static int wm_collada_import_exec(bContext *C, wmOperator *op) static void WM_OT_collada_import(wmOperatorType *ot) { ot->name = "Import COLLADA"; + ot->description = "Load a Collada file"; ot->idname = "WM_OT_collada_import"; ot->invoke = WM_operator_filesel; From e533fe72a3be089f7b3409f9178c83e3f37044d0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 15 Apr 2012 09:51:30 +0000 Subject: [PATCH 022/156] fix incorrect use of PLATFORM_DEFAULT with cmake --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 68efd0759fc..2669f2ff93f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -153,7 +153,7 @@ if(UNIX AND NOT APPLE) else() set(PLATFORM_DEFAULT OFF) endif() -option(WITH_OPENMP "Enable OpenMP (has to be supported by the compiler)" PLATFORM_DEFAULT) +option(WITH_OPENMP "Enable OpenMP (has to be supported by the compiler)" ${PLATFORM_DEFAULT}) unset(PLATFORM_DEFAULT) @@ -199,7 +199,7 @@ if(MINGW) else() set(PLATFORM_DEFAULT OFF) endif() -option(WITH_CODEC_FFMPEG "Enable FFMPeg Support (http://ffmpeg.org)" PLATFORM_DEFAULT) +option(WITH_CODEC_FFMPEG "Enable FFMPeg Support (http://ffmpeg.org)" ${PLATFORM_DEFAULT}) unset(PLATFORM_DEFAULT) option(WITH_CODEC_SNDFILE "Enable libsndfile Support (http://www.mega-nerd.com/libsndfile)" OFF) From 46146ecd08d0d85831b4a9a487e79310570c0c63 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 15 Apr 2012 10:06:36 +0000 Subject: [PATCH 023/156] Tweak knife/unwrap tesselation code a bit, it uses a random offset, now also seed the random number generator to at least make these operator repeatable. I don't know why it is using random numbers at all, we should really not be doing this in my opinion, but I don't understand why it's being done so won't remove it. --- source/blender/editors/mesh/editmesh_knife.c | 4 +++- source/blender/editors/uvedit/uvedit_unwrap_ops.c | 9 +++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index f33e1271e4e..9224a8d857e 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -1610,7 +1610,7 @@ static void rnd_offset_co(float co[3], float scale) int i; for (i = 0; i < 3; i++) { - co[i] += (BLI_drand() - 0.5) * scale; + co[i] += (BLI_frand() - 0.5) * scale; } } @@ -1809,6 +1809,8 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) } } + BLI_srand(0); + for (i = 0; i < totface; i++) { SmallHash *hash = &shash; ScanFillFace *efa; diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index 136134a95b0..f7e1ee221c0 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -211,6 +211,8 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, /* we need the vert indices */ BM_mesh_elem_index_ensure(em->bm, BM_VERT); + + BLI_srand(0); BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { ScanFillVert *v, *lastv, *firstv; @@ -226,7 +228,6 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, if ((BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) || (sel && BM_elem_flag_test(efa, BM_ELEM_SELECT) == 0)) continue; - /* tf= (MTexPoly *)CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); */ /* UNUSED */ lsel = 0; BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { @@ -241,7 +242,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, key = (ParamKey)efa; - /*scanfill time!*/ + /* scanfill time! */ BLI_begin_edgefill(); firstv = lastv = NULL; @@ -250,9 +251,9 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, v = BLI_addfillvert(l->v->co); - /*add small random offset*/ + /* add small random offset */ for (i = 0; i < 3; i++) { - v->co[i] += (BLI_drand() - 0.5f) * FLT_EPSILON * 50; + v->co[i] += (BLI_frand() - 0.5f) * FLT_EPSILON * 50; } v->tmp.p = l; From 97538bd9edf48f07c132fbddeccc421c56bd9b69 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 15 Apr 2012 10:07:57 +0000 Subject: [PATCH 024/156] Fix #30960: various mesh operators were missing tooltip descriptions. --- source/blender/editors/mesh/editmesh_select.c | 19 ++++++++++--------- source/blender/editors/mesh/editmesh_tools.c | 19 ++++++++++++++----- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index e40f068ee59..b16b22349ac 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -872,12 +872,12 @@ void MESH_OT_select_similar(wmOperatorType *ot) /* identifiers */ ot->name = "Select Similar"; ot->idname = "MESH_OT_select_similar"; + ot->description = "Select similar vertices, edges or faces by property types"; /* api callbacks */ ot->invoke = WM_menu_invoke; ot->exec = edbm_select_similar_exec; ot->poll = ED_operator_editmesh; - ot->description = "Select similar vertices, edges or faces by property types"; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -975,11 +975,11 @@ void MESH_OT_loop_multi_select(wmOperatorType *ot) /* identifiers */ ot->name = "Multi Select Loops"; ot->idname = "MESH_OT_loop_multi_select"; + ot->description = "Select a loop of connected edges by connection type"; /* api callbacks */ ot->exec = edbm_loop_multiselect_exec; ot->poll = ED_operator_editmesh; - ot->description = "Select a loop of connected edges by connection type"; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -1080,12 +1080,11 @@ void MESH_OT_loop_select(wmOperatorType *ot) /* identifiers */ ot->name = "Loop Select"; ot->idname = "MESH_OT_loop_select"; - ot->description = "Select a loop"; + ot->description = "Select a loop of connected edges"; /* api callbacks */ ot->invoke = edbm_select_loop_invoke; ot->poll = ED_operator_editmesh_region_view3d; - ot->description = "Select a loop of connected edges"; /* flags */ ot->flag = OPTYPE_UNDO; @@ -1433,11 +1432,11 @@ void MESH_OT_select_shortest_path(wmOperatorType *ot) /* identifiers */ ot->name = "Shortest Path Select"; ot->idname = "MESH_OT_select_shortest_path"; + ot->description = "Select shortest path between two selections"; /* api callbacks */ ot->invoke = edbm_shortest_path_select_invoke; ot->poll = ED_operator_editmesh; - ot->description = "Select shortest path between two selections"; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -1849,11 +1848,11 @@ void MESH_OT_select_linked_pick(wmOperatorType *ot) /* identifiers */ ot->name = "Select Linked"; ot->idname = "MESH_OT_select_linked_pick"; + ot->description = "(De)select all vertices linked to the edge under the mouse cursor"; /* api callbacks */ ot->invoke = edbm_select_linked_pick_invoke; ot->poll = ED_operator_editmesh; - ot->description = "(De)select all vertices linked to the edge under the mouse cursor"; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -1947,11 +1946,11 @@ void MESH_OT_select_linked(wmOperatorType *ot) /* identifiers */ ot->name = "Select Linked All"; ot->idname = "MESH_OT_select_linked"; + ot->description = "Select all vertices linked to the active mesh"; /* api callbacks */ ot->exec = edbm_select_linked_exec; ot->poll = ED_operator_editmesh; - ot->description = "Select all vertices linked to the active mesh"; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -2187,8 +2186,8 @@ void MESH_OT_select_nth(wmOperatorType *ot) { /* identifiers */ ot->name = "Select Nth"; - ot->description = ""; ot->idname = "MESH_OT_select_nth"; + ot->description = "Select every Nth element starting from a selected vertex, edge or face"; /* api callbacks */ ot->exec = edbm_select_nth_exec; @@ -2513,7 +2512,7 @@ void MESH_OT_select_next_loop(wmOperatorType *ot) /* identifiers */ ot->name = "Select Next Loop"; ot->idname = "MESH_OT_select_next_loop"; - ot->description = ""; + ot->description = "Select next edge loop adjacent to a selected loop"; /* api callbacks */ ot->exec = edbm_select_next_loop_exec; @@ -2581,6 +2580,7 @@ void MESH_OT_region_to_loop(wmOperatorType *ot) /* identifiers */ ot->name = "Select Boundary Loop"; ot->idname = "MESH_OT_region_to_loop"; + ot->description = "Select boundary edges around the selected faces"; /* api callbacks */ ot->exec = edbm_region_to_loop_exec; @@ -2762,6 +2762,7 @@ void MESH_OT_loop_to_region(wmOperatorType *ot) /* identifiers */ ot->name = "Select Loop Inner-Region"; ot->idname = "MESH_OT_loop_to_region"; + ot->description = "Select region of faces inside of a selected loop of edges"; /* api callbacks */ ot->exec = edbm_loop_to_region_exec; diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 73027c8fa7e..0ae9518b8b6 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -538,6 +538,7 @@ void MESH_OT_extrude_region(wmOperatorType *ot) /* identifiers */ ot->name = "Extrude Region"; ot->idname = "MESH_OT_extrude_region"; + ot->description = "Extrude region of faces"; /* api callbacks */ //ot->invoke = mesh_extrude_region_invoke; @@ -568,6 +569,7 @@ void MESH_OT_extrude_verts_indiv(wmOperatorType *ot) /* identifiers */ ot->name = "Extrude Only Vertices"; ot->idname = "MESH_OT_extrude_verts_indiv"; + ot->description = "Extrude individual vertices only"; /* api callbacks */ ot->exec = edbm_extrude_verts_exec; @@ -598,6 +600,7 @@ void MESH_OT_extrude_edges_indiv(wmOperatorType *ot) /* identifiers */ ot->name = "Extrude Only Edges"; ot->idname = "MESH_OT_extrude_edges_indiv"; + ot->description = "Extrude individual edges only"; /* api callbacks */ ot->exec = edbm_extrude_edges_exec; @@ -628,6 +631,7 @@ void MESH_OT_extrude_faces_indiv(wmOperatorType *ot) /* identifiers */ ot->name = "Extrude Individual Faces"; ot->idname = "MESH_OT_extrude_faces_indiv"; + ot->description = "Extrude individual faces only"; /* api callbacks */ ot->exec = edbm_extrude_faces_exec; @@ -883,10 +887,10 @@ void MESH_OT_dupli_extrude_cursor(wmOperatorType *ot) /* identifiers */ ot->name = "Duplicate or Extrude at 3D Cursor"; ot->idname = "MESH_OT_dupli_extrude_cursor"; + ot->description = "Duplicate and extrude selected vertices, edges or faces towards the mouse cursor"; /* api callbacks */ ot->invoke = edbm_dupli_extrude_cursor_invoke; - ot->description = "Duplicate and extrude selected vertices, edges or faces towards the mouse cursor"; ot->poll = ED_operator_editmesh; /* flags */ @@ -1098,7 +1102,7 @@ void MESH_OT_mark_seam(wmOperatorType *ot) /* identifiers */ ot->name = "Mark Seam"; ot->idname = "MESH_OT_mark_seam"; - ot->description = "(un)mark selected edges as a seam"; + ot->description = "(Un)mark selected edges as a seam"; /* api callbacks */ ot->exec = edbm_mark_seam; @@ -1152,7 +1156,7 @@ void MESH_OT_mark_sharp(wmOperatorType *ot) /* identifiers */ ot->name = "Mark Sharp"; ot->idname = "MESH_OT_mark_sharp"; - ot->description = "(un)mark selected edges as sharp"; + ot->description = "(Un)mark selected edges as sharp"; /* api callbacks */ ot->exec = edbm_mark_sharp; @@ -1417,11 +1421,11 @@ void MESH_OT_hide(wmOperatorType *ot) /* identifiers */ ot->name = "Hide Selection"; ot->idname = "MESH_OT_hide"; + ot->description = "Hide (un)selected vertices, edges or faces"; /* api callbacks */ ot->exec = edbm_hide_exec; ot->poll = ED_operator_editmesh; - ot->description = "Hide (un)selected vertices, edges or faces"; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -1747,6 +1751,7 @@ void MESH_OT_uvs_rotate(wmOperatorType *ot) /* identifiers */ ot->name = "Rotate UVs"; ot->idname = "MESH_OT_uvs_rotate"; + ot->description = "Rotate UV coordinates inside faces"; /* api callbacks */ ot->exec = edbm_rotate_uvs_exec; @@ -1765,6 +1770,7 @@ void MESH_OT_uvs_reverse(wmOperatorType *ot) /* identifiers */ ot->name = "Reverse UVs"; ot->idname = "MESH_OT_uvs_reverse"; + ot->description = "Flip direction of UV coordinates inside faces"; /* api callbacks */ ot->exec = edbm_reverse_uvs_exec; @@ -1782,6 +1788,7 @@ void MESH_OT_colors_rotate(wmOperatorType *ot) /* identifiers */ ot->name = "Rotate Colors"; ot->idname = "MESH_OT_colors_rotate"; + ot->description = "Rotate vertex colors inside faces"; /* api callbacks */ ot->exec = edbm_rotate_colors_exec; @@ -1799,6 +1806,7 @@ void MESH_OT_colors_reverse(wmOperatorType *ot) /* identifiers */ ot->name = "Reverse Colors"; ot->idname = "MESH_OT_colors_reverse"; + ot->description = "Flip direction of vertex colors inside faces"; /* api callbacks */ ot->exec = edbm_reverse_colors_exec; @@ -2113,6 +2121,7 @@ void MESH_OT_select_vertex_path(wmOperatorType *ot) /* identifiers */ ot->name = "Select Vertex Path"; ot->idname = "MESH_OT_select_vertex_path"; + ot->description = "Selected vertex path between two vertices"; /* api callbacks */ ot->exec = edbm_select_vertex_path_exec; @@ -4556,11 +4565,11 @@ void MESH_OT_inset(wmOperatorType *ot) /* identifiers */ ot->name = "Inset Faces"; ot->idname = "MESH_OT_inset"; + ot->description = "Inset new faces into selected faces"; /* api callbacks */ ot->exec = edbm_inset_exec; ot->poll = ED_operator_editmesh; - ot->description = ""; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; From db53faffa3e86fb44bfa2a025a5261eb69d3bc09 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 15 Apr 2012 10:09:27 +0000 Subject: [PATCH 025/156] make ngon_perimeter into a public api function and expose to python. --- source/blender/bmesh/intern/bmesh_polygon.c | 16 ++++++++++ source/blender/bmesh/intern/bmesh_polygon.h | 1 + source/blender/bmesh/operators/bmo_utils.c | 32 +------------------- source/blender/python/bmesh/bmesh_py_types.c | 16 ++++++++++ 4 files changed, 34 insertions(+), 31 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c index 33549660cb3..67e3d24ade1 100644 --- a/source/blender/bmesh/intern/bmesh_polygon.c +++ b/source/blender/bmesh/intern/bmesh_polygon.c @@ -190,6 +190,22 @@ float BM_face_area_calc(BMesh *bm, BMFace *f) return area; } +/** + * compute the perimeter of an ngon + */ +float BM_face_perimeter_calc(BMesh *UNUSED(bm), BMFace *f) +{ + BMLoop *l_iter, *l_first; + float perimeter = 0.0f; + + l_iter = l_first = BM_FACE_FIRST_LOOP(f); + do { + perimeter += len_v3v3(l_iter->v->co, l_iter->next->v->co); + } while ((l_iter = l_iter->next) != l_first); + + return perimeter; +} + /** * computes center of face in 3d. uses center of bounding box. */ diff --git a/source/blender/bmesh/intern/bmesh_polygon.h b/source/blender/bmesh/intern/bmesh_polygon.h index 3c8f3dc3339..71387f18ce2 100644 --- a/source/blender/bmesh/intern/bmesh_polygon.h +++ b/source/blender/bmesh/intern/bmesh_polygon.h @@ -28,6 +28,7 @@ */ float BM_face_area_calc(BMesh *bm, BMFace *f); +float BM_face_perimeter_calc(BMesh *bm, BMFace *f); void BM_face_center_bounds_calc(BMesh *bm, BMFace *f, float center[3]); void BM_face_center_mean_calc(BMesh *bm, BMFace *f, float center[3]); diff --git a/source/blender/bmesh/operators/bmo_utils.c b/source/blender/bmesh/operators/bmo_utils.c index c359d530f73..ea1fc5171e5 100644 --- a/source/blender/bmesh/operators/bmo_utils.c +++ b/source/blender/bmesh/operators/bmo_utils.c @@ -458,36 +458,6 @@ void bmo_vertexsmooth_exec(BMesh *bm, BMOperator *op) BLI_array_free(cos); } -/* - * compute the perimeter of an ngon - * - * NOTE: This should probably go to bmesh_polygon.c - */ -static float ngon_perimeter(BMesh *bm, BMFace *f) -{ - BMIter liter; - BMLoop *l; - int num_verts = 0; - float v[3], sv[3]; - float perimeter = 0.0f; - - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { - if (num_verts == 0) { - copy_v3_v3(v, l->v->co); - copy_v3_v3(sv, l->v->co); - } - else { - perimeter += len_v3v3(v, l->v->co); - copy_v3_v3(v, l->v->co); - } - num_verts++; - } - - perimeter += len_v3v3(v, sv); - - return perimeter; -} - /* * compute the fake surface of an ngon * This is done by decomposing the ngon into triangles who share the centroid of the ngon @@ -593,7 +563,7 @@ void bmo_similarfaces_exec(BMesh *bm, BMOperator *op) switch (type) { case SIMFACE_PERIMETER: /* set the perimeter */ - f_ext[i].perim = ngon_perimeter(bm, f_ext[i].f); + f_ext[i].perim = BM_face_perimeter_calc(bm, f_ext[i].f); break; case SIMFACE_COPLANAR: diff --git a/source/blender/python/bmesh/bmesh_py_types.c b/source/blender/python/bmesh/bmesh_py_types.c index 4b4dc7caa7f..5fcefc7533b 100644 --- a/source/blender/python/bmesh/bmesh_py_types.c +++ b/source/blender/python/bmesh/bmesh_py_types.c @@ -1400,6 +1400,21 @@ static PyObject *bpy_bmface_calc_area(BPy_BMFace *self) } +PyDoc_STRVAR(bpy_bmface_calc_perimeter_doc, +".. method:: calc_perimeter()\n" +"\n" +" Return the perimeter of the face.\n" +"\n" +" :return: Return the perimeter of the face.\n" +" :rtype: float\n" +); +static PyObject *bpy_bmface_calc_perimeter(BPy_BMFace *self) +{ + BPY_BM_CHECK_OBJ(self); + return PyFloat_FromDouble(BM_face_perimeter_calc(self->bm, self->f)); +} + + PyDoc_STRVAR(bpy_bmface_calc_center_mean_doc, ".. method:: calc_center_median()\n" "\n" @@ -2081,6 +2096,7 @@ static struct PyMethodDef bpy_bmface_methods[] = { {"copy", (PyCFunction)bpy_bmface_copy, METH_VARARGS|METH_KEYWORDS, bpy_bmface_copy_doc}, {"calc_area", (PyCFunction)bpy_bmface_calc_area, METH_NOARGS, bpy_bmface_calc_area_doc}, + {"calc_perimeter", (PyCFunction)bpy_bmface_calc_perimeter, METH_NOARGS, bpy_bmface_calc_perimeter_doc}, {"calc_center_median", (PyCFunction)bpy_bmface_calc_center_mean, METH_NOARGS, bpy_bmface_calc_center_mean_doc}, {"calc_center_bounds", (PyCFunction)bpy_bmface_calc_center_bounds, METH_NOARGS, bpy_bmface_calc_center_bounds_doc}, From cda6230a852c51dfe713b221132cbf30be6a1d5d Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 15 Apr 2012 10:31:07 +0000 Subject: [PATCH 026/156] Fix #30952: uv unwrapper not working as well as 2.62 on some topologies, let the unwrapper itself decide how to split quads since it has specific checks for the best unwrapping split built in, gives better results. --- .../editors/uvedit/uvedit_parametrizer.c | 4 +- .../editors/uvedit/uvedit_parametrizer.h | 2 - .../editors/uvedit/uvedit_unwrap_ops.c | 109 +++++++++--------- 3 files changed, 58 insertions(+), 57 deletions(-) diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c b/source/blender/editors/uvedit/uvedit_parametrizer.c index d2c711fccf3..c99d6e992b7 100644 --- a/source/blender/editors/uvedit/uvedit_parametrizer.c +++ b/source/blender/editors/uvedit/uvedit_parametrizer.c @@ -742,7 +742,7 @@ static PEdge *p_edge_lookup(PHandle *handle, PHashKey *vkeys) return NULL; } -int p_face_exists(ParamHandle *phandle, ParamKey *pvkeys, int i1, int i2, int i3) +static int p_face_exists(ParamHandle *phandle, ParamKey *pvkeys, int i1, int i2, int i3) { PHandle *handle = (PHandle *)phandle; PHashKey *vkeys = (PHashKey *)pvkeys; @@ -4131,7 +4131,7 @@ void param_face_add(ParamHandle *handle, ParamKey key, int nverts, p_face_add_construct(phandle, key, vkeys, co, uv, 1, 2, 3, pin, select); } } - else + else if(!p_face_exists(phandle, vkeys, 0, 1, 2)) p_face_add_construct(phandle, key, vkeys, co, uv, 0, 1, 2, pin, select); } diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.h b/source/blender/editors/uvedit/uvedit_parametrizer.h index 00cbbd16073..1643a89b089 100644 --- a/source/blender/editors/uvedit/uvedit_parametrizer.h +++ b/source/blender/editors/uvedit/uvedit_parametrizer.h @@ -33,8 +33,6 @@ ParamHandle *param_construct_begin(void); void param_aspect_ratio(ParamHandle *handle, float aspx, float aspy); -int p_face_exists(ParamHandle *handle, ParamKey *vkeys, int i1, int i2, int i3); - void param_face_add(ParamHandle *handle, ParamKey key, int nverts, diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index f7e1ee221c0..54182350f1e 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -220,10 +220,9 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, ParamKey key, vkeys[4]; ParamBool pin[4], select[4]; BMLoop *ls[3]; - MLoopUV *luvs[3]; float *co[4]; float *uv[4]; - int lsel; + int i, lsel; if ((BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) || (sel && BM_elem_flag_test(efa, BM_ELEM_SELECT) == 0)) continue; @@ -242,69 +241,73 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, key = (ParamKey)efa; - /* scanfill time! */ - BLI_begin_edgefill(); - - firstv = lastv = NULL; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { - int i; - - v = BLI_addfillvert(l->v->co); - - /* add small random offset */ - for (i = 0; i < 3; i++) { - v->co[i] += (BLI_frand() - 0.5f) * FLT_EPSILON * 50; - } - - v->tmp.p = l; - if (lastv) { - BLI_addfilledge(lastv, v); + if(efa->len == 3 || efa->len == 4) { + /* for quads let parametrize split, it can make better decisions + about which split is best for unwrapping than scanfill */ + i = 0; + BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); + vkeys[i] = (ParamKey)BM_elem_index_get(l->v); + co[i] = l->v->co; + uv[i] = luv->uv; + pin[i] = (luv->flag & MLOOPUV_PINNED) != 0; + select[i] = uvedit_uv_selected(em, scene, l) != 0; + + i++; } - lastv = v; - if (!firstv) - firstv = v; + param_face_add(handle, key, i, vkeys, co, uv, pin, select); } - - BLI_addfilledge(firstv, v); - - /* mode 2 enables faster handling of tri/quads */ - BLI_edgefill(2); - for (sefa = fillfacebase.first; sefa; sefa = sefa->next) { - ls[0] = sefa->v1->tmp.p; - ls[1] = sefa->v2->tmp.p; - ls[2] = sefa->v3->tmp.p; + else { + /* ngon - scanfill time! */ + BLI_begin_edgefill(); - luvs[0] = CustomData_bmesh_get(&em->bm->ldata, ls[0]->head.data, CD_MLOOPUV); - luvs[1] = CustomData_bmesh_get(&em->bm->ldata, ls[1]->head.data, CD_MLOOPUV); - luvs[2] = CustomData_bmesh_get(&em->bm->ldata, ls[2]->head.data, CD_MLOOPUV); + firstv = lastv = NULL; + BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + int i; + + v = BLI_addfillvert(l->v->co); + + /* add small random offset */ + for (i = 0; i < 3; i++) { + v->co[i] += (BLI_frand() - 0.5f) * FLT_EPSILON * 50; + } + + v->tmp.p = l; - vkeys[0] = (ParamKey)BM_elem_index_get(ls[0]->v); - vkeys[1] = (ParamKey)BM_elem_index_get(ls[1]->v); - vkeys[2] = (ParamKey)BM_elem_index_get(ls[2]->v); + if (lastv) { + BLI_addfilledge(lastv, v); + } - co[0] = ls[0]->v->co; - co[1] = ls[1]->v->co; - co[2] = ls[2]->v->co; + lastv = v; + if (!firstv) + firstv = v; + } - uv[0] = luvs[0]->uv; - uv[1] = luvs[1]->uv; - uv[2] = luvs[2]->uv; + BLI_addfilledge(firstv, v); + + /* mode 2 enables faster handling of tri/quads */ + BLI_edgefill(2); + for (sefa = fillfacebase.first; sefa; sefa = sefa->next) { + ls[0] = sefa->v1->tmp.p; + ls[1] = sefa->v2->tmp.p; + ls[2] = sefa->v3->tmp.p; - pin[0] = (luvs[0]->flag & MLOOPUV_PINNED) != 0; - pin[1] = (luvs[1]->flag & MLOOPUV_PINNED) != 0; - pin[2] = (luvs[2]->flag & MLOOPUV_PINNED) != 0; + for(i = 0; i < 3; i++) { + MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, ls[i]->head.data, CD_MLOOPUV); + vkeys[i] = (ParamKey)BM_elem_index_get(ls[i]->v); + co[i] = ls[i]->v->co; + uv[i] = luv->uv; + pin[i] = (luv->flag & MLOOPUV_PINNED) != 0; + select[i] = uvedit_uv_selected(em, scene, ls[i]) != 0; + } - select[0] = uvedit_uv_selected(em, scene, ls[0]) != 0; - select[1] = uvedit_uv_selected(em, scene, ls[1]) != 0; - select[2] = uvedit_uv_selected(em, scene, ls[2]) != 0; - - if (!p_face_exists(handle, vkeys, 0, 1, 2)) param_face_add(handle, key, 3, vkeys, co, uv, pin, select); - } + } - BLI_end_edgefill(); + BLI_end_edgefill(); + } } if (!implicit) { From c96be5c5f96b6bc959d1fe8a1d211b90d508f065 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Sun, 15 Apr 2012 10:31:38 +0000 Subject: [PATCH 027/156] Bugfix [#30954] Fluid obstacle checkbox has no effect Needs testing for sideeffects. If there are negative sideeffects, revert commit and mark as "will not fix"/"not supported"/"needs UI fix". --- intern/elbeem/intern/solver_init.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/intern/elbeem/intern/solver_init.cpp b/intern/elbeem/intern/solver_init.cpp index 7e9f5e7f420..58f45e4fbfb 100644 --- a/intern/elbeem/intern/solver_init.cpp +++ b/intern/elbeem/intern/solver_init.cpp @@ -1453,7 +1453,9 @@ void LbmFsgrSolver::initMovingObstacles(bool staticInit) { //errMsg("GEOACTT"," obj "<getName()<<" a:"<getGeoInitType()); continue; } - if((!active) && (otype&(CFMbndOutflow|CFMbndInflow)) ) continue; + /* DG: only inflows/outlfows could be activated/deactivated, test new code that everything can be activated + if((!active) && (otype&(CFMbndOutflow|CFMbndInflow)) ) continue; */ + if((!active) /* && (otype&(CFMbndOutflow|CFMbndInflow)) */ ) continue; // copied from recalculateObjectSpeeds mObjectSpeeds[OId] = vec2L(mpParam->calculateLattVelocityFromRw( vec2P( (*mpGiObjects)[OId]->getInitialVelocity(mSimulationTime) ))); From 5f0c43d2c2835554ab6f6dc6bafd4ca760996427 Mon Sep 17 00:00:00 2001 From: Benoit Bolsee Date: Sun, 15 Apr 2012 11:47:08 +0000 Subject: [PATCH 028/156] BGE bug #30515: Sensor physics mode missing UI for use_actor option. This option tells whether the sensor object is only affected by objects that have the Actor option on or any object. The option was missing from the UI. --- release/scripts/startup/bl_ui/properties_game.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/release/scripts/startup/bl_ui/properties_game.py b/release/scripts/startup/bl_ui/properties_game.py index cc3e8a8e57d..36941cdfbbf 100644 --- a/release/scripts/startup/bl_ui/properties_game.py +++ b/release/scripts/startup/bl_ui/properties_game.py @@ -166,7 +166,12 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel, Panel): subsub.active = game.use_anisotropic_friction subsub.prop(game, "friction_coefficients", text="", slider=True) - elif physics_type in {'SENSOR', 'INVISIBLE', 'NO_COLLISION', 'OCCLUDE'}: + elif physics_type =='SENSOR': + col = layout.column() + col.prop(game, "use_actor", text="Detect Actors") + col.prop(ob, "hide_render", text="Invisible") + + elif physics_type in {'INVISIBLE', 'NO_COLLISION', 'OCCLUDE'}: layout.prop(ob, "hide_render", text="Invisible") elif physics_type == 'NAVMESH': From 6627fe3f75217bd288bb3fb53dc7bb1dd20c3706 Mon Sep 17 00:00:00 2001 From: Benoit Bolsee Date: Sun, 15 Apr 2012 12:49:34 +0000 Subject: [PATCH 029/156] BGE bug #30555: crash in Replace Mesh when physics shape is triangle mesh and new mesh has no collision faces. The fix consists in keeping the previous physics shape, which is not quite correct, but the situation is unusual anyway. --- source/gameengine/Physics/Bullet/CcdPhysicsController.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp index 73ba187d732..9a85471fb9a 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp +++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp @@ -1918,6 +1918,10 @@ bool CcdShapeConstructionInfo::UpdateMesh(class KX_GameObject* gameobj, class RA } } + // This case happens when none of the polys are colliders + if (tot_bt_tris == 0 || tot_bt_verts == 0) + return false; + m_vertexArray.resize(tot_bt_verts*3); btScalar *bt= &m_vertexArray[0]; From 6fed4fdd5eb92099f36212b5e71b4298e36ca582 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Sun, 15 Apr 2012 13:41:07 +0000 Subject: [PATCH 030/156] Style cleanup (mostly line length, also no final point in tips...). --- source/blender/makesrna/intern/makesrna.c | 9 ++++++--- source/blender/makesrna/intern/rna_access.c | 6 +++--- source/blender/makesrna/intern/rna_boid.c | 3 ++- source/blender/makesrna/intern/rna_fcurve.c | 6 ++++-- source/blender/makesrna/intern/rna_fluidsim.c | 4 +++- source/blender/makesrna/intern/rna_nodetree.c | 3 ++- source/blender/makesrna/intern/rna_object.c | 3 ++- source/blender/makesrna/intern/rna_particle.c | 6 ++++-- source/blender/makesrna/intern/rna_render.c | 2 +- source/blender/makesrna/intern/rna_userdef.c | 2 +- 10 files changed, 28 insertions(+), 16 deletions(-) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 87f00dc835d..cdaa117a9e7 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -695,15 +695,18 @@ static void rna_clamp_value_range(FILE *f, PropertyRNA *prop) if (prop->type == PROP_FLOAT) { FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop; if (fprop->range) { - fprintf(f, " float prop_clamp_min = -FLT_MAX, prop_clamp_max = FLT_MAX, prop_soft_min, prop_soft_max;\n"); - fprintf(f, " %s(ptr, &prop_clamp_min, &prop_clamp_max, &prop_soft_min, &prop_soft_max);\n", rna_function_string(fprop->range)); + fprintf(f, + " float prop_clamp_min = -FLT_MAX, prop_clamp_max = FLT_MAX, prop_soft_min, prop_soft_max;\n"); + fprintf(f, " %s(ptr, &prop_clamp_min, &prop_clamp_max, &prop_soft_min, &prop_soft_max);\n", + rna_function_string(fprop->range)); } } else if (prop->type == PROP_INT) { IntPropertyRNA *iprop = (IntPropertyRNA*)prop; if (iprop->range) { fprintf(f, " int prop_clamp_min = INT_MIN, prop_clamp_max = INT_MAX, prop_soft_min, prop_soft_max;\n"); - fprintf(f, " %s(ptr, &prop_clamp_min, &prop_clamp_max, &prop_soft_min, &prop_soft_max);\n", rna_function_string(iprop->range)); + fprintf(f, " %s(ptr, &prop_clamp_min, &prop_clamp_max, &prop_soft_min, &prop_soft_max);\n", + rna_function_string(iprop->range)); } } } diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index d5363b33fe9..3200b271718 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -4532,7 +4532,7 @@ char *RNA_pointer_as_string_keywords_ex(bContext *C, PointerRNA *ptr, PointerRNA PropertyRNA *prop; - DynStr *dynstr= BLI_dynstr_new(); + DynStr *dynstr = BLI_dynstr_new(); char *cstring, *buf; int first_iter = TRUE, ok = TRUE; int flag; @@ -4581,10 +4581,10 @@ char *RNA_pointer_as_string_keywords_ex(bContext *C, PointerRNA *ptr, PointerRNA if (all_args == FALSE && ptr_default) { /* not verbose, so only add in attributes that use non-default values * slow but good for tooltips */ - prop_default= RNA_struct_find_property(ptr_default, arg_name); + prop_default = RNA_struct_find_property(ptr_default, arg_name); if (prop_default) { - buf_default= RNA_property_as_string(C, ptr_default, prop_default); + buf_default = RNA_property_as_string(C, ptr_default, prop_default); if (strcmp(buf, buf_default) == 0) ok = FALSE; /* values match, don't bother printing */ diff --git a/source/blender/makesrna/intern/rna_boid.c b/source/blender/makesrna/intern/rna_boid.c index 1e77959a971..ce9edc17999 100644 --- a/source/blender/makesrna/intern/rna_boid.c +++ b/source/blender/makesrna/intern/rna_boid.c @@ -217,7 +217,8 @@ static PointerRNA rna_BoidSettings_active_boid_state_get(PointerRNA *ptr) } return rna_pointer_inherit_refine(ptr, &RNA_BoidState, NULL); } -static void rna_BoidSettings_active_boid_state_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax) +static void rna_BoidSettings_active_boid_state_index_range(PointerRNA *ptr, int *min, int *max, + int *softmin, int *softmax) { BoidSettings *boids = (BoidSettings*)ptr->data; *min = 0; diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index c7eeb633e25..bf5f51374fa 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -557,7 +557,8 @@ static void rna_FModifierLimits_maxy_range(PointerRNA *ptr, float *min, float *m } -static void rna_FModifierStepped_start_frame_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax) +static void rna_FModifierStepped_start_frame_range(PointerRNA *ptr, float *min, float *max, + float *softmin, float *softmax) { FModifier *fcm = (FModifier*)ptr->data; FMod_Stepped *data = fcm->data; @@ -566,7 +567,8 @@ static void rna_FModifierStepped_start_frame_range(PointerRNA *ptr, float *min, *max = (data->flag & FCM_STEPPED_NO_AFTER)? data->end_frame : MAXFRAMEF; } -static void rna_FModifierStepped_end_frame_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax) +static void rna_FModifierStepped_end_frame_range(PointerRNA *ptr, float *min, float *max, + float *softmin, float *softmax) { FModifier *fcm = (FModifier*)ptr->data; FMod_Stepped *data = fcm->data; diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c index 7ada0e9b04a..b5770650cb8 100644 --- a/source/blender/makesrna/intern/rna_fluidsim.c +++ b/source/blender/makesrna/intern/rna_fluidsim.c @@ -423,7 +423,9 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna) prop = RNA_def_property(srna, "surface_noobs", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSSG_NOOBS); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_ui_text(prop, "Remove air bubbles", "Removes the air gap between fluid surface and obstacles. WARNING: Can result in a dissolving surface in other areas."); + RNA_def_property_ui_text(prop, "Remove air bubbles", + "Removes the air gap between fluid surface and obstacles - WARNING: Can result " + "in a dissolving surface in other areas"); /* particles */ diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index 67d0c08a628..9d5a6049144 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -685,7 +685,8 @@ static void rna_NodeTree_node_clear(bNodeTree *ntree) WM_main_add_notifier(NC_NODE|NA_EDITED, ntree); } -static bNodeLink *rna_NodeTree_link_new(bNodeTree *ntree, ReportList *reports, bNodeSocket *fromsock, bNodeSocket *tosock) +static bNodeLink *rna_NodeTree_link_new(bNodeTree *ntree, ReportList *reports, + bNodeSocket *fromsock, bNodeSocket *tosock) { bNodeLink *ret; bNode *fromnode = NULL, *tonode = NULL; diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 21d4003bbf5..12d31b0a115 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -644,7 +644,8 @@ static void rna_Object_active_material_set(PointerRNA *ptr, PointerRNA value) assign_material(ob, value.data, ob->actcol); } -static void rna_Object_active_particle_system_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax) +static void rna_Object_active_particle_system_index_range(PointerRNA *ptr, int *min, int *max, + int *softmin, int *softmax) { Object *ob = (Object*)ptr->id.data; *min = 0; diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index b89f7e0c01c..c80ac4380fa 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -525,7 +525,8 @@ static PointerRNA rna_ParticleSystem_active_particle_target_get(PointerRNA *ptr) } return rna_pointer_inherit_refine(ptr, &RNA_ParticleTarget, NULL); } -static void rna_ParticleSystem_active_particle_target_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax) +static void rna_ParticleSystem_active_particle_target_index_range(PointerRNA *ptr, int *min, int *max, + int *softmin, int *softmax) { ParticleSystem *psys = (ParticleSystem*)ptr->data; *min = 0; @@ -1765,7 +1766,8 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_enum_sdna(prop, NULL, "rotmode"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_enum_items(prop, rot_mode_items); - RNA_def_property_ui_text(prop, "Orientation axis", "Particle orientation axis (does not affect Explode modifier's results)"); + RNA_def_property_ui_text(prop, "Orientation axis", + "Particle orientation axis (does not affect Explode modifier's results)"); RNA_def_property_update(prop, 0, "rna_Particle_reset"); prop = RNA_def_property(srna, "angular_velocity_mode", PROP_ENUM, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index 6e9d94bd7fb..69d9ce05d7d 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -356,7 +356,7 @@ static void rna_def_render_engine(BlenderRNA *brna) prop = RNA_def_property(srna, "is_preview", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", RE_ENGINE_PREVIEW); - prop= RNA_def_property(srna, "camera_override", PROP_POINTER, PROP_NONE); + prop = RNA_def_property(srna, "camera_override", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "camera_override"); RNA_def_property_struct_type(prop, "Object"); diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index dbe4aa47151..e65f59144af 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -2669,7 +2669,7 @@ static void rna_def_userdef_edit(BlenderRNA *brna) prop = RNA_def_property(srna, "fcurve_unselected_alpha", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "fcu_inactive_alpha"); RNA_def_property_range(prop, 0.001f, 1.0f); - RNA_def_property_ui_text(prop, "Unselected F-Curve Visibility", + RNA_def_property_ui_text(prop, "Unselected F-Curve Visibility", "Amount that unselected F-Curves stand out from the background (Graph Editor)"); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL); From 20a37ba8f87f2d68a509f75c87bcdf61cb607278 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 15 Apr 2012 14:14:15 +0000 Subject: [PATCH 031/156] fix [#30956] Unwrapping, Lightmap Pack broken --- release/scripts/startup/bl_operators/uvcalc_lightmap.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/release/scripts/startup/bl_operators/uvcalc_lightmap.py b/release/scripts/startup/bl_operators/uvcalc_lightmap.py index 08f471e9022..9e1ebbac806 100644 --- a/release/scripts/startup/bl_operators/uvcalc_lightmap.py +++ b/release/scripts/startup/bl_operators/uvcalc_lightmap.py @@ -89,7 +89,7 @@ class prettyface(object): else: # blender face uv_layer = data.id_data.uv_loop_layers.active.data - self.uv = [uv_layer[i].uv for i in data.loops] + self.uv = [uv_layer[i].uv for i in data.loop_indices] # cos = [v.co for v in data] cos = [data.id_data.vertices[v].co for v in data.vertices] # XXX25 @@ -245,7 +245,7 @@ def lightmap_uvpack(meshes, print("\tWarning, less then 4 faces, skipping") continue - pretty_faces = [prettyface(f) for f in face_sel if len(f.vertices) == 4] + pretty_faces = [prettyface(f) for f in face_sel if f.loop_total == 4] # Do we have any triangles? if len(pretty_faces) != len(face_sel): @@ -269,7 +269,7 @@ def lightmap_uvpack(meshes, return f, lens, lens_order - tri_lengths = [trylens(f) for f in face_sel if len(f.vertices) == 3] + tri_lengths = [trylens(f) for f in face_sel if f.loop_total == 3] del trylens def trilensdiff(t1, t2): From bab7b47a719b0660666d60b48a7a87e2347bbf75 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 15 Apr 2012 14:51:37 +0000 Subject: [PATCH 032/156] code cleanup: minor edits, use function for getting console module. --- release/scripts/startup/bl_operators/console.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/release/scripts/startup/bl_operators/console.py b/release/scripts/startup/bl_operators/console.py index 8afcdf5f67e..099cb02564d 100644 --- a/release/scripts/startup/bl_operators/console.py +++ b/release/scripts/startup/bl_operators/console.py @@ -23,15 +23,19 @@ from bpy.types import Operator from bpy.props import StringProperty +def _lang_module_get(sc): + return __import__("console_" + sc.language) + + class ConsoleExec(Operator): - '''Execute the current console line as a python expression''' + """Execute the current console line as a python expression""" bl_idname = "console.execute" bl_label = "Console Execute" def execute(self, context): sc = context.space_data - module = __import__("console_" + sc.language) + module = _lang_module_get(sc) execute = getattr(module, "execute", None) if execute: @@ -50,7 +54,7 @@ class ConsoleAutocomplete(Operator): def execute(self, context): sc = context.space_data - module = __import__("console_" + sc.language) + module = _lang_module_get(sc) autocomplete = getattr(module, "autocomplete", None) if autocomplete: @@ -62,7 +66,7 @@ class ConsoleAutocomplete(Operator): class ConsoleBanner(Operator): - '''Print a message when the terminal initializes''' + """Print a message when the terminal initializes""" bl_idname = "console.banner" bl_label = "Console Banner" @@ -73,7 +77,7 @@ class ConsoleBanner(Operator): if not sc.language: sc.language = 'python' - module = __import__("console_" + sc.language) + module = _lang_module_get(sc) banner = getattr(module, "banner", None) if banner: @@ -85,7 +89,7 @@ class ConsoleBanner(Operator): class ConsoleLanguage(Operator): - '''Set the current language for this console''' + """Set the current language for this console""" bl_idname = "console.language" bl_label = "Console Language" From 24286ba5bd75b29ce454b85585272b7741c7d6c3 Mon Sep 17 00:00:00 2001 From: Nicholas Bishop Date: Sun, 15 Apr 2012 14:54:01 +0000 Subject: [PATCH 033/156] Fix bug [#30953] Changing brush preset irreversibly undoes things Remove REGISTER/UNDO flags from brush preset operator. --- source/blender/editors/sculpt_paint/paint_utils.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c index 6a31e96b51b..89a46272a8f 100644 --- a/source/blender/editors/sculpt_paint/paint_utils.c +++ b/source/blender/editors/sculpt_paint/paint_utils.c @@ -388,8 +388,6 @@ void BRUSH_OT_curve_preset(wmOperatorType *ot) ot->exec = brush_curve_preset_exec; ot->poll = brush_curve_preset_poll; - ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - RNA_def_enum(ot->srna, "shape", prop_shape_items, CURVE_PRESET_SMOOTH, "Mode", ""); } From 6520aa97a93e2438ddb739b2b990061ed18ab1d7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 15 Apr 2012 14:54:15 +0000 Subject: [PATCH 034/156] add 'idprop' module so we can document idprop.types.*, currently doc generator has no access to ID Property types. --- source/blender/python/bmesh/bmesh_py_api.c | 6 +- source/blender/python/generic/idprop_py_api.c | 79 ++++++++++++++++++- source/blender/python/generic/idprop_py_api.h | 2 + source/blender/python/intern/bpy_interface.c | 3 + source/blender/python/mathutils/mathutils.c | 28 +++---- .../python/mathutils/mathutils_Color.c | 2 +- .../python/mathutils/mathutils_Euler.c | 2 +- .../python/mathutils/mathutils_Matrix.c | 2 +- .../python/mathutils/mathutils_Quaternion.c | 2 +- .../python/mathutils/mathutils_Vector.c | 2 +- 10 files changed, 103 insertions(+), 25 deletions(-) diff --git a/source/blender/python/bmesh/bmesh_py_api.c b/source/blender/python/bmesh/bmesh_py_api.c index 77276df49f2..4d8d4e3bc23 100644 --- a/source/blender/python/bmesh/bmesh_py_api.c +++ b/source/blender/python/bmesh/bmesh_py_api.c @@ -129,7 +129,7 @@ PyObject *BPyInit_bmesh(void) { PyObject *mod; PyObject *submodule; - PyObject *sys_modules = PySys_GetObject("modules"); /* not pretty */ + PyObject *sys_modules = PyThreadState_GET()->interp->modules; BPy_BM_init_types(); BPy_BM_init_types_select(); @@ -140,11 +140,11 @@ PyObject *BPyInit_bmesh(void) /* bmesh.types */ PyModule_AddObject(mod, "types", (submodule = BPyInit_bmesh_types())); - PyDict_SetItemString(sys_modules, "bmesh.types", submodule); + PyDict_SetItemString(sys_modules, PyModule_GetName(submodule), submodule); Py_INCREF(submodule); PyModule_AddObject(mod, "utils", (submodule = BPyInit_bmesh_utils())); - PyDict_SetItemString(sys_modules, "bmesh.utils", submodule); + PyDict_SetItemString(sys_modules, PyModule_GetName(submodule), submodule); Py_INCREF(submodule); return mod; diff --git a/source/blender/python/generic/idprop_py_api.c b/source/blender/python/generic/idprop_py_api.c index cd2b1fb148e..9fd120b11aa 100644 --- a/source/blender/python/generic/idprop_py_api.c +++ b/source/blender/python/generic/idprop_py_api.c @@ -886,7 +886,7 @@ static PyMappingMethods BPy_IDGroup_Mapping = { PyTypeObject BPy_IDGroup_Type = { PyVarObject_HEAD_INIT(NULL, 0) /* For printing, in format "." */ - "Blender IDProperty", /* char *tp_name; */ + "IDPropertyGroup", /* char *tp_name; */ sizeof(BPy_IDProperty), /* int tp_basicsize; */ 0, /* tp_itemsize; For allocation */ @@ -1236,7 +1236,7 @@ static PyMappingMethods BPy_IDArray_AsMapping = { PyTypeObject BPy_IDArray_Type = { PyVarObject_HEAD_INIT(NULL, 0) /* For printing, in format "." */ - "Blender IDArray", /* char *tp_name; */ + "IDPropertyArray", /* char *tp_name; */ sizeof(BPy_IDArray), /* int tp_basicsize; */ 0, /* tp_itemsize; For allocation */ @@ -1350,7 +1350,7 @@ static PyObject *BPy_Group_Iter_Next(BPy_IDGroup_Iter *self) PyTypeObject BPy_IDGroup_Iter_Type = { PyVarObject_HEAD_INIT(NULL, 0) /* For printing, in format "." */ - "Blender IDGroup_Iter", /* char *tp_name; */ + "IDPropertyGroupIter", /* char *tp_name; */ sizeof(BPy_IDGroup_Iter), /* int tp_basicsize; */ 0, /* tp_itemsize; For allocation */ @@ -1410,3 +1410,76 @@ void IDProp_Init_Types(void) PyType_Ready(&BPy_IDGroup_Iter_Type); PyType_Ready(&BPy_IDArray_Type); } + +/*----------------------------MODULE INIT-------------------------*/ + +/* --- */ + +static struct PyModuleDef IDProp_types_module_def = { + PyModuleDef_HEAD_INIT, + "idprop.types", /* m_name */ + NULL, /* m_doc */ + 0, /* m_size */ + NULL, /* m_methods */ + NULL, /* m_reload */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL, /* m_free */ +}; + +static PyObject *BPyInit_idprop_types(void) +{ + PyObject *submodule; + + submodule = PyModule_Create(&IDProp_types_module_def); + +#define MODULE_TYPE_ADD(s, t) \ + PyModule_AddObject(s, t.tp_name, (PyObject *)&t); Py_INCREF((PyObject *)&t) + + /* bmesh_py_types.c */ + MODULE_TYPE_ADD(submodule, BPy_IDGroup_Type); + MODULE_TYPE_ADD(submodule, BPy_IDGroup_Iter_Type); + MODULE_TYPE_ADD(submodule, BPy_IDArray_Type); + +#undef MODULE_TYPE_ADD + + return submodule; +} + +/* --- */ + +static PyMethodDef IDProp_methods[] = { + {NULL, NULL, 0, NULL} +}; + + +PyDoc_STRVAR(IDProp_module_doc, +"This module provides access id property types (currently mainly for docs)." +); +static struct PyModuleDef IDProp_module_def = { + PyModuleDef_HEAD_INIT, + "idprop", /* m_name */ + IDProp_module_doc, /* m_doc */ + 0, /* m_size */ + IDProp_methods, /* m_methods */ + NULL, /* m_reload */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL, /* m_free */ +}; + +PyObject *BPyInit_idprop(void) +{ + PyObject *mod; + PyObject *submodule; + PyObject *sys_modules = PyThreadState_GET()->interp->modules; + + mod = PyModule_Create(&IDProp_module_def); + + /* bmesh.types */ + PyModule_AddObject(mod, "types", (submodule = BPyInit_idprop_types())); + PyDict_SetItemString(sys_modules, PyModule_GetName(submodule), submodule); + Py_INCREF(submodule); + + return mod; +} diff --git a/source/blender/python/generic/idprop_py_api.h b/source/blender/python/generic/idprop_py_api.h index 35b130d005e..99e291f69c0 100644 --- a/source/blender/python/generic/idprop_py_api.h +++ b/source/blender/python/generic/idprop_py_api.h @@ -64,6 +64,8 @@ const char *BPy_IDProperty_Map_ValidateAndCreate(PyObject *key, struct IDPropert void IDProp_Init_Types(void); +PyObject *BPyInit_idprop(void); + #define IDPROP_ITER_KEYS 0 #define IDPROP_ITER_ITEMS 1 diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index f68ef6838e8..f370c06194a 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -74,9 +74,11 @@ /* inittab initialization functions */ #include "../generic/bgl.h" #include "../generic/blf_py_api.h" +#include "../generic/idprop_py_api.h" #include "../bmesh/bmesh_py_api.h" #include "../mathutils/mathutils.h" + /* for internal use, when starting and ending python scripts */ /* in case a python script triggers another python call, stop bpy_context_clear from invalidating */ @@ -211,6 +213,7 @@ static struct _inittab bpy_internal_modules[] = { {(char *)"_cycles", CCL_initPython}, #endif {(char *)"gpu", GPU_initPython}, + {(char *)"idprop", BPyInit_idprop}, {NULL, NULL} }; diff --git a/source/blender/python/mathutils/mathutils.c b/source/blender/python/mathutils/mathutils.c index 5ae58973602..f78050a7639 100644 --- a/source/blender/python/mathutils/mathutils.c +++ b/source/blender/python/mathutils/mathutils.c @@ -433,8 +433,8 @@ static struct PyModuleDef M_Mathutils_module_def = { PyMODINIT_FUNC PyInit_mathutils(void) { + PyObject *mod; PyObject *submodule; - PyObject *item; PyObject *sys_modules = PyThreadState_GET()->interp->modules; if (PyType_Ready(&vector_Type) < 0) @@ -450,31 +450,31 @@ PyMODINIT_FUNC PyInit_mathutils(void) if (PyType_Ready(&color_Type) < 0) return NULL; - submodule = PyModule_Create(&M_Mathutils_module_def); + mod = PyModule_Create(&M_Mathutils_module_def); /* each type has its own new() function */ - PyModule_AddObject(submodule, "Vector", (PyObject *)&vector_Type); - PyModule_AddObject(submodule, "Matrix", (PyObject *)&matrix_Type); - PyModule_AddObject(submodule, "Euler", (PyObject *)&euler_Type); - PyModule_AddObject(submodule, "Quaternion", (PyObject *)&quaternion_Type); - PyModule_AddObject(submodule, "Color", (PyObject *)&color_Type); + PyModule_AddObject(mod, vector_Type.tp_name, (PyObject *)&vector_Type); + PyModule_AddObject(mod, matrix_Type.tp_name, (PyObject *)&matrix_Type); + PyModule_AddObject(mod, euler_Type.tp_name, (PyObject *)&euler_Type); + PyModule_AddObject(mod, quaternion_Type.tp_name, (PyObject *)&quaternion_Type); + PyModule_AddObject(mod, color_Type.tp_name, (PyObject *)&color_Type); /* submodule */ - PyModule_AddObject(submodule, "geometry", (item = PyInit_mathutils_geometry())); + PyModule_AddObject(mod, "geometry", (submodule = PyInit_mathutils_geometry())); /* XXX, python doesnt do imports with this usefully yet * 'from mathutils.geometry import PolyFill' * ...fails without this. */ - PyDict_SetItemString(sys_modules, "mathutils.geometry", item); - Py_INCREF(item); + PyDict_SetItemString(sys_modules, PyModule_GetName(submodule), submodule); + Py_INCREF(submodule); /* Noise submodule */ - PyModule_AddObject(submodule, "noise", (item = PyInit_mathutils_noise())); - PyDict_SetItemString(sys_modules, "mathutils.noise", item); - Py_INCREF(item); + PyModule_AddObject(mod, "noise", (submodule = PyInit_mathutils_noise())); + PyDict_SetItemString(sys_modules, PyModule_GetName(submodule), submodule); + Py_INCREF(submodule); mathutils_matrix_row_cb_index = Mathutils_RegisterCallback(&mathutils_matrix_row_cb); mathutils_matrix_col_cb_index = Mathutils_RegisterCallback(&mathutils_matrix_col_cb); mathutils_matrix_translation_cb_index = Mathutils_RegisterCallback(&mathutils_matrix_translation_cb); - return submodule; + return mod; } diff --git a/source/blender/python/mathutils/mathutils_Color.c b/source/blender/python/mathutils/mathutils_Color.c index 9b06214b8ec..fc8b2886f37 100644 --- a/source/blender/python/mathutils/mathutils_Color.c +++ b/source/blender/python/mathutils/mathutils_Color.c @@ -807,7 +807,7 @@ PyDoc_STRVAR(color_doc, ); PyTypeObject color_Type = { PyVarObject_HEAD_INIT(NULL, 0) - "mathutils.Color", //tp_name + "Color", //tp_name sizeof(ColorObject), //tp_basicsize 0, //tp_itemsize (destructor)BaseMathObject_dealloc, //tp_dealloc diff --git a/source/blender/python/mathutils/mathutils_Euler.c b/source/blender/python/mathutils/mathutils_Euler.c index 4e3b5f8d52e..a663bd71130 100644 --- a/source/blender/python/mathutils/mathutils_Euler.c +++ b/source/blender/python/mathutils/mathutils_Euler.c @@ -650,7 +650,7 @@ PyDoc_STRVAR(euler_doc, ); PyTypeObject euler_Type = { PyVarObject_HEAD_INIT(NULL, 0) - "mathutils.Euler", //tp_name + "Euler", //tp_name sizeof(EulerObject), //tp_basicsize 0, //tp_itemsize (destructor)BaseMathObject_dealloc, //tp_dealloc diff --git a/source/blender/python/mathutils/mathutils_Matrix.c b/source/blender/python/mathutils/mathutils_Matrix.c index bd37b645cbb..a48e7ed854d 100644 --- a/source/blender/python/mathutils/mathutils_Matrix.c +++ b/source/blender/python/mathutils/mathutils_Matrix.c @@ -2316,7 +2316,7 @@ PyDoc_STRVAR(matrix_doc, ); PyTypeObject matrix_Type = { PyVarObject_HEAD_INIT(NULL, 0) - "mathutils.Matrix", /*tp_name*/ + "Matrix", /*tp_name*/ sizeof(MatrixObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor)BaseMathObject_dealloc, /*tp_dealloc*/ diff --git a/source/blender/python/mathutils/mathutils_Quaternion.c b/source/blender/python/mathutils/mathutils_Quaternion.c index 2a1cef5a241..d1da4660f3b 100644 --- a/source/blender/python/mathutils/mathutils_Quaternion.c +++ b/source/blender/python/mathutils/mathutils_Quaternion.c @@ -1192,7 +1192,7 @@ PyDoc_STRVAR(quaternion_doc, ); PyTypeObject quaternion_Type = { PyVarObject_HEAD_INIT(NULL, 0) - "mathutils.Quaternion", //tp_name + "Quaternion", //tp_name sizeof(QuaternionObject), //tp_basicsize 0, //tp_itemsize (destructor)BaseMathObject_dealloc, //tp_dealloc diff --git a/source/blender/python/mathutils/mathutils_Vector.c b/source/blender/python/mathutils/mathutils_Vector.c index 17fa9cdd802..07bda4c2b91 100644 --- a/source/blender/python/mathutils/mathutils_Vector.c +++ b/source/blender/python/mathutils/mathutils_Vector.c @@ -2791,7 +2791,7 @@ PyDoc_STRVAR(vector_doc, PyTypeObject vector_Type = { PyVarObject_HEAD_INIT(NULL, 0) /* For printing, in format "." */ - "mathutils.Vector", /* char *tp_name; */ + "Vector", /* char *tp_name; */ sizeof(VectorObject), /* int tp_basicsize; */ 0, /* tp_itemsize; For allocation */ From 117f2826b929b0100b4233577a310ae5cc907cb0 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 15 Apr 2012 15:35:09 +0000 Subject: [PATCH 035/156] Fix #30955: cycles render issue with lights that have shadow casting disabled. --- intern/cycles/kernel/kernel_path.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h index 53ce374e150..ff12e85375c 100644 --- a/intern/cycles/kernel/kernel_path.h +++ b/intern/cycles/kernel/kernel_path.h @@ -147,14 +147,14 @@ __device_inline float path_state_terminate_probability(KernelGlobals *kg, PathSt __device_inline bool shadow_blocked(KernelGlobals *kg, PathState *state, Ray *ray, float3 *shadow) { + *shadow = make_float3(1.0f, 1.0f, 1.0f); + if(ray->t == 0.0f) return false; Intersection isect; bool result = scene_intersect(kg, ray, PATH_RAY_SHADOW_OPAQUE, &isect); - *shadow = make_float3(1.0f, 1.0f, 1.0f); - #ifdef __TRANSPARENT_SHADOWS__ if(result && kernel_data.integrator.transparent_shadows) { /* transparent shadows work in such a way to try to minimize overhead From 86508076d8190a374bcd9c17785eb0802dd4c1ca Mon Sep 17 00:00:00 2001 From: Francisco De La Cruz Date: Sun, 15 Apr 2012 18:34:13 +0000 Subject: [PATCH 036/156] Fix [#30943] Crash when edge mode enabled and use the bmesh vertex slide(shift-V) Also fixed snapping sensitivity. Gave BMOp a more consistent name "vertex_slide". --- source/blender/bmesh/intern/bmesh_opdefines.c | 8 +- .../bmesh/intern/bmesh_operators_private.h | 2 +- source/blender/bmesh/operators/bmo_slide.c | 17 +-- source/blender/editors/mesh/editmesh_slide.c | 122 +++++++++++------- 4 files changed, 89 insertions(+), 60 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c index 3352df71414..5896a18223a 100644 --- a/source/blender/bmesh/intern/bmesh_opdefines.c +++ b/source/blender/bmesh/intern/bmesh_opdefines.c @@ -1110,14 +1110,14 @@ static BMOpDefine bmo_inset_def = { * * Translates vertes along an edge */ -static BMOpDefine bmo_vert_slide_def = { -"vertslide", +static BMOpDefine bmo_vertex_slide_def = { + "vertex_slide", {{BMO_OP_SLOT_ELEMENT_BUF, "vert"}, {BMO_OP_SLOT_ELEMENT_BUF, "edge"}, {BMO_OP_SLOT_ELEMENT_BUF, "vertout"}, {BMO_OP_SLOT_FLT, "distance_t"}, {0} /* null-terminating sentinel */}, - bmo_vert_slide_exec, + bmo_vertex_slide_exec, BMO_OP_FLAG_UNTAN_MULTIRES }; @@ -1189,7 +1189,7 @@ BMOpDefine *opdefines[] = { &bmo_bridge_loops_def, &bmo_solidify_def, &bmo_inset_def, - &bmo_vert_slide_def, + &bmo_vertex_slide_def, }; int bmesh_total_ops = (sizeof(opdefines) / sizeof(void *)); diff --git a/source/blender/bmesh/intern/bmesh_operators_private.h b/source/blender/bmesh/intern/bmesh_operators_private.h index c4b4f01b5b5..62cabe88b05 100644 --- a/source/blender/bmesh/intern/bmesh_operators_private.h +++ b/source/blender/bmesh/intern/bmesh_operators_private.h @@ -43,7 +43,7 @@ void bmo_dissolve_faces_exec(BMesh *bmesh, BMOperator *op); void bmo_dissolve_verts_exec(BMesh *bmesh, BMOperator *op); void bmo_dissolve_limit_exec(BMesh *bmesh, BMOperator *op); void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op); -void bmo_vert_slide_exec(BMesh *bm, BMOperator *op); +void bmo_vertex_slide_exec(BMesh *bm, BMOperator *op); void bmo_connectverts_exec(BMesh *bm, BMOperator *op); void bmo_extrude_vert_indiv_exec(BMesh *bm, BMOperator *op); void bmo_mesh_to_bmesh_exec(BMesh *bm, BMOperator *op); diff --git a/source/blender/bmesh/operators/bmo_slide.c b/source/blender/bmesh/operators/bmo_slide.c index 9414c7308b6..7b7b0638a3f 100644 --- a/source/blender/bmesh/operators/bmo_slide.c +++ b/source/blender/bmesh/operators/bmo_slide.c @@ -40,7 +40,7 @@ * Slides a vertex along a connected edge * */ -void bmo_vert_slide_exec(BMesh *bm, BMOperator *op) +void bmo_vertex_slide_exec(BMesh *bm, BMOperator *op) { BMOIter oiter; BMIter iter; @@ -60,8 +60,10 @@ void bmo_vert_slide_exec(BMesh *bm, BMOperator *op) if (!vertex) { - if (G.debug & G_DEBUG) - fprintf(stderr, "vertslide: No vertex selected..."); + if (G.debug & G_DEBUG) { + fprintf(stderr, "vertex_slide: No vertex selected..."); + } + BMO_error_raise(bm, op, BMERR_INVALID_SELECTION, "Vertex Slide Error: Invalid selection."); return; } @@ -78,8 +80,10 @@ void bmo_vert_slide_exec(BMesh *bm, BMOperator *op) /* Only allow sliding if an edge is selected */ if (selected_edges == 0) { - if (G.debug & G_DEBUG) - fprintf(stderr, "vertslide: select a single edge\n"); + if (G.debug & G_DEBUG) { + fprintf(stderr, "vertex_slide: select a single edge\n"); + } + BMO_error_raise(bm, op, BMERR_INVALID_SELECTION, "Vertex Slide Error: Invalid selection."); return; } @@ -102,9 +106,6 @@ void bmo_vert_slide_exec(BMesh *bm, BMOperator *op) interp_v3_v3v3(vertex->co, vertex->co, other->co, distance_t); } - /* Deselect the edges */ - BMO_slot_buffer_hflag_disable(bm, op, "edge", BM_ALL, BM_ELEM_SELECT, TRUE); - /* Return the new edge. The same previously marked with VERT_MARK */ BMO_slot_buffer_from_enabled_flag(bm, op, "vertout", BM_VERT, VERT_MARK); return; diff --git a/source/blender/editors/mesh/editmesh_slide.c b/source/blender/editors/mesh/editmesh_slide.c index 94c546f0f1b..266117ec9a5 100644 --- a/source/blender/editors/mesh/editmesh_slide.c +++ b/source/blender/editors/mesh/editmesh_slide.c @@ -55,7 +55,7 @@ #include "mesh_intern.h" -#define VTX_SLIDE_SNAP_THRSH 0.15 +#define VTX_SLIDE_SNAP_THRSH 15 /* Cusom VertexSlide Operator data */ typedef struct VertexSlideOp { @@ -99,9 +99,9 @@ typedef struct VertexSlideOp { } VertexSlideOp; static void vtx_slide_draw(const bContext *C, ARegion *ar, void *arg); -static int edbm_vert_slide_exec(bContext *C, wmOperator *op); +static int edbm_vertex_slide_exec(bContext *C, wmOperator *op); static void vtx_slide_exit(const bContext *C, wmOperator *op); -static void vtx_slide_set_frame(VertexSlideOp *vso); +static int vtx_slide_set_frame(VertexSlideOp *vso); static int vtx_slide_init(bContext *C, wmOperator *op) { @@ -158,9 +158,6 @@ static int vtx_slide_init(bContext *C, wmOperator *op) vso->snap_threshold = 0.2f; - /* Add handler for the vertex sliding */ - WM_event_add_modal_handler(C, op); - /* Notify the viewport */ view3d_operator_needs_opengl(C); @@ -178,7 +175,14 @@ static int vtx_slide_init(bContext *C, wmOperator *op) vso->obj = obedit; /* Init frame */ - vtx_slide_set_frame(vso); + if (!vtx_slide_set_frame(vso)) { + BKE_report(op->reports, RPT_ERROR_INVALID_INPUT, "Vertex Slide: Can't find starting vertex!"); + vtx_slide_exit(C, op); + return FALSE; + } + + /* Add handler for the vertex sliding */ + WM_event_add_modal_handler(C, op); /* Tag for redraw */ ED_region_tag_redraw(vso->active_region); @@ -196,7 +200,7 @@ static void vtx_slide_confirm(bContext *C, wmOperator *op) BM_edge_select_set(bm, vso->sel_edge, TRUE); /* Invoke operator */ - edbm_vert_slide_exec(C, op); + edbm_vertex_slide_exec(C, op); if (vso->snap_n_merge) { float other_d; @@ -260,6 +264,7 @@ static void vtx_slide_exit(const bContext *C, wmOperator *op) MEM_freeN(vso); vso = NULL; + op->customdata = NULL; /* Clear the header */ ED_area_headerprint(CTX_wm_area(C), NULL); @@ -273,7 +278,9 @@ static void vtx_slide_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) if (vso && vso->sel_edge) { /* Get 3d view */ View3D *view3d = CTX_wm_view3d(C); - const int outline_w = UI_GetThemeValuef(TH_OUTLINE_WIDTH) + 1; + const float outline_w = UI_GetThemeValuef(TH_OUTLINE_WIDTH) + 0.8f; + const float pt_size = UI_GetThemeValuef(TH_FACEDOT_SIZE) + 1.5; + int i = 0; if (view3d && view3d->zbuf) @@ -286,17 +293,7 @@ static void vtx_slide_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - /* Draw selected edge - * Add color offset and reduce alpha */ - UI_ThemeColorShadeAlpha(TH_EDGE_SELECT, 50, -50); - - glLineWidth(outline_w); - - glBegin(GL_LINES); - bglVertex3fv(vso->sel_edge->v1->co); - bglVertex3fv(vso->sel_edge->v2->co); - glEnd(); + if (vso->slide_mode && vso->disk_edges > 0) { /* Draw intermediate edge frame */ @@ -310,10 +307,21 @@ static void vtx_slide_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) } } + /* Draw selected edge + * Add color offset and reduce alpha */ + UI_ThemeColorShadeAlpha(TH_EDGE_SELECT, 40, -50); + + glLineWidth(outline_w); + + glBegin(GL_LINES); + bglVertex3fv(vso->sel_edge->v1->co); + bglVertex3fv(vso->sel_edge->v2->co); + glEnd(); + if (vso->slide_mode) { /* Draw interpolated vertex */ - int pt_size = UI_GetThemeValuef(TH_FACEDOT_SIZE) + 2; - UI_ThemeColorShadeAlpha(TH_FACE_DOT, -90, -50); + + UI_ThemeColorShadeAlpha(TH_FACE_DOT, -80, -50); glPointSize(pt_size); @@ -377,17 +385,12 @@ static void vtx_slide_find_edge(VertexSlideOp *vso, wmEvent *event) if (nst_edge) { /* Find a connected edge */ if (BM_vert_in_edge(nst_edge, vso->start_vtx)) { - float edge_len; /* Save mouse coords */ copy_v2_v2_int(vso->m_co, event->mval); /* Set edge */ vso->sel_edge = nst_edge; - - /* Set snap threshold to be proportional to edge length */ - edge_len = len_v3v3(nst_edge->v1->co, nst_edge->v2->co); - vso->snap_threshold = edge_len * VTX_SLIDE_SNAP_THRSH; } } } @@ -403,6 +406,7 @@ static void vtx_slide_update(VertexSlideOp *vso, wmEvent *event) if (edge) { float edge_other_proj[3]; float start_vtx_proj[3]; + float edge_len; BMVert *other; float interp[3]; @@ -426,6 +430,16 @@ static void vtx_slide_update(VertexSlideOp *vso, wmEvent *event) t_val = line_point_factor_v2(closest_2d, start_vtx_proj, edge_other_proj); + /* Set snap threshold to be proportional to edge length */ + edge_len = len_v3v3(start_vtx_proj, edge_other_proj); + + if (edge_len <= 0.0f) + edge_len = VTX_SLIDE_SNAP_THRSH; + + edge_len = (len_v3v3(edge->v1->co, edge->v2->co) * VTX_SLIDE_SNAP_THRSH) / edge_len; + + vso->snap_threshold = edge_len; + /* Snap to mid */ if (vso->snap_to_mid) { t_val = 0.5f; @@ -463,11 +477,12 @@ static void vtx_slide_update(VertexSlideOp *vso, wmEvent *event) } /* Sets the outline frame */ -static void vtx_slide_set_frame(VertexSlideOp *vso) +static int vtx_slide_set_frame(VertexSlideOp *vso) { BMEdge *edge; float (*vtx_frame)[3] = NULL; BMEdge** edge_frame = NULL; + BMVert *curr_vert = NULL; BLI_array_declare(vtx_frame); BLI_array_declare(edge_frame); BMIter iter; @@ -491,12 +506,15 @@ static void vtx_slide_set_frame(VertexSlideOp *vso) /* Iterate over edges of vertex and copy them */ BM_ITER_INDEX(edge, &iter, bm, BM_EDGES_OF_VERT, sel_vtx, idx) { - BLI_array_growone(vtx_frame); + curr_vert = BM_edge_other_vert(edge, sel_vtx); + if (curr_vert) { + BLI_array_growone(vtx_frame); - copy_v3_v3(vtx_frame[idx], BM_edge_other_vert(edge, sel_vtx)->co); + copy_v3_v3(vtx_frame[idx], curr_vert->co); - BLI_array_append(edge_frame, edge); - vso->disk_edges++; + BLI_array_append(edge_frame, edge); + vso->disk_edges++; + } } vso->edge_frame = edge_frame; @@ -504,11 +522,17 @@ static void vtx_slide_set_frame(VertexSlideOp *vso) /* Set the interp at starting vtx */ copy_v3_v3(vso->interp, sel_vtx->co); + + return vso->disk_edges > 0; } -static int edbm_vert_slide_modal(bContext *C, wmOperator *op, wmEvent *event) +static int edbm_vertex_slide_modal(bContext *C, wmOperator *op, wmEvent *event) { VertexSlideOp *vso = op->customdata; + char buff[128]; + + if (!vso) + return OPERATOR_CANCELLED; /* Notify the viewport */ view3d_operator_needs_opengl(C); @@ -588,13 +612,14 @@ static int edbm_vert_slide_modal(bContext *C, wmOperator *op, wmEvent *event) } case MOUSEMOVE: { + sprintf(buff, "Vertex Slide: %f", vso->distance); if (!vso->slide_mode) { vtx_slide_find_edge(vso, event); } else { vtx_slide_update(vso, event); } - + ED_area_headerprint(CTX_wm_area(C), buff); ED_region_tag_redraw(vso->active_region); break; } @@ -603,7 +628,7 @@ static int edbm_vert_slide_modal(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_RUNNING_MODAL; } -static int edbm_vert_slide_cancel(bContext *C, wmOperator *op) +static int edbm_vertex_slide_cancel(bContext *C, wmOperator *op) { /* Exit the modal */ vtx_slide_exit(C, op); @@ -611,7 +636,7 @@ static int edbm_vert_slide_cancel(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } -static int edbm_vert_slide_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) +static int edbm_vertex_slide_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) { /* Initialize the operator */ if (vtx_slide_init(C, op)) @@ -621,20 +646,20 @@ static int edbm_vert_slide_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(e } /* Vertex Slide */ -static int edbm_vert_slide_exec(bContext *C, wmOperator *op) +static int edbm_vertex_slide_exec(bContext *C, wmOperator *op) { Object *obedit = CTX_data_edit_object(C); BMEditMesh *em = BMEdit_FromObject(obedit); BMesh *bm = em->bm; BMVert *start_vert; BMOperator bmop; - BMEditSelection *ese = em->bm->selected.last; + BMEditSelection *ese = (BMEditSelection *)em->bm->selected.last; float distance_t = 0.0f; /* Invoked modally? */ - if (op->type->modal == edbm_vert_slide_modal && op->customdata) { - VertexSlideOp *vso = op->customdata; + if (op->type->modal == edbm_vertex_slide_modal && op->customdata) { + VertexSlideOp *vso = (VertexSlideOp *)op->customdata; if (bm->totedgesel > 1) { /* Reset selections */ @@ -644,7 +669,7 @@ static int edbm_vert_slide_exec(bContext *C, wmOperator *op) EDBM_editselection_store(em, &vso->sel_edge->head); EDBM_editselection_store(em, &vso->start_vtx->head); - ese = em->bm->selected.last; + ese = (BMEditSelection *)em->bm->selected.last; } distance_t = vso->distance; RNA_float_set(op->ptr, "distance_t", distance_t); @@ -663,13 +688,16 @@ static int edbm_vert_slide_exec(bContext *C, wmOperator *op) start_vert = (BMVert *)ese->ele; /* Prepare operator */ - if (!EDBM_op_init(em, &bmop, op, "vertslide vert=%e edge=%hev distance_t=%f", start_vert, BM_ELEM_SELECT, distance_t)) { + if (!EDBM_op_init(em, &bmop, op, "vertex_slide vert=%e edge=%hev distance_t=%f", start_vert, BM_ELEM_SELECT, distance_t)) { return OPERATOR_CANCELLED; } /* Execute operator */ BMO_op_exec(bm, &bmop); - /* Select the edge */ + /* Deselect the input edges */ + BMO_slot_buffer_hflag_disable(bm, &bmop, "edge", BM_ALL, BM_ELEM_SELECT, TRUE); + + /* Select the output vert */ BMO_slot_buffer_hflag_enable(bm, &bmop, "vertout", BM_ALL, BM_ELEM_SELECT, TRUE); /* Flush the select buffers */ @@ -695,12 +723,12 @@ void MESH_OT_vert_slide(wmOperatorType *ot) ot->description = "Vertex slide"; /* api callback */ - ot->invoke = edbm_vert_slide_invoke; - ot->modal = edbm_vert_slide_modal; - ot->cancel = edbm_vert_slide_cancel; + ot->invoke = edbm_vertex_slide_invoke; + ot->modal = edbm_vertex_slide_modal; + ot->cancel = edbm_vertex_slide_cancel; ot->poll = ED_operator_editmesh_region_view3d; - /* ot->exec = edbm_vert_slide_exec; + /* ot->exec = edbm_vertex_slide_exec; * ot->poll = ED_operator_editmesh; */ /* flags */ From 5496e87eee5951345ecb2d3f503342246fd8581e Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sun, 15 Apr 2012 21:02:08 +0000 Subject: [PATCH 037/156] Fluid Simulation: * Replaced the hard coded viscosity presets with Python ones. * Added version check, so older files load fine. Loading new files into 2.62 also works fine. --- release/scripts/presets/fluid/honey.py | 3 +++ release/scripts/presets/fluid/oil.py | 3 +++ release/scripts/presets/fluid/water.py | 3 +++ .../scripts/startup/bl_operators/presets.py | 17 ++++++++++++ .../startup/bl_ui/properties_physics_fluid.py | 26 +++++++++++-------- source/blender/blenkernel/BKE_blender.h | 2 +- source/blender/blenloader/intern/readfile.c | 24 +++++++++++++++++ .../blender/editors/physics/physics_fluid.c | 14 +--------- source/blender/makesdna/DNA_object_fluidsim.h | 3 ++- source/blender/makesrna/intern/rna_fluidsim.c | 13 ---------- .../modifiers/intern/MOD_fluidsim_util.c | 1 - 11 files changed, 69 insertions(+), 40 deletions(-) create mode 100644 release/scripts/presets/fluid/honey.py create mode 100644 release/scripts/presets/fluid/oil.py create mode 100644 release/scripts/presets/fluid/water.py diff --git a/release/scripts/presets/fluid/honey.py b/release/scripts/presets/fluid/honey.py new file mode 100644 index 00000000000..fbeb7f2b286 --- /dev/null +++ b/release/scripts/presets/fluid/honey.py @@ -0,0 +1,3 @@ +import bpy +bpy.context.fluid.settings.viscosity_base = 2.0 +bpy.context.fluid.settings.viscosity_exponent = 3 diff --git a/release/scripts/presets/fluid/oil.py b/release/scripts/presets/fluid/oil.py new file mode 100644 index 00000000000..3d73de9303a --- /dev/null +++ b/release/scripts/presets/fluid/oil.py @@ -0,0 +1,3 @@ +import bpy +bpy.context.fluid.settings.viscosity_base = 5.0 +bpy.context.fluid.settings.viscosity_exponent = 5 diff --git a/release/scripts/presets/fluid/water.py b/release/scripts/presets/fluid/water.py new file mode 100644 index 00000000000..0b68ad28c98 --- /dev/null +++ b/release/scripts/presets/fluid/water.py @@ -0,0 +1,3 @@ +import bpy +bpy.context.fluid.settings.viscosity_base = 1.0 +bpy.context.fluid.settings.viscosity_exponent = 6 diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py index da6ef7483f2..2c92fccf3b4 100644 --- a/release/scripts/startup/bl_operators/presets.py +++ b/release/scripts/startup/bl_operators/presets.py @@ -294,6 +294,23 @@ class AddPresetCloth(AddPresetBase, Operator): preset_subdir = "cloth" +class AddPresetFluid(AddPresetBase, Operator): + '''Add a Fluid Preset''' + bl_idname = "fluid.preset_add" + bl_label = "Add Fluid Preset" + preset_menu = "FLUID_MT_presets" + + preset_defines = [ + "fluid = bpy.context.fluid" + ] + + preset_values = [ + "fluid.settings.viscosity_base", + "fluid.settings.viscosity_exponent", + ] + + preset_subdir = "fluid" + class AddPresetSunSky(AddPresetBase, Operator): '''Add a Sky & Atmosphere Preset''' diff --git a/release/scripts/startup/bl_ui/properties_physics_fluid.py b/release/scripts/startup/bl_ui/properties_physics_fluid.py index d334671292a..23b7a12753f 100644 --- a/release/scripts/startup/bl_ui/properties_physics_fluid.py +++ b/release/scripts/startup/bl_ui/properties_physics_fluid.py @@ -18,7 +18,13 @@ # import bpy -from bpy.types import Panel +from bpy.types import Panel, Menu + +class FLUID_MT_presets(Menu): + bl_label = "Fluid Presets" + preset_subdir = "fluid" + preset_operator = "script.execute_preset" + draw = Menu.draw_preset class PhysicButtonsPanel(): @@ -222,16 +228,14 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel, Panel): col = split.column() col.label(text="Viscosity Presets:") - sub = col.column(align=True) - sub.prop(fluid, "viscosity_preset", text="") - - if fluid.viscosity_preset == 'MANUAL': - sub.prop(fluid, "viscosity_base", text="Base") - sub.prop(fluid, "viscosity_exponent", text="Exponent", slider=True) - else: - # just for padding to prevent jumping around - sub.separator() - sub.separator() + sub = col.row(align=True) + sub.menu("FLUID_MT_presets", text=bpy.types.FLUID_MT_presets.bl_label) + sub.operator("fluid.preset_add", text="", icon='ZOOMIN') + sub.operator("fluid.preset_add", text="", icon='ZOOMOUT').remove_active = True + + subsub = col.column(align=True) + subsub.prop(fluid, "viscosity_base", text="Base") + subsub.prop(fluid, "viscosity_exponent", text="Exponent", slider=True) col.label(text="Optimization:") col.prop(fluid, "grid_levels", slider=True) diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index ffabbcf32f0..296461e61c8 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -42,7 +42,7 @@ extern "C" { * and keep comment above the defines. * Use STRINGIFY() rather than defining with quotes */ #define BLENDER_VERSION 262 -#define BLENDER_SUBVERSION 3 +#define BLENDER_SUBVERSION 4 #define BLENDER_MINVERSION 250 #define BLENDER_MINSUBVERSION 0 diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 55f0ccebf95..6a40e1ebf43 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -13323,6 +13323,30 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } + if (main->versionfile < 262 || (main->versionfile == 262 && main->subversionfile < 4)) + { + /* Read Viscosity presets from older files */ + Object *ob; + + for (ob = main->object.first; ob; ob = ob->id.next) { + ModifierData *md; + for (md = ob->modifiers.first; md; md = md->next) { + if (md->type == eModifierType_Fluidsim) { + FluidsimModifierData *fmd = (FluidsimModifierData *)md; + if(fmd->fss->viscosityMode == 3) { + fmd->fss->viscosityValue = 5.0; + fmd->fss->viscosityExponent = 5; + } + else if(fmd->fss->viscosityMode == 4) { + fmd->fss->viscosityValue = 2.0; + fmd->fss->viscosityExponent = 3; + } + } + } + } + } + + { /* Default for old files is to save particle rotations to pointcache */ diff --git a/source/blender/editors/physics/physics_fluid.c b/source/blender/editors/physics/physics_fluid.c index 6a074a542c3..20fa4c5753f 100644 --- a/source/blender/editors/physics/physics_fluid.c +++ b/source/blender/editors/physics/physics_fluid.c @@ -98,19 +98,7 @@ static float get_fluid_viscosity(FluidsimSettings *settings) { - switch (settings->viscosityMode) { - case 0: /* unused */ - return -1.0; - case 2: /* water */ - return 1.0e-6; - case 3: /* some (thick) oil */ - return 5.0e-5; - case 4: /* ca. honey */ - return 2.0e-3; - case 1: /* manual */ - default: - return (1.0f/powf(10.0f, settings->viscosityExponent)) * settings->viscosityValue; - } + return (1.0f/powf(10.0f, settings->viscosityExponent)) * settings->viscosityValue; } static float get_fluid_rate(FluidsimSettings *settings) diff --git a/source/blender/makesdna/DNA_object_fluidsim.h b/source/blender/makesdna/DNA_object_fluidsim.h index 751d420daa7..a55b7b17a22 100644 --- a/source/blender/makesdna/DNA_object_fluidsim.h +++ b/source/blender/makesdna/DNA_object_fluidsim.h @@ -35,6 +35,7 @@ #define __DNA_OBJECT_FLUIDSIM_H__ #include "DNA_ID.h" +#include "DNA_defs.h" #ifdef __cplusplus extern "C" { @@ -66,7 +67,7 @@ typedef struct FluidsimSettings { /* fluid properties */ float viscosityValue; - short viscosityMode; + short viscosityMode DNA_DEPRECATED; short viscosityExponent; /* gravity strength */ float grav[3]; diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c index b5770650cb8..a4aac6f345c 100644 --- a/source/blender/makesrna/intern/rna_fluidsim.c +++ b/source/blender/makesrna/intern/rna_fluidsim.c @@ -269,13 +269,6 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna) {OB_FSDOM_FINAL, "FINAL", 0, "Final", "Display final quality results"}, {0, NULL, 0, NULL, NULL}}; - static EnumPropertyItem viscosity_items[] = { - {1, "MANUAL", 0, "Manual", "Manual viscosity settings"}, - {2, "WATER", 0, "Water", "Viscosity of 1.0 * 10^-6"}, - {3, "OIL", 0, "Oil", "Viscosity of 5.0 * 10^-5"}, - {4, "HONEY", 0, "Honey", "Viscosity of 2.0 * 10^-3"}, - {0, NULL, 0, NULL, NULL}}; - srna = RNA_def_struct(brna, "DomainFluidSettings", "FluidSettings"); RNA_def_struct_sdna(srna, "FluidsimSettings"); RNA_def_struct_ui_text(srna, "Domain Fluid Simulation Settings", @@ -360,12 +353,6 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "animRate"); RNA_def_property_range(prop, 0.0, 100.0); RNA_def_property_ui_text(prop, "Simulation Speed", "Fluid motion rate (0 = stationary, 1 = normal speed)"); - - prop = RNA_def_property(srna, "viscosity_preset", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "viscosityMode"); - RNA_def_property_enum_items(prop, viscosity_items); - RNA_def_property_ui_text(prop, "Viscosity Preset", - "Set viscosity of the fluid to a preset value, or use manual input"); prop = RNA_def_property(srna, "viscosity_base", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "viscosityValue"); diff --git a/source/blender/modifiers/intern/MOD_fluidsim_util.c b/source/blender/modifiers/intern/MOD_fluidsim_util.c index 9cd656c3621..fe0cb2e650f 100644 --- a/source/blender/modifiers/intern/MOD_fluidsim_util.c +++ b/source/blender/modifiers/intern/MOD_fluidsim_util.c @@ -85,7 +85,6 @@ void fluidsim_init(FluidsimModifierData *fluidmd) fss->guiDisplayMode = 2; // preview fss->renderDisplayMode = 3; // render - fss->viscosityMode = 2; // default to water fss->viscosityValue = 1.0; fss->viscosityExponent = 6; From 583957470cae92c0cbc99155db1f68a85cbf3aba Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sun, 15 Apr 2012 21:10:14 +0000 Subject: [PATCH 038/156] UI: * Remove un-descriptive Tooltip from Cloth preset menu. --- release/scripts/startup/bl_ui/properties_physics_cloth.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/release/scripts/startup/bl_ui/properties_physics_cloth.py b/release/scripts/startup/bl_ui/properties_physics_cloth.py index 14c7b381ee7..e313112d61a 100644 --- a/release/scripts/startup/bl_ui/properties_physics_cloth.py +++ b/release/scripts/startup/bl_ui/properties_physics_cloth.py @@ -31,9 +31,6 @@ def cloth_panel_enabled(md): class CLOTH_MT_presets(Menu): - ''' - Creates the menu items by scanning scripts/templates - ''' bl_label = "Cloth Presets" preset_subdir = "cloth" preset_operator = "script.execute_preset" From f120433fa3d0520218224c3932d56cd7c996d07b Mon Sep 17 00:00:00 2001 From: Nicholas Bishop Date: Mon, 16 Apr 2012 01:18:02 +0000 Subject: [PATCH 039/156] Fix for remesh modifier crash mentioned in comments of bug [#30966] Reading in triangles now skips any NaN coordinates. --- intern/dualcon/intern/dualcon_c_api.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/intern/dualcon/intern/dualcon_c_api.cpp b/intern/dualcon/intern/dualcon_c_api.cpp index d710ada48bc..6f04922bb94 100644 --- a/intern/dualcon/intern/dualcon_c_api.cpp +++ b/intern/dualcon/intern/dualcon_c_api.cpp @@ -113,6 +113,15 @@ public: curface++; } + /* remove triangle if it contains invalid coords */ + for(int i = 0; i < 3; i++) { + const float *co = t->vt[i]; + if(isnan(co[0]) || isnan(co[1]) || isnan(co[2])) { + delete t; + return getNextTriangle(); + } + } + return t; } From 034d5194ab9a6d407e91d0875b72d4dd04fa9089 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 01:55:25 +0000 Subject: [PATCH 040/156] fix [#30967] Straighten X/Y in the UV/Image Editor bug patch by Bastien Montagne, checked this works the same as 2.62. --- source/blender/editors/uvedit/uvedit_ops.c | 23 +++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 0556e7fecc0..7a142f3a46e 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -1481,12 +1481,20 @@ static void weld_align_uv(bContext *C, int tool) /* we know the returns from these must be valid */ float *uv_start = uv_sel_co_from_eve(scene, ima, em, eve_line[0]); float *uv_end = uv_sel_co_from_eve(scene, ima, em, eve_line[BLI_array_count(eve_line) - 1]); + /* For t & u modes */ + float a = 0.0f; if (tool == 't') { - uv_start[0] = uv_end[0] = (uv_start[0] + uv_end[0]) * 0.5f; + if (uv_start[1] == uv_end[1]) + tool = 's'; + else + a = (uv_end[0] - uv_start[0]) / (uv_end[1] - uv_start[1]); } else if (tool == 'u') { - uv_start[1] = uv_end[1] = (uv_start[1] + uv_end[1]) * 0.5f; + if (uv_start[0] == uv_end[0]) + tool = 's'; + else + a = (uv_end[1] - uv_start[1]) / (uv_end[0] - uv_start[0]); } /* go over all verts except for endpoints */ @@ -1499,7 +1507,16 @@ static void weld_align_uv(bContext *C, int tool) if (uvedit_uv_selected(em, scene, l)) { MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); - closest_to_line_segment_v2(luv->uv, luv->uv, uv_start, uv_end); + /* Projection of point (x, y) over line (x1, y1, x2, y2) along X axis: + * new_y = (y2 - y1) / (x2 - x1) * (x - x1) + y1 + * Maybe this should be a BLI func? Or is it already existing? + * Could use interp_v2_v2v2, but not sure it’s worth it here...*/ + if (tool == 't') + luv->uv[0] = a * (luv->uv[1] - uv_start[1]) + uv_start[0]; + else if (tool == 'u') + luv->uv[1] = a * (luv->uv[0] - uv_start[0]) + uv_start[1]; + else + closest_to_line_segment_v2(luv->uv, luv->uv, uv_start, uv_end); } } } From d9fa08e73d71732f3170d3817e5ab51f72c62c82 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 02:28:18 +0000 Subject: [PATCH 041/156] rename wm.blenderplayer_start label from 'Start' to 'Start Game In Player', also made it check if the player is found before running. --- release/scripts/startup/bl_operators/wm.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py index 78f14137ad1..926ad9b94f7 100644 --- a/release/scripts/startup/bl_operators/wm.py +++ b/release/scripts/startup/bl_operators/wm.py @@ -1195,7 +1195,7 @@ class WM_OT_copy_prev_settings(Operator): class WM_OT_blenderplayer_start(Operator): '''Launch the blender-player with the current blend-file''' bl_idname = "wm.blenderplayer_start" - bl_label = "Start" + bl_label = "Start Game In Player" def execute(self, context): import os @@ -1212,6 +1212,10 @@ class WM_OT_blenderplayer_start(Operator): if sys.platform == "darwin": player_path = os.path.join(blender_bin_dir, "../../../blenderplayer.app/Contents/MacOS/blenderplayer") + if not os.path.exists(player_path): + self.report({'ERROR'}, "Player path: %r not found" % player_path) + return {'CANCELLED'} + filepath = os.path.join(bpy.app.tempdir, "game.blend") bpy.ops.wm.save_as_mainfile(filepath=filepath, check_existing=False, copy=True) subprocess.call([player_path, filepath]) From d89db25c53b4b00038061dc15fede87dd36276a0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 04:17:33 +0000 Subject: [PATCH 042/156] bmesh api todo: emDM_getTessFaceDataArray now returns UV's and Colors from editmode loops. --- .../blender/blenkernel/intern/cdderivedmesh.c | 7 ---- .../blenkernel/intern/editderivedmesh.c | 38 +++++++++++++------ 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 7a39cf1b916..ed561a58cce 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -1989,13 +1989,6 @@ static DerivedMesh *cddm_copy_ex(DerivedMesh *source, int faces_from_tessfaces) cddm->mloop = CustomData_get_layer(&dm->loopData, CD_MLOOP); cddm->mpoly = CustomData_get_layer(&dm->polyData, CD_MPOLY); - /* any callers that need tessface data can calculate it - campbell */ -#if 0 - /* BMESH_TODO: Find out why this is necessary (or else find a way to remove - * it). If it is necessary, add a comment explaining why. */ - CDDM_recalc_tessellation((DerivedMesh *)cddm); -#endif - return dm; } diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index abc74983d2b..c53b11aa60c 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -1492,35 +1492,49 @@ static void *emDM_getTessFaceDataArray(DerivedMesh *dm, int type) { EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; BMesh *bm= bmdm->tc->bm; - BMFace *efa; - char *data, *bmdata; void *datalayer; - int index /*, offset*/ /*UNUSED */, size, i; datalayer = DM_get_tessface_data_layer(dm, type); if (datalayer) return datalayer; - /* layers are store per face for editmesh, we convert to a tbmporary + /* layers are store per face for editmesh, we convert to a temporary * data layer array in the derivedmesh when these are requested */ if (type == CD_MTFACE || type == CD_MCOL) { - index = CustomData_get_layer_index(&bm->pdata, type); + const int type_from = (type == CD_MTFACE) ? CD_MTEXPOLY : CD_MLOOPCOL; + int index; + char *data, *bmdata; + index = CustomData_get_layer_index(&bm->pdata, type_from); if (index != -1) { /* offset = bm->pdata.layers[index].offset; */ /* UNUSED */ - size = CustomData_sizeof(type); + const int size = CustomData_sizeof(type); + int i, j; DM_add_tessface_layer(dm, type, CD_CALLOC, NULL); index = CustomData_get_layer_index(&dm->faceData, type); dm->faceData.layers[index].flag |= CD_FLAG_TEMPORARY; data = datalayer = DM_get_tessface_data_layer(dm, type); - for (i=0; itc->tottri; i++, data+=size) { - efa = bmdm->tc->looptris[i][0]->f; - /* BMESH_TODO: need to still add tface data, - * derived from the loops.*/ - bmdata = CustomData_bmesh_get(&bm->pdata, efa->head.data, type); - memcpy(data, bmdata, size); + + if (type == CD_MTFACE) { + for (i = 0; i < bmdm->tc->tottri; i++, data += size) { + BMFace *efa = bmdm->tc->looptris[i][0]->f; + bmdata = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY); + ME_MTEXFACE_CPY(((MTFace *)data), ((MTexPoly *)bmdata)); + for (j = 0; j < 3; j++) { + bmdata = CustomData_bmesh_get(&bm->ldata, bmdm->tc->looptris[i][j]->head.data, CD_MLOOPUV); + copy_v2_v2(((MTFace *)data)->uv[j], ((MLoopUV *)bmdata)->uv); + } + } + } + else { + for (i = 0; i < bmdm->tc->tottri; i++, data += size) { + for (j = 0; j < 3; j++) { + bmdata = CustomData_bmesh_get(&bm->ldata, bmdm->tc->looptris[i][j]->head.data, CD_MLOOPCOL); + MESH_MLOOPCOL_TO_MCOL(((MLoopCol *)bmdata), (((MCol *)data) + j)); + } + } } } } From 79693e45431bb7ea3ba980a83081b0c98cd422de Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 05:03:04 +0000 Subject: [PATCH 043/156] code cleanup: avoid confusion with incorrectly named argument to BLI_edgefill(), was 'mat_nr', now 'do_quad_tri_speedup' --- source/blender/blenkernel/intern/displist.c | 2 +- .../blenkernel/intern/editderivedmesh.c | 2 +- source/blender/blenkernel/intern/mesh.c | 2 +- source/blender/blenlib/BLI_scanfill.h | 2 +- source/blender/blenlib/intern/scanfill.c | 30 ++++++++----------- .../blender/bmesh/operators/bmo_triangulate.c | 2 +- source/blender/editors/mesh/editmesh_knife.c | 2 +- .../editors/uvedit/uvedit_unwrap_ops.c | 5 ++-- .../blender/windowmanager/intern/wm_gesture.c | 2 +- 9 files changed, 21 insertions(+), 28 deletions(-) diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index c54461a5a13..cefc0fba9cd 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -472,7 +472,7 @@ void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal) dl= dl->next; } - if (totvert && (tot= BLI_edgefill(0))) { // XXX (obedit && obedit->actcol)?(obedit->actcol-1):0)) { + if (totvert && (tot= BLI_edgefill(FALSE))) { // XXX (obedit && obedit->actcol)?(obedit->actcol-1):0)) { if (tot) { dlnew= MEM_callocN(sizeof(DispList), "filldisplist"); dlnew->type= DL_INDEX3; diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index c53b11aa60c..75f6abc6c74 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -216,7 +216,7 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm) /*complete the loop*/ BLI_addfilledge(firstv, v); - totfilltri = BLI_edgefill(2); + totfilltri = BLI_edgefill(FALSE); BLI_array_growitems(looptris, totfilltri); for (efa = fillfacebase.first; efa; efa=efa->next) { diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 9a10a00bf45..2a22324a0ab 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -2478,7 +2478,7 @@ int mesh_recalcTessellation(CustomData *fdata, } BLI_addfilledge(lastv, firstv); - totfilltri = BLI_edgefill(2); + totfilltri = BLI_edgefill(FALSE); if (totfilltri) { BLI_array_growitems(mface_to_poly_map, totfilltri); BLI_array_growitems(mface, totfilltri); diff --git a/source/blender/blenlib/BLI_scanfill.h b/source/blender/blenlib/BLI_scanfill.h index 1fe71bffba8..6dcc1df41a3 100644 --- a/source/blender/blenlib/BLI_scanfill.h +++ b/source/blender/blenlib/BLI_scanfill.h @@ -86,7 +86,7 @@ struct ScanFillEdge *BLI_addfilledge(struct ScanFillVert *v1, struct ScanFillVer #define FILLBOUNDARY 1 int BLI_begin_edgefill(void); -int BLI_edgefill(short mat_nr); +int BLI_edgefill(const short do_quad_tri_speedup); void BLI_end_edgefill(void); /* These callbacks are needed to make the lib finction properly */ diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index 641d0373a64..d1b2c5b00ee 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -792,7 +792,7 @@ int BLI_begin_edgefill(void) return 1; } -int BLI_edgefill(short mat_nr) +int BLI_edgefill(const short do_quad_tri_speedup) { /* * - fill works with its own lists, so create that first (no faces!) @@ -821,34 +821,28 @@ int BLI_edgefill(short mat_nr) a += 1; } - if (a == 3 && (mat_nr & 2)) { + if (do_quad_tri_speedup && (a == 3)) { eve = fillvertbase.first; addfillface(eve, eve->next, eve->next->next); return 1; } - else if (a == 4 && (mat_nr & 2)) { + else if (do_quad_tri_speedup && (a == 4)) { float vec1[3], vec2[3]; eve = fillvertbase.first; /* no need to check 'eve->next->next->next' is valid, already counted */ - if (1) { //BMESH_TODO) { - /*use shortest diagonal for quad*/ - sub_v3_v3v3(vec1, eve->co, eve->next->next->co); - sub_v3_v3v3(vec2, eve->next->co, eve->next->next->next->co); - - if (dot_v3v3(vec1, vec1) < dot_v3v3(vec2, vec2)) { - addfillface(eve, eve->next, eve->next->next); - addfillface(eve->next->next, eve->next->next->next, eve); - } - else { - addfillface(eve->next, eve->next->next, eve->next->next->next); - addfillface(eve->next->next->next, eve, eve->next); - } + /*use shortest diagonal for quad*/ + sub_v3_v3v3(vec1, eve->co, eve->next->next->co); + sub_v3_v3v3(vec2, eve->next->co, eve->next->next->next->co); + + if (dot_v3v3(vec1, vec1) < dot_v3v3(vec2, vec2)) { + addfillface(eve, eve->next, eve->next->next); + addfillface(eve->next->next, eve->next->next->next, eve); } else { - addfillface(eve, eve->next, eve->next->next); - addfillface(eve->next->next, eve->next->next->next, eve); + addfillface(eve->next, eve->next->next, eve->next->next->next); + addfillface(eve->next->next->next, eve, eve->next); } return 2; } diff --git a/source/blender/bmesh/operators/bmo_triangulate.c b/source/blender/bmesh/operators/bmo_triangulate.c index dd23bc604be..0f7c45470e9 100644 --- a/source/blender/bmesh/operators/bmo_triangulate.c +++ b/source/blender/bmesh/operators/bmo_triangulate.c @@ -194,7 +194,7 @@ void bmo_triangle_fill_exec(BMesh *bm, BMOperator *op) /* eed->tmp.p = e; */ /* UNUSED */ } - BLI_edgefill(0); + BLI_edgefill(FALSE); for (efa = fillfacebase.first; efa; efa = efa->next) { BMFace *f = BM_face_create_quad_tri(bm, diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 9224a8d857e..4ba8ff0492c 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -1873,7 +1873,7 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) } } - BLI_edgefill(0); + BLI_edgefill(FALSE); for (efa = fillfacebase.first; efa; efa = efa->next) { BMVert *v1 = efa->v3->tmp.p, *v2 = efa->v2->tmp.p, *v3 = efa->v1->tmp.p; diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index 54182350f1e..e51b119253f 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -286,9 +286,8 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, } BLI_addfilledge(firstv, v); - - /* mode 2 enables faster handling of tri/quads */ - BLI_edgefill(2); + + BLI_edgefill(TRUE); for (sefa = fillfacebase.first; sefa; sefa = sefa->next) { ls[0] = sefa->v1->tmp.p; ls[1] = sefa->v2->tmp.p; diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index 593d1b35abe..efc22f95cbc 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -253,7 +253,7 @@ static void draw_filled_lasso(wmGesture *gt) /* highly unlikely this will fail, but could crash if (gt->points == 0) */ if (firstv) { BLI_addfilledge(firstv, v); - BLI_edgefill(0); + BLI_edgefill(FALSE); glEnable(GL_BLEND); glColor4f(1.0, 1.0, 1.0, 0.05); From fb1e60762f3a4c32b3ae57824f5bcbb984b33cbc Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 05:23:40 +0000 Subject: [PATCH 044/156] style cleanup: scanfill, spelling and use NULL rather then 0 --- source/blender/blenlib/intern/scanfill.c | 758 ++++++++++++----------- 1 file changed, 381 insertions(+), 377 deletions(-) diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index d1b2c5b00ee..89ab192c920 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -45,7 +45,7 @@ #include "BLI_threads.h" /* callbacks for errors and interrupts and some goo */ -static void (*BLI_localErrorCallBack)(const char*) = NULL; +static void (*BLI_localErrorCallBack)(const char *) = NULL; static int (*BLI_localInterruptCallBack)(void) = NULL; void BLI_setErrorCallBack(void (*f)(const char *)) @@ -59,7 +59,7 @@ void BLI_setInterruptCallBack(int (*f)(void)) } /* just flush the error to /dev/null if the error handler is missing */ -void callLocalErrorCallBack(const char* msg) +void callLocalErrorCallBack(const char *msg) { if (BLI_localErrorCallBack) { BLI_localErrorCallBack(msg); @@ -81,9 +81,9 @@ static int callLocalInterruptCallBack(void) /* local types */ typedef struct PolyFill { - int edges,verts; - float min[3],max[3]; - short f,nr; + int edges, verts; + float min[3], max[3]; + short f, nr; } PolyFill; typedef struct ScanFillVertLink { @@ -94,7 +94,7 @@ typedef struct ScanFillVertLink { /* local funcs */ -#define COMPLIMIT 0.00003 +#define COMPLIMIT 0.00003f static ScanFillVertLink *scdata; @@ -104,29 +104,29 @@ ListBase fillfacebase = {NULL, NULL}; static int cox, coy; -/* **** FUBCTIONS FOR QSORT *************************** */ +/* **** FUNCTIONS FOR QSORT *************************** */ static int vergscdata(const void *a1, const void *a2) { - const ScanFillVertLink *x1=a1,*x2=a2; + const ScanFillVertLink *x1 = a1, *x2 = a2; - if ( x1->v1->co[coy] < x2->v1->co[coy] ) return 1; - else if ( x1->v1->co[coy] > x2->v1->co[coy]) return -1; - else if ( x1->v1->co[cox] > x2->v1->co[cox] ) return 1; - else if ( x1->v1->co[cox] < x2->v1->co[cox]) return -1; + if (x1->v1->co[coy] < x2->v1->co[coy]) return 1; + else if (x1->v1->co[coy] > x2->v1->co[coy]) return -1; + else if (x1->v1->co[cox] > x2->v1->co[cox]) return 1; + else if (x1->v1->co[cox] < x2->v1->co[cox]) return -1; return 0; } static int vergpoly(const void *a1, const void *a2) { - const PolyFill *x1=a1, *x2=a2; + const PolyFill *x1 = a1, *x2 = a2; - if ( x1->min[cox] > x2->min[cox] ) return 1; - else if ( x1->min[cox] < x2->min[cox] ) return -1; - else if ( x1->min[coy] > x2->min[coy] ) return 1; - else if ( x1->min[coy] < x2->min[coy] ) return -1; + if (x1->min[cox] > x2->min[cox]) return 1; + else if (x1->min[cox] < x2->min[cox]) return -1; + else if (x1->min[coy] > x2->min[coy]) return 1; + else if (x1->min[coy] < x2->min[coy]) return -1; return 0; } @@ -144,27 +144,27 @@ struct mem_elements { * free in the end, with argument '-1' */ #define MEM_ELEM_BLOCKSIZE 16384 -static struct mem_elements * melem__cur= NULL; -static int melem__offs= 0; /* the current free address */ -static ListBase melem__lb= {NULL, NULL}; +static struct mem_elements *melem__cur = NULL; +static int melem__offs = 0; /* the current free address */ +static ListBase melem__lb = {NULL, NULL}; static void *mem_element_new(int size) { - BLI_assert(!(size>10000 || size==0)); /* this is invalid use! */ + BLI_assert(!(size > 10000 || size == 0)); /* this is invalid use! */ - size = (size + 3 ) & ~3; /* allocate in units of 4 */ + size = (size + 3) & ~3; /* allocate in units of 4 */ if (melem__cur && (size + melem__offs < MEM_ELEM_BLOCKSIZE)) { - void *adr= (void *) (melem__cur->data+melem__offs); - melem__offs+= size; + void *adr = (void *) (melem__cur->data + melem__offs); + melem__offs += size; return adr; } else { - melem__cur= MEM_callocN( sizeof(struct mem_elements), "newmem"); - melem__cur->data= MEM_callocN(MEM_ELEM_BLOCKSIZE, "newmem"); + melem__cur = MEM_callocN(sizeof(struct mem_elements), "newmem"); + melem__cur->data = MEM_callocN(MEM_ELEM_BLOCKSIZE, "newmem"); BLI_addtail(&melem__lb, melem__cur); - melem__offs= size; + melem__offs = size; return melem__cur->data; } } @@ -172,15 +172,15 @@ static void mem_element_reset(int keep_first) { struct mem_elements *first; - if ((first= melem__lb.first)) { /* can be false if first fill fails */ + if ((first = melem__lb.first)) { /* can be false if first fill fails */ if (keep_first) { BLI_remlink(&melem__lb, first); } - melem__cur= melem__lb.first; + melem__cur = melem__lb.first; while (melem__cur) { MEM_freeN(melem__cur->data); - melem__cur= melem__cur->next; + melem__cur = melem__cur->next; } BLI_freelistN(&melem__lb); @@ -195,17 +195,17 @@ static void mem_element_reset(int keep_first) } } - melem__cur= first; - melem__offs= 0; + melem__cur = first; + melem__offs = 0; } void BLI_end_edgefill(void) { mem_element_reset(TRUE); - fillvertbase.first= fillvertbase.last= 0; - filledgebase.first= filledgebase.last= 0; - fillfacebase.first= fillfacebase.last= 0; + fillvertbase.first = fillvertbase.last = 0; + filledgebase.first = filledgebase.last = 0; + fillfacebase.first = fillfacebase.last = 0; BLI_unlock_thread(LOCK_SCANFILL); } @@ -221,7 +221,7 @@ ScanFillVert *BLI_addfillvert(const float vec[3]) { ScanFillVert *eve; - eve= mem_element_new(sizeof(ScanFillVert)); + eve = mem_element_new(sizeof(ScanFillVert)); BLI_addtail(&fillvertbase, eve); eve->co[0] = vec[0]; @@ -235,11 +235,11 @@ ScanFillEdge *BLI_addfilledge(ScanFillVert *v1, ScanFillVert *v2) { ScanFillEdge *newed; - newed= mem_element_new(sizeof(ScanFillEdge)); + newed = mem_element_new(sizeof(ScanFillEdge)); BLI_addtail(&filledgebase, newed); - newed->v1= v1; - newed->v2= v2; + newed->v1 = v1; + newed->v2 = v2; return newed; } @@ -249,12 +249,12 @@ static void addfillface(ScanFillVert *v1, ScanFillVert *v2, ScanFillVert *v3) /* does not make edges */ ScanFillFace *evl; - evl= mem_element_new(sizeof(ScanFillFace)); + evl = mem_element_new(sizeof(ScanFillFace)); BLI_addtail(&fillfacebase, evl); - evl->v1= v1; - evl->v2= v2; - evl->v3= v3; + evl->v1 = v1; + evl->v2 = v2; + evl->v3 = v3; } static int boundisect(PolyFill *pf2, PolyFill *pf1) @@ -262,46 +262,46 @@ static int boundisect(PolyFill *pf2, PolyFill *pf1) /* has pf2 been touched (intersected) by pf1 ? with bounding box */ /* test first if polys exist */ - if (pf1->edges==0 || pf2->edges==0) return 0; + if (pf1->edges == 0 || pf2->edges == 0) return 0; - if (pf2->max[cox] < pf1->min[cox] ) return 0; - if (pf2->max[coy] < pf1->min[coy] ) return 0; + if (pf2->max[cox] < pf1->min[cox]) return 0; + if (pf2->max[coy] < pf1->min[coy]) return 0; - if (pf2->min[cox] > pf1->max[cox] ) return 0; - if (pf2->min[coy] > pf1->max[coy] ) return 0; + if (pf2->min[cox] > pf1->max[cox]) return 0; + if (pf2->min[coy] > pf1->max[coy]) return 0; /* join */ - if (pf2->max[cox]max[cox]) pf2->max[cox]= pf1->max[cox]; - if (pf2->max[coy]max[coy]) pf2->max[coy]= pf1->max[coy]; + if (pf2->max[cox] < pf1->max[cox]) pf2->max[cox] = pf1->max[cox]; + if (pf2->max[coy] < pf1->max[coy]) pf2->max[coy] = pf1->max[coy]; - if (pf2->min[cox]>pf1->min[cox]) pf2->min[cox]= pf1->min[cox]; - if (pf2->min[coy]>pf1->min[coy]) pf2->min[coy]= pf1->min[coy]; + if (pf2->min[cox] > pf1->min[cox]) pf2->min[cox] = pf1->min[cox]; + if (pf2->min[coy] > pf1->min[coy]) pf2->min[coy] = pf1->min[coy]; return 1; } -static void mergepolysSimp(PolyFill *pf1, PolyFill *pf2) /* add pf2 to pf1 */ +static void mergepolysSimp(PolyFill *pf1, PolyFill *pf2) /* add pf2 to pf1 */ { ScanFillVert *eve; ScanFillEdge *eed; /* replace old poly numbers */ - eve= fillvertbase.first; + eve = fillvertbase.first; while (eve) { if (eve->poly_nr == pf2->nr) eve->poly_nr = pf1->nr; - eve= eve->next; + eve = eve->next; } - eed= filledgebase.first; + eed = filledgebase.first; while (eed) { if (eed->poly_nr == pf2->nr) eed->poly_nr = pf1->nr; - eed= eed->next; + eed = eed->next; } - pf1->verts+= pf2->verts; - pf1->edges+= pf2->edges; - pf2->verts= pf2->edges= 0; - pf1->f= (pf1->f | pf2->f); + pf1->verts += pf2->verts; + pf1->edges += pf2->edges; + pf2->verts = pf2->edges = 0; + pf1->f = (pf1->f | pf2->f); } static short testedgeside(const float v1[3], const float v2[3], const float v3[3]) @@ -309,13 +309,15 @@ static short testedgeside(const float v1[3], const float v2[3], const float v3[3 { float inp; - inp= (v2[cox]-v1[cox])*(v1[coy]-v3[coy]) - +(v1[coy]-v2[coy])*(v1[cox]-v3[cox]); + inp = (v2[cox] - v1[cox]) * (v1[coy] - v3[coy]) + + (v1[coy] - v2[coy]) * (v1[cox] - v3[cox]); - if (inp < 0.0f) return 0; - else if (inp==0) { - if (v1[cox]==v3[cox] && v1[coy]==v3[coy]) return 0; - if (v2[cox]==v3[cox] && v2[coy]==v3[coy]) return 0; + if (inp < 0.0f) { + return 0; + } + else if (inp == 0) { + if (v1[cox] == v3[cox] && v1[coy] == v3[coy]) return 0; + if (v2[cox] == v3[cox] && v2[coy] == v3[coy]) return 0; } return 1; } @@ -324,41 +326,43 @@ static short addedgetoscanvert(ScanFillVertLink *sc, ScanFillEdge *eed) { /* find first edge to the right of eed, and insert eed before that */ ScanFillEdge *ed; - float fac,fac1,x,y; + float fac, fac1, x, y; - if (sc->first==0) { - sc->first= sc->last= eed; - eed->prev= eed->next=0; + if (sc->first == NULL) { + sc->first = sc->last = eed; + eed->prev = eed->next = NULL; return 1; } - x= eed->v1->co[cox]; - y= eed->v1->co[coy]; + x = eed->v1->co[cox]; + y = eed->v1->co[coy]; - fac1= eed->v2->co[coy]-y; - if (fac1==0.0f) { - fac1= 1.0e10f*(eed->v2->co[cox]-x); + fac1 = eed->v2->co[coy] - y; + if (fac1 == 0.0f) { + fac1 = 1.0e10f * (eed->v2->co[cox] - x); } - else fac1= (x-eed->v2->co[cox])/fac1; + else fac1 = (x - eed->v2->co[cox]) / fac1; - ed= sc->first; + ed = sc->first; while (ed) { - if (ed->v2==eed->v2) return 0; - - fac= ed->v2->co[coy]-y; - if (fac==0.0f) { - fac= 1.0e10f*(ed->v2->co[cox]-x); + if (ed->v2 == eed->v2) return 0; + fac = ed->v2->co[coy] - y; + if (fac == 0.0f) { + fac = 1.0e10f * (ed->v2->co[cox] - x); + } + else { + fac = (x - ed->v2->co[cox]) / fac; } - else fac= (x-ed->v2->co[cox])/fac; - if (fac>fac1) break; - ed= ed->next; + if (fac > fac1) break; + + ed = ed->next; } if (ed) BLI_insertlinkbefore((ListBase *)&(sc->first), ed, eed); - else BLI_addtail((ListBase *)&(sc->first),eed); + else BLI_addtail((ListBase *)&(sc->first), eed); return 1; } @@ -368,29 +372,29 @@ static ScanFillVertLink *addedgetoscanlist(ScanFillEdge *eed, int len) { /* inserts edge at correct location in ScanFillVertLink list */ /* returns sc when edge already exists */ - ScanFillVertLink *sc,scsearch; + ScanFillVertLink *sc, scsearch; ScanFillVert *eve; /* which vert is left-top? */ if (eed->v1->co[coy] == eed->v2->co[coy]) { if (eed->v1->co[cox] > eed->v2->co[cox]) { - eve= eed->v1; - eed->v1= eed->v2; - eed->v2= eve; + eve = eed->v1; + eed->v1 = eed->v2; + eed->v2 = eve; } } else if (eed->v1->co[coy] < eed->v2->co[coy]) { - eve= eed->v1; - eed->v1= eed->v2; - eed->v2= eve; + eve = eed->v1; + eed->v1 = eed->v2; + eed->v2 = eve; } /* find location in list */ - scsearch.v1= eed->v1; - sc= (ScanFillVertLink *)bsearch(&scsearch,scdata,len, - sizeof(ScanFillVertLink), vergscdata); + scsearch.v1 = eed->v1; + sc = (ScanFillVertLink *)bsearch(&scsearch, scdata, len, + sizeof(ScanFillVertLink), vergscdata); - if (sc==0) printf("Error in search edge: %p\n", (void *)eed); - else if (addedgetoscanvert(sc,eed)==0) return sc; + if (sc == 0) printf("Error in search edge: %p\n", (void *)eed); + else if (addedgetoscanvert(sc, eed) == 0) return sc; return 0; } @@ -398,26 +402,26 @@ static ScanFillVertLink *addedgetoscanlist(ScanFillEdge *eed, int len) static short boundinsideEV(ScanFillEdge *eed, ScanFillVert *eve) /* is eve inside boundbox eed */ { - float minx,maxx,miny,maxy; + float minx, maxx, miny, maxy; - if (eed->v1->co[cox]v2->co[cox]) { - minx= eed->v1->co[cox]; - maxx= eed->v2->co[cox]; + if (eed->v1->co[cox] < eed->v2->co[cox]) { + minx = eed->v1->co[cox]; + maxx = eed->v2->co[cox]; } else { - minx= eed->v2->co[cox]; - maxx= eed->v1->co[cox]; + minx = eed->v2->co[cox]; + maxx = eed->v1->co[cox]; } - if (eve->co[cox]>=minx && eve->co[cox]<=maxx) { - if (eed->v1->co[coy]v2->co[coy]) { - miny= eed->v1->co[coy]; - maxy= eed->v2->co[coy]; + if (eve->co[cox] >= minx && eve->co[cox] <= maxx) { + if (eed->v1->co[coy] < eed->v2->co[coy]) { + miny = eed->v1->co[coy]; + maxy = eed->v2->co[coy]; } else { - miny= eed->v2->co[coy]; - maxy= eed->v1->co[coy]; + miny = eed->v2->co[coy]; + maxy = eed->v1->co[coy]; } - if (eve->co[coy]>=miny && eve->co[coy]<=maxy) return 1; + if (eve->co[coy] >= miny && eve->co[coy] <= maxy) return 1; } return 0; } @@ -429,93 +433,93 @@ static void testvertexnearedge(void) * being close to an edge, if true insert */ ScanFillVert *eve; - ScanFillEdge *eed,*ed1; - float dist,vec1[2],vec2[2],vec3[2]; + ScanFillEdge *eed, *ed1; + float dist, vec1[2], vec2[2], vec3[2]; - eve= fillvertbase.first; + eve = fillvertbase.first; while (eve) { - if (eve->h==1) { - vec3[0]= eve->co[cox]; - vec3[1]= eve->co[coy]; + if (eve->h == 1) { + vec3[0] = eve->co[cox]; + vec3[1] = eve->co[coy]; /* find the edge which has vertex eve */ - ed1= filledgebase.first; + ed1 = filledgebase.first; while (ed1) { - if (ed1->v1==eve || ed1->v2==eve) break; - ed1= ed1->next; + if (ed1->v1 == eve || ed1->v2 == eve) break; + ed1 = ed1->next; } - if (ed1->v1==eve) { - ed1->v1= ed1->v2; - ed1->v2= eve; + if (ed1->v1 == eve) { + ed1->v1 = ed1->v2; + ed1->v2 = eve; } - eed= filledgebase.first; + eed = filledgebase.first; while (eed) { if (eve != eed->v1 && eve != eed->v2 && eve->poly_nr == eed->poly_nr) { - if (compare_v3v3(eve->co,eed->v1->co, COMPLIMIT)) { - ed1->v2= eed->v1; + if (compare_v3v3(eve->co, eed->v1->co, COMPLIMIT)) { + ed1->v2 = eed->v1; eed->v1->h++; - eve->h= 0; + eve->h = 0; break; } - else if (compare_v3v3(eve->co,eed->v2->co, COMPLIMIT)) { - ed1->v2= eed->v2; + else if (compare_v3v3(eve->co, eed->v2->co, COMPLIMIT)) { + ed1->v2 = eed->v2; eed->v2->h++; - eve->h= 0; + eve->h = 0; break; } else { - vec1[0]= eed->v1->co[cox]; - vec1[1]= eed->v1->co[coy]; - vec2[0]= eed->v2->co[cox]; - vec2[1]= eed->v2->co[coy]; - if (boundinsideEV(eed,eve)) { - dist= dist_to_line_v2(vec1,vec2,vec3); - if (dist<(float)COMPLIMIT) { + vec1[0] = eed->v1->co[cox]; + vec1[1] = eed->v1->co[coy]; + vec2[0] = eed->v2->co[cox]; + vec2[1] = eed->v2->co[coy]; + if (boundinsideEV(eed, eve)) { + dist = dist_to_line_v2(vec1, vec2, vec3); + if (dist < COMPLIMIT) { /* new edge */ - ed1= BLI_addfilledge(eed->v1, eve); + ed1 = BLI_addfilledge(eed->v1, eve); /* printf("fill: vertex near edge %x\n",eve); */ - ed1->f= 0; + ed1->f = 0; ed1->poly_nr = eed->poly_nr; - eed->v1= eve; - eve->h= 3; + eed->v1 = eve; + eve->h = 3; break; } } } } - eed= eed->next; + eed = eed->next; } } - eve= eve->next; + eve = eve->next; } } static void splitlist(ListBase *tempve, ListBase *temped, short nr) { /* everything is in templist, write only poly nr to fillist */ - ScanFillVert *eve,*nextve; - ScanFillEdge *eed,*nexted; + ScanFillVert *eve, *nextve; + ScanFillEdge *eed, *nexted; - BLI_movelisttolist(tempve,&fillvertbase); - BLI_movelisttolist(temped,&filledgebase); + BLI_movelisttolist(tempve, &fillvertbase); + BLI_movelisttolist(temped, &filledgebase); - eve= tempve->first; + eve = tempve->first; while (eve) { - nextve= eve->next; + nextve = eve->next; if (eve->poly_nr == nr) { - BLI_remlink(tempve,eve); - BLI_addtail(&fillvertbase,eve); + BLI_remlink(tempve, eve); + BLI_addtail(&fillvertbase, eve); } - eve= nextve; + eve = nextve; } - eed= temped->first; + eed = temped->first; while (eed) { - nexted= eed->next; - if (eed->poly_nr==nr) { - BLI_remlink(temped,eed); - BLI_addtail(&filledgebase,eed); + nexted = eed->next; + if (eed->poly_nr == nr) { + BLI_remlink(temped, eed); + BLI_addtail(&filledgebase, eed); } - eed= nexted; + eed = nexted; } } @@ -523,105 +527,105 @@ static void splitlist(ListBase *tempve, ListBase *temped, short nr) static int scanfill(PolyFill *pf) { ScanFillVertLink *sc = NULL, *sc1; - ScanFillVert *eve,*v1,*v2,*v3; - ScanFillEdge *eed,*nexted,*ed1,*ed2,*ed3; + ScanFillVert *eve, *v1, *v2, *v3; + ScanFillEdge *eed, *nexted, *ed1, *ed2, *ed3; float miny = 0.0; - int a,b,verts, maxface, totface; - short nr, test, twoconnected=0; + int a, b, verts, maxface, totface; + short nr, test, twoconnected = 0; - nr= pf->nr; + nr = pf->nr; /* PRINTS */ #if 0 - verts= pf->verts; - eve= fillvertbase.first; + verts = pf->verts; + eve = fillvertbase.first; while (eve) { - printf("vert: %x co: %f %f\n",eve,eve->co[cox],eve->co[coy]); - eve= eve->next; + printf("vert: %x co: %f %f\n", eve, eve->co[cox], eve->co[coy]); + eve = eve->next; } - eed= filledgebase.first; + eed = filledgebase.first; while (eed) { - printf("edge: %x verts: %x %x\n",eed,eed->v1,eed->v2); - eed= eed->next; + printf("edge: %x verts: %x %x\n", eed, eed->v1, eed->v2); + eed = eed->next; } #endif /* STEP 0: remove zero sized edges */ - eed= filledgebase.first; + eed = filledgebase.first; while (eed) { - if (eed->v1->co[cox]==eed->v2->co[cox]) { - if (eed->v1->co[coy]==eed->v2->co[coy]) { - if (eed->v1->f==255 && eed->v2->f!=255) { - eed->v2->f= 255; - eed->v2->tmp.v= eed->v1->tmp.v; + if (eed->v1->co[cox] == eed->v2->co[cox]) { + if (eed->v1->co[coy] == eed->v2->co[coy]) { + if (eed->v1->f == 255 && eed->v2->f != 255) { + eed->v2->f = 255; + eed->v2->tmp.v = eed->v1->tmp.v; } - else if (eed->v2->f==255 && eed->v1->f!=255) { - eed->v1->f= 255; - eed->v1->tmp.v= eed->v2->tmp.v; + else if (eed->v2->f == 255 && eed->v1->f != 255) { + eed->v1->f = 255; + eed->v1->tmp.v = eed->v2->tmp.v; } - else if (eed->v2->f==255 && eed->v1->f==255) { - eed->v1->tmp.v= eed->v2->tmp.v; + else if (eed->v2->f == 255 && eed->v1->f == 255) { + eed->v1->tmp.v = eed->v2->tmp.v; } else { - eed->v2->f= 255; + eed->v2->f = 255; eed->v2->tmp.v = eed->v1; } } } - eed= eed->next; + eed = eed->next; } /* STEP 1: make using FillVert and FillEdge lists a sorted * ScanFillVertLink list */ - sc= scdata= (ScanFillVertLink *)MEM_callocN(pf->verts*sizeof(ScanFillVertLink),"Scanfill1"); - eve= fillvertbase.first; - verts= 0; + sc = scdata = (ScanFillVertLink *)MEM_callocN(pf->verts * sizeof(ScanFillVertLink), "Scanfill1"); + eve = fillvertbase.first; + verts = 0; while (eve) { if (eve->poly_nr == nr) { if (eve->f != 255) { verts++; - eve->f= 0; /* flag for connectedges later on */ - sc->v1= eve; + eve->f = 0; /* flag for connectedges later on */ + sc->v1 = eve; sc++; } } - eve= eve->next; + eve = eve->next; } qsort(scdata, verts, sizeof(ScanFillVertLink), vergscdata); - eed= filledgebase.first; + eed = filledgebase.first; while (eed) { - nexted= eed->next; - BLI_remlink(&filledgebase,eed); + nexted = eed->next; + BLI_remlink(&filledgebase, eed); /* This code is for handling zero-length edges that get * collapsed in step 0. It was removed for some time to * fix trunk bug #4544, so if that comes back, this code * may need some work, or there will have to be a better * fix to #4544. */ - if (eed->v1->f==255) { - v1= eed->v1; + if (eed->v1->f == 255) { + v1 = eed->v1; while ((eed->v1->f == 255) && (eed->v1->tmp.v != v1)) eed->v1 = eed->v1->tmp.v; } - if (eed->v2->f==255) { - v2= eed->v2; + if (eed->v2->f == 255) { + v2 = eed->v2; while ((eed->v2->f == 255) && (eed->v2->tmp.v != v2)) eed->v2 = eed->v2->tmp.v; } - if (eed->v1!=eed->v2) addedgetoscanlist(eed,verts); + if (eed->v1 != eed->v2) addedgetoscanlist(eed, verts); - eed= nexted; + eed = nexted; } #if 0 - sc= scdata; - for (a=0;av1); - eed= sc->first; + sc = scdata; + for (a = 0; a < verts; a++) { + printf("\nscvert: %x\n", sc->v1); + eed = sc->first; while (eed) { - printf(" ed %x %x %x\n",eed,eed->v1,eed->v2); - eed= eed->next; + printf(" ed %x %x %x\n", eed, eed->v1, eed->v2); + eed = eed->next; } sc++; } @@ -630,70 +634,70 @@ static int scanfill(PolyFill *pf) /* STEP 2: FILL LOOP */ - if (pf->f==0) twoconnected= 1; + if (pf->f == 0) twoconnected = 1; /* (temporal) security: never much more faces than vertices */ - totface= 0; - maxface= 2*verts; /* 2*verts: based at a filled circle within a triangle */ + totface = 0; + maxface = 2 * verts; /* 2*verts: based at a filled circle within a triangle */ - sc= scdata; - for (a=0;av1); */ - ed1= sc->first; - while (ed1) { /* set connectflags */ - nexted= ed1->next; - if (ed1->v1->h==1 || ed1->v2->h==1) { - BLI_remlink((ListBase *)&(sc->first),ed1); - BLI_addtail(&filledgebase,ed1); - if (ed1->v1->h>1) ed1->v1->h--; - if (ed1->v2->h>1) ed1->v2->h--; + ed1 = sc->first; + while (ed1) { /* set connectflags */ + nexted = ed1->next; + if (ed1->v1->h == 1 || ed1->v2->h == 1) { + BLI_remlink((ListBase *)&(sc->first), ed1); + BLI_addtail(&filledgebase, ed1); + if (ed1->v1->h > 1) ed1->v1->h--; + if (ed1->v2->h > 1) ed1->v2->h--; } - else ed1->v2->f= 1; + else ed1->v2->f = 1; - ed1= nexted; + ed1 = nexted; } - while (sc->first) { /* for as long there are edges */ - ed1= sc->first; - ed2= ed1->next; + while (sc->first) { /* for as long there are edges */ + ed1 = sc->first; + ed2 = ed1->next; /* commented out... the ESC here delivers corrupted memory (and doesnt work during grab) */ /* if (callLocalInterruptCallBack()) break; */ - if (totface>maxface) { + if (totface > maxface) { /* printf("Fill error: endless loop. Escaped at vert %d, tot: %d.\n", a, verts); */ - a= verts; + a = verts; break; } - if (ed2==0) { - sc->first=sc->last= 0; + if (ed2 == 0) { + sc->first = sc->last = NULL; /* printf("just 1 edge to vert\n"); */ - BLI_addtail(&filledgebase,ed1); - ed1->v2->f= 0; + BLI_addtail(&filledgebase, ed1); + ed1->v2->f = 0; ed1->v1->h--; ed1->v2->h--; } else { /* test rest of vertices */ - v1= ed1->v2; - v2= ed1->v1; - v3= ed2->v2; + v1 = ed1->v2; + v2 = ed1->v1; + v3 = ed2->v2; /* this happens with a serial of overlapping edges */ - if (v1==v2 || v2==v3) break; + if (v1 == v2 || v2 == v3) break; /* printf("test verts %x %x %x\n",v1,v2,v3); */ - miny = ( (v1->co[coy])<(v3->co[coy]) ? (v1->co[coy]) : (v3->co[coy]) ); + miny = ( (v1->co[coy]) < (v3->co[coy]) ? (v1->co[coy]) : (v3->co[coy]) ); /* miny= MIN2(v1->co[coy],v3->co[coy]); */ - sc1= sc+1; - test= 0; + sc1 = sc + 1; + test = 0; - for (b=a+1;bv1->f==0) { + for (b = a + 1; b < verts; b++) { + if (sc1->v1->f == 0) { if (sc1->v1->co[coy] <= miny) break; - if (testedgeside(v1->co,v2->co,sc1->v1->co)) - if (testedgeside(v2->co,v3->co,sc1->v1->co)) - if (testedgeside(v3->co,v1->co,sc1->v1->co)) { + if (testedgeside(v1->co, v2->co, sc1->v1->co)) + if (testedgeside(v2->co, v3->co, sc1->v1->co)) + if (testedgeside(v3->co, v1->co, sc1->v1->co)) { /* point in triangle */ - test= 1; + test = 1; break; } } @@ -703,11 +707,11 @@ static int scanfill(PolyFill *pf) /* make new edge, and start over */ /* printf("add new edge %x %x and start again\n",v2,sc1->v1); */ - ed3= BLI_addfilledge(v2, sc1->v1); + ed3 = BLI_addfilledge(v2, sc1->v1); BLI_remlink(&filledgebase, ed3); BLI_insertlinkbefore((ListBase *)&(sc->first), ed2, ed3); - ed3->v2->f= 1; - ed3->f= 2; + ed3->v2->f = 1; + ed3->f = 2; ed3->v1->h++; ed3->v2->h++; } @@ -716,64 +720,64 @@ static int scanfill(PolyFill *pf) /* printf("add face %x %x %x\n",v1,v2,v3); */ addfillface(v1, v2, v3); totface++; - BLI_remlink((ListBase *)&(sc->first),ed1); - BLI_addtail(&filledgebase,ed1); - ed1->v2->f= 0; + BLI_remlink((ListBase *)&(sc->first), ed1); + BLI_addtail(&filledgebase, ed1); + ed1->v2->f = 0; ed1->v1->h--; ed1->v2->h--; /* ed2 can be removed when it's a boundary edge */ if ((ed2->f == 0 && twoconnected) || (ed2->f == FILLBOUNDARY)) { - BLI_remlink((ListBase *)&(sc->first),ed2); - BLI_addtail(&filledgebase,ed2); - ed2->v2->f= 0; + BLI_remlink((ListBase *)&(sc->first), ed2); + BLI_addtail(&filledgebase, ed2); + ed2->v2->f = 0; ed2->v1->h--; ed2->v2->h--; } /* new edge */ - ed3= BLI_addfilledge(v1, v3); + ed3 = BLI_addfilledge(v1, v3); BLI_remlink(&filledgebase, ed3); - ed3->f= 2; + ed3->f = 2; ed3->v1->h++; ed3->v2->h++; /* printf("add new edge %x %x\n",v1,v3); */ - sc1= addedgetoscanlist(ed3, verts); + sc1 = addedgetoscanlist(ed3, verts); - if (sc1) { /* ed3 already exists: remove if a boundary */ + if (sc1) { /* ed3 already exists: remove if a boundary */ /* printf("Edge exists\n"); */ ed3->v1->h--; ed3->v2->h--; - ed3= sc1->first; + ed3 = sc1->first; while (ed3) { - if ( (ed3->v1==v1 && ed3->v2==v3) || (ed3->v1==v3 && ed3->v2==v1) ) { - if (twoconnected || ed3->f==FILLBOUNDARY) { - BLI_remlink((ListBase *)&(sc1->first),ed3); - BLI_addtail(&filledgebase,ed3); + if ( (ed3->v1 == v1 && ed3->v2 == v3) || (ed3->v1 == v3 && ed3->v2 == v1) ) { + if (twoconnected || ed3->f == FILLBOUNDARY) { + BLI_remlink((ListBase *)&(sc1->first), ed3); + BLI_addtail(&filledgebase, ed3); ed3->v1->h--; ed3->v2->h--; } break; } - ed3= ed3->next; + ed3 = ed3->next; } } } } /* test for loose edges */ - ed1= sc->first; + ed1 = sc->first; while (ed1) { - nexted= ed1->next; - if (ed1->v1->h<2 || ed1->v2->h<2) { - BLI_remlink((ListBase *)&(sc->first),ed1); - BLI_addtail(&filledgebase,ed1); - if (ed1->v1->h>1) ed1->v1->h--; - if (ed1->v2->h>1) ed1->v2->h--; + nexted = ed1->next; + if (ed1->v1->h < 2 || ed1->v2->h < 2) { + BLI_remlink((ListBase *)&(sc->first), ed1); + BLI_addtail(&filledgebase, ed1); + if (ed1->v1->h > 1) ed1->v1->h--; + if (ed1->v2->h > 1) ed1->v2->h--; } - ed1= nexted; + ed1 = nexted; } } sc++; @@ -804,20 +808,20 @@ int BLI_edgefill(const short do_quad_tri_speedup) */ ListBase tempve, temped; ScanFillVert *eve; - ScanFillEdge *eed,*nexted; - PolyFill *pflist,*pf; + ScanFillEdge *eed, *nexted; + PolyFill *pflist, *pf; float limit, *minp, *maxp, *v1, *v2, norm[3], len; - short a,c,poly=0,ok=0,toggle=0; - int totfaces= 0; /* total faces added */ + short a, c, poly = 0, ok = 0, toggle = 0; + int totfaces = 0; /* total faces added */ /* reset variables */ - eve= fillvertbase.first; + eve = fillvertbase.first; a = 0; while (eve) { - eve->f= 0; - eve->poly_nr= 0; - eve->h= 0; - eve= eve->next; + eve->f = 0; + eve->poly_nr = 0; + eve->h = 0; + eve = eve->next; a += 1; } @@ -849,36 +853,36 @@ int BLI_edgefill(const short do_quad_tri_speedup) /* first test vertices if they are in edges */ /* including resetting of flags */ - eed= filledgebase.first; + eed = filledgebase.first; while (eed) { - eed->poly_nr= 0; - eed->v1->f= 1; - eed->v2->f= 1; + eed->poly_nr = 0; + eed->v1->f = 1; + eed->v2->f = 1; - eed= eed->next; + eed = eed->next; } - eve= fillvertbase.first; + eve = fillvertbase.first; while (eve) { if (eve->f & 1) { - ok=1; + ok = 1; break; } - eve= eve->next; + eve = eve->next; } - if (ok==0) return 0; + if (ok == 0) return 0; /* NEW NEW! define projection: with 'best' normal */ /* just use the first three different vertices */ /* THIS PART STILL IS PRETTY WEAK! (ton) */ - eve= fillvertbase.last; - len= 0.0; - v1= eve->co; - v2= 0; - eve= fillvertbase.first; + eve = fillvertbase.last; + len = 0.0; + v1 = eve->co; + v2 = 0; + eve = fillvertbase.first; limit = 1e-8f; while (eve) { @@ -889,69 +893,69 @@ int BLI_edgefill(const short do_quad_tri_speedup) if (inner > limit) { limit = inner; - len= normal_tri_v3(norm, v1, v2, eve->co); + len = normal_tri_v3(norm, v1, v2, eve->co); } } } else if (!compare_v3v3(v1, eve->co, COMPLIMIT)) - v2= eve->co; + v2 = eve->co; - eve= eve->next; + eve = eve->next; } - if (len==0.0f) return 0; /* no fill possible */ + if (len == 0.0f) return 0; /* no fill possible */ axis_dominant_v3(&cox, &coy, norm); /* STEP 1: COUNT POLYS */ - eve= fillvertbase.first; + eve = fillvertbase.first; while (eve) { /* get first vertex with no poly number */ - if (eve->poly_nr==0) { + if (eve->poly_nr == 0) { poly++; /* now a sortof select connected */ - ok= 1; + ok = 1; eve->poly_nr = poly; while (ok) { - ok= 0; + ok = 0; toggle++; - if (toggle & 1) eed= filledgebase.first; - else eed= filledgebase.last; + if (toggle & 1) eed = filledgebase.first; + else eed = filledgebase.last; while (eed) { if (eed->v1->poly_nr == 0 && eed->v2->poly_nr == poly) { eed->v1->poly_nr = poly; - eed->poly_nr= poly; - ok= 1; + eed->poly_nr = poly; + ok = 1; } else if (eed->v2->poly_nr == 0 && eed->v1->poly_nr == poly) { eed->v2->poly_nr = poly; - eed->poly_nr= poly; - ok= 1; + eed->poly_nr = poly; + ok = 1; } else if (eed->poly_nr == 0) { if (eed->v1->poly_nr == poly && eed->v2->poly_nr == poly) { - eed->poly_nr= poly; - ok= 1; + eed->poly_nr = poly; + ok = 1; } } - if (toggle & 1) eed= eed->next; - else eed= eed->prev; + if (toggle & 1) eed = eed->next; + else eed = eed->prev; } } } - eve= eve->next; + eve = eve->next; } /* printf("amount of poly's: %d\n",poly); */ /* STEP 2: remove loose edges and strings of edges */ - eed= filledgebase.first; + eed = filledgebase.first; while (eed) { - if (eed->v1->h++ >250) break; - if (eed->v2->h++ >250) break; - eed= eed->next; + if (eed->v1->h++ > 250) break; + if (eed->v2->h++ > 250) break; + eed = eed->next; } if (eed) { /* otherwise it's impossible to be sure you can clear vertices */ @@ -962,31 +966,31 @@ int BLI_edgefill(const short do_quad_tri_speedup) /* does it only for vertices with ->h==1 */ testvertexnearedge(); - ok= 1; + ok = 1; while (ok) { - ok= 0; + ok = 0; toggle++; - if (toggle & 1) eed= filledgebase.first; - else eed= filledgebase.last; + if (toggle & 1) eed = filledgebase.first; + else eed = filledgebase.last; while (eed) { - if (toggle & 1) nexted= eed->next; - else nexted= eed->prev; - if (eed->v1->h==1) { + if (toggle & 1) nexted = eed->next; + else nexted = eed->prev; + if (eed->v1->h == 1) { eed->v2->h--; - BLI_remlink(&fillvertbase,eed->v1); - BLI_remlink(&filledgebase,eed); - ok= 1; + BLI_remlink(&fillvertbase, eed->v1); + BLI_remlink(&filledgebase, eed); + ok = 1; } - else if (eed->v2->h==1) { + else if (eed->v2->h == 1) { eed->v1->h--; - BLI_remlink(&fillvertbase,eed->v2); - BLI_remlink(&filledgebase,eed); - ok= 1; + BLI_remlink(&fillvertbase, eed->v2); + BLI_remlink(&filledgebase, eed); + ok = 1; } - eed= nexted; + eed = nexted; } } - if (filledgebase.first==0) { + if (filledgebase.first == 0) { /* printf("All edges removed\n"); */ return 0; } @@ -1004,33 +1008,33 @@ int BLI_edgefill(const short do_quad_tri_speedup) /* STEP 3: MAKE POLYFILL STRUCT */ - pflist= (PolyFill *)MEM_callocN(poly*sizeof(PolyFill),"edgefill"); - pf= pflist; - for (a=1;a<=poly;a++) { - pf->nr= a; - pf->min[0]=pf->min[1]=pf->min[2]= 1.0e20; - pf->max[0]=pf->max[1]=pf->max[2]= -1.0e20; + pflist = (PolyFill *)MEM_callocN(poly * sizeof(PolyFill), "edgefill"); + pf = pflist; + for (a = 1; a <= poly; a++) { + pf->nr = a; + pf->min[0] = pf->min[1] = pf->min[2] = 1.0e20; + pf->max[0] = pf->max[1] = pf->max[2] = -1.0e20; pf++; } - eed= filledgebase.first; + eed = filledgebase.first; while (eed) { - pflist[eed->poly_nr-1].edges++; - eed= eed->next; + pflist[eed->poly_nr - 1].edges++; + eed = eed->next; } - eve= fillvertbase.first; + eve = fillvertbase.first; while (eve) { - pflist[eve->poly_nr-1].verts++; - minp= pflist[eve->poly_nr-1].min; - maxp= pflist[eve->poly_nr-1].max; + pflist[eve->poly_nr - 1].verts++; + minp = pflist[eve->poly_nr - 1].min; + maxp = pflist[eve->poly_nr - 1].max; - minp[cox]= (minp[cox])<(eve->co[cox]) ? (minp[cox]) : (eve->co[cox]); - minp[coy]= (minp[coy])<(eve->co[coy]) ? (minp[coy]) : (eve->co[coy]); - maxp[cox]= (maxp[cox])>(eve->co[cox]) ? (maxp[cox]) : (eve->co[cox]); - maxp[coy]= (maxp[coy])>(eve->co[coy]) ? (maxp[coy]) : (eve->co[coy]); - if (eve->h > 2) pflist[eve->poly_nr-1].f = 1; + minp[cox] = (minp[cox]) < (eve->co[cox]) ? (minp[cox]) : (eve->co[cox]); + minp[coy] = (minp[coy]) < (eve->co[coy]) ? (minp[coy]) : (eve->co[coy]); + maxp[cox] = (maxp[cox]) > (eve->co[cox]) ? (maxp[cox]) : (eve->co[cox]); + maxp[coy] = (maxp[coy]) > (eve->co[coy]) ? (maxp[coy]) : (eve->co[coy]); + if (eve->h > 2) pflist[eve->poly_nr - 1].f = 1; - eve= eve->next; + eve = eve->next; } /* STEP 4: FIND HOLES OR BOUNDS, JOIN THEM @@ -1038,40 +1042,40 @@ int BLI_edgefill(const short do_quad_tri_speedup) * the edgefill itself has good auto-hole detection) * WATCH IT: ONLY WORKS WITH SORTED POLYS!!! */ - if (poly>1) { + if (poly > 1) { short *polycache, *pc; /* so, sort first */ qsort(pflist, poly, sizeof(PolyFill), vergpoly); #if 0 - pf= pflist; - for (a=1;a<=poly;a++) { - printf("poly:%d edges:%d verts:%d flag: %d\n",a,pf->edges,pf->verts,pf->f); + pf = pflist; + for (a = 1; a <= poly; a++) { + printf("poly:%d edges:%d verts:%d flag: %d\n", a, pf->edges, pf->verts, pf->f); PRINT2(f, f, pf->min[0], pf->min[1]); pf++; } #endif - polycache= pc= MEM_callocN(sizeof(short)*poly, "polycache"); - pf= pflist; - for (a=0; amax[cox] < (pflist+c)->min[cox]) break; */ } - while (pc!=polycache) { + while (pc != polycache) { pc--; - mergepolysSimp(pf, pflist+ *pc); + mergepolysSimp(pf, pflist + *pc); } } MEM_freeN(polycache); @@ -1079,32 +1083,32 @@ int BLI_edgefill(const short do_quad_tri_speedup) #if 0 printf("after merge\n"); - pf= pflist; - for (a=1;a<=poly;a++) { - printf("poly:%d edges:%d verts:%d flag: %d\n",a,pf->edges,pf->verts,pf->f); + pf = pflist; + for (a = 1; a <= poly; a++) { + printf("poly:%d edges:%d verts:%d flag: %d\n", a, pf->edges, pf->verts, pf->f); pf++; } #endif /* STEP 5: MAKE TRIANGLES */ - tempve.first= fillvertbase.first; - tempve.last= fillvertbase.last; - temped.first= filledgebase.first; - temped.last= filledgebase.last; - fillvertbase.first=fillvertbase.last= 0; - filledgebase.first=filledgebase.last= 0; + tempve.first = fillvertbase.first; + tempve.last = fillvertbase.last; + temped.first = filledgebase.first; + temped.last = filledgebase.last; + fillvertbase.first = fillvertbase.last = 0; + filledgebase.first = filledgebase.last = 0; - pf= pflist; - for (a=0;aedges>1) { - splitlist(&tempve,&temped,pf->nr); + pf = pflist; + for (a = 0; a < poly; a++) { + if (pf->edges > 1) { + splitlist(&tempve, &temped, pf->nr); totfaces += scanfill(pf); } pf++; } - BLI_movelisttolist(&fillvertbase,&tempve); - BLI_movelisttolist(&filledgebase,&temped); + BLI_movelisttolist(&fillvertbase, &tempve); + BLI_movelisttolist(&filledgebase, &temped); /* FREE */ From 0635f8101c98d74da729d464472a4d9efa09337f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 06:48:57 +0000 Subject: [PATCH 045/156] make scanfill threadsafe (wasnt threadsafe before BMesh merge but before the merge it didn't need to be) - now rendering uses its better if its threadsafe. --- source/blender/blenkernel/intern/displist.c | 17 +- .../blenkernel/intern/editderivedmesh.c | 16 +- source/blender/blenkernel/intern/mesh.c | 16 +- source/blender/blenlib/BLI_scanfill.h | 41 +- source/blender/blenlib/BLI_threads.h | 1 - source/blender/blenlib/intern/scanfill.c | 400 +++++++++--------- source/blender/blenlib/intern/threads.c | 5 - .../blender/bmesh/operators/bmo_triangulate.c | 18 +- source/blender/editors/mesh/editmesh_knife.c | 10 +- .../editors/uvedit/uvedit_unwrap_ops.c | 15 +- .../blender/windowmanager/intern/wm_gesture.c | 15 +- .../windowmanager/intern/wm_init_exit.c | 4 +- source/creator/creator.c | 3 +- 13 files changed, 276 insertions(+), 285 deletions(-) diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index cefc0fba9cd..01d5d6ef2ad 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -416,6 +416,7 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase, i void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal) { + ScanFillContext sf_ctx; ScanFillVert *eve, *v1, *vlast; ScanFillFace *efa; DispList *dlnew=NULL, *dl; @@ -431,7 +432,7 @@ void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal) totvert= 0; nextcol= 0; - BLI_begin_edgefill(); + BLI_begin_edgefill(&sf_ctx); dl= dispbase->first; while (dl) { @@ -448,18 +449,18 @@ void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal) while (a--) { vlast= eve; - eve= BLI_addfillvert(f1); + eve = BLI_addfillvert(&sf_ctx, f1); totvert++; if (vlast==NULL) v1= eve; else { - BLI_addfilledge(vlast, eve); + BLI_addfilledge(&sf_ctx, vlast, eve); } f1+=3; } if (eve!=NULL && v1!=NULL) { - BLI_addfilledge(eve, v1); + BLI_addfilledge(&sf_ctx, eve, v1); } } else if (colnrcol) { @@ -472,7 +473,7 @@ void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal) dl= dl->next; } - if (totvert && (tot= BLI_edgefill(FALSE))) { // XXX (obedit && obedit->actcol)?(obedit->actcol-1):0)) { + if (totvert && (tot= BLI_edgefill(&sf_ctx, FALSE))) { // XXX (obedit && obedit->actcol)?(obedit->actcol-1):0)) { if (tot) { dlnew= MEM_callocN(sizeof(DispList), "filldisplist"); dlnew->type= DL_INDEX3; @@ -486,7 +487,7 @@ void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal) /* vert data */ f1= dlnew->verts; totvert= 0; - eve= fillvertbase.first; + eve= sf_ctx.fillvertbase.first; while (eve) { copy_v3_v3(f1, eve->co); f1+= 3; @@ -499,7 +500,7 @@ void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal) } /* index data */ - efa= fillfacebase.first; + efa = sf_ctx.fillfacebase.first; index= dlnew->index; while (efa) { index[0]= (intptr_t)efa->v1->tmp.l; @@ -517,7 +518,7 @@ void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal) BLI_addhead(to, dlnew); } - BLI_end_edgefill(); + BLI_end_edgefill(&sf_ctx); if (nextcol) { /* stay at current char but fill polys with next material */ diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index 75f6abc6c74..07a43db8560 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -120,6 +120,8 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm) BMLoop *l; int i = 0, j; + ScanFillContext sf_ctx; + #if 0 /* note, we could be clever and re-use this array but would need to ensure * its realloced at some point, for now just free it */ @@ -195,18 +197,18 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm) ScanFillFace *efa; int totfilltri; - BLI_begin_edgefill(); + BLI_begin_edgefill(&sf_ctx); /*scanfill time*/ l = BM_iter_new(&liter, bm, BM_LOOPS_OF_FACE, f); for (j=0; l; l=BM_iter_step(&liter), j++) { /*mark order*/ BM_elem_index_set(l, j); /* set_loop */ - v = BLI_addfillvert(l->v->co); + v = BLI_addfillvert(&sf_ctx, l->v->co); v->tmp.p = l; if (lastv) { - /* e = */ BLI_addfilledge(lastv, v); + /* e = */ BLI_addfilledge(&sf_ctx, lastv, v); } lastv = v; @@ -214,12 +216,12 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm) } /*complete the loop*/ - BLI_addfilledge(firstv, v); + BLI_addfilledge(&sf_ctx, firstv, v); - totfilltri = BLI_edgefill(FALSE); + totfilltri = BLI_edgefill(&sf_ctx, FALSE); BLI_array_growitems(looptris, totfilltri); - for (efa = fillfacebase.first; efa; efa=efa->next) { + for (efa = sf_ctx.fillfacebase.first; efa; efa=efa->next) { BMLoop *l1= efa->v1->tmp.p; BMLoop *l2= efa->v2->tmp.p; BMLoop *l3= efa->v3->tmp.p; @@ -234,7 +236,7 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm) i += 1; } - BLI_end_edgefill(); + BLI_end_edgefill(&sf_ctx); } } diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 2a22324a0ab..b7b9f6b21f4 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -2354,7 +2354,6 @@ int mesh_recalcTessellation(CustomData *fdata, * we can skip copying here */ const int do_face_nor_cpy) { - /* use this to avoid locking pthread for _every_ polygon * and calling the fill function */ @@ -2368,6 +2367,7 @@ int mesh_recalcTessellation(CustomData *fdata, MLoop *ml, *mloop; MFace *mface = NULL, *mf; BLI_array_declare(mface); + ScanFillContext sf_ctx; ScanFillVert *v, *lastv, *firstv; ScanFillFace *f; int *mface_orig_index = NULL; @@ -2461,24 +2461,24 @@ int mesh_recalcTessellation(CustomData *fdata, ml = mloop + mp->loopstart; - BLI_begin_edgefill(); + BLI_begin_edgefill(&sf_ctx); firstv = NULL; lastv = NULL; for (j=0; jtotloop; j++, ml++) { - v = BLI_addfillvert(mvert[ml->v].co); + v = BLI_addfillvert(&sf_ctx, mvert[ml->v].co); v->keyindex = mp->loopstart + j; if (lastv) - BLI_addfilledge(lastv, v); + BLI_addfilledge(&sf_ctx, lastv, v); if (!firstv) firstv = v; lastv = v; } - BLI_addfilledge(lastv, firstv); + BLI_addfilledge(&sf_ctx, lastv, firstv); - totfilltri = BLI_edgefill(FALSE); + totfilltri = BLI_edgefill(&sf_ctx, FALSE); if (totfilltri) { BLI_array_growitems(mface_to_poly_map, totfilltri); BLI_array_growitems(mface, totfilltri); @@ -2486,7 +2486,7 @@ int mesh_recalcTessellation(CustomData *fdata, BLI_array_growitems(mface_orig_index, totfilltri); } - for (f = fillfacebase.first; f; f = f->next, mf++) { + for (f = sf_ctx.fillfacebase.first; f; f = f->next, mf++) { mface_to_poly_map[mface_index] = poly_index; mf= &mface[mface_index]; @@ -2511,7 +2511,7 @@ int mesh_recalcTessellation(CustomData *fdata, } } - BLI_end_edgefill(); + BLI_end_edgefill(&sf_ctx); } } diff --git a/source/blender/blenlib/BLI_scanfill.h b/source/blender/blenlib/BLI_scanfill.h index 6dcc1df41a3..67ff9a88700 100644 --- a/source/blender/blenlib/BLI_scanfill.h +++ b/source/blender/blenlib/BLI_scanfill.h @@ -35,19 +35,31 @@ * \brief Filling meshes. */ -/** - * \attention Defined in scanfill.c - */ -extern struct ListBase fillvertbase; -extern struct ListBase filledgebase; -extern struct ListBase fillfacebase; - struct ScanFillVert; #ifdef __cplusplus extern "C" { #endif +typedef struct ScanFillContext +{ + ListBase fillvertbase; + ListBase filledgebase; + ListBase fillfacebase; + + /* simple optimization for allocating thousands of small memory blocks + * only to be used within loops, and not by one function at a time + * free in the end, with argument '-1' + */ + #define MEM_ELEM_BLOCKSIZE 16384 + struct mem_elements *melem__cur; + int melem__offs; /* the current free address */ + ListBase melem__lb; + + /* private */ + struct ScanFillVertLink *_scdata; +} ScanFillContext; + /* note; changing this also might affect the undo copy in editmesh.c */ typedef struct ScanFillVert { @@ -57,7 +69,8 @@ typedef struct ScanFillVert void *p; intptr_t l; } tmp; - float co[3]; /*vertex location */ + float co[3]; /* vertex location */ + float xy[2]; /* 2D copy of vertex location (using dominant axis) */ int keyindex; /* original index #, for restoring key information */ short poly_nr; unsigned char f, h; @@ -78,16 +91,16 @@ typedef struct ScanFillFace } ScanFillFace; /* scanfill.c: used in displist only... */ -struct ScanFillVert *BLI_addfillvert(const float vec[3]); -struct ScanFillEdge *BLI_addfilledge(struct ScanFillVert *v1, struct ScanFillVert *v2); +struct ScanFillVert *BLI_addfillvert(ScanFillContext *sf_ctx, const float vec[3]); +struct ScanFillEdge *BLI_addfilledge(ScanFillContext *sf_ctx, struct ScanFillVert *v1, struct ScanFillVert *v2); /* Optionally set ScanFillEdge f to this to mark original boundary edges. * Only needed if there are internal diagonal edges passed to BLI_edgefill. */ #define FILLBOUNDARY 1 -int BLI_begin_edgefill(void); -int BLI_edgefill(const short do_quad_tri_speedup); -void BLI_end_edgefill(void); +int BLI_begin_edgefill(ScanFillContext *sf_ctx); +int BLI_edgefill(ScanFillContext *sf_ctx, const short do_quad_tri_speedup); +void BLI_end_edgefill(ScanFillContext *sf_ctx); /* These callbacks are needed to make the lib finction properly */ @@ -109,8 +122,6 @@ void BLI_setErrorCallBack(void (*f)(const char*)); */ void BLI_setInterruptCallBack(int (*f)(void)); -void BLI_scanfill_free(void); - #ifdef __cplusplus } #endif diff --git a/source/blender/blenlib/BLI_threads.h b/source/blender/blenlib/BLI_threads.h index 03bf375a894..8e75a2db629 100644 --- a/source/blender/blenlib/BLI_threads.h +++ b/source/blender/blenlib/BLI_threads.h @@ -76,7 +76,6 @@ int BLI_system_thread_count(void); /* gets the number of threads the system can #define LOCK_OPENGL 5 #define LOCK_NODES 6 #define LOCK_MOVIECLIP 7 -#define LOCK_SCANFILL 8 void BLI_lock_thread(int type); void BLI_unlock_thread(int type); diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index 89ab192c920..69b8f3f3ee7 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -42,7 +42,6 @@ #include "BLI_math.h" #include "BLI_scanfill.h" #include "BLI_utildefines.h" -#include "BLI_threads.h" /* callbacks for errors and interrupts and some goo */ static void (*BLI_localErrorCallBack)(const char *) = NULL; @@ -82,7 +81,7 @@ static int callLocalInterruptCallBack(void) /* local types */ typedef struct PolyFill { int edges, verts; - float min[3], max[3]; + float min_xy[2], max_xy[2]; short f, nr; } PolyFill; @@ -96,14 +95,6 @@ typedef struct ScanFillVertLink { #define COMPLIMIT 0.00003f -static ScanFillVertLink *scdata; - -ListBase fillvertbase = {NULL, NULL}; -ListBase filledgebase = {NULL, NULL}; -ListBase fillfacebase = {NULL, NULL}; - -static int cox, coy; - /* **** FUNCTIONS FOR QSORT *************************** */ @@ -111,10 +102,10 @@ static int vergscdata(const void *a1, const void *a2) { const ScanFillVertLink *x1 = a1, *x2 = a2; - if (x1->v1->co[coy] < x2->v1->co[coy]) return 1; - else if (x1->v1->co[coy] > x2->v1->co[coy]) return -1; - else if (x1->v1->co[cox] > x2->v1->co[cox]) return 1; - else if (x1->v1->co[cox] < x2->v1->co[cox]) return -1; + if (x1->v1->xy[1] < x2->v1->xy[1]) return 1; + else if (x1->v1->xy[1] > x2->v1->xy[1]) return -1; + else if (x1->v1->xy[0] > x2->v1->xy[0]) return 1; + else if (x1->v1->xy[0] < x2->v1->xy[0]) return -1; return 0; } @@ -123,70 +114,61 @@ static int vergpoly(const void *a1, const void *a2) { const PolyFill *x1 = a1, *x2 = a2; - if (x1->min[cox] > x2->min[cox]) return 1; - else if (x1->min[cox] < x2->min[cox]) return -1; - else if (x1->min[coy] > x2->min[coy]) return 1; - else if (x1->min[coy] < x2->min[coy]) return -1; + if (x1->min_xy[0] > x2->min_xy[0]) return 1; + else if (x1->min_xy[0] < x2->min_xy[0]) return -1; + else if (x1->min_xy[1] > x2->min_xy[1]) return 1; + else if (x1->min_xy[1] < x2->min_xy[1]) return -1; return 0; } /* ************* MEMORY MANAGEMENT ************* */ +/* memory management */ struct mem_elements { struct mem_elements *next, *prev; char *data; }; - -/* simple optimization for allocating thousands of small memory blocks - * only to be used within loops, and not by one function at a time - * free in the end, with argument '-1' - */ -#define MEM_ELEM_BLOCKSIZE 16384 -static struct mem_elements *melem__cur = NULL; -static int melem__offs = 0; /* the current free address */ -static ListBase melem__lb = {NULL, NULL}; - -static void *mem_element_new(int size) +static void *mem_element_new(ScanFillContext *sf_ctx, int size) { BLI_assert(!(size > 10000 || size == 0)); /* this is invalid use! */ size = (size + 3) & ~3; /* allocate in units of 4 */ - if (melem__cur && (size + melem__offs < MEM_ELEM_BLOCKSIZE)) { - void *adr = (void *) (melem__cur->data + melem__offs); - melem__offs += size; + if (sf_ctx->melem__cur && (size + sf_ctx->melem__offs < MEM_ELEM_BLOCKSIZE)) { + void *adr = (void *) (sf_ctx->melem__cur->data + sf_ctx->melem__offs); + sf_ctx->melem__offs += size; return adr; } else { - melem__cur = MEM_callocN(sizeof(struct mem_elements), "newmem"); - melem__cur->data = MEM_callocN(MEM_ELEM_BLOCKSIZE, "newmem"); - BLI_addtail(&melem__lb, melem__cur); + sf_ctx->melem__cur = MEM_callocN(sizeof(struct mem_elements), "newmem"); + sf_ctx->melem__cur->data = MEM_callocN(MEM_ELEM_BLOCKSIZE, "newmem"); + BLI_addtail(&sf_ctx->melem__lb, sf_ctx->melem__cur); - melem__offs = size; - return melem__cur->data; + sf_ctx->melem__offs = size; + return sf_ctx->melem__cur->data; } } -static void mem_element_reset(int keep_first) +static void mem_element_reset(ScanFillContext *sf_ctx, int keep_first) { struct mem_elements *first; - if ((first = melem__lb.first)) { /* can be false if first fill fails */ + if ((first = sf_ctx->melem__lb.first)) { /* can be false if first fill fails */ if (keep_first) { - BLI_remlink(&melem__lb, first); + BLI_remlink(&sf_ctx->melem__lb, first); } - melem__cur = melem__lb.first; - while (melem__cur) { - MEM_freeN(melem__cur->data); - melem__cur = melem__cur->next; + sf_ctx->melem__cur = sf_ctx->melem__lb.first; + while (sf_ctx->melem__cur) { + MEM_freeN(sf_ctx->melem__cur->data); + sf_ctx->melem__cur = sf_ctx->melem__cur->next; } - BLI_freelistN(&melem__lb); + BLI_freelistN(&sf_ctx->melem__lb); /*reset the block we're keeping*/ if (keep_first) { - BLI_addtail(&melem__lb, first); + BLI_addtail(&sf_ctx->melem__lb, first); memset(first->data, 0, MEM_ELEM_BLOCKSIZE); } else { @@ -195,34 +177,27 @@ static void mem_element_reset(int keep_first) } } - melem__cur = first; - melem__offs = 0; + sf_ctx->melem__cur = first; + sf_ctx->melem__offs = 0; } -void BLI_end_edgefill(void) +void BLI_end_edgefill(ScanFillContext *sf_ctx) { - mem_element_reset(TRUE); + mem_element_reset(sf_ctx, FALSE); - fillvertbase.first = fillvertbase.last = 0; - filledgebase.first = filledgebase.last = 0; - fillfacebase.first = fillfacebase.last = 0; - - BLI_unlock_thread(LOCK_SCANFILL); -} - -void BLI_scanfill_free(void) -{ - mem_element_reset(FALSE); + sf_ctx->fillvertbase.first = sf_ctx->fillvertbase.last = NULL; + sf_ctx->filledgebase.first = sf_ctx->filledgebase.last = NULL; + sf_ctx->fillfacebase.first = sf_ctx->fillfacebase.last = NULL; } /* **** FILL ROUTINES *************************** */ -ScanFillVert *BLI_addfillvert(const float vec[3]) +ScanFillVert *BLI_addfillvert(ScanFillContext *sf_ctx, const float vec[3]) { ScanFillVert *eve; - eve = mem_element_new(sizeof(ScanFillVert)); - BLI_addtail(&fillvertbase, eve); + eve = mem_element_new(sf_ctx, sizeof(ScanFillVert)); + BLI_addtail(&sf_ctx->fillvertbase, eve); eve->co[0] = vec[0]; eve->co[1] = vec[1]; @@ -231,12 +206,12 @@ ScanFillVert *BLI_addfillvert(const float vec[3]) return eve; } -ScanFillEdge *BLI_addfilledge(ScanFillVert *v1, ScanFillVert *v2) +ScanFillEdge *BLI_addfilledge(ScanFillContext *sf_ctx, ScanFillVert *v1, ScanFillVert *v2) { ScanFillEdge *newed; - newed = mem_element_new(sizeof(ScanFillEdge)); - BLI_addtail(&filledgebase, newed); + newed = mem_element_new(sf_ctx, sizeof(ScanFillEdge)); + BLI_addtail(&sf_ctx->filledgebase, newed); newed->v1 = v1; newed->v2 = v2; @@ -244,13 +219,13 @@ ScanFillEdge *BLI_addfilledge(ScanFillVert *v1, ScanFillVert *v2) return newed; } -static void addfillface(ScanFillVert *v1, ScanFillVert *v2, ScanFillVert *v3) +static void addfillface(ScanFillContext *sf_ctx, ScanFillVert *v1, ScanFillVert *v2, ScanFillVert *v3) { /* does not make edges */ ScanFillFace *evl; - evl = mem_element_new(sizeof(ScanFillFace)); - BLI_addtail(&fillfacebase, evl); + evl = mem_element_new(sf_ctx, sizeof(ScanFillFace)); + BLI_addtail(&sf_ctx->fillfacebase, evl); evl->v1 = v1; evl->v2 = v2; @@ -264,35 +239,35 @@ static int boundisect(PolyFill *pf2, PolyFill *pf1) if (pf1->edges == 0 || pf2->edges == 0) return 0; - if (pf2->max[cox] < pf1->min[cox]) return 0; - if (pf2->max[coy] < pf1->min[coy]) return 0; + if (pf2->max_xy[0] < pf1->min_xy[0]) return 0; + if (pf2->max_xy[1] < pf1->min_xy[1]) return 0; - if (pf2->min[cox] > pf1->max[cox]) return 0; - if (pf2->min[coy] > pf1->max[coy]) return 0; + if (pf2->min_xy[0] > pf1->max_xy[0]) return 0; + if (pf2->min_xy[1] > pf1->max_xy[1]) return 0; /* join */ - if (pf2->max[cox] < pf1->max[cox]) pf2->max[cox] = pf1->max[cox]; - if (pf2->max[coy] < pf1->max[coy]) pf2->max[coy] = pf1->max[coy]; + if (pf2->max_xy[0] < pf1->max_xy[0]) pf2->max_xy[0] = pf1->max_xy[0]; + if (pf2->max_xy[1] < pf1->max_xy[1]) pf2->max_xy[1] = pf1->max_xy[1]; - if (pf2->min[cox] > pf1->min[cox]) pf2->min[cox] = pf1->min[cox]; - if (pf2->min[coy] > pf1->min[coy]) pf2->min[coy] = pf1->min[coy]; + if (pf2->min_xy[0] > pf1->min_xy[0]) pf2->min_xy[0] = pf1->min_xy[0]; + if (pf2->min_xy[1] > pf1->min_xy[1]) pf2->min_xy[1] = pf1->min_xy[1]; return 1; } -static void mergepolysSimp(PolyFill *pf1, PolyFill *pf2) /* add pf2 to pf1 */ +static void mergepolysSimp(ScanFillContext *sf_ctx, PolyFill *pf1, PolyFill *pf2) /* add pf2 to pf1 */ { ScanFillVert *eve; ScanFillEdge *eed; /* replace old poly numbers */ - eve = fillvertbase.first; + eve = sf_ctx->fillvertbase.first; while (eve) { if (eve->poly_nr == pf2->nr) eve->poly_nr = pf1->nr; eve = eve->next; } - eed = filledgebase.first; + eed = sf_ctx->filledgebase.first; while (eed) { if (eed->poly_nr == pf2->nr) eed->poly_nr = pf1->nr; eed = eed->next; @@ -304,20 +279,20 @@ static void mergepolysSimp(PolyFill *pf1, PolyFill *pf2) /* add pf2 to pf1 */ pf1->f = (pf1->f | pf2->f); } -static short testedgeside(const float v1[3], const float v2[3], const float v3[3]) +static short testedgeside(const float v1[2], const float v2[2], const float v3[2]) /* is v3 to the right of v1-v2 ? With exception: v3==v1 || v3==v2 */ { float inp; - inp = (v2[cox] - v1[cox]) * (v1[coy] - v3[coy]) + - (v1[coy] - v2[coy]) * (v1[cox] - v3[cox]); + inp = (v2[0] - v1[0]) * (v1[1] - v3[1]) + + (v1[1] - v2[1]) * (v1[0] - v3[0]); if (inp < 0.0f) { return 0; } else if (inp == 0) { - if (v1[cox] == v3[cox] && v1[coy] == v3[coy]) return 0; - if (v2[cox] == v3[cox] && v2[coy] == v3[coy]) return 0; + if (v1[0] == v3[0] && v1[1] == v3[1]) return 0; + if (v2[0] == v3[0] && v2[1] == v3[1]) return 0; } return 1; } @@ -334,27 +309,27 @@ static short addedgetoscanvert(ScanFillVertLink *sc, ScanFillEdge *eed) return 1; } - x = eed->v1->co[cox]; - y = eed->v1->co[coy]; + x = eed->v1->xy[0]; + y = eed->v1->xy[1]; - fac1 = eed->v2->co[coy] - y; + fac1 = eed->v2->xy[1] - y; if (fac1 == 0.0f) { - fac1 = 1.0e10f * (eed->v2->co[cox] - x); + fac1 = 1.0e10f * (eed->v2->xy[0] - x); } - else fac1 = (x - eed->v2->co[cox]) / fac1; + else fac1 = (x - eed->v2->xy[0]) / fac1; ed = sc->first; while (ed) { if (ed->v2 == eed->v2) return 0; - fac = ed->v2->co[coy] - y; + fac = ed->v2->xy[1] - y; if (fac == 0.0f) { - fac = 1.0e10f * (ed->v2->co[cox] - x); + fac = 1.0e10f * (ed->v2->xy[0] - x); } else { - fac = (x - ed->v2->co[cox]) / fac; + fac = (x - ed->v2->xy[0]) / fac; } if (fac > fac1) break; @@ -368,7 +343,7 @@ static short addedgetoscanvert(ScanFillVertLink *sc, ScanFillEdge *eed) } -static ScanFillVertLink *addedgetoscanlist(ScanFillEdge *eed, int len) +static ScanFillVertLink *addedgetoscanlist(ScanFillContext *sf_ctx, ScanFillEdge *eed, int len) { /* inserts edge at correct location in ScanFillVertLink list */ /* returns sc when edge already exists */ @@ -376,21 +351,21 @@ static ScanFillVertLink *addedgetoscanlist(ScanFillEdge *eed, int len) ScanFillVert *eve; /* which vert is left-top? */ - if (eed->v1->co[coy] == eed->v2->co[coy]) { - if (eed->v1->co[cox] > eed->v2->co[cox]) { + if (eed->v1->xy[1] == eed->v2->xy[1]) { + if (eed->v1->xy[0] > eed->v2->xy[0]) { eve = eed->v1; eed->v1 = eed->v2; eed->v2 = eve; } } - else if (eed->v1->co[coy] < eed->v2->co[coy]) { + else if (eed->v1->xy[1] < eed->v2->xy[1]) { eve = eed->v1; eed->v1 = eed->v2; eed->v2 = eve; } /* find location in list */ scsearch.v1 = eed->v1; - sc = (ScanFillVertLink *)bsearch(&scsearch, scdata, len, + sc = (ScanFillVertLink *)bsearch(&scsearch, sf_ctx->_scdata, len, sizeof(ScanFillVertLink), vergscdata); if (sc == 0) printf("Error in search edge: %p\n", (void *)eed); @@ -404,30 +379,30 @@ static short boundinsideEV(ScanFillEdge *eed, ScanFillVert *eve) { float minx, maxx, miny, maxy; - if (eed->v1->co[cox] < eed->v2->co[cox]) { - minx = eed->v1->co[cox]; - maxx = eed->v2->co[cox]; + if (eed->v1->xy[0] < eed->v2->xy[0]) { + minx = eed->v1->xy[0]; + maxx = eed->v2->xy[0]; } else { - minx = eed->v2->co[cox]; - maxx = eed->v1->co[cox]; + minx = eed->v2->xy[0]; + maxx = eed->v1->xy[0]; } - if (eve->co[cox] >= minx && eve->co[cox] <= maxx) { - if (eed->v1->co[coy] < eed->v2->co[coy]) { - miny = eed->v1->co[coy]; - maxy = eed->v2->co[coy]; + if (eve->xy[0] >= minx && eve->xy[0] <= maxx) { + if (eed->v1->xy[1] < eed->v2->xy[1]) { + miny = eed->v1->xy[1]; + maxy = eed->v2->xy[1]; } else { - miny = eed->v2->co[coy]; - maxy = eed->v1->co[coy]; + miny = eed->v2->xy[1]; + maxy = eed->v1->xy[1]; } - if (eve->co[coy] >= miny && eve->co[coy] <= maxy) return 1; + if (eve->xy[1] >= miny && eve->xy[1] <= maxy) return 1; } return 0; } -static void testvertexnearedge(void) +static void testvertexnearedge(ScanFillContext *sf_ctx) { /* only vertices with ->h==1 are being tested for * being close to an edge, if true insert */ @@ -436,13 +411,13 @@ static void testvertexnearedge(void) ScanFillEdge *eed, *ed1; float dist, vec1[2], vec2[2], vec3[2]; - eve = fillvertbase.first; + eve = sf_ctx->fillvertbase.first; while (eve) { if (eve->h == 1) { - vec3[0] = eve->co[cox]; - vec3[1] = eve->co[coy]; + vec3[0] = eve->xy[0]; + vec3[1] = eve->xy[1]; /* find the edge which has vertex eve */ - ed1 = filledgebase.first; + ed1 = sf_ctx->filledgebase.first; while (ed1) { if (ed1->v1 == eve || ed1->v2 == eve) break; ed1 = ed1->next; @@ -451,7 +426,7 @@ static void testvertexnearedge(void) ed1->v1 = ed1->v2; ed1->v2 = eve; } - eed = filledgebase.first; + eed = sf_ctx->filledgebase.first; while (eed) { if (eve != eed->v1 && eve != eed->v2 && eve->poly_nr == eed->poly_nr) { if (compare_v3v3(eve->co, eed->v1->co, COMPLIMIT)) { @@ -467,15 +442,15 @@ static void testvertexnearedge(void) break; } else { - vec1[0] = eed->v1->co[cox]; - vec1[1] = eed->v1->co[coy]; - vec2[0] = eed->v2->co[cox]; - vec2[1] = eed->v2->co[coy]; + vec1[0] = eed->v1->xy[0]; + vec1[1] = eed->v1->xy[1]; + vec2[0] = eed->v2->xy[0]; + vec2[1] = eed->v2->xy[1]; if (boundinsideEV(eed, eve)) { dist = dist_to_line_v2(vec1, vec2, vec3); if (dist < COMPLIMIT) { /* new edge */ - ed1 = BLI_addfilledge(eed->v1, eve); + ed1 = BLI_addfilledge(sf_ctx, eed->v1, eve); /* printf("fill: vertex near edge %x\n",eve); */ ed1->f = 0; @@ -494,21 +469,21 @@ static void testvertexnearedge(void) } } -static void splitlist(ListBase *tempve, ListBase *temped, short nr) +static void splitlist(ScanFillContext *sf_ctx, ListBase *tempve, ListBase *temped, short nr) { /* everything is in templist, write only poly nr to fillist */ ScanFillVert *eve, *nextve; ScanFillEdge *eed, *nexted; - BLI_movelisttolist(tempve, &fillvertbase); - BLI_movelisttolist(temped, &filledgebase); + BLI_movelisttolist(tempve, &sf_ctx->fillvertbase); + BLI_movelisttolist(temped, &sf_ctx->filledgebase); eve = tempve->first; while (eve) { nextve = eve->next; if (eve->poly_nr == nr) { BLI_remlink(tempve, eve); - BLI_addtail(&fillvertbase, eve); + BLI_addtail(&sf_ctx->fillvertbase, eve); } eve = nextve; } @@ -517,14 +492,14 @@ static void splitlist(ListBase *tempve, ListBase *temped, short nr) nexted = eed->next; if (eed->poly_nr == nr) { BLI_remlink(temped, eed); - BLI_addtail(&filledgebase, eed); + BLI_addtail(&sf_ctx->filledgebase, eed); } eed = nexted; } } -static int scanfill(PolyFill *pf) +static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) { ScanFillVertLink *sc = NULL, *sc1; ScanFillVert *eve, *v1, *v2, *v3; @@ -538,12 +513,12 @@ static int scanfill(PolyFill *pf) /* PRINTS */ #if 0 verts = pf->verts; - eve = fillvertbase.first; + eve = sf_ctx->fillvertbase.first; while (eve) { - printf("vert: %x co: %f %f\n", eve, eve->co[cox], eve->co[coy]); + printf("vert: %x co: %f %f\n", eve, eve->xy[0], eve->xy[1]); eve = eve->next; } - eed = filledgebase.first; + eed = sf_ctx->filledgebase.first; while (eed) { printf("edge: %x verts: %x %x\n", eed, eed->v1, eed->v2); eed = eed->next; @@ -551,10 +526,10 @@ static int scanfill(PolyFill *pf) #endif /* STEP 0: remove zero sized edges */ - eed = filledgebase.first; + eed = sf_ctx->filledgebase.first; while (eed) { - if (eed->v1->co[cox] == eed->v2->co[cox]) { - if (eed->v1->co[coy] == eed->v2->co[coy]) { + if (eed->v1->xy[0] == eed->v2->xy[0]) { + if (eed->v1->xy[1] == eed->v2->xy[1]) { if (eed->v1->f == 255 && eed->v2->f != 255) { eed->v2->f = 255; eed->v2->tmp.v = eed->v1->tmp.v; @@ -578,8 +553,8 @@ static int scanfill(PolyFill *pf) /* STEP 1: make using FillVert and FillEdge lists a sorted * ScanFillVertLink list */ - sc = scdata = (ScanFillVertLink *)MEM_callocN(pf->verts * sizeof(ScanFillVertLink), "Scanfill1"); - eve = fillvertbase.first; + sc = sf_ctx->_scdata = (ScanFillVertLink *)MEM_callocN(pf->verts * sizeof(ScanFillVertLink), "Scanfill1"); + eve = sf_ctx->fillvertbase.first; verts = 0; while (eve) { if (eve->poly_nr == nr) { @@ -593,12 +568,12 @@ static int scanfill(PolyFill *pf) eve = eve->next; } - qsort(scdata, verts, sizeof(ScanFillVertLink), vergscdata); + qsort(sf_ctx->_scdata, verts, sizeof(ScanFillVertLink), vergscdata); - eed = filledgebase.first; + eed = sf_ctx->filledgebase.first; while (eed) { nexted = eed->next; - BLI_remlink(&filledgebase, eed); + BLI_remlink(&sf_ctx->filledgebase, eed); /* This code is for handling zero-length edges that get * collapsed in step 0. It was removed for some time to * fix trunk bug #4544, so if that comes back, this code @@ -614,7 +589,7 @@ static int scanfill(PolyFill *pf) while ((eed->v2->f == 255) && (eed->v2->tmp.v != v2)) eed->v2 = eed->v2->tmp.v; } - if (eed->v1 != eed->v2) addedgetoscanlist(eed, verts); + if (eed->v1 != eed->v2) addedgetoscanlist(sf_ctx, eed, verts); eed = nexted; } @@ -640,7 +615,7 @@ static int scanfill(PolyFill *pf) totface = 0; maxface = 2 * verts; /* 2*verts: based at a filled circle within a triangle */ - sc = scdata; + sc = sf_ctx->_scdata; for (a = 0; a < verts; a++) { /* printf("VERTEX %d %x\n",a,sc->v1); */ ed1 = sc->first; @@ -648,7 +623,7 @@ static int scanfill(PolyFill *pf) nexted = ed1->next; if (ed1->v1->h == 1 || ed1->v2->h == 1) { BLI_remlink((ListBase *)&(sc->first), ed1); - BLI_addtail(&filledgebase, ed1); + BLI_addtail(&sf_ctx->filledgebase, ed1); if (ed1->v1->h > 1) ed1->v1->h--; if (ed1->v2->h > 1) ed1->v2->h--; } @@ -670,7 +645,7 @@ static int scanfill(PolyFill *pf) if (ed2 == 0) { sc->first = sc->last = NULL; /* printf("just 1 edge to vert\n"); */ - BLI_addtail(&filledgebase, ed1); + BLI_addtail(&sf_ctx->filledgebase, ed1); ed1->v2->f = 0; ed1->v1->h--; ed1->v2->h--; @@ -683,18 +658,18 @@ static int scanfill(PolyFill *pf) /* this happens with a serial of overlapping edges */ if (v1 == v2 || v2 == v3) break; /* printf("test verts %x %x %x\n",v1,v2,v3); */ - miny = ( (v1->co[coy]) < (v3->co[coy]) ? (v1->co[coy]) : (v3->co[coy]) ); - /* miny= MIN2(v1->co[coy],v3->co[coy]); */ + miny = ( (v1->xy[1]) < (v3->xy[1]) ? (v1->xy[1]) : (v3->xy[1]) ); + /* miny= MIN2(v1->xy[1],v3->xy[1]); */ sc1 = sc + 1; test = 0; for (b = a + 1; b < verts; b++) { if (sc1->v1->f == 0) { - if (sc1->v1->co[coy] <= miny) break; + if (sc1->v1->xy[1] <= miny) break; - if (testedgeside(v1->co, v2->co, sc1->v1->co)) - if (testedgeside(v2->co, v3->co, sc1->v1->co)) - if (testedgeside(v3->co, v1->co, sc1->v1->co)) { + if (testedgeside(v1->xy, v2->xy, sc1->v1->xy)) + if (testedgeside(v2->xy, v3->xy, sc1->v1->xy)) + if (testedgeside(v3->xy, v1->xy, sc1->v1->xy)) { /* point in triangle */ test = 1; @@ -707,8 +682,8 @@ static int scanfill(PolyFill *pf) /* make new edge, and start over */ /* printf("add new edge %x %x and start again\n",v2,sc1->v1); */ - ed3 = BLI_addfilledge(v2, sc1->v1); - BLI_remlink(&filledgebase, ed3); + ed3 = BLI_addfilledge(sf_ctx, v2, sc1->v1); + BLI_remlink(&sf_ctx->filledgebase, ed3); BLI_insertlinkbefore((ListBase *)&(sc->first), ed2, ed3); ed3->v2->f = 1; ed3->f = 2; @@ -718,31 +693,31 @@ static int scanfill(PolyFill *pf) else { /* new triangle */ /* printf("add face %x %x %x\n",v1,v2,v3); */ - addfillface(v1, v2, v3); + addfillface(sf_ctx, v1, v2, v3); totface++; BLI_remlink((ListBase *)&(sc->first), ed1); - BLI_addtail(&filledgebase, ed1); + BLI_addtail(&sf_ctx->filledgebase, ed1); ed1->v2->f = 0; ed1->v1->h--; ed1->v2->h--; /* ed2 can be removed when it's a boundary edge */ if ((ed2->f == 0 && twoconnected) || (ed2->f == FILLBOUNDARY)) { BLI_remlink((ListBase *)&(sc->first), ed2); - BLI_addtail(&filledgebase, ed2); + BLI_addtail(&sf_ctx->filledgebase, ed2); ed2->v2->f = 0; ed2->v1->h--; ed2->v2->h--; } /* new edge */ - ed3 = BLI_addfilledge(v1, v3); - BLI_remlink(&filledgebase, ed3); + ed3 = BLI_addfilledge(sf_ctx, v1, v3); + BLI_remlink(&sf_ctx->filledgebase, ed3); ed3->f = 2; ed3->v1->h++; ed3->v2->h++; /* printf("add new edge %x %x\n",v1,v3); */ - sc1 = addedgetoscanlist(ed3, verts); + sc1 = addedgetoscanlist(sf_ctx, ed3, verts); if (sc1) { /* ed3 already exists: remove if a boundary */ /* printf("Edge exists\n"); */ @@ -754,7 +729,7 @@ static int scanfill(PolyFill *pf) if ( (ed3->v1 == v1 && ed3->v2 == v3) || (ed3->v1 == v3 && ed3->v2 == v1) ) { if (twoconnected || ed3->f == FILLBOUNDARY) { BLI_remlink((ListBase *)&(sc1->first), ed3); - BLI_addtail(&filledgebase, ed3); + BLI_addtail(&sf_ctx->filledgebase, ed3); ed3->v1->h--; ed3->v2->h--; } @@ -772,7 +747,7 @@ static int scanfill(PolyFill *pf) nexted = ed1->next; if (ed1->v1->h < 2 || ed1->v2->h < 2) { BLI_remlink((ListBase *)&(sc->first), ed1); - BLI_addtail(&filledgebase, ed1); + BLI_addtail(&sf_ctx->filledgebase, ed1); if (ed1->v1->h > 1) ed1->v1->h--; if (ed1->v2->h > 1) ed1->v2->h--; } @@ -783,20 +758,21 @@ static int scanfill(PolyFill *pf) sc++; } - MEM_freeN(scdata); + MEM_freeN(sf_ctx->_scdata); + sf_ctx->_scdata = NULL; return totface; } -int BLI_begin_edgefill(void) +int BLI_begin_edgefill(ScanFillContext *sf_ctx) { - BLI_lock_thread(LOCK_SCANFILL); + memset(sf_ctx, 0, sizeof(*sf_ctx)); return 1; } -int BLI_edgefill(const short do_quad_tri_speedup) +int BLI_edgefill(ScanFillContext *sf_ctx, const short do_quad_tri_speedup) { /* * - fill works with its own lists, so create that first (no faces!) @@ -810,12 +786,13 @@ int BLI_edgefill(const short do_quad_tri_speedup) ScanFillVert *eve; ScanFillEdge *eed, *nexted; PolyFill *pflist, *pf; - float limit, *minp, *maxp, *v1, *v2, norm[3], len; + float limit, *min_xy_p, *max_xy_p, *v1, *v2, norm[3], len; short a, c, poly = 0, ok = 0, toggle = 0; int totfaces = 0; /* total faces added */ + int co_x, co_y; /* reset variables */ - eve = fillvertbase.first; + eve = sf_ctx->fillvertbase.first; a = 0; while (eve) { eve->f = 0; @@ -826,34 +803,34 @@ int BLI_edgefill(const short do_quad_tri_speedup) } if (do_quad_tri_speedup && (a == 3)) { - eve = fillvertbase.first; + eve = sf_ctx->fillvertbase.first; - addfillface(eve, eve->next, eve->next->next); + addfillface(sf_ctx, eve, eve->next, eve->next->next); return 1; } else if (do_quad_tri_speedup && (a == 4)) { float vec1[3], vec2[3]; - eve = fillvertbase.first; + eve = sf_ctx->fillvertbase.first; /* no need to check 'eve->next->next->next' is valid, already counted */ /*use shortest diagonal for quad*/ sub_v3_v3v3(vec1, eve->co, eve->next->next->co); sub_v3_v3v3(vec2, eve->next->co, eve->next->next->next->co); if (dot_v3v3(vec1, vec1) < dot_v3v3(vec2, vec2)) { - addfillface(eve, eve->next, eve->next->next); - addfillface(eve->next->next, eve->next->next->next, eve); + addfillface(sf_ctx, eve, eve->next, eve->next->next); + addfillface(sf_ctx, eve->next->next, eve->next->next->next, eve); } else { - addfillface(eve->next, eve->next->next, eve->next->next->next); - addfillface(eve->next->next->next, eve, eve->next); + addfillface(sf_ctx, eve->next, eve->next->next, eve->next->next->next); + addfillface(sf_ctx, eve->next->next->next, eve, eve->next); } return 2; } /* first test vertices if they are in edges */ /* including resetting of flags */ - eed = filledgebase.first; + eed = sf_ctx->filledgebase.first; while (eed) { eed->poly_nr = 0; eed->v1->f = 1; @@ -862,7 +839,7 @@ int BLI_edgefill(const short do_quad_tri_speedup) eed = eed->next; } - eve = fillvertbase.first; + eve = sf_ctx->fillvertbase.first; while (eve) { if (eve->f & 1) { ok = 1; @@ -878,11 +855,11 @@ int BLI_edgefill(const short do_quad_tri_speedup) /* THIS PART STILL IS PRETTY WEAK! (ton) */ - eve = fillvertbase.last; + eve = sf_ctx->fillvertbase.last; len = 0.0; v1 = eve->co; v2 = 0; - eve = fillvertbase.first; + eve = sf_ctx->fillvertbase.first; limit = 1e-8f; while (eve) { @@ -905,11 +882,14 @@ int BLI_edgefill(const short do_quad_tri_speedup) if (len == 0.0f) return 0; /* no fill possible */ - axis_dominant_v3(&cox, &coy, norm); + axis_dominant_v3(&co_x, &co_y, norm); /* STEP 1: COUNT POLYS */ - eve = fillvertbase.first; + eve = sf_ctx->fillvertbase.first; while (eve) { + eve->xy[0] = eve->co[co_x]; + eve->xy[1] = eve->co[co_y]; + /* get first vertex with no poly number */ if (eve->poly_nr == 0) { poly++; @@ -921,8 +901,8 @@ int BLI_edgefill(const short do_quad_tri_speedup) ok = 0; toggle++; - if (toggle & 1) eed = filledgebase.first; - else eed = filledgebase.last; + if (toggle & 1) eed = sf_ctx->filledgebase.first; + else eed = sf_ctx->filledgebase.last; while (eed) { if (eed->v1->poly_nr == 0 && eed->v2->poly_nr == poly) { @@ -951,7 +931,7 @@ int BLI_edgefill(const short do_quad_tri_speedup) /* printf("amount of poly's: %d\n",poly); */ /* STEP 2: remove loose edges and strings of edges */ - eed = filledgebase.first; + eed = sf_ctx->filledgebase.first; while (eed) { if (eed->v1->h++ > 250) break; if (eed->v2->h++ > 250) break; @@ -964,33 +944,33 @@ int BLI_edgefill(const short do_quad_tri_speedup) } /* does it only for vertices with ->h==1 */ - testvertexnearedge(); + testvertexnearedge(sf_ctx); ok = 1; while (ok) { ok = 0; toggle++; - if (toggle & 1) eed = filledgebase.first; - else eed = filledgebase.last; + if (toggle & 1) eed = sf_ctx->filledgebase.first; + else eed = sf_ctx->filledgebase.last; while (eed) { if (toggle & 1) nexted = eed->next; else nexted = eed->prev; if (eed->v1->h == 1) { eed->v2->h--; - BLI_remlink(&fillvertbase, eed->v1); - BLI_remlink(&filledgebase, eed); + BLI_remlink(&sf_ctx->fillvertbase, eed->v1); + BLI_remlink(&sf_ctx->filledgebase, eed); ok = 1; } else if (eed->v2->h == 1) { eed->v1->h--; - BLI_remlink(&fillvertbase, eed->v2); - BLI_remlink(&filledgebase, eed); + BLI_remlink(&sf_ctx->fillvertbase, eed->v2); + BLI_remlink(&sf_ctx->filledgebase, eed); ok = 1; } eed = nexted; } } - if (filledgebase.first == 0) { + if (sf_ctx->filledgebase.first == 0) { /* printf("All edges removed\n"); */ return 0; } @@ -1012,26 +992,26 @@ int BLI_edgefill(const short do_quad_tri_speedup) pf = pflist; for (a = 1; a <= poly; a++) { pf->nr = a; - pf->min[0] = pf->min[1] = pf->min[2] = 1.0e20; - pf->max[0] = pf->max[1] = pf->max[2] = -1.0e20; + pf->min_xy[0] = pf->min_xy[1] = 1.0e20; + pf->max_xy[0] = pf->max_xy[1] = -1.0e20; pf++; } - eed = filledgebase.first; + eed = sf_ctx->filledgebase.first; while (eed) { pflist[eed->poly_nr - 1].edges++; eed = eed->next; } - eve = fillvertbase.first; + eve = sf_ctx->fillvertbase.first; while (eve) { pflist[eve->poly_nr - 1].verts++; - minp = pflist[eve->poly_nr - 1].min; - maxp = pflist[eve->poly_nr - 1].max; + min_xy_p = pflist[eve->poly_nr - 1].min_xy; + max_xy_p = pflist[eve->poly_nr - 1].max_xy; - minp[cox] = (minp[cox]) < (eve->co[cox]) ? (minp[cox]) : (eve->co[cox]); - minp[coy] = (minp[coy]) < (eve->co[coy]) ? (minp[coy]) : (eve->co[coy]); - maxp[cox] = (maxp[cox]) > (eve->co[cox]) ? (maxp[cox]) : (eve->co[cox]); - maxp[coy] = (maxp[coy]) > (eve->co[coy]) ? (maxp[coy]) : (eve->co[coy]); + min_xy_p[0] = (min_xy_p[0]) < (eve->xy[0]) ? (min_xy_p[0]) : (eve->xy[0]); + min_xy_p[1] = (min_xy_p[1]) < (eve->xy[1]) ? (min_xy_p[1]) : (eve->xy[1]); + max_xy_p[0] = (max_xy_p[0]) > (eve->xy[0]) ? (max_xy_p[0]) : (eve->xy[0]); + max_xy_p[1] = (max_xy_p[1]) > (eve->xy[1]) ? (max_xy_p[1]) : (eve->xy[1]); if (eve->h > 2) pflist[eve->poly_nr - 1].f = 1; eve = eve->next; @@ -1070,12 +1050,12 @@ int BLI_edgefill(const short do_quad_tri_speedup) pc++; } /* only for optimize! */ - /* else if (pf->max[cox] < (pflist+c)->min[cox]) break; */ + /* else if (pf->max_xy[0] < (pflist+c)->min[cox]) break; */ } while (pc != polycache) { pc--; - mergepolysSimp(pf, pflist + *pc); + mergepolysSimp(sf_ctx, pf, pflist + *pc); } } MEM_freeN(polycache); @@ -1092,23 +1072,23 @@ int BLI_edgefill(const short do_quad_tri_speedup) /* STEP 5: MAKE TRIANGLES */ - tempve.first = fillvertbase.first; - tempve.last = fillvertbase.last; - temped.first = filledgebase.first; - temped.last = filledgebase.last; - fillvertbase.first = fillvertbase.last = 0; - filledgebase.first = filledgebase.last = 0; + tempve.first = sf_ctx->fillvertbase.first; + tempve.last = sf_ctx->fillvertbase.last; + temped.first = sf_ctx->filledgebase.first; + temped.last = sf_ctx->filledgebase.last; + sf_ctx->fillvertbase.first = sf_ctx->fillvertbase.last = NULL; + sf_ctx->filledgebase.first = sf_ctx->filledgebase.last = NULL; pf = pflist; for (a = 0; a < poly; a++) { if (pf->edges > 1) { - splitlist(&tempve, &temped, pf->nr); - totfaces += scanfill(pf); + splitlist(sf_ctx, &tempve, &temped, pf->nr); + totfaces += scanfill(sf_ctx, pf); } pf++; } - BLI_movelisttolist(&fillvertbase, &tempve); - BLI_movelisttolist(&filledgebase, &temped); + BLI_movelisttolist(&sf_ctx->fillvertbase, &tempve); + BLI_movelisttolist(&sf_ctx->filledgebase, &temped); /* FREE */ diff --git a/source/blender/blenlib/intern/threads.c b/source/blender/blenlib/intern/threads.c index 19d9c2a9c65..05d8ded7764 100644 --- a/source/blender/blenlib/intern/threads.c +++ b/source/blender/blenlib/intern/threads.c @@ -115,7 +115,6 @@ static pthread_mutex_t _rcache_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t _opengl_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t _nodes_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t _movieclip_lock = PTHREAD_MUTEX_INITIALIZER; -static pthread_mutex_t _scanfill_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_t mainid; static int thread_levels= 0; /* threads can be invoked inside threads */ @@ -354,8 +353,6 @@ void BLI_lock_thread(int type) pthread_mutex_lock(&_nodes_lock); else if (type==LOCK_MOVIECLIP) pthread_mutex_lock(&_movieclip_lock); - else if (type == LOCK_SCANFILL) - pthread_mutex_lock(&_scanfill_lock); } void BLI_unlock_thread(int type) @@ -376,8 +373,6 @@ void BLI_unlock_thread(int type) pthread_mutex_unlock(&_nodes_lock); else if (type==LOCK_MOVIECLIP) pthread_mutex_unlock(&_movieclip_lock); - else if (type == LOCK_SCANFILL) - pthread_mutex_unlock(&_scanfill_lock); } /* Mutex Locks */ diff --git a/source/blender/bmesh/operators/bmo_triangulate.c b/source/blender/bmesh/operators/bmo_triangulate.c index 0f7c45470e9..7d07dc075da 100644 --- a/source/blender/bmesh/operators/bmo_triangulate.c +++ b/source/blender/bmesh/operators/bmo_triangulate.c @@ -25,11 +25,12 @@ */ #include "MEM_guardedalloc.h" +#include "DNA_listBase.h" -#include "BLI_scanfill.h" #include "BLI_math.h" #include "BLI_array.h" #include "BLI_smallhash.h" +#include "BLI_scanfill.h" #include "bmesh.h" #include "intern/bmesh_private.h" @@ -164,6 +165,7 @@ void bmo_triangle_fill_exec(BMesh *bm, BMOperator *op) BMOIter siter; BMEdge *e; BMOperator bmop; + ScanFillContext sf_ctx; /* ScanFillEdge *eed; */ /* UNUSED */ ScanFillVert *eve, *v1, *v2; ScanFillFace *efa; @@ -171,32 +173,32 @@ void bmo_triangle_fill_exec(BMesh *bm, BMOperator *op) BLI_smallhash_init(&hash); - BLI_begin_edgefill(); + BLI_begin_edgefill(&sf_ctx); BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { BMO_elem_flag_enable(bm, e, EDGE_MARK); if (!BLI_smallhash_haskey(&hash, (uintptr_t)e->v1)) { - eve = BLI_addfillvert(e->v1->co); + eve = BLI_addfillvert(&sf_ctx, e->v1->co); eve->tmp.p = e->v1; BLI_smallhash_insert(&hash, (uintptr_t)e->v1, eve); } if (!BLI_smallhash_haskey(&hash, (uintptr_t)e->v2)) { - eve = BLI_addfillvert(e->v2->co); + eve = BLI_addfillvert(&sf_ctx, e->v2->co); eve->tmp.p = e->v2; BLI_smallhash_insert(&hash, (uintptr_t)e->v2, eve); } v1 = BLI_smallhash_lookup(&hash, (uintptr_t)e->v1); v2 = BLI_smallhash_lookup(&hash, (uintptr_t)e->v2); - /* eed = */ BLI_addfilledge(v1, v2); + /* eed = */ BLI_addfilledge(&sf_ctx, v1, v2); /* eed->tmp.p = e; */ /* UNUSED */ } - BLI_edgefill(FALSE); + BLI_edgefill(&sf_ctx, FALSE); - for (efa = fillfacebase.first; efa; efa = efa->next) { + for (efa = sf_ctx.fillfacebase.first; efa; efa = efa->next) { BMFace *f = BM_face_create_quad_tri(bm, efa->v1->tmp.p, efa->v2->tmp.p, efa->v3->tmp.p, NULL, NULL, TRUE); @@ -211,7 +213,7 @@ void bmo_triangle_fill_exec(BMesh *bm, BMOperator *op) } } - BLI_end_edgefill(); + BLI_end_edgefill(&sf_ctx); BLI_smallhash_release(&hash); /* clean up fill */ diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 4ba8ff0492c..bba5578ccc1 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -1824,11 +1824,11 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) if (face_nets[i].first) BMO_elem_flag_enable(bm, f, DEL); - BLI_begin_edgefill(); + BLI_begin_edgefill(&sf_ctx); for (entry = face_nets[i].first; entry; entry = entry->next) { if (!BLI_smallhash_haskey(hash, (intptr_t)entry->kfe->v1)) { - eve = BLI_addfillvert(entry->kfe->v1->v->co); + eve = BLI_addfillvert(&sf_ctx, entry->kfe->v1->v->co); eve->poly_nr = 0; rnd_offset_co(eve->co, rndscale); eve->tmp.p = entry->kfe->v1->v; @@ -1836,7 +1836,7 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) } if (!BLI_smallhash_haskey(hash, (intptr_t)entry->kfe->v2)) { - eve = BLI_addfillvert(entry->kfe->v2->v->co); + eve = BLI_addfillvert(&sf_ctx, entry->kfe->v2->v->co); eve->poly_nr = 0; rnd_offset_co(eve->co, rndscale); eve->tmp.p = entry->kfe->v2->v; @@ -1858,7 +1858,7 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) if (eve->poly_nr > 1 && lasteve->poly_nr > 1) { ScanFillEdge *eed; - eed = BLI_addfilledge(lasteve, eve); + eed = BLI_addfilledge(&sf_ctx, lasteve, eve); if (entry->kfe->oe) eed->f = FILLBOUNDARY; /* mark as original boundary edge */ @@ -1873,7 +1873,7 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) } } - BLI_edgefill(FALSE); + BLI_edgefill(&sf_ctx, FALSE); for (efa = fillfacebase.first; efa; efa = efa->next) { BMVert *v1 = efa->v3->tmp.p, *v2 = efa->v2->tmp.p, *v3 = efa->v1->tmp.p; diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index e51b119253f..5b3c4f9cd97 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -186,6 +186,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, short implicit, short fill, short sel, short correct_aspect) { + ScanFillContext sf_ctx; ParamHandle *handle; BMFace *efa; BMLoop *l; @@ -261,13 +262,13 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, } else { /* ngon - scanfill time! */ - BLI_begin_edgefill(); + BLI_begin_edgefill(&sf_ctx); firstv = lastv = NULL; BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { int i; - v = BLI_addfillvert(l->v->co); + v = BLI_addfillvert(&sf_ctx, l->v->co); /* add small random offset */ for (i = 0; i < 3; i++) { @@ -277,7 +278,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, v->tmp.p = l; if (lastv) { - BLI_addfilledge(lastv, v); + BLI_addfilledge(&sf_ctx, lastv, v); } lastv = v; @@ -285,10 +286,10 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, firstv = v; } - BLI_addfilledge(firstv, v); + BLI_addfilledge(&sf_ctx, firstv, v); - BLI_edgefill(TRUE); - for (sefa = fillfacebase.first; sefa; sefa = sefa->next) { + BLI_edgefill(&sf_ctx, TRUE); + for (sefa = sf_ctx.fillfacebase.first; sefa; sefa = sefa->next) { ls[0] = sefa->v1->tmp.p; ls[1] = sefa->v2->tmp.p; ls[2] = sefa->v3->tmp.p; @@ -305,7 +306,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, param_face_add(handle, key, 3, vkeys, co, uv, pin, select); } - BLI_end_edgefill(); + BLI_end_edgefill(&sf_ctx); } } diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index efc22f95cbc..0add9106872 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -230,12 +230,13 @@ static void wm_gesture_draw_circle(wmGesture *gt) static void draw_filled_lasso(wmGesture *gt) { + ScanFillContext sf_ctx; ScanFillVert *v = NULL, *lastv = NULL, *firstv = NULL; ScanFillFace *efa; short *lasso = (short *)gt->customdata; int i; - BLI_begin_edgefill(); + BLI_begin_edgefill(&sf_ctx); for (i = 0; i < gt->points; i++, lasso += 2) { float co[3]; @@ -243,22 +244,22 @@ static void draw_filled_lasso(wmGesture *gt) co[1] = (float)lasso[1]; co[2] = 0.0f; - v = BLI_addfillvert(co); + v = BLI_addfillvert(&sf_ctx, co); if (lastv) - /* e = */ /* UNUSED */ BLI_addfilledge(lastv, v); + /* e = */ /* UNUSED */ BLI_addfilledge(&sf_ctx, lastv, v); lastv = v; if (firstv == NULL) firstv = v; } /* highly unlikely this will fail, but could crash if (gt->points == 0) */ if (firstv) { - BLI_addfilledge(firstv, v); - BLI_edgefill(FALSE); + BLI_addfilledge(&sf_ctx, firstv, v); + BLI_edgefill(&sf_ctx, FALSE); glEnable(GL_BLEND); glColor4f(1.0, 1.0, 1.0, 0.05); glBegin(GL_TRIANGLES); - for (efa = fillfacebase.first; efa; efa = efa->next) { + for (efa = sf_ctx.fillfacebase.first; efa; efa = efa->next) { glVertex2fv(efa->v1->co); glVertex2fv(efa->v2->co); glVertex2fv(efa->v3->co); @@ -266,7 +267,7 @@ static void draw_filled_lasso(wmGesture *gt) glEnd(); glDisable(GL_BLEND); - BLI_end_edgefill(); + BLI_end_edgefill(&sf_ctx); } } diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 39651cea3ab..0c95ccea5d7 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -63,7 +63,7 @@ #include "BKE_tracking.h" /* free tracking clipboard */ #include "BLI_listbase.h" -#include "BLI_scanfill.h" +// #include "BLI_scanfill.h" #include "BLI_string.h" #include "BLI_utildefines.h" @@ -383,8 +383,6 @@ void WM_exit_ext(bContext *C, const short do_python) BLF_exit(); - BLI_scanfill_free(); /* the order this is called doesn't matter */ - #ifdef WITH_INTERNATIONAL BLF_free_unifont(); #endif diff --git a/source/creator/creator.c b/source/creator/creator.c index 140fdc7ff7e..13daeec87be 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -59,7 +59,6 @@ #include "BLI_args.h" #include "BLI_threads.h" -#include "BLI_scanfill.h" /* for BLI_setErrorCallBack, TODO, move elsewhere */ #include "BLI_utildefines.h" #include "BLI_callbacks.h" @@ -103,6 +102,8 @@ #include "GPU_draw.h" #include "GPU_extensions.h" +#include "BLI_scanfill.h" /* for BLI_setErrorCallBack, TODO, move elsewhere */ + #ifdef WITH_BUILDINFO_HEADER #define BUILD_DATE #endif From 52023f9e88f7859c75720cf175e74635a83b05c7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 08:04:12 +0000 Subject: [PATCH 046/156] bmesh todos: - curve undo now runs ED_curve_updateAnimPaths() again. - comment out unneeded index setting. --- source/blender/bmesh/operators/bmo_dissolve.c | 2 +- source/blender/bmesh/operators/bmo_mirror.c | 4 -- source/blender/editors/curve/editcurve.c | 42 ++++++++----------- source/blender/editors/include/ED_curve.h | 2 +- 4 files changed, 20 insertions(+), 30 deletions(-) diff --git a/source/blender/bmesh/operators/bmo_dissolve.c b/source/blender/bmesh/operators/bmo_dissolve.c index 7edacb45b34..29796b7dac4 100644 --- a/source/blender/bmesh/operators/bmo_dissolve.c +++ b/source/blender/bmesh/operators/bmo_dissolve.c @@ -52,7 +52,7 @@ static int UNUSED_FUNCTION(check_hole_in_region)(BMesh *bm, BMFace *f) BMW_init(®walker, bm, BMW_ISLAND, BMW_MASK_NOP, BMW_MASK_NOP, FACE_MARK, - BMW_FLAG_NOP, /* BMESH_TODO - should be BMW_FLAG_TEST_HIDDEN ? */ + BMW_FLAG_NOP, BMW_NIL_LAY); f2 = BMW_begin(®walker, f); diff --git a/source/blender/bmesh/operators/bmo_mirror.c b/source/blender/bmesh/operators/bmo_mirror.c index 28c9c53fa8a..1b6d64073c0 100644 --- a/source/blender/bmesh/operators/bmo_mirror.c +++ b/source/blender/bmesh/operators/bmo_mirror.c @@ -73,11 +73,7 @@ void bmo_mirror_exec(BMesh *bm, BMOperator *op) BMO_ITER(v, &siter, bm, &dupeop, "newout", BM_VERT) { BLI_array_growone(vmap); vmap[i] = v; - - /* BMESH_TODO, double check this is being used, calling following operators will overwrite anyway - campbell */ - BM_elem_index_set(v2, i); /* set_dirty! */ v2 = BM_iter_step(&iter); - i++; } bm->elem_index_dirty |= BM_VERT; diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index 9190cd940d6..2e9aa8ec675 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -1015,9 +1015,8 @@ static void calc_shapeKeys(Object *obedit) /* ********************* Amimation data *************** */ -static int curve_is_animated(Object *ob) +static int curve_is_animated(Curve *cu) { - Curve *cu= (Curve*)ob->data; AnimData *ad= BKE_animdata_from_id(&cu->id); return ad && (ad->action || ad->drivers.first); @@ -1063,10 +1062,9 @@ static void fcurve_remove(AnimData *ad, ListBase *orig_curves, FCurve *fcu) free_fcurve(fcu); } -static void curve_rename_fcurves(Object *obedit, ListBase *orig_curves) +static void curve_rename_fcurves(Curve *cu, ListBase *orig_curves) { int nu_index= 0, a, pt_index; - Curve *cu= (Curve*)obedit->data; EditNurb *editnurb= cu->editnurb; Nurb *nu= editnurb->nurbs.first; CVKeyIndex *keyIndex; @@ -1178,17 +1176,16 @@ static void curve_rename_fcurves(Object *obedit, ListBase *orig_curves) } /* return 0 if animation data wasn't changed, 1 otherwise */ -int ED_curve_updateAnimPaths(Object *obedit) +int ED_curve_updateAnimPaths(Curve *cu) { - Curve *cu= (Curve*)obedit->data; AnimData *ad= BKE_animdata_from_id(&cu->id); - if (!curve_is_animated(obedit)) return 0; + if (!curve_is_animated(cu)) return 0; if (ad->action) - curve_rename_fcurves(obedit, &ad->action->curves); + curve_rename_fcurves(cu, &ad->action->curves); - curve_rename_fcurves(obedit, &ad->drivers); + curve_rename_fcurves(cu, &ad->drivers); return 1; } @@ -1221,7 +1218,7 @@ void load_editNurb(Object *obedit) cu->nurb= newnurb; calc_shapeKeys(obedit); - ED_curve_updateAnimPaths(obedit); + ED_curve_updateAnimPaths(obedit->data); freeNurblist(&oldnurb); } @@ -1702,7 +1699,7 @@ static int deleteflagNurb(bContext *C, wmOperator *UNUSED(op), int flag) nu= next; } - if (ED_curve_updateAnimPaths(obedit)) + if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, obedit); return OPERATOR_FINISHED; @@ -2017,7 +2014,7 @@ static int switch_direction_exec(bContext *C, wmOperator *UNUSED(op)) keyData_switchDirectionNurb(cu, nu); } - if (ED_curve_updateAnimPaths(obedit)) + if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, obedit); DAG_id_tag_update(obedit->data, 0); @@ -3191,7 +3188,7 @@ static int subdivide_exec(bContext *C, wmOperator *op) subdividenurb(obedit, number_cuts); - if (ED_curve_updateAnimPaths(obedit)) + if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, obedit); WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data); @@ -3512,7 +3509,7 @@ static int set_spline_type_exec(bContext *C, wmOperator *op) } if (changed) { - if (ED_curve_updateAnimPaths(obedit)) + if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, obedit); DAG_id_tag_update(obedit->data, 0); @@ -4104,7 +4101,7 @@ static int make_segment_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - if (ED_curve_updateAnimPaths(obedit)) + if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, obedit); WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data); @@ -4323,7 +4320,7 @@ static int spin_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - if (ED_curve_updateAnimPaths(obedit)) + if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, obedit); WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data); @@ -4626,7 +4623,7 @@ static int addvert_Nurb(bContext *C, short mode, float location[3]) if (ok) { test2DNurb(nu); - if (ED_curve_updateAnimPaths(obedit)) + if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, obedit); WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data); @@ -4719,7 +4716,7 @@ static int extrude_exec(bContext *C, wmOperator *UNUSED(op)) } else { if (extrudeflagNurb(editnurb, 1)) { /* '1'= flag */ - if (ED_curve_updateAnimPaths(obedit)) + if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, obedit); WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data); @@ -5640,7 +5637,7 @@ static int delete_exec(bContext *C, wmOperator *op) keyIndex_delNurbList(editnurb, nubase); freeNurblist(nubase); - if (ED_curve_updateAnimPaths(obedit)) + if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, obedit); } @@ -5941,7 +5938,7 @@ static int delete_exec(bContext *C, wmOperator *op) freeNurblist(nubase); } - if (ED_curve_updateAnimPaths(obedit)) + if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, obedit); WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data); @@ -6987,10 +6984,7 @@ static void undoCurve_to_editCurve(void *ucu, void *UNUSED(edata), void *cu_v) cu->lastsel= lastsel; cu->actnu= undoCurve->actnu; - /* BMESH_TODO */ -#if 0 - ED_curve_updateAnimPaths(obedit); -#endif + ED_curve_updateAnimPaths(cu); } static void *editCurve_to_undoCurve(void *UNUSED(edata), void *cu_v) diff --git a/source/blender/editors/include/ED_curve.h b/source/blender/editors/include/ED_curve.h index bffb5543460..50e43c46de5 100644 --- a/source/blender/editors/include/ED_curve.h +++ b/source/blender/editors/include/ED_curve.h @@ -87,7 +87,7 @@ int CU_select_nth(struct Object *obedit, int nth); void ED_curve_beztcpy(struct EditNurb *editnurb, struct BezTriple *dst, struct BezTriple *src, int count); void ED_curve_bpcpy(struct EditNurb *editnurb, struct BPoint *dst, struct BPoint *src, int count); -int ED_curve_updateAnimPaths(struct Object *obedit); +int ED_curve_updateAnimPaths(struct Curve *cu); int ED_curve_actSelection(struct Curve *cu, float center[3]); From 9cf2e5baf64a927325efeba5ed20c20dfec3da57 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 16 Apr 2012 08:11:07 +0000 Subject: [PATCH 047/156] Fix windows compile issue with missing isnan. --- source/blender/modifiers/intern/MOD_remesh.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/modifiers/intern/MOD_remesh.c b/source/blender/modifiers/intern/MOD_remesh.c index ea3912afad5..d408e5a3bee 100644 --- a/source/blender/modifiers/intern/MOD_remesh.c +++ b/source/blender/modifiers/intern/MOD_remesh.c @@ -26,6 +26,7 @@ #include "MEM_guardedalloc.h" +#include "BLI_math_base.h" #include "BLI_math_vector.h" #include "BLI_utildefines.h" From 93df58160e56f81bb588a7df6a3a3d3d77365ce5 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 16 Apr 2012 08:35:21 +0000 Subject: [PATCH 048/156] Fix #30966: cycles nan mesh vertices got set to (0, 0, 0), now remove them instead. --- intern/cycles/app/cycles_xml.cpp | 6 ++--- intern/cycles/kernel/kernel_bvh.h | 6 ++--- intern/cycles/kernel/kernel_camera.h | 16 ++++++------- intern/cycles/kernel/kernel_mbvh.h | 2 +- intern/cycles/kernel/kernel_object.h | 2 +- intern/cycles/kernel/kernel_passes.h | 2 +- intern/cycles/kernel/kernel_qbvh.h | 6 ++--- intern/cycles/kernel/svm/svm_camera.h | 2 +- intern/cycles/kernel/svm/svm_mapping.h | 2 +- intern/cycles/kernel/svm/svm_tex_coord.h | 30 ++++++++++++------------ intern/cycles/render/camera.cpp | 8 +++---- intern/cycles/render/light.cpp | 6 ++--- intern/cycles/render/object.cpp | 8 +++---- intern/cycles/subd/subd_dice.cpp | 2 +- intern/cycles/subd/subd_split.cpp | 2 +- intern/cycles/util/util_boundbox.h | 6 ++--- intern/cycles/util/util_transform.h | 10 +++++++- 17 files changed, 62 insertions(+), 54 deletions(-) diff --git a/intern/cycles/app/cycles_xml.cpp b/intern/cycles/app/cycles_xml.cpp index b93f61b98d5..b954ff45e27 100644 --- a/intern/cycles/app/cycles_xml.cpp +++ b/intern/cycles/app/cycles_xml.cpp @@ -724,7 +724,7 @@ static void xml_read_patch(const XMLReadState& state, pugi::xml_node node) LinearQuadPatch *bpatch = new LinearQuadPatch(); for(int i = 0; i < 4; i++) - P[i] = transform(&state.tfm, P[i]); + P[i] = transform_point(&state.tfm, P[i]); memcpy(bpatch->hull, &P[0], sizeof(bpatch->hull)); patch = bpatch; @@ -738,7 +738,7 @@ static void xml_read_patch(const XMLReadState& state, pugi::xml_node node) BicubicPatch *bpatch = new BicubicPatch(); for(int i = 0; i < 16; i++) - P[i] = transform(&state.tfm, P[i]); + P[i] = transform_point(&state.tfm, P[i]); memcpy(bpatch->hull, &P[0], sizeof(bpatch->hull)); patch = bpatch; @@ -777,7 +777,7 @@ static void xml_read_light(const XMLReadState& state, pugi::xml_node node) Light *light = new Light(); light->shader = state.shader; xml_read_float3(&light->co, node, "P"); - light->co = transform(&state.tfm, light->co); + light->co = transform_point(&state.tfm, light->co); state.scene->lights.push_back(light); } diff --git a/intern/cycles/kernel/kernel_bvh.h b/intern/cycles/kernel/kernel_bvh.h index 35215fd0f9f..523ae8ae926 100644 --- a/intern/cycles/kernel/kernel_bvh.h +++ b/intern/cycles/kernel/kernel_bvh.h @@ -59,7 +59,7 @@ __device_inline void bvh_instance_push(KernelGlobals *kg, int object, const Ray { Transform tfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM); - *P = transform(&tfm, ray->P); + *P = transform_point(&tfm, ray->P); float3 dir = transform_direction(&tfm, ray->D); @@ -351,7 +351,7 @@ __device_inline float3 bvh_triangle_refine(KernelGlobals *kg, const Intersection if(isect->object != ~0) { Transform tfm = object_fetch_transform(kg, isect->object, OBJECT_INVERSE_TRANSFORM); - P = transform(&tfm, P); + P = transform_point(&tfm, P); D = transform_direction(&tfm, D*t); D = normalize_len(D, &t); } @@ -367,7 +367,7 @@ __device_inline float3 bvh_triangle_refine(KernelGlobals *kg, const Intersection if(isect->object != ~0) { Transform tfm = object_fetch_transform(kg, isect->object, OBJECT_TRANSFORM); - P = transform(&tfm, P); + P = transform_point(&tfm, P); } return P; diff --git a/intern/cycles/kernel/kernel_camera.h b/intern/cycles/kernel/kernel_camera.h index 0460765fe86..58c482212df 100644 --- a/intern/cycles/kernel/kernel_camera.h +++ b/intern/cycles/kernel/kernel_camera.h @@ -39,7 +39,7 @@ __device void camera_sample_perspective(KernelGlobals *kg, float raster_x, float { /* create ray form raster position */ Transform rastertocamera = kernel_data.cam.rastertocamera; - float3 Pcamera = transform(&rastertocamera, make_float3(raster_x, raster_y, 0.0f)); + float3 Pcamera = transform_perspective(&rastertocamera, make_float3(raster_x, raster_y, 0.0f)); ray->P = make_float3(0.0f, 0.0f, 0.0f); ray->D = Pcamera; @@ -63,7 +63,7 @@ __device void camera_sample_perspective(KernelGlobals *kg, float raster_x, float /* transform ray from camera to world */ Transform cameratoworld = kernel_data.cam.cameratoworld; - ray->P = transform(&cameratoworld, ray->P); + ray->P = transform_point(&cameratoworld, ray->P); ray->D = transform_direction(&cameratoworld, ray->D); ray->D = normalize(ray->D); @@ -93,7 +93,7 @@ __device void camera_sample_orthographic(KernelGlobals *kg, float raster_x, floa { /* create ray form raster position */ Transform rastertocamera = kernel_data.cam.rastertocamera; - float3 Pcamera = transform(&rastertocamera, make_float3(raster_x, raster_y, 0.0f)); + float3 Pcamera = transform_perspective(&rastertocamera, make_float3(raster_x, raster_y, 0.0f)); ray->P = Pcamera; ray->D = make_float3(0.0f, 0.0f, 1.0f); @@ -101,7 +101,7 @@ __device void camera_sample_orthographic(KernelGlobals *kg, float raster_x, floa /* transform ray from camera to world */ Transform cameratoworld = kernel_data.cam.cameratoworld; - ray->P = transform(&cameratoworld, ray->P); + ray->P = transform_point(&cameratoworld, ray->P); ray->D = transform_direction(&cameratoworld, ray->D); ray->D = normalize(ray->D); @@ -127,7 +127,7 @@ __device void camera_sample_orthographic(KernelGlobals *kg, float raster_x, floa __device void camera_sample_environment(KernelGlobals *kg, float raster_x, float raster_y, Ray *ray) { Transform rastertocamera = kernel_data.cam.rastertocamera; - float3 Pcamera = transform(&rastertocamera, make_float3(raster_x, raster_y, 0.0f)); + float3 Pcamera = transform_perspective(&rastertocamera, make_float3(raster_x, raster_y, 0.0f)); /* create ray form raster position */ ray->P = make_float3(0.0, 0.0f, 0.0f); @@ -136,7 +136,7 @@ __device void camera_sample_environment(KernelGlobals *kg, float raster_x, float /* transform ray from camera to world */ Transform cameratoworld = kernel_data.cam.cameratoworld; - ray->P = transform(&cameratoworld, ray->P); + ray->P = transform_point(&cameratoworld, ray->P); ray->D = transform_direction(&cameratoworld, ray->D); ray->D = normalize(ray->D); @@ -145,10 +145,10 @@ __device void camera_sample_environment(KernelGlobals *kg, float raster_x, float ray->dP.dx = make_float3(0.0f, 0.0f, 0.0f); ray->dP.dy = make_float3(0.0f, 0.0f, 0.0f); - Pcamera = transform(&rastertocamera, make_float3(raster_x + 1.0f, raster_y, 0.0f)); + Pcamera = transform_perspective(&rastertocamera, make_float3(raster_x + 1.0f, raster_y, 0.0f)); ray->dD.dx = normalize(transform_direction(&cameratoworld, equirectangular_to_direction(Pcamera.x, Pcamera.y))) - ray->D; - Pcamera = transform(&rastertocamera, make_float3(raster_x, raster_y + 1.0f, 0.0f)); + Pcamera = transform_perspective(&rastertocamera, make_float3(raster_x, raster_y + 1.0f, 0.0f)); ray->dD.dy = normalize(transform_direction(&cameratoworld, equirectangular_to_direction(Pcamera.x, Pcamera.y))) - ray->D; #endif diff --git a/intern/cycles/kernel/kernel_mbvh.h b/intern/cycles/kernel/kernel_mbvh.h index 3995e782abd..ccbd3d069b4 100644 --- a/intern/cycles/kernel/kernel_mbvh.h +++ b/intern/cycles/kernel/kernel_mbvh.h @@ -61,7 +61,7 @@ __device void mbvh_instance_push(KernelGlobals *kg, int object, MBVHRay *ray) { Transform tfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM); - ray->P = transform(&tfm, ray->origP); + ray->P = transform_point(&tfm, ray->origP); float3 dir = ray->origD; diff --git a/intern/cycles/kernel/kernel_object.h b/intern/cycles/kernel/kernel_object.h index 318a6fea489..b676f58e5d4 100644 --- a/intern/cycles/kernel/kernel_object.h +++ b/intern/cycles/kernel/kernel_object.h @@ -42,7 +42,7 @@ __device_inline Transform object_fetch_transform(KernelGlobals *kg, int object, __device_inline void object_position_transform(KernelGlobals *kg, int object, float3 *P) { Transform tfm = object_fetch_transform(kg, object, OBJECT_TRANSFORM); - *P = transform(&tfm, *P); + *P = transform_point(&tfm, *P); } __device_inline void object_normal_transform(KernelGlobals *kg, int object, float3 *N) diff --git a/intern/cycles/kernel/kernel_passes.h b/intern/cycles/kernel/kernel_passes.h index d195af293b7..fd4ee17cdc1 100644 --- a/intern/cycles/kernel/kernel_passes.h +++ b/intern/cycles/kernel/kernel_passes.h @@ -53,7 +53,7 @@ __device_inline void kernel_write_data_passes(KernelGlobals *kg, __global float if(sample == 0) { if(flag & PASS_DEPTH) { Transform tfm = kernel_data.cam.worldtocamera; - float depth = len(transform(&tfm, sd->P)); + float depth = len(transform_point(&tfm, sd->P)); kernel_write_pass_float(buffer + kernel_data.film.pass_depth, sample, depth); } diff --git a/intern/cycles/kernel/kernel_qbvh.h b/intern/cycles/kernel/kernel_qbvh.h index 96e68d797dd..525b616921d 100644 --- a/intern/cycles/kernel/kernel_qbvh.h +++ b/intern/cycles/kernel/kernel_qbvh.h @@ -50,7 +50,7 @@ __device_inline void qbvh_instance_push(KernelGlobals *kg, int object, const Ray { Transform tfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM); - *P = transform(&tfm, ray->P); + *P = transform_point(&tfm, ray->P); float3 dir = transform_direction(&tfm, ray->D); @@ -384,7 +384,7 @@ __device_inline float3 bvh_triangle_refine(KernelGlobals *kg, const Intersection if(isect->object != ~0) { Transform tfm = object_fetch_transform(kg, isect->object, OBJECT_INVERSE_TRANSFORM); - P = transform(&tfm, P); + P = transform_point(&tfm, P); D = transform_direction(&tfm, D*t); D = normalize_len(D, &t); } @@ -400,7 +400,7 @@ __device_inline float3 bvh_triangle_refine(KernelGlobals *kg, const Intersection if(isect->object != ~0) { Transform tfm = object_fetch_transform(kg, isect->object, OBJECT_TRANSFORM); - P = transform(&tfm, P); + P = transform_point(&tfm, P); } return P; diff --git a/intern/cycles/kernel/svm/svm_camera.h b/intern/cycles/kernel/svm/svm_camera.h index cf161ddcd8c..f13cefb7764 100644 --- a/intern/cycles/kernel/svm/svm_camera.h +++ b/intern/cycles/kernel/svm/svm_camera.h @@ -25,7 +25,7 @@ __device void svm_node_camera(KernelGlobals *kg, ShaderData *sd, float *stack, u float3 vector; Transform tfm = kernel_data.cam.worldtocamera; - vector = transform(&tfm, sd->P); + vector = transform_point(&tfm, sd->P); zdepth = vector.z; distance = len(vector); diff --git a/intern/cycles/kernel/svm/svm_mapping.h b/intern/cycles/kernel/svm/svm_mapping.h index 7633c3e783b..6dc74aece08 100644 --- a/intern/cycles/kernel/svm/svm_mapping.h +++ b/intern/cycles/kernel/svm/svm_mapping.h @@ -30,7 +30,7 @@ __device void svm_node_mapping(KernelGlobals *kg, ShaderData *sd, float *stack, tfm.z = read_node_float(kg, offset); tfm.w = read_node_float(kg, offset); - float3 r = transform(&tfm, v); + float3 r = transform_point(&tfm, v); stack_store_float3(stack, out_offset, r); } diff --git a/intern/cycles/kernel/svm/svm_tex_coord.h b/intern/cycles/kernel/svm/svm_tex_coord.h index bcf3716ae57..f494b6d66e1 100644 --- a/intern/cycles/kernel/svm/svm_tex_coord.h +++ b/intern/cycles/kernel/svm/svm_tex_coord.h @@ -34,7 +34,7 @@ __device void svm_node_tex_coord(KernelGlobals *kg, ShaderData *sd, float *stack case NODE_TEXCO_OBJECT: { if(sd->object != ~0) { Transform tfm = object_fetch_transform(kg, sd->object, OBJECT_INVERSE_TRANSFORM); - data = transform(&tfm, sd->P); + data = transform_point(&tfm, sd->P); } else data = sd->P; @@ -44,18 +44,18 @@ __device void svm_node_tex_coord(KernelGlobals *kg, ShaderData *sd, float *stack Transform tfm = kernel_data.cam.worldtocamera; if(sd->object != ~0) - data = transform(&tfm, sd->P); + data = transform_point(&tfm, sd->P); else - data = transform(&tfm, sd->P + svm_background_offset(kg)); + data = transform_point(&tfm, sd->P + svm_background_offset(kg)); break; } case NODE_TEXCO_WINDOW: { Transform tfm = kernel_data.cam.worldtondc; if(sd->object != ~0) - data = transform(&tfm, sd->P); + data = transform_perspective(&tfm, sd->P); else - data = transform(&tfm, sd->P + svm_background_offset(kg)); + data = transform_perspective(&tfm, sd->P + svm_background_offset(kg)); break; } case NODE_TEXCO_REFLECTION: { @@ -79,7 +79,7 @@ __device void svm_node_tex_coord_bump_dx(KernelGlobals *kg, ShaderData *sd, floa case NODE_TEXCO_OBJECT: { if(sd->object != ~0) { Transform tfm = object_fetch_transform(kg, sd->object, OBJECT_INVERSE_TRANSFORM); - data = transform(&tfm, sd->P + sd->dP.dx); + data = transform_point(&tfm, sd->P + sd->dP.dx); } else data = sd->P + sd->dP.dx; @@ -89,18 +89,18 @@ __device void svm_node_tex_coord_bump_dx(KernelGlobals *kg, ShaderData *sd, floa Transform tfm = kernel_data.cam.worldtocamera; if(sd->object != ~0) - data = transform(&tfm, sd->P + sd->dP.dx); + data = transform_point(&tfm, sd->P + sd->dP.dx); else - data = transform(&tfm, sd->P + sd->dP.dx + svm_background_offset(kg)); + data = transform_point(&tfm, sd->P + sd->dP.dx + svm_background_offset(kg)); break; } case NODE_TEXCO_WINDOW: { Transform tfm = kernel_data.cam.worldtondc; if(sd->object != ~0) - data = transform(&tfm, sd->P + sd->dP.dx); + data = transform_perspective(&tfm, sd->P + sd->dP.dx); else - data = transform(&tfm, sd->P + sd->dP.dx + svm_background_offset(kg)); + data = transform_perspective(&tfm, sd->P + sd->dP.dx + svm_background_offset(kg)); break; } case NODE_TEXCO_REFLECTION: { @@ -127,7 +127,7 @@ __device void svm_node_tex_coord_bump_dy(KernelGlobals *kg, ShaderData *sd, floa case NODE_TEXCO_OBJECT: { if(sd->object != ~0) { Transform tfm = object_fetch_transform(kg, sd->object, OBJECT_INVERSE_TRANSFORM); - data = transform(&tfm, sd->P + sd->dP.dy); + data = transform_point(&tfm, sd->P + sd->dP.dy); } else data = sd->P + sd->dP.dy; @@ -137,18 +137,18 @@ __device void svm_node_tex_coord_bump_dy(KernelGlobals *kg, ShaderData *sd, floa Transform tfm = kernel_data.cam.worldtocamera; if(sd->object != ~0) - data = transform(&tfm, sd->P + sd->dP.dy); + data = transform_point(&tfm, sd->P + sd->dP.dy); else - data = transform(&tfm, sd->P + sd->dP.dy + svm_background_offset(kg)); + data = transform_point(&tfm, sd->P + sd->dP.dy + svm_background_offset(kg)); break; } case NODE_TEXCO_WINDOW: { Transform tfm = kernel_data.cam.worldtondc; if(sd->object != ~0) - data = transform(&tfm, sd->P + sd->dP.dy); + data = transform_perspective(&tfm, sd->P + sd->dP.dy); else - data = transform(&tfm, sd->P + sd->dP.dy + svm_background_offset(kg)); + data = transform_perspective(&tfm, sd->P + sd->dP.dy + svm_background_offset(kg)); break; } case NODE_TEXCO_REFLECTION: { diff --git a/intern/cycles/render/camera.cpp b/intern/cycles/render/camera.cpp index 6edf9c66f1d..f9290dfc835 100644 --- a/intern/cycles/render/camera.cpp +++ b/intern/cycles/render/camera.cpp @@ -107,10 +107,10 @@ void Camera::update() dy = transform_direction(&rastertocamera, make_float3(0, 1, 0)); } else if(type == CAMERA_PERSPECTIVE) { - dx = transform(&rastertocamera, make_float3(1, 0, 0)) - - transform(&rastertocamera, make_float3(0, 0, 0)); - dy = transform(&rastertocamera, make_float3(0, 1, 0)) - - transform(&rastertocamera, make_float3(0, 0, 0)); + dx = transform_perspective(&rastertocamera, make_float3(1, 0, 0)) - + transform_perspective(&rastertocamera, make_float3(0, 0, 0)); + dy = transform_perspective(&rastertocamera, make_float3(0, 1, 0)) - + transform_perspective(&rastertocamera, make_float3(0, 0, 0)); } else { dx = make_float3(0, 0, 0); diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp index bd3acb00f6d..316e5cec9aa 100644 --- a/intern/cycles/render/light.cpp +++ b/intern/cycles/render/light.cpp @@ -213,9 +213,9 @@ void LightManager::device_update_distribution(Device *device, DeviceScene *dscen offset++; Mesh::Triangle t = mesh->triangles[i]; - float3 p1 = transform(&tfm, mesh->verts[t.v[0]]); - float3 p2 = transform(&tfm, mesh->verts[t.v[1]]); - float3 p3 = transform(&tfm, mesh->verts[t.v[2]]); + float3 p1 = transform_point(&tfm, mesh->verts[t.v[0]]); + float3 p2 = transform_point(&tfm, mesh->verts[t.v[1]]); + float3 p3 = transform_point(&tfm, mesh->verts[t.v[2]]); totarea += triangle_area(p1, p2, p3); } diff --git a/intern/cycles/render/object.cpp b/intern/cycles/render/object.cpp index f83c85c632d..5f7a5810c09 100644 --- a/intern/cycles/render/object.cpp +++ b/intern/cycles/render/object.cpp @@ -54,7 +54,7 @@ void Object::apply_transform() return; for(size_t i = 0; i < mesh->verts.size(); i++) - mesh->verts[i] = transform(&tfm, mesh->verts[i]); + mesh->verts[i] = transform_point(&tfm, mesh->verts[i]); Attribute *attr_fN = mesh->attributes.find(Attribute::STD_FACE_NORMAL); Attribute *attr_vN = mesh->attributes.find(Attribute::STD_VERTEX_NORMAL); @@ -159,9 +159,9 @@ void ObjectManager::device_update_transforms(Device *device, DeviceScene *dscene } else { foreach(Mesh::Triangle& t, mesh->triangles) { - float3 p1 = transform(&tfm, mesh->verts[t.v[0]]); - float3 p2 = transform(&tfm, mesh->verts[t.v[1]]); - float3 p3 = transform(&tfm, mesh->verts[t.v[2]]); + float3 p1 = transform_point(&tfm, mesh->verts[t.v[0]]); + float3 p2 = transform_point(&tfm, mesh->verts[t.v[1]]); + float3 p3 = transform_point(&tfm, mesh->verts[t.v[2]]); surface_area += triangle_area(p1, p2, p3); } diff --git a/intern/cycles/subd/subd_dice.cpp b/intern/cycles/subd/subd_dice.cpp index 086b7b246d3..6b29d1ca51a 100644 --- a/intern/cycles/subd/subd_dice.cpp +++ b/intern/cycles/subd/subd_dice.cpp @@ -141,7 +141,7 @@ float3 QuadDice::eval_projected(SubPatch& sub, float u, float v) sub.patch->eval(&P, NULL, NULL, uv.x, uv.y); if(camera) - P = transform(&camera->worldtoraster, P); + P = transform_perspective(&camera->worldtoraster, P); return P; } diff --git a/intern/cycles/subd/subd_split.cpp b/intern/cycles/subd/subd_split.cpp index d61a42e4dcf..f0b87200f08 100644 --- a/intern/cycles/subd/subd_split.cpp +++ b/intern/cycles/subd/subd_split.cpp @@ -57,7 +57,7 @@ float3 DiagSplit::project(Patch *patch, float2 uv) patch->eval(&P, NULL, NULL, uv.x, uv.y); if(camera) - P = transform(&camera->worldtoraster, P); + P = transform_perspective(&camera->worldtoraster, P); return P; } diff --git a/intern/cycles/util/util_boundbox.h b/intern/cycles/util/util_boundbox.h index 0114a9a26a5..bb1df0b220f 100644 --- a/intern/cycles/util/util_boundbox.h +++ b/intern/cycles/util/util_boundbox.h @@ -76,8 +76,8 @@ public: bool valid(void) const { return (min.x <= max.x) && (min.y <= max.y) && (min.z <= max.z) && - !(isnan(min.x) || isnan(min.y) || isnan(min.z)) && - !(isnan(max.x) || isnan(max.y) || isnan(max.z)); + (isfinite(min.x) && isfinite(min.y) && isfinite(min.z)) && + (isfinite(max.x) && isfinite(max.y) && isfinite(max.z)); } BoundBox transformed(const Transform *tfm) @@ -91,7 +91,7 @@ public: p.y = (i & 2)? min.y: max.y; p.z = (i & 4)? min.z: max.z; - result.grow(transform(tfm, p)); + result.grow(transform_point(tfm, p)); } return result; diff --git a/intern/cycles/util/util_transform.h b/intern/cycles/util/util_transform.h index 07db52f6392..aeaef7b0e21 100644 --- a/intern/cycles/util/util_transform.h +++ b/intern/cycles/util/util_transform.h @@ -37,7 +37,7 @@ typedef struct Transform { #endif } Transform; -__device_inline float3 transform(const Transform *t, const float3 a) +__device_inline float3 transform_perspective(const Transform *t, const float3 a) { float4 b = make_float4(a.x, a.y, a.z, 1.0f); float3 c = make_float3(dot(t->x, b), dot(t->y, b), dot(t->z, b)); @@ -46,6 +46,14 @@ __device_inline float3 transform(const Transform *t, const float3 a) return (w != 0.0f)? c/w: make_float3(0.0f, 0.0f, 0.0f); } +__device_inline float3 transform_point(const Transform *t, const float3 a) +{ + float4 b = make_float4(a.x, a.y, a.z, 1.0f); + float3 c = make_float3(dot(t->x, b), dot(t->y, b), dot(t->z, b)); + + return c; +} + __device_inline float3 transform_direction(const Transform *t, const float3 a) { float4 b = make_float4(a.x, a.y, a.z, 0.0f); From 1492754c8f70b92506d487527cc7f850c86c8445 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 08:44:11 +0000 Subject: [PATCH 049/156] bmesh todo: ctrl+l now delimits by hidden faces. --- source/blender/editors/mesh/editmesh_select.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index b16b22349ac..4c889357673 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -1895,7 +1895,7 @@ static int edbm_select_linked_exec(bContext *C, wmOperator *op) BMW_init(&walker, bm, BMW_ISLAND, BMW_MASK_NOP, limit ? BM_ELEM_SELECT : BMW_MASK_NOP, BMW_MASK_NOP, - BMW_FLAG_NOP, /* BMESH_TODO - should be BMW_FLAG_TEST_HIDDEN ? */ + BMW_FLAG_TEST_HIDDEN, BMW_NIL_LAY); BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { From 869c69b1493b10c4fe2dcf0691069ea8718ef51d Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 16 Apr 2012 09:13:32 +0000 Subject: [PATCH 050/156] Fix for isnan compile issue on windows (second try). --- intern/dualcon/intern/Projections.h | 1 + 1 file changed, 1 insertion(+) diff --git a/intern/dualcon/intern/Projections.h b/intern/dualcon/intern/Projections.h index a01b4dffdb0..18533b218ff 100644 --- a/intern/dualcon/intern/Projections.h +++ b/intern/dualcon/intern/Projections.h @@ -30,6 +30,7 @@ #define GRID_DIMENSION 20 #if defined(_WIN32) && !defined(__MINGW32__) +#define isnan(n) _isnan(n) #define LONG __int64 #else #include From 4ebcae7158f2bdbb9bfdbac8c53801ba70d6fc90 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 09:34:43 +0000 Subject: [PATCH 051/156] bmesh todos: - dont do name based object lookup to find the object for a mesh undo state (possibly object is renamed inbetween undos which would crash) - remove some todo comments for things that are working as they should. --- source/blender/editors/mesh/editmesh_select.c | 2 +- source/blender/editors/mesh/editmesh_tools.c | 3 +-- source/blender/editors/mesh/editmesh_utils.c | 6 +----- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 4c889357673..29aab453822 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -2066,7 +2066,7 @@ static void walker_deselect_nth(BMEditMesh *em, int nth, int offset, BMHeader *h /* Walk over selected elements starting at active */ BMW_init(&walker, bm, walktype, mask_vert, mask_edge, mask_face, - BMW_FLAG_NOP, /* BMESH_TODO - should be BMW_FLAG_TEST_HIDDEN ? */ + BMW_FLAG_NOP, /* don't use BMW_FLAG_TEST_HIDDEN here since we want to desel all */ BMW_NIL_LAY); BLI_assert(walker.order == BMW_BREADTH_FIRST); diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 0ae9518b8b6..5b6811fcc5c 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -143,8 +143,7 @@ void MESH_OT_subdivide(wmOperatorType *ot) /* avoid re-using last var because it can cause _very_ high poly meshes and annoy users (or worse crash) */ RNA_def_property_flag(prop, PROP_SKIP_SAVE); - /* BMESH_TODO, this currently does nothing, just add to stop UI from erroring out! */ - RNA_def_float(ot->srna, "smoothness", 0.0f, 0.0f, FLT_MAX, "Smoothness", "Smoothness factor (BMESH TODO)", 0.0f, 1.0f); + RNA_def_float(ot->srna, "smoothness", 0.0f, 0.0f, FLT_MAX, "Smoothness", "Smoothness factor", 0.0f, 1.0f); RNA_def_boolean(ot->srna, "quadtri", 0, "Quad/Tri Mode", "Tries to prevent ngons"); RNA_def_enum(ot->srna, "quadcorner", prop_mesh_cornervert_types, SUBD_STRAIGHT_CUT, diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c index 56c7fae0029..12601d51b01 100644 --- a/source/blender/editors/mesh/editmesh_utils.c +++ b/source/blender/editors/mesh/editmesh_utils.c @@ -517,7 +517,6 @@ static void *getEditMesh(bContext *C) typedef struct UndoMesh { Mesh me; int selectmode; - char obname[MAX_ID_NAME - 2]; } UndoMesh; /* undo simply makes copies of a bmesh */ @@ -527,7 +526,6 @@ static void *editbtMesh_to_undoMesh(void *emv, void *obdata) Mesh *obme = obdata; UndoMesh *um = MEM_callocN(sizeof(UndoMesh), "undo Mesh"); - BLI_strncpy(um->obname, em->ob->id.name + 2, sizeof(um->obname)); /* make sure shape keys work */ um->me.key = obme->key ? copy_key_nolib(obme->key) : NULL; @@ -544,12 +542,10 @@ static void *editbtMesh_to_undoMesh(void *emv, void *obdata) static void undoMesh_to_editbtMesh(void *umv, void *em_v, void *UNUSED(obdata)) { BMEditMesh *em = em_v, *em_tmp; - Object *ob; + Object *ob = em->ob; UndoMesh *um = umv; BMesh *bm; - /* BMESH_TODO - its possible the name wont be found right?, should fallback */ - ob = (Object *)find_id("OB", um->obname); ob->shapenr = em->bm->shapenr; BMEdit_Free(em); From 4d1c7992d7855f7931524d873154cbc1b8b8ae28 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 16 Apr 2012 09:52:25 +0000 Subject: [PATCH 052/156] Fix/tweak for cycles border render, it wasn't generating the exact same samples when rendering a subset instead of the whole, mostly useful for debugging. --- intern/cycles/render/buffers.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intern/cycles/render/buffers.cpp b/intern/cycles/render/buffers.cpp index 62a322b3a0f..bda20a8ab9d 100644 --- a/intern/cycles/render/buffers.cpp +++ b/intern/cycles/render/buffers.cpp @@ -119,7 +119,7 @@ void RenderBuffers::reset(Device *device, BufferParams& params_) for(x=0; xmem_alloc(rng_state, MEM_READ_WRITE); device->mem_copy_to(rng_state); From 987dd552455e27b7296233f0ac569690c2e50e21 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 16 Apr 2012 09:55:54 +0000 Subject: [PATCH 053/156] Fix #30958: Right click menu and add shortcut for importers/exporters doesn't work This was caused by how keymap is guessing for importer/exporter: - In some cases if detected wrong keymap like for IMPORT_CURVE_OT_svg curve editing context was used because of CURVE_OT substring in operator name - In other cases no keymap was detected because of substrings WM_keymap_guess_opname cheched. Fixed by using Window keymap for any operator with EXPORT_/IMPORT_ substring which seems to detect importer/exporter operator and only them nicely. --- source/blender/windowmanager/intern/wm_keymap.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index ddbacc6b747..af56211a4e3 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -1190,6 +1190,10 @@ wmKeyMap *WM_keymap_guess_opname(const bContext *C, const char *opname) else if (strstr(opname, "MARKER_OT")) { km = WM_keymap_find_all(C, "Markers", 0, 0); } + /* Import/Export*/ + else if (strstr(opname, "IMPORT_") || strstr(opname, "EXPORT_")) { + km = WM_keymap_find_all(C, "Window", 0, 0); + } /* 3D View */ From 451dff519e7fd7a566559ffc04e9bb83662fcb1e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 09:56:12 +0000 Subject: [PATCH 054/156] patch to our desktop file from debian, German translation. --- release/freedesktop/blender.desktop | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/release/freedesktop/blender.desktop b/release/freedesktop/blender.desktop index 34b2b9bb0af..1620815517e 100644 --- a/release/freedesktop/blender.desktop +++ b/release/freedesktop/blender.desktop @@ -2,11 +2,12 @@ Name=Blender GenericName=3D modeller GenericName[es]=modelador 3D -GenericName[de]=3D Modellierer +GenericName[de]=3D-Modellierer GenericName[fr]=modeleur 3D GenericName[ru]=Редактор 3D-моделей Comment=3D modeling, animation, rendering and post-production Comment[es]=modelado 3D, animación, renderizado y post-producción +Comment[de]=3D-Modellierung, Animation, Rendering und Nachbearbeitung Exec=blender Icon=blender Terminal=false From dbc39552536774ae65d093c994c4d1cdadf547d6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 10:02:52 +0000 Subject: [PATCH 055/156] code cleanup: remove bmesh todo, which infact is working fine. --- source/blender/editors/sculpt_paint/paint_vertex.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c index 1aeaad1bfab..aad0a778d4b 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.c +++ b/source/blender/editors/sculpt_paint/paint_vertex.c @@ -2770,9 +2770,7 @@ static void vpaint_paint_face(VPaint *vp, VPaintData *vpd, Object *ob, static void vpaint_paint_poly(VPaint *vp, VPaintData *vpd, Object *ob, const unsigned int index, const float mval[2], - const float brush_size_pressure, const float brush_alpha_pressure, - int UNUSED(flip) - ) + const float brush_size_pressure, const float brush_alpha_pressure) { ViewContext *vc = &vpd->vc; Brush *brush = paint_brush(&vp->paint); @@ -2871,7 +2869,7 @@ static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P Mesh *me = ob->data; float mat[4][4]; int *indexar = vpd->indexar; - int totindex, index, flip; + int totindex, index; float mval[2]; const float pressure = RNA_float_get(itemptr, "pressure"); @@ -2879,9 +2877,6 @@ static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P const float brush_alpha_pressure = brush_alpha(scene, brush) * (brush_use_alpha_pressure(scene, brush) ? pressure : 1.0f); RNA_float_get_array(itemptr, "mouse", mval); - flip = RNA_boolean_get(itemptr, "pen_flip"); - - (void)flip; /* BMESH_TODO */ view3d_operator_needs_opengl(C); @@ -2932,7 +2927,7 @@ static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P for (index = 0; index < totindex; index++) { if (indexar[index] && indexar[index] <= me->totpoly) { - vpaint_paint_poly(vp, vpd, ob, indexar[index] - 1, mval, brush_size_pressure, brush_alpha_pressure, flip); + vpaint_paint_poly(vp, vpd, ob, indexar[index] - 1, mval, brush_size_pressure, brush_alpha_pressure); } } From a72076a2da906916875f6f73535c37434c85cbbc Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 10:09:26 +0000 Subject: [PATCH 056/156] bmesh todo: snap to volume with dupli's works again --- source/blender/editors/transform/transform_snap.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index ea21a636300..7bdd3ddc069 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -1874,10 +1874,9 @@ static int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, L ED_view3d_win_to_ray(ar, v3d, mval, ray_start, ray_normal); for (base = scene->base.first; base != NULL; base = base->next) { - if ( BASE_SELECTABLE(v3d, base) ) { + if (BASE_SELECTABLE(v3d, base)) { Object *ob = base->object; - -#if 0 //BMESH_TODO + if (ob->transflag & OB_DUPLI) { DupliObject *dupli_ob; ListBase *lb = object_duplilist(scene, ob); @@ -1887,7 +1886,7 @@ static int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, L Object *dob = dupli_ob->ob; if (dob->type == OB_MESH) { - EditMesh *em; + BMEditMesh *em; DerivedMesh *dm = NULL; int val; @@ -1897,8 +1896,8 @@ static int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, L val = peelDerivedMesh(dob, dm, dob->obmat, ray_start, ray_normal, mval, depth_peels); } else { - em = ((Mesh *)dob->data)->edit_mesh; - dm = editmesh_get_derived_cage(scene, obedit, em, CD_MASK_BAREMESH); + em = BMEdit_FromObject(dob); + dm = editbmesh_get_derived_cage(scene, obedit, em, CD_MASK_BAREMESH); val = peelDerivedMesh(dob, dm, dob->obmat, ray_start, ray_normal, mval, depth_peels); } @@ -1911,7 +1910,6 @@ static int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, L free_object_duplilist(lb); } -#endif if (ob->type == OB_MESH) { int val = 0; From 0150e01993636cf967b757b5493d525abb16502c Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Mon, 16 Apr 2012 10:22:28 +0000 Subject: [PATCH 057/156] And another fix for r45669 to have dualcon compile on windows... --- intern/dualcon/intern/dualcon_c_api.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/intern/dualcon/intern/dualcon_c_api.cpp b/intern/dualcon/intern/dualcon_c_api.cpp index 6f04922bb94..af5ada71146 100644 --- a/intern/dualcon/intern/dualcon_c_api.cpp +++ b/intern/dualcon/intern/dualcon_c_api.cpp @@ -26,6 +26,11 @@ #include "octree.h" #include +#include + +#if defined(_WIN32) && !defined(__MINGW32__) +#define isnan(n) _isnan(n) +#endif void veccopy(float dst[3], const float src[3]) { From bd613739ae4ebfa97471c34cfa4077f3c3e18afc Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 10:29:59 +0000 Subject: [PATCH 058/156] bmesh todo: remove unused code. --- source/blender/bmesh/operators/bmo_dissolve.c | 3 +-- source/blender/bmesh/operators/bmo_removedoubles.c | 4 ++-- source/blender/editors/mesh/editmesh_select.c | 13 +------------ source/blender/editors/uvedit/uvedit_ops.c | 5 ----- 4 files changed, 4 insertions(+), 21 deletions(-) diff --git a/source/blender/bmesh/operators/bmo_dissolve.c b/source/blender/bmesh/operators/bmo_dissolve.c index 29796b7dac4..f08b2bffdc6 100644 --- a/source/blender/bmesh/operators/bmo_dissolve.c +++ b/source/blender/bmesh/operators/bmo_dissolve.c @@ -110,10 +110,9 @@ void bmo_dissolve_faces_exec(BMesh *bm, BMOperator *op) BLI_array_empty(faces); faces = NULL; /* forces different allocatio */ - /* yay, walk */ BMW_init(®walker, bm, BMW_ISLAND, BMW_MASK_NOP, BMW_MASK_NOP, FACE_MARK, - BMW_FLAG_NOP, /* BMESH_TODO - should be BMW_FLAG_TEST_HIDDEN ? */ + BMW_FLAG_NOP, /* no need to check BMW_FLAG_TEST_HIDDEN, faces are already marked by the bmo */ BMW_NIL_LAY); f2 = BMW_begin(®walker, f); diff --git a/source/blender/bmesh/operators/bmo_removedoubles.c b/source/blender/bmesh/operators/bmo_removedoubles.c index aad0089b1d7..d126da52b22 100644 --- a/source/blender/bmesh/operators/bmo_removedoubles.c +++ b/source/blender/bmesh/operators/bmo_removedoubles.c @@ -381,7 +381,7 @@ void bmo_collapse_exec(BMesh *bm, BMOperator *op) BMW_init(&walker, bm, BMW_SHELL, BMW_MASK_NOP, EDGE_MARK, BMW_MASK_NOP, - BMW_FLAG_NOP, /* BMESH_TODO - should be BMW_FLAG_TEST_HIDDEN ? */ + BMW_FLAG_NOP, /* no need to use BMW_FLAG_TEST_HIDDEN, already marked data */ BMW_NIL_LAY); BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { @@ -441,7 +441,7 @@ static void bmo_collapsecon_do_layer(BMesh *bm, BMOperator *op, int layer) BMW_init(&walker, bm, BMW_LOOPDATA_ISLAND, BMW_MASK_NOP, EDGE_MARK, BMW_MASK_NOP, - BMW_FLAG_NOP, /* BMESH_TODO - should be BMW_FLAG_TEST_HIDDEN ? */ + BMW_FLAG_NOP, /* no need to use BMW_FLAG_TEST_HIDDEN, already marked data */ layer); BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 29aab453822..00835b79593 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -1221,9 +1221,7 @@ static int edgetag_shortest_path(Scene *scene, BMEditMesh *em, BMEdge *source, B /* note, would pass BM_EDGE except we are looping over all edges anyway */ BM_mesh_elem_index_ensure(em->bm, BM_VERT /* | BM_EDGE */); - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) - { - e->oflags[0].f = 0; /* XXX, whats this for, BMESH_TODO, double check if this is needed */ + BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(e, BM_ELEM_HIDDEN)) { BLI_smallhash_insert(&visithash, (uintptr_t)e, NULL); } @@ -1277,15 +1275,6 @@ static int edgetag_shortest_path(Scene *scene, BMEditMesh *em, BMEdge *source, B * by the shortest path found so far to the edge. */ -#if 0 /* UNUSED */ /* this block does nothing, not sure why its here? - campbell */ - for (i = 0; i < totvert; i++) { - int start = nedges[i], end = nedges[i + 1], cur; - for (cur = start; cur < end; cur++) { - BMEdge *e = EDBM_edge_at_index(em, edges[cur]); - } - } -#endif - /* regular dijkstra shortest path, but over edges instead of vertices */ heap = BLI_heap_new(); BLI_heap_insert(heap, 0.0f, SET_INT_IN_POINTER(BM_elem_index_get(source))); diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 7a142f3a46e..7e7e3bcfbfe 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -2355,11 +2355,6 @@ static void uv_faces_do_sticky(bContext *C, SpaceImage *sima, Scene *scene, Obje vmap = EDBM_uv_vert_map_create(em, 0, 0, limit); /* verts are numbered above in make_uv_vert_map_EM, make sure this stays true! */ - /* BMESH_TODO - why keep this commented? - campbell */ -#if 0 - for (a = 0, eve = em->verts.first; eve; a++, eve = eve->next) - eve->tmp.l = a; -#endif if (vmap == NULL) { return; } From 5c646e7e3a48c7fea0bfea407d3d27df0b1aa02b Mon Sep 17 00:00:00 2001 From: Lukas Toenne Date: Mon, 16 Apr 2012 10:50:57 +0000 Subject: [PATCH 059/156] Reverted r43219 "Improved auto-hiding of unused sockets for collapsed nodes." This feature did have a number of flaws and caused some controversy, so removal is the better option. Hiding nodes without prior connections would just hide all the sockets, leaving an unusable node. Better way is to use the ctrl+h shortcut to explicitly hide unused sockets when necessary. --- source/blender/blenkernel/intern/node.c | 2 +- source/blender/blenloader/intern/readfile.c | 58 ------------------- source/blender/editors/space_node/node_edit.c | 38 +++++------- .../blender/editors/space_node/node_intern.h | 4 +- source/blender/makesdna/DNA_node_types.h | 3 +- 5 files changed, 19 insertions(+), 86 deletions(-) diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index cbdbf0317b4..b50969d0107 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -1367,7 +1367,7 @@ void nodeSetActive(bNodeTree *ntree, bNode *node) int nodeSocketIsHidden(bNodeSocket *sock) { - return ((sock->flag & (SOCK_HIDDEN | SOCK_AUTO_HIDDEN | SOCK_UNAVAIL)) != 0); + return ((sock->flag & (SOCK_HIDDEN | SOCK_UNAVAIL)) != 0); } void nodeSocketSetType(bNodeSocket *sock, int type) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 6a40e1ebf43..4242b89c3e7 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -7672,32 +7672,6 @@ static void do_versions_nodetree_socket_use_flags_2_62(bNodeTree *ntree) } } -/* set the SOCK_AUTO_HIDDEN flag on collapsed nodes */ -static void do_versions_nodetree_socket_auto_hidden_flags_2_62(bNodeTree *ntree) -{ - bNode *node; - bNodeSocket *sock; - - for (node=ntree->nodes.first; node; node=node->next) { - if (node->flag & NODE_HIDDEN) { - for (sock=node->inputs.first; sock; sock=sock->next) { - if (sock->link==NULL) - sock->flag |= SOCK_AUTO_HIDDEN; - } - for (sock=node->outputs.first; sock; sock= sock->next) { - if (nodeCountSocketLinks(ntree, sock)==0) - sock->flag |= SOCK_AUTO_HIDDEN; - } - } - else { - for (sock=node->inputs.first; sock; sock= sock->next) - sock->flag &= ~SOCK_AUTO_HIDDEN; - for (sock=node->outputs.first; sock; sock= sock->next) - sock->flag &= ~SOCK_AUTO_HIDDEN; - } - } -} - static void do_versions_nodetree_multi_file_output_format_2_62_1(Scene *sce, bNodeTree *ntree) { bNode *node; @@ -13120,38 +13094,6 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } } - { - /* set the SOCK_AUTO_HIDDEN flag on collapsed nodes */ - Scene *sce; - Material *mat; - Tex *tex; - Lamp *lamp; - World *world; - bNodeTree *ntree; - - for (sce=main->scene.first; sce; sce=sce->id.next) - if (sce->nodetree) - do_versions_nodetree_socket_auto_hidden_flags_2_62(sce->nodetree); - - for (mat=main->mat.first; mat; mat=mat->id.next) - if (mat->nodetree) - do_versions_nodetree_socket_auto_hidden_flags_2_62(mat->nodetree); - - for (tex=main->tex.first; tex; tex=tex->id.next) - if (tex->nodetree) - do_versions_nodetree_socket_auto_hidden_flags_2_62(tex->nodetree); - - for (lamp=main->lamp.first; lamp; lamp=lamp->id.next) - if (lamp->nodetree) - do_versions_nodetree_socket_auto_hidden_flags_2_62(lamp->nodetree); - - for (world=main->world.first; world; world=world->id.next) - if (world->nodetree) - do_versions_nodetree_socket_auto_hidden_flags_2_62(world->nodetree); - - for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next) - do_versions_nodetree_socket_auto_hidden_flags_2_62(ntree); - } } if (main->versionfile < 261 || (main->versionfile == 261 && main->subversionfile < 2)) diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index f73a89702af..c41cb2b6211 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -1605,38 +1605,38 @@ void NODE_OT_resize(wmOperatorType *ot) /* ********************** hidden sockets ******************** */ -int node_has_hidden_sockets(bNode *node, short flag) +int node_has_hidden_sockets(bNode *node) { bNodeSocket *sock; for (sock= node->inputs.first; sock; sock= sock->next) - if (sock->flag & flag) + if (sock->flag & SOCK_HIDDEN) return 1; for (sock= node->outputs.first; sock; sock= sock->next) - if (sock->flag & flag) + if (sock->flag & SOCK_HIDDEN) return 1; return 0; } -void node_set_hidden_sockets(SpaceNode *snode, bNode *node, short flag, int set) +void node_set_hidden_sockets(SpaceNode *snode, bNode *node, int set) { bNodeSocket *sock; if (set==0) { for (sock= node->inputs.first; sock; sock= sock->next) - sock->flag &= ~flag; + sock->flag &= ~SOCK_HIDDEN; for (sock= node->outputs.first; sock; sock= sock->next) - sock->flag &= ~flag; + sock->flag &= ~SOCK_HIDDEN; } else { /* hide unused sockets */ for (sock= node->inputs.first; sock; sock= sock->next) { if (sock->link==NULL) - sock->flag |= flag; + sock->flag |= SOCK_HIDDEN; } for (sock= node->outputs.first; sock; sock= sock->next) { if (nodeCountSocketLinks(snode->edittree, sock)==0) - sock->flag |= flag; + sock->flag |= SOCK_HIDDEN; } } } @@ -2281,7 +2281,7 @@ static void node_remove_extra_links(SpaceNode *snode, bNodeSocket *tsock, bNodeL } if (sock) { tlink->tosock= sock; - sock->flag &= ~(SOCK_HIDDEN|SOCK_AUTO_HIDDEN); + sock->flag &= ~SOCK_HIDDEN; } else { nodeRemLink(snode->edittree, tlink); @@ -2765,7 +2765,7 @@ static bNodeSocket *socket_best_match(ListBase *sockets) for (type=maxtype; type >= 0; --type) { for (sock= sockets->first; sock; sock= sock->next) { if (type==sock->type) { - sock->flag &= ~(SOCK_HIDDEN|SOCK_AUTO_HIDDEN); + sock->flag &= ~SOCK_HIDDEN; return sock; } } @@ -3109,20 +3109,10 @@ static void node_flag_toggle_exec(SpaceNode *snode, int toggle_flag) if (toggle_flag== NODE_OPTIONS && (node->typeinfo->flag & NODE_OPTIONS)==0) continue; - if ( (tot_eq && tot_neq) || tot_eq==0) { + if ( (tot_eq && tot_neq) || tot_eq==0) node->flag |= toggle_flag; - - /* hide/unhide node also toggles unlinked socket display */ - if (toggle_flag== NODE_HIDDEN) - node_set_hidden_sockets(snode, node, SOCK_AUTO_HIDDEN, 1); - } - else { + else node->flag &= ~toggle_flag; - - /* hide/unhide node also toggles unlinked socket display */ - if (toggle_flag== NODE_HIDDEN) - node_set_hidden_sockets(snode, node, SOCK_AUTO_HIDDEN, 0); - } } } } @@ -3235,7 +3225,7 @@ static int node_socket_toggle_exec(bContext *C, wmOperator *UNUSED(op)) hidden = 0; for (node= snode->edittree->nodes.first; node; node= node->next) { if (node->flag & SELECT) { - if (node_has_hidden_sockets(node, SOCK_HIDDEN)) { + if (node_has_hidden_sockets(node)) { hidden= 1; break; } @@ -3244,7 +3234,7 @@ static int node_socket_toggle_exec(bContext *C, wmOperator *UNUSED(op)) for (node= snode->edittree->nodes.first; node; node= node->next) { if (node->flag & SELECT) { - node_set_hidden_sockets(snode, node, SOCK_HIDDEN, !hidden); + node_set_hidden_sockets(snode, node, !hidden); } } diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h index ea8fdd8059b..aa80f729343 100644 --- a/source/blender/editors/space_node/node_intern.h +++ b/source/blender/editors/space_node/node_intern.h @@ -121,8 +121,8 @@ void snode_make_group_editable(SpaceNode *snode, bNode *gnode); void snode_composite_job(const struct bContext *C, ScrArea *sa); bNode *node_tree_get_editgroup(bNodeTree *ntree); void snode_autoconnect(SpaceNode *snode, int allow_multiple, int replace); -int node_has_hidden_sockets(bNode *node, short flag); -void node_set_hidden_sockets(SpaceNode *snode, bNode *node, short flag, int set); +int node_has_hidden_sockets(bNode *node); +void node_set_hidden_sockets(SpaceNode *snode, bNode *node, int set); int node_render_changed_exec(bContext *, wmOperator *); int node_find_indicated_socket(struct SpaceNode *snode, struct bNode **nodep, struct bNodeSocket **sockp, int in_out); diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index 6caf0a7d8b2..1abce525be2 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -136,7 +136,8 @@ typedef struct bNodeSocket { /* hide socket value, if it gets auto default */ #define SOCK_HIDE_VALUE 128 /* socket hidden automatically, to distinguish from manually hidden */ -#define SOCK_AUTO_HIDDEN 256 + /* DEPRECATED, only kept here to avoid reusing the flag */ +#define SOCK_AUTO_HIDDEN__DEPRECATED 256 typedef struct bNodePreview { unsigned char *rect; From 34814e47558febd42f56b2ec38c4cb8954eb5dad Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 16 Apr 2012 11:03:42 +0000 Subject: [PATCH 060/156] Port multires_topology_changed to new bmesh api This call is still needed when loading editmesh because some operations are not creating CD layer for new loops (like crating new face) and to prevent loosing all sculpted data when running disps correct displacement maps should be allocated on loading edit mesh. --- source/blender/blenkernel/BKE_multires.h | 2 +- source/blender/blenkernel/intern/multires.c | 48 ++++++------------- source/blender/bmesh/intern/bmesh_mesh_conv.c | 4 ++ source/blender/editors/mesh/editmesh_utils.c | 1 - 4 files changed, 19 insertions(+), 36 deletions(-) diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h index 69482706da6..bc34b0131bf 100644 --- a/source/blender/blenkernel/BKE_multires.h +++ b/source/blender/blenkernel/BKE_multires.h @@ -99,7 +99,7 @@ void multiresModifier_prepare_join(struct Scene *scene, struct Object *ob, struc int multires_mdisp_corners(struct MDisps *s); /* update multires data after topology changing */ -void multires_topology_changed(struct Scene *scene, struct Object *ob); +void multires_topology_changed(struct Mesh *me); /**** interpolation stuff ****/ void old_mdisps_bilinear(float out[3], float (*disps)[3], const int st, float u, float v); diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index d8117aa1344..2167495ef08 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -2166,58 +2166,38 @@ void multiresModifier_prepare_join(Scene *scene, Object *ob, Object *to_ob) } /* update multires data after topology changing */ -#if 0 // BMESH_TODO -void multires_topology_changed(Scene *scene, Object *ob) +void multires_topology_changed(Mesh *me) { - Mesh *me= (Mesh*)ob->data; - MDisps *mdisp= NULL, *cur= NULL; - int i, grid= 0, corners; - MultiresModifierData *mmd= get_multires_modifier(scene, ob, 1); + MDisps *mdisp = NULL, *cur = NULL; + int i, grid = 0; - if (mmd) - multires_set_tot_mdisps(me, mmd->totlvl); + CustomData_external_read(&me->ldata, &me->id, CD_MASK_MDISPS, me->totface); + mdisp = CustomData_get_layer(&me->ldata, CD_MDISPS); - CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface); - mdisp= CustomData_get_layer(&me->fdata, CD_MDISPS); + if (!mdisp) + return; - if (!mdisp) return; - - cur= mdisp; - for (i = 0; i < me->totface; i++, cur++) { - if (mdisp->totdisp) { - corners= multires_mdisp_corners(mdisp); - grid= mdisp->totdisp / corners; + cur = mdisp; + for (i = 0; i < me->totloop; i++, cur++) { + if (cur->totdisp) { + grid = mdisp->totdisp; break; } } - for (i = 0; i < me->totface; i++, mdisp++) { - int nvert= me->mface[i].v4 ? 4 : 3; - + for (i = 0; i < me->totloop; i++, mdisp++) { /* allocate memory for mdisp, the whole disp layer would be erased otherwise */ if (!mdisp->totdisp || !mdisp->disps) { if (grid) { - mdisp->totdisp= nvert*grid; - mdisp->disps= MEM_callocN(mdisp->totdisp*sizeof(float)*3, "mdisp topology"); + mdisp->totdisp = grid; + mdisp->disps = MEM_callocN(3 * mdisp->totdisp * sizeof(float), "mdisp topology"); } continue; } - - corners= multires_mdisp_corners(mdisp); - - if (corners!=nvert) { - mdisp->totdisp= (mdisp->totdisp/corners)*nvert; - - if (mdisp->disps) - MEM_freeN(mdisp->disps); - - mdisp->disps= MEM_callocN(mdisp->totdisp*sizeof(float)*3, "mdisp topology"); - } } } -#endif // BMESH_TODO /***************** Multires interpolation stuff *****************/ diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.c b/source/blender/bmesh/intern/bmesh_mesh_conv.c index 2be9d4c7490..c8876e55431 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_conv.c +++ b/source/blender/bmesh/intern/bmesh_mesh_conv.c @@ -89,6 +89,7 @@ #include "BKE_mesh.h" #include "BKE_customdata.h" +#include "BKE_multires.h" #include "BKE_global.h" /* ugh - for looping over all objects */ #include "BKE_main.h" @@ -854,4 +855,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) } if (oldverts) MEM_freeN(oldverts); + + /* topology could be changed, ensure mdisps are ok */ + multires_topology_changed(me); } diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c index 12601d51b01..6511cc713e3 100644 --- a/source/blender/editors/mesh/editmesh_utils.c +++ b/source/blender/editors/mesh/editmesh_utils.c @@ -313,7 +313,6 @@ void EDBM_mesh_load(Object *ob) #ifdef USE_TESSFACE_DEFAULT BKE_mesh_tessface_calc(me); #endif - } void EDBM_mesh_free(BMEditMesh *tm) From 798385fa903245f1a9819631d3116e05769585da Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 16 Apr 2012 11:54:28 +0000 Subject: [PATCH 061/156] Fix #30968: Lightmap Pack - no new image limit Disable operator register and redo flags because it might modify non-mesh data when in edit mode. This doesn't work properly with current undo stack design. --- release/scripts/startup/bl_operators/uvcalc_lightmap.py | 1 - 1 file changed, 1 deletion(-) diff --git a/release/scripts/startup/bl_operators/uvcalc_lightmap.py b/release/scripts/startup/bl_operators/uvcalc_lightmap.py index 9e1ebbac806..3074db17d0f 100644 --- a/release/scripts/startup/bl_operators/uvcalc_lightmap.py +++ b/release/scripts/startup/bl_operators/uvcalc_lightmap.py @@ -549,7 +549,6 @@ class LightMapPack(Operator): '''Follow UVs from active quads along continuous face loops''' bl_idname = "uv.lightmap_pack" bl_label = "Lightmap Pack" - bl_options = {'REGISTER', 'UNDO'} PREF_CONTEXT = bpy.props.EnumProperty( name="Selection", From c509f687ca1b8ae58d0286afde49e59ea5556551 Mon Sep 17 00:00:00 2001 From: Lukas Toenne Date: Mon, 16 Apr 2012 11:57:22 +0000 Subject: [PATCH 062/156] Avoid invalid delete call when loading multilayer EXR files with that don't fit the Blender pass naming scheme. If the imb_exr_begin_read_mem function fails reading the EXR (e.g. because of too many channels per pass) it deletes the file internally, leading to segfault on second delete. --- source/blender/imbuf/intern/openexr/openexr_api.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp index caca00cbe20..ff3a816f478 100644 --- a/source/blender/imbuf/intern/openexr/openexr_api.cpp +++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp @@ -1007,7 +1007,6 @@ struct ImBuf *imb_load_openexr(unsigned char *mem, size_t size, int flags) if (handle) { IMB_exr_read_channels(handle); ibuf->userdata= handle; /* potential danger, the caller has to check for this! */ - return ibuf; } } else { @@ -1055,11 +1054,12 @@ struct ImBuf *imb_load_openexr(unsigned char *mem, size_t size, int flags) // // if (flag & IM_rect) // IMB_rect_from_float(ibuf); + + /* file is no longer needed */ + delete file; } } - } - delete file; return(ibuf); } catch (const std::exception &exc) From 37a79f47272ddd0cf5702ae0a73c2c39ef192ad4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 13:49:04 +0000 Subject: [PATCH 063/156] fix [#30972] Editmesh split by materials not working. --- release/scripts/startup/bl_ui/space_view3d.py | 2 +- source/blender/editors/mesh/editmesh_tools.c | 51 +++++++++++++------ 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 20f5b471784..6c152c7cd43 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -1680,7 +1680,7 @@ class VIEW3D_MT_edit_mesh_vertices(Menu): layout.operator("mesh.merge") layout.operator("mesh.rip_move") layout.operator("mesh.split") - layout.operator("mesh.separate") + layout.operator_menu_enum("mesh.separate", "type") layout.operator("mesh.vert_connect") layout.operator("mesh.vert_slide") diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 5b6811fcc5c..b8ab538b60e 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -3131,7 +3131,7 @@ static int mesh_separate_selected(Main *bmain, Scene *scene, Base *editbase, wmO BMesh *bm_new; if (!em) - return OPERATOR_CANCELLED; + return FALSE; bm_new = BM_mesh_create(&bm_mesh_allocsize_default); CustomData_copy(&em->bm->vdata, &bm_new->vdata, CD_MASK_BMESH, CD_CALLOC, 0); @@ -3182,13 +3182,41 @@ static int mesh_separate_selected(Main *bmain, Scene *scene, Base *editbase, wmO BM_mesh_free(bm_new); ((Mesh *)basenew->object->data)->edit_btmesh = NULL; - return 1; + return TRUE; } -//BMESH_TODO -static int mesh_separate_material(Main *UNUSED(bmain), Scene *UNUSED(scene), Base *UNUSED(editbase), wmOperator *UNUSED(wmop)) +static int mesh_separate_material(Main *bmain, Scene *scene, Base *editbase, wmOperator *wmop) { - return 0; + BMFace *f_cmp, *f; + BMIter iter; + int result = FALSE; + Object *obedit = editbase->object; + BMEditMesh *em = BMEdit_FromObject(obedit); + BMesh *bm = em->bm; + + EDBM_flag_disable_all(em, BM_ELEM_SELECT); + + while ((f_cmp = BM_iter_at_index(bm, BM_FACES_OF_MESH, NULL, 0))) { + const short mat_nr = f_cmp->mat_nr; + int tot = 0; + + BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + if (f->mat_nr == mat_nr) { + BM_face_select_set(bm, f, TRUE); + tot++; + } + } + + /* leave the current object with some materials */ + if (tot == bm->totface) { + break; + } + + /* Move selection into a separate object */ + result |= mesh_separate_selected(bmain, scene, editbase, wmop); + } + + return result; } static int mesh_separate_loose(Main *bmain, Scene *scene, Base *editbase, wmOperator *wmop) @@ -3199,21 +3227,14 @@ static int mesh_separate_loose(Main *bmain, Scene *scene, Base *editbase, wmOper BMVert *v_seed; BMWalker walker; BMIter iter; - int result = 0; + int result = FALSE; Object *obedit = editbase->object; - Mesh *me = obedit->data; - BMEditMesh *em = me->edit_btmesh; + BMEditMesh *em = BMEdit_FromObject(obedit); BMesh *bm = em->bm; int max_iter = bm->totvert; /* Clear all selected vertices */ - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { - BM_elem_select_set(bm, v, FALSE); - } - - /* Flush the selection to clear edge/face selections to match - * selected vertices */ - EDBM_selectmode_flush_ex(em, SCE_SELECT_VERTEX); + EDBM_flag_disable_all(em, BM_ELEM_SELECT); /* A "while (true)" loop should work here as each iteration should * select and remove at least one vertex and when all vertices From f4498e62a78e80e0db0a6d398f8b956827dddca5 Mon Sep 17 00:00:00 2001 From: Lukas Toenne Date: Mon, 16 Apr 2012 13:49:33 +0000 Subject: [PATCH 064/156] Dynamic output sockets for the image input node. This is needed to enable the node to read arbitrary multilayer exr files. Output sockets of this node are now generated dynamically when the image is updated. The image buffer has to be loaded to detect multilayer files on update. --- source/blender/blenkernel/intern/node.c | 2 + source/blender/makesrna/intern/rna_nodetree.c | 6 +- .../nodes/composite/node_composite_tree.c | 24 +- .../composite/nodes/node_composite_image.c | 338 +++++++++++++----- 4 files changed, 263 insertions(+), 107 deletions(-) diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index b50969d0107..2fb3f81b147 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -1616,6 +1616,7 @@ int nodeUpdateID(bNodeTree *ntree, ID *id) for (node= ntree->nodes.first; node; node= node->next) { if (node->id==id) { change = TRUE; + node->update |= NODE_UPDATE_ID; ntreetype->update_node(ntree, node); /* clear update flag */ node->update = 0; @@ -1626,6 +1627,7 @@ int nodeUpdateID(bNodeTree *ntree, ID *id) for (node= ntree->nodes.first; node; node= node->next) { if (node->id==id) { change = TRUE; + node->update |= NODE_UPDATE_ID; if (node->typeinfo->updatefunc) node->typeinfo->updatefunc(ntree, node); /* clear update flag */ diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index 9d5a6049144..f5bded42a1c 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -357,7 +357,7 @@ static void rna_Node_update(Main *bmain, Scene *scene, PointerRNA *ptr) node_update(bmain, scene, ntree, node); } -static void rna_Node_image_update(Main *bmain, Scene *scene, PointerRNA *ptr) +static void rna_Node_tex_image_update(Main *bmain, Scene *scene, PointerRNA *ptr) { bNodeTree *ntree = (bNodeTree*)ptr->id.data; bNode *node = (bNode*)ptr->data; @@ -1299,7 +1299,7 @@ static void def_sh_tex_environment(StructRNA *srna) RNA_def_property_struct_type(prop, "Image"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Image", ""); - RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_image_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_tex_image_update"); RNA_def_struct_sdna_from(srna, "NodeTexEnvironment", "storage"); def_sh_tex(srna); @@ -1333,7 +1333,7 @@ static void def_sh_tex_image(StructRNA *srna) RNA_def_property_struct_type(prop, "Image"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Image", ""); - RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_image_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_tex_image_update"); RNA_def_struct_sdna_from(srna, "NodeTexImage", "storage"); def_sh_tex(srna); diff --git a/source/blender/nodes/composite/node_composite_tree.c b/source/blender/nodes/composite/node_composite_tree.c index 7bd0d03322d..049b5dd8178 100644 --- a/source/blender/nodes/composite/node_composite_tree.c +++ b/source/blender/nodes/composite/node_composite_tree.c @@ -757,26 +757,14 @@ void ntreeCompositForceHidden(bNodeTree *ntree, Scene *curscene) if (srl) force_hidden_passes(node, srl->passflag); } + /* XXX this stuff is called all the time, don't want that. + * Updates should only happen when actually necessary. + */ + #if 0 else if ( node->type==CMP_NODE_IMAGE) { - Image *ima= (Image *)node->id; - if (ima) { - if (ima->rr) { - ImageUser *iuser= node->storage; - RenderLayer *rl= BLI_findlink(&ima->rr->layers, iuser->layer); - if (rl) - force_hidden_passes(node, rl->passflag); - else - force_hidden_passes(node, RRES_OUT_IMAGE|RRES_OUT_ALPHA); - } - else if (ima->type!=IMA_TYPE_MULTILAYER) { /* if ->rr not yet read we keep inputs */ - force_hidden_passes(node, RRES_OUT_IMAGE|RRES_OUT_ALPHA|RRES_OUT_Z); - } - else - force_hidden_passes(node, RRES_OUT_IMAGE|RRES_OUT_ALPHA); - } - else - force_hidden_passes(node, RRES_OUT_IMAGE|RRES_OUT_ALPHA); + nodeUpdate(ntree, node); } + #endif } } diff --git a/source/blender/nodes/composite/nodes/node_composite_image.c b/source/blender/nodes/composite/nodes/node_composite_image.c index 44efbc6f9db..323767b64b1 100644 --- a/source/blender/nodes/composite/nodes/node_composite_image.c +++ b/source/blender/nodes/composite/nodes/node_composite_image.c @@ -32,7 +32,6 @@ #include "node_composite_util.h" - /* **************** IMAGE (and RenderResult, multilayer image) ******************** */ static bNodeSocketTemplate cmp_node_rlayers_out[]= { @@ -67,6 +66,212 @@ static bNodeSocketTemplate cmp_node_rlayers_out[]= { { -1, 0, "" } }; +static bNodeSocket *cmp_node_image_add_render_pass_output(bNodeTree *ntree, bNode *node, int UNUSED(pass), int rres_index) +{ + bNodeSocket *sock; + + sock = node_add_output_from_template(ntree, node, &cmp_node_rlayers_out[rres_index]); + /* for render pass outputs store the pass type index as a lookup key */ + sock->storage = SET_INT_IN_POINTER(rres_index); + + return sock; +} + +static void cmp_node_image_add_render_pass_outputs(bNodeTree *ntree, bNode *node, int passflag) +{ + if (passflag & SCE_PASS_COMBINED) { + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_COMBINED, RRES_OUT_IMAGE); + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_COMBINED, RRES_OUT_ALPHA); + } + + if (passflag & SCE_PASS_Z) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_Z, RRES_OUT_Z); + if (passflag & SCE_PASS_NORMAL) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_NORMAL, RRES_OUT_NORMAL); + if (passflag & SCE_PASS_VECTOR) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_VECTOR, RRES_OUT_VEC); + if (passflag & SCE_PASS_UV) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_UV, RRES_OUT_UV); + if (passflag & SCE_PASS_RGBA) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_RGBA, RRES_OUT_RGBA); + if (passflag & SCE_PASS_DIFFUSE) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_DIFFUSE, RRES_OUT_DIFF); + if (passflag & SCE_PASS_SPEC) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_SPEC, RRES_OUT_SPEC); + if (passflag & SCE_PASS_SHADOW) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_SHADOW, RRES_OUT_SHADOW); + if (passflag & SCE_PASS_AO) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_AO, RRES_OUT_AO); + if (passflag & SCE_PASS_REFLECT) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_REFLECT, RRES_OUT_REFLECT); + if (passflag & SCE_PASS_REFRACT) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_REFRACT, RRES_OUT_REFRACT); + if (passflag & SCE_PASS_INDIRECT) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_INDIRECT, RRES_OUT_INDIRECT); + if (passflag & SCE_PASS_INDEXOB) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_INDEXOB, RRES_OUT_INDEXOB); + if (passflag & SCE_PASS_INDEXMA) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_INDEXMA, RRES_OUT_INDEXMA); + if (passflag & SCE_PASS_MIST) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_MIST, RRES_OUT_MIST); + if (passflag & SCE_PASS_EMIT) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_EMIT, RRES_OUT_EMIT); + if (passflag & SCE_PASS_ENVIRONMENT) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_ENVIRONMENT, RRES_OUT_ENV); + + if (passflag & SCE_PASS_DIFFUSE_DIRECT) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_DIFFUSE_DIRECT, RRES_OUT_DIFF_DIRECT); + if (passflag & SCE_PASS_DIFFUSE_INDIRECT) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_DIFFUSE_INDIRECT, RRES_OUT_DIFF_INDIRECT); + if (passflag & SCE_PASS_DIFFUSE_COLOR) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_DIFFUSE_COLOR, RRES_OUT_DIFF_COLOR); + + if (passflag & SCE_PASS_GLOSSY_DIRECT) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_GLOSSY_DIRECT, RRES_OUT_GLOSSY_DIRECT); + if (passflag & SCE_PASS_GLOSSY_INDIRECT) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_GLOSSY_INDIRECT, RRES_OUT_GLOSSY_INDIRECT); + if (passflag & SCE_PASS_GLOSSY_COLOR) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_GLOSSY_COLOR, RRES_OUT_GLOSSY_COLOR); + + if (passflag & SCE_PASS_TRANSM_DIRECT) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_TRANSM_DIRECT, RRES_OUT_TRANSM_DIRECT); + if (passflag & SCE_PASS_TRANSM_INDIRECT) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_TRANSM_INDIRECT, RRES_OUT_TRANSM_INDIRECT); + if (passflag & SCE_PASS_TRANSM_COLOR) + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_TRANSM_COLOR, RRES_OUT_TRANSM_COLOR); +} + +static void cmp_node_image_add_multilayer_outputs(bNodeTree *ntree, bNode *node, RenderLayer *rl) +{ + bNodeSocket *sock; + RenderPass *rpass; + int index; + for (rpass=rl->passes.first, index=0; rpass; rpass=rpass->next, ++index) { + int type; + if (rpass->channels == 1) + type = SOCK_FLOAT; + else + type = SOCK_RGBA; + + sock = nodeAddSocket(ntree, node, SOCK_OUT, rpass->name, type); + /* for multilayer image use pass index directly as key */ + sock->storage = SET_INT_IN_POINTER(index); + } +} + +static void cmp_node_image_create_outputs(bNodeTree *ntree, bNode *node) +{ + Image *ima= (Image *)node->id; + if (ima) { + ImageUser *iuser= node->storage; + + /* make sure ima->type is correct */ + BKE_image_get_ibuf(ima, iuser); + + if (ima->rr) { + RenderLayer *rl= BLI_findlink(&ima->rr->layers, iuser->layer); + + if (rl) { + if (ima->type!=IMA_TYPE_MULTILAYER) + cmp_node_image_add_render_pass_outputs(ntree, node, rl->passflag); + else + cmp_node_image_add_multilayer_outputs(ntree, node, rl); + } + else + cmp_node_image_add_render_pass_outputs(ntree, node, RRES_OUT_IMAGE|RRES_OUT_ALPHA); + } + else + cmp_node_image_add_render_pass_outputs(ntree, node, RRES_OUT_IMAGE|RRES_OUT_ALPHA|RRES_OUT_Z); + } + else + cmp_node_image_add_render_pass_outputs(ntree, node, RRES_OUT_IMAGE|RRES_OUT_ALPHA); +} + +static bNodeSocket *cmp_node_image_output_find_match(bNode *UNUSED(node), bNodeSocket *newsock, ListBase *oldsocklist) +{ + bNodeSocket *sock; + + for (sock=oldsocklist->first; sock; sock=sock->next) + if (strcmp(sock->name, newsock->name)==0) + return sock; + return NULL; +} + +static bNodeSocket *cmp_node_image_output_relink(bNode *node, bNodeSocket *oldsock, int oldindex) +{ + bNodeSocket *sock; + + /* first try to find matching socket name */ + for (sock=node->outputs.first; sock; sock=sock->next) + if (strcmp(sock->name, oldsock->name)==0) + return sock; + + /* no matching name, simply link to same index */ + return BLI_findlink(&node->outputs, oldindex); +} + +static void cmp_node_image_sync_output(bNode *UNUSED(node), bNodeSocket *UNUSED(newsock), bNodeSocket *UNUSED(oldsock)) +{ + /* pass */ +} + +/* XXX make this into a generic socket verification function for dynamic socket replacement (multilayer, groups, static templates) */ +static void cmp_node_image_verify_outputs(bNodeTree *ntree, bNode *node) +{ + bNodeSocket *newsock, *oldsock, *oldsock_next; + ListBase oldsocklist; + int oldindex; + bNodeLink *link; + + /* store current nodes in oldsocklist, then clear socket list */ + oldsocklist = node->outputs; + node->outputs.first = node->outputs.last = NULL; + + /* XXX make callback */ + cmp_node_image_create_outputs(ntree, node); + /* flag all new sockets as dynamic, to prevent removal by socket verification function */ + for (newsock=node->outputs.first; newsock; newsock=newsock->next) + newsock->flag |= SOCK_DYNAMIC; + + for (newsock=node->outputs.first; newsock; newsock=newsock->next) { + /* XXX make callback */ + oldsock = cmp_node_image_output_find_match(node, newsock, &oldsocklist); + if (oldsock) { + /* XXX make callback */ + cmp_node_image_sync_output(node, newsock, oldsock); + } + } + + /* move links to new socket */ + for (oldsock=oldsocklist.first, oldindex=0; oldsock; oldsock=oldsock->next, ++oldindex) { + newsock = cmp_node_image_output_relink(node, oldsock, oldindex); + + if (newsock) { + for (link=ntree->links.first; link; link=link->next) { + if (link->fromsock == oldsock) + link->fromsock = newsock; + } + } + } + + /* delete old sockets + * XXX oldsock is not actually in the node->outputs list any more, + * but the nodeRemoveSocket function works anyway. In future this + * should become part of the core code, so can take care of this behavior. + */ + for (oldsock=oldsocklist.first; oldsock; oldsock=oldsock_next) { + oldsock_next = oldsock->next; + nodeRemoveSocket(ntree, node, oldsock); + } +} + +static void cmp_node_image_update(bNodeTree *ntree, bNode *node) +{ + /* avoid unnecessary updates, only changes to the image/image user data are of interest */ + if (node->update & NODE_UPDATE_ID) + cmp_node_image_verify_outputs(ntree, node); +} + /* float buffer from the image with matching color management */ float *node_composit_get_float_buffer(RenderData *rd, ImBuf *ibuf, int *alloc) { @@ -189,85 +394,21 @@ static CompBuf *node_composit_get_zimage(bNode *node, RenderData *rd) } /* check if layer is available, returns pass buffer */ -static CompBuf *compbuf_multilayer_get(RenderData *rd, RenderLayer *rl, Image *ima, ImageUser *iuser, int passtype) +static CompBuf *compbuf_multilayer_get(RenderData *rd, RenderLayer *rl, Image *ima, ImageUser *iuser, int passindex) { - RenderPass *rpass; - short index; - - for (index=0, rpass= rl->passes.first; rpass; rpass= rpass->next, index++) - if (rpass->passtype==passtype) - break; - + RenderPass *rpass = BLI_findlink(&rl->passes, passindex); if (rpass) { CompBuf *cbuf; - iuser->pass= index; + iuser->pass = passindex; BKE_image_multilayer_index(ima->rr, iuser); - cbuf= node_composit_get_image(rd, ima, iuser); + cbuf = node_composit_get_image(rd, ima, iuser); return cbuf; } return NULL; } -static void outputs_multilayer_get(RenderData *rd, RenderLayer *rl, bNodeStack **out, Image *ima, ImageUser *iuser) -{ - if (out[RRES_OUT_Z]->hasoutput) - out[RRES_OUT_Z]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_Z); - if (out[RRES_OUT_VEC]->hasoutput) - out[RRES_OUT_VEC]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_VECTOR); - if (out[RRES_OUT_NORMAL]->hasoutput) - out[RRES_OUT_NORMAL]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_NORMAL); - if (out[RRES_OUT_UV]->hasoutput) - out[RRES_OUT_UV]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_UV); - - if (out[RRES_OUT_RGBA]->hasoutput) - out[RRES_OUT_RGBA]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_RGBA); - if (out[RRES_OUT_DIFF]->hasoutput) - out[RRES_OUT_DIFF]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_DIFFUSE); - if (out[RRES_OUT_SPEC]->hasoutput) - out[RRES_OUT_SPEC]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_SPEC); - if (out[RRES_OUT_SHADOW]->hasoutput) - out[RRES_OUT_SHADOW]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_SHADOW); - if (out[RRES_OUT_AO]->hasoutput) - out[RRES_OUT_AO]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_AO); - if (out[RRES_OUT_REFLECT]->hasoutput) - out[RRES_OUT_REFLECT]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_REFLECT); - if (out[RRES_OUT_REFRACT]->hasoutput) - out[RRES_OUT_REFRACT]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_REFRACT); - if (out[RRES_OUT_INDIRECT]->hasoutput) - out[RRES_OUT_INDIRECT]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_INDIRECT); - if (out[RRES_OUT_INDEXOB]->hasoutput) - out[RRES_OUT_INDEXOB]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_INDEXOB); - if (out[RRES_OUT_INDEXMA]->hasoutput) - out[RRES_OUT_INDEXMA]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_INDEXMA); - if (out[RRES_OUT_MIST]->hasoutput) - out[RRES_OUT_MIST]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_MIST); - if (out[RRES_OUT_EMIT]->hasoutput) - out[RRES_OUT_EMIT]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_EMIT); - if (out[RRES_OUT_ENV]->hasoutput) - out[RRES_OUT_ENV]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_ENVIRONMENT); - if (out[RRES_OUT_DIFF_DIRECT]->hasoutput) - out[RRES_OUT_DIFF_DIRECT]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_DIFFUSE_DIRECT); - if (out[RRES_OUT_DIFF_INDIRECT]->hasoutput) - out[RRES_OUT_DIFF_INDIRECT]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_DIFFUSE_INDIRECT); - if (out[RRES_OUT_DIFF_COLOR]->hasoutput) - out[RRES_OUT_DIFF_COLOR]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_DIFFUSE_COLOR); - if (out[RRES_OUT_GLOSSY_DIRECT]->hasoutput) - out[RRES_OUT_GLOSSY_DIRECT]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_GLOSSY_DIRECT); - if (out[RRES_OUT_GLOSSY_INDIRECT]->hasoutput) - out[RRES_OUT_GLOSSY_INDIRECT]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_GLOSSY_INDIRECT); - if (out[RRES_OUT_GLOSSY_COLOR]->hasoutput) - out[RRES_OUT_GLOSSY_COLOR]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_GLOSSY_COLOR); - if (out[RRES_OUT_TRANSM_DIRECT]->hasoutput) - out[RRES_OUT_TRANSM_DIRECT]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_TRANSM_DIRECT); - if (out[RRES_OUT_TRANSM_INDIRECT]->hasoutput) - out[RRES_OUT_TRANSM_INDIRECT]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_TRANSM_INDIRECT); - if (out[RRES_OUT_TRANSM_COLOR]->hasoutput) - out[RRES_OUT_TRANSM_COLOR]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_TRANSM_COLOR); -} - - static void node_composit_exec_image(void *data, bNode *node, bNodeStack **UNUSED(in), bNodeStack **out) { @@ -277,7 +418,6 @@ static void node_composit_exec_image(void *data, bNode *node, bNodeStack **UNUSE RenderData *rd= data; Image *ima= (Image *)node->id; ImageUser *iuser= (ImageUser *)node->storage; - CompBuf *stackbuf= NULL; /* first set the right frame number in iuser */ BKE_image_user_calc_frame(iuser, rd->cfra, 0); @@ -290,15 +430,36 @@ static void node_composit_exec_image(void *data, bNode *node, bNodeStack **UNUSE RenderLayer *rl= BLI_findlink(&ima->rr->layers, iuser->layer); if (rl) { - out[0]->data= stackbuf= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_COMBINED); + bNodeSocket *sock; + int out_index; + CompBuf *combinedbuf= NULL, *firstbuf= NULL; - /* go over all layers */ - outputs_multilayer_get(rd, rl, out, ima, iuser); + for (sock=node->outputs.first, out_index=0; sock; sock=sock->next, ++out_index) { + int passindex = GET_INT_FROM_POINTER(sock->storage); + if (out[out_index]->hasoutput) { + CompBuf *stackbuf = out[out_index]->data = compbuf_multilayer_get(rd, rl, ima, iuser, passindex); + if (stackbuf) { + /* preview policy: take first 'Combined' pass if available, + * otherwise just use the first layer. + */ + if (!firstbuf) + firstbuf = stackbuf; + if (!combinedbuf && + (strcmp(sock->name, "Combined")==0 || strcmp(sock->name, "Image")==0)) + combinedbuf = stackbuf; + } + } + } + + /* preview */ + if (combinedbuf) + generate_preview(data, node, combinedbuf); + else if (firstbuf) + generate_preview(data, node, firstbuf); } } else { - stackbuf= node_composit_get_image(rd, ima, iuser); - + CompBuf *stackbuf = node_composit_get_image(rd, ima, iuser); if (stackbuf) { /*respect image premul option*/ if (stackbuf->type==CB_RGBA && ima->flag & IMA_DO_PREMUL) { @@ -324,23 +485,23 @@ static void node_composit_exec_image(void *data, bNode *node, bNodeStack **UNUSE /* put image on stack */ out[0]->data= stackbuf; - + + /* alpha output */ + if (out[1]->hasoutput) + out[1]->data= valbuf_from_rgbabuf(stackbuf, CHAN_A); + + /* Z output */ if (out[2]->hasoutput) out[2]->data= node_composit_get_zimage(node, rd); + + /* preview */ + generate_preview(data, node, stackbuf); } } - - /* alpha and preview for both types */ - if (stackbuf) { - if (out[1]->hasoutput) - out[1]->data= valbuf_from_rgbabuf(stackbuf, CHAN_A); - - generate_preview(data, node, stackbuf); - } } } -static void node_composit_init_image(bNodeTree *UNUSED(ntree), bNode* node, bNodeTemplate *UNUSED(ntemp)) +static void node_composit_init_image(bNodeTree *ntree, bNode* node, bNodeTemplate *UNUSED(ntemp)) { ImageUser *iuser= MEM_callocN(sizeof(ImageUser), "node image user"); node->storage= iuser; @@ -348,6 +509,9 @@ static void node_composit_init_image(bNodeTree *UNUSED(ntree), bNode* node, bNod iuser->sfra= 1; iuser->fie_ima= 2; iuser->ok= 1; + + /* setup initial outputs */ + cmp_node_image_verify_outputs(ntree, node); } void register_node_type_cmp_image(bNodeTreeType *ttype) @@ -355,10 +519,10 @@ void register_node_type_cmp_image(bNodeTreeType *ttype) static bNodeType ntype; node_type_base(ttype, &ntype, CMP_NODE_IMAGE, "Image", NODE_CLASS_INPUT, NODE_PREVIEW|NODE_OPTIONS); - node_type_socket_templates(&ntype, NULL, cmp_node_rlayers_out); node_type_size(&ntype, 120, 80, 300); node_type_init(&ntype, node_composit_init_image); node_type_storage(&ntype, "ImageUser", node_free_standard_storage, node_copy_standard_storage); + node_type_update(&ntype, cmp_node_image_update, NULL); node_type_exec(&ntype, node_composit_exec_image); nodeRegisterType(ttype, &ntype); @@ -449,6 +613,8 @@ static void node_composit_rlayers_out(RenderData *rd, RenderLayer *rl, bNodeStac out[RRES_OUT_TRANSM_COLOR]->data= compbuf_from_pass(rd, rl, rectx, recty, SCE_PASS_TRANSM_COLOR); } + + static void node_composit_exec_rlayers(void *data, bNode *node, bNodeStack **UNUSED(in), bNodeStack **out) { Scene *sce= (Scene *)node->id; From caafc8184bb63f38eeac13f9acf7f7410cddc440 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 16 Apr 2012 13:53:30 +0000 Subject: [PATCH 065/156] Fix #30720: Creating Navmesh crashes blender In fact there were several issues fixed (all of them regressions since bmesh merge): - Creating navmesh crashed because creating new faces for mesh was trying to set default values for all customdata layers in this face. This requires memory pool created for this datablock. Usually this pool is creating on creating datablock if there're some elements to be stored in this block. In cases of regular primitive creating it wasn't an issue because they doesn't create customdata layers, they only creates geometry. Navigation mesh creates geometry and customdata layers (CD_RECAST layer) which used to confuse a bit custom data functions. Solved by ensuring there's memory pool created for polygons datablock after adding new custom data layer. Most probably it's better to be resolved on CD level (like smarter track on changed amount of stored data and so) but prefer not to make such global changes so close to the release. - Toggling edit mode lead to loosing recast datalayer. Solved by adding recast layer to bmesh mask so it'll be copied to/from edit mesh. - Some part of code assumed raycast layer is in face datablock, some that it's in polygon datablock. Made it to be in polygons datablock. Kind of temporary solution to make navmesh working, probably it'll fail if one will want to edit navmesh by hand after it was generated. Proper way would be to ensure the whole navmesh things are using ngons. --- .../blender/blenkernel/intern/DerivedMesh.c | 34 +++++++++---------- source/blender/blenkernel/intern/customdata.c | 2 +- .../blenkernel/intern/navmesh_conversion.c | 2 +- source/blender/editors/mesh/mesh_navmesh.c | 1 + source/gameengine/Ketsji/KX_NavMeshObject.cpp | 3 +- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index e6fb506620c..3330a6596a7 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -1753,18 +1753,6 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos add_orco_dm(ob, NULL, *deform_r, NULL, CD_ORCO); } -#ifdef WITH_GAMEENGINE - /* NavMesh - this is a hack but saves having a NavMesh modifier */ - if ((ob->gameflag & OB_NAVMESH) && (finaldm->type == DM_TYPE_CDDM)) { - DerivedMesh *tdm; - tdm= navmesh_dm_createNavMeshForVisualization(finaldm); - if (finaldm != tdm) { - finaldm->release(finaldm); - finaldm= tdm; - } - } -#endif /* WITH_GAMEENGINE */ - { /* calculating normals can re-calculate tessfaces in some cases */ #if 0 @@ -1820,6 +1808,18 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos } } +#ifdef WITH_GAMEENGINE + /* NavMesh - this is a hack but saves having a NavMesh modifier */ + if ((ob->gameflag & OB_NAVMESH) && (finaldm->type == DM_TYPE_CDDM)) { + DerivedMesh *tdm; + tdm= navmesh_dm_createNavMeshForVisualization(finaldm); + if (finaldm != tdm) { + finaldm->release(finaldm); + finaldm= tdm; + } + } +#endif /* WITH_GAMEENGINE */ + *final_r = finaldm; if (orcodm) @@ -2898,7 +2898,7 @@ static void navmesh_drawColored(DerivedMesh *dm) int a, glmode; MVert *mvert = (MVert *)CustomData_get_layer(&dm->vertData, CD_MVERT); MFace *mface = (MFace *)CustomData_get_layer(&dm->faceData, CD_MFACE); - int *polygonIdx = (int *)CustomData_get_layer(&dm->faceData, CD_RECAST); + int *polygonIdx = (int *)CustomData_get_layer(&dm->polyData, CD_RECAST); float col[3]; if (!polygonIdx) @@ -2980,14 +2980,14 @@ static DerivedMesh *navmesh_dm_createNavMeshForVisualization(DerivedMesh *dm) int res; result = CDDM_copy(dm); - if (!CustomData_has_layer(&result->faceData, CD_RECAST)) { - int *sourceRecastData = (int*)CustomData_get_layer(&dm->faceData, CD_RECAST); + if (!CustomData_has_layer(&result->polyData, CD_RECAST)) { + int *sourceRecastData = (int*)CustomData_get_layer(&dm->polyData, CD_RECAST); if (sourceRecastData) { - CustomData_add_layer_named(&result->faceData, CD_RECAST, CD_DUPLICATE, + CustomData_add_layer_named(&result->polyData, CD_RECAST, CD_DUPLICATE, sourceRecastData, maxFaces, "recastData"); } } - recastData = (int*)CustomData_get_layer(&result->faceData, CD_RECAST); + recastData = (int*)CustomData_get_layer(&result->polyData, CD_RECAST); /* note: This is not good design! - really should not be doing this */ result->drawFacesTex = navmesh_DM_drawFacesTex; diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index f0bda57466d..2450f3ca83e 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -1099,7 +1099,7 @@ const CustomDataMask CD_MASK_DERIVEDMESH = CD_MASK_ORIGINDEX | CD_MASK_POLYINDEX; const CustomDataMask CD_MASK_BMESH = CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_PROP_FLT | CD_MASK_PROP_INT | - CD_MASK_PROP_STR | CD_MASK_SHAPEKEY | CD_MASK_SHAPE_KEYINDEX | CD_MASK_MDISPS | CD_MASK_CREASE | CD_MASK_BWEIGHT; + CD_MASK_PROP_STR | CD_MASK_SHAPEKEY | CD_MASK_SHAPE_KEYINDEX | CD_MASK_MDISPS | CD_MASK_CREASE | CD_MASK_BWEIGHT | CD_MASK_RECAST; const CustomDataMask CD_MASK_FACECORNERS = CD_MASK_MTFACE | CD_MASK_MCOL | CD_MASK_MTEXPOLY | CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL; diff --git a/source/blender/blenkernel/intern/navmesh_conversion.c b/source/blender/blenkernel/intern/navmesh_conversion.c index 27e309e9d20..34e0be1de92 100644 --- a/source/blender/blenkernel/intern/navmesh_conversion.c +++ b/source/blender/blenkernel/intern/navmesh_conversion.c @@ -166,7 +166,7 @@ int buildRawVertIndicesData(DerivedMesh* dm, int *nverts_r, float **verts_r, } //carefully, recast data is just reference to data in derived mesh - *recastData = (int*)CustomData_get_layer(&dm->faceData, CD_RECAST); + *recastData = (int*)CustomData_get_layer(&dm->polyData, CD_RECAST); *nverts_r = nverts; *verts_r = verts; diff --git a/source/blender/editors/mesh/mesh_navmesh.c b/source/blender/editors/mesh/mesh_navmesh.c index f1b0a82b654..7d78a527b06 100644 --- a/source/blender/editors/mesh/mesh_navmesh.c +++ b/source/blender/editors/mesh/mesh_navmesh.c @@ -345,6 +345,7 @@ static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh, /* create custom data layer to save polygon idx */ CustomData_add_layer_named(&em->bm->pdata, CD_RECAST, CD_CALLOC, NULL, 0, "createRepresentation recastData"); + CustomData_bmesh_init_pool(&em->bm->pdata, 0, BM_FACE); /* create verts and faces for detailed mesh */ meshes = recast_polyMeshDetailGetMeshes(dmesh, &nmeshes); diff --git a/source/gameengine/Ketsji/KX_NavMeshObject.cpp b/source/gameengine/Ketsji/KX_NavMeshObject.cpp index 22f96eb7297..35058e5fe5d 100644 --- a/source/gameengine/Ketsji/KX_NavMeshObject.cpp +++ b/source/gameengine/Ketsji/KX_NavMeshObject.cpp @@ -112,7 +112,8 @@ bool KX_NavMeshObject::BuildVertIndArrays(float *&vertices, int& nverts, { DerivedMesh* dm = mesh_create_derived_no_virtual(KX_GetActiveScene()->GetBlenderScene(), GetBlenderObject(), NULL, CD_MASK_MESH); - int* recastData = (int*) dm->getTessFaceDataArray(dm, CD_RECAST); + CustomData *pdata = dm->getPolyDataLayout(dm); + int* recastData = (int*) CustomData_get_layer(pdata, CD_RECAST); if (recastData) { int *dtrisToPolysMap=NULL, *dtrisToTrisMap=NULL, *trisToFacesMap=NULL; From 6e40088604b744eba4eb1775ac0776998d8a03cc Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 16 Apr 2012 14:27:22 +0000 Subject: [PATCH 066/156] Partial revert of rev45691: allow lightmap undo and add comment why redo was disabled --- .../scripts/startup/bl_operators/uvcalc_lightmap.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/release/scripts/startup/bl_operators/uvcalc_lightmap.py b/release/scripts/startup/bl_operators/uvcalc_lightmap.py index 3074db17d0f..417ae89218c 100644 --- a/release/scripts/startup/bl_operators/uvcalc_lightmap.py +++ b/release/scripts/startup/bl_operators/uvcalc_lightmap.py @@ -550,6 +550,16 @@ class LightMapPack(Operator): bl_idname = "uv.lightmap_pack" bl_label = "Lightmap Pack" + # Disable REGISTER flag for now because this operator might create new + # images. This leads to non-proper operator redo because current undo + # stack is local for edit mode and can not remove images created by this + # oprtator. + # Proper solution would be to make undo stack aware of such things, + # but for now just disable redo. Keep undo here so unwanted changes to uv + # coords might be undone. + # This fixes infinite image creation reported there [#30968] (sergey) + bl_options = {'UNDO'} + PREF_CONTEXT = bpy.props.EnumProperty( name="Selection", items=(('SEL_FACES', "Selected Faces", "Space all UVs evently"), From e0605cca9a09d9d33974f7beea3acbb1741b476e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 14:34:48 +0000 Subject: [PATCH 067/156] fix error when a failed thumb overrides a newer good thumbnail. on saving blend file remove failed thumb. --- source/blender/windowmanager/intern/wm_files.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 0ffd9e00f7e..9ffea0e290b 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -805,6 +805,7 @@ int WM_write_file(bContext *C, const char *target, int fileflags, ReportList *re /* run this function after because the file cant be written before the blend is */ if (ibuf_thumb) { + IMB_thumb_delete(filepath, THB_FAIL); /* without this a failed thumb overrides */ ibuf_thumb = IMB_thumb_create(filepath, THB_NORMAL, THB_SOURCE_BLEND, ibuf_thumb); IMB_freeImBuf(ibuf_thumb); } From 0f7ab89b4ee803aa9cb2182eb6f394d2cf28de56 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 15:13:21 +0000 Subject: [PATCH 068/156] fix for fail thumbs being used when the failed thumbnail image is older then the image/movie/blend. --- source/blender/blenlib/intern/storage.c | 1 + source/blender/imbuf/intern/thumbs.c | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c index 9bcbdcce12e..f4070f76519 100644 --- a/source/blender/blenlib/intern/storage.c +++ b/source/blender/blenlib/intern/storage.c @@ -551,6 +551,7 @@ void BLI_file_free_lines(LinkNode *lines) BLI_linklist_free(lines, (void(*)(void*)) MEM_freeN); } +/** is file1 older then file2 */ int BLI_file_older(const char *file1, const char *file2) { #ifdef WIN32 diff --git a/source/blender/imbuf/intern/thumbs.c b/source/blender/imbuf/intern/thumbs.c index 5c54fbab0cf..5d64e1b2aec 100644 --- a/source/blender/imbuf/intern/thumbs.c +++ b/source/blender/imbuf/intern/thumbs.c @@ -223,6 +223,8 @@ static void thumbname_from_uri(const char* uri, char* thumb, const int thumb_len to_hex_char(hexdigest, digest, 16); hexdigest[32] = '\0'; BLI_snprintf(thumb, thumb_len, "%s.png", hexdigest); + + // printf("%s: '%s' --> '%s'\n", __func__, uri, thumb); } static int thumbpath_from_uri(const char* uri, char* path, const int path_len, ThumbSize size) @@ -378,7 +380,9 @@ ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, Im if (IMB_saveiff(img, temp, IB_rect | IB_metadata)) { #ifndef WIN32 chmod(temp, S_IRUSR | S_IWUSR); -#endif +#endif + // printf("%s saving thumb: '%s'\n", __func__, tpath); + BLI_rename(temp, tpath); } @@ -441,7 +445,13 @@ ImBuf* IMB_thumb_manage(const char* path, ThumbSize size, ThumbSource source) if (thumbpath_from_uri(uri, thumb, sizeof(thumb), THB_FAIL)) { /* failure thumb exists, don't try recreating */ if (BLI_exists(thumb)) { - return NULL; + /* clear out of date fail case */ + if (BLI_file_older(thumb, path)) { + BLI_delete(thumb, 0, 0); + } + else { + return NULL; + } } } From e889fa467816950c828f7696be2433c472a7d4ad Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 16:24:55 +0000 Subject: [PATCH 069/156] improve scanfill for uneven ngons, previously scanfill would use the most angular corner, but this made non planer ngons rip frequently (often reported problem). now calculate the normal as with ngons. --- source/blender/blenlib/intern/scanfill.c | 55 +++++++++++------------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index 69b8f3f3ee7..a303cadab85 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -786,7 +786,7 @@ int BLI_edgefill(ScanFillContext *sf_ctx, const short do_quad_tri_speedup) ScanFillVert *eve; ScanFillEdge *eed, *nexted; PolyFill *pflist, *pf; - float limit, *min_xy_p, *max_xy_p, *v1, *v2, norm[3], len; + float *min_xy_p, *max_xy_p; short a, c, poly = 0, ok = 0, toggle = 0; int totfaces = 0; /* total faces added */ int co_x, co_y; @@ -813,7 +813,7 @@ int BLI_edgefill(ScanFillContext *sf_ctx, const short do_quad_tri_speedup) eve = sf_ctx->fillvertbase.first; /* no need to check 'eve->next->next->next' is valid, already counted */ - /*use shortest diagonal for quad*/ + /* use shortest diagonal for quad */ sub_v3_v3v3(vec1, eve->co, eve->next->next->co); sub_v3_v3v3(vec2, eve->next->co, eve->next->next->next->co); @@ -848,41 +848,36 @@ int BLI_edgefill(ScanFillContext *sf_ctx, const short do_quad_tri_speedup) eve = eve->next; } - if (ok == 0) return 0; + if (ok == 0) { + return 0; + } + else { + /* define projection: with 'best' normal */ + /* Newell's Method */ + /* Similar code used elsewhere, but this checks for double ups + * which historically this function supports so better not change */ + float *v_prev; + float n[3] = {0.0f}; - /* NEW NEW! define projection: with 'best' normal */ - /* just use the first three different vertices */ - - /* THIS PART STILL IS PRETTY WEAK! (ton) */ + eve = sf_ctx->fillvertbase.last; + v_prev = eve->co; - eve = sf_ctx->fillvertbase.last; - len = 0.0; - v1 = eve->co; - v2 = 0; - eve = sf_ctx->fillvertbase.first; - limit = 1e-8f; - - while (eve) { - if (v2) { - if (!compare_v3v3(v2, eve->co, COMPLIMIT)) { - float inner = angle_v3v3v3(v1, v2, eve->co); - inner = MIN2(fabsf(inner), fabsf(M_PI - inner)); - - if (inner > limit) { - limit = inner; - len = normal_tri_v3(norm, v1, v2, eve->co); - } + for (eve = sf_ctx->fillvertbase.first; eve; eve = eve->next) { + if (LIKELY(!compare_v3v3(v_prev, eve->co, COMPLIMIT))) { + n[0] += (v_prev[1] - eve->co[1]) * (v_prev[2] + eve->co[2]); + n[1] += (v_prev[2] - eve->co[2]) * (v_prev[0] + eve->co[0]); + n[2] += (v_prev[0] - eve->co[0]) * (v_prev[1] + eve->co[1]); } + v_prev = eve->co; } - else if (!compare_v3v3(v1, eve->co, COMPLIMIT)) - v2 = eve->co; - eve = eve->next; + if (UNLIKELY(normalize_v3(n) == 0.0f)) { + n[2] = 1.0f; /* other axis set to 0.0 */ + } + + axis_dominant_v3(&co_x, &co_y, n); } - if (len == 0.0f) return 0; /* no fill possible */ - - axis_dominant_v3(&co_x, &co_y, norm); /* STEP 1: COUNT POLYS */ eve = sf_ctx->fillvertbase.first; From 67f8e3a3a7af4146b9bb7ae40f1bdc8dabc2b48f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 16:49:37 +0000 Subject: [PATCH 070/156] inline function for "Newell's Method" used for normal calc. --- source/blender/blenlib/BLI_math_vector.h | 2 ++ source/blender/blenlib/intern/math_base_inline.c | 2 +- .../blender/blenlib/intern/math_vector_inline.c | 15 +++++++++++++-- source/blender/blenlib/intern/scanfill.c | 4 +--- source/blender/bmesh/intern/bmesh_polygon.c | 12 +++--------- 5 files changed, 20 insertions(+), 15 deletions(-) diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h index 7fba2699fc7..54c06616110 100644 --- a/source/blender/blenlib/BLI_math_vector.h +++ b/source/blender/blenlib/BLI_math_vector.h @@ -124,6 +124,8 @@ MINLINE float dot_v3v3(const float a[3], const float b[3]); MINLINE float cross_v2v2(const float a[2], const float b[2]); MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3]); +MINLINE void add_newell_cross_v3_v3v3(float n[3], const float v_prev[3], const float v_curr[3]); + MINLINE void star_m3_v3(float rmat[3][3],float a[3]); /*********************************** Length **********************************/ diff --git a/source/blender/blenlib/intern/math_base_inline.c b/source/blender/blenlib/intern/math_base_inline.c index 58c882e894e..b2d5392c596 100644 --- a/source/blender/blenlib/intern/math_base_inline.c +++ b/source/blender/blenlib/intern/math_base_inline.c @@ -92,7 +92,7 @@ MINLINE float saasinf(float fac) MINLINE float sasqrtf(float fac) { if (fac <= 0.0f) return 0.0f; - return (float)sqrtf(fac); + return sqrtf(fac); } MINLINE float interpf(float target, float origin, float fac) diff --git a/source/blender/blenlib/intern/math_vector_inline.c b/source/blender/blenlib/intern/math_vector_inline.c index 62e582c89c4..ef8f26e3780 100644 --- a/source/blender/blenlib/intern/math_vector_inline.c +++ b/source/blender/blenlib/intern/math_vector_inline.c @@ -480,6 +480,17 @@ MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3]) r[2] = a[0] * b[1] - a[1] * b[0]; } +/* Newell's Method */ +/* excuse this fairly spesific function, + * its used for polygon normals all over the place + * could use a better name */ +MINLINE void add_newell_cross_v3_v3v3(float n[3], const float v_prev[3], const float v_curr[3]) +{ + n[0] += (v_prev[1] - v_curr[1]) * (v_prev[2] + v_curr[2]); + n[1] += (v_prev[2] - v_curr[2]) * (v_prev[0] + v_curr[0]); + n[2] += (v_prev[0] - v_curr[0]) * (v_prev[1] + v_curr[1]); +} + MINLINE void star_m3_v3(float rmat[][3], float a[3]) { rmat[0][0] = rmat[1][1] = rmat[2][2] = 0.0; @@ -505,7 +516,7 @@ MINLINE float len_squared_v3(const float v[3]) MINLINE float len_v2(const float v[2]) { - return (float)sqrtf(v[0] * v[0] + v[1] * v[1]); + return sqrtf(v[0] * v[0] + v[1] * v[1]); } MINLINE float len_v2v2(const float v1[2], const float v2[2]) @@ -514,7 +525,7 @@ MINLINE float len_v2v2(const float v1[2], const float v2[2]) x = v1[0] - v2[0]; y = v1[1] - v2[1]; - return (float)sqrtf(x * x + y * y); + return sqrtf(x * x + y * y); } MINLINE float len_v3(const float a[3]) diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index a303cadab85..1b60d58b154 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -864,9 +864,7 @@ int BLI_edgefill(ScanFillContext *sf_ctx, const short do_quad_tri_speedup) for (eve = sf_ctx->fillvertbase.first; eve; eve = eve->next) { if (LIKELY(!compare_v3v3(v_prev, eve->co, COMPLIMIT))) { - n[0] += (v_prev[1] - eve->co[1]) * (v_prev[2] + eve->co[2]); - n[1] += (v_prev[2] - eve->co[2]) * (v_prev[0] + eve->co[0]); - n[2] += (v_prev[0] - eve->co[0]) * (v_prev[1] + eve->co[1]); + add_newell_cross_v3_v3v3(n, v_prev, eve->co); } v_prev = eve->co; } diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c index 67e3d24ade1..77e50b1ea3f 100644 --- a/source/blender/bmesh/intern/bmesh_polygon.c +++ b/source/blender/bmesh/intern/bmesh_polygon.c @@ -84,9 +84,7 @@ static void compute_poly_normal(float normal[3], float verts[][3], int nverts) /* Newell's Method */ for (i = 0; i < nverts; v_prev = v_curr, v_curr = verts[++i]) { - n[0] += (v_prev[1] - v_curr[1]) * (v_prev[2] + v_curr[2]); - n[1] += (v_prev[2] - v_curr[2]) * (v_prev[0] + v_curr[0]); - n[2] += (v_prev[0] - v_curr[0]) * (v_prev[1] + v_curr[1]); + add_newell_cross_v3_v3v3(n, v_prev, v_curr); } if (UNLIKELY(normalize_v3_v3(normal, n) == 0.0f)) { @@ -109,9 +107,7 @@ static void bm_face_compute_poly_normal(BMFace *f) /* Newell's Method */ do { - n[0] += (v_prev[1] - v_curr[1]) * (v_prev[2] + v_curr[2]); - n[1] += (v_prev[2] - v_curr[2]) * (v_prev[0] + v_curr[0]); - n[2] += (v_prev[0] - v_curr[0]) * (v_prev[1] + v_curr[1]); + add_newell_cross_v3_v3v3(n, v_prev, v_curr); l_iter = l_iter->next; v_prev = v_curr; @@ -142,9 +138,7 @@ static void bm_face_compute_poly_normal_vertex_cos(BMFace *f, float n[3], /* Newell's Method */ do { - n[0] += (v_prev[1] - v_curr[1]) * (v_prev[2] + v_curr[2]); - n[1] += (v_prev[2] - v_curr[2]) * (v_prev[0] + v_curr[0]); - n[2] += (v_prev[0] - v_curr[0]) * (v_prev[1] + v_curr[1]); + add_newell_cross_v3_v3v3(n, v_prev, v_curr); l_iter = l_iter->next; v_prev = v_curr; From 195d6c1b1a363bb30b6efaf9c274cc45edaa6f9a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Apr 2012 18:24:49 +0000 Subject: [PATCH 071/156] minor speedup for scanfill, dont calculate the normal if its already known - use for editmode ngon filling. --- .../blenkernel/intern/editderivedmesh.c | 2 +- source/blender/blenlib/BLI_scanfill.h | 2 ++ source/blender/blenlib/intern/scanfill.c | 36 ++++++++++++------- source/blender/bmesh/intern/bmesh_polygon.c | 6 ++-- .../editors/uvedit/uvedit_unwrap_ops.c | 2 +- .../blender/windowmanager/intern/wm_gesture.c | 3 +- 6 files changed, 33 insertions(+), 18 deletions(-) diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index 07a43db8560..d9a011d481f 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -218,7 +218,7 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm) /*complete the loop*/ BLI_addfilledge(&sf_ctx, firstv, v); - totfilltri = BLI_edgefill(&sf_ctx, FALSE); + totfilltri = BLI_edgefill_ex(&sf_ctx, FALSE, f->no); BLI_array_growitems(looptris, totfilltri); for (efa = sf_ctx.fillfacebase.first; efa; efa=efa->next) { diff --git a/source/blender/blenlib/BLI_scanfill.h b/source/blender/blenlib/BLI_scanfill.h index 67ff9a88700..5a5e55cc90a 100644 --- a/source/blender/blenlib/BLI_scanfill.h +++ b/source/blender/blenlib/BLI_scanfill.h @@ -100,6 +100,8 @@ struct ScanFillEdge *BLI_addfilledge(ScanFillContext *sf_ctx, struct ScanFillVer int BLI_begin_edgefill(ScanFillContext *sf_ctx); int BLI_edgefill(ScanFillContext *sf_ctx, const short do_quad_tri_speedup); +int BLI_edgefill_ex(ScanFillContext *sf_ctx, const short do_quad_tri_speedup, + const float nor_proj[3]); void BLI_end_edgefill(ScanFillContext *sf_ctx); /* These callbacks are needed to make the lib finction properly */ diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index 1b60d58b154..4878ad628ef 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -773,6 +773,11 @@ int BLI_begin_edgefill(ScanFillContext *sf_ctx) } int BLI_edgefill(ScanFillContext *sf_ctx, const short do_quad_tri_speedup) +{ + return BLI_edgefill_ex(sf_ctx, do_quad_tri_speedup, NULL); +} + +int BLI_edgefill_ex(ScanFillContext *sf_ctx, const short do_quad_tri_speedup, const float nor_proj[3]) { /* * - fill works with its own lists, so create that first (no faces!) @@ -852,21 +857,28 @@ int BLI_edgefill(ScanFillContext *sf_ctx, const short do_quad_tri_speedup) return 0; } else { - /* define projection: with 'best' normal */ - /* Newell's Method */ - /* Similar code used elsewhere, but this checks for double ups - * which historically this function supports so better not change */ - float *v_prev; - float n[3] = {0.0f}; + float n[3]; - eve = sf_ctx->fillvertbase.last; - v_prev = eve->co; + if (nor_proj) { + copy_v3_v3(n, nor_proj); + } + else { + /* define projection: with 'best' normal */ + /* Newell's Method */ + /* Similar code used elsewhere, but this checks for double ups + * which historically this function supports so better not change */ + float *v_prev; - for (eve = sf_ctx->fillvertbase.first; eve; eve = eve->next) { - if (LIKELY(!compare_v3v3(v_prev, eve->co, COMPLIMIT))) { - add_newell_cross_v3_v3v3(n, v_prev, eve->co); - } + zero_v3(n); + eve = sf_ctx->fillvertbase.last; v_prev = eve->co; + + for (eve = sf_ctx->fillvertbase.first; eve; eve = eve->next) { + if (LIKELY(!compare_v3v3(v_prev, eve->co, COMPLIMIT))) { + add_newell_cross_v3_v3v3(n, v_prev, eve->co); + } + v_prev = eve->co; + } } if (UNLIKELY(normalize_v3(n) == 0.0f)) { diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c index 77e50b1ea3f..1b480ab0315 100644 --- a/source/blender/bmesh/intern/bmesh_polygon.c +++ b/source/blender/bmesh/intern/bmesh_polygon.c @@ -529,8 +529,8 @@ static int linecrossesf(const float v1[2], const float v2[2], const float v3[2], GETMIN2(v1, v2, mv1, mv2); GETMIN2(v3, v4, mv3, mv4); - /* do an interval test on the x and y axe */ - /* first do x axi */ + /* do an interval test on the x and y axes */ + /* first do x axis */ if (ABS(v1[1] - v2[1]) < EPS && ABS(v3[1] - v4[1]) < EPS && ABS(v1[1] - v3[1]) < EPS) @@ -538,7 +538,7 @@ static int linecrossesf(const float v1[2], const float v2[2], const float v3[2], return (mv4[0] >= mv1[0] && mv3[0] <= mv2[0]); } - /* now do y axi */ + /* now do y axis */ if (ABS(v1[0] - v2[0]) < EPS && ABS(v3[0] - v4[0]) < EPS && ABS(v1[0] - v3[0]) < EPS) diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index 5b3c4f9cd97..6e1506d4c0f 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -288,7 +288,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, BLI_addfilledge(&sf_ctx, firstv, v); - BLI_edgefill(&sf_ctx, TRUE); + BLI_edgefill_ex(&sf_ctx, TRUE, efa->no); for (sefa = sf_ctx.fillfacebase.first; sefa; sefa = sefa->next) { ls[0] = sefa->v1->tmp.p; ls[1] = sefa->v2->tmp.p; diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index 0add9106872..bfa3645bf57 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -253,8 +253,9 @@ static void draw_filled_lasso(wmGesture *gt) /* highly unlikely this will fail, but could crash if (gt->points == 0) */ if (firstv) { + float zvec[3] = {0.0f, 0.0f, 1.0f}; BLI_addfilledge(&sf_ctx, firstv, v); - BLI_edgefill(&sf_ctx, FALSE); + BLI_edgefill_ex(&sf_ctx, FALSE, zvec); glEnable(GL_BLEND); glColor4f(1.0, 1.0, 1.0, 0.05); From 348622360752916f9b776597e846cd2af260cdb9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 17 Apr 2012 05:09:37 +0000 Subject: [PATCH 072/156] code cleanup: remove/comment some unused code. --- source/blender/blenfont/intern/blf_font.c | 4 ++-- source/blender/bmesh/operators/bmo_mirror.c | 6 +++--- source/blender/editors/mesh/editmesh_bvh.c | 13 ------------- source/blender/editors/mesh/editmesh_tools.c | 4 ++-- source/blender/editors/sound/sound_ops.c | 3 +-- 5 files changed, 8 insertions(+), 22 deletions(-) diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c index 84cefc923a0..7a4e1d4b781 100644 --- a/source/blender/blenfont/intern/blf_font.c +++ b/source/blender/blenfont/intern/blf_font.c @@ -279,8 +279,8 @@ void blf_font_buffer(FontBLF *font, const char *str) if (font->b_fbuf) { int yb = yb_start; - for (y = (chy >= 0 ? 0:-chy); y < height_clip; y++) { - for (x = (chx >= 0 ? 0:-chx); x < width_clip; x++) { + for (y = ((chy >= 0) ? 0 : -chy); y < height_clip; y++) { + for (x = ((chx >= 0) ? 0 : -chx); x < width_clip; x++) { a = *(g->bitmap + x + (yb * g->pitch)) / 255.0f; if (a > 0.0f) { diff --git a/source/blender/bmesh/operators/bmo_mirror.c b/source/blender/bmesh/operators/bmo_mirror.c index 1b6d64073c0..17a00f5e095 100644 --- a/source/blender/bmesh/operators/bmo_mirror.c +++ b/source/blender/bmesh/operators/bmo_mirror.c @@ -43,7 +43,7 @@ void bmo_mirror_exec(BMesh *bm, BMOperator *op) BMOperator dupeop, weldop; BMOIter siter; BMIter iter; - BMVert *v, *v2, **vmap = NULL; + BMVert *v /* , *v2 */ /* UNUSED */, **vmap = NULL; BLI_array_declare(vmap); BMEdge /* *e, */ **emap = NULL; BLI_array_declare(emap); @@ -69,11 +69,11 @@ void bmo_mirror_exec(BMesh *bm, BMOperator *op) /* create old -> new mappin */ i = 0; - v2 = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); + /* v2 = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); */ /* UNUSED */ BMO_ITER(v, &siter, bm, &dupeop, "newout", BM_VERT) { BLI_array_growone(vmap); vmap[i] = v; - v2 = BM_iter_step(&iter); + /* v2 = BM_iter_step(&iter); */ /* UNUSED */ i++; } bm->elem_index_dirty |= BM_VERT; diff --git a/source/blender/editors/mesh/editmesh_bvh.c b/source/blender/editors/mesh/editmesh_bvh.c index f9c673010f3..c1b694d5e2d 100644 --- a/source/blender/editors/mesh/editmesh_bvh.c +++ b/source/blender/editors/mesh/editmesh_bvh.c @@ -305,19 +305,6 @@ BMVert *BMBVH_FindClosestVert(BMBVHTree *tree, float *co, float maxdist) return NULL; } -typedef struct walklist { - BMVert *v; - int valence; - int depth; - float w, r; - int totwalked; - - /* state data */ - BMVert *lastv; - BMLoop *curl, *firstl; - BMEdge *cure; -} walklist; - /* UNUSED */ #if 0 static short winding(float *v1, float *v2, float *v3) diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index b8ab538b60e..2af931372bb 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -2051,8 +2051,8 @@ void MESH_OT_remove_doubles(wmOperatorType *ot) /************************ Vertex Path Operator *************************/ typedef struct PathNode { - int u; - int visited; + /* int u; */ /* UNUSED */ + /* int visited; */ /* UNUSED */ ListBase edges; } PathNode; diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c index f7598045f81..b50c3f11534 100644 --- a/source/blender/editors/sound/sound_ops.c +++ b/source/blender/editors/sound/sound_ops.c @@ -283,8 +283,7 @@ static int sound_bake_animation_exec(bContext *C, wmOperator *UNUSED(op)) sound_update_animation_flags_exec(C, NULL); - for (cfra = scene->r.sfra > 0 ? scene->r.sfra - 1 : 0; cfra <= scene->r.efra + 1; cfra++) - { + for (cfra = (scene->r.sfra > 0) ? (scene->r.sfra - 1) : 0; cfra <= scene->r.efra + 1; cfra++) { scene->r.cfra = cfra; scene_update_for_newframe(bmain, scene, scene->lay); } From 0de1ed57876edb5324a08e79f4d920919f9f5df9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 17 Apr 2012 05:47:32 +0000 Subject: [PATCH 073/156] add import operator python template. --- ...ator_export.py => operator_file_export.py} | 11 +-- .../scripts/templates/operator_file_import.py | 79 +++++++++++++++++++ 2 files changed, 85 insertions(+), 5 deletions(-) rename release/scripts/templates/{operator_export.py => operator_file_export.py} (86%) create mode 100644 release/scripts/templates/operator_file_import.py diff --git a/release/scripts/templates/operator_export.py b/release/scripts/templates/operator_file_export.py similarity index 86% rename from release/scripts/templates/operator_export.py rename to release/scripts/templates/operator_file_export.py index 3a7040ae2d2..7703d14de67 100644 --- a/release/scripts/templates/operator_export.py +++ b/release/scripts/templates/operator_file_export.py @@ -3,7 +3,7 @@ import bpy def write_some_data(context, filepath, use_some_setting): print("running write_some_data...") - f = open(filepath, 'w') + f = open(filepath, 'w', encoding='utf-8') f.write("Hello World %s" % use_some_setting) f.close() @@ -14,11 +14,12 @@ def write_some_data(context, filepath, use_some_setting): # invoke() function which calls the file selector. from bpy_extras.io_utils import ExportHelper from bpy.props import StringProperty, BoolProperty, EnumProperty +from bpy.types import Operator -class ExportSomeData(bpy.types.Operator, ExportHelper): - '''This appears in the tooltip of the operator and in the generated docs.''' - bl_idname = "export.some_data" # this is important since its how bpy.ops.export.some_data is constructed +class ExportSomeData(Operator, ExportHelper): + '''This appears in the tooltip of the operator and in the generated docs''' + bl_idname = "export_test.some_data" # important since its how bpy.ops.import_test.some_data is constructed bl_label = "Export Some Data" # ExportHelper mixin class uses this @@ -72,4 +73,4 @@ if __name__ == "__main__": register() # test call - bpy.ops.export.some_data('INVOKE_DEFAULT') + bpy.ops.export_test.some_data('INVOKE_DEFAULT') diff --git a/release/scripts/templates/operator_file_import.py b/release/scripts/templates/operator_file_import.py new file mode 100644 index 00000000000..10a054cf1df --- /dev/null +++ b/release/scripts/templates/operator_file_import.py @@ -0,0 +1,79 @@ +import bpy + + +def read_some_data(context, filepath, use_some_setting): + print("running read_some_data...") + f = open(filepath, 'r', encoding='utf-8') + data = f.read() + f.close() + + # would normally load the data hare + print(data) + + return {'FINISHED'} + + +# ImportHelper is a helper class, defines filename and +# invoke() function which calls the file selector. +from bpy_extras.io_utils import ImportHelper +from bpy.props import StringProperty, BoolProperty, EnumProperty +from bpy.types import Operator + + +class ImportSomeData(Operator, ImportHelper): + '''This appears in the tooltip of the operator and in the generated docs''' + bl_idname = "import_test.some_data" # important since its how bpy.ops.import_test.some_data is constructed + bl_label = "Import Some Data" + + # ImportHelper mixin class uses this + filename_ext = ".txt" + + filter_glob = StringProperty( + default="*.txt", + options={'HIDDEN'}, + ) + + # List of operator properties, the attributes will be assigned + # to the class instance from the operator settings before calling. + use_setting = BoolProperty( + name="Example Boolean", + description="Example Tooltip", + default=True, + ) + + type = EnumProperty( + name="Example Enum", + description="Choose between two items", + items=(('OPT_A', "First Option", "Description one"), + ('OPT_B', "Second Option", "Description two")), + default='OPT_A', + ) + + @classmethod + def poll(cls, context): + return context.active_object is not None + + def execute(self, context): + return read_some_data(context, self.filepath, self.use_setting) + + +# Only needed if you want to add into a dynamic menu +def menu_func_import(self, context): + self.layout.operator(ImportSomeData.bl_idname, text="Text Import Operator") + + +def register(): + bpy.utils.register_class(ImportSomeData) + bpy.types.INFO_MT_file_import.append(menu_func_import) + + +def unregister(): + bpy.utils.unregister_class(ImportSomeData) + bpy.types.INFO_MT_file_import.remove(menu_func_import) + + +if __name__ == "__main__": + register() + + # test call + bpy.ops.import_test.some_data('INVOKE_DEFAULT') From 1142a504cbd2085ee0b3bd1a25fbe4443ecf3a3a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 17 Apr 2012 05:49:07 +0000 Subject: [PATCH 074/156] remove the poll function from import/export templates --- release/scripts/templates/operator_file_export.py | 4 ---- release/scripts/templates/operator_file_import.py | 4 ---- 2 files changed, 8 deletions(-) diff --git a/release/scripts/templates/operator_file_export.py b/release/scripts/templates/operator_file_export.py index 7703d14de67..e3e0217e26a 100644 --- a/release/scripts/templates/operator_file_export.py +++ b/release/scripts/templates/operator_file_export.py @@ -46,10 +46,6 @@ class ExportSomeData(Operator, ExportHelper): default='OPT_A', ) - @classmethod - def poll(cls, context): - return context.active_object is not None - def execute(self, context): return write_some_data(context, self.filepath, self.use_setting) diff --git a/release/scripts/templates/operator_file_import.py b/release/scripts/templates/operator_file_import.py index 10a054cf1df..98a3ae96287 100644 --- a/release/scripts/templates/operator_file_import.py +++ b/release/scripts/templates/operator_file_import.py @@ -49,10 +49,6 @@ class ImportSomeData(Operator, ImportHelper): default='OPT_A', ) - @classmethod - def poll(cls, context): - return context.active_object is not None - def execute(self, context): return read_some_data(context, self.filepath, self.use_setting) From 09f722740f3e2df4b14167260fd5e1015f087c30 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 17 Apr 2012 10:25:23 +0000 Subject: [PATCH 075/156] move rip out into its own file --- .../scripts/templates/operator_file_import.py | 2 +- source/blender/editors/mesh/CMakeLists.txt | 1 + source/blender/editors/mesh/editmesh_rip.c | 408 ++++++++++++++++++ source/blender/editors/mesh/editmesh_tools.c | 356 --------------- 4 files changed, 410 insertions(+), 357 deletions(-) create mode 100644 source/blender/editors/mesh/editmesh_rip.c diff --git a/release/scripts/templates/operator_file_import.py b/release/scripts/templates/operator_file_import.py index 98a3ae96287..80d850aae60 100644 --- a/release/scripts/templates/operator_file_import.py +++ b/release/scripts/templates/operator_file_import.py @@ -7,7 +7,7 @@ def read_some_data(context, filepath, use_some_setting): data = f.read() f.close() - # would normally load the data hare + # would normally load the data here print(data) return {'FINISHED'} diff --git a/source/blender/editors/mesh/CMakeLists.txt b/source/blender/editors/mesh/CMakeLists.txt index 3026eeb8f50..246c323213c 100644 --- a/source/blender/editors/mesh/CMakeLists.txt +++ b/source/blender/editors/mesh/CMakeLists.txt @@ -43,6 +43,7 @@ set(SRC editmesh_bvh.c editmesh_knife.c editmesh_loopcut.c + editmesh_rip.c editmesh_select.c editmesh_tools.c editmesh_utils.c diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c new file mode 100644 index 00000000000..e9cdfe62e06 --- /dev/null +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -0,0 +1,408 @@ +/* + * ***** 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. + * + * The Original Code is Copyright (C) 2004 by Blender Foundation. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Joseph Eagar + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/mesh/editmesh_rip.c + * \ingroup edmesh + */ + +#include "MEM_guardedalloc.h" + +#include "DNA_object_types.h" + +#include "RNA_define.h" +#include "RNA_access.h" + +#include "BLI_math.h" + +#include "BKE_context.h" +#include "BKE_object.h" +#include "BKE_report.h" +#include "BKE_tessmesh.h" + +#include "WM_types.h" + +#include "ED_mesh.h" +#include "ED_screen.h" +#include "ED_transform.h" +#include "ED_view3d.h" + +#include "mesh_intern.h" + +/* helper to find edge for edge_rip */ +static float mesh_rip_edgedist(ARegion *ar, float mat[][4], float *co1, float *co2, const float mvalf[2]) +{ + float vec1[3], vec2[3]; + + ED_view3d_project_float_v2(ar, co1, vec1, mat); + ED_view3d_project_float_v2(ar, co2, vec2, mat); + + return dist_to_line_segment_v2(mvalf, vec1, vec2); +} + + +/* based on mouse cursor position, it defines how is being ripped */ +static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + Object *obedit = CTX_data_edit_object(C); + ARegion *ar = CTX_wm_region(C); + RegionView3D *rv3d = CTX_wm_region_view3d(C); + BMEditMesh *em = BMEdit_FromObject(obedit); + BMesh *bm = em->bm; + BMOperator bmop; + BMOIter siter; + BMIter iter, eiter, liter; + BMLoop *l; + BMEdge *e, *e2; + BMVert *v, *ripvert = NULL; + int i, singlesel = FALSE; + float projectMat[4][4], fmval[3] = {event->mval[0], event->mval[1]}; + float dist = FLT_MAX; + float d; + const int totedge_orig = bm->totedge; + + /* note on selection: + * When calling edge split we operate on tagged edges rather then selected + * this is important because the edges to operate on are extended by one, + * but the selection is left alone. + * + * After calling edge split - the duplicated edges have the same selection state as the + * original, so all we do is de-select the far side from the mouse and we have a + * useful selection for grabbing. + */ + + ED_view3d_ob_project_mat_get(rv3d, obedit, projectMat); + + /* BM_ELEM_SELECT --> BM_ELEM_TAG */ + BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_elem_flag_set(e, BM_ELEM_TAG, BM_elem_flag_test(e, BM_ELEM_SELECT)); + } + + /* handle case of one vert selected. identify + * closest edge around that vert to mouse cursor, + * then rip two adjacent edges in the vert fan. */ + if (bm->totvertsel == 1 && bm->totedgesel == 0 && bm->totfacesel == 0) { + BMEditSelection ese; + int totboundary_edge = 0; + singlesel = TRUE; + + /* find selected vert - same some time and check history first */ + if (EDBM_editselection_active_get(em, &ese) && ese.htype == BM_VERT) { + v = (BMVert *)ese.ele; + } + else { + BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + if (BM_elem_flag_test(v, BM_ELEM_SELECT)) + break; + } + } + + /* this should be impossible, but sanity checks are a good thing */ + if (!v) + return OPERATOR_CANCELLED; + + e2 = NULL; + + if (v->e) { + /* find closest edge to mouse cursor */ + BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) { + int is_boundary = BM_edge_is_boundary(e); + /* consider wire as boundary for this purpose, + * otherwise we can't a face away from a wire edge */ + totboundary_edge += (is_boundary != 0 || BM_edge_is_wire(e)); + if (!BM_elem_flag_test(e, BM_ELEM_HIDDEN)) { + if (is_boundary == FALSE && BM_edge_face_count(e) == 2) { + d = mesh_rip_edgedist(ar, projectMat, e->v1->co, e->v2->co, fmval); + if (d < dist) { + dist = d; + e2 = e; + } + } + } + } + + } + + /* should we go ahead with edge rip or do we need to do special case, split off vertex?: + * split off vertex if... + * - we cant find an edge - this means we are ripping a faces vert that is connected to other + * geometry only at the vertex. + * - the boundary edge total is greater then 2, + * in this case edge split _can_ work but we get far nicer results if we use this special case. */ + if (totboundary_edge > 2) { + BMVert **vout; + int vout_len; + + BM_elem_select_set(bm, v, FALSE); + bmesh_vert_separate(bm, v, &vout, &vout_len); + + if (vout_len < 2) { + /* should never happen */ + BKE_report(op->reports, RPT_ERROR, "Error ripping vertex from faces"); + return OPERATOR_CANCELLED; + } + else { + int vi_best = 0; + + dist = FLT_MAX; + + for (i = 0; i < vout_len; i++) { + BM_ITER(l, &iter, bm, BM_LOOPS_OF_VERT, vout[i]) { + if (!BM_elem_flag_test(l->f, BM_ELEM_HIDDEN)) { + float l_mid_co[3]; + BM_loop_face_tangent(l, l_mid_co); + + /* scale to average of surrounding edge size, only needs to be approx */ + mul_v3_fl(l_mid_co, (BM_edge_length_calc(l->e) + BM_edge_length_calc(l->prev->e)) / 2.0f); + add_v3_v3(l_mid_co, v->co); + + d = mesh_rip_edgedist(ar, projectMat, v->co, l_mid_co, fmval); + + if (d < dist) { + dist = d; + vi_best = i; + } + } + } + } + + /* select the vert from the best region */ + v = vout[vi_best]; + BM_elem_select_set(bm, v, TRUE); + + /* splice all others back together */ + if (vout_len > 2) { + + /* vout[0] == best + * vout[1] == glue + * vout[2+] == splice with glue + */ + if (vi_best != 0) { + SWAP(BMVert *, vout[0], vout[vi_best]); + vi_best = 0; + } + + for (i = 2; i < vout_len; i++) { + BM_vert_splice(bm, vout[i], vout[1]); + } + } + + MEM_freeN(vout); + + return OPERATOR_FINISHED; + } + } + + if (!e2) { + BKE_report(op->reports, RPT_ERROR, "Selected vertex has no edge/face pairs attached"); + return OPERATOR_CANCELLED; + } + + /* rip two adjacent edges */ + if (BM_edge_face_count(e2) == 1 || BM_vert_face_count(v) == 2) { + l = e2->l; + ripvert = BM_face_vert_separate(bm, l->f, v); + + BLI_assert(ripvert); + if (!ripvert) { + return OPERATOR_CANCELLED; + } + } + else if (BM_edge_face_count(e2) == 2) { + l = e2->l; + e = BM_face_other_edge_loop(l->f, e2, v)->e; + BM_elem_flag_enable(e, BM_ELEM_TAG); + + l = e2->l->radial_next; + e = BM_face_other_edge_loop(l->f, e2, v)->e; + BM_elem_flag_enable(e, BM_ELEM_TAG); + } + + dist = FLT_MAX; + } + else { + /* expand edge selection */ + BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + e2 = NULL; + i = 0; + BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { + /* important to check selection rather then tag here + * else we get feedback loop */ + if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { + e2 = e; + i++; + } + } + + if (i == 1 && e2->l) { + l = BM_face_other_edge_loop(e2->l->f, e2, v); + l = l->radial_next; + l = BM_face_other_edge_loop(l->f, l->e, v); + + if (l) { + BM_elem_flag_enable(l->e, BM_ELEM_TAG); + } + } + } + } + + if (!EDBM_op_init(em, &bmop, op, "edgesplit edges=%he verts=%hv use_verts=%b", + BM_ELEM_TAG, BM_ELEM_SELECT, TRUE)) { + return OPERATOR_CANCELLED; + } + + BMO_op_exec(bm, &bmop); + + if (totedge_orig == bm->totedge) { + EDBM_op_finish(em, &bmop, op, TRUE); + + BKE_report(op->reports, RPT_ERROR, "No edges could be ripped"); + return OPERATOR_CANCELLED; + } + + BMO_ITER(e, &siter, bm, &bmop, "edgeout", BM_EDGE) { + float cent[3] = {0, 0, 0}, mid[3]; + + float vec[2]; + float fmval_tweak[2]; + float e_v1_co[2], e_v2_co[2]; + + BMVert *v1_other; + BMVert *v2_other; + + /* method for calculating distance: + * + * for each edge: calculate face center, then made a vector + * from edge midpoint to face center. offset edge midpoint + * by a small amount along this vector. */ + + /* rather then the face center, get the middle of + * both edge verts connected to this one */ + v1_other = BM_face_other_vert_loop(e->l->f, e->v2, e->v1)->v; + v2_other = BM_face_other_vert_loop(e->l->f, e->v1, e->v2)->v; + mid_v3_v3v3(cent, v1_other->co, v2_other->co); + mid_v3_v3v3(mid, e->v1->co, e->v2->co); + + ED_view3d_project_float_v2(ar, cent, cent, projectMat); + ED_view3d_project_float_v2(ar, mid, mid, projectMat); + + ED_view3d_project_float_v2(ar, e->v1->co, e_v1_co, projectMat); + ED_view3d_project_float_v2(ar, e->v2->co, e_v2_co, projectMat); + + sub_v2_v2v2(vec, cent, mid); + normalize_v2(vec); + mul_v2_fl(vec, 0.01f); + + /* rather then adding to both verts, subtract from the mouse */ + sub_v2_v2v2(fmval_tweak, fmval, vec); + + if (dist_to_line_segment_v2(fmval_tweak, e_v1_co, e_v2_co) > + dist_to_line_segment_v2(fmval, e_v1_co, e_v2_co)) + { + BM_elem_select_set(bm, e, FALSE); + } + } + + if (singlesel) { + BMVert *v_best = NULL; + float l_prev_co[3], l_next_co[3], l_corner_co[3]; + float scale; + + /* not good enough! - original vert may not be attached to the closest edge */ +#if 0 + EDBM_flag_disable_all(em, BM_ELEM_SELECT); + BM_elem_select_set(bm, ripvert, TRUE); +#else + + dist = FLT_MAX; + BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { + /* disable by default, re-enable winner at end */ + BM_elem_select_set(bm, v, FALSE); + + BM_ITER(l, &liter, bm, BM_LOOPS_OF_VERT, v) { + /* calculate a point in the face, rather then calculate the middle, + * make a vector pointing between the 2 edges attached to this loop */ + sub_v3_v3v3(l_prev_co, l->prev->v->co, l->v->co); + sub_v3_v3v3(l_next_co, l->next->v->co, l->v->co); + + scale = normalize_v3(l_prev_co) + normalize_v3(l_next_co); + mul_v3_fl(l_prev_co, scale); + mul_v3_fl(l_next_co, scale); + + add_v3_v3v3(l_corner_co, l_prev_co, l_next_co); + add_v3_v3(l_corner_co, l->v->co); + + d = mesh_rip_edgedist(ar, projectMat, l->v->co, l_corner_co, fmval); + if (d < dist) { + v_best = v; + dist = d; + } + } + } + } + + if (v_best) { + BM_elem_select_set(bm, v_best, TRUE); + } +#endif + } + + EDBM_selectmode_flush(em); + + BLI_assert(singlesel ? (bm->totvertsel > 0) : (bm->totedgesel > 0)); + + if (!EDBM_op_finish(em, &bmop, op, TRUE)) { + return OPERATOR_CANCELLED; + } + + if (bm->totvertsel == 0) { + return OPERATOR_CANCELLED; + } + + EDBM_update_generic(C, em, TRUE); + + return OPERATOR_FINISHED; +} + +void MESH_OT_rip(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Rip"; + ot->idname = "MESH_OT_rip"; + ot->description = "Disconnect vertex or edges from connected geometry"; + + /* api callbacks */ + ot->invoke = edbm_rip_invoke; + ot->poll = EM_view3d_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* to give to transform */ + Transform_Properties(ot, P_PROPORTIONAL); + RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); +} diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 2af931372bb..557c8797a26 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -2134,362 +2134,6 @@ void MESH_OT_select_vertex_path(wmOperatorType *ot) } /********************** Rip Operator *************************/ -/* helper to find edge for edge_rip */ -static float mesh_rip_edgedist(ARegion *ar, float mat[][4], float *co1, float *co2, const float mvalf[2]) -{ - float vec1[3], vec2[3]; - - ED_view3d_project_float_v2(ar, co1, vec1, mat); - ED_view3d_project_float_v2(ar, co2, vec2, mat); - - return dist_to_line_segment_v2(mvalf, vec1, vec2); -} - - - -/* based on mouse cursor position, it defines how is being ripped */ -static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) -{ - Object *obedit = CTX_data_edit_object(C); - ARegion *ar = CTX_wm_region(C); - RegionView3D *rv3d = CTX_wm_region_view3d(C); - BMEditMesh *em = BMEdit_FromObject(obedit); - BMesh *bm = em->bm; - BMOperator bmop; - BMOIter siter; - BMIter iter, eiter, liter; - BMLoop *l; - BMEdge *e, *e2; - BMVert *v, *ripvert = NULL; - int i, singlesel = FALSE; - float projectMat[4][4], fmval[3] = {event->mval[0], event->mval[1]}; - float dist = FLT_MAX; - float d; - const int totedge_orig = bm->totedge; - - /* note on selection: - * When calling edge split we operate on tagged edges rather then selected - * this is important because the edges to operate on are extended by one, - * but the selection is left alone. - * - * After calling edge split - the duplicated edges have the same selection state as the - * original, so all we do is de-select the far side from the mouse and we have a - * useful selection for grabbing. - */ - - ED_view3d_ob_project_mat_get(rv3d, obedit, projectMat); - - /* BM_ELEM_SELECT --> BM_ELEM_TAG */ - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { - BM_elem_flag_set(e, BM_ELEM_TAG, BM_elem_flag_test(e, BM_ELEM_SELECT)); - } - - /* handle case of one vert selected. identify - * closest edge around that vert to mouse cursor, - * then rip two adjacent edges in the vert fan. */ - if (bm->totvertsel == 1 && bm->totedgesel == 0 && bm->totfacesel == 0) { - BMEditSelection ese; - int totboundary_edge = 0; - singlesel = TRUE; - - /* find selected vert - same some time and check history first */ - if (EDBM_editselection_active_get(em, &ese) && ese.htype == BM_VERT) { - v = (BMVert *)ese.ele; - } - else { - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { - if (BM_elem_flag_test(v, BM_ELEM_SELECT)) - break; - } - } - - /* this should be impossible, but sanity checks are a good thing */ - if (!v) - return OPERATOR_CANCELLED; - - e2 = NULL; - - if (v->e) { - /* find closest edge to mouse cursor */ - BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) { - int is_boundary = BM_edge_is_boundary(e); - /* consider wire as boundary for this purpose, - * otherwise we can't a face away from a wire edge */ - totboundary_edge += (is_boundary != 0 || BM_edge_is_wire(e)); - if (!BM_elem_flag_test(e, BM_ELEM_HIDDEN)) { - if (is_boundary == FALSE && BM_edge_face_count(e) == 2) { - d = mesh_rip_edgedist(ar, projectMat, e->v1->co, e->v2->co, fmval); - if (d < dist) { - dist = d; - e2 = e; - } - } - } - } - - } - - /* should we go ahead with edge rip or do we need to do special case, split off vertex?: - * split off vertex if... - * - we cant find an edge - this means we are ripping a faces vert that is connected to other - * geometry only at the vertex. - * - the boundary edge total is greater then 2, - * in this case edge split _can_ work but we get far nicer results if we use this special case. */ - if (totboundary_edge > 2) { - BMVert **vout; - int vout_len; - - BM_elem_select_set(bm, v, FALSE); - bmesh_vert_separate(bm, v, &vout, &vout_len); - - if (vout_len < 2) { - /* should never happen */ - BKE_report(op->reports, RPT_ERROR, "Error ripping vertex from faces"); - return OPERATOR_CANCELLED; - } - else { - int vi_best = 0; - - dist = FLT_MAX; - - for (i = 0; i < vout_len; i++) { - BM_ITER(l, &iter, bm, BM_LOOPS_OF_VERT, vout[i]) { - if (!BM_elem_flag_test(l->f, BM_ELEM_HIDDEN)) { - float l_mid_co[3]; - BM_loop_face_tangent(l, l_mid_co); - - /* scale to average of surrounding edge size, only needs to be approx */ - mul_v3_fl(l_mid_co, (BM_edge_length_calc(l->e) + BM_edge_length_calc(l->prev->e)) / 2.0f); - add_v3_v3(l_mid_co, v->co); - - d = mesh_rip_edgedist(ar, projectMat, v->co, l_mid_co, fmval); - - if (d < dist) { - dist = d; - vi_best = i; - } - } - } - } - - /* select the vert from the best region */ - v = vout[vi_best]; - BM_elem_select_set(bm, v, TRUE); - - /* splice all others back together */ - if (vout_len > 2) { - - /* vout[0] == best - * vout[1] == glue - * vout[2+] == splice with glue - */ - if (vi_best != 0) { - SWAP(BMVert *, vout[0], vout[vi_best]); - vi_best = 0; - } - - for (i = 2; i < vout_len; i++) { - BM_vert_splice(bm, vout[i], vout[1]); - } - } - - MEM_freeN(vout); - - return OPERATOR_FINISHED; - } - } - - if (!e2) { - BKE_report(op->reports, RPT_ERROR, "Selected vertex has no edge/face pairs attached"); - return OPERATOR_CANCELLED; - } - - /* rip two adjacent edges */ - if (BM_edge_face_count(e2) == 1 || BM_vert_face_count(v) == 2) { - l = e2->l; - ripvert = BM_face_vert_separate(bm, l->f, v); - - BLI_assert(ripvert); - if (!ripvert) { - return OPERATOR_CANCELLED; - } - } - else if (BM_edge_face_count(e2) == 2) { - l = e2->l; - e = BM_face_other_edge_loop(l->f, e2, v)->e; - BM_elem_flag_enable(e, BM_ELEM_TAG); - - l = e2->l->radial_next; - e = BM_face_other_edge_loop(l->f, e2, v)->e; - BM_elem_flag_enable(e, BM_ELEM_TAG); - } - - dist = FLT_MAX; - } - else { - /* expand edge selection */ - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { - e2 = NULL; - i = 0; - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { - /* important to check selection rather then tag here - * else we get feedback loop */ - if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { - e2 = e; - i++; - } - } - - if (i == 1 && e2->l) { - l = BM_face_other_edge_loop(e2->l->f, e2, v); - l = l->radial_next; - l = BM_face_other_edge_loop(l->f, l->e, v); - - if (l) { - BM_elem_flag_enable(l->e, BM_ELEM_TAG); - } - } - } - } - - if (!EDBM_op_init(em, &bmop, op, "edgesplit edges=%he verts=%hv use_verts=%b", - BM_ELEM_TAG, BM_ELEM_SELECT, TRUE)) { - return OPERATOR_CANCELLED; - } - - BMO_op_exec(bm, &bmop); - - if (totedge_orig == bm->totedge) { - EDBM_op_finish(em, &bmop, op, TRUE); - - BKE_report(op->reports, RPT_ERROR, "No edges could be ripped"); - return OPERATOR_CANCELLED; - } - - BMO_ITER(e, &siter, bm, &bmop, "edgeout", BM_EDGE) { - float cent[3] = {0, 0, 0}, mid[3]; - - float vec[2]; - float fmval_tweak[2]; - float e_v1_co[2], e_v2_co[2]; - - BMVert *v1_other; - BMVert *v2_other; - - /* method for calculating distance: - * - * for each edge: calculate face center, then made a vector - * from edge midpoint to face center. offset edge midpoint - * by a small amount along this vector. */ - - /* rather then the face center, get the middle of - * both edge verts connected to this one */ - v1_other = BM_face_other_vert_loop(e->l->f, e->v2, e->v1)->v; - v2_other = BM_face_other_vert_loop(e->l->f, e->v1, e->v2)->v; - mid_v3_v3v3(cent, v1_other->co, v2_other->co); - mid_v3_v3v3(mid, e->v1->co, e->v2->co); - - ED_view3d_project_float_v2(ar, cent, cent, projectMat); - ED_view3d_project_float_v2(ar, mid, mid, projectMat); - - ED_view3d_project_float_v2(ar, e->v1->co, e_v1_co, projectMat); - ED_view3d_project_float_v2(ar, e->v2->co, e_v2_co, projectMat); - - sub_v2_v2v2(vec, cent, mid); - normalize_v2(vec); - mul_v2_fl(vec, 0.01f); - - /* rather then adding to both verts, subtract from the mouse */ - sub_v2_v2v2(fmval_tweak, fmval, vec); - - if (dist_to_line_segment_v2(fmval_tweak, e_v1_co, e_v2_co) > - dist_to_line_segment_v2(fmval, e_v1_co, e_v2_co)) - { - BM_elem_select_set(bm, e, FALSE); - } - } - - if (singlesel) { - BMVert *v_best = NULL; - float l_prev_co[3], l_next_co[3], l_corner_co[3]; - float scale; - - /* not good enough! - original vert may not be attached to the closest edge */ -#if 0 - EDBM_flag_disable_all(em, BM_ELEM_SELECT); - BM_elem_select_set(bm, ripvert, TRUE); -#else - - dist = FLT_MAX; - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { - if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { - /* disable by default, re-enable winner at end */ - BM_elem_select_set(bm, v, FALSE); - - BM_ITER(l, &liter, bm, BM_LOOPS_OF_VERT, v) { - /* calculate a point in the face, rather then calculate the middle, - * make a vector pointing between the 2 edges attached to this loop */ - sub_v3_v3v3(l_prev_co, l->prev->v->co, l->v->co); - sub_v3_v3v3(l_next_co, l->next->v->co, l->v->co); - - scale = normalize_v3(l_prev_co) + normalize_v3(l_next_co); - mul_v3_fl(l_prev_co, scale); - mul_v3_fl(l_next_co, scale); - - add_v3_v3v3(l_corner_co, l_prev_co, l_next_co); - add_v3_v3(l_corner_co, l->v->co); - - d = mesh_rip_edgedist(ar, projectMat, l->v->co, l_corner_co, fmval); - if (d < dist) { - v_best = v; - dist = d; - } - } - } - } - - if (v_best) { - BM_elem_select_set(bm, v_best, TRUE); - } -#endif - } - - EDBM_selectmode_flush(em); - - BLI_assert(singlesel ? (bm->totvertsel > 0) : (bm->totedgesel > 0)); - - if (!EDBM_op_finish(em, &bmop, op, TRUE)) { - return OPERATOR_CANCELLED; - } - - if (bm->totvertsel == 0) { - return OPERATOR_CANCELLED; - } - - EDBM_update_generic(C, em, TRUE); - - return OPERATOR_FINISHED; -} - -void MESH_OT_rip(wmOperatorType *ot) -{ - /* identifiers */ - ot->name = "Rip"; - ot->idname = "MESH_OT_rip"; - ot->description = "Disconnect vertex or edges from connected geometry"; - - /* api callbacks */ - ot->invoke = edbm_rip_invoke; - ot->poll = EM_view3d_poll; - - /* flags */ - ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - - /* to give to transform */ - Transform_Properties(ot, P_PROPORTIONAL); - RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); -} - /************************ Shape Operators *************************/ /* BMESH_TODO this should be properly encapsulated in a bmop. but later.*/ From 3d2f1fd8f9ce19ef4444c1dc84a087704cb38685 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 17 Apr 2012 11:02:32 +0000 Subject: [PATCH 076/156] Fix crash with texture draw in edit mode after commit 45672. Don't create empty tesselated faces layers in edit derivedmesh, these are being created on the fly so this will conflicted, and use loop data for opengl attributes for edit derivedmesh drawing. --- .../blender/blenkernel/intern/DerivedMesh.c | 98 +++++++++++-------- .../blenkernel/intern/editderivedmesh.c | 2 - 2 files changed, 58 insertions(+), 42 deletions(-) diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 3330a6596a7..94aed7c7a01 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -2757,7 +2757,7 @@ void DM_vertex_attributes_from_gpu(DerivedMesh *dm, GPUVertexAttribs *gattribs, fdata = tfdata = dm->getTessFaceDataLayout(dm); /* calc auto bump scale if necessary */ - if (dm->auto_bump_scale<=0.0f) + if (dm->auto_bump_scale <= 0.0f) DM_calc_auto_bump_scale(dm); /* add a tangent layer if necessary */ @@ -2769,58 +2769,76 @@ void DM_vertex_attributes_from_gpu(DerivedMesh *dm, GPUVertexAttribs *gattribs, for (b = 0; b < gattribs->totlayer; b++) { if (gattribs->layer[b].type == CD_MTFACE) { /* uv coordinates */ - if (gattribs->layer[b].name[0]) - layer = CustomData_get_named_layer_index(tfdata, CD_MTFACE, - gattribs->layer[b].name); - else - layer = CustomData_get_active_layer_index(tfdata, CD_MTFACE); + if(dm->type == DM_TYPE_EDITBMESH) { + /* exception .. */ + CustomData *ldata = dm->getLoopDataLayout(dm); - if (layer != -1) { - a = attribs->tottface++; - - attribs->tface[a].array = tfdata->layers[layer].data; - attribs->tface[a].emOffset = tfdata->layers[layer].offset; - attribs->tface[a].glIndex = gattribs->layer[b].glindex; - attribs->tface[a].glTexco = gattribs->layer[b].gltexco; - } - /* BMESH_TODO - BMESH ONLY, may need to get this working?, otherwise remove */ -#if 0 - else { - int player; - CustomData *pdata = dm->getPolyDataLayout(dm); - if (gattribs->layer[b].name[0]) - player = CustomData_get_named_layer_index(pdata, CD_MTEXPOLY, + layer = CustomData_get_named_layer_index(ldata, CD_MLOOPUV, gattribs->layer[b].name); else - player = CustomData_get_active_layer_index(pdata, CD_MTEXPOLY); - - if (player != -1) { + layer = CustomData_get_active_layer_index(ldata, CD_MLOOPUV); + + if (layer != -1) { a = attribs->tottface++; - - attribs->tface[a].array = NULL; - attribs->tface[a].emOffset = pdata->layers[layer].offset; + + attribs->tface[a].array = tfdata->layers[layer].data; + attribs->tface[a].emOffset = tfdata->layers[layer].offset; + attribs->tface[a].glIndex = gattribs->layer[b].glindex; + attribs->tface[a].glTexco = gattribs->layer[b].gltexco; + } + } + else { + if (gattribs->layer[b].name[0]) + layer = CustomData_get_named_layer_index(tfdata, CD_MTFACE, + gattribs->layer[b].name); + else + layer = CustomData_get_active_layer_index(tfdata, CD_MTFACE); + + if (layer != -1) { + a = attribs->tottface++; + + attribs->tface[a].array = tfdata->layers[layer].data; + attribs->tface[a].emOffset = tfdata->layers[layer].offset; attribs->tface[a].glIndex = gattribs->layer[b].glindex; attribs->tface[a].glTexco = gattribs->layer[b].gltexco; - } } -#endif } else if (gattribs->layer[b].type == CD_MCOL) { - /* vertex colors */ - if (gattribs->layer[b].name[0]) - layer = CustomData_get_named_layer_index(tfdata, CD_MCOL, - gattribs->layer[b].name); - else - layer = CustomData_get_active_layer_index(tfdata, CD_MCOL); + if(dm->type == DM_TYPE_EDITBMESH) { + /* exception .. */ + CustomData *ldata = dm->getLoopDataLayout(dm); - if (layer != -1) { - a = attribs->totmcol++; + if (gattribs->layer[b].name[0]) + layer = CustomData_get_named_layer_index(ldata, CD_MLOOPCOL, + gattribs->layer[b].name); + else + layer = CustomData_get_active_layer_index(ldata, CD_MLOOPCOL); - attribs->mcol[a].array = tfdata->layers[layer].data; - attribs->mcol[a].emOffset = tfdata->layers[layer].offset; - attribs->mcol[a].glIndex = gattribs->layer[b].glindex; + if (layer != -1) { + a = attribs->totmcol++; + + attribs->mcol[a].array = tfdata->layers[layer].data; + attribs->mcol[a].emOffset = tfdata->layers[layer].offset; + attribs->mcol[a].glIndex = gattribs->layer[b].glindex; + } + } + else { + /* vertex colors */ + if (gattribs->layer[b].name[0]) + layer = CustomData_get_named_layer_index(tfdata, CD_MCOL, + gattribs->layer[b].name); + else + layer = CustomData_get_active_layer_index(tfdata, CD_MCOL); + + if (layer != -1) { + a = attribs->totmcol++; + + attribs->mcol[a].array = tfdata->layers[layer].data; + attribs->mcol[a].emOffset = tfdata->layers[layer].offset; + attribs->mcol[a].glIndex = gattribs->layer[b].glindex; + } } } else if (gattribs->layer[b].type == CD_TANGENT) { diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index d9a011d481f..a504a6bd39d 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -1628,8 +1628,6 @@ DerivedMesh *getEditDerivedBMesh( DM_init((DerivedMesh*)bmdm, DM_TYPE_EDITBMESH, em->bm->totvert, em->bm->totedge, em->tottri, em->bm->totloop, em->bm->totface); - CustomData_from_bmeshpoly(&bmdm->dm.faceData, &em->bm->pdata, &em->bm->ldata, 0); - bmdm->dm.getVertCos = emDM_getVertCos; bmdm->dm.getMinMax = emDM_getMinMax; From e4734d3d01a72a765aab3dad7da23b447f7018fe Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 17 Apr 2012 13:07:13 +0000 Subject: [PATCH 077/156] Fix part of #30982: dupliface object with modifiers did not show duplis correct while in edit mode. --- source/blender/blenkernel/intern/editderivedmesh.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index a504a6bd39d..3556b1ff5be 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -1320,6 +1320,8 @@ static void emDM_getVert(DerivedMesh *dm, int index, MVert *vert_r) ev = BM_vert_at_index(bmdm->tc->bm, index); /* warning, does list loop, _not_ ideal */ bmvert_to_mvert(bmdm->tc->bm, ev, vert_r); + if(bmdm->vertexCos) + copy_v3_v3(vert_r->co, bmdm->vertexCos[index]); } static void emDM_getEdge(DerivedMesh *dm, int index, MEdge *edge_r) @@ -1378,13 +1380,18 @@ static void emDM_getTessFace(DerivedMesh *dm, int index, MFace *face_r) static void emDM_copyVertArray(DerivedMesh *dm, MVert *vert_r) { - BMesh *bm = ((EditDerivedBMesh *)dm)->tc->bm; + EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; + BMesh *bm = bmdm->tc->bm; BMVert *ev; BMIter iter; + int i; ev = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); - for ( ; ev; ev = BM_iter_step(&iter), ++vert_r) { - copy_v3_v3(vert_r->co, ev->co); + for (i = 0 ; ev; ev = BM_iter_step(&iter), ++vert_r, ++i) { + if (bmdm->vertexCos) + copy_v3_v3(vert_r->co, bmdm->vertexCos[i]); + else + copy_v3_v3(vert_r->co, ev->co); normal_float_to_short_v3(vert_r->no, ev->no); From 3f9fce6542e92f4a62af326572bccd3a4cbcfce1 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 17 Apr 2012 14:24:04 +0000 Subject: [PATCH 078/156] Fix #30980: edge slide Correct UVs option not working. Was a bmesh todo, main issue was with shape keys, now disabled any changes to the shape key data layer, and disabled the option altogether when editing non-basis shape keys. --- source/blender/editors/transform/transform.c | 35 ++++++++----------- .../editors/transform/transform_conversions.c | 5 --- .../blender/editors/transform/transform_ops.c | 4 +-- 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 374268dc735..90c4d87d6f1 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -4697,15 +4697,17 @@ void projectSVData(TransInfo *t, int final) BMEditMesh *em = sld->em; SmallHash visit; int i; - + if (!em) return; - /* BMESH_TODO, (t->settings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) - * currently all vertex data is interpolated which is nice mostly - * except for shape keys where you don't want to modify UVs for eg. - * current BMesh code doesnt make it easy to pick which data we interpolate - * - campbell */ + if(!(t->settings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT)) + return; + + /* don't do this at all for non-basis shape keys, too easy to + accidentally break uv maps or vertex colors then */ + if(em->bm->shapenr > 1) + return; BLI_smallhash_init(&visit); @@ -4717,14 +4719,14 @@ void projectSVData(TransInfo *t, int final) BMIter liter2; BMFace *copyf, *copyf2; BMLoop *l2; - int sel, hide /*, do_vdata */ /* UNUSED */; + int sel, hide; if (BLI_smallhash_haskey(&visit, (uintptr_t)f)) continue; BLI_smallhash_insert(&visit, (uintptr_t)f, NULL); - /*the face attributes of the copied face will get + /* the face attributes of the copied face will get * copied over, so its necessary to save the selection * and hidden state*/ sel = BM_elem_flag_test(f, BM_ELEM_SELECT); @@ -4732,16 +4734,13 @@ void projectSVData(TransInfo *t, int final) copyf2 = BLI_smallhash_lookup(&sld->origfaces, (uintptr_t)f); - /*project onto copied projection face*/ + /* project onto copied projection face */ BM_ITER(l2, &liter2, em->bm, BM_LOOPS_OF_FACE, f) { copyf = copyf2; - /* do_vdata = l2->v==tempsv->v; */ /* UNUSED */ if (BM_elem_flag_test(l2->e, BM_ELEM_SELECT) || BM_elem_flag_test(l2->prev->e, BM_ELEM_SELECT)) { BMLoop *l3 = l2; - /* do_vdata = 1; */ /* UNUSED */ - if (!BM_elem_flag_test(l2->e, BM_ELEM_SELECT)) l3 = l3->prev; @@ -4755,10 +4754,9 @@ void projectSVData(TransInfo *t, int final) continue; /* shouldn't happen, but protection */ } - /* do not run interpolation of all layers for now because it's not actually what you'll always expect - * and layers like shapekeys shouldn't be interpolated from here because oherwise they'll - * propagate to basis keys and will propagate twice to related keys (sergey) */ - // BM_loop_interp_from_face(em->bm, l2, copyf, do_vdata, FALSE); + /* only loop data, no vertex data since that contains shape keys, + * and we do not want to mess up other shape keys */ + BM_loop_interp_from_face(em->bm, l2, copyf, FALSE, FALSE); if (final) { BM_loop_interp_multires(em->bm, l2, copyf); @@ -4893,10 +4891,7 @@ static int doEdgeSlide(TransInfo *t, float perc) } } - /* BMESH_TODO: simply not all layers should be interpolated from there - * but it's quite complicated to set this up with current API. - * details are in comments in projectSVData function */ - // projectSVData(t, 0); + projectSVData(t, 0); return 1; } diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index c273d6a5b4c..2cf76158df8 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -4892,10 +4892,6 @@ void special_aftertrans_update(bContext *C, TransInfo *t) } EDBM_automerge(t->scene, t->obedit, 1); } -#if 0 - /* BMESH_TODO: simply nothing to cancel from here, but when interpolation of - * some custom layers would be added this code would eb needed - * some details are in comments in projectSVData (sergey) */ else { if (t->mode == TFM_EDGE_SLIDE) { SlideData *sld = t->customData; @@ -4904,7 +4900,6 @@ void special_aftertrans_update(bContext *C, TransInfo *t) projectSVData(t, FALSE); } } -#endif } } diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index cb7d9ae723b..09078c199c4 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -500,12 +500,12 @@ void Transform_Properties(struct wmOperatorType *ot, int flags) if (flags & P_OPTIONS) { - RNA_def_boolean(ot->srna, "texture_space", 0, "Edit Object data texture space", ""); + RNA_def_boolean(ot->srna, "texture_space", 0, "Edit Texture Space", "Edit Object data texture space"); } if (flags & P_CORRECT_UV) { - RNA_def_boolean(ot->srna, "correct_uv", 0, "Correct UV coords when transforming", ""); + RNA_def_boolean(ot->srna, "correct_uv", 0, "Correct UVs", "Correct UV coordinates when transforming"); } // Add confirm method all the time. At the end because it's not really that important and should be hidden only in log, not in keymap edit From 8ae502ae99be5171d8da6643b5bbeab0794d3d7c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 17 Apr 2012 15:40:04 +0000 Subject: [PATCH 079/156] Fix #30977: error loading modal keymaps from keyconfiguration presets. --- source/blender/editors/mesh/editmesh_knife.c | 2 +- .../editors/space_view3d/view3d_edit.c | 8 ++-- .../blender/editors/space_view3d/view3d_fly.c | 2 +- source/blender/editors/transform/transform.c | 2 +- .../makesdna/DNA_windowmanager_types.h | 1 + source/blender/makesrna/intern/rna_wm_api.c | 17 +++---- source/blender/windowmanager/WM_keymap.h | 1 + .../blender/windowmanager/intern/wm_keymap.c | 45 +++++++++++++++++++ .../windowmanager/intern/wm_operators.c | 8 ++-- 9 files changed, 65 insertions(+), 21 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index bba5578ccc1..66b7f9f0347 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -2817,7 +2817,7 @@ wmKeyMap *knifetool_modal_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "Knife Tool Modal Map"); /* this function is called for each spacetype, only needs to add map once */ - if (keymap) + if (keymap && keymap->modal_items) return NULL; keymap = WM_modalkeymap_add(keyconf, "Knife Tool Modal Map", modal_items); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index b0b5643f2ba..50eaa3b7ccc 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -599,7 +599,7 @@ void viewrotate_modal_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "View3D Rotate Modal"); /* this function is called for each spacetype, only needs to add map once */ - if (keymap) return; + if (keymap && keymap->modal_items) return; keymap = WM_modalkeymap_add(keyconf, "View3D Rotate Modal", modal_items); @@ -1262,7 +1262,7 @@ void viewmove_modal_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "View3D Move Modal"); /* this function is called for each spacetype, only needs to add map once */ - if (keymap) return; + if (keymap && keymap->modal_items) return; keymap = WM_modalkeymap_add(keyconf, "View3D Move Modal", modal_items); @@ -1423,7 +1423,7 @@ void viewzoom_modal_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "View3D Zoom Modal"); /* this function is called for each spacetype, only needs to add map once */ - if (keymap) return; + if (keymap && keymap->modal_items) return; keymap = WM_modalkeymap_add(keyconf, "View3D Zoom Modal", modal_items); @@ -1695,7 +1695,7 @@ void viewdolly_modal_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "View3D Dolly Modal"); /* this function is called for each spacetype, only needs to add map once */ - if (keymap) return; + if (keymap && keymap->modal_items) return; keymap = WM_modalkeymap_add(keyconf, "View3D Dolly Modal", modal_items); diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c index 31beda3b3f9..5b6624889c8 100644 --- a/source/blender/editors/space_view3d/view3d_fly.c +++ b/source/blender/editors/space_view3d/view3d_fly.c @@ -113,7 +113,7 @@ void fly_modal_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "View3D Fly Modal"); /* this function is called for each spacetype, only needs to add map once */ - if (keymap) + if (keymap && keymap->modal_items) return; keymap = WM_modalkeymap_add(keyconf, "View3D Fly Modal", modal_items); diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 90c4d87d6f1..f4bfa1e0172 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -539,7 +539,7 @@ wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "Transform Modal Map"); /* this function is called for each spacetype, only needs to add map once */ - if (keymap) return NULL; + if (keymap && keymap->modal_items) return NULL; keymap= WM_modalkeymap_add(keyconf, "Transform Modal Map", modal_items); diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index c86d9d17b1f..5a49e45cf5e 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -222,6 +222,7 @@ typedef struct wmKeyMapItem { IDProperty *properties; /* operator properties, assigned to ptr->data and can be written to a file */ /* modal */ + char propvalue_str[64]; /* runtime temporary storage for loading */ short propvalue; /* if used, the item is from modal map */ /* event */ diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c index bad122ab761..9b3634bc8ac 100644 --- a/source/blender/makesrna/intern/rna_wm_api.c +++ b/source/blender/makesrna/intern/rna_wm_api.c @@ -120,16 +120,6 @@ static wmKeyMapItem *rna_KeyMap_item_new_modal(wmKeyMap *km, ReportList *reports return NULL; } - if (!km->modal_items) { - BKE_report(reports, RPT_ERROR, "No property values defined"); - return NULL; - } - - - if (RNA_enum_value_from_id(km->modal_items, propvalue_str, &propvalue) == 0) { - BKE_report(reports, RPT_WARNING, "Property value not in enumeration"); - } - if (shift) modifier |= KM_SHIFT; if (ctrl) modifier |= KM_CTRL; if (alt) modifier |= KM_ALT; @@ -137,6 +127,13 @@ static wmKeyMapItem *rna_KeyMap_item_new_modal(wmKeyMap *km, ReportList *reports if (any) modifier = KM_ANY; + /* not initialized yet, do delayed lookup */ + if (!km->modal_items) + return WM_modalkeymap_add_item_str(km, type, value, modifier, keymodifier, propvalue_str); + + if (RNA_enum_value_from_id(km->modal_items, propvalue_str, &propvalue) == 0) + BKE_report(reports, RPT_WARNING, "Property value not in enumeration"); + return WM_modalkeymap_add_item(km, type, value, modifier, keymodifier, propvalue); } diff --git a/source/blender/windowmanager/WM_keymap.h b/source/blender/windowmanager/WM_keymap.h index db448397065..78dbd253cd6 100644 --- a/source/blender/windowmanager/WM_keymap.h +++ b/source/blender/windowmanager/WM_keymap.h @@ -80,6 +80,7 @@ int WM_keymap_item_compare(struct wmKeyMapItem *k1, struct wmKeyMapItem *k2); wmKeyMap *WM_modalkeymap_add(struct wmKeyConfig *keyconf, const char *idname, struct EnumPropertyItem *items); wmKeyMap *WM_modalkeymap_get(struct wmKeyConfig *keyconf, const char *idname); wmKeyMapItem *WM_modalkeymap_add_item(struct wmKeyMap *km, int type, int val, int modifier, int keymodifier, int value); +wmKeyMapItem *WM_modalkeymap_add_item_str(struct wmKeyMap *km, int type, int val, int modifier, int keymodifier, const char *value); void WM_modalkeymap_assign(struct wmKeyMap *km, const char *opname); /* Keymap Editor */ diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index af56211a4e3..247eadbb698 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -710,6 +710,22 @@ wmKeyMapItem *WM_modalkeymap_add_item(wmKeyMap *km, int type, int val, int modif return kmi; } +wmKeyMapItem *WM_modalkeymap_add_item_str(wmKeyMap *km, int type, int val, int modifier, int keymodifier, const char *value) +{ + wmKeyMapItem *kmi = MEM_callocN(sizeof(wmKeyMapItem), "keymap entry"); + + BLI_addtail(&km->items, kmi); + BLI_strncpy(kmi->propvalue_str, value, sizeof(kmi->propvalue_str)); + + keymap_event_set(kmi, type, val, modifier, keymodifier); + + keymap_item_set_id(km, kmi); + + WM_keyconfig_update_tag(km, kmi); + + return kmi; +} + void WM_modalkeymap_assign(wmKeyMap *km, const char *opname) { wmOperatorType *ot = WM_operatortype_find(opname, 0); @@ -720,6 +736,33 @@ void WM_modalkeymap_assign(wmKeyMap *km, const char *opname) printf("error: modalkeymap_assign, unknown operator %s\n", opname); } +static void wm_user_modal_keymap_set_items(wmWindowManager *wm, wmKeyMap *km) +{ + /* here we convert propvalue string values delayed, due to python keymaps + * being created before the actual modal keymaps, so no modal_items */ + wmKeyMap *defaultkm; + wmKeyMapItem *kmi; + int propvalue; + + if (km && (km->flag & KEYMAP_MODAL) && !km->modal_items) { + defaultkm = WM_keymap_list_find(&wm->defaultconf->keymaps, km->idname, 0, 0); + + if (!defaultkm) + return; + + km->modal_items = defaultkm->modal_items; + km->poll = defaultkm->poll; + + for (kmi = km->items.first; kmi; kmi = kmi->next) { + if (kmi->propvalue_str[0]) { + if (RNA_enum_value_from_id(km->modal_items, kmi->propvalue_str, &propvalue)) + kmi->propvalue = propvalue; + kmi->propvalue_str[0] = '\0'; + } + } + } +} + /* ***************** get string from key events **************** */ const char *WM_key_event_string(short type) @@ -1034,6 +1077,8 @@ void WM_keyconfig_update(wmWindowManager *wm) addonmap = WM_keymap_list_find(&wm->addonconf->keymaps, km->idname, km->spaceid, km->regionid); usermap = WM_keymap_list_find(&U.user_keymaps, km->idname, km->spaceid, km->regionid); + wm_user_modal_keymap_set_items(wm, defaultmap); + /* add */ kmn = wm_keymap_patch_update(&wm->userconf->keymaps, defaultmap, addonmap, usermap); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index b15d408df64..028f7b5c41f 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -3711,7 +3711,7 @@ static void gesture_circle_modal_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "View3D Gesture Circle"); /* this function is called for each spacetype, only needs to add map once */ - if (keymap) return; + if (keymap && keymap->modal_items) return; keymap = WM_modalkeymap_add(keyconf, "View3D Gesture Circle", modal_items); @@ -3758,7 +3758,7 @@ static void gesture_straightline_modal_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "Gesture Straight Line"); /* this function is called for each spacetype, only needs to add map once */ - if (keymap) return; + if (keymap && keymap->modal_items) return; keymap = WM_modalkeymap_add(keyconf, "Gesture Straight Line", modal_items); @@ -3787,7 +3787,7 @@ static void gesture_border_modal_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "Gesture Border"); /* this function is called for each spacetype, only needs to add map once */ - if (keymap) return; + if (keymap && keymap->modal_items) return; keymap = WM_modalkeymap_add(keyconf, "Gesture Border", modal_items); @@ -3846,7 +3846,7 @@ static void gesture_zoom_border_modal_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "Gesture Zoom Border"); /* this function is called for each spacetype, only needs to add map once */ - if (keymap) return; + if (keymap && keymap->modal_items) return; keymap = WM_modalkeymap_add(keyconf, "Gesture Zoom Border", modal_items); From e6adcfe8c6ac7312aee31b2622cd31383b4c2999 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 17 Apr 2012 15:44:19 +0000 Subject: [PATCH 080/156] bmesh api: adjust bmesh_vert_separate() not to set the loops index values (need them to be left untouched for other tools). --- source/blender/bmesh/intern/bmesh_core.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index ca264ffee9b..6b80faf1c0d 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -1864,13 +1864,14 @@ int bmesh_vert_separate(BMesh *bm, BMVert *v, BMVert ***r_vout, int *r_vout_len) * if you are tidying up code - campbell */ BLI_array_empty(stack); BM_ITER(l, &liter, bm, BM_LOOPS_OF_VERT, v) { - if ((l->v == v) && (i = GET_INT_FROM_POINTER(BLI_ghash_lookup(visithash, l->e)))) { - BM_elem_index_set(l, i); /* would be nice to assign vert here but cant, so assign the vert index */ + if (l->v == v) { BLI_array_append(stack, (BMEdge *)l); } } while ((l = (BMLoop *)(BLI_array_pop(stack)))) { - l->v = verts[BM_elem_index_get(l)]; + if ((i = GET_INT_FROM_POINTER(BLI_ghash_lookup(visithash, l->e)))) { + l->v = verts[i]; + } } #endif From e9f1ea691c0a6bff3615f1a78985dc2ae7fe5556 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 17 Apr 2012 16:21:13 +0000 Subject: [PATCH 081/156] Fix #30570: UI issue editing modal keymaps below operators using them. --- source/blender/makesrna/intern/rna_wm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index 4d7e796aea3..8c4b7917cb8 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -1850,6 +1850,7 @@ static void rna_def_keyconfig(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", KMI_EXPANDED); RNA_def_property_ui_text(prop, "Expanded", "Show key map event and property details in the user interface"); RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + RNA_def_property_update(prop, 0, "rna_KeyMapItem_update"); prop = RNA_def_property(srna, "propvalue", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "propvalue"); From 1df6f88b5d3555ebce7d5861735c1b9970aa9dc2 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 17 Apr 2012 16:51:10 +0000 Subject: [PATCH 082/156] Fix blenderplayer build, added stub. --- source/blenderplayer/bad_level_call_stubs/stubs.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c index 46b1fc1dd6d..90d490dc279 100644 --- a/source/blenderplayer/bad_level_call_stubs/stubs.c +++ b/source/blenderplayer/bad_level_call_stubs/stubs.c @@ -473,6 +473,7 @@ short insert_keyframe (struct ID *id, struct bAction *act, const char group[], c short delete_keyframe(struct ID *id, struct bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag){return 0;}; char *WM_operator_pystring(struct bContext *C, struct wmOperatorType *ot, struct PointerRNA *opptr, int all_args){return (char *)NULL;} struct wmKeyMapItem *WM_modalkeymap_add_item(struct wmKeyMap *km, int type, int val, int modifier, int keymodifier, int value){return (struct wmKeyMapItem *)NULL;} +struct wmKeyMapItem *WM_modalkeymap_add_item_str(struct wmKeyMap *km, int type, int val, int modifier, int keymodifier, const char *value){return (struct wmKeyMapItem *)NULL;} struct wmKeyMap *WM_modalkeymap_add(struct wmKeyConfig *keyconf, char *idname, EnumPropertyItem *items){return (struct wmKeyMap *) NULL;} /* RNA COLLADA dependency */ From daf98a7184c79478f411a0735b96de3e4b144622 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 17 Apr 2012 17:25:10 +0000 Subject: [PATCH 083/156] Attempted fix for #30985: knife draw messing up display after confirming. I couldn't redo the problem, but the depth test toggle here should be conditional as in other 3d view drawing code. --- source/blender/editors/mesh/editmesh_knife.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 66b7f9f0347..536a37b679a 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -853,11 +853,12 @@ static void knifetool_draw_angle_snapping(knifetool_opdata *kcd) } /* modal loop selection drawing callback */ -static void knifetool_draw(const bContext *UNUSED(C), ARegion *UNUSED(ar), void *arg) +static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) { + View3D *v3d = CTX_wm_view3d(C); knifetool_opdata *kcd = arg; - glDisable(GL_DEPTH_TEST); + if(v3d->zbuf) glDisable(GL_DEPTH_TEST); glPolygonOffset(1.0f, 1.0f); @@ -995,7 +996,8 @@ static void knifetool_draw(const bContext *UNUSED(C), ARegion *UNUSED(ar), void } glPopMatrix(); - glEnable(GL_DEPTH_TEST); + + if(v3d->zbuf) glEnable(GL_DEPTH_TEST); } static float len_v3_tri_side_max(const float v1[3], const float v2[3], const float v3[3]) From 1d6a5a4aa4f23336ac6749385518fac973453f65 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 17 Apr 2012 18:14:31 +0000 Subject: [PATCH 084/156] fix [#30970] Rip Tool: selecting the side of edges works incorrectly --- source/blender/editors/mesh/editmesh_rip.c | 343 ++++++++++++++++++--- 1 file changed, 298 insertions(+), 45 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index e9cdfe62e06..e9d50b523a0 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -37,6 +37,7 @@ #include "RNA_access.h" #include "BLI_math.h" +#include "BLI_array.h" #include "BKE_context.h" #include "BKE_object.h" @@ -53,7 +54,7 @@ #include "mesh_intern.h" /* helper to find edge for edge_rip */ -static float mesh_rip_edgedist(ARegion *ar, float mat[][4], float *co1, float *co2, const float mvalf[2]) +static float edbm_rip_rip_edgedist(ARegion *ar, float mat[][4], float *co1, float *co2, const float mvalf[2]) { float vec1[3], vec2[3]; @@ -63,6 +64,280 @@ static float mesh_rip_edgedist(ARegion *ar, float mat[][4], float *co1, float *c return dist_to_line_segment_v2(mvalf, vec1, vec2); } +static float edbm_rip_edge_side_measure(BMEdge *e, + ARegion *ar, + float projectMat[4][4], const float fmval[2]) +{ + float cent[3] = {0, 0, 0}, mid[3]; + + float vec[2]; + float fmval_tweak[2]; + float e_v1_co[2], e_v2_co[2]; + float score; + + BMVert *v1_other; + BMVert *v2_other; + + /* method for calculating distance: + * + * for each edge: calculate face center, then made a vector + * from edge midpoint to face center. offset edge midpoint + * by a small amount along this vector. */ + + /* rather then the face center, get the middle of + * both edge verts connected to this one */ + v1_other = BM_face_other_vert_loop(e->l->f, e->v2, e->v1)->v; + v2_other = BM_face_other_vert_loop(e->l->f, e->v1, e->v2)->v; + mid_v3_v3v3(cent, v1_other->co, v2_other->co); + mid_v3_v3v3(mid, e->v1->co, e->v2->co); + + ED_view3d_project_float_v2(ar, cent, cent, projectMat); + ED_view3d_project_float_v2(ar, mid, mid, projectMat); + + ED_view3d_project_float_v2(ar, e->v1->co, e_v1_co, projectMat); + ED_view3d_project_float_v2(ar, e->v2->co, e_v2_co, projectMat); + + sub_v2_v2v2(vec, cent, mid); + normalize_v2(vec); + mul_v2_fl(vec, 0.01f); + + /* rather then adding to both verts, subtract from the mouse */ + sub_v2_v2v2(fmval_tweak, fmval, vec); + + score = len_v2v2(e_v1_co, e_v2_co); + + if (dist_to_line_segment_v2(fmval_tweak, e_v1_co, e_v2_co) > + dist_to_line_segment_v2(fmval, e_v1_co, e_v2_co)) + { + return score; + } + else { + return -score; + } +} + + +/* - Advanced selection handling 'ripsel' functions ----- */ + +/** + * How rip selection works + * + * Firstly - rip is basically edge split with side-selection & grab. + * Things would be much more simple if we didn't have to worry about side selection + * + * The method used for checking the side of selection is as follows... + * - First tag all rip-able edges. + * - Build a contiguous edge list by looping over tagged edges and following each ones tagged siblings in both + * directions. + * - The loops are not stored in an array, Instead both loops on either side of each edge has its index values set + * to count down from the last edge, this way, once we have the 'last' edge its very easy to walk down the + * connected edge loops. + * The reason for using loops like this is because when the edges are split we don't which face user gets the newly + * created edge (its as good as random so we cant assume new edges will be on once side). + * After splitting walking along boundary loops is very simple and each has only edges from one side of another. + * - The end loop pairs are stored in an array however to support multiple edge-selection-islands, so you can rip + * multiple selections at once. + * - * Execute the split * + * - For each #EdgeLoopPair walk down both sides of the split using the loops and measure which is facing the mouse. + * - Deselect the edge loop facing away. + * + * Limitation! + * This currently works very poorly for edge selections that include junctions of 3+ split edges at one vertex. + * It this wont work with intersecting edge islands (verts with more then 2 tagged edges) + * This is nice to but for now not essential. + * + * - campbell. + */ + + +#define IS_VISIT_POSSIBLE(e) (BM_edge_is_manifold(e) && BM_elem_flag_test(e, BM_ELEM_TAG)) +#define IS_VISIT_DONE(e) ((e)->l && (BM_elem_index_get((e)->l) != INVALID_UID)) +#define INVALID_UID INT_MIN + +/* mark, assign uid and step */ +static BMEdge *edbm_ripsel_edge_mark_step(BMesh *bm, BMVert *v, const int uid) +{ + BMIter iter; + BMEdge *e; + BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) { + if (IS_VISIT_POSSIBLE(e) && !IS_VISIT_DONE(e)) { + BMLoop *l_a, *l_b; + + BM_edge_loop_pair(e, &l_a, &l_b); /* no need to check, we know this will be true */ + + /* so (IS_VISIT_DONE == TRUE) */ + BM_elem_index_set(l_a, uid); + BM_elem_index_set(l_b, uid); + + return e; + } + } + return NULL; +} + +typedef struct EdgeLoopPair { + BMLoop *l_a; + BMLoop *l_b; +} EdgeLoopPair; + +static EdgeLoopPair *edbm_ripsel_looptag_helper(BMesh *bm) +{ + BMIter fiter; + BMIter liter; + + BMFace *f; + BMLoop *l; + + int uid_start; + int uid_end; + int uid = bm->totedge; /* can start anywhere */ + + EdgeLoopPair *eloop_pairs = NULL; + BLI_array_declare(eloop_pairs); + EdgeLoopPair *lp; + + /* untag all loops */ + BM_ITER(f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_elem_index_set(l, INVALID_UID); + } + } + + /* build contiguous array */ + while (TRUE) { + int tot = 0; + BMIter eiter; + BMEdge *e_step; + BMVert *v_step; + BMEdge *e; + BMEdge *e_first; + BMEdge *e_last; + + e_first = NULL; + BM_ITER(e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + if (IS_VISIT_POSSIBLE(e) && !IS_VISIT_DONE(e)) { + e_first = e; + break; + } + } + + if (e_first == NULL) { + break; + } + + e_first = e; + + /* initialize, avoid loop on loop */ + v_step = e_first->v1; + + uid_start = uid; + while ((e = edbm_ripsel_edge_mark_step(bm, v_step, uid))) { + BM_elem_flag_disable(e, BM_ELEM_SMOOTH); + v_step = BM_edge_other_vert((e_step = e), v_step); + uid++; /* only different line */ + tot++; + } + + /* always store the highest 'uid' edge */ + e_last = e_step; + + uid_end = uid - 1; + uid = uid_start - 1; + + v_step = e_first->v1; + + while ((e = edbm_ripsel_edge_mark_step(bm, v_step, uid))) { + BM_elem_flag_disable(e, BM_ELEM_SMOOTH); + v_step = BM_edge_other_vert((e_step = e), v_step); + uid--; /* only different line */ + tot++; + } + + /* stride far enough not to _ever_ overlap range */ + uid_start = uid; + uid = uid_end + bm->totedge; + + BLI_array_growone(eloop_pairs); + lp = &eloop_pairs[BLI_array_count(eloop_pairs) - 1]; + BM_edge_loop_pair(e_last, &lp->l_a, &lp->l_b); /* no need to check, we know this will be true */ + + + BLI_assert(tot == uid_end - uid_start); + +#if 0 + printf("%s: found contiguous edge loop of (%d)\n", __func__, uid_end - uid_start); +#endif + + } + + /* null terminate */ + BLI_array_growone(eloop_pairs); + lp = &eloop_pairs[BLI_array_count(eloop_pairs) - 1]; + lp->l_a = lp->l_b = NULL; + + return eloop_pairs; +} + + +/* - De-Select the worst rip-edge side -------------------------------- */ + + +static BMEdge *edbm_ripsel_edge_uid_step(BMesh *bm, BMEdge *e_orig, BMVert **v_prev) +{ + BMIter eiter; + BMEdge *e; + BMVert *v = BM_edge_other_vert(e_orig, *v_prev); + const int uid_cmp = BM_elem_index_get(e_orig->l) - 1; + + BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { + if (BM_elem_index_get(e->l) == uid_cmp) { + *v_prev = v; + return e; + } + } + return NULL; +} + +static BMVert *edbm_ripsel_edloop_pair_start_vert(BMesh *bm, BMEdge *e) +{ + /* try step in a direction, if it fails we know do go the other way */ + BMVert *v_test = e->v1; + return (edbm_ripsel_edge_uid_step(bm, e, &v_test)) ? e->v1 : e->v2; +} + +static void edbm_ripsel_deselect_helper(BMesh *bm, EdgeLoopPair *eloop_pairs, + ARegion *ar, float projectMat[4][4], float fmval[2]) +{ + EdgeLoopPair *lp; + + for (lp = eloop_pairs; lp->l_a; lp++) { + BMEdge *e; + BMVert *v_prev; + + float score_a = 0.0f; + float score_b = 0.0f; + + e = lp->l_a->e; + v_prev = edbm_ripsel_edloop_pair_start_vert(bm, e); + for (; e; e = edbm_ripsel_edge_uid_step(bm, e, &v_prev)) { + score_a += edbm_rip_edge_side_measure(e, ar, projectMat, fmval); + } + e = lp->l_b->e; + v_prev = edbm_ripsel_edloop_pair_start_vert(bm, e); + for (; e; e = edbm_ripsel_edge_uid_step(bm, e, &v_prev)) { + score_b += edbm_rip_edge_side_measure(e, ar, projectMat, fmval); + } + + e = (score_a > score_b) ? lp->l_a->e : lp->l_b->e; + v_prev = edbm_ripsel_edloop_pair_start_vert(bm, e); + for (; e; e = edbm_ripsel_edge_uid_step(bm, e, &v_prev)) { + BM_elem_select_set(bm, e, FALSE); + } + } +} +/* --- end 'ripsel' selection handling code --- */ + + /* based on mouse cursor position, it defines how is being ripped */ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) @@ -73,7 +348,6 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) BMEditMesh *em = BMEdit_FromObject(obedit); BMesh *bm = em->bm; BMOperator bmop; - BMOIter siter; BMIter iter, eiter, liter; BMLoop *l; BMEdge *e, *e2; @@ -84,6 +358,8 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) float d; const int totedge_orig = bm->totedge; + EdgeLoopPair *eloop_pairs; + /* note on selection: * When calling edge split we operate on tagged edges rather then selected * this is important because the edges to operate on are extended by one, @@ -135,7 +411,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) totboundary_edge += (is_boundary != 0 || BM_edge_is_wire(e)); if (!BM_elem_flag_test(e, BM_ELEM_HIDDEN)) { if (is_boundary == FALSE && BM_edge_face_count(e) == 2) { - d = mesh_rip_edgedist(ar, projectMat, e->v1->co, e->v2->co, fmval); + d = edbm_rip_rip_edgedist(ar, projectMat, e->v1->co, e->v2->co, fmval); if (d < dist) { dist = d; e2 = e; @@ -179,7 +455,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) mul_v3_fl(l_mid_co, (BM_edge_length_calc(l->e) + BM_edge_length_calc(l->prev->e)) / 2.0f); add_v3_v3(l_mid_co, v->co); - d = mesh_rip_edgedist(ar, projectMat, v->co, l_mid_co, fmval); + d = edbm_rip_rip_edgedist(ar, projectMat, v->co, l_mid_co, fmval); if (d < dist) { dist = d; @@ -269,8 +545,11 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) } } + eloop_pairs = edbm_ripsel_looptag_helper(bm); + if (!EDBM_op_init(em, &bmop, op, "edgesplit edges=%he verts=%hv use_verts=%b", BM_ELEM_TAG, BM_ELEM_SELECT, TRUE)) { + MEM_freeN(eloop_pairs); return OPERATOR_CANCELLED; } @@ -280,51 +559,25 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) EDBM_op_finish(em, &bmop, op, TRUE); BKE_report(op->reports, RPT_ERROR, "No edges could be ripped"); + MEM_freeN(eloop_pairs); return OPERATOR_CANCELLED; } - BMO_ITER(e, &siter, bm, &bmop, "edgeout", BM_EDGE) { - float cent[3] = {0, 0, 0}, mid[3]; - - float vec[2]; - float fmval_tweak[2]; - float e_v1_co[2], e_v2_co[2]; - - BMVert *v1_other; - BMVert *v2_other; - - /* method for calculating distance: - * - * for each edge: calculate face center, then made a vector - * from edge midpoint to face center. offset edge midpoint - * by a small amount along this vector. */ - - /* rather then the face center, get the middle of - * both edge verts connected to this one */ - v1_other = BM_face_other_vert_loop(e->l->f, e->v2, e->v1)->v; - v2_other = BM_face_other_vert_loop(e->l->f, e->v1, e->v2)->v; - mid_v3_v3v3(cent, v1_other->co, v2_other->co); - mid_v3_v3v3(mid, e->v1->co, e->v2->co); - - ED_view3d_project_float_v2(ar, cent, cent, projectMat); - ED_view3d_project_float_v2(ar, mid, mid, projectMat); - - ED_view3d_project_float_v2(ar, e->v1->co, e_v1_co, projectMat); - ED_view3d_project_float_v2(ar, e->v2->co, e_v2_co, projectMat); - - sub_v2_v2v2(vec, cent, mid); - normalize_v2(vec); - mul_v2_fl(vec, 0.01f); - - /* rather then adding to both verts, subtract from the mouse */ - sub_v2_v2v2(fmval_tweak, fmval, vec); - - if (dist_to_line_segment_v2(fmval_tweak, e_v1_co, e_v2_co) > - dist_to_line_segment_v2(fmval, e_v1_co, e_v2_co)) - { - BM_elem_select_set(bm, e, FALSE); +#if 1 + edbm_ripsel_deselect_helper(bm, eloop_pairs, + ar, projectMat, fmval); + MEM_freeN(eloop_pairs); +#else + { + /* simple per edge selection check, saves a lot of code and is almost good enough */ + BMOIter siter; + BMO_ITER(e, &siter, bm, &bmop, "edgeout", BM_EDGE) { + if (edbm_rip_edge_side_measure(e, ar, projectMat, fmval) > 0.0f) { + BM_elem_select_set(bm, e, FALSE); + } } } +#endif if (singlesel) { BMVert *v_best = NULL; @@ -356,7 +609,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) add_v3_v3v3(l_corner_co, l_prev_co, l_next_co); add_v3_v3(l_corner_co, l->v->co); - d = mesh_rip_edgedist(ar, projectMat, l->v->co, l_corner_co, fmval); + d = edbm_rip_rip_edgedist(ar, projectMat, l->v->co, l_corner_co, fmval); if (d < dist) { v_best = v; dist = d; From 830013aabe3e01b5bc168b93ce7a5074c7ce21ab Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 17 Apr 2012 18:36:29 +0000 Subject: [PATCH 085/156] fix error in single vertex ripping where the edit-selection could be left on unselected verts or not set on the newly ripped vertex. also some corrections to comments. --- source/blender/editors/mesh/editmesh_rip.c | 27 ++++++++++++++++------ 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index e9d50b523a0..6097acd6e49 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -134,7 +134,7 @@ static float edbm_rip_edge_side_measure(BMEdge *e, * connected edge loops. * The reason for using loops like this is because when the edges are split we don't which face user gets the newly * created edge (its as good as random so we cant assume new edges will be on once side). - * After splitting walking along boundary loops is very simple and each has only edges from one side of another. + * After splittingm, its very simple to walk along boundary loops since each only has one edge from a single side. * - The end loop pairs are stored in an array however to support multiple edge-selection-islands, so you can rip * multiple selections at once. * - * Execute the split * @@ -142,8 +142,7 @@ static float edbm_rip_edge_side_measure(BMEdge *e, * - Deselect the edge loop facing away. * * Limitation! - * This currently works very poorly for edge selections that include junctions of 3+ split edges at one vertex. - * It this wont work with intersecting edge islands (verts with more then 2 tagged edges) + * This currently works very poorly with intersecting edge islands (verts with more then 2 tagged edges) * This is nice to but for now not essential. * * - campbell. @@ -196,14 +195,14 @@ static EdgeLoopPair *edbm_ripsel_looptag_helper(BMesh *bm) BLI_array_declare(eloop_pairs); EdgeLoopPair *lp; - /* untag all loops */ + /* initialize loops with dummy invalid index values */ BM_ITER(f, &fiter, bm, BM_FACES_OF_MESH, NULL) { BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { BM_elem_index_set(l, INVALID_UID); } } - /* build contiguous array */ + /* set contiguous loops ordered 'uid' values for walking after split */ while (TRUE) { int tot = 0; BMIter eiter; @@ -227,7 +226,7 @@ static EdgeLoopPair *edbm_ripsel_looptag_helper(BMesh *bm) e_first = e; - /* initialize, avoid loop on loop */ + /* initialize */ v_step = e_first->v1; uid_start = uid; @@ -238,12 +237,14 @@ static EdgeLoopPair *edbm_ripsel_looptag_helper(BMesh *bm) tot++; } - /* always store the highest 'uid' edge */ + /* this edges loops have the highest uid's, store this to walk down later */ e_last = e_step; + /* always store the highest 'uid' edge for the stride */ uid_end = uid - 1; uid = uid_start - 1; + /* initialize */ v_step = e_first->v1; while ((e = edbm_ripsel_edge_mark_step(bm, v_step, uid))) { @@ -390,6 +391,8 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) v = (BMVert *)ese.ele; } else { + ese.ele = NULL; + BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) break; @@ -436,6 +439,8 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) bmesh_vert_separate(bm, v, &vout, &vout_len); if (vout_len < 2) { + /* set selection back to avoid active-unselected vertex */ + BM_elem_select_set(bm, v, TRUE); /* should never happen */ BKE_report(op->reports, RPT_ERROR, "Error ripping vertex from faces"); return OPERATOR_CANCELLED; @@ -443,6 +448,10 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) else { int vi_best = 0; + if (ese.ele) { + EDBM_editselection_remove(em, &ese.ele->head); + } + dist = FLT_MAX; for (i = 0; i < vout_len; i++) { @@ -469,6 +478,10 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) v = vout[vi_best]; BM_elem_select_set(bm, v, TRUE); + if (ese.ele) { + EDBM_editselection_store(em, &v->head); + } + /* splice all others back together */ if (vout_len > 2) { From 149c52859b798230335f9316893891af057191aa Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 17 Apr 2012 19:51:40 +0000 Subject: [PATCH 086/156] code cleanup: use const args for writing files. --- source/blender/blenloader/BLO_undofile.h | 2 +- source/blender/blenloader/BLO_writefile.h | 2 +- source/blender/blenloader/intern/undofile.c | 10 ++++--- source/blender/blenloader/intern/writefile.c | 28 ++++++++++---------- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/source/blender/blenloader/BLO_undofile.h b/source/blender/blenloader/BLO_undofile.h index f3c16e07c62..f716b47ea2e 100644 --- a/source/blender/blenloader/BLO_undofile.h +++ b/source/blender/blenloader/BLO_undofile.h @@ -47,7 +47,7 @@ typedef struct MemFile { } MemFile; /* actually only used writefile.c */ -extern void add_memfilechunk(MemFile *compare, MemFile *current, char *buf, unsigned int size); +extern void add_memfilechunk(MemFile *compare, MemFile *current, const char *buf, unsigned int size); /* exports */ extern void BLO_free_memfile(MemFile *memfile); diff --git a/source/blender/blenloader/BLO_writefile.h b/source/blender/blenloader/BLO_writefile.h index 90e8c3e211e..7a8429afec0 100644 --- a/source/blender/blenloader/BLO_writefile.h +++ b/source/blender/blenloader/BLO_writefile.h @@ -37,7 +37,7 @@ struct MemFile; struct Main; struct ReportList; -extern int BLO_write_file(struct Main *mainvar, const char *filepath, int write_flags, struct ReportList *reports, int *thumb); +extern int BLO_write_file(struct Main *mainvar, const char *filepath, int write_flags, struct ReportList *reports, const int *thumb); extern int BLO_write_file_mem(struct Main *mainvar, struct MemFile *compare, struct MemFile *current, int write_flags); #define BLEN_THUMB_SIZE 128 diff --git a/source/blender/blenloader/intern/undofile.c b/source/blender/blenloader/intern/undofile.c index eeeaae937b1..75fa8d0c3d2 100644 --- a/source/blender/blenloader/intern/undofile.c +++ b/source/blender/blenloader/intern/undofile.c @@ -85,9 +85,11 @@ void BLO_merge_memfile(MemFile *first, MemFile *second) BLO_free_memfile(first); } -static int my_memcmp(int *mem1, int *mem2, int len) +static int my_memcmp(const int *mem1, const int *mem2, const int len) { - register int a= len, *mema= mem1, *memb= mem2; + register int a = len; + register const int *mema = mem1; + register const int *memb = mem2; while (a--) { if ( *mema != *memb) return 1; @@ -97,7 +99,7 @@ static int my_memcmp(int *mem1, int *mem2, int len) return 0; } -void add_memfilechunk(MemFile *compare, MemFile *current, char *buf, unsigned int size) +void add_memfilechunk(MemFile *compare, MemFile *current, const char *buf, unsigned int size) { static MemFileChunk *compchunk=NULL; MemFileChunk *curchunk; @@ -121,7 +123,7 @@ void add_memfilechunk(MemFile *compare, MemFile *current, char *buf, unsigned in /* we compare compchunk with buf */ if (compchunk) { if (compchunk->size == curchunk->size) { - if ( my_memcmp((int *)compchunk->buf, (int *)buf, size/4)==0) { + if (my_memcmp((int *)compchunk->buf, (const int *)buf, size / 4) == 0) { curchunk->buf= compchunk->buf; curchunk->ident= 1; } diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index dc5546d38dd..5a8cb2ede20 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -204,7 +204,7 @@ static WriteData *writedata_new(int file) return wd; } -static void writedata_do_write(WriteData *wd, void *mem, int memlen) +static void writedata_do_write(WriteData *wd, const void *mem, int memlen) { if ((wd == NULL) || wd->error || (mem == NULL) || memlen < 1) return; if (wd->error) return; @@ -239,7 +239,7 @@ static void writedata_free(WriteData *wd) #define MYWRITE_FLUSH NULL -static void mywrite( WriteData *wd, void *adr, int len) +static void mywrite( WriteData *wd, const void *adr, int len) { if (wd->error) return; @@ -265,7 +265,7 @@ static void mywrite( WriteData *wd, void *adr, int len) do { int writelen= MIN2(len, MYWRITE_MAX_CHUNK); writedata_do_write(wd, adr, writelen); - adr = (char*)adr + writelen; + adr = (const char *)adr + writelen; len -= writelen; } while (len > 0); @@ -354,22 +354,22 @@ static void writestruct(WriteData *wd, int filecode, const char *structname, int mywrite(wd, adr, bh.len); } -static void writedata(WriteData *wd, int filecode, int len, void *adr) /* do not use for structs */ +static void writedata(WriteData *wd, int filecode, int len, const void *adr) /* do not use for structs */ { BHead bh; if (adr==NULL) return; if (len==0) return; - len+= 3; - len-= ( len % 4); + len += 3; + len -= (len % 4); /* init BHead */ - bh.code= filecode; - bh.old= adr; - bh.nr= 1; - bh.SDNAnr= 0; - bh.len= len; + bh.code = filecode; + bh.old = (void *)adr; /* this is safe to cast from const */ + bh.nr = 1; + bh.SDNAnr = 0; + bh.len = len; mywrite(wd, &bh, sizeof(BHead)); if (len) mywrite(wd, adr, len); @@ -2764,7 +2764,7 @@ static void write_global(WriteData *wd, int fileflags, Main *mainvar) * second are an RGBA image (unsigned char) * note, this uses 'TEST' since new types will segfault on file load for older blender versions. */ -static void write_thumb(WriteData *wd, int *img) +static void write_thumb(WriteData *wd, const int *img) { if (img) writedata(wd, TEST, (2 + img[0] * img[1]) * sizeof(int), img); @@ -2772,7 +2772,7 @@ static void write_thumb(WriteData *wd, int *img) /* if MemFile * there's filesave to memory */ static int write_file_handle(Main *mainvar, int handle, MemFile *compare, MemFile *current, - int write_user_block, int write_flags, int *thumb) + int write_user_block, int write_flags, const int *thumb) { BHead bhead; ListBase mainlist; @@ -2880,7 +2880,7 @@ static int do_history(const char *name, ReportList *reports) } /* return: success (1) */ -int BLO_write_file(Main *mainvar, const char *filepath, int write_flags, ReportList *reports, int *thumb) +int BLO_write_file(Main *mainvar, const char *filepath, int write_flags, ReportList *reports, const int *thumb) { char userfilename[FILE_MAX]; char tempname[FILE_MAX+1]; From fdea14acb4b79b59da44ec45149d94129e1e8a8c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 17 Apr 2012 20:51:11 +0000 Subject: [PATCH 087/156] save thumbnail from the 3D view if no camera is present. --- .../blender/windowmanager/intern/wm_files.c | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 9ffea0e290b..e50fbaa624e 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -80,6 +80,7 @@ #include "BKE_packedFile.h" #include "BKE_report.h" #include "BKE_sound.h" +#include "BKE_screen.h" #include "BKE_texture.h" @@ -662,23 +663,47 @@ static void write_history(void) } } -static ImBuf *blend_file_thumb(Scene *scene, int **thumb_pt) +/* screen can be NULL */ +static ImBuf *blend_file_thumb(Scene *scene, bScreen *screen, int **thumb_pt) { /* will be scaled down, but gives some nice oversampling */ ImBuf *ibuf; int *thumb; char err_out[256] = "unknown"; + /* screen if no camera found */ + ScrArea *sa = NULL; + ARegion *ar = NULL; + View3D *v3d = NULL; + *thumb_pt = NULL; /* scene can be NULL if running a script at startup and calling the save operator */ - if (G.background || scene == NULL || scene->camera == NULL) + if (G.background || scene == NULL) return NULL; + if ((scene->camera == NULL) && (screen != NULL)) { + sa = BKE_screen_find_big_area(screen, SPACE_VIEW3D, 0); + ar = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW); + if (ar) { + v3d = sa->spacedata.first; + } + } + + if (scene->camera == NULL && v3d == NULL) { + return NULL; + } + /* gets scaled to BLEN_THUMB_SIZE */ - ibuf = ED_view3d_draw_offscreen_imbuf_simple(scene, scene->camera, - BLEN_THUMB_SIZE * 2, BLEN_THUMB_SIZE * 2, - IB_rect, OB_SOLID, FALSE, err_out); + if (scene->camera) { + ibuf = ED_view3d_draw_offscreen_imbuf_simple(scene, scene->camera, + BLEN_THUMB_SIZE * 2, BLEN_THUMB_SIZE * 2, + IB_rect, OB_SOLID, FALSE, err_out); + } + else { + ibuf = ED_view3d_draw_offscreen_imbuf(scene, v3d, ar, BLEN_THUMB_SIZE * 2, BLEN_THUMB_SIZE * 2, + IB_rect, FALSE, err_out); + } if (ibuf) { float aspect = (scene->r.xsch * scene->r.xasp) / (scene->r.ysch * scene->r.yasp); @@ -763,7 +788,7 @@ int WM_write_file(bContext *C, const char *target, int fileflags, ReportList *re /* blend file thumbnail */ /* save before exit_editmode, otherwise derivedmeshes for shared data corrupt #27765) */ if (U.flag & USER_SAVE_PREVIEWS) { - ibuf_thumb = blend_file_thumb(CTX_data_scene(C), &thumb); + ibuf_thumb = blend_file_thumb(CTX_data_scene(C), CTX_wm_screen(C), &thumb); } BLI_exec_cb(G.main, NULL, BLI_CB_EVT_SAVE_PRE); From a1337caac02fa0ecda0cd6ee7652c489d9c1c2d8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 04:32:55 +0000 Subject: [PATCH 088/156] bmesh api: minor simplify & cleanup - add BM_face_edge_share_loop(f, e) -- edge version of existing BM_face_vert_share_loop(f, v) - simplify BM_edge_ordered_verts_ex(), check could be reduced. - use BM_ELEM_INTERNAL_TAG for bmesh_jfke(), not BM_ELEM_TAG to avoid clobbering tagged data tools might use. --- source/blender/bmesh/intern/bmesh_core.c | 26 ++++--------- source/blender/bmesh/intern/bmesh_queries.c | 43 ++++++++++++++------- source/blender/bmesh/intern/bmesh_queries.h | 1 + 3 files changed, 38 insertions(+), 32 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index 6b80faf1c0d..765c1c3e774 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -1618,7 +1618,6 @@ BMFace *bmesh_jfke(BMesh *bm, BMFace *f1, BMFace *f2, BMEdge *e) { BMLoop *l_iter, *f1loop = NULL, *f2loop = NULL; int newlen = 0, i, f1len = 0, f2len = 0, radlen = 0, edok, shared; - BMIter iter; /* can't join a face to itsel */ if (f1 == f2) { @@ -1628,19 +1627,10 @@ BMFace *bmesh_jfke(BMesh *bm, BMFace *f1, BMFace *f2, BMEdge *e) /* verify that e is in both f1 and f2 */ f1len = f1->len; f2len = f2->len; - BM_ITER(l_iter, &iter, bm, BM_LOOPS_OF_FACE, f1) { - if (l_iter->e == e) { - f1loop = l_iter; - break; - } - } - BM_ITER(l_iter, &iter, bm, BM_LOOPS_OF_FACE, f2) { - if (l_iter->e == e) { - f2loop = l_iter; - break; - } - } - if (!(f1loop && f2loop)) { + + if (!((f1loop = BM_face_edge_share_loop(f1, e)) && + (f2loop = BM_face_edge_share_loop(f2, e)))) + { return NULL; } @@ -1673,21 +1663,21 @@ BMFace *bmesh_jfke(BMesh *bm, BMFace *f1, BMFace *f2, BMEdge *e) /* validate no internal join */ for (i = 0, l_iter = BM_FACE_FIRST_LOOP(f1); i < f1len; i++, l_iter = l_iter->next) { - BM_elem_flag_disable(l_iter->v, BM_ELEM_TAG); + BM_elem_flag_disable(l_iter->v, BM_ELEM_INTERNAL_TAG); } for (i = 0, l_iter = BM_FACE_FIRST_LOOP(f2); i < f2len; i++, l_iter = l_iter->next) { - BM_elem_flag_disable(l_iter->v, BM_ELEM_TAG); + BM_elem_flag_disable(l_iter->v, BM_ELEM_INTERNAL_TAG); } for (i = 0, l_iter = BM_FACE_FIRST_LOOP(f1); i < f1len; i++, l_iter = l_iter->next) { if (l_iter != f1loop) { - BM_elem_flag_enable(l_iter->v, BM_ELEM_TAG); + BM_elem_flag_enable(l_iter->v, BM_ELEM_INTERNAL_TAG); } } for (i = 0, l_iter = BM_FACE_FIRST_LOOP(f2); i < f2len; i++, l_iter = l_iter->next) { if (l_iter != f2loop) { /* as soon as a duplicate is found, bail out */ - if (BM_elem_flag_test(l_iter->v, BM_ELEM_TAG)) { + if (BM_elem_flag_test(l_iter->v, BM_ELEM_INTERNAL_TAG)) { return NULL; } } diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c index 45edfd9628a..f85105651d4 100644 --- a/source/blender/bmesh/intern/bmesh_queries.c +++ b/source/blender/bmesh/intern/bmesh_queries.c @@ -652,7 +652,7 @@ BMVert *BM_edge_share_vert(BMEdge *e1, BMEdge *e2) } /** - * \brief Radial Find a Vertex Loop in Face + * \brief Return the Loop Shared by Face and Vertex * * Finds the loop used which uses \a v in face loop \a l * @@ -674,6 +674,29 @@ BMLoop *BM_face_vert_share_loop(BMFace *f, BMVert *v) return NULL; } +/** + * \brief Return the Loop Shared by Face and Edge + * + * Finds the loop used which uses \a e in face loop \a l + * + * \note currenly this just uses simple loop in future may be speeded up + * using radial vars + */ +BMLoop *BM_face_edge_share_loop(BMFace *f, BMEdge *e) +{ + BMLoop *l_first; + BMLoop *l_iter; + + l_iter = l_first = e->l; + do { + if (l_iter->f == f) { + return l_iter; + } + } while ((l_iter = l_iter->radial_next) != l_first); + + return NULL; +} + /** * Returns the verts of an edge as used in a face * if used in a face at all, otherwise just assign as used in the edge. @@ -681,24 +704,16 @@ BMLoop *BM_face_vert_share_loop(BMFace *f, BMVert *v) * Useful to get a deterministic winding order when calling * BM_face_create_ngon() on an arbitrary array of verts, * though be sure to pick an edge which has a face. + * + * \note This is infact quite a simple check, mainly include this function so the intent is more obvious. + * We know these 2 verts will _always_ make up the loops edge */ void BM_edge_ordered_verts_ex(BMEdge *edge, BMVert **r_v1, BMVert **r_v2, BMLoop *edge_loop) { BLI_assert(edge_loop->e == edge); - - if ((edge_loop == NULL) || - (((edge_loop->prev->v == edge->v1) && (edge_loop->v == edge->v2)) || - ((edge_loop->v == edge->v1) && (edge_loop->next->v == edge->v2))) - ) - { - *r_v1 = edge->v1; - *r_v2 = edge->v2; - } - else { - *r_v1 = edge->v2; - *r_v2 = edge->v1; - } + *r_v1 = edge_loop->v; + *r_v2 = edge_loop->next->v; } void BM_edge_ordered_verts(BMEdge *edge, BMVert **r_v1, BMVert **r_v2) diff --git a/source/blender/bmesh/intern/bmesh_queries.h b/source/blender/bmesh/intern/bmesh_queries.h index f3dfa754f00..567d60eeac6 100644 --- a/source/blender/bmesh/intern/bmesh_queries.h +++ b/source/blender/bmesh/intern/bmesh_queries.h @@ -79,6 +79,7 @@ int BM_edge_share_vert_count(BMEdge *e1, BMEdge *e2); BMVert *BM_edge_share_vert(BMEdge *e1, BMEdge *e2); BMLoop *BM_face_vert_share_loop(BMFace *f, BMVert *v); +BMLoop *BM_face_edge_share_loop(BMFace *f, BMEdge *e); void BM_edge_ordered_verts(BMEdge *edge, BMVert **r_v1, BMVert **r_v2); void BM_edge_ordered_verts_ex(BMEdge *edge, BMVert **r_v1, BMVert **r_v2, From df27c315ce8eb72ee7d7d5d8aa3deb1645e88866 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 04:44:50 +0000 Subject: [PATCH 089/156] code cleanup: minor edits to bmesh_jfke(), move simple checks first. --- source/blender/bmesh/intern/bmesh_core.c | 34 +++++++++++------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index 765c1c3e774..8b1fee3b33f 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -1594,13 +1594,13 @@ BMEdge *bmesh_jekv(BMesh *bm, BMEdge *ke, BMVert *kv, const short check_edge_dou * \par Examples: * * A B - * ---------- ---------- + * +--------+ +--------+ * | | | | * | f1 | | f1 | * v1========v2 = Ok! v1==V2==v3 == Wrong! * | f2 | | f2 | * | | | | - * ---------- ---------- + * +--------+ +--------+ * * In the example A, faces \a f1 and \a f2 are joined by a single edge, * and the euler can safely be used. @@ -1617,13 +1617,18 @@ BMEdge *bmesh_jekv(BMesh *bm, BMEdge *ke, BMVert *kv, const short check_edge_dou BMFace *bmesh_jfke(BMesh *bm, BMFace *f1, BMFace *f2, BMEdge *e) { BMLoop *l_iter, *f1loop = NULL, *f2loop = NULL; - int newlen = 0, i, f1len = 0, f2len = 0, radlen = 0, edok, shared; + int newlen = 0, i, f1len = 0, f2len = 0, edok; - /* can't join a face to itsel */ + /* can't join a face to itself */ if (f1 == f2) { return NULL; } + /* validate that edge is 2-manifold edge */ + if (!BM_edge_is_manifold(e)) { + return NULL; + } + /* verify that e is in both f1 and f2 */ f1len = f1->len; f2len = f2->len; @@ -1633,12 +1638,6 @@ BMFace *bmesh_jfke(BMesh *bm, BMFace *f1, BMFace *f2, BMEdge *e) { return NULL; } - - /* validate that edge is 2-manifold edg */ - radlen = bmesh_radial_length(f1loop); - if (radlen != 2) { - return NULL; - } /* validate direction of f2's loop cycle is compatible */ if (f1loop->v == f2loop->v) { @@ -1647,17 +1646,16 @@ BMFace *bmesh_jfke(BMesh *bm, BMFace *f1, BMFace *f2, BMEdge *e) /* validate that for each face, each vertex has another edge in its disk cycle that is * not e, and not shared. */ - if ( bmesh_radial_face_find(f1loop->next->e, f2) || - bmesh_radial_face_find(f1loop->prev->e, f2) || - bmesh_radial_face_find(f2loop->next->e, f1) || - bmesh_radial_face_find(f2loop->prev->e, f1) ) + if (bmesh_radial_face_find(f1loop->next->e, f2) || + bmesh_radial_face_find(f1loop->prev->e, f2) || + bmesh_radial_face_find(f2loop->next->e, f1) || + bmesh_radial_face_find(f2loop->prev->e, f1) ) { return NULL; } - /* validate only one shared edg */ - shared = BM_face_share_edge_count(f1, f2); - if (shared > 1) { + /* validate only one shared edge */ + if (BM_face_share_edge_count(f1, f2) > 1) { return NULL; } @@ -1697,7 +1695,7 @@ BMFace *bmesh_jfke(BMesh *bm, BMFace *f1, BMFace *f2, BMEdge *e) /* increase length of f1 */ f1->len += (f2->len - 2); - /* make sure each loop points to the proper fac */ + /* make sure each loop points to the proper face */ newlen = f1->len; for (i = 0, l_iter = BM_FACE_FIRST_LOOP(f1); i < newlen; i++, l_iter = l_iter->next) l_iter->f = f1; From 6389301eb573625abefc20f93fb83efa64d2600d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 05:52:18 +0000 Subject: [PATCH 090/156] fix for own error in recent scanfill updates, scanfill can hang if run on a polygon with no area. --- source/blender/blenlib/intern/scanfill.c | 2 +- source/blender/bmesh/tools/BME_bevel.c | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index 4878ad628ef..a57c2eb1ad3 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -882,7 +882,7 @@ int BLI_edgefill_ex(ScanFillContext *sf_ctx, const short do_quad_tri_speedup, co } if (UNLIKELY(normalize_v3(n) == 0.0f)) { - n[2] = 1.0f; /* other axis set to 0.0 */ + return 0; } axis_dominant_v3(&co_x, &co_y, n); diff --git a/source/blender/bmesh/tools/BME_bevel.c b/source/blender/bmesh/tools/BME_bevel.c index 63976f25eff..59a35abfd63 100644 --- a/source/blender/bmesh/tools/BME_bevel.c +++ b/source/blender/bmesh/tools/BME_bevel.c @@ -148,7 +148,6 @@ float *BME_new_transdata_float(BME_TransData_Head *td) * The drawback, though, is that this code doesn't merge customdata. */ static int BME_Bevel_Dissolve_Disk(BMesh *bm, BMVert *v) { - BMIter iter; BMEdge *e, *elast; BMLoop *l1, *l2; @@ -156,12 +155,6 @@ static int BME_Bevel_Dissolve_Disk(BMesh *bm, BMVert *v) return 0; } - BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) { - if (BM_edge_face_count(e) != 2) { - return 0; - } - } - if (BM_vert_edge_count(v) > 2) { while (BM_vert_edge_count(v) > 2) { e = v->e; @@ -1011,12 +1004,14 @@ static BMesh *BME_bevel_mesh(BMesh *bm, float value, int UNUSED(res), int option } } +#ifdef DEBUG /* Debug print, remov */ BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { if (f->len == 2) { - printf("warning"); + printf("%s: warning, 2 edge face\n", __func__); } } +#endif return bm; } From 27696ddae19a2a58da407b4d1a2453ec0de60841 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 06:36:47 +0000 Subject: [PATCH 091/156] fix error in last commit. Misunderstood BM_vert_is_manifold(), added some comments. --- source/blender/bmesh/intern/bmesh_queries.c | 27 ++++++++++----------- source/blender/bmesh/tools/BME_bevel.c | 8 ++++++ 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c index f85105651d4..92d26c0fc5a 100644 --- a/source/blender/bmesh/intern/bmesh_queries.c +++ b/source/blender/bmesh/intern/bmesh_queries.c @@ -470,10 +470,10 @@ int BM_edge_is_wire(BMEdge *e) /** * A vertex is non-manifold if it meets the following conditions: - * 1: Loose - (has no edges/faces incident upon it) - * 2: Joins two distinct regions - (two pyramids joined at the tip) - * 3: Is part of a non-manifold edge (edge with more than 2 faces) - * 4: Is part of a wire edge + * 1: Loose - (has no edges/faces incident upon it). + * 2: Joins two distinct regions - (two pyramids joined at the tip). + * 3: Is part of a an edge with more than 2 faces. + * 4: Is part of a wire edge. */ int BM_vert_is_manifold(BMVert *v) { @@ -487,18 +487,17 @@ int BM_vert_is_manifold(BMVert *v) } /* count edges while looking for non-manifold edges */ - oe = v->e; - for (len = 0, e = v->e; e != oe || (e == oe && len == 0); len++, e = bmesh_disk_edge_next(e, v)) { - if (e->l == NULL) { - /* loose edge */ + len = 0; + oe = e = v->e; + do { + /* loose edge or edge shared by more than two faces, + * edges with 1 face user are OK, otherwise we could + * use BM_edge_is_manifold() here */ + if (e->l == NULL || bmesh_radial_length(e->l) > 2) { return FALSE; } - - if (bmesh_radial_length(e->l) > 2) { - /* edge shared by more than two faces */ - return FALSE; - } - } + len++; + } while((e = bmesh_disk_edge_next(e, v)) != oe); count = 1; flag = 1; diff --git a/source/blender/bmesh/tools/BME_bevel.c b/source/blender/bmesh/tools/BME_bevel.c index 59a35abfd63..5ef70f9cc2b 100644 --- a/source/blender/bmesh/tools/BME_bevel.c +++ b/source/blender/bmesh/tools/BME_bevel.c @@ -148,6 +148,7 @@ float *BME_new_transdata_float(BME_TransData_Head *td) * The drawback, though, is that this code doesn't merge customdata. */ static int BME_Bevel_Dissolve_Disk(BMesh *bm, BMVert *v) { + BMIter iter; BMEdge *e, *elast; BMLoop *l1, *l2; @@ -155,6 +156,13 @@ static int BME_Bevel_Dissolve_Disk(BMesh *bm, BMVert *v) return 0; } + /* hrmf, we could have a version of BM_vert_is_manifold() which checks for this case */ + BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) { + if (BM_edge_face_count(e) != 2) { + return 0; + } + } + if (BM_vert_edge_count(v) > 2) { while (BM_vert_edge_count(v) > 2) { e = v->e; From f1ececaabba32fac6d22ca334fa58f48f43d281a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 06:44:48 +0000 Subject: [PATCH 092/156] code cleanup: replace use of BM_edge_face_count with BM_edge_is_manifold and BM_edge_is_boundary --- source/blender/bmesh/intern/bmesh_queries.c | 2 +- source/blender/bmesh/operators/bmo_dissolve.c | 2 +- source/blender/editors/mesh/editmesh_rip.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c index 92d26c0fc5a..5efdd547ba9 100644 --- a/source/blender/bmesh/intern/bmesh_queries.c +++ b/source/blender/bmesh/intern/bmesh_queries.c @@ -802,7 +802,7 @@ void BM_loop_face_tangent(BMLoop *l, float r_tangent[3]) */ float BM_edge_face_angle(BMEdge *e) { - if (BM_edge_face_count(e) == 2) { + if (BM_edge_is_manifold(e)) { BMLoop *l1 = e->l; BMLoop *l2 = e->l->radial_next; return angle_normalized_v3v3(l1->f->no, l2->f->no); diff --git a/source/blender/bmesh/operators/bmo_dissolve.c b/source/blender/bmesh/operators/bmo_dissolve.c index f08b2bffdc6..88b8eef0fbf 100644 --- a/source/blender/bmesh/operators/bmo_dissolve.c +++ b/source/blender/bmesh/operators/bmo_dissolve.c @@ -308,7 +308,7 @@ static int test_extra_verts(BMesh *bm, BMVert *v) found = FALSE; e = BM_iter_new(&iter2, bm, BM_EDGES_OF_VERT, l->v); for ( ; e; e = BM_iter_step(&iter2)) { - if (BM_edge_face_count(e) == 1) { + if (BM_edge_is_boundary(e)) { found = TRUE; } f2 = BM_iter_new(&iter3, bm, BM_FACES_OF_EDGE, e); diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index 6097acd6e49..f22a4ae9a97 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -413,7 +413,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) * otherwise we can't a face away from a wire edge */ totboundary_edge += (is_boundary != 0 || BM_edge_is_wire(e)); if (!BM_elem_flag_test(e, BM_ELEM_HIDDEN)) { - if (is_boundary == FALSE && BM_edge_face_count(e) == 2) { + if (is_boundary == FALSE && BM_edge_is_manifold(e)) { d = edbm_rip_rip_edgedist(ar, projectMat, e->v1->co, e->v2->co, fmval); if (d < dist) { dist = d; @@ -511,7 +511,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) } /* rip two adjacent edges */ - if (BM_edge_face_count(e2) == 1 || BM_vert_face_count(v) == 2) { + if (BM_edge_is_boundary(e2) || BM_vert_face_count(v) == 2) { l = e2->l; ripvert = BM_face_vert_separate(bm, l->f, v); @@ -520,7 +520,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_CANCELLED; } } - else if (BM_edge_face_count(e2) == 2) { + else if (BM_edge_is_manifold(e2)) { l = e2->l; e = BM_face_other_edge_loop(l->f, e2, v)->e; BM_elem_flag_enable(e, BM_ELEM_TAG); From 1f01d62d15dc8c588b58f8732d3742b0bac8da22 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 06:57:28 +0000 Subject: [PATCH 093/156] more replacement for BM_edge_face_count() use. --- source/blender/bmesh/intern/bmesh_walkers_impl.c | 2 +- source/blender/bmesh/operators/bmo_triangulate.c | 2 +- source/blender/bmesh/tools/BME_bevel.c | 2 +- source/blender/editors/mesh/editmesh_select.c | 2 +- source/blender/editors/mesh/editmesh_tools.c | 2 +- source/blender/editors/transform/transform.c | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_walkers_impl.c b/source/blender/bmesh/intern/bmesh_walkers_impl.c index ae7294ed4b6..cccda674b0f 100644 --- a/source/blender/bmesh/intern/bmesh_walkers_impl.c +++ b/source/blender/bmesh/intern/bmesh_walkers_impl.c @@ -743,7 +743,7 @@ static void *bmw_FaceLoopWalker_step(BMWalker *walker) if (!bmw_FaceLoopWalker_include_face(walker, l)) { l = lwalk->l; l = l->next->next; - if (BM_edge_face_count(l->e) != 2) { + if (!BM_edge_is_manifold(l->e)) { l = l->prev->prev; } l = l->radial_next; diff --git a/source/blender/bmesh/operators/bmo_triangulate.c b/source/blender/bmesh/operators/bmo_triangulate.c index 7d07dc075da..fd6106a11c9 100644 --- a/source/blender/bmesh/operators/bmo_triangulate.c +++ b/source/blender/bmesh/operators/bmo_triangulate.c @@ -106,7 +106,7 @@ void bmo_beautify_fill_exec(BMesh *bm, BMOperator *op) BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { BMVert *v1, *v2, *v3, *v4; - if (BM_edge_face_count(e) != 2 || BMO_elem_flag_test(bm, e, EDGE_MARK)) { + if (!BM_edge_is_manifold(e) || BMO_elem_flag_test(bm, e, EDGE_MARK)) { continue; } diff --git a/source/blender/bmesh/tools/BME_bevel.c b/source/blender/bmesh/tools/BME_bevel.c index 5ef70f9cc2b..c3796fe492f 100644 --- a/source/blender/bmesh/tools/BME_bevel.c +++ b/source/blender/bmesh/tools/BME_bevel.c @@ -158,7 +158,7 @@ static int BME_Bevel_Dissolve_Disk(BMesh *bm, BMVert *v) /* hrmf, we could have a version of BM_vert_is_manifold() which checks for this case */ BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) { - if (BM_edge_face_count(e) != 2) { + if (!BM_edge_is_manifold(e)) { return 0; } } diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 00835b79593..6505337d1a4 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -2371,7 +2371,7 @@ static int edbm_select_non_manifold_exec(bContext *C, wmOperator *op) } BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { - if (!BM_elem_flag_test(e, BM_ELEM_HIDDEN) && BM_edge_face_count(e) != 2) { + if (!BM_elem_flag_test(e, BM_ELEM_HIDDEN) && !BM_edge_is_manifold(e)) { BM_elem_select_set(em->bm, e, TRUE); } } diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 557c8797a26..12cd7893f5a 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -2801,7 +2801,7 @@ static int mesh_separate_selected(Main *bmain, Scene *scene, Base *editbase, wmO if (BM_elem_flag_test(e, BM_ELEM_HIDDEN)) continue; - if (BM_edge_face_count(e) != 0) { + if (!BM_edge_is_wire(e)) { BM_elem_select_set(em->bm, e, FALSE); } } diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index f4bfa1e0172..0a85c523c93 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -4437,7 +4437,7 @@ static int createSlideVerts(TransInfo *t) BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { - if (BM_edge_face_count(e) != 2) { + if (!BM_edge_is_manifold(e)) { MEM_freeN(sld); BMBVH_FreeBVH(btree); return 0; /* can only handle exactly 2 faces around each edge */ From 9a4aecbcc3312070f03b3e8a450944a1a29b008c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 07:27:15 +0000 Subject: [PATCH 094/156] bmesh: fix own bug in BM_vert_collapse_faces() with option 'kill_degenerate_faces', was removing data as it iterated, would crash in some cases. --- source/blender/bmesh/intern/bmesh_mods.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/source/blender/bmesh/intern/bmesh_mods.c b/source/blender/bmesh/intern/bmesh_mods.c index 78db5baffd0..71f120c5217 100644 --- a/source/blender/bmesh/intern/bmesh_mods.c +++ b/source/blender/bmesh/intern/bmesh_mods.c @@ -545,17 +545,27 @@ BMEdge *BM_vert_collapse_faces(BMesh *bm, BMEdge *ke, BMVert *kv, float fac, /* ne = BM_edge_exists(tv, tv2); */ /* same as return above */ if (kill_degenerate_faces) { + BLI_array_declare(bad_faces); + BMFace **bad_faces = NULL; + BMIter fiter; BMFace *f; BMVert *verts[2] = {ne->v1, ne->v2}; int i; + for (i = 0; i < 2; i++) { + /* cant kill data we loop on, build a list and remove those */ + BLI_array_empty(bad_faces); BM_ITER(f, &fiter, bm, BM_FACES_OF_VERT, verts[i]) { if (f->len < 3) { - BM_face_kill(bm, f); + BLI_array_append(bad_faces, f); } } + while ((f = BLI_array_pop(bad_faces))) { + BM_face_kill(bm, f); + } } + BLI_array_free(bad_faces); } } From 08478a10d168390808584c5cdebcb56566e07a7c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 07:29:12 +0000 Subject: [PATCH 095/156] fix [#30921] Bevel modifier's is not work correctly with bevel weights replace dissolve function with one from 2.62 (updated for the new bmesh api). --- source/blender/bmesh/tools/BME_bevel.c | 75 ++++++++------------------ 1 file changed, 22 insertions(+), 53 deletions(-) diff --git a/source/blender/bmesh/tools/BME_bevel.c b/source/blender/bmesh/tools/BME_bevel.c index c3796fe492f..c38bb88900d 100644 --- a/source/blender/bmesh/tools/BME_bevel.c +++ b/source/blender/bmesh/tools/BME_bevel.c @@ -144,65 +144,34 @@ float *BME_new_transdata_float(BME_TransData_Head *td) return BLI_memarena_alloc(td->ma, sizeof(float)); } -/* BM_disk_dissolve is a real mess, and crashes bevel if called instead of this. - * The drawback, though, is that this code doesn't merge customdata. */ -static int BME_Bevel_Dissolve_Disk(BMesh *bm, BMVert *v) +/* ported from before bmesh merge into trunk (was called) + * problem with this is it creates 2 vert faces */ +static void BME_Bevel_Dissolve_Disk(BMesh *bm, BMVert *v) { - BMIter iter; - BMEdge *e, *elast; - BMLoop *l1, *l2; + BMFace *f; + BMEdge *e; + int done; - if (!BM_vert_is_manifold(v)) { - return 0; - } - - /* hrmf, we could have a version of BM_vert_is_manifold() which checks for this case */ - BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) { - if (!BM_edge_is_manifold(e)) { - return 0; - } - } - - if (BM_vert_edge_count(v) > 2) { - while (BM_vert_edge_count(v) > 2) { - e = v->e; - l1 = e->l; - l2 = l1->radial_next; - if (l1->v == l2->v) { - /* faces have incompatible directions; need to reverse one */ - if (!bmesh_loop_reverse(bm, l2->f)) { - BLI_assert(!"bevel dissolve disk cannot reverse loop"); - return 0; + if (v->e) { + done = 0; + while (!done){ + done = 1; + e = v->e; /*loop the edge looking for a edge to dissolve*/ + do { + f = NULL; + if (BM_edge_is_manifold(e)) { + f = bmesh_jfke(bm, e->l->f, e->l->radial_next->f, e); } - l2 = l1->radial_next; - } - if (!bmesh_jfke(bm, l1->f, l2->f, e)) { - BLI_assert(!"bevel dissolve disk cannot join faces"); - return 0; - } - } - - e = v->e; - elast = bmesh_disk_edge_next(e, v); - - /* BMESH_TODO, figure out if its possible we had a double edge here and need to splice it, - * last bool arg */ - bmesh_jekv(bm, e, v, FALSE); - - l1 = elast->l; - l2 = l1->radial_next; - if (l1->v == l2->v) { - /* faces have incompatible directions */ - if (!bmesh_loop_reverse(bm, l2->f)) { - BLI_assert(!"bevel dissolve disk cannot reverse loop"); - return 0; + if (f) { + done = 0; + break; } - l2 = l1->radial_next; + e = bmesh_disk_edge_next(e, v); + } while(e != v->e); } - bmesh_jfke(bm, l1->f, l2->f, elast); + BM_vert_collapse_edge(bm, v->e, v, TRUE); + // bmesh_jekv(bm, v->e, v, FALSE); } - - return 1; } static int BME_bevel_is_split_vert(BMesh *bm, BMLoop *l) From c776418b247f9a34dec22c15684bcece5db568b7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 08:11:08 +0000 Subject: [PATCH 096/156] add missing NULL check for BM_vert_collapse_faces(), could crash in rare cases. --- source/blender/bmesh/intern/bmesh_mods.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/bmesh/intern/bmesh_mods.c b/source/blender/bmesh/intern/bmesh_mods.c index 71f120c5217..20306d3bd4a 100644 --- a/source/blender/bmesh/intern/bmesh_mods.c +++ b/source/blender/bmesh/intern/bmesh_mods.c @@ -544,7 +544,7 @@ BMEdge *BM_vert_collapse_faces(BMesh *bm, BMEdge *ke, BMVert *kv, float fac, ne = bmesh_jekv(bm, ke, kv, TRUE); /* ne = BM_edge_exists(tv, tv2); */ /* same as return above */ - if (kill_degenerate_faces) { + if (ne && kill_degenerate_faces) { BLI_array_declare(bad_faces); BMFace **bad_faces = NULL; From 6d346724d3171061e71adddeecea737f138bf48e Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 18 Apr 2012 08:26:58 +0000 Subject: [PATCH 097/156] Fix redo not working correct after keyboard input for shear, shrink/flatten, push/pull, edge slide tools. Patch by Nicholas Rishel. --- source/blender/editors/transform/transform.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 0a85c523c93..bb1800a79cf 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -2516,6 +2516,8 @@ int Shear(TransInfo *t, const int UNUSED(mval[2])) sprintf(str, "Shear: %.3f %s", value, t->proptext); } + t->values[0] = value; + unit_m3(smat); // Custom data signals shear direction @@ -3616,6 +3618,7 @@ int ShrinkFatten(TransInfo *t, const int UNUSED(mval[2])) sprintf(str, "Shrink/Fatten: %.4f %s", distance, t->proptext); } + t->values[0] = distance; for (i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) @@ -3821,6 +3824,8 @@ int PushPull(TransInfo *t, const int UNUSED(mval[2])) sprintf(str, "Push/Pull: %.4f%s %s", distance, t->con.text, t->proptext); } + t->values[0] = distance; + if (t->con.applyRot && t->con.mode & CON_APPLY) { t->con.applyRot(t, NULL, axis, NULL); } @@ -4923,6 +4928,8 @@ int EdgeSlide(TransInfo *t, const int UNUSED(mval[2])) CLAMP(final, -1.0f, 1.0f); + t->values[0] = final; + /*do stuff here*/ if (t->customData) doEdgeSlide(t, final); From ddbb4db1d31e7b5454f8b6758da04c9e4e04dcb3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 09:04:07 +0000 Subject: [PATCH 098/156] fix [#30995] Wavefront obj. file export/import issue with splited edge --- source/blender/editors/mesh/mesh_data.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/source/blender/editors/mesh/mesh_data.c b/source/blender/editors/mesh/mesh_data.c index 69aeee48a4b..b2d37e8fc67 100644 --- a/source/blender/editors/mesh/mesh_data.c +++ b/source/blender/editors/mesh/mesh_data.c @@ -816,12 +816,9 @@ void ED_mesh_update(Mesh *mesh, bContext *C, int calc_edges, int calc_tessface) /* would only be converting back again, don't bother */ tessface_input = TRUE; - - /* it also happens that converting the faces calculates edges, skip this */ - calc_edges = FALSE; } - if (calc_edges || (mesh->totpoly && mesh->totedge == 0)) + if (calc_edges || ((mesh->totpoly || mesh->totface) && mesh->totedge == 0)) BKE_mesh_calc_edges(mesh, calc_edges); if (calc_tessface) { From 40f4a4b6ba2477cbc5584f42b702e2d3d9056fec Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 09:16:30 +0000 Subject: [PATCH 099/156] style cleanup: mesh validate. also add code cleanup script which runs uncrustify and then undoes trailing whitespace edits (reducing diff noise) --- .../blender/blenkernel/intern/mesh_validate.c | 156 +++++++++--------- 1 file changed, 78 insertions(+), 78 deletions(-) diff --git a/source/blender/blenkernel/intern/mesh_validate.c b/source/blender/blenkernel/intern/mesh_validate.c index cd49002a351..c5c2060d5c0 100644 --- a/source/blender/blenkernel/intern/mesh_validate.c +++ b/source/blender/blenkernel/intern/mesh_validate.c @@ -63,7 +63,7 @@ typedef struct SortPoly { /* TODO check there is not some standard define of this somewhere! */ static int int_cmp(const void *v1, const void *v2) { - return *(int*)v1 > *(int*)v2 ? 1 : *(int*)v1 < *(int*)v2 ? -1 : 0; + return *(int *)v1 > *(int *)v2 ? 1 : *(int *)v1 < *(int *)v2 ? -1 : 0; } static int search_poly_cmp(const void *v1, const void *v2) @@ -103,11 +103,11 @@ int BKE_mesh_validate_arrays(Mesh *mesh, MDeformVert *dverts, /* assume totvert length */ const short do_verbose, const short do_fixes) { -# define REMOVE_EDGE_TAG(_me) { _me->v2 = _me->v1; do_edge_free = TRUE; } -# define IS_REMOVED_EDGE(_me) (_me->v2 == _me->v1) +# define REMOVE_EDGE_TAG(_me) { _me->v2 = _me->v1; do_edge_free = TRUE; } +# define IS_REMOVED_EDGE(_me) (_me->v2 == _me->v1) -# define REMOVE_LOOP_TAG(_ml) { _ml->e = INVALID_LOOP_EDGE_MARKER; do_polyloop_free = TRUE; } -# define REMOVE_POLY_TAG(_mp) { _mp->totloop *= -1; do_polyloop_free = TRUE; } +# define REMOVE_LOOP_TAG(_ml) { _ml->e = INVALID_LOOP_EDGE_MARKER; do_polyloop_free = TRUE; } +# define REMOVE_POLY_TAG(_mp) { _mp->totloop *= -1; do_polyloop_free = TRUE; } MVert *mv = mverts; MEdge *me; @@ -116,13 +116,13 @@ int BKE_mesh_validate_arrays(Mesh *mesh, unsigned int i, j; int *v; - short do_edge_free= FALSE; - short do_polyloop_free= FALSE; /* This regroups loops and polys! */ + short do_edge_free = FALSE; + short do_polyloop_free = FALSE; /* This regroups loops and polys! */ - short verts_fixed= FALSE; - short vert_weights_fixed= FALSE; + short verts_fixed = FALSE; + short vert_weights_fixed = FALSE; - int do_edge_recalc= FALSE; + int do_edge_recalc = FALSE; EdgeHash *edge_hash = BLI_edgehash_new(); @@ -136,53 +136,53 @@ int BKE_mesh_validate_arrays(Mesh *mesh, do_edge_recalc = do_fixes; } - for (i=1; ico[j])) { PRINT(" vertex %u: has invalid coordinate\n", i); if (do_fixes) { zero_v3(mv->co); - verts_fixed= TRUE; + verts_fixed = TRUE; } } - if (mv->no[j]!=0) - fix_normal= FALSE; + if (mv->no[j] != 0) + fix_normal = FALSE; } if (fix_normal) { PRINT(" vertex %u: has zero normal, assuming Z-up normal\n", i); if (do_fixes) { - mv->no[2]= SHRT_MAX; - verts_fixed= TRUE; + mv->no[2] = SHRT_MAX; + verts_fixed = TRUE; } } } - for (i=0, me= medges; iv1 == me->v2) { PRINT(" edge %u: has matching verts, both %u\n", i, me->v1); - remove= do_fixes; + remove = do_fixes; } if (me->v1 >= totvert) { PRINT(" edge %u: v1 index out of range, %u\n", i, me->v1); - remove= do_fixes; + remove = do_fixes; } if (me->v2 >= totvert) { PRINT(" edge %u: v2 index out of range, %u\n", i, me->v2); - remove= do_fixes; + remove = do_fixes; } if (BLI_edgehash_haskey(edge_hash, me->v1, me->v2)) { PRINT(" edge %u: is a duplicate of %d\n", i, GET_INT_FROM_POINTER(BLI_edgehash_lookup(edge_hash, me->v1, me->v2))); - remove= do_fixes; + remove = do_fixes; } if (remove == FALSE) { @@ -281,7 +281,7 @@ int BKE_mesh_validate_arrays(Mesh *mesh, int prev_e = ml->e; ml->e = GET_INT_FROM_POINTER(BLI_edgehash_lookup(edge_hash, v1, v2)); PRINT(" poly %u has invalid edge reference (%u), fixed using edge %u\n", - sp->index, prev_e, ml->e); + sp->index, prev_e, ml->e); } else { PRINT(" poly %u has invalid edge reference (%u)\n", sp->index, ml->e); @@ -471,24 +471,24 @@ int BKE_mesh_validate_arrays(Mesh *mesh, /* fix deform verts */ if (dverts) { MDeformVert *dv; - for (i=0, dv= dverts; idw; j < dv->totweight; j++, dw++) { + for (j = 0, dw = dv->dw; j < dv->totweight; j++, dw++) { /* note, greater then max defgroups is accounted for in our code, but not < 0 */ if (!finite(dw->weight)) { PRINT(" vertex deform %u, group %d has weight: %f\n", i, dw->def_nr, dw->weight); if (do_fixes) { - dw->weight= 0.0f; - vert_weights_fixed= TRUE; + dw->weight = 0.0f; + vert_weights_fixed = TRUE; } } else if (dw->weight < 0.0f || dw->weight > 1.0f) { PRINT(" vertex deform %u, group %d has weight: %f\n", i, dw->def_nr, dw->weight); if (do_fixes) { CLAMP(dw->weight, 0.0f, 1.0f); - vert_weights_fixed= TRUE; + vert_weights_fixed = TRUE; } } @@ -500,9 +500,9 @@ int BKE_mesh_validate_arrays(Mesh *mesh, /* re-allocated, the new values compensate for stepping * within the for loop and may not be valid */ j--; - dw= dv->dw + j; + dw = dv->dw + j; - vert_weights_fixed= TRUE; + vert_weights_fixed = TRUE; } else { /* all freed */ break; @@ -515,10 +515,10 @@ int BKE_mesh_validate_arrays(Mesh *mesh, PRINT("BKE_mesh_validate: finished\n\n"); -# undef REMOVE_EDGE_TAG -# undef IS_REMOVED_EDGE -# undef REMOVE_LOOP_TAG -# undef REMOVE_POLY_TAG +# undef REMOVE_EDGE_TAG +# undef IS_REMOVED_EDGE +# undef REMOVE_LOOP_TAG +# undef REMOVE_POLY_TAG if (mesh) { if (do_polyloop_free) { @@ -539,20 +539,20 @@ int BKE_mesh_validate_arrays(Mesh *mesh, static int mesh_validate_customdata(CustomData *data, short do_verbose, const short do_fixes) { - int i= 0, has_fixes= 0; + int i = 0, has_fixes = 0; - while (itotlayer) { - CustomDataLayer *layer= &data->layers[i]; - CustomDataMask mask= CD_TYPE_AS_MASK(layer->type); - int ok= 1; + while (i < data->totlayer) { + CustomDataLayer *layer = &data->layers[i]; + CustomDataMask mask = CD_TYPE_AS_MASK(layer->type); + int ok = 1; - if ((mask&CD_MASK_MESH)==0) { + if ((mask & CD_MASK_MESH) == 0) { PRINT("CustomDataLayer type %d which isn't in CD_MASK_MESH is stored in Mehs structure\n", layer->type); if (do_fixes) { CustomData_free_layer(data, layer->type, 0, i); - ok= 0; - has_fixes= 1; + ok = 0; + has_fixes = 1; } } @@ -569,32 +569,32 @@ static int BKE_mesh_validate_all_customdata(CustomData *vdata, CustomData *edata CustomData *ldata, CustomData *pdata, short do_verbose, const short do_fixes) { - int vfixed= 0, efixed= 0, lfixed = 0, pfixed = 0; + int vfixed = 0, efixed = 0, lfixed = 0, pfixed = 0; - vfixed= mesh_validate_customdata(vdata, do_verbose, do_fixes); - efixed= mesh_validate_customdata(edata, do_verbose, do_fixes); - lfixed= mesh_validate_customdata(ldata, do_verbose, do_fixes); - pfixed= mesh_validate_customdata(pdata, do_verbose, do_fixes); + vfixed = mesh_validate_customdata(vdata, do_verbose, do_fixes); + efixed = mesh_validate_customdata(edata, do_verbose, do_fixes); + lfixed = mesh_validate_customdata(ldata, do_verbose, do_fixes); + pfixed = mesh_validate_customdata(pdata, do_verbose, do_fixes); return vfixed || efixed || lfixed || pfixed; } int BKE_mesh_validate(Mesh *me, int do_verbose) { - int layers_fixed= 0, arrays_fixed= 0; + int layers_fixed = 0, arrays_fixed = 0; if (do_verbose) { - printf("MESH: %s\n", me->id.name+2); + printf("MESH: %s\n", me->id.name + 2); } - layers_fixed= BKE_mesh_validate_all_customdata(&me->vdata, &me->edata, &me->ldata, &me->pdata, do_verbose, TRUE); - arrays_fixed= BKE_mesh_validate_arrays(me, - me->mvert, me->totvert, - me->medge, me->totedge, - me->mloop, me->totloop, - me->mpoly, me->totpoly, - me->dvert, - do_verbose, TRUE); + layers_fixed = BKE_mesh_validate_all_customdata(&me->vdata, &me->edata, &me->ldata, &me->pdata, do_verbose, TRUE); + arrays_fixed = BKE_mesh_validate_arrays(me, + me->mvert, me->totvert, + me->medge, me->totedge, + me->mloop, me->totloop, + me->mpoly, me->totpoly, + me->dvert, + do_verbose, TRUE); if (layers_fixed || arrays_fixed) { DAG_id_tag_update(&me->id, OB_RECALC_DATA); @@ -624,26 +624,26 @@ void BKE_mesh_calc_edges(Mesh *mesh, int update) int i, totedge, totpoly = mesh->totpoly; int med_index; - if (mesh->totedge==0) - update= 0; + if (mesh->totedge == 0) + update = FALSE; if (update) { /* assume existing edges are valid * useful when adding more faces and generating edges from them */ - med= mesh->medge; - for (i= 0; itotedge; i++, med++) + med = mesh->medge; + for (i = 0; i < mesh->totedge; i++, med++) BLI_edgehash_insert(eh, med->v1, med->v2, med); } /* mesh loops (bmesh only) */ - for (i=0; i < totpoly; i++, mp++) { - MLoop *l= &mesh->mloop[mp->loopstart]; - int j, l_prev= (l + (mp->totloop-1))->v; - for (j=0; j < mp->totloop; j++, l++) { + for (i = 0; i < totpoly; i++, mp++) { + MLoop *l = &mesh->mloop[mp->loopstart]; + int j, l_prev = (l + (mp->totloop - 1))->v; + for (j = 0; j < mp->totloop; j++, l++) { if (!BLI_edgehash_haskey(eh, l_prev, l->v)) { BLI_edgehash_insert(eh, l_prev, l->v, NULL); } - l_prev= l->v; + l_prev = l->v; } } @@ -656,14 +656,14 @@ void BKE_mesh_calc_edges(Mesh *mesh, int update) ehi = BLI_edgehashIterator_new(eh); med = CustomData_get_layer(&edata, CD_MEDGE); for (i = 0; !BLI_edgehashIterator_isDone(ehi); - BLI_edgehashIterator_step(ehi), ++i, ++med) { + BLI_edgehashIterator_step(ehi), ++i, ++med) { - if (update && (med_orig=BLI_edgehashIterator_getValue(ehi))) { - *med= *med_orig; /* copy from the original */ + if (update && (med_orig = BLI_edgehashIterator_getValue(ehi))) { + *med = *med_orig; /* copy from the original */ } else { BLI_edgehashIterator_getKey(ehi, &med->v1, &med->v2); - med->flag = ME_EDGEDRAW|ME_EDGERENDER|SELECT; /* select for newly created meshes which are selected [#25595] */ + med->flag = ME_EDGEDRAW | ME_EDGERENDER | SELECT; /* select for newly created meshes which are selected [#25595] */ } /* store the new edge index in the hash value */ @@ -674,16 +674,16 @@ void BKE_mesh_calc_edges(Mesh *mesh, int update) if (mesh->totpoly) { /* second pass, iterate through all loops again and assign * the newly created edges to them. */ - MPoly *mp= mesh->mpoly; - for (i=0; i < mesh->totpoly; i++, mp++) { - MLoop *l= &mesh->mloop[mp->loopstart]; - MLoop *l_prev= (l + (mp->totloop-1)); + MPoly *mp = mesh->mpoly; + for (i = 0; i < mesh->totpoly; i++, mp++) { + MLoop *l = &mesh->mloop[mp->loopstart]; + MLoop *l_prev = (l + (mp->totloop - 1)); int j; - for (j=0; j < mp->totloop; j++, l++) { + for (j = 0; j < mp->totloop; j++, l++) { /* lookup hashed edge index */ med_index = GET_INT_FROM_POINTER(BLI_edgehash_lookup(eh, l_prev->v, l->v)); l_prev->e = med_index; - l_prev= l; + l_prev = l; } } } From 580f19d949cbe9302d0b50691d2d8950c93d150b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 09:56:19 +0000 Subject: [PATCH 100/156] fix [#30994] Extruding faces gives bad UV's this had strange logic, there was no need to loop over all face loops. --- source/blender/bmesh/operators/bmo_extrude.c | 63 ++++++++------------ 1 file changed, 25 insertions(+), 38 deletions(-) diff --git a/source/blender/bmesh/operators/bmo_extrude.c b/source/blender/bmesh/operators/bmo_extrude.c index fa4c3c5751b..b716f92d31c 100644 --- a/source/blender/bmesh/operators/bmo_extrude.c +++ b/source/blender/bmesh/operators/bmo_extrude.c @@ -120,49 +120,36 @@ void bmo_extrude_face_indiv_exec(BMesh *bm, BMOperator *op) static void bm_extrude_copy_face_loop_attributes(BMesh *bm, BMFace *f, BMEdge *e, BMEdge *newedge) { - BMIter iter; - BMLoop *l, *l_other; + /* 'a' is the starting edge #e, 'b' is the final edge #newedge */ + BMLoop *l_dst_a = BM_face_edge_share_loop(f, e); + BMLoop *l_dst_b = newedge->l; /* will only ever be one loop */ + BMLoop *l_src_a = l_dst_a->radial_next; + /* there is no l_src_b */ - /* copy attributes */ - BM_ITER(l, &iter, bm, BM_LOOPS_OF_FACE, f) { - if (l->e != e && l->e != newedge) { - continue; - } + /* sanity */ + BLI_assert(l_src_a->f != l_dst_a->f); + BLI_assert(l_dst_a->f == l_dst_b->f); - l_other = l->radial_next; - - if (l_other == l) { - l_other = newedge->l; - if (l_other != l) { - BM_elem_attrs_copy(bm, bm, l_other->f, f); - BM_elem_flag_disable(f, BM_ELEM_HIDDEN); /* possibly we copy from a hidden face */ + BM_elem_attrs_copy(bm, bm, l_src_a->f, l_dst_a->f); + BM_elem_flag_disable(f, BM_ELEM_HIDDEN); /* possibly we copy from a hidden face */ - BM_elem_attrs_copy(bm, bm, l_other, l); - l_other = l_other->next; - l = l->next; - BM_elem_attrs_copy(bm, bm, l_other, l); - } - } - else { - BM_elem_attrs_copy(bm, bm, l_other->f, f); - BM_elem_flag_disable(f, BM_ELEM_HIDDEN); /* possibly we copy from a hidden face */ - /* copy data */ - if (l_other->v == l->v) { - BM_elem_attrs_copy(bm, bm, l_other, l); - l_other = l_other->next; - l = l->next; - BM_elem_attrs_copy(bm, bm, l_other, l); - } - else { - l_other = l_other->next; - BM_elem_attrs_copy(bm, bm, l_other, l); - l_other = l_other->prev; - l = l->next; - BM_elem_attrs_copy(bm, bm, l_other, l); - } - } + /* copy data */ + if (l_src_a->v == l_dst_a->v) { + BM_elem_attrs_copy(bm, bm, l_src_a, l_dst_a); + BM_elem_attrs_copy(bm, bm, l_src_a, l_dst_b->next); + + BM_elem_attrs_copy(bm, bm, l_src_a->next, l_dst_a->next); + BM_elem_attrs_copy(bm, bm, l_src_a->next, l_dst_b); + } + else { + l_src_a = l_src_a->next; + BM_elem_attrs_copy(bm, bm, l_src_a, l_dst_a); + BM_elem_attrs_copy(bm, bm, l_src_a, l_dst_b->next); + + BM_elem_attrs_copy(bm, bm, l_src_a->prev, l_dst_a->next); + BM_elem_attrs_copy(bm, bm, l_src_a->prev, l_dst_b); } } From ca913254aa0706956980ec9dcaef79277a49ef3d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 14:06:59 +0000 Subject: [PATCH 101/156] fix for eternal loop in scanfill, The cause for this is bmesh faces which have zero area have their normals set to a fake value (Z-Up), this would break scanfill, possible fixes are to calculate the faces normal each time or tag as invalid but its easiest to avoid the eternal loop with an extra test. --- source/blender/blenlib/intern/scanfill.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index a57c2eb1ad3..6d7c3b0a19c 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -581,12 +581,12 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) * fix to #4544. */ if (eed->v1->f == 255) { v1 = eed->v1; - while ((eed->v1->f == 255) && (eed->v1->tmp.v != v1)) + while ((eed->v1->f == 255) && (eed->v1->tmp.v != v1) && (eed->v1 != eed->v1->tmp.v)) eed->v1 = eed->v1->tmp.v; } if (eed->v2->f == 255) { v2 = eed->v2; - while ((eed->v2->f == 255) && (eed->v2->tmp.v != v2)) + while ((eed->v2->f == 255) && (eed->v2->tmp.v != v2) && (eed->v2 != eed->v2->tmp.v)) eed->v2 = eed->v2->tmp.v; } if (eed->v1 != eed->v2) addedgetoscanlist(sf_ctx, eed, verts); @@ -876,8 +876,8 @@ int BLI_edgefill_ex(ScanFillContext *sf_ctx, const short do_quad_tri_speedup, co for (eve = sf_ctx->fillvertbase.first; eve; eve = eve->next) { if (LIKELY(!compare_v3v3(v_prev, eve->co, COMPLIMIT))) { add_newell_cross_v3_v3v3(n, v_prev, eve->co); + v_prev = eve->co; } - v_prev = eve->co; } } From abcaec0edcb6d0ffdc75d210a7d0f08282a3098e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 14:30:57 +0000 Subject: [PATCH 102/156] code cleanup: replace magic numbers in scanfill with defines, also use some vector functions where possible --- source/blender/blenlib/BLI_scanfill.h | 10 +-- source/blender/blenlib/intern/scanfill.c | 95 ++++++++++---------- source/blender/editors/mesh/editmesh_knife.c | 2 +- 3 files changed, 51 insertions(+), 56 deletions(-) diff --git a/source/blender/blenlib/BLI_scanfill.h b/source/blender/blenlib/BLI_scanfill.h index 5a5e55cc90a..26bcd50ef3e 100644 --- a/source/blender/blenlib/BLI_scanfill.h +++ b/source/blender/blenlib/BLI_scanfill.h @@ -51,7 +51,7 @@ typedef struct ScanFillContext * only to be used within loops, and not by one function at a time * free in the end, with argument '-1' */ - #define MEM_ELEM_BLOCKSIZE 16384 +#define MEM_ELEM_BLOCKSIZE 16384 struct mem_elements *melem__cur; int melem__offs; /* the current free address */ ListBase melem__lb; @@ -66,8 +66,8 @@ typedef struct ScanFillVert struct ScanFillVert *next, *prev; union { struct ScanFillVert *v; - void *p; - intptr_t l; + void *p; + intptr_t l; } tmp; float co[3]; /* vertex location */ float xy[2]; /* 2D copy of vertex location (using dominant axis) */ @@ -94,10 +94,6 @@ typedef struct ScanFillFace struct ScanFillVert *BLI_addfillvert(ScanFillContext *sf_ctx, const float vec[3]); struct ScanFillEdge *BLI_addfilledge(ScanFillContext *sf_ctx, struct ScanFillVert *v1, struct ScanFillVert *v2); -/* Optionally set ScanFillEdge f to this to mark original boundary edges. - * Only needed if there are internal diagonal edges passed to BLI_edgefill. */ -#define FILLBOUNDARY 1 - int BLI_begin_edgefill(ScanFillContext *sf_ctx); int BLI_edgefill(ScanFillContext *sf_ctx, const short do_quad_tri_speedup); int BLI_edgefill_ex(ScanFillContext *sf_ctx, const short do_quad_tri_speedup, diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index 6d7c3b0a19c..d2d451dc0ce 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -93,7 +93,17 @@ typedef struct ScanFillVertLink { /* local funcs */ -#define COMPLIMIT 0.00003f +#define SF_EPSILON 0.00003f + +#define SF_VERT_UNKNOWN 1 /* TODO, what is this for exactly? - need to document it! */ +#define SF_VERT_ZERO_LEN 255 + +/* Optionally set ScanFillEdge f to this to mark original boundary edges. + * Only needed if there are internal diagonal edges passed to BLI_edgefill. */ +#define SF_EDGE_BOUNDARY 1 +#define SF_EDGE_UNKNOWN 2 /* TODO, what is this for exactly? - need to document it! */ + + /* **** FUNCTIONS FOR QSORT *************************** */ @@ -199,9 +209,7 @@ ScanFillVert *BLI_addfillvert(ScanFillContext *sf_ctx, const float vec[3]) eve = mem_element_new(sf_ctx, sizeof(ScanFillVert)); BLI_addtail(&sf_ctx->fillvertbase, eve); - eve->co[0] = vec[0]; - eve->co[1] = vec[1]; - eve->co[2] = vec[2]; + copy_v3_v3(eve->co, vec); return eve; } @@ -319,10 +327,11 @@ static short addedgetoscanvert(ScanFillVertLink *sc, ScanFillEdge *eed) } else fac1 = (x - eed->v2->xy[0]) / fac1; - ed = sc->first; - while (ed) { + for (ed = sc->first; ed; ed = ed->next) { - if (ed->v2 == eed->v2) return 0; + if (ed->v2 == eed->v2) { + return 0; + } fac = ed->v2->xy[1] - y; if (fac == 0.0f) { @@ -332,9 +341,9 @@ static short addedgetoscanvert(ScanFillVertLink *sc, ScanFillEdge *eed) fac = (x - ed->v2->xy[0]) / fac; } - if (fac > fac1) break; - - ed = ed->next; + if (fac > fac1) { + break; + } } if (ed) BLI_insertlinkbefore((ListBase *)&(sc->first), ed, eed); else BLI_addtail((ListBase *)&(sc->first), eed); @@ -409,13 +418,9 @@ static void testvertexnearedge(ScanFillContext *sf_ctx) ScanFillVert *eve; ScanFillEdge *eed, *ed1; - float dist, vec1[2], vec2[2], vec3[2]; - eve = sf_ctx->fillvertbase.first; - while (eve) { + for (eve = sf_ctx->fillvertbase.first; eve; eve = eve->next) { if (eve->h == 1) { - vec3[0] = eve->xy[0]; - vec3[1] = eve->xy[1]; /* find the edge which has vertex eve */ ed1 = sf_ctx->filledgebase.first; while (ed1) { @@ -426,29 +431,25 @@ static void testvertexnearedge(ScanFillContext *sf_ctx) ed1->v1 = ed1->v2; ed1->v2 = eve; } - eed = sf_ctx->filledgebase.first; - while (eed) { + + for (eed = sf_ctx->filledgebase.first; eed; eed = eed->next) { if (eve != eed->v1 && eve != eed->v2 && eve->poly_nr == eed->poly_nr) { - if (compare_v3v3(eve->co, eed->v1->co, COMPLIMIT)) { + if (compare_v3v3(eve->co, eed->v1->co, SF_EPSILON)) { ed1->v2 = eed->v1; eed->v1->h++; eve->h = 0; break; } - else if (compare_v3v3(eve->co, eed->v2->co, COMPLIMIT)) { + else if (compare_v3v3(eve->co, eed->v2->co, SF_EPSILON)) { ed1->v2 = eed->v2; eed->v2->h++; eve->h = 0; break; } else { - vec1[0] = eed->v1->xy[0]; - vec1[1] = eed->v1->xy[1]; - vec2[0] = eed->v2->xy[0]; - vec2[1] = eed->v2->xy[1]; if (boundinsideEV(eed, eve)) { - dist = dist_to_line_v2(vec1, vec2, vec3); - if (dist < COMPLIMIT) { + const float dist = dist_to_line_v2(eed->v1->xy, eed->v2->xy, eve->xy); + if (dist < SF_EPSILON) { /* new edge */ ed1 = BLI_addfilledge(sf_ctx, eed->v1, eve); @@ -462,10 +463,8 @@ static void testvertexnearedge(ScanFillContext *sf_ctx) } } } - eed = eed->next; } } - eve = eve->next; } } @@ -530,19 +529,19 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) while (eed) { if (eed->v1->xy[0] == eed->v2->xy[0]) { if (eed->v1->xy[1] == eed->v2->xy[1]) { - if (eed->v1->f == 255 && eed->v2->f != 255) { - eed->v2->f = 255; + if (eed->v1->f == SF_VERT_ZERO_LEN && eed->v2->f != SF_VERT_ZERO_LEN) { + eed->v2->f = SF_VERT_ZERO_LEN; eed->v2->tmp.v = eed->v1->tmp.v; } - else if (eed->v2->f == 255 && eed->v1->f != 255) { - eed->v1->f = 255; + else if (eed->v2->f == SF_VERT_ZERO_LEN && eed->v1->f != SF_VERT_ZERO_LEN) { + eed->v1->f = SF_VERT_ZERO_LEN; eed->v1->tmp.v = eed->v2->tmp.v; } - else if (eed->v2->f == 255 && eed->v1->f == 255) { + else if (eed->v2->f == SF_VERT_ZERO_LEN && eed->v1->f == SF_VERT_ZERO_LEN) { eed->v1->tmp.v = eed->v2->tmp.v; } else { - eed->v2->f = 255; + eed->v2->f = SF_VERT_ZERO_LEN; eed->v2->tmp.v = eed->v1; } } @@ -558,7 +557,7 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) verts = 0; while (eve) { if (eve->poly_nr == nr) { - if (eve->f != 255) { + if (eve->f != SF_VERT_ZERO_LEN) { verts++; eve->f = 0; /* flag for connectedges later on */ sc->v1 = eve; @@ -579,14 +578,14 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) * fix trunk bug #4544, so if that comes back, this code * may need some work, or there will have to be a better * fix to #4544. */ - if (eed->v1->f == 255) { + if (eed->v1->f == SF_VERT_ZERO_LEN) { v1 = eed->v1; - while ((eed->v1->f == 255) && (eed->v1->tmp.v != v1) && (eed->v1 != eed->v1->tmp.v)) + while ((eed->v1->f == SF_VERT_ZERO_LEN) && (eed->v1->tmp.v != v1) && (eed->v1 != eed->v1->tmp.v)) eed->v1 = eed->v1->tmp.v; } - if (eed->v2->f == 255) { + if (eed->v2->f == SF_VERT_ZERO_LEN) { v2 = eed->v2; - while ((eed->v2->f == 255) && (eed->v2->tmp.v != v2) && (eed->v2 != eed->v2->tmp.v)) + while ((eed->v2->f == SF_VERT_ZERO_LEN) && (eed->v2->tmp.v != v2) && (eed->v2 != eed->v2->tmp.v)) eed->v2 = eed->v2->tmp.v; } if (eed->v1 != eed->v2) addedgetoscanlist(sf_ctx, eed, verts); @@ -627,7 +626,7 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) if (ed1->v1->h > 1) ed1->v1->h--; if (ed1->v2->h > 1) ed1->v2->h--; } - else ed1->v2->f = 1; + else ed1->v2->f = SF_VERT_UNKNOWN; ed1 = nexted; } @@ -685,8 +684,8 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) ed3 = BLI_addfilledge(sf_ctx, v2, sc1->v1); BLI_remlink(&sf_ctx->filledgebase, ed3); BLI_insertlinkbefore((ListBase *)&(sc->first), ed2, ed3); - ed3->v2->f = 1; - ed3->f = 2; + ed3->v2->f = SF_VERT_UNKNOWN; + ed3->f = SF_EDGE_UNKNOWN; ed3->v1->h++; ed3->v2->h++; } @@ -701,7 +700,7 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) ed1->v1->h--; ed1->v2->h--; /* ed2 can be removed when it's a boundary edge */ - if ((ed2->f == 0 && twoconnected) || (ed2->f == FILLBOUNDARY)) { + if ((ed2->f == 0 && twoconnected) || (ed2->f == SF_EDGE_BOUNDARY)) { BLI_remlink((ListBase *)&(sc->first), ed2); BLI_addtail(&sf_ctx->filledgebase, ed2); ed2->v2->f = 0; @@ -712,7 +711,7 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) /* new edge */ ed3 = BLI_addfilledge(sf_ctx, v1, v3); BLI_remlink(&sf_ctx->filledgebase, ed3); - ed3->f = 2; + ed3->f = SF_EDGE_UNKNOWN; ed3->v1->h++; ed3->v2->h++; @@ -727,7 +726,7 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) ed3 = sc1->first; while (ed3) { if ( (ed3->v1 == v1 && ed3->v2 == v3) || (ed3->v1 == v3 && ed3->v2 == v1) ) { - if (twoconnected || ed3->f == FILLBOUNDARY) { + if (twoconnected || ed3->f == SF_EDGE_BOUNDARY) { BLI_remlink((ListBase *)&(sc1->first), ed3); BLI_addtail(&sf_ctx->filledgebase, ed3); ed3->v1->h--; @@ -838,15 +837,15 @@ int BLI_edgefill_ex(ScanFillContext *sf_ctx, const short do_quad_tri_speedup, co eed = sf_ctx->filledgebase.first; while (eed) { eed->poly_nr = 0; - eed->v1->f = 1; - eed->v2->f = 1; + eed->v1->f = SF_VERT_UNKNOWN; + eed->v2->f = SF_VERT_UNKNOWN; eed = eed->next; } eve = sf_ctx->fillvertbase.first; while (eve) { - if (eve->f & 1) { + if (eve->f & SF_VERT_UNKNOWN) { ok = 1; break; } @@ -874,7 +873,7 @@ int BLI_edgefill_ex(ScanFillContext *sf_ctx, const short do_quad_tri_speedup, co v_prev = eve->co; for (eve = sf_ctx->fillvertbase.first; eve; eve = eve->next) { - if (LIKELY(!compare_v3v3(v_prev, eve->co, COMPLIMIT))) { + if (LIKELY(!compare_v3v3(v_prev, eve->co, SF_EPSILON))) { add_newell_cross_v3_v3v3(n, v_prev, eve->co); v_prev = eve->co; } diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 536a37b679a..c4af3046cbc 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -1862,7 +1862,7 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) ScanFillEdge *eed; eed = BLI_addfilledge(&sf_ctx, lasteve, eve); if (entry->kfe->oe) - eed->f = FILLBOUNDARY; /* mark as original boundary edge */ + eed->f = SF_EDGE_BOUNDARY; /* mark as original boundary edge */ BMO_elem_flag_disable(bm, entry->kfe->e->v1, DEL); BMO_elem_flag_disable(bm, entry->kfe->e->v2, DEL); From d7542be6ac455f48458f8d3f64bcea41dd22f070 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 14:36:56 +0000 Subject: [PATCH 103/156] code cleanup: more minor changes to scanfill --- source/blender/blenlib/intern/scanfill.c | 40 ++++++++++++------------ 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index d2d451dc0ce..20dbf29f6bc 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -405,7 +405,9 @@ static short boundinsideEV(ScanFillEdge *eed, ScanFillVert *eve) miny = eed->v2->xy[1]; maxy = eed->v1->xy[1]; } - if (eve->xy[1] >= miny && eve->xy[1] <= maxy) return 1; + if (eve->xy[1] >= miny && eve->xy[1] <= maxy) { + return 1; + } } return 0; } @@ -503,7 +505,6 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) ScanFillVertLink *sc = NULL, *sc1; ScanFillVert *eve, *v1, *v2, *v3; ScanFillEdge *eed, *nexted, *ed1, *ed2, *ed3; - float miny = 0.0; int a, b, verts, maxface, totface; short nr, test, twoconnected = 0; @@ -527,23 +528,21 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) /* STEP 0: remove zero sized edges */ eed = sf_ctx->filledgebase.first; while (eed) { - if (eed->v1->xy[0] == eed->v2->xy[0]) { - if (eed->v1->xy[1] == eed->v2->xy[1]) { - if (eed->v1->f == SF_VERT_ZERO_LEN && eed->v2->f != SF_VERT_ZERO_LEN) { - eed->v2->f = SF_VERT_ZERO_LEN; - eed->v2->tmp.v = eed->v1->tmp.v; - } - else if (eed->v2->f == SF_VERT_ZERO_LEN && eed->v1->f != SF_VERT_ZERO_LEN) { - eed->v1->f = SF_VERT_ZERO_LEN; - eed->v1->tmp.v = eed->v2->tmp.v; - } - else if (eed->v2->f == SF_VERT_ZERO_LEN && eed->v1->f == SF_VERT_ZERO_LEN) { - eed->v1->tmp.v = eed->v2->tmp.v; - } - else { - eed->v2->f = SF_VERT_ZERO_LEN; - eed->v2->tmp.v = eed->v1; - } + if (equals_v2v2(eed->v1->xy, eed->v2->xy)) { + if (eed->v1->f == SF_VERT_ZERO_LEN && eed->v2->f != SF_VERT_ZERO_LEN) { + eed->v2->f = SF_VERT_ZERO_LEN; + eed->v2->tmp.v = eed->v1->tmp.v; + } + else if (eed->v2->f == SF_VERT_ZERO_LEN && eed->v1->f != SF_VERT_ZERO_LEN) { + eed->v1->f = SF_VERT_ZERO_LEN; + eed->v1->tmp.v = eed->v2->tmp.v; + } + else if (eed->v2->f == SF_VERT_ZERO_LEN && eed->v1->f == SF_VERT_ZERO_LEN) { + eed->v1->tmp.v = eed->v2->tmp.v; + } + else { + eed->v2->f = SF_VERT_ZERO_LEN; + eed->v2->tmp.v = eed->v1; } } eed = eed->next; @@ -651,13 +650,14 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) } else { /* test rest of vertices */ + float miny; v1 = ed1->v2; v2 = ed1->v1; v3 = ed2->v2; /* this happens with a serial of overlapping edges */ if (v1 == v2 || v2 == v3) break; /* printf("test verts %x %x %x\n",v1,v2,v3); */ - miny = ( (v1->xy[1]) < (v3->xy[1]) ? (v1->xy[1]) : (v3->xy[1]) ); + miny = minf(v1->xy[1], v3->xy[1]); /* miny= MIN2(v1->xy[1],v3->xy[1]); */ sc1 = sc + 1; test = 0; From 40e3ae64787b140384b13797d8f8504861c6ef9f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 15:09:13 +0000 Subject: [PATCH 104/156] correct ifdef'd scanfill code, incase someone wants to test. --- source/blender/editors/mesh/editmesh_knife.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index c4af3046cbc..1856ed3b255 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -1680,7 +1680,7 @@ static void remerge_faces(knifetool_opdata *kcd) if (BLI_array_count(faces) > 0) { idx = BM_elem_index_get(faces[0]); - f2 = BM_faces_join(bm, faces, BLI_array_count(faces)); + f2 = BM_faces_join(bm, faces, BLI_array_count(faces), TRUE); if (f2) { BMO_elem_flag_enable(bm, f2, FACE_NEW); BM_elem_index_set(f2, idx); /* set_dirty! *//* BMESH_TODO, check if this is valid or not */ @@ -1700,6 +1700,7 @@ static void remerge_faces(knifetool_opdata *kcd) /* use edgenet to fill faces. this is a bit annoying and convoluted.*/ static void knifenet_fill_faces(knifetool_opdata *kcd) { + ScanFillContext sf_ctx; BMesh *bm = kcd->em->bm; BMIter bmiter; BLI_mempool_iter iter; @@ -1869,15 +1870,15 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) } else { if (lasteve->poly_nr < 2) - BLI_remlink(&fillvertbase, lasteve); + BLI_remlink(&sf_ctx.fillvertbase, lasteve); if (eve->poly_nr < 2) - BLI_remlink(&fillvertbase, eve); + BLI_remlink(&sf_ctx.fillvertbase, eve); } } BLI_edgefill(&sf_ctx, FALSE); - for (efa = fillfacebase.first; efa; efa = efa->next) { + for (efa = sf_ctx.fillfacebase.first; efa; efa = efa->next) { BMVert *v1 = efa->v3->tmp.p, *v2 = efa->v2->tmp.p, *v3 = efa->v1->tmp.p; BMFace *f2; BMLoop *l_iter; @@ -1908,7 +1909,7 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) } } - BLI_end_edgefill(); + BLI_end_edgefill(&sf_ctx); BLI_smallhash_release(hash); } bm->elem_index_dirty |= BM_FACE; From 486bf16af55eeddebc68339650d3c31b203b4644 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 16:27:11 +0000 Subject: [PATCH 105/156] bmesh knife tool: - only cut selected geometry. - exclude hidden geometry from snapping. --- source/blender/editors/mesh/editmesh_bvh.c | 23 ++++++++++- source/blender/editors/mesh/editmesh_bvh.h | 9 ++-- source/blender/editors/mesh/editmesh_knife.c | 43 ++++++++++++++++++-- 3 files changed, 68 insertions(+), 7 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_bvh.c b/source/blender/editors/mesh/editmesh_bvh.c index c1b694d5e2d..4b21b6b2a8e 100644 --- a/source/blender/editors/mesh/editmesh_bvh.c +++ b/source/blender/editors/mesh/editmesh_bvh.c @@ -90,6 +90,7 @@ BMBVHTree *BMBVH_NewBVH(BMEditMesh *em, int flag, Scene *scene, Object *obedit) SmallHash shash; float cos[3][3], (*cagecos)[3] = NULL; int i; + int tottri; /* when initializing cage verts, we only want the first cage coordinate for each vertex, * so that e.g. mirror or array use original vertex coordinates and not mirrored or duplicate */ @@ -104,7 +105,19 @@ BMBVHTree *BMBVH_NewBVH(BMEditMesh *em, int flag, Scene *scene, Object *obedit) tree->epsilon = FLT_EPSILON * 2.0f; tree->flag = flag; - tree->tree = BLI_bvhtree_new(em->tottri, tree->epsilon, 8, 8); + if (flag & BMBVH_RESPECT_HIDDEN) { + tottri = 0; + for (i = 0; i < em->tottri; i++) { + if (!BM_elem_flag_test(em->looptris[i][0]->f, BM_ELEM_HIDDEN)) { + tottri++; + } + } + } + else { + tottri = em->tottri; + } + + tree->tree = BLI_bvhtree_new(tottri, tree->epsilon, 8, 8); if (flag & BMBVH_USE_CAGE) { BMIter iter; @@ -132,6 +145,14 @@ BMBVHTree *BMBVH_NewBVH(BMEditMesh *em, int flag, Scene *scene, Object *obedit) tree->cagecos = cagecos; for (i = 0; i < em->tottri; i++) { + + if (flag & BMBVH_RESPECT_HIDDEN) { + /* note, the arrays wont allign now! take care */ + if (BM_elem_flag_test(em->looptris[i][0]->f, BM_ELEM_HIDDEN)) { + continue; + } + } + if (flag & BMBVH_USE_CAGE) { copy_v3_v3(cos[0], cagecos[BM_elem_index_get(em->looptris[i][0]->v)]); copy_v3_v3(cos[1], cagecos[BM_elem_index_get(em->looptris[i][1]->v)]); diff --git a/source/blender/editors/mesh/editmesh_bvh.h b/source/blender/editors/mesh/editmesh_bvh.h index c8baa804205..2b0a7cc02dd 100644 --- a/source/blender/editors/mesh/editmesh_bvh.h +++ b/source/blender/editors/mesh/editmesh_bvh.h @@ -60,8 +60,11 @@ int BMBVH_EdgeVisible(struct BMBVHTree *tree, struct BMEdge *e, /*find a vert closest to co in a sphere of radius maxdist*/ struct BMVert *BMBVH_FindClosestVert(struct BMBVHTree *tree, float *co, float maxdist); -/*BMBVH_NewBVH flag parameter*/ -#define BMBVH_USE_CAGE 1 /*project geometry onto modifier cage */ -#define BMBVH_RETURN_ORIG 2 /*use with BMBVH_USE_CAGE, returns hits in relation to original geometry*/ +/* BMBVH_NewBVH flag parameter */ +enum { + BMBVH_USE_CAGE = 1, /* project geometry onto modifier cage */ + BMBVH_RETURN_ORIG = 2, /* use with BMBVH_USE_CAGE, returns hits in relation to original geometry */ + BMBVH_RESPECT_HIDDEN = 4 +}; #endif /* __EDITBMESH_BVH_H__ */ diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 1856ed3b255..94350662008 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -67,6 +67,8 @@ #define KMAXDIST 10 /* max mouse distance from edge before not detecting it */ +#define USE_SELECTED_ONLY + /* knifetool operator */ typedef struct KnifeVert { BMVert *v; /* non-NULL if this is an original vert */ @@ -713,6 +715,15 @@ static void knife_add_cut(knifetool_opdata *kcd) if (len_v3v3(kcd->cur.cage, lh->realhit) < FLT_EPSILON * 80) continue; +#if 0 /* not working perfect, ignore for now */ +#ifdef USE_SELECTED_ONLY + /* don't mess up logic by skipping too early */ + if (lh->kfe->e && !BM_elem_flag_test(lh->kfe->e, BM_ELEM_SELECT)) { + continue; + } +#endif +#endif + if (kcd->prev.is_space) { kcd->prev.is_space = 0; copy_v3_v3(kcd->prev.co, lh->hit); @@ -923,6 +934,13 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) lh = kcd->linehits; for (i = 0; i < kcd->totlinehit; i++, lh++) { float sv1[3], sv2[3]; + int do_draw = TRUE; + +#ifdef USE_SELECTED_ONLY + if (!BM_elem_flag_test(lh->f, BM_ELEM_SELECT)) { + do_draw = FALSE; + } +#endif knife_project_v3(kcd, lh->kfe->v1->cageco, sv1); knife_project_v3(kcd, lh->kfe->v2->cageco, sv2); @@ -930,12 +948,12 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) if (len_v2v2(lh->schit, sv1) < kcd->vthresh / 4.0f) { copy_v3_v3(lh->cagehit, lh->kfe->v1->cageco); - glVertex3fv(lh->cagehit); + if (do_draw) glVertex3fv(lh->cagehit); lh->v = lh->kfe->v1; } else if (len_v2v2(lh->schit, sv2) < kcd->vthresh / 4.0f) { copy_v3_v3(lh->cagehit, lh->kfe->v2->cageco); - glVertex3fv(lh->cagehit); + if (do_draw) glVertex3fv(lh->cagehit); lh->v = lh->kfe->v2; } } @@ -947,6 +965,13 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) glBegin(GL_POINTS); lh = kcd->linehits; for (i = 0; i < kcd->totlinehit; i++, lh++) { + +#ifdef USE_SELECTED_ONLY + if (!BM_elem_flag_test(lh->f, BM_ELEM_SELECT)) { + continue; + } +#endif + glVertex3fv(lh->cagehit); } glEnd(); @@ -2588,6 +2613,12 @@ static void knife_make_cuts(knifetool_opdata *kcd) for (lst = BLI_smallhash_iternew(ehash, &hiter, (uintptr_t *)&e); lst; lst = BLI_smallhash_iternext(&hiter, (uintptr_t *)&e)) { +#ifdef USE_SELECTED_ONLY + if (!BM_elem_flag_test(e, BM_ELEM_SELECT)) { + continue; + } +#endif + sort_by_frac_along(lst, e); for (ref = lst->first; ref; ref = ref->next) { kfv = ref->ref; @@ -2600,6 +2631,12 @@ static void knife_make_cuts(knifetool_opdata *kcd) for (lst = BLI_smallhash_iternew(fhash, &hiter, (uintptr_t *)&f); lst; lst = BLI_smallhash_iternext(&hiter, (uintptr_t *)&f)) { +#ifdef USE_SELECTED_ONLY + if (!BM_elem_flag_test(f, BM_ELEM_SELECT)) { + continue; + } +#endif + knife_make_face_cuts(kcd, f, lst); } @@ -2733,7 +2770,7 @@ static int knifetool_init(bContext *C, wmOperator *op, int UNUSED(do_cut)) cage->foreachMappedVert(cage, cage_mapped_verts_callback, data); BLI_smallhash_release(&shash); - kcd->bmbvh = BMBVH_NewBVH(kcd->em, BMBVH_USE_CAGE | BMBVH_RETURN_ORIG, scene, obedit); + kcd->bmbvh = BMBVH_NewBVH(kcd->em, BMBVH_USE_CAGE | BMBVH_RETURN_ORIG | BMBVH_RESPECT_HIDDEN, scene, obedit); kcd->arena = BLI_memarena_new(1 << 15, "knife"); kcd->vthresh = KMAXDIST - 1; kcd->ethresh = KMAXDIST; From d4bc938676cc2cf8f91d0d79b6827a22bf09d01c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 16:55:15 +0000 Subject: [PATCH 106/156] bmesh knife tool: fix for bug where not moving the mouse after pressing K and clicking would start the first point at the bottom left of the view. --- source/blender/editors/mesh/editmesh_knife.c | 21 ++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 94350662008..da8085d3be0 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -2736,6 +2736,17 @@ static void cage_mapped_verts_callback(void *userData, int index, const float co } } +static void knifetool_update_mval(knifetool_opdata *kcd, int mval[2]) +{ + knife_recalc_projmat(kcd); + kcd->vc.mval[0] = mval[0]; + kcd->vc.mval[1] = mval[1]; + + if (knife_update_active(kcd)) { + ED_region_tag_redraw(kcd->ar); + } +} + /* called when modal loop selection gets set up... */ static int knifetool_init(bContext *C, wmOperator *op, int UNUSED(do_cut)) { @@ -2818,8 +2829,7 @@ static int knifetool_invoke(bContext *C, wmOperator *op, wmEvent *evt) WM_event_add_modal_handler(C, op); kcd = op->customdata; - kcd->vc.mval[0] = evt->mval[0]; - kcd->vc.mval[1] = evt->mval[1]; + knifetool_update_mval(kcd, evt->mval); ED_area_headerprint(CTX_wm_area(C), "LMB: define cut lines, Return or RMB: confirm, E: new cut, Ctrl: midpoint snap, " @@ -2997,12 +3007,7 @@ static int knifetool_modal(bContext *C, wmOperator *op, wmEvent *event) case MOUSEMOVE: /* mouse moved somewhere to select another loop */ if (kcd->mode != MODE_PANNING) { - knife_recalc_projmat(kcd); - kcd->vc.mval[0] = event->mval[0]; - kcd->vc.mval[1] = event->mval[1]; - - if (knife_update_active(kcd)) - ED_region_tag_redraw(kcd->ar); + knifetool_update_mval(kcd, event->mval); } break; From 3fdb0e957526323c0583926ce98fff509913a0c9 Mon Sep 17 00:00:00 2001 From: Antony Riakiotakis Date: Wed, 18 Apr 2012 17:50:30 +0000 Subject: [PATCH 107/156] Fix: Transforming NLA strips leaks memory. --- source/blender/editors/transform/transform_conversions.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 2cf76158df8..a6f26f4a5d1 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -2662,6 +2662,7 @@ static void createTransNlaData(bContext *C, TransInfo *t) td= t->data; t->customData= MEM_callocN(t->total*sizeof(TransDataNla), "TransDataNla (NLA Editor)"); tdn= t->customData; + t->flag |= T_FREE_CUSTOMDATA; /* loop 2: build transdata array */ for (ale= anim_data.first; ale; ale= ale->next) { From 446d5ad970224f07895c6de6b98cc86be2f57ad6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 18:20:20 +0000 Subject: [PATCH 108/156] bmesh knife tool: cut through no longer initializes from view setting to limit selection to front faces. instead this is a toggle (Zkey) which is remembered between executions. --- source/blender/editors/mesh/editmesh_knife.c | 23 ++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index da8085d3be0..38429b46469 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -61,6 +61,9 @@ #include "DNA_object_types.h" #include "BKE_tessmesh.h" +#include "RNA_access.h" +#include "RNA_define.h" + #include "mesh_intern.h" /* this code here is kindof messy. . .I might need to eventually rework it - joeedh */ @@ -2696,6 +2699,10 @@ static void knifetool_exit(bContext *UNUSED(C), wmOperator *op) if (!kcd) return; + /* remember setting for later */ + RNA_boolean_set(op->ptr, "use_occlude_geometry", !kcd->cut_through); + WM_operator_last_properties_store(op); /* XXX - this is clunky but modal ops wont do this automatic */ + /* deactivate the extra drawing stuff in 3D-View */ ED_region_draw_cb_exit(kcd->ar->type, kcd->draw_handle); @@ -2801,7 +2808,7 @@ static int knifetool_init(bContext *C, wmOperator *op, int UNUSED(do_cut)) kcd->kedgefacemap = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "knife origvertmap"); /* cut all the way through the mesh if use_occlude_geometry button not pushed */ - kcd->cut_through = !(kcd->vc.v3d->flag & V3D_ZBUF_SELECT); + kcd->cut_through = !RNA_boolean_get(op->ptr, "use_occlude_geometry"); knife_pos_data_clear(&kcd->cur); knife_pos_data_clear(&kcd->prev); @@ -2833,7 +2840,7 @@ static int knifetool_invoke(bContext *C, wmOperator *op, wmEvent *evt) ED_area_headerprint(CTX_wm_area(C), "LMB: define cut lines, Return or RMB: confirm, E: new cut, Ctrl: midpoint snap, " - "Shift: ignore snap, C: angle constrain, Turn off limit selection to visibile: cut through"); + "Shift: ignore snap, C: angle constrain, Z: cut through"); return OPERATOR_RUNNING_MODAL; } @@ -2847,7 +2854,8 @@ enum { KNF_MODEL_IGNORE_SNAP_ON, KNF_MODEL_IGNORE_SNAP_OFF, KNF_MODAL_ADD_CUT, - KNF_MODAL_ANGLE_SNAP_TOGGLE + KNF_MODAL_ANGLE_SNAP_TOGGLE, + KNF_MODAL_CUT_THROUGH_TOGGLE }; wmKeyMap *knifetool_modal_keymap(wmKeyConfig *keyconf) @@ -2860,6 +2868,7 @@ wmKeyMap *knifetool_modal_keymap(wmKeyConfig *keyconf) {KNF_MODEL_IGNORE_SNAP_ON, "IGNORE_SNAP_ON", 0, "Ignore Snapping On", ""}, {KNF_MODEL_IGNORE_SNAP_OFF, "IGNORE_SNAP_OFF", 0, "Ignore Snapping Off", ""}, {KNF_MODAL_ANGLE_SNAP_TOGGLE, "ANGLE_SNAP_TOGGLE", 0, "Toggle Angle Snapping", ""}, + {KNF_MODAL_CUT_THROUGH_TOGGLE, "CUT_THROUGH_TOGGLE", 0, "Toggle Cut Through", ""}, {KNF_MODAL_NEW_CUT, "NEW_CUT", 0, "End Current Cut", ""}, {KNF_MODAL_ADD_CUT, "ADD_CUT", 0, "Add Cut", ""}, {0, NULL, 0, NULL, NULL}}; @@ -2875,7 +2884,7 @@ wmKeyMap *knifetool_modal_keymap(wmKeyConfig *keyconf) /* items for modal map */ WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, KNF_MODAL_CANCEL); WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, KM_ANY, 0, KNF_MODAL_ADD_CUT); - WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_PRESS, KM_ANY, 0, KNF_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_PRESS, KM_ANY, 0, KNF_MODAL_CANCEL); WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, KNF_MODAL_CONFIRM); WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, KM_ANY, 0, KNF_MODAL_CONFIRM); WM_modalkeymap_add_item(keymap, EKEY, KM_PRESS, 0, 0, KNF_MODAL_NEW_CUT); @@ -2891,6 +2900,7 @@ wmKeyMap *knifetool_modal_keymap(wmKeyConfig *keyconf) WM_modalkeymap_add_item(keymap, RIGHTSHIFTKEY, KM_RELEASE, KM_ANY, 0, KNF_MODEL_IGNORE_SNAP_OFF); WM_modalkeymap_add_item(keymap, CKEY, KM_PRESS, 0, 0, KNF_MODAL_ANGLE_SNAP_TOGGLE); + WM_modalkeymap_add_item(keymap, ZKEY, KM_PRESS, 0, 0, KNF_MODAL_CUT_THROUGH_TOGGLE); WM_modalkeymap_assign(keymap, "MESH_OT_knifetool"); @@ -2963,6 +2973,9 @@ static int knifetool_modal(bContext *C, wmOperator *op, wmEvent *event) case KNF_MODAL_ANGLE_SNAP_TOGGLE: kcd->angle_snapping = !kcd->angle_snapping; break; + case KNF_MODAL_CUT_THROUGH_TOGGLE: + kcd->cut_through = !kcd->cut_through; + break; case KNF_MODAL_NEW_CUT: ED_region_tag_redraw(kcd->ar); knife_finish_cut(kcd); @@ -3033,4 +3046,6 @@ void MESH_OT_knifetool(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; + + RNA_def_boolean(ot->srna, "use_occlude_geometry", 0, "Occlude Geometry", "Only cut the front most geometry"); } From 18a6282e599bbcf2e633cfbfee4d201234e51a7c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Apr 2012 19:05:28 +0000 Subject: [PATCH 109/156] improve recent commit to copy loop data on extrude - in some cases the is only a face on the new edge, so check for this as a source to copy from too. - one of the asserts wasnt correct, if there are no adjacent faces found just return. --- source/blender/bmesh/operators/bmo_extrude.c | 60 ++++++++++++-------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/source/blender/bmesh/operators/bmo_extrude.c b/source/blender/bmesh/operators/bmo_extrude.c index b716f92d31c..ef0833120c5 100644 --- a/source/blender/bmesh/operators/bmo_extrude.c +++ b/source/blender/bmesh/operators/bmo_extrude.c @@ -118,39 +118,53 @@ void bmo_extrude_face_indiv_exec(BMesh *bm, BMOperator *op) BMO_slot_buffer_from_enabled_flag(bm, op, "faceout", BM_FACE, EXT_KEEP); } -static void bm_extrude_copy_face_loop_attributes(BMesh *bm, BMFace *f, BMEdge *e, BMEdge *newedge) +/** + * \brief Copy the loop pair from an adjacent face to both sides of this quad. + * + * The face is assumed to be a quad, created by extruding. + * This function won't crash if its not but won't work right either. + * \a e_b is the new edge. + * + * \note this function could be exposed as an api call if other areas need it, + * so far only extrude does. + */ +static void bm_extrude_copy_face_loop_attributes(BMesh *bm, BMFace *f, BMEdge *e_a, BMEdge *e_b) { /* 'a' is the starting edge #e, 'b' is the final edge #newedge */ - BMLoop *l_dst_a = BM_face_edge_share_loop(f, e); - BMLoop *l_dst_b = newedge->l; /* will only ever be one loop */ - BMLoop *l_src_a = l_dst_a->radial_next; + BMLoop *l_dst_a = BM_face_edge_share_loop(f, e_a); + BMLoop *l_dst_b = BM_face_edge_share_loop(f, e_b); + /* we could only have a face on one-or the other edges, + * chech if either side of the face has an adjacent face */ + BMLoop *l_src_1; + BMLoop *l_src_2; + /* there is no l_src_b */ /* sanity */ - BLI_assert(l_src_a->f != l_dst_a->f); BLI_assert(l_dst_a->f == l_dst_b->f); - - BM_elem_attrs_copy(bm, bm, l_src_a->f, l_dst_a->f); - BM_elem_flag_disable(f, BM_ELEM_HIDDEN); /* possibly we copy from a hidden face */ - - - /* copy data */ - if (l_src_a->v == l_dst_a->v) { - BM_elem_attrs_copy(bm, bm, l_src_a, l_dst_a); - BM_elem_attrs_copy(bm, bm, l_src_a, l_dst_b->next); - - BM_elem_attrs_copy(bm, bm, l_src_a->next, l_dst_a->next); - BM_elem_attrs_copy(bm, bm, l_src_a->next, l_dst_b); + if (l_dst_a != l_dst_a->radial_next) { + l_src_1 = l_dst_a->radial_next; + l_src_2 = l_src_1->next; + } + else if (l_dst_b != l_dst_b->radial_next) { + l_src_2 = l_dst_b->radial_next; + l_src_1 = l_src_2->next; } else { - l_src_a = l_src_a->next; - BM_elem_attrs_copy(bm, bm, l_src_a, l_dst_a); - BM_elem_attrs_copy(bm, bm, l_src_a, l_dst_b->next); - - BM_elem_attrs_copy(bm, bm, l_src_a->prev, l_dst_a->next); - BM_elem_attrs_copy(bm, bm, l_src_a->prev, l_dst_b); + /* no new faces on either edge, nothing to copy from */ + return; } + + BM_elem_attrs_copy(bm, bm, l_src_1->f, l_dst_a->f); + BM_elem_flag_disable(f, BM_ELEM_HIDDEN); /* possibly we copy from a hidden face */ + + /* copy data */ + BM_elem_attrs_copy(bm, bm, l_src_2, l_dst_a); + BM_elem_attrs_copy(bm, bm, l_src_2, l_dst_b->next); + + BM_elem_attrs_copy(bm, bm, l_src_1, l_dst_a->next); + BM_elem_attrs_copy(bm, bm, l_src_1, l_dst_b); } void bmo_extrude_edge_only_exec(BMesh *bm, BMOperator *op) From aeccaa6f32ac724b8b9bcfab6554dadd644684ac Mon Sep 17 00:00:00 2001 From: Antony Riakiotakis Date: Wed, 18 Apr 2012 19:59:27 +0000 Subject: [PATCH 110/156] knife tool: Add state indicator in header for tool options --- source/blender/editors/mesh/editmesh_knife.c | 26 +++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 38429b46469..39b214289dc 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -188,6 +188,22 @@ static ListBase *knife_get_face_kedges(knifetool_opdata *kcd, BMFace *f); static void knife_input_ray_cast(knifetool_opdata *kcd, const int mval_i[2], float r_origin[3], float r_ray[3]); +static void knife_update_header(bContext *C, knifetool_opdata *kcd) +{ + #define HEADER_LENGTH 170 + char header[HEADER_LENGTH]; + + BLI_snprintf(header, HEADER_LENGTH, "LMB: define cut lines, Return or RMB: confirm, E: new cut, Ctrl: midpoint snap (%s), " + "Shift: ignore snap (%s), C: angle constrain (%s), Z: cut through (%s)", + kcd->snap_midpoints? "On" : "Off", + kcd->ignore_edge_snapping? "On" : "Off", + kcd->angle_snapping? "On" : "Off", + kcd->cut_through? "On" : "Off"); + + ED_area_headerprint(CTX_wm_area(C), header); +} + + static void knife_project_v3(knifetool_opdata *kcd, const float co[3], float sco[3]) { ED_view3d_project_float_v3(kcd->ar, co, sco, kcd->projmat); @@ -2838,9 +2854,7 @@ static int knifetool_invoke(bContext *C, wmOperator *op, wmEvent *evt) kcd = op->customdata; knifetool_update_mval(kcd, evt->mval); - ED_area_headerprint(CTX_wm_area(C), - "LMB: define cut lines, Return or RMB: confirm, E: new cut, Ctrl: midpoint snap, " - "Shift: ignore snap, C: angle constrain, Z: cut through"); + knife_update_header(C, kcd); return OPERATOR_RUNNING_MODAL; } @@ -2953,6 +2967,7 @@ static int knifetool_modal(bContext *C, wmOperator *op, wmEvent *event) knife_recalc_projmat(kcd); knife_update_active(kcd); + knife_update_header(C, kcd); ED_region_tag_redraw(kcd->ar); break; case KNF_MODAL_MIDPOINT_OFF: @@ -2960,21 +2975,26 @@ static int knifetool_modal(bContext *C, wmOperator *op, wmEvent *event) knife_recalc_projmat(kcd); knife_update_active(kcd); + knife_update_header(C, kcd); ED_region_tag_redraw(kcd->ar); break; case KNF_MODEL_IGNORE_SNAP_ON: ED_region_tag_redraw(kcd->ar); kcd->ignore_vert_snapping = kcd->ignore_edge_snapping = 1; + knife_update_header(C, kcd); break; case KNF_MODEL_IGNORE_SNAP_OFF: ED_region_tag_redraw(kcd->ar); kcd->ignore_vert_snapping = kcd->ignore_edge_snapping = 0; + knife_update_header(C, kcd); break; case KNF_MODAL_ANGLE_SNAP_TOGGLE: kcd->angle_snapping = !kcd->angle_snapping; + knife_update_header(C, kcd); break; case KNF_MODAL_CUT_THROUGH_TOGGLE: kcd->cut_through = !kcd->cut_through; + knife_update_header(C, kcd); break; case KNF_MODAL_NEW_CUT: ED_region_tag_redraw(kcd->ar); From a1ed21ac85f2fcaebb44f1c3206ac3a520211b3e Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Wed, 18 Apr 2012 20:07:35 +0000 Subject: [PATCH 111/156] Release Status: * Still BCon4, rc phase now. --- source/blender/blenkernel/BKE_blender.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 296461e61c8..e0fac79359d 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -51,7 +51,7 @@ extern "C" { /* can be left blank, otherwise a,b,c... etc with no quotes */ #define BLENDER_VERSION_CHAR /* alpha/beta/rc/release, docs use this */ -#define BLENDER_VERSION_CYCLE beta +#define BLENDER_VERSION_CYCLE rc extern char versionstr[]; /* from blender.c */ From 0b3f94d91f3de75a88ce36e6d9a7c101630874e1 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Wed, 18 Apr 2012 20:43:07 +0000 Subject: [PATCH 112/156] Fixing bug [#31005] Nurbs UI bug * W button was hidden, due to too small y alignment. --- source/blender/editors/space_view3d/view3d_buttons.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index f77ed74c7bc..b1cddf5b6c5 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -315,27 +315,27 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float uiBlockBeginAlign(block); if (tot == 1) { - uiDefBut(block, LABEL, 0, IFACE_("Vertex:"), 0, 150, 200, 20, NULL, 0, 0, 0, 0, ""); + uiDefBut(block, LABEL, 0, IFACE_("Vertex:"), 0, 170, 200, 20, NULL, 0, 0, 0, 0, ""); } else { - uiDefBut(block, LABEL, 0, IFACE_("Median:"), 0, 150, 200, 20, NULL, 0, 0, 0, 0, ""); + uiDefBut(block, LABEL, 0, IFACE_("Median:"), 0, 170, 200, 20, NULL, 0, 0, 0, 0, ""); } uiBlockBeginAlign(block); /* Should be no need to translate these. */ - but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "X:", 0, 130, 200, 20, + but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "X:", 0, 150, 200, 20, &(tfp->ve_median[0]), -lim, lim, 10, RNA_TRANSLATION_PREC_DEFAULT, ""); uiButSetUnitType(but, PROP_UNIT_LENGTH); - but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Y:", 0, 110, 200, 20, + but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Y:", 0, 130, 200, 20, &(tfp->ve_median[1]), -lim, lim, 10, RNA_TRANSLATION_PREC_DEFAULT, ""); uiButSetUnitType(but, PROP_UNIT_LENGTH); - but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Z:", 0, 90, 200, 20, + but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Z:", 0, 110, 200, 20, &(tfp->ve_median[2]), -lim, lim, 10, RNA_TRANSLATION_PREC_DEFAULT, ""); uiButSetUnitType(but, PROP_UNIT_LENGTH); if (totw == tot) { - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "W:", 0, 70, 200, 20, + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "W:", 0, 90, 200, 20, &(tfp->ve_median[3]), 0.01, 100.0, 1, 3, ""); } From baba9c441e4d991744fa60960868164f3106d0f1 Mon Sep 17 00:00:00 2001 From: Antony Riakiotakis Date: Wed, 18 Apr 2012 22:27:24 +0000 Subject: [PATCH 113/156] Fix: Mark seams in uv editor didn't work --- source/blender/editors/uvedit/uvedit_ops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 7e7e3bcfbfe..8046555443c 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -3514,7 +3514,7 @@ static int mark_seam_exec(bContext *C, wmOperator *UNUSED(op)) BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { BM_ITER(loop, &liter, bm, BM_LOOPS_OF_FACE, efa) { if (uvedit_edge_selected(em, scene, loop)) { - BM_elem_flag_enable(loop, BM_ELEM_SEAM); + BM_elem_flag_enable(loop->e, BM_ELEM_SEAM); } } } From fc0f41756ef87b9464b59907bcc4143d2b40ba5f Mon Sep 17 00:00:00 2001 From: Nicholas Bishop Date: Thu, 19 Apr 2012 02:12:39 +0000 Subject: [PATCH 114/156] Fix for disabling noisy opennl output. More info from bf-committers: http://lists.blender.org/pipermail/bf-committers/2012-April/036339.html --- intern/opennl/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intern/opennl/CMakeLists.txt b/intern/opennl/CMakeLists.txt index 231802b31f2..322428386b1 100644 --- a/intern/opennl/CMakeLists.txt +++ b/intern/opennl/CMakeLists.txt @@ -28,7 +28,7 @@ remove_strict_flags() # remove debug flag here since this is not a blender maintained library # and debug gives a lot of prints on UV unwrapping. developers can enable if they need to. -remove_cc_flag("-DDEBUG") +add_definitions(-UDEBUG) # quiet compiler warnings about undefined defines From d403722722cec44c0a2c4ababf6192247cf804e3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 06:10:21 +0000 Subject: [PATCH 115/156] style cleanup: bevel code, also remove unneeded flag setting. --- source/blender/bmesh/tools/BME_bevel.c | 56 +++++++++++++------------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/source/blender/bmesh/tools/BME_bevel.c b/source/blender/bmesh/tools/BME_bevel.c index c38bb88900d..034843de6ea 100644 --- a/source/blender/bmesh/tools/BME_bevel.c +++ b/source/blender/bmesh/tools/BME_bevel.c @@ -154,7 +154,7 @@ static void BME_Bevel_Dissolve_Disk(BMesh *bm, BMVert *v) if (v->e) { done = 0; - while (!done){ + while (!done) { done = 1; e = v->e; /*loop the edge looking for a edge to dissolve*/ do { @@ -167,7 +167,7 @@ static void BME_Bevel_Dissolve_Disk(BMesh *bm, BMVert *v) break; } e = bmesh_disk_edge_next(e, v); - } while(e != v->e); + } while (e != v->e); } BM_vert_collapse_edge(bm, v->e, v, TRUE); // bmesh_jekv(bm, v->e, v, FALSE); @@ -181,8 +181,8 @@ static int BME_bevel_is_split_vert(BMesh *bm, BMLoop *l) * vert and the edges around it for originality */ if (!BMO_elem_flag_test(bm, l->v, BME_BEVEL_ORIG) && - BMO_elem_flag_test(bm, l->e, BME_BEVEL_ORIG) && - BMO_elem_flag_test(bm, l->prev->e, BME_BEVEL_ORIG)) + BMO_elem_flag_test(bm, l->e, BME_BEVEL_ORIG) && + BMO_elem_flag_test(bm, l->prev->e, BME_BEVEL_ORIG)) { return 1; } @@ -653,7 +653,7 @@ static BMLoop *BME_bevel_vert(BMesh *bm, BMLoop *l, float value, int UNUSED(opti */ static BMFace *BME_bevel_poly(BMesh *bm, BMFace *f, float value, int options, BME_TransData_Head *td) { - BMLoop *l/*, *o */; + BMLoop *l /*, *o */; BME_TransData *vtd1, *vtd2; float up_vec[3], vec1[3], vec2[3], vec3[3], fac1, fac2, max = -1; int len, i; @@ -662,7 +662,7 @@ static BMFace *BME_bevel_poly(BMesh *bm, BMFace *f, float value, int options, BM zero_v3(up_vec); /* find a good normal for this face (there's better ways, I'm sure) */ - BM_ITER(l, &iter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &iter, bm, BM_LOOPS_OF_FACE, f) { BME_bevel_get_vec(vec1, l->v, l->next->v, td); BME_bevel_get_vec(vec2, l->prev->v, l->v, td); cross_v3_v3v3(vec3, vec2, vec1); @@ -679,7 +679,7 @@ static BMFace *BME_bevel_poly(BMesh *bm, BMFace *f, float value, int options, BM } else if (BMO_elem_flag_test(bm, l->v, BME_BEVEL_BEVEL) && BMO_elem_flag_test(bm, l->v, BME_BEVEL_ORIG) && - !BMO_elem_flag_test(bm, l->prev->e, BME_BEVEL_BEVEL)) + !BMO_elem_flag_test(bm, l->prev->e, BME_BEVEL_BEVEL)) { max = 1.0f; l = BME_bevel_vert(bm, l, value, options, up_vec, td); @@ -691,7 +691,7 @@ static BMFace *BME_bevel_poly(BMesh *bm, BMFace *f, float value, int options, BM /* max pass */ if (value > 0.5f && max > 0) { max = -1; - BM_ITER(l, &iter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &iter, bm, BM_LOOPS_OF_FACE, f) { if (BMO_elem_flag_test(bm, l->e, BME_BEVEL_BEVEL) || BMO_elem_flag_test(bm, l->e, BME_BEVEL_ORIG)) { BME_bevel_get_vec(vec1, l->v, l->next->v, td); vtd1 = BME_get_transdata(td, l->v); @@ -725,7 +725,7 @@ static BMFace *BME_bevel_poly(BMesh *bm, BMFace *f, float value, int options, BM } } if (fac1 || fac2) { - max = len_v3(vec1)/(fac1 + fac2); + max = len_v3(vec1) / (fac1 + fac2); if (vtd1->max && (*vtd1->max < 0 || max < *vtd1->max)) { *vtd1->max = max; } @@ -783,7 +783,7 @@ static void bevel_init_verts(BMesh *bm, int options, BME_TransData_Head *td) BMVert *v; BMIter iter; float weight; - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { weight = 0.0f; if (!BMO_elem_flag_test(bm, v, BME_BEVEL_NONMAN)) { /* modifiers should not use selection */ @@ -814,7 +814,7 @@ static void bevel_init_edges(BMesh *bm, int options, BME_TransData_Head *td) int count; float weight; BMIter iter; - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { weight = 0.0; if (!BMO_elem_flag_test(bm, e, BME_BEVEL_NONMAN)) { if (options & BME_BEVEL_SELECT) { @@ -829,8 +829,6 @@ static void bevel_init_edges(BMesh *bm, int options, BME_TransData_Head *td) if (weight > 0.0) { BMO_elem_flag_enable(bm, e, BME_BEVEL_BEVEL); - BMO_elem_flag_enable(bm, e->v1, BME_BEVEL_BEVEL); - BMO_elem_flag_enable(bm, e->v2, BME_BEVEL_BEVEL); BME_bevel_add_vweight(td, bm, e->v1, weight, 1.0, options); BME_bevel_add_vweight(td, bm, e->v2, weight, 1.0, options); } @@ -838,7 +836,7 @@ static void bevel_init_edges(BMesh *bm, int options, BME_TransData_Head *td) } /* clean up edges with 2 faces that share more than one edg */ - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, e, BME_BEVEL_BEVEL)) { count = BM_face_share_edge_count(e->l->f, e->l->radial_next->f); if (count > 1) BMO_elem_flag_disable(bm, e, BME_BEVEL_BEVEL); @@ -848,14 +846,14 @@ static void bevel_init_edges(BMesh *bm, int options, BME_TransData_Head *td) static BMesh *BME_bevel_initialize(BMesh *bm, int options, int UNUSED(defgrp_index), float UNUSED(angle), BME_TransData_Head *td) { - BMVert *v/*, *v2 */; - BMEdge *e/*, *curedg */; + BMVert *v /*, *v2 */; + BMEdge *e /*, *curedg */; BMFace *f; BMIter iter; int /* wire, */ len; /* tag non-manifold geometr */ - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { BMO_elem_flag_enable(bm, v, BME_BEVEL_ORIG); if (v->e) { BME_assign_transdata(td, bm, v, v->co, v->co, NULL, NULL, 0, -1, -1, NULL); @@ -873,7 +871,7 @@ static BMesh *BME_bevel_initialize(BMesh *bm, int options, int UNUSED(defgrp_ind } } - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { BMO_elem_flag_enable(bm, e, BME_BEVEL_ORIG); if (!(BM_edge_is_boundary(e) || BM_edge_is_manifold(e))) { BMO_elem_flag_enable(bm, e->v1, BME_BEVEL_NONMAN); @@ -885,7 +883,7 @@ static BMesh *BME_bevel_initialize(BMesh *bm, int options, int UNUSED(defgrp_ind } } - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { BMO_elem_flag_enable(bm, f, BME_BEVEL_ORIG); } @@ -909,13 +907,13 @@ static BMesh *BME_bevel_reinitialize(BMesh *bm) BMFace *f; BMIter iter; - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { BMO_elem_flag_enable(bm, v, BME_BEVEL_ORIG); } - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { BMO_elem_flag_enable(bm, e, BME_BEVEL_ORIG); } - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { BMO_elem_flag_enable(bm, f, BME_BEVEL_ORIG); } return bm; @@ -949,21 +947,21 @@ static BMesh *BME_bevel_mesh(BMesh *bm, float value, int UNUSED(res), int option /* unsigned int i, len; */ /* bevel poly */ - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, f, BME_BEVEL_ORIG)) { BME_bevel_poly(bm, f, value, options, td); } } /* get rid of beveled edge */ - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, e, BME_BEVEL_BEVEL) && BMO_elem_flag_test(bm, e, BME_BEVEL_ORIG)) { BM_faces_join_pair(bm, e->l->f, e->l->radial_next->f, e, TRUE); } } /* link up corners and cli */ - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, v, BME_BEVEL_ORIG) && BMO_elem_flag_test(bm, v, BME_BEVEL_BEVEL)) { curedge = v->e; do { @@ -972,9 +970,9 @@ static BMesh *BME_bevel_mesh(BMesh *bm, float value, int UNUSED(res), int option if (l->v != v) l = l->next; if (l2->v != v) l2 = l2->next; if (l->f->len > 3) - BM_face_split(bm, l->f, l->next->v, l->prev->v, &l, l->e, FALSE); /* clip this corner off */ + BM_face_split(bm, l->f, l->next->v, l->prev->v, &l, l->e, FALSE); /* clip this corner off */ if (l2->f->len > 3) - BM_face_split(bm, l2->f, l2->next->v, l2->prev->v, &l, l2->e, FALSE); /* clip this corner off */ + BM_face_split(bm, l2->f, l2->next->v, l2->prev->v, &l, l2->e, FALSE); /* clip this corner off */ curedge = bmesh_disk_edge_next(curedge, v); } while (curedge != v->e); BME_Bevel_Dissolve_Disk(bm, v); @@ -983,7 +981,7 @@ static BMesh *BME_bevel_mesh(BMesh *bm, float value, int UNUSED(res), int option #ifdef DEBUG /* Debug print, remov */ - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { if (f->len == 2) { printf("%s: warning, 2 edge face\n", __func__); } @@ -1036,7 +1034,7 @@ BMesh *BME_bevel(BMEditMesh *em, float value, int res, int options, int defgrp_i } /* otherwise apply transforms */ - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { if ((vtd = BME_get_transdata(td, v))) { if (vtd->max && (*vtd->max > 0 && value > *vtd->max)) { d = *vtd->max; From 84f3ade1e51a37f68c162cac13369553ca5d0b23 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 07:00:29 +0000 Subject: [PATCH 116/156] fix bevel edge angle (wasnt hooked up to new code), vertex-bevel angle isnt working still --- source/blender/bmesh/tools/BME_bevel.c | 116 ++++++++++++++++++-- source/blender/modifiers/intern/MOD_bevel.c | 2 +- 2 files changed, 106 insertions(+), 12 deletions(-) diff --git a/source/blender/bmesh/tools/BME_bevel.c b/source/blender/bmesh/tools/BME_bevel.c index 034843de6ea..83dcf3c8238 100644 --- a/source/blender/bmesh/tools/BME_bevel.c +++ b/source/blender/bmesh/tools/BME_bevel.c @@ -51,7 +51,7 @@ * Sender: Andrew Wiggin * Status update: I have code changes to actually make basic bevel modifier work. The things that still need to be done: * - clean up the changes - * - get bevel by weight and bevel by angles working + * - get bevel by weight and bevel by angles working for vertex only bevel. * - the code uses adaptations of a couple of bmesh APIs, * that work a little differently. for example, a join faces that doesn't just create a new face and then delete the * original two faces and all associated loops, it extends one of the original faces to cover all the original loops @@ -83,10 +83,9 @@ void BME_free_transdata(BME_TransData_Head *td) MEM_freeN(td); } -BME_TransData *BME_assign_transdata( - BME_TransData_Head *td, BMesh *bm, BMVert *v, - float *co, float *org, float *vec, float *loc, - float factor, float weight, float maxfactor, float *max) +BME_TransData *BME_assign_transdata(BME_TransData_Head *td, BMesh *bm, BMVert *v, + float *co, float *org, float *vec, float *loc, + float factor, float weight, float maxfactor, float *max) { BME_TransData *vtd; int is_new = 0; @@ -741,6 +740,69 @@ static BMFace *BME_bevel_poly(BMesh *bm, BMFace *f, float value, int options, BM return NULL; } +static float BME_bevel_get_angle(BMesh *UNUSED(bm), BMEdge *e, BMVert *v) +{ + BMVert *v1, *v2; + BMLoop *l1, *l2; + float vec1[3], vec2[3], vec3[3], vec4[3]; + + l1 = e->l; + l2 = e->l->radial_next; + if (l1->v == v) { + v1 = l1->prev->v; + v2 = l1->next->v; + } + else { + v1 = l1->next->next->v; + v2 = l1->v; + } + sub_v3_v3v3(vec1, v1->co, v->co); + sub_v3_v3v3(vec2, v2->co, v->co); + cross_v3_v3v3(vec3, vec1, vec2); + + l1 = l2; + if (l1->v == v) { + v1 = l1->prev->v; + v2 = l1->next->v; + } + else { + v1 = l1->next->next->v; + v2 = l1->v; + } + sub_v3_v3v3(vec1, v1->co, v->co); + sub_v3_v3v3(vec2, v2->co, v->co); + cross_v3_v3v3(vec4, vec2, vec1); + + normalize_v3(vec3); + normalize_v3(vec4); + + return dot_v3v3(vec3, vec4); +} + +static float UNUSED_FUNCTION(BME_bevel_get_angle_vert)(BMesh *bm, BMVert *v) +{ + BMIter iter; + BMLoop *l; + float n[3]; + float n_tmp[3]; + float angle_diff = 0.0f; + + + BM_ITER(l, &iter, bm, BM_LOOPS_OF_VERT, v) { + BM_loop_face_normal(l, n_tmp); + madd_v3_v3fl(n, n_tmp, BM_loop_face_angle(l)); + } + normalize_v3(n); + + BM_ITER(l, &iter, bm, BM_LOOPS_OF_VERT, v) { + /* could cache from before */ + BM_loop_face_normal(l, n_tmp); + angle_diff += angle_normalized_v3v3(n, n_tmp) * (BM_loop_face_angle(l) * (float)(M_PI * 0.5)); + } + + return angle_diff; +} + static void BME_bevel_add_vweight(BME_TransData_Head *td, BMesh *bm, BMVert *v, float weight, float factor, int options) { BME_TransData *vtd; @@ -778,11 +840,14 @@ static void BME_bevel_add_vweight(BME_TransData_Head *td, BMesh *bm, BMVert *v, } } -static void bevel_init_verts(BMesh *bm, int options, BME_TransData_Head *td) +static void bevel_init_verts(BMesh *bm, int options, float angle, BME_TransData_Head *td) { BMVert *v; BMIter iter; float weight; +// const float threshold = (options & BME_BEVEL_ANGLE) ? cosf(angle + 0.001) : 0.0f; + (void)angle; + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { weight = 0.0f; if (!BMO_elem_flag_test(bm, v, BME_BEVEL_NONMAN)) { @@ -796,6 +861,14 @@ static void bevel_init_verts(BMesh *bm, int options, BME_TransData_Head *td) else if (options & BME_BEVEL_WEIGHT) { weight = BM_elem_float_data_get(&bm->vdata, v, CD_BWEIGHT); } +#if 0 // not working well + else if (options & BME_BEVEL_ANGLE) { + /* dont set weight_v1/weight_v2 here, add direct */ + if (BME_bevel_get_angle_vert(bm, v) < threshold) { + weight = 1.0f; + } + } +#endif else { weight = 1.0f; } @@ -808,21 +881,42 @@ static void bevel_init_verts(BMesh *bm, int options, BME_TransData_Head *td) } } -static void bevel_init_edges(BMesh *bm, int options, BME_TransData_Head *td) +static void bevel_init_edges(BMesh *bm, int options, float angle, BME_TransData_Head *td) { BMEdge *e; int count; float weight; BMIter iter; + const float threshold = (options & BME_BEVEL_ANGLE) ? cosf(angle + 0.001) : 0.0f; + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { weight = 0.0; if (!BMO_elem_flag_test(bm, e, BME_BEVEL_NONMAN)) { if (options & BME_BEVEL_SELECT) { - if (BM_elem_flag_test(e, BM_ELEM_SELECT)) weight = 1.0; + if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { + weight = 1.0; + } } else if (options & BME_BEVEL_WEIGHT) { weight = BM_elem_float_data_get(&bm->edata, e, CD_BWEIGHT); } + else if (options & BME_BEVEL_ANGLE) { + /* dont set weight_v1/weight_v2 here, add direct */ + if (!BMO_elem_flag_test(bm, e->v1, BME_BEVEL_NONMAN) && BME_bevel_get_angle(bm, e, e->v1) < threshold) { + BMO_elem_flag_enable(bm, e, BME_BEVEL_BEVEL); + BME_bevel_add_vweight(td, bm, e->v1, 1.0, 1.0, options); + } + else { + BME_bevel_add_vweight(td, bm, e->v1, 0.0, 1.0, options); + } + if (!BMO_elem_flag_test(bm, e->v2, BME_BEVEL_NONMAN) && BME_bevel_get_angle(bm, e, e->v2) < threshold) { + BMO_elem_flag_enable(bm, e, BME_BEVEL_BEVEL); + BME_bevel_add_vweight(td, bm, e->v2, 1.0, 1.0, options); + } + else { + BME_bevel_add_vweight(td, bm, e->v2, 0.0, 1.0, options); + } + } else { weight = 1.0; } @@ -844,7 +938,7 @@ static void bevel_init_edges(BMesh *bm, int options, BME_TransData_Head *td) } } -static BMesh *BME_bevel_initialize(BMesh *bm, int options, int UNUSED(defgrp_index), float UNUSED(angle), BME_TransData_Head *td) +static BMesh *BME_bevel_initialize(BMesh *bm, int options, int UNUSED(defgrp_index), float angle, BME_TransData_Head *td) { BMVert *v /*, *v2 */; BMEdge *e /*, *curedg */; @@ -888,10 +982,10 @@ static BMesh *BME_bevel_initialize(BMesh *bm, int options, int UNUSED(defgrp_ind } if (options & BME_BEVEL_VERT) { - bevel_init_verts(bm, options, td); + bevel_init_verts(bm, options, angle, td); } else { - bevel_init_edges(bm, options, td); + bevel_init_edges(bm, options, angle, td); } return bm; diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c index 95447302d6c..57634627cee 100644 --- a/source/blender/modifiers/intern/MOD_bevel.c +++ b/source/blender/modifiers/intern/MOD_bevel.c @@ -183,7 +183,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob), #endif em = DM_to_editbmesh(derivedData, NULL, FALSE); - BME_bevel(em, bmd->value, bmd->res, options, defgrp_index, bmd->bevel_angle, NULL, FALSE); + BME_bevel(em, bmd->value, bmd->res, options, defgrp_index, DEG2RADF(bmd->bevel_angle), NULL, FALSE); BLI_assert(em->looptris == NULL); result = CDDM_from_BMEditMesh(em, NULL, TRUE, FALSE); BMEdit_Free(em); From 2e734e47356e52b5df9d03b221a6e1ed4b6e3605 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 19 Apr 2012 09:27:11 +0000 Subject: [PATCH 117/156] Fix #31007: text editor delete at end of last line did unnecessary undo push. Patch by Justin Dailey, simplified a bit. --- source/blender/blenkernel/intern/text.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c index 4ce159b8aaf..a7e49dd7fc8 100644 --- a/source/blender/blenkernel/intern/text.c +++ b/source/blender/blenkernel/intern/text.c @@ -2560,6 +2560,8 @@ void txt_delete_char(Text *text) txt_combine_lines(text, text->curl, text->curl->next); txt_pop_sel(text); } + else + return; } else { /* Just deleting a char */ size_t c_len = 0; From 2251e05c30131cff3d46f5b3f685b5579881db49 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 19 Apr 2012 09:38:07 +0000 Subject: [PATCH 118/156] Fix #31009: edge split did not split non-manifold edges correctly, it should create a separate edge for each face. --- source/blender/bmesh/operators/bmo_edgesplit.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/blender/bmesh/operators/bmo_edgesplit.c b/source/blender/bmesh/operators/bmo_edgesplit.c index 557860e1056..dd03401ab57 100644 --- a/source/blender/bmesh/operators/bmo_edgesplit.c +++ b/source/blender/bmesh/operators/bmo_edgesplit.c @@ -135,7 +135,11 @@ void bmo_edgesplit_exec(BMesh *bm, BMOperator *op) /* this flag gets copied so we can be sure duplicate edges get it too (important) */ BM_elem_flag_enable(e, BM_ELEM_INTERNAL_TAG); - bmesh_edge_separate(bm, e, e->l); + /* keep splitting until each loop has its own edge */ + do { + bmesh_edge_separate(bm, e, e->l); + } while (!BM_edge_is_boundary(e)); + BM_elem_flag_enable(e->v1, BM_ELEM_TAG); BM_elem_flag_enable(e->v2, BM_ELEM_TAG); } From 250560a423ea889ec491cdfde887571dea3c9e7c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 19 Apr 2012 10:49:45 +0000 Subject: [PATCH 119/156] Fix #30998: copy to selected in properties editor not working for bones. --- .../blender/editors/interface/interface_ops.c | 61 ++++++++++++++----- 1 file changed, 46 insertions(+), 15 deletions(-) diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c index c3adadafe58..93546d74c1b 100644 --- a/source/blender/editors/interface/interface_ops.c +++ b/source/blender/editors/interface/interface_ops.c @@ -346,8 +346,10 @@ static void UI_OT_reset_default_button(wmOperatorType *ot) /* Copy To Selected Operator ------------------------ */ -static int copy_to_selected_list(bContext *C, PointerRNA *ptr, ListBase *lb) +static int copy_to_selected_list(bContext *C, PointerRNA *ptr, ListBase *lb, int *use_path) { + *use_path = 0; + if (RNA_struct_is_a(ptr->type, &RNA_EditBone)) *lb = CTX_data_collection_get(C, "selected_editable_bones"); else if (RNA_struct_is_a(ptr->type, &RNA_PoseBone)) @@ -357,8 +359,10 @@ static int copy_to_selected_list(bContext *C, PointerRNA *ptr, ListBase *lb) else { ID *id = ptr->id.data; - if(id && GS(id->name) == ID_OB) + if (id && GS(id->name) == ID_OB) { *lb = CTX_data_collection_get(C, "selected_editable_objects"); + *use_path = 1; + } else return 0; } @@ -375,26 +379,39 @@ static int copy_to_selected_button_poll(bContext *C) uiContextActiveProperty(C, &ptr, &prop, &index); if (ptr.data && prop) { - char *path = RNA_path_from_ID_to_property(&ptr, prop); + char *path = NULL; + int use_path; CollectionPointerLink *link; ListBase lb; - if (path && copy_to_selected_list(C, &ptr, &lb)) { + if (!copy_to_selected_list(C, &ptr, &lb, &use_path)) + return success; + + if (!use_path || (path = RNA_path_from_ID_to_property(&ptr, prop))) { for (link = lb.first; link; link = link->next) { if (link->ptr.data != ptr.data) { - RNA_id_pointer_create(link->ptr.id.data, &idptr); + if (use_path) { + lprop = NULL; + RNA_id_pointer_create(link->ptr.id.data, &idptr); + RNA_path_resolve(&idptr, path, &lptr, &lprop); + } + else { + lptr = link->ptr; + lprop = prop; + } - if (RNA_path_resolve(&idptr, path, &lptr, &lprop) && lprop == prop) { + if (lprop == prop) { if (RNA_property_editable(&lptr, prop)) success = 1; } } } - BLI_freelistN(&lb); + if (path) + MEM_freeN(path); } - MEM_freeN(path); + BLI_freelistN(&lb); } return success; @@ -412,16 +429,29 @@ static int copy_to_selected_button_exec(bContext *C, wmOperator *op) /* if there is a valid property that is editable... */ if (ptr.data && prop) { - char *path = RNA_path_from_ID_to_property(&ptr, prop); + char *path = NULL; + int use_path; CollectionPointerLink *link; ListBase lb; - if (path && copy_to_selected_list(C, &ptr, &lb)) { + if (!copy_to_selected_list(C, &ptr, &lb, &use_path)) + return success; + + if (!use_path || (path = RNA_path_from_ID_to_property(&ptr, prop))) { for (link = lb.first; link; link = link->next) { if (link->ptr.data != ptr.data) { - RNA_id_pointer_create(link->ptr.id.data, &idptr); - if (RNA_path_resolve(&idptr, path, &lptr, &lprop) && lprop == prop) { - if(RNA_property_editable(&lptr, lprop)) { + if (use_path) { + lprop = NULL; + RNA_id_pointer_create(link->ptr.id.data, &idptr); + RNA_path_resolve(&idptr, path, &lptr, &lprop); + } + else { + lptr = link->ptr; + lprop = prop; + } + + if (lprop == prop) { + if (RNA_property_editable(&lptr, lprop)) { if (RNA_property_copy(&lptr, &ptr, prop, (all) ? -1 : index)) { RNA_property_update(C, &lptr, prop); success = 1; @@ -431,10 +461,11 @@ static int copy_to_selected_button_exec(bContext *C, wmOperator *op) } } - BLI_freelistN(&lb); + if (path) + MEM_freeN(path); } - MEM_freeN(path); + BLI_freelistN(&lb); } return (success) ? OPERATOR_FINISHED : OPERATOR_CANCELLED; From db2edfcfdec81fb03667a63e70f05ee832bf2586 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 11:25:05 +0000 Subject: [PATCH 120/156] bmesh api function: BM_edge_face_tangent() was used by inset but make into an api function since scripts can use this too. --- source/blender/bmesh/intern/bmesh_queries.c | 25 ++++++++++++++ source/blender/bmesh/intern/bmesh_queries.h | 2 ++ source/blender/bmesh/operators/bmo_inset.c | 13 +------- source/blender/python/bmesh/bmesh_py_types.c | 35 ++++++++++++++++++-- 4 files changed, 61 insertions(+), 14 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c index 5efdd547ba9..b021fb4c320 100644 --- a/source/blender/bmesh/intern/bmesh_queries.c +++ b/source/blender/bmesh/intern/bmesh_queries.c @@ -812,6 +812,31 @@ float BM_edge_face_angle(BMEdge *e) } } +/** + * \brief BMESH EDGE/FACE TANGENT + * + * Calculate the tangent at this loop corner or fallback to the face normal on straignt lines. + * This vector always points inward into the face. + * + * \brief BM_edge_face_tangent + * \param e + * \param e_loop The loop to calculate the tangent at, + * used to get the face and winding direction. + */ + +void BM_edge_face_tangent(BMEdge *e, BMLoop *e_loop, float r_tangent[3]) +{ + float tvec[3]; + BMVert *v1, *v2; + BM_edge_ordered_verts_ex(e, &v1, &v2, e_loop); + + sub_v3_v3v3(tvec, v1->co, v2->co); /* use for temp storage */ + /* note, we could average the tangents of both loops, + * for non flat ngons it will give a better direction */ + cross_v3_v3v3(r_tangent, tvec, e_loop->f->no); + normalize_v3(r_tangent); +} + /** * \brief BMESH VERT/EDGE ANGLE * diff --git a/source/blender/bmesh/intern/bmesh_queries.h b/source/blender/bmesh/intern/bmesh_queries.h index 567d60eeac6..280fe843b1c 100644 --- a/source/blender/bmesh/intern/bmesh_queries.h +++ b/source/blender/bmesh/intern/bmesh_queries.h @@ -62,6 +62,8 @@ void BM_loop_face_normal(BMLoop *l, float r_normal[3]); void BM_loop_face_tangent(BMLoop *l, float r_tangent[3]); float BM_edge_face_angle(BMEdge *e); +void BM_edge_face_tangent(BMEdge *e, BMLoop *e_loop, float r_tangent[3]); + float BM_vert_edge_angle(BMVert *v); BMEdge *BM_edge_exists(BMVert *v1, BMVert *v2); diff --git a/source/blender/bmesh/operators/bmo_inset.c b/source/blender/bmesh/operators/bmo_inset.c index 3bfacb29197..1c823e7590c 100644 --- a/source/blender/bmesh/operators/bmo_inset.c +++ b/source/blender/bmesh/operators/bmo_inset.c @@ -42,17 +42,6 @@ typedef struct SplitEdgeInfo { BMLoop *l; } SplitEdgeInfo; -static void edge_loop_tangent(BMEdge *e, BMLoop *e_loop, float r_no[3]) -{ - float tvec[3]; - BMVert *v1, *v2; - BM_edge_ordered_verts_ex(e, &v1, &v2, e_loop); - - sub_v3_v3v3(tvec, v1->co, v2->co); /* use for temp storage */ - cross_v3_v3v3(r_no, tvec, e_loop->f->no); - normalize_v3(r_no); -} - /** * return the tag loop where there is... * - only 1 tagged face attached to this edge. @@ -188,7 +177,7 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) /* calc edge-split info */ es->e_new = es->l->e; - edge_loop_tangent(es->e_new, es->l, es->no); + BM_edge_face_tangent(es->e_new, es->l, es->no); if (es->e_new == es->e_old) { /* happens on boundary edges */ /* take care here, we're creating this double edge which _must_ have its verts replaced later on */ diff --git a/source/blender/python/bmesh/bmesh_py_types.c b/source/blender/python/bmesh/bmesh_py_types.c index 5fcefc7533b..6b6fd8a0bd4 100644 --- a/source/blender/python/bmesh/bmesh_py_types.c +++ b/source/blender/python/bmesh/bmesh_py_types.c @@ -1243,6 +1243,36 @@ static PyObject *bpy_bmedge_calc_face_angle(BPy_BMEdge *self) return PyFloat_FromDouble(BM_edge_face_angle(self->e)); } +PyDoc_STRVAR(bpy_bmedge_calc_tangent_doc, +".. method:: calc_tangent(loop)\n" +"\n" +" Return the tangent at this edge relative to a face (pointing inward into the face).\n" +" This uses the face normal for calculation.\n" +"\n" +" :arg loop: The loop used for tangent calculation.\n" +" :type loop: :class:`BMLoop`\n" +" :return: a normalized vector.\n" +" :rtype: :class:`mathutils.Vector`\n" +); +static PyObject *bpy_bmedge_calc_tangent(BPy_BMEdge *self, PyObject *args) +{ + BPy_BMLoop *py_loop; + BPY_BM_CHECK_OBJ(self); + + if (!PyArg_ParseTuple(args, "O!:BMEdge.calc_face_tangent", + &BPy_BMLoop_Type, &py_loop)) + { + return NULL; + } + else { + float vec[3]; + BPY_BM_CHECK_OBJ(py_loop); + /* no need to check if they are from the same mesh or even connected */ + BM_edge_face_tangent(self->e, py_loop->l, vec); + return Vector_CreatePyObject(vec, 3, Py_NEW, NULL); + } +} + PyDoc_STRVAR(bpy_bmedge_other_vert_doc, ".. method:: other_vert(vert)\n" @@ -2078,8 +2108,9 @@ static struct PyMethodDef bpy_bmedge_methods[] = { {"other_vert", (PyCFunction)bpy_bmedge_other_vert, METH_O, bpy_bmedge_other_vert_doc}, - {"calc_length", (PyCFunction)bpy_bmedge_calc_length, METH_NOARGS, bpy_bmedge_calc_length_doc}, - {"calc_face_angle", (PyCFunction)bpy_bmedge_calc_face_angle, METH_NOARGS, bpy_bmedge_calc_face_angle_doc}, + {"calc_length", (PyCFunction)bpy_bmedge_calc_length, METH_NOARGS, bpy_bmedge_calc_length_doc}, + {"calc_face_angle", (PyCFunction)bpy_bmedge_calc_face_angle, METH_NOARGS, bpy_bmedge_calc_face_angle_doc}, + {"calc_tangent", (PyCFunction)bpy_bmedge_calc_tangent, METH_VARARGS, bpy_bmedge_calc_tangent_doc}, {"normal_update", (PyCFunction)bpy_bmedge_normal_update, METH_NOARGS, bpy_bmedge_normal_update_doc}, From 75b869e428cdb324ec338538efd4ab9dabd7d53a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 11:44:12 +0000 Subject: [PATCH 121/156] style cleanup: BM_ITER / BM_ITER_INDEX / BMO_ITER --- source/blender/blenkernel/intern/bvhutils.c | 2 +- .../blender/blenkernel/intern/cdderivedmesh.c | 2 +- source/blender/blenkernel/intern/customdata.c | 6 +- .../blenkernel/intern/editderivedmesh.c | 16 +- source/blender/blenkernel/intern/key.c | 2 +- source/blender/blenkernel/intern/object.c | 2 +- source/blender/bmesh/intern/bmesh_construct.c | 32 +-- source/blender/bmesh/intern/bmesh_core.c | 12 +- source/blender/bmesh/intern/bmesh_interp.c | 14 +- source/blender/bmesh/intern/bmesh_iterators.c | 2 +- source/blender/bmesh/intern/bmesh_marking.c | 50 ++-- source/blender/bmesh/intern/bmesh_mesh.c | 36 +-- source/blender/bmesh/intern/bmesh_mesh_conv.c | 26 +-- .../bmesh/intern/bmesh_mesh_validate.c | 8 +- source/blender/bmesh/intern/bmesh_mods.c | 8 +- source/blender/bmesh/intern/bmesh_operators.c | 40 ++-- source/blender/bmesh/intern/bmesh_polygon.c | 6 +- source/blender/bmesh/intern/bmesh_queries.c | 26 +-- .../blender/bmesh/intern/bmesh_walkers_impl.c | 12 +- source/blender/bmesh/operators/bmo_bevel.c | 58 ++--- source/blender/bmesh/operators/bmo_connect.c | 10 +- source/blender/bmesh/operators/bmo_create.c | 30 +-- source/blender/bmesh/operators/bmo_dissolve.c | 16 +- source/blender/bmesh/operators/bmo_dupe.c | 18 +- .../blender/bmesh/operators/bmo_edgesplit.c | 14 +- source/blender/bmesh/operators/bmo_extrude.c | 48 ++-- source/blender/bmesh/operators/bmo_inset.c | 8 +- .../bmesh/operators/bmo_join_triangles.c | 14 +- source/blender/bmesh/operators/bmo_mirror.c | 6 +- .../blender/bmesh/operators/bmo_primitive.c | 6 +- .../bmesh/operators/bmo_removedoubles.c | 44 ++-- source/blender/bmesh/operators/bmo_slide.c | 4 +- .../blender/bmesh/operators/bmo_subdivide.c | 16 +- .../blender/bmesh/operators/bmo_triangulate.c | 8 +- source/blender/bmesh/operators/bmo_utils.c | 92 ++++---- source/blender/bmesh/tools/BME_bevel.c | 4 +- source/blender/editors/mesh/editface.c | 4 +- source/blender/editors/mesh/editmesh_bvh.c | 2 +- source/blender/editors/mesh/editmesh_knife.c | 22 +- .../blender/editors/mesh/editmesh_loopcut.c | 2 +- source/blender/editors/mesh/editmesh_rip.c | 28 +-- source/blender/editors/mesh/editmesh_select.c | 93 ++++---- source/blender/editors/mesh/editmesh_slide.c | 3 +- source/blender/editors/mesh/editmesh_tools.c | 51 ++-- source/blender/editors/mesh/editmesh_utils.c | 30 +-- source/blender/editors/mesh/mesh_data.c | 10 +- source/blender/editors/mesh/mesh_navmesh.c | 6 +- source/blender/editors/mesh/meshtools.c | 15 +- source/blender/editors/object/object_hook.c | 8 +- .../blender/editors/object/object_relations.c | 2 +- .../blender/editors/object/object_transform.c | 4 +- source/blender/editors/object/object_vgroup.c | 20 +- .../blender/editors/render/render_shading.c | 3 +- .../blender/editors/sculpt_paint/sculpt_uv.c | 4 +- .../blender/editors/space_view3d/drawobject.c | 6 +- .../editors/space_view3d/view3d_buttons.c | 20 +- .../editors/space_view3d/view3d_snap.c | 19 +- source/blender/editors/transform/transform.c | 24 +- .../editors/transform/transform_conversions.c | 22 +- .../editors/transform/transform_manipulator.c | 10 +- .../transform/transform_orientations.c | 14 +- source/blender/editors/util/crazyspace.c | 8 +- .../blender/editors/uvedit/uvedit_buttons.c | 8 +- source/blender/editors/uvedit/uvedit_draw.c | 76 +++--- source/blender/editors/uvedit/uvedit_ops.c | 218 +++++++++--------- .../editors/uvedit/uvedit_smart_stitch.c | 16 +- .../editors/uvedit/uvedit_unwrap_ops.c | 68 +++--- source/blender/modifiers/intern/MOD_array.c | 16 +- source/blender/modifiers/intern/MOD_bevel.c | 4 +- .../blender/modifiers/intern/MOD_edgesplit.c | 4 +- source/blender/python/bmesh/bmesh_py_types.c | 4 +- source/blender/python/bmesh/bmesh_py_types.h | 2 +- 72 files changed, 767 insertions(+), 777 deletions(-) diff --git a/source/blender/blenkernel/intern/bvhutils.c b/source/blender/blenkernel/intern/bvhutils.c index d7c7a9a569b..5ccf47d5b73 100644 --- a/source/blender/blenkernel/intern/bvhutils.c +++ b/source/blender/blenkernel/intern/bvhutils.c @@ -572,7 +572,7 @@ BVHTree* bvhtree_from_mesh_faces(BVHTreeFromMesh *data, DerivedMesh *mesh, float insert = 0; } else { - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_FACE, f) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_FACE, f) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { /* Don't insert triangles tessellated from faces that have * any selected verts.*/ diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index ed561a58cce..232011c2d78 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -1929,7 +1929,7 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis mp->loopstart = j; mp->mat_nr = efa->mat_nr; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { mloop->v = BM_elem_index_get(l->v); mloop->e = BM_elem_index_get(l->e); CustomData_from_bmesh_block(&bm->ldata, &dm->loopData, l->head.data, j); diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index 2450f3ca83e..f2238a37ff9 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -2191,7 +2191,7 @@ void CustomData_bmesh_merge(CustomData *source, CustomData *dest, if (t != BM_LOOPS_OF_FACE) { /*ensure all current elements follow new customdata layout*/ - BM_ITER(h, &iter, bm, t, NULL) { + BM_ITER (h, &iter, bm, t, NULL) { tmp = NULL; CustomData_bmesh_copy_data(&destold, dest, h->data, &tmp); CustomData_bmesh_free_block(&destold, &h->data); @@ -2204,8 +2204,8 @@ void CustomData_bmesh_merge(CustomData *source, CustomData *dest, BMIter liter; /*ensure all current elements follow new customdata layout*/ - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { tmp = NULL; CustomData_bmesh_copy_data(&destold, dest, l->head.data, &tmp); CustomData_bmesh_free_block(&destold, &l->head.data); diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index 3556b1ff5be..d17de34a1d3 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -493,7 +493,7 @@ static void emDM_drawUVEdges(DerivedMesh *dm) BMIter iter; glBegin(GL_LINES); - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { BMIter liter; BMLoop *l; MLoopUV *lastluv = NULL, *firstluv = NULL; @@ -501,7 +501,7 @@ static void emDM_drawUVEdges(DerivedMesh *dm) if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (luv) { @@ -1468,8 +1468,8 @@ static void emDM_copyLoopArray(DerivedMesh *dm, MLoop *loop_r) BM_mesh_elem_index_ensure(bm, BM_VERT | BM_EDGE); - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { loop_r->v = BM_elem_index_get(l->v); loop_r->e = BM_elem_index_get(l->e); loop_r++; @@ -1486,7 +1486,7 @@ static void emDM_copyPolyArray(DerivedMesh *dm, MPoly *poly_r) int i; i = 0; - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { poly_r->flag = BM_face_flag_to_mflag(f); poly_r->loopstart = i; poly_r->totloop = f->len; @@ -1559,7 +1559,7 @@ static void emDM_getVertCos(DerivedMesh *dm, float (*cos_r)[3]) int i; i= 0; - BM_ITER(eve, &iter, emdm->tc->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, emdm->tc->bm, BM_VERTS_OF_MESH, NULL) { if (emdm->vertexCos) { copy_v3_v3(cos_r[i], emdm->vertexCos[i]); } @@ -1709,7 +1709,7 @@ DerivedMesh *getEditDerivedBMesh( bmdm->polyNos = MEM_mallocN(sizeof(*bmdm->polyNos)*bm->totface, "bmdm_pno"); i = 0; - BM_ITER(efa, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &fiter, bm, BM_FACES_OF_MESH, NULL) { BM_elem_index_set(efa, i); /* set_inline */ BM_face_normal_update_vcos(bm, efa, bmdm->polyNos[i], (float const (*)[3])vertexCos); i++; @@ -1719,7 +1719,7 @@ DerivedMesh *getEditDerivedBMesh( eve=BM_iter_new(&viter, bm, BM_VERTS_OF_MESH, NULL); for (i=0; eve; eve=BM_iter_step(&viter), i++) { float *no = bmdm->vertexNos[i]; - BM_ITER(efa, &fiter, bm, BM_FACES_OF_VERT, eve) { + BM_ITER (efa, &fiter, bm, BM_FACES_OF_VERT, eve) { add_v3_v3(no, bmdm->polyNos[BM_elem_index_get(efa)]); } diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c index 8c754a726f4..fc10a32c889 100644 --- a/source/blender/blenkernel/intern/key.c +++ b/source/blender/blenkernel/intern/key.c @@ -520,7 +520,7 @@ static char *key_block_get_data(Key *key, KeyBlock *actkb, KeyBlock *kb, char ** a = 0; co = MEM_callocN(sizeof(float) * 3 * me->edit_btmesh->bm->totvert, "key_block_get_data"); - BM_ITER(eve, &iter, me->edit_btmesh->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, me->edit_btmesh->bm, BM_VERTS_OF_MESH, NULL) { copy_v3_v3(co[a], eve->co); a++; } diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 4d8d6e937a9..f93592b769b 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1770,7 +1770,7 @@ static void give_parvert(Object *par, int nr, float vec[3]) BMVert *eve; BMIter iter; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { int *keyindex = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_SHAPE_KEYINDEX); if (keyindex && *keyindex==nr) { diff --git a/source/blender/bmesh/intern/bmesh_construct.c b/source/blender/bmesh/intern/bmesh_construct.c index ec2b9ac006f..179feeccb18 100644 --- a/source/blender/bmesh/intern/bmesh_construct.c +++ b/source/blender/bmesh/intern/bmesh_construct.c @@ -495,7 +495,7 @@ void BMO_remove_tagged_faces(BMesh *bm, const short oflag) BMFace *f; BMIter iter; - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, f, oflag)) { BM_face_kill(bm, f); } @@ -507,7 +507,7 @@ void BMO_remove_tagged_edges(BMesh *bm, const short oflag) BMEdge *e; BMIter iter; - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, e, oflag)) { BM_edge_kill(bm, e); } @@ -519,7 +519,7 @@ void BMO_remove_tagged_verts(BMesh *bm, const short oflag) BMVert *v; BMIter iter; - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, v, oflag)) { BM_vert_kill(bm, v); } @@ -545,14 +545,14 @@ static void bmo_remove_tagged_context_verts(BMesh *bm, const short oflag) BMIter iter; BMIter itersub; - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, v, oflag)) { /* Visit edge */ - BM_ITER(e, &itersub, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &itersub, bm, BM_EDGES_OF_VERT, v) { BMO_elem_flag_enable(bm, e, oflag); } /* Visit face */ - BM_ITER(f, &itersub, bm, BM_FACES_OF_VERT, v) { + BM_ITER (f, &itersub, bm, BM_FACES_OF_VERT, v) { BMO_elem_flag_enable(bm, f, oflag); } } @@ -571,9 +571,9 @@ static void bmo_remove_tagged_context_edges(BMesh *bm, const short oflag) BMIter iter; BMIter itersub; - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, e, oflag)) { - BM_ITER(f, &itersub, bm, BM_FACES_OF_EDGE, e) { + BM_ITER (f, &itersub, bm, BM_FACES_OF_EDGE, e) { BMO_elem_flag_enable(bm, f, oflag); } } @@ -610,7 +610,7 @@ void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type) case DEL_EDGES: { /* flush down to vert */ - BM_ITER(e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, e, oflag)) { BMO_elem_flag_enable(bm, e->v1, oflag); BMO_elem_flag_enable(bm, e->v2, oflag); @@ -618,7 +618,7 @@ void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type) } bmo_remove_tagged_context_edges(bm, oflag); /* remove loose vertice */ - BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, v, oflag) && (!(v->e))) BMO_elem_flag_enable(bm, v, DEL_WIREVERT); } @@ -649,7 +649,7 @@ void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type) case DEL_FACES: { /* go through and mark all edges and all verts of all faces for delet */ - BM_ITER(f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, f, oflag)) { for (e = BM_iter_new(&eiter, bm, BM_EDGES_OF_FACE, f); e; e = BM_iter_step(&eiter)) BMO_elem_flag_enable(bm, e, oflag); @@ -658,7 +658,7 @@ void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type) } } /* now go through and mark all remaining faces all edges for keeping */ - BM_ITER(f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { if (!BMO_elem_flag_test(bm, f, oflag)) { for (e = BM_iter_new(&eiter, bm, BM_EDGES_OF_FACE, f); e; e = BM_iter_step(&eiter)) { BMO_elem_flag_disable(bm, e, oflag); @@ -669,7 +669,7 @@ void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type) } } /* also mark all the vertices of remaining edges for keeping */ - BM_ITER(e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { if (!BMO_elem_flag_test(bm, e, oflag)) { BMO_elem_flag_disable(bm, e->v1, oflag); BMO_elem_flag_disable(bm, e->v2, oflag); @@ -687,13 +687,13 @@ void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type) case DEL_ALL: { /* does this option even belong in here? */ - BM_ITER(f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { BMO_elem_flag_enable(bm, f, oflag); } - BM_ITER(e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { BMO_elem_flag_enable(bm, e, oflag); } - BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { BMO_elem_flag_enable(bm, v, oflag); } diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index 8b1fee3b33f..ce1474e37af 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -1746,7 +1746,7 @@ int BM_vert_splice(BMesh *bm, BMVert *v, BMVert *vtarget) } /* retarget all the loops of v to vtarget */ - BM_ITER(l, &liter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v) { l->v = vtarget; } @@ -1792,7 +1792,7 @@ int bmesh_vert_separate(BMesh *bm, BMVert *v, BMVert ***r_vout, int *r_vout_len) visithash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__); maxindex = 0; - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { if (BLI_ghash_haskey(visithash, e)) { continue; } @@ -1805,7 +1805,7 @@ int bmesh_vert_separate(BMesh *bm, BMVert *v, BMVert ***r_vout, int *r_vout_len) while ((e = BLI_array_pop(stack))) { BLI_ghash_insert(visithash, e, SET_INT_IN_POINTER(maxindex)); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_EDGE, e) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_EDGE, e) { nl = (l->v == v) ? l->prev : l->next; if (!BLI_ghash_haskey(visithash, nl->e)) { BLI_array_append(stack, nl->e); @@ -1825,7 +1825,7 @@ int bmesh_vert_separate(BMesh *bm, BMVert *v, BMVert ***r_vout, int *r_vout_len) /* Replace v with the new verts in each group */ #if 0 - BM_ITER(l, &liter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v) { /* call first since its faster then a hash lookup */ if (l->v != v) { continue; @@ -1851,7 +1851,7 @@ int bmesh_vert_separate(BMesh *bm, BMVert *v, BMVert ***r_vout, int *r_vout_len) * bad practice but save alloc'ing a new array - note, the comment above is useful, keep it * if you are tidying up code - campbell */ BLI_array_empty(stack); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v) { if (l->v == v) { BLI_array_append(stack, (BMEdge *)l); } @@ -1865,7 +1865,7 @@ int bmesh_vert_separate(BMesh *bm, BMVert *v, BMVert ***r_vout, int *r_vout_len) BLI_array_free(stack); - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { i = GET_INT_FROM_POINTER(BLI_ghash_lookup(visithash, e)); if (i == 0) { continue; diff --git a/source/blender/bmesh/intern/bmesh_interp.c b/source/blender/bmesh/intern/bmesh_interp.c index 2a3242d87c1..d8a977c5431 100644 --- a/source/blender/bmesh/intern/bmesh_interp.c +++ b/source/blender/bmesh/intern/bmesh_interp.c @@ -489,7 +489,7 @@ void BM_face_multires_bounds_smooth(BMesh *bm, BMFace *f) if (!CustomData_has_layer(&bm->ldata, CD_MDISPS)) return; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { MDisps *mdp = CustomData_bmesh_get(&bm->ldata, l->prev->head.data, CD_MDISPS); MDisps *mdl = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MDISPS); MDisps *mdn = CustomData_bmesh_get(&bm->ldata, l->next->head.data, CD_MDISPS); @@ -521,7 +521,7 @@ void BM_face_multires_bounds_smooth(BMesh *bm, BMFace *f) } } - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { MDisps *mdl1 = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MDISPS); MDisps *mdl2; float co1[3], co2[3], co[3]; @@ -726,7 +726,7 @@ static void update_data_blocks(BMesh *bm, CustomData *olddata, CustomData *data) CustomData_bmesh_init_pool(data, bm->totvert, BM_VERT); - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { block = NULL; CustomData_bmesh_set_default(data, &block); CustomData_bmesh_copy_data(olddata, data, eve->head.data, &block); @@ -739,7 +739,7 @@ static void update_data_blocks(BMesh *bm, CustomData *olddata, CustomData *data) CustomData_bmesh_init_pool(data, bm->totedge, BM_EDGE); - BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { block = NULL; CustomData_bmesh_set_default(data, &block); CustomData_bmesh_copy_data(olddata, data, eed->head.data, &block); @@ -753,8 +753,8 @@ static void update_data_blocks(BMesh *bm, CustomData *olddata, CustomData *data) BMLoop *l; CustomData_bmesh_init_pool(data, bm->totloop, BM_LOOP); - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { block = NULL; CustomData_bmesh_set_default(data, &block); CustomData_bmesh_copy_data(olddata, data, l->head.data, &block); @@ -768,7 +768,7 @@ static void update_data_blocks(BMesh *bm, CustomData *olddata, CustomData *data) CustomData_bmesh_init_pool(data, bm->totface, BM_FACE); - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { block = NULL; CustomData_bmesh_set_default(data, &block); CustomData_bmesh_copy_data(olddata, data, efa->head.data, &block); diff --git a/source/blender/bmesh/intern/bmesh_iterators.c b/source/blender/bmesh/intern/bmesh_iterators.c index b53896ae722..b234d4514c0 100644 --- a/source/blender/bmesh/intern/bmesh_iterators.c +++ b/source/blender/bmesh/intern/bmesh_iterators.c @@ -93,7 +93,7 @@ int BM_iter_as_array(BMesh *bm, const char type, void *data, void **array, const BMIter iter; void *val; - BM_ITER(val, &iter, bm, type, data) { + BM_ITER (val, &iter, bm, type, data) { array[i] = val; i++; if (i == len) { diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c index 3492b4257cb..faf2d79046a 100644 --- a/source/blender/bmesh/intern/bmesh_marking.c +++ b/source/blender/bmesh/intern/bmesh_marking.c @@ -84,7 +84,7 @@ void BM_mesh_select_mode_flush(BMesh *bm) int ok; if (bm->selectmode & SCE_SELECT_VERTEX) { - BM_ITER(e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(e->v1, BM_ELEM_SELECT) && BM_elem_flag_test(e->v2, BM_ELEM_SELECT) && !BM_elem_flag_test(e, BM_ELEM_HIDDEN)) @@ -95,7 +95,7 @@ void BM_mesh_select_mode_flush(BMesh *bm) BM_elem_flag_disable(e, BM_ELEM_SELECT); } } - BM_ITER(f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { ok = TRUE; if (!BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { l_iter = l_first = BM_FACE_FIRST_LOOP(f); @@ -114,7 +114,7 @@ void BM_mesh_select_mode_flush(BMesh *bm) } } else if (bm->selectmode & SCE_SELECT_EDGE) { - BM_ITER(f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { ok = TRUE; if (!BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { l_iter = l_first = BM_FACE_FIRST_LOOP(f); @@ -154,7 +154,7 @@ void BM_mesh_deselect_flush(BMesh *bm) int ok; - BM_ITER(e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { if (!(BM_elem_flag_test(e->v1, BM_ELEM_SELECT) && BM_elem_flag_test(e->v2, BM_ELEM_SELECT) && !BM_elem_flag_test(e, BM_ELEM_HIDDEN))) @@ -163,7 +163,7 @@ void BM_mesh_deselect_flush(BMesh *bm) } } - BM_ITER(f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { ok = TRUE; if (!BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { l_iter = l_first = BM_FACE_FIRST_LOOP(f); @@ -205,7 +205,7 @@ void BM_mesh_select_flush(BMesh *bm) int ok; - BM_ITER(e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(e->v1, BM_ELEM_SELECT) && BM_elem_flag_test(e->v2, BM_ELEM_SELECT) && !BM_elem_flag_test(e, BM_ELEM_HIDDEN)) @@ -214,7 +214,7 @@ void BM_mesh_select_flush(BMesh *bm) } } - BM_ITER(f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { ok = TRUE; if (!BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { l_iter = l_first = BM_FACE_FIRST_LOOP(f); @@ -360,10 +360,10 @@ void BM_face_select_set(BMesh *bm, BMFace *f, int select) BM_elem_flag_disable(f, BM_ELEM_SELECT); /* flush down to edges */ - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { BMIter fiter; BMFace *f2; - BM_ITER(f2, &fiter, bm, BM_FACES_OF_EDGE, l->e) { + BM_ITER (f2, &fiter, bm, BM_FACES_OF_EDGE, l->e) { if (BM_elem_flag_test(f2, BM_ELEM_SELECT)) break; } @@ -374,10 +374,10 @@ void BM_face_select_set(BMesh *bm, BMFace *f, int select) } /* flush down to verts */ - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { BMIter eiter; BMEdge *e; - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, l->v) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, l->v) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) break; } @@ -405,10 +405,10 @@ void BM_mesh_select_mode_set(BMesh *bm, int selectmode) if (bm->selectmode & SCE_SELECT_VERTEX) { /* disabled because selection flushing handles these */ #if 0 - BM_ITER(ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { BM_elem_flag_disable(ele, BM_ELEM_SELECT); } - BM_ITER(ele, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_FACES_OF_MESH, NULL) { BM_elem_flag_disable(ele, BM_ELEM_SELECT); } #endif @@ -417,12 +417,12 @@ void BM_mesh_select_mode_set(BMesh *bm, int selectmode) else if (bm->selectmode & SCE_SELECT_EDGE) { /* disabled because selection flushing handles these */ #if 0 - BM_ITER(ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { BM_elem_flag_disable(ele, BM_ELEM_SELECT); } #endif - BM_ITER(ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(ele, BM_ELEM_SELECT)) { BM_edge_select_set(bm, (BMEdge *)ele, TRUE); } @@ -432,11 +432,11 @@ void BM_mesh_select_mode_set(BMesh *bm, int selectmode) else if (bm->selectmode & SCE_SELECT_FACE) { /* disabled because selection flushing handles these */ #if 0 - BM_ITER(ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { BM_elem_flag_disable(ele, BM_ELEM_SELECT); } #endif - BM_ITER(ele, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(ele, BM_ELEM_SELECT)) { BM_face_select_set(bm, (BMFace *)ele, TRUE); } @@ -543,7 +543,7 @@ BMFace *BM_active_face_get(BMesh *bm, int sloppy) } /* Last attempt: try to find any selected face */ if (f == NULL) { - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(f, BM_ELEM_SELECT)) { break; } @@ -896,7 +896,7 @@ static void vert_flush_hide_set(BMesh *bm, BMVert *v) BMEdge *e; int hide = TRUE; - BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_VERT, v) { hide = hide && BM_elem_flag_test(e, BM_ELEM_HIDDEN); } @@ -909,7 +909,7 @@ static void edge_flush_hide(BMesh *bm, BMEdge *e) BMFace *f; int hide = TRUE; - BM_ITER(f, &iter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER (f, &iter, bm, BM_FACES_OF_EDGE, e) { hide = hide && BM_elem_flag_test(f, BM_ELEM_HIDDEN); } @@ -925,10 +925,10 @@ void BM_vert_hide_set(BMesh *bm, BMVert *v, int hide) BM_elem_flag_set(v, BM_ELEM_HIDDEN, hide); - BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_VERT, v) { BM_elem_flag_set(e, BM_ELEM_HIDDEN, hide); - BM_ITER(f, &fiter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_EDGE, e) { BM_elem_flag_set(f, BM_ELEM_HIDDEN, hide); } } @@ -941,7 +941,7 @@ void BM_edge_hide_set(BMesh *bm, BMEdge *e, int hide) /* BMVert *v; */ /* edge hiding: faces around the edge */ - BM_ITER(f, &iter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER (f, &iter, bm, BM_FACES_OF_EDGE, e) { BM_elem_flag_set(f, BM_ELEM_HIDDEN, hide); } @@ -959,11 +959,11 @@ void BM_face_hide_set(BMesh *bm, BMFace *f, int hide) BM_elem_flag_set(f, BM_ELEM_HIDDEN, hide); - BM_ITER(l, &iter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &iter, bm, BM_LOOPS_OF_FACE, f) { edge_flush_hide(bm, l->e); } - BM_ITER(l, &iter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &iter, bm, BM_LOOPS_OF_FACE, f) { vert_flush_hide_set(bm, l->v); } } diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c index c15937abf1d..826d4db4556 100644 --- a/source/blender/bmesh/intern/bmesh_mesh.c +++ b/source/blender/bmesh/intern/bmesh_mesh.c @@ -104,15 +104,15 @@ void BM_mesh_data_free(BMesh *bm) BMIter iter; BMIter itersub; - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { CustomData_bmesh_free_block(&(bm->vdata), &(v->head.data)); } - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { CustomData_bmesh_free_block(&(bm->edata), &(e->head.data)); } - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { CustomData_bmesh_free_block(&(bm->pdata), &(f->head.data)); - BM_ITER(l, &itersub, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &itersub, bm, BM_LOOPS_OF_FACE, f) { CustomData_bmesh_free_block(&(bm->ldata), &(l->head.data)); } } @@ -211,7 +211,7 @@ void BM_mesh_normals_update(BMesh *bm, const short skip_hidden) float (*edgevec)[3]; /* calculate all face normals */ - BM_ITER(f, &faces, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &faces, bm, BM_FACES_OF_MESH, NULL) { if (skip_hidden && BM_elem_flag_test(f, BM_ELEM_HIDDEN)) continue; #if 0 /* UNUSED */ @@ -223,7 +223,7 @@ void BM_mesh_normals_update(BMesh *bm, const short skip_hidden) } /* Zero out vertex normals */ - BM_ITER(v, &verts, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &verts, bm, BM_VERTS_OF_MESH, NULL) { if (skip_hidden && BM_elem_flag_test(v, BM_ELEM_HIDDEN)) continue; @@ -235,7 +235,7 @@ void BM_mesh_normals_update(BMesh *bm, const short skip_hidden) * normals */ index = 0; edgevec = MEM_callocN(sizeof(float) * 3 * bm->totedge, "BM normal computation array"); - BM_ITER(e, &edges, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &edges, bm, BM_EDGES_OF_MESH, NULL) { BM_elem_index_set(e, index); /* set_inline */ if (e->l) { @@ -251,12 +251,12 @@ void BM_mesh_normals_update(BMesh *bm, const short skip_hidden) bm->elem_index_dirty &= ~BM_EDGE; /* add weighted face normals to vertices */ - BM_ITER(f, &faces, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &faces, bm, BM_FACES_OF_MESH, NULL) { if (skip_hidden && BM_elem_flag_test(f, BM_ELEM_HIDDEN)) continue; - BM_ITER(l, &loops, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &loops, bm, BM_LOOPS_OF_FACE, f) { float *e1diff, *e2diff; float dotprod; float fac; @@ -282,7 +282,7 @@ void BM_mesh_normals_update(BMesh *bm, const short skip_hidden) } /* normalize the accumulated vertex normals */ - BM_ITER(v, &verts, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &verts, bm, BM_VERTS_OF_MESH, NULL) { if (skip_hidden && BM_elem_flag_test(v, BM_ELEM_HIDDEN)) continue; @@ -312,7 +312,7 @@ static void bm_rationalize_normals(BMesh *bm, int undo) BMIter iter; if (undo) { - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(f, BM_ELEM_TAG)) { BM_face_normal_flip(bm, f); } @@ -327,7 +327,7 @@ static void bm_rationalize_normals(BMesh *bm, int undo) BMO_push(bm, &bmop); bmo_righthandfaces_exec(bm, &bmop); - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { BM_elem_flag_set(f, BM_ELEM_TAG, BMO_elem_flag_test(bm, f, FACE_FLIP)); } @@ -350,10 +350,10 @@ static void UNUSED_FUNCTION(bm_mdisps_space_set)(Object *ob, BMesh *bm, int from mdisps = CustomData_get_layer(&dm->loopData, CD_MDISPS); - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { BMLoop *l; BMIter liter; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { MDisps *lmd = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MDISPS); if (!lmd->disps) { @@ -463,7 +463,7 @@ void BM_mesh_elem_index_ensure(BMesh *bm, const char hflag) if (hflag & BM_VERT) { if (bm->elem_index_dirty & BM_VERT) { int index = 0; - BM_ITER(ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { BM_elem_index_set(ele, index); /* set_ok */ index++; } @@ -478,7 +478,7 @@ void BM_mesh_elem_index_ensure(BMesh *bm, const char hflag) if (hflag & BM_EDGE) { if (bm->elem_index_dirty & BM_EDGE) { int index = 0; - BM_ITER(ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { BM_elem_index_set(ele, index); /* set_ok */ index++; } @@ -493,7 +493,7 @@ void BM_mesh_elem_index_ensure(BMesh *bm, const char hflag) if (hflag & BM_FACE) { if (bm->elem_index_dirty & BM_FACE) { int index = 0; - BM_ITER(ele, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_FACES_OF_MESH, NULL) { BM_elem_index_set(ele, index); /* set_ok */ index++; } @@ -540,7 +540,7 @@ void BM_mesh_elem_index_validate(BMesh *bm, const char *location, const char *fu int err_val = 0; int err_idx = 0; - BM_ITER(ele, &iter, bm, iter_types[i], NULL) { + BM_ITER (ele, &iter, bm, iter_types[i], NULL) { if (!is_dirty) { if (BM_elem_index_get(ele) != index) { err_val = BM_elem_index_get(ele); diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.c b/source/blender/bmesh/intern/bmesh_mesh_conv.c index c8876e55431..cc96cfbef6d 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_conv.c +++ b/source/blender/bmesh/intern/bmesh_mesh_conv.c @@ -336,7 +336,7 @@ void BM_mesh_bm_from_me(BMesh *bm, Mesh *me, int set_key, int act_key_nr) if (i == me->act_face) bm->act_face = f; j = 0; - BM_ITER_INDEX(l, &iter, bm, BM_LOOPS_OF_FACE, f, j) { + BM_ITER_INDEX (l, &iter, bm, BM_LOOPS_OF_FACE, f, j) { /* Save index of correspsonding MLoop */ BM_elem_index_set(l, mpoly->loopstart + j); /* set_loop */ } @@ -355,8 +355,8 @@ void BM_mesh_bm_from_me(BMesh *bm, Mesh *me, int set_key, int act_key_nr) * but is an optimization, to avoid copying a bunch of interpolated customdata * for each BMLoop (from previous BMLoops using the same edge), always followed * by freeing the interpolated data and overwriting it with data from the Mesh. */ - BM_ITER(f, &fiter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { int li = BM_elem_index_get(l); CustomData_to_bmesh_block(&me->ldata, &bm->ldata, li, &l->head.data); BM_elem_index_set(l, 0); /* set_loop */ @@ -379,9 +379,9 @@ void BM_mesh_bm_from_me(BMesh *bm, Mesh *me, int set_key, int act_key_nr) BMFace *face; MSelect *msel; - BM_ITER_INDEX(vert, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { vert_array[i] = vert; } - BM_ITER_INDEX(edge, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { edge_array[i] = edge; } - BM_ITER_INDEX(face, &iter, bm, BM_FACES_OF_MESH, NULL, i) { face_array[i] = face; } + BM_ITER_INDEX (vert, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { vert_array[i] = vert; } + BM_ITER_INDEX (edge, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { edge_array[i] = edge; } + BM_ITER_INDEX (face, &iter, bm, BM_FACES_OF_MESH, NULL, i) { face_array[i] = face; } for (i = 0, msel = me->mselect; i < me->totselect; i++, msel++) { switch (msel->type) { @@ -432,7 +432,7 @@ static BMVert **bm_to_mesh_vertex_map(BMesh *bm, int ototvert) vertMap = MEM_callocN(sizeof(*vertMap) * ototvert, "vertMap"); if (CustomData_has_layer(&bm->vdata, CD_SHAPE_KEYINDEX)) { int *keyi; - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { keyi = CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_SHAPE_KEYINDEX); if (keyi) { if (((index = *keyi) != ORIGINDEX_NONE) && (index < ototvert)) { @@ -448,7 +448,7 @@ static BMVert **bm_to_mesh_vertex_map(BMesh *bm, int ototvert) } } else { - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (i < ototvert) { vertMap[i] = eve; } @@ -564,7 +564,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) mesh_update_customdata_pointers(me, 0); i = 0; - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { float *bweight = CustomData_bmesh_get(&bm->vdata, v->head.data, CD_BWEIGHT); mvert->bweight = bweight ? (char)((*bweight) * 255) : 0; @@ -588,7 +588,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) med = medge; i = 0; - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { float *crease = CustomData_bmesh_get(&bm->edata, e->head.data, CD_CREASE); float *bweight = CustomData_bmesh_get(&bm->edata, e->head.data, CD_BWEIGHT); @@ -614,7 +614,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) i = 0; j = 0; - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { mpoly->loopstart = j; mpoly->totloop = f->len; mpoly->mat_nr = f->mat_nr; @@ -783,7 +783,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) ofs = MEM_callocN(sizeof(float) * 3 * bm->totvert, "currkey->data"); mvert = me->mvert; - BM_ITER_INDEX(eve, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { keyi = CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_SHAPE_KEYINDEX); if (keyi && *keyi != ORIGINDEX_NONE) { sub_v3_v3v3(ofs[i], mvert->co, fp[*keyi]); @@ -806,7 +806,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) oldkey = currkey->data; mvert = me->mvert; - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (currkey == actkey) { copy_v3_v3(fp, eve->co); diff --git a/source/blender/bmesh/intern/bmesh_mesh_validate.c b/source/blender/bmesh/intern/bmesh_mesh_validate.c index f91e9d82879..6f30134f66c 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_validate.c +++ b/source/blender/bmesh/intern/bmesh_mesh_validate.c @@ -70,7 +70,7 @@ int BM_mesh_validate(BMesh *bm) bm->elem_index_dirty |= BM_ALL; BM_mesh_elem_index_ensure(bm, BM_ALL); - BM_ITER_INDEX(v, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_INDEX (v, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { if (BM_elem_flag_test(v, BM_ELEM_SELECT | BM_ELEM_HIDDEN) == (BM_ELEM_SELECT | BM_ELEM_HIDDEN)) { ERRMSG("vert %d: is hidden and selected", i); } @@ -83,13 +83,13 @@ int BM_mesh_validate(BMesh *bm) } /* check edges */ - BM_ITER_INDEX(e, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { + BM_ITER_INDEX (e, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { if (e->v1 == e->v2) ERRMSG("edge %d: duplicate index: %d", i, BM_elem_index_get(e->v1)); } /* edge radial structure */ - BM_ITER_INDEX(e, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { + BM_ITER_INDEX (e, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { if (BM_elem_flag_test(e, BM_ELEM_SELECT | BM_ELEM_HIDDEN) == (BM_ELEM_SELECT | BM_ELEM_HIDDEN)) { ERRMSG("edge %d: is hidden and selected", i); } @@ -117,7 +117,7 @@ int BM_mesh_validate(BMesh *bm) } /* face structure */ - BM_ITER_INDEX(f, &iter, bm, BM_FACES_OF_MESH, NULL, i) { + BM_ITER_INDEX (f, &iter, bm, BM_FACES_OF_MESH, NULL, i) { BMLoop *l_iter; BMLoop *l_first; diff --git a/source/blender/bmesh/intern/bmesh_mods.c b/source/blender/bmesh/intern/bmesh_mods.c index 20306d3bd4a..f4aa1133d27 100644 --- a/source/blender/bmesh/intern/bmesh_mods.c +++ b/source/blender/bmesh/intern/bmesh_mods.c @@ -286,8 +286,8 @@ BMEdge *BM_verts_connect(BMesh *bm, BMVert *v1, BMVert *v2, BMFace **r_f) BMFace *f_iter; /* be warned: this can do weird things in some ngon situation, see BM_face_legal_splits */ - BM_ITER(f_iter, &fiter, bm, BM_FACES_OF_VERT, v1) { - BM_ITER(v_iter, &viter, bm, BM_FACES_OF_VERT, f_iter) { + BM_ITER (f_iter, &fiter, bm, BM_FACES_OF_VERT, v1) { + BM_ITER (v_iter, &viter, bm, BM_FACES_OF_VERT, f_iter) { if (v_iter == v2) { BMLoop *nl; @@ -521,7 +521,7 @@ BMEdge *BM_vert_collapse_faces(BMesh *bm, BMEdge *ke, BMVert *kv, float fac, BMFace *f; BLI_array_staticdeclare(faces, 8); - BM_ITER(f, &iter, bm, BM_FACES_OF_VERT, kv) { + BM_ITER (f, &iter, bm, BM_FACES_OF_VERT, kv) { BLI_array_append(faces, f); } @@ -556,7 +556,7 @@ BMEdge *BM_vert_collapse_faces(BMesh *bm, BMEdge *ke, BMVert *kv, float fac, for (i = 0; i < 2; i++) { /* cant kill data we loop on, build a list and remove those */ BLI_array_empty(bad_faces); - BM_ITER(f, &fiter, bm, BM_FACES_OF_VERT, verts[i]) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_VERT, verts[i]) { if (f->len < 3) { BLI_array_append(bad_faces, f); } diff --git a/source/blender/bmesh/intern/bmesh_operators.c b/source/blender/bmesh/intern/bmesh_operators.c index a1cdcc65f1c..32abaf10f64 100644 --- a/source/blender/bmesh/intern/bmesh_operators.c +++ b/source/blender/bmesh/intern/bmesh_operators.c @@ -473,7 +473,7 @@ static int bmo_mesh_flag_count(BMesh *bm, const char htype, const short oflag, for (i = 0; i < 3; i++) { if (htype & flag_types[i]) { - BM_ITER(ele_f, &iter, bm, iter_types[i], NULL) { + BM_ITER (ele_f, &iter, bm, iter_types[i], NULL) { if (BMO_elem_flag_test_bool(bm, ele_f, oflag) == test_for_enabled) count++; } @@ -508,7 +508,7 @@ void BMO_mesh_flag_disable_all(BMesh *bm, BMOperator *UNUSED(op), const char hty for (i = 0; i < 3; i++) { if (htype & flag_types[i]) { - BM_ITER(ele, &iter, bm, iter_types[i], NULL) { + BM_ITER (ele, &iter, bm, iter_types[i], NULL) { BMO_elem_flag_disable(bm, ele, oflag); } } @@ -663,21 +663,21 @@ static void BMO_slot_buffer_from_all(BMesh *bm, BMOperator *op, const char *slot /* TODO - collapse these loops into one */ if (htype & BM_VERT) { - BM_ITER(ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { ((BMHeader **)output->data.p)[i] = ele; i++; } } if (htype & BM_EDGE) { - BM_ITER(ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { ((BMHeader **)output->data.p)[i] = ele; i++; } } if (htype & BM_FACE) { - BM_ITER(ele, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_FACES_OF_MESH, NULL) { ((BMHeader **)output->data.p)[i] = ele; i++; } @@ -714,7 +714,7 @@ static void bmo_slot_buffer_from_hflag(BMesh *bm, BMOperator *op, const char *sl /* TODO - collapse these loops into one */ if (htype & BM_VERT) { - BM_ITER(ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(ele, BM_ELEM_HIDDEN) && BM_elem_flag_test_bool(ele, hflag) == test_for_enabled) { @@ -725,7 +725,7 @@ static void bmo_slot_buffer_from_hflag(BMesh *bm, BMOperator *op, const char *sl } if (htype & BM_EDGE) { - BM_ITER(ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (!BM_elem_flag_test(ele, BM_ELEM_HIDDEN) && BM_elem_flag_test_bool(ele, hflag) == test_for_enabled) { @@ -736,7 +736,7 @@ static void bmo_slot_buffer_from_hflag(BMesh *bm, BMOperator *op, const char *sl } if (htype & BM_FACE) { - BM_ITER(ele, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(ele, BM_ELEM_HIDDEN) && BM_elem_flag_test_bool(ele, hflag) == test_for_enabled) { @@ -828,7 +828,7 @@ static void bmo_slot_buffer_from_flag(BMesh *bm, BMOperator *op, const char *slo /* TODO - collapse these loops into one */ if (htype & BM_VERT) { - BM_ITER(ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BMO_elem_flag_test_bool(bm, (BMElemF *)ele, oflag) == test_for_enabled) { ele_array[i] = ele; i++; @@ -837,7 +837,7 @@ static void bmo_slot_buffer_from_flag(BMesh *bm, BMOperator *op, const char *slo } if (htype & BM_EDGE) { - BM_ITER(ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BMO_elem_flag_test_bool(bm, (BMElemF *)ele, oflag) == test_for_enabled) { ele_array[i] = ele; i++; @@ -846,7 +846,7 @@ static void bmo_slot_buffer_from_flag(BMesh *bm, BMOperator *op, const char *slo } if (htype & BM_FACE) { - BM_ITER(ele, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (ele, &iter, bm, BM_FACES_OF_MESH, NULL) { if (BMO_elem_flag_test_bool(bm, (BMElemF *)ele, oflag) == test_for_enabled) { ele_array[i] = ele; i++; @@ -1035,19 +1035,19 @@ static void bmo_flag_layer_alloc(BMesh *bm) bm->toolflagpool = newpool = BLI_mempool_create(sizeof(BMFlagLayer) * bm->totflags, 512, 512, 0); /* now go through and memcpy all the flags. Loops don't get a flag layer at this time.. */ - BM_ITER_INDEX(ele, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_INDEX (ele, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { oldflags = ele->oflags; ele->oflags = BLI_mempool_calloc(newpool); memcpy(ele->oflags, oldflags, old_totflags_size); BM_elem_index_set(ele, i); /* set_inline */ } - BM_ITER_INDEX(ele, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { + BM_ITER_INDEX (ele, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { oldflags = ele->oflags; ele->oflags = BLI_mempool_calloc(newpool); memcpy(ele->oflags, oldflags, old_totflags_size); BM_elem_index_set(ele, i); /* set_inline */ } - BM_ITER_INDEX(ele, &iter, bm, BM_FACES_OF_MESH, NULL, i) { + BM_ITER_INDEX (ele, &iter, bm, BM_FACES_OF_MESH, NULL, i) { oldflags = ele->oflags; ele->oflags = BLI_mempool_calloc(newpool); memcpy(ele->oflags, oldflags, old_totflags_size); @@ -1080,19 +1080,19 @@ static void bmo_flag_layer_free(BMesh *bm) bm->toolflagpool = newpool = BLI_mempool_create(new_totflags_size, 512, 512, BLI_MEMPOOL_SYSMALLOC); /* now go through and memcpy all the flag */ - BM_ITER_INDEX(ele, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_INDEX (ele, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { oldflags = ele->oflags; ele->oflags = BLI_mempool_calloc(newpool); memcpy(ele->oflags, oldflags, new_totflags_size); BM_elem_index_set(ele, i); /* set_inline */ } - BM_ITER_INDEX(ele, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { + BM_ITER_INDEX (ele, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { oldflags = ele->oflags; ele->oflags = BLI_mempool_calloc(newpool); memcpy(ele->oflags, oldflags, new_totflags_size); BM_elem_index_set(ele, i); /* set_inline */ } - BM_ITER_INDEX(ele, &iter, bm, BM_FACES_OF_MESH, NULL, i) { + BM_ITER_INDEX (ele, &iter, bm, BM_FACES_OF_MESH, NULL, i) { oldflags = ele->oflags; ele->oflags = BLI_mempool_calloc(newpool); memcpy(ele->oflags, oldflags, new_totflags_size); @@ -1115,15 +1115,15 @@ static void bmo_flag_layer_clear(BMesh *bm) const int totflags_offset = bm->totflags - 1; /* now go through and memcpy all the flag */ - BM_ITER_INDEX(ele, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_INDEX (ele, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { memset(ele->oflags + totflags_offset, 0, sizeof(BMFlagLayer)); BM_elem_index_set(ele, i); /* set_inline */ } - BM_ITER_INDEX(ele, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { + BM_ITER_INDEX (ele, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { memset(ele->oflags + totflags_offset, 0, sizeof(BMFlagLayer)); BM_elem_index_set(ele, i); /* set_inline */ } - BM_ITER_INDEX(ele, &iter, bm, BM_FACES_OF_MESH, NULL, i) { + BM_ITER_INDEX (ele, &iter, bm, BM_FACES_OF_MESH, NULL, i) { memset(ele->oflags + totflags_offset, 0, sizeof(BMFlagLayer)); BM_elem_index_set(ele, i); /* set_inline */ } diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c index 1b480ab0315..869ab4f74e4 100644 --- a/source/blender/bmesh/intern/bmesh_polygon.c +++ b/source/blender/bmesh/intern/bmesh_polygon.c @@ -164,7 +164,7 @@ float BM_face_area_calc(BMesh *bm, BMFace *f) BLI_array_fixedstack_declare(verts, BM_NGON_STACK_SIZE, f->len, __func__); - BM_ITER_INDEX(l, &iter, bm, BM_LOOPS_OF_FACE, f, i) { + BM_ITER_INDEX (l, &iter, bm, BM_LOOPS_OF_FACE, f, i) { copy_v3_v3(verts[i], l->v->co); } @@ -360,7 +360,7 @@ void BM_vert_normal_update(BMesh *bm, BMVert *v) zero_v3(v->no); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v) { /* Same calculation used in BM_mesh_normals_update */ sub_v3_v3v3(vec1, l->v->co, l->prev->v->co); sub_v3_v3v3(vec2, l->next->v->co, l->v->co); @@ -384,7 +384,7 @@ void BM_vert_normal_update_all(BMesh *bm, BMVert *v) BMIter iter; BMFace *f; - BM_ITER(f, &iter, bm, BM_FACES_OF_VERT, v) { + BM_ITER (f, &iter, bm, BM_FACES_OF_VERT, v) { BM_face_normal_update(bm, f); } diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c index b021fb4c320..c615f81f3f8 100644 --- a/source/blender/bmesh/intern/bmesh_queries.c +++ b/source/blender/bmesh/intern/bmesh_queries.c @@ -125,7 +125,7 @@ BMLoop *BM_face_other_vert_loop(BMFace *f, BMVert *v_prev, BMVert *v) BLI_assert(BM_edge_exists(v_prev, v) != NULL); - BM_ITER(l_iter, &liter, NULL, BM_LOOPS_OF_VERT, v) { + BM_ITER (l_iter, &liter, NULL, BM_LOOPS_OF_VERT, v) { if (l_iter->f == f) { break; } @@ -379,7 +379,7 @@ int BM_vert_edge_count_nonwire(BMVert *v) int count = 0; BMIter eiter; BMEdge *edge; - BM_ITER(edge, &eiter, NULL, BM_EDGES_OF_VERT, v) { + BM_ITER (edge, &eiter, NULL, BM_EDGES_OF_VERT, v) { if (edge->l) { count++; } @@ -416,7 +416,7 @@ int BM_vert_face_count(BMVert *v) BMLoop *l; BMIter iter; - BM_ITER(l, &iter, NULL, BM_LOOPS_OF_VERT, v) { + BM_ITER (l, &iter, NULL, BM_LOOPS_OF_VERT, v) { count++; } @@ -877,7 +877,7 @@ BMEdge *BM_edge_exists(BMVert *v1, BMVert *v2) BMIter iter; BMEdge *e; - BM_ITER(e, &iter, NULL, BM_EDGES_OF_VERT, v1) { + BM_ITER (e, &iter, NULL, BM_EDGES_OF_VERT, v1) { if (e->v1 == v2 || e->v2 == v2) return e; } @@ -902,7 +902,7 @@ int BM_face_exists_overlap(BMesh *bm, BMVert **varr, int len, BMFace **r_overlap int i, amount; for (i = 0; i < len; i++) { - BM_ITER(f, &viter, bm, BM_FACES_OF_VERT, varr[i]) { + BM_ITER (f, &viter, bm, BM_FACES_OF_VERT, varr[i]) { amount = BM_verts_in_face(bm, f, varr, len); if (amount >= len) { if (r_overlapface) { @@ -932,7 +932,7 @@ int BM_face_exists(BMesh *bm, BMVert **varr, int len, BMFace **r_existface) int i, amount; for (i = 0; i < len; i++) { - BM_ITER(f, &viter, bm, BM_FACES_OF_VERT, varr[i]) { + BM_ITER (f, &viter, bm, BM_FACES_OF_VERT, varr[i]) { amount = BM_verts_in_face(bm, f, varr, len); if (amount == len && amount == f->len) { if (r_existface) { @@ -978,15 +978,15 @@ int BM_face_exists_multi(BMesh *bm, BMVert **varr, BMEdge **earr, int len) for (i = 0; i < len; i++) { /* save some time by looping over edge faces rather then vert faces * will still loop over some faces twice but not as many */ - BM_ITER(f, &fiter, bm, BM_FACES_OF_EDGE, earr[i]) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_EDGE, earr[i]) { BM_elem_flag_disable(f, BM_ELEM_INTERNAL_TAG); - BM_ITER(v, &viter, bm, BM_VERTS_OF_FACE, f) { + BM_ITER (v, &viter, bm, BM_VERTS_OF_FACE, f) { BM_elem_flag_disable(v, BM_ELEM_INTERNAL_TAG); } } /* clear all edge tags */ - BM_ITER(e, &fiter, bm, BM_EDGES_OF_VERT, varr[i]) { + BM_ITER (e, &fiter, bm, BM_EDGES_OF_VERT, varr[i]) { BM_elem_flag_disable(e, BM_ELEM_INTERNAL_TAG); } } @@ -1005,10 +1005,10 @@ int BM_face_exists_multi(BMesh *bm, BMVert **varr, BMEdge **earr, int len) /* 1) tag all faces connected to edges - if all their verts are boundary */ tot_tag = 0; for (i = 0; i < len; i++) { - BM_ITER(f, &fiter, bm, BM_FACES_OF_EDGE, earr[i]) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_EDGE, earr[i]) { if (!BM_elem_flag_test(f, BM_ELEM_INTERNAL_TAG)) { ok = TRUE; - BM_ITER(v, &viter, bm, BM_VERTS_OF_FACE, f) { + BM_ITER (v, &viter, bm, BM_VERTS_OF_FACE, f) { if (!BM_elem_flag_test(v, BM_ELEM_INTERNAL_TAG)) { ok = FALSE; break; @@ -1036,7 +1036,7 @@ int BM_face_exists_multi(BMesh *bm, BMVert **varr, BMEdge **earr, int len) * check each have 2 tagges faces connected (faces that only use 'varr' verts) */ ok = TRUE; for (i = 0; i < len; i++) { - BM_ITER(e, &fiter, bm, BM_EDGES_OF_VERT, varr[i]) { + BM_ITER (e, &fiter, bm, BM_EDGES_OF_VERT, varr[i]) { if (/* non-boundary edge */ BM_elem_flag_test(e, BM_ELEM_INTERNAL_TAG) == FALSE && @@ -1045,7 +1045,7 @@ int BM_face_exists_multi(BMesh *bm, BMVert **varr, BMEdge **earr, int len) BM_elem_flag_test(e->v2, BM_ELEM_INTERNAL_TAG) == TRUE) { int tot_face_tag = 0; - BM_ITER(f, &fiter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_EDGE, e) { if (BM_elem_flag_test(f, BM_ELEM_INTERNAL_TAG)) { tot_face_tag++; } diff --git a/source/blender/bmesh/intern/bmesh_walkers_impl.c b/source/blender/bmesh/intern/bmesh_walkers_impl.c index cccda674b0f..6f283116236 100644 --- a/source/blender/bmesh/intern/bmesh_walkers_impl.c +++ b/source/blender/bmesh/intern/bmesh_walkers_impl.c @@ -115,7 +115,7 @@ static void bmw_ShellWalker_begin(BMWalker *walker, void *data) /* starting the walk at a vert, add all the edges * to the worklist */ v = (BMVert *)h; - BM_ITER(e, &eiter, walker->bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &eiter, walker->bm, BM_EDGES_OF_VERT, v) { bmw_ShellWalker_visitEdge(walker, e); } break; @@ -151,7 +151,7 @@ static void *bmw_ShellWalker_step(BMWalker *walker) for (i = 0; i < 2; i++) { v = i ? e->v2 : e->v1; - BM_ITER(e2, &iter, walker->bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e2, &iter, walker->bm, BM_EDGES_OF_VERT, v) { bmw_ShellWalker_visitEdge(walker, e2); } } @@ -249,7 +249,7 @@ static void *bmw_ConnectedVertexWalker_step(BMWalker *walker) BMW_state_remove(walker); - BM_ITER(e, &iter, walker->bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &iter, walker->bm, BM_EDGES_OF_VERT, v) { v2 = BM_edge_other_vert(e, v); if (!BLI_ghash_haskey(walker->visithash, v2)) { bmw_ConnectedVertexWalker_visitVertex(walker, v2); @@ -450,7 +450,7 @@ static void bmw_LoopWalker_begin(BMWalker *walker, void *data) BMFace *f_iter; BMFace *f_best = NULL; - BM_ITER(f_iter, &iter, walker->bm, BM_FACES_OF_EDGE, e) { + BM_ITER (f_iter, &iter, walker->bm, BM_FACES_OF_EDGE, e) { if (f_best == NULL || f_best->len < f_iter->len) { f_best = f_iter; } @@ -606,7 +606,7 @@ static void *bmw_LoopWalker_step(BMWalker *walker) for (i = 0; i < 2; i++) { v = i ? e->v2 : e->v1; - BM_ITER(nexte, &eiter, walker->bm, BM_EDGES_OF_VERT, v) { + BM_ITER (nexte, &eiter, walker->bm, BM_EDGES_OF_VERT, v) { if ((nexte->l == NULL) && bmw_mask_check_edge(walker, nexte) && !BLI_ghash_haskey(walker->visithash, nexte)) @@ -953,7 +953,7 @@ static void *bmw_UVEdgeWalker_step(BMWalker *walker) * mloopuv's coordinates. in addition, push on l->next if necessary */ for (i = 0; i < 2; i++) { cl = i ? nl : l; - BM_ITER(l2, &liter, walker->bm, BM_LOOPS_OF_VERT, cl->v) { + BM_ITER (l2, &liter, walker->bm, BM_LOOPS_OF_VERT, cl->v) { d1 = CustomData_bmesh_get_layer_n(&walker->bm->ldata, cl->head.data, walker->layer); diff --git a/source/blender/bmesh/operators/bmo_bevel.c b/source/blender/bmesh/operators/bmo_bevel.c index 0165195475a..dd94e14ba1c 100644 --- a/source/blender/bmesh/operators/bmo_bevel.c +++ b/source/blender/bmesh/operators/bmo_bevel.c @@ -80,7 +80,7 @@ static void calc_corner_co(BMesh *bm, BMLoop *l, const float fac, float r_co[3], copy_v3_v3(l_co_prev, l->prev->v->co); copy_v3_v3(l_co, l->v->co); - BM_ITER(l2, &iter, bm, BM_LOOPS_OF_VERT, l->v) { + BM_ITER (l2, &iter, bm, BM_LOOPS_OF_VERT, l->v) { if (l2->f != l->f) { copy_v3_v3(l_co_next, BM_edge_other_vert(l2->e, l2->next->v)->co); break; @@ -207,7 +207,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BLI_smallhash_init(&hash); - BMO_ITER(e, &siter, bm, op, "geom", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "geom", BM_EDGE) { BMO_elem_flag_enable(bm, e, BEVEL_FLAG|BEVEL_DEL); BMO_elem_flag_enable(bm, e->v1, BEVEL_FLAG|BEVEL_DEL); BMO_elem_flag_enable(bm, e->v2, BEVEL_FLAG|BEVEL_DEL); @@ -228,14 +228,14 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) #endif } - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { BMO_elem_flag_enable(bm, v, VERT_OLD); } #if 0 //a bit of cleaner code that, alas, doens't work. /* build edge tag */ - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, e->v1, BEVEL_FLAG) || BMO_elem_flag_test(bm, e->v2, BEVEL_FLAG)) { BMIter liter; BMLoop *l; @@ -247,14 +247,14 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMO_elem_flag_enable(bm, e, EDGE_OLD); } - BM_ITER(l, &liter, bm, BM_LOOPS_OF_EDGE, e) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_EDGE, e) { BMLoop *l2; BMIter liter2; if (BMO_elem_flag_test(bm, l->f, BEVEL_FLAG)) continue; - BM_ITER(l2, &liter2, bm, BM_LOOPS_OF_FACE, l->f) { + BM_ITER (l2, &liter2, bm, BM_LOOPS_OF_FACE, l->f) { BM_elem_index_set(l2, BLI_array_count(tags)); /* set_loop */ BLI_array_growone(tags); @@ -277,7 +277,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) #endif /* create and assign looptag structure */ - BMO_ITER(e, &siter, bm, op, "geom", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "geom", BM_EDGE) { BMLoop *l; BMIter liter; @@ -299,7 +299,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) /* find all faces surrounding e->v1 and, e->v2 */ for (i = 0; i < 2; i++) { - BM_ITER(l, &liter, bm, BM_LOOPS_OF_VERT, i ? e->v2:e->v1) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, i ? e->v2:e->v1) { BMLoop *l2; BMIter liter2; @@ -308,7 +308,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) continue; /* create tags for all loops in l-> */ - BM_ITER(l2, &liter2, bm, BM_LOOPS_OF_FACE, l->f) { + BM_ITER (l2, &liter2, bm, BM_LOOPS_OF_FACE, l->f) { BLI_array_growone(tags); BM_elem_index_set(l2, BLI_array_count(tags) - 1); /* set_loop */ @@ -329,13 +329,13 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) bm->elem_index_dirty |= BM_EDGE; - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { BMIter eiter; if (!BMO_elem_flag_test(bm, v, BEVEL_FLAG)) continue; - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { if (!BMO_elem_flag_test(bm, e, BEVEL_FLAG) && !ETAG_GET(e, v)) { BMVert *v2; float co[3]; @@ -364,7 +364,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMO_elem_flag_enable(bm, faces[i], FACE_OLD); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, faces[i]) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, faces[i]) { float co[3]; if (BMO_elem_flag_test(bm, l->e, BEVEL_FLAG)) { @@ -438,7 +438,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BLI_array_empty(verts); BLI_array_empty(edges); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, faces[i]) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, faces[i]) { BMVert *v2; tag = tags + BM_elem_index_get(l); @@ -489,7 +489,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) int j; /* create quad spans between split edge */ - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, faces[i]) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, faces[i]) { BMVert *v1 = NULL, *v2 = NULL, *v3 = NULL, *v4 = NULL; if (!BMO_elem_flag_test(bm, l->e, BEVEL_FLAG)) @@ -516,7 +516,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMIter eiter; BMVert *v = j ? v4 : v3; - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { if (!BM_vert_in_edge(e, v3) || !BM_vert_in_edge(e, v4)) continue; @@ -600,7 +600,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMO_elem_flag_enable(bm, f, FACE_NEW|FACE_SPAN); /* un-tag edges in f for deletio */ - BM_ITER(l2, &liter2, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l2, &liter2, bm, BM_LOOPS_OF_FACE, f) { BMO_elem_flag_disable(bm, l2->e, BEVEL_DEL); } } @@ -611,7 +611,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) } /* fill in holes at vertices */ - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { BMIter eiter; BMVert *vv, *vstart = NULL, *lastv = NULL; SmallHash tmphash; @@ -625,7 +625,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BLI_array_empty(verts); BLI_array_empty(edges); - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { BMIter liter; BMVert *v1 = NULL, *v2 = NULL; BMLoop *l; @@ -637,7 +637,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) continue; rad = 0; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_EDGE, e) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_EDGE, e) { if (!BMO_elem_flag_test(bm, l->f, FACE_OLD)) continue; @@ -685,7 +685,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) vstart = vstart ? vstart : verts[0]; vv = vstart; do { - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, vv) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, vv) { BMVert *vv2 = BM_edge_other_vert(e, vv); if (vv2 != lastv && BLI_smallhash_haskey(&tmphash, (intptr_t)vv2)) { @@ -730,7 +730,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) lastv = NULL; BLI_array_empty(edges); do { - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, vv) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, vv) { BMVert *vv2 = BM_edge_other_vert(e, vv); if (vv2 != lastv && BLI_smallhash_haskey(&tmphash, (intptr_t)vv2)) { @@ -787,7 +787,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMIter liter; BMFace *f = faces[i]; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { BMLoop *l2; BMIter liter2; @@ -795,7 +795,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) if (!tag->newv) continue; - BM_ITER(l2, &liter2, bm, BM_LOOPS_OF_VERT, tag->newv) { + BM_ITER (l2, &liter2, bm, BM_LOOPS_OF_VERT, tag->newv) { if (!BMO_elem_flag_test(bm, l2->f, FACE_NEW) || (l2->v != tag->newv && l2->v != l->v)) continue; @@ -812,7 +812,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMLoop *l3; BMIter liter3; - BM_ITER(l3, &liter3, bm, BM_LOOPS_OF_FACE, l2->f) { + BM_ITER (l3, &liter3, bm, BM_LOOPS_OF_FACE, l2->f) { BM_loop_interp_multires(bm, l3, l->f); } } @@ -821,7 +821,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) } /* handle vertices along boundary edge */ - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, v, VERT_OLD) && BMO_elem_flag_test(bm, v, BEVEL_FLAG) && !BMO_elem_flag_test(bm, v, BEVEL_DEL)) @@ -830,7 +830,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMLoop *lorig = NULL; BMIter liter; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v) { // BMIter liter2; // BMLoop *l2 = l->v == v ? l : l->next, *l3; @@ -843,7 +843,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) if (!lorig) continue; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v) { BMLoop *l2 = l->v == v ? l : l->next; BM_elem_attrs_copy(bm, bm, lorig->f, l2->f); @@ -853,7 +853,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) } #if 0 /* clean up any remaining 2-edged face */ - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { if (f->len == 2) { BMFace *faces[2] = {f, BM_FACE_FIRST_LOOP(f)->radial_next->f}; @@ -868,7 +868,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMO_op_callf(bm, "del geom=%fv context=%i", BEVEL_DEL, DEL_VERTS); /* clean up any edges that might not get properly delete */ - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, e, EDGE_OLD) && !e->l) BMO_elem_flag_enable(bm, e, BEVEL_DEL); } diff --git a/source/blender/bmesh/operators/bmo_connect.c b/source/blender/bmesh/operators/bmo_connect.c index 69a9b75b258..98bf22fb833 100644 --- a/source/blender/bmesh/operators/bmo_connect.c +++ b/source/blender/bmesh/operators/bmo_connect.c @@ -135,7 +135,7 @@ static BMVert *get_outer_vert(BMesh *bm, BMEdge *e) int i; i = 0; - BM_ITER(e2, &iter, bm, BM_EDGES_OF_VERT, e->v1) { + BM_ITER (e2, &iter, bm, BM_EDGES_OF_VERT, e->v1) { if (BMO_elem_flag_test(bm, e2, EDGE_MARK)) { i++; } @@ -191,7 +191,7 @@ static void bm_vert_loop_pair(BMesh *bm, BMVert *v1, BMVert *v2, BMLoop **l1, BM if ((v1->e && v1->e->l) && (v2->e && v2->e->l)) { - BM_ITER(l, &liter, bm, BM_LOOPS_OF_VERT, v1) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v1) { if (l->prev->v == v2) { *l1 = l; *l2 = l->prev; @@ -225,7 +225,7 @@ void bmo_bridge_loops_exec(BMesh *bm, BMOperator *op) BMO_slot_buffer_flag_enable(bm, op, "edges", BM_EDGE, EDGE_MARK); - BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { if (!BMO_elem_flag_test(bm, e, EDGE_DONE)) { BMVert *v, *ov; /* BMEdge *e2, *e3, *oe = e; */ /* UNUSED */ @@ -241,7 +241,7 @@ void bmo_bridge_loops_exec(BMesh *bm, BMOperator *op) do { v = BM_edge_other_vert(e2, v); nexte = NULL; - BM_ITER(e3, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e3, &iter, bm, BM_EDGES_OF_VERT, v) { if (e3 != e2 && BMO_elem_flag_test(bm, e3, EDGE_MARK)) { if (nexte == NULL) { nexte = e3; @@ -278,7 +278,7 @@ void bmo_bridge_loops_exec(BMesh *bm, BMOperator *op) BMO_elem_flag_enable(bm, e2, EDGE_DONE); v = BM_edge_other_vert(e2, v); - BM_ITER(e3, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e3, &iter, bm, BM_EDGES_OF_VERT, v) { if (e3 != e2 && BMO_elem_flag_test(bm, e3, EDGE_MARK) && !BMO_elem_flag_test(bm, e3, EDGE_DONE)) { break; } diff --git a/source/blender/bmesh/operators/bmo_create.c b/source/blender/bmesh/operators/bmo_create.c index bf34806ee26..a090536fbe0 100644 --- a/source/blender/bmesh/operators/bmo_create.c +++ b/source/blender/bmesh/operators/bmo_create.c @@ -225,7 +225,7 @@ static int UNUSED_FUNCTION(rotsys_fill_faces)(BMesh *bm, EdgeData *edata, VertDa SmallHash visithash, *hash = &visithash; int i; - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { BMEdge *e2, *starte; BMVert *startv; int rad, ok; @@ -366,7 +366,7 @@ static void init_rotsys(BMesh *bm, EdgeData *edata, VertData *vdata) #define SIGN(n) ((n)<0.0f) - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { BMIter eiter; float no[3], cent[3]; int j, k = 0, totedge = 0; @@ -376,7 +376,7 @@ static void init_rotsys(BMesh *bm, EdgeData *edata, VertData *vdata) BLI_array_empty(edges); - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { if (BMO_elem_flag_test(bm, e, EDGE_MARK)) { BLI_array_append(edges, e); totedge++; @@ -581,7 +581,7 @@ static void init_rotsys(BMesh *bm, EdgeData *edata, VertData *vdata) #if 0 /* create visualizing geometr */ BMVert *lastv; - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { BMVert *v2; BMFace *f; int totedge = BM_vert_edge_count(v); @@ -915,12 +915,12 @@ void bmo_edgenet_fill_exec(BMesh *bm, BMOperator *op) BM_mesh_elem_index_ensure(bm, BM_VERT); - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { BMO_elem_flag_enable(bm, f, ELE_ORIG); } i = 0; - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { BM_elem_index_set(e, i); /* set_inline */ if (!BMO_elem_flag_test(bm, e, EDGE_MARK)) { @@ -937,7 +937,7 @@ void bmo_edgenet_fill_exec(BMesh *bm, BMOperator *op) edge = NULL; group = 0; - BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { /* if restrict is on, only start on faces in the restrict map */ if (use_restrict && !BMO_slot_map_contains(bm, op, "restrict", e)) continue; @@ -1076,7 +1076,7 @@ static BMEdge *edge_next(BMesh *bm, BMEdge *e) int i; for (i = 0; i < 2; i++) { - BM_ITER(e2, &iter, bm, BM_EDGES_OF_VERT, i ? e->v2 : e->v1) { + BM_ITER (e2, &iter, bm, BM_EDGES_OF_VERT, i ? e->v2 : e->v1) { if ((BMO_elem_flag_test(bm, e2, EDGE_MARK)) && (!BMO_elem_flag_test(bm, e2, EDGE_VIS)) && (e2 != e)) @@ -1104,7 +1104,7 @@ void bmo_edgenet_prepare(BMesh *bm, BMOperator *op) /* validate that each edge has at most one other tagged edge in the * disk cycle around each of it's vertices */ - BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { for (i = 0; i < 2; i++) { count = BMO_vert_edge_flags_count(bm, i ? e->v2 : e->v1, EDGE_MARK); if (count > 2) { @@ -1126,7 +1126,7 @@ void bmo_edgenet_prepare(BMesh *bm, BMOperator *op) /* find connected loops within the input edge */ count = 0; while (1) { - BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { if (!BMO_elem_flag_test(bm, e, EDGE_VIS)) { if (BMO_vert_edge_flags_count(bm, e->v1, EDGE_MARK) == 1 || BMO_vert_edge_flags_count(bm, e->v2, EDGE_MARK) == 1) @@ -1280,7 +1280,7 @@ void bmo_contextual_create_exec(BMesh *bm, BMOperator *op) const short mat_nr = BMO_slot_int_get(op, "mat_nr"); /* count number of each element type we were passe */ - BMO_ITER(h, &oiter, bm, op, "geom", BM_VERT|BM_EDGE|BM_FACE) { + BMO_ITER (h, &oiter, bm, op, "geom", BM_VERT|BM_EDGE|BM_FACE) { switch (h->htype) { case BM_VERT: totv++; break; case BM_EDGE: tote++; break; @@ -1314,10 +1314,10 @@ void bmo_contextual_create_exec(BMesh *bm, BMOperator *op) int ok = TRUE; - BMO_ITER(v, &oiter, bm, op, "geom", BM_VERT) { + BMO_ITER (v, &oiter, bm, op, "geom", BM_VERT) { /* count how many flagged edges this vertex uses */ int tot_edges = 0; - BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_VERT, v) { if (BMO_elem_flag_test(bm, e, ELE_NEW)) { tot_edges++; if (tot_edges > 2) { @@ -1392,7 +1392,7 @@ void bmo_contextual_create_exec(BMesh *bm, BMOperator *op) /* now, count how many verts we have */ amount = 0; - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, v, ELE_NEW)) { verts[amount] = v; amount++; @@ -1459,7 +1459,7 @@ void bmo_contextual_create_exec(BMesh *bm, BMOperator *op) BMVert **vert_arr = MEM_mallocN(sizeof(BMVert **) * totv, __func__); int i = 0; - BMO_ITER(v, &oiter, bm, op, "geom", BM_VERT) { + BMO_ITER (v, &oiter, bm, op, "geom", BM_VERT) { vert_arr[i] = v; i++; } diff --git a/source/blender/bmesh/operators/bmo_dissolve.c b/source/blender/bmesh/operators/bmo_dissolve.c index 88b8eef0fbf..b69408480d0 100644 --- a/source/blender/bmesh/operators/bmo_dissolve.c +++ b/source/blender/bmesh/operators/bmo_dissolve.c @@ -93,7 +93,7 @@ void bmo_dissolve_faces_exec(BMesh *bm, BMOperator *op) BMIter viter; BMVert *v; - BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { BMO_elem_flag_set(bm, v, VERT_MARK, (BM_vert_edge_count(v) != 2)); } } @@ -101,7 +101,7 @@ void bmo_dissolve_faces_exec(BMesh *bm, BMOperator *op) BMO_slot_buffer_flag_enable(bm, op, "faces", BM_FACE, FACE_MARK); /* collect region */ - BMO_ITER(f, &oiter, bm, op, "faces", BM_FACE) { + BMO_ITER (f, &oiter, bm, op, "faces", BM_FACE) { if (!BMO_elem_flag_test(bm, f, FACE_MARK)) { continue; @@ -171,7 +171,7 @@ void bmo_dissolve_faces_exec(BMesh *bm, BMOperator *op) BMIter viter; BMVert *v; - BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, v, VERT_MARK)) { if (BM_vert_edge_count(v) == 2) { BM_vert_collapse_edge(bm, v->e, v, TRUE); @@ -208,7 +208,7 @@ void bmo_dissolve_edgeloop_exec(BMesh *bm, BMOperator *op) int i; - BMO_ITER(e, &oiter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &oiter, bm, op, "edges", BM_EDGE) { if (BM_edge_face_pair(e, &fa, &fb)) { BMO_elem_flag_enable(bm, e->v1, VERT_MARK); BMO_elem_flag_enable(bm, e->v2, VERT_MARK); @@ -219,7 +219,7 @@ void bmo_dissolve_edgeloop_exec(BMesh *bm, BMOperator *op) } } - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, v, VERT_MARK) && BM_vert_edge_count(v) == 2) { BLI_array_append(verts, v); } @@ -257,12 +257,12 @@ void bmo_dissolve_edges_exec(BMesh *bm, BMOperator *op) int use_verts = BMO_slot_bool_get(op, "use_verts"); if (use_verts) { - BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { BMO_elem_flag_set(bm, v, VERT_MARK, (BM_vert_edge_count(v) != 2)); } } - BMO_ITER(e, &eiter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &eiter, bm, op, "edges", BM_EDGE) { BMFace *fa, *fb; if (BM_edge_face_pair(e, &fa, &fb)) { @@ -276,7 +276,7 @@ void bmo_dissolve_edges_exec(BMesh *bm, BMOperator *op) } if (use_verts) { - BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, v, VERT_MARK)) { if (BM_vert_edge_count(v) == 2) { BM_vert_collapse_edge(bm, v->e, v, TRUE); diff --git a/source/blender/bmesh/operators/bmo_dupe.c b/source/blender/bmesh/operators/bmo_dupe.c index 24e25ef720f..1a067430239 100644 --- a/source/blender/bmesh/operators/bmo_dupe.c +++ b/source/blender/bmesh/operators/bmo_dupe.c @@ -163,8 +163,8 @@ static BMFace *copy_face(BMOperator *op, BMesh *source_mesh, BMO_elem_flag_enable(target_mesh, target_face, DUPE_NEW); /* copy per-loop custom data */ - BM_ITER(source_loop, &iter, source_mesh, BM_LOOPS_OF_FACE, source_face) { - BM_ITER(target_loop, &iter2, target_mesh, BM_LOOPS_OF_FACE, target_face) { + BM_ITER (source_loop, &iter, source_mesh, BM_LOOPS_OF_FACE, source_face) { + BM_ITER (target_loop, &iter2, target_mesh, BM_LOOPS_OF_FACE, target_face) { if (BLI_ghash_lookup(vhash, source_loop->v) == target_loop->v) { BM_elem_attrs_copy(source_mesh, target_mesh, source_loop, target_loop); break; @@ -201,7 +201,7 @@ static void copy_mesh(BMOperator *op, BMesh *source, BMesh *target) ehash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh dupeops e"); /* duplicate flagged vertices */ - BM_ITER(v, &viter, source, BM_VERTS_OF_MESH, source) { + BM_ITER (v, &viter, source, BM_VERTS_OF_MESH, source) { if (BMO_elem_flag_test(source, v, DUPE_INPUT) && !BMO_elem_flag_test(source, v, DUPE_DONE)) { @@ -210,7 +210,7 @@ static void copy_mesh(BMOperator *op, BMesh *source, BMesh *target) v2 = copy_vertex(source, v, target, vhash); - BM_ITER(f, &iter, source, BM_FACES_OF_VERT, v) { + BM_ITER (f, &iter, source, BM_FACES_OF_VERT, v) { if (BMO_elem_flag_test(source, f, DUPE_INPUT)) { isolated = 0; break; @@ -218,7 +218,7 @@ static void copy_mesh(BMOperator *op, BMesh *source, BMesh *target) } if (isolated) { - BM_ITER(e, &iter, source, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &iter, source, BM_EDGES_OF_VERT, v) { if (BMO_elem_flag_test(source, e, DUPE_INPUT)) { isolated = 0; break; @@ -235,7 +235,7 @@ static void copy_mesh(BMOperator *op, BMesh *source, BMesh *target) } /* now we dupe all the edges */ - BM_ITER(e, &eiter, source, BM_EDGES_OF_MESH, source) { + BM_ITER (e, &eiter, source, BM_EDGES_OF_MESH, source) { if (BMO_elem_flag_test(source, e, DUPE_INPUT) && !BMO_elem_flag_test(source, e, DUPE_DONE)) { @@ -255,10 +255,10 @@ static void copy_mesh(BMOperator *op, BMesh *source, BMesh *target) } /* first we dupe all flagged faces and their elements from source */ - BM_ITER(f, &fiter, source, BM_FACES_OF_MESH, source) { + BM_ITER (f, &fiter, source, BM_FACES_OF_MESH, source) { if (BMO_elem_flag_test(source, f, DUPE_INPUT)) { /* vertex pass */ - BM_ITER(v, &viter, source, BM_VERTS_OF_FACE, f) { + BM_ITER (v, &viter, source, BM_VERTS_OF_FACE, f) { if (!BMO_elem_flag_test(source, v, DUPE_DONE)) { copy_vertex(source, v, target, vhash); BMO_elem_flag_enable(source, v, DUPE_DONE); @@ -266,7 +266,7 @@ static void copy_mesh(BMOperator *op, BMesh *source, BMesh *target) } /* edge pass */ - BM_ITER(e, &eiter, source, BM_EDGES_OF_FACE, f) { + BM_ITER (e, &eiter, source, BM_EDGES_OF_FACE, f) { if (!BMO_elem_flag_test(source, e, DUPE_DONE)) { copy_edge(op, source, e, target, vhash, ehash); BMO_elem_flag_enable(source, e, DUPE_DONE); diff --git a/source/blender/bmesh/operators/bmo_edgesplit.c b/source/blender/bmesh/operators/bmo_edgesplit.c index dd03401ab57..05703ce1933 100644 --- a/source/blender/bmesh/operators/bmo_edgesplit.c +++ b/source/blender/bmesh/operators/bmo_edgesplit.c @@ -60,7 +60,7 @@ static void bm_edgesplit_validate_seams(BMesh *bm, BMOperator *op) vtouch = MEM_callocN(sizeof(char) * bm->totvert, __func__); /* tag all boundary verts so as not to untag an edge which is inbetween only 2 faces [] */ - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { /* unrelated to flag assignment in this function - since this is the * only place we loop over all edges, disable tag */ @@ -81,14 +81,14 @@ static void bm_edgesplit_validate_seams(BMesh *bm, BMOperator *op) /* single marked edges unconnected to any other marked edges * are illegal, go through and unmark them */ - BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { /* lame, but we don't want the count to exceed 255, * so just count to 2, its all we need */ unsigned char *vt; vt = &vtouch[BM_elem_index_get(e->v1)]; if (*vt < 2) (*vt)++; vt = &vtouch[BM_elem_index_get(e->v2)]; if (*vt < 2) (*vt)++; } - BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { if (vtouch[BM_elem_index_get(e->v1)] == 1 && vtouch[BM_elem_index_get(e->v2)] == 1) { @@ -118,7 +118,7 @@ void bmo_edgesplit_exec(BMesh *bm, BMOperator *op) * This is needed so we don't split off the edge but then none of its verts which * would leave a duplicate edge. */ - BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { if (UNLIKELY((BMO_elem_flag_test(bm, e->v1, VERT_SEAM) == FALSE && (BMO_elem_flag_test(bm, e->v2, VERT_SEAM) == FALSE)))) { @@ -130,7 +130,7 @@ void bmo_edgesplit_exec(BMesh *bm, BMOperator *op) bm_edgesplit_validate_seams(bm, op); - BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { if (BMO_elem_flag_test(bm, e, EDGE_SEAM)) { /* this flag gets copied so we can be sure duplicate edges get it too (important) */ BM_elem_flag_enable(e, BM_ELEM_INTERNAL_TAG); @@ -146,7 +146,7 @@ void bmo_edgesplit_exec(BMesh *bm, BMOperator *op) } if (use_verts) { - BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { if (BMO_elem_flag_test(bm, e->v1, VERT_SEAM) == FALSE) { BM_elem_flag_disable(e->v1, BM_ELEM_TAG); } @@ -156,7 +156,7 @@ void bmo_edgesplit_exec(BMesh *bm, BMOperator *op) } } - BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { if (BMO_elem_flag_test(bm, e, EDGE_SEAM)) { if (BM_elem_flag_test(e->v1, BM_ELEM_TAG)) { BM_elem_flag_disable(e->v1, BM_ELEM_TAG); diff --git a/source/blender/bmesh/operators/bmo_extrude.c b/source/blender/bmesh/operators/bmo_extrude.c index ef0833120c5..af62abaeec9 100644 --- a/source/blender/bmesh/operators/bmo_extrude.c +++ b/source/blender/bmesh/operators/bmo_extrude.c @@ -56,13 +56,13 @@ void bmo_extrude_face_indiv_exec(BMesh *bm, BMOperator *op) BLI_array_declare(edges); int i; - BMO_ITER(f, &siter, bm, op, "faces", BM_FACE) { + BMO_ITER (f, &siter, bm, op, "faces", BM_FACE) { BLI_array_empty(edges); BLI_array_growitems(edges, f->len); i = 0; firstv = lastv = NULL; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { v = BM_vert_create(bm, l->v->co, l->v); /* skip on the first iteration */ @@ -93,7 +93,7 @@ void bmo_extrude_face_indiv_exec(BMesh *bm, BMOperator *op) BM_elem_attrs_copy(bm, bm, f, f2); l2 = BM_iter_new(&liter2, bm, BM_LOOPS_OF_FACE, f2); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { BM_elem_attrs_copy(bm, bm, l, l2); l3 = l->next; @@ -175,7 +175,7 @@ void bmo_extrude_edge_only_exec(BMesh *bm, BMOperator *op) BMEdge *e, *e2; BMFace *f; - BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { BMO_elem_flag_enable(bm, e, EXT_INPUT); BMO_elem_flag_enable(bm, e->v1, EXT_INPUT); BMO_elem_flag_enable(bm, e->v2, EXT_INPUT); @@ -258,7 +258,7 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) /* if one flagged face is bordered by an un-flagged face, then we delete * original geometry unless caller explicitly asked to keep it. */ if (!BMO_slot_bool_get(op, "alwayskeeporig")) { - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { int edge_face_tot; @@ -269,7 +269,7 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) found = FALSE; /* found a face that isn't input? */ edge_face_tot = 0; /* edge/face count */ - BM_ITER(f, &fiter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_EDGE, e) { if (!BMO_elem_flag_test(bm, f, EXT_INPUT)) { found = TRUE; delorig = TRUE; @@ -287,10 +287,10 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) } /* calculate verts to delete */ - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { found = FALSE; - BM_ITER(e, &viter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &viter, bm, BM_EDGES_OF_VERT, v) { if (!BMO_elem_flag_test(bm, e, EXT_INPUT) || !BMO_elem_flag_test(bm, e, EXT_DEL)) { found = TRUE; break; @@ -299,7 +299,7 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) /* avoid an extra loop */ if (found == TRUE) { - BM_ITER(f, &viter, bm, BM_FACES_OF_VERT, v) { + BM_ITER (f, &viter, bm, BM_FACES_OF_VERT, v) { if (!BMO_elem_flag_test(bm, f, EXT_INPUT)) { found = TRUE; break; @@ -312,7 +312,7 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) } } - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, f, EXT_INPUT)) { BMO_elem_flag_enable(bm, f, EXT_DEL); } @@ -335,7 +335,7 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) /* if not delorig, reverse loops of original face */ if (!delorig) { - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, f, EXT_INPUT)) { BM_face_normal_flip(bm, f); } @@ -418,18 +418,18 @@ static void calc_solidify_normals(BMesh *bm) /* can't use BM_edge_face_count because we need to count only marked faces */ int *edge_face_count = MEM_callocN(sizeof(int) * bm->totedge, __func__); - BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { BM_elem_flag_enable(v, BM_ELEM_TAG); } BM_mesh_elem_index_ensure(bm, BM_EDGE); - BM_ITER(f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { if (!BMO_elem_flag_test(bm, f, FACE_MARK)) { continue; } - BM_ITER(e, &eiter, bm, BM_EDGES_OF_FACE, f) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_FACE, f) { /* And mark all edges and vertices on the * marked faces */ @@ -440,7 +440,7 @@ static void calc_solidify_normals(BMesh *bm) } } - BM_ITER(e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { if (!BMO_elem_flag_test(bm, e, EDGE_MARK)) { continue; } @@ -458,7 +458,7 @@ static void calc_solidify_normals(BMesh *bm) MEM_freeN(edge_face_count); edge_face_count = NULL; /* don't re-use */ - BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { if (!BM_vert_is_manifold(v)) { BMO_elem_flag_enable(bm, v, VERT_NONMAN); continue; @@ -469,7 +469,7 @@ static void calc_solidify_normals(BMesh *bm) } } - BM_ITER(e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { /* If the edge is not part of a the solidify region * its normal should not be considered */ @@ -485,7 +485,7 @@ static void calc_solidify_normals(BMesh *bm) f1 = f2 = NULL; - BM_ITER(f, &fiter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_EDGE, e) { if (BMO_elem_flag_test(bm, f, FACE_MARK)) { if (f1 == NULL) { f1 = f; @@ -530,7 +530,7 @@ static void calc_solidify_normals(BMesh *bm) } /* normalize accumulated vertex normal */ - BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { if (!BMO_elem_flag_test(bm, v, VERT_MARK)) { continue; } @@ -542,7 +542,7 @@ static void calc_solidify_normals(BMesh *bm) else if (normalize_v3(v->no) == 0.0f && !BM_elem_flag_test(v, BM_ELEM_TAG)) { /* exceptional case, totally flat. use the normal * of any marked face around the vertex */ - BM_ITER(f, &fiter, bm, BM_FACES_OF_VERT, v) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_VERT, v) { if (BMO_elem_flag_test(bm, f, FACE_MARK)) { break; } @@ -571,13 +571,13 @@ static void solidify_add_thickness(BMesh *bm, const float dist) BM_mesh_elem_index_ensure(bm, BM_VERT); - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BMO_elem_flag_test(bm, f, FACE_MARK)) { continue; } BLI_array_growitems(verts, f->len); - BM_ITER_INDEX(l, &loopIter, bm, BM_LOOPS_OF_FACE, f, i) { + BM_ITER_INDEX (l, &loopIter, bm, BM_LOOPS_OF_FACE, f, i) { verts[i] = l->v->co; } @@ -585,7 +585,7 @@ static void solidify_add_thickness(BMesh *bm, const float dist) angle_poly_v3(face_angles, (const float **)verts, f->len); i = 0; - BM_ITER(l, &loopIter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &loopIter, bm, BM_LOOPS_OF_FACE, f) { v = l->v; index = BM_elem_index_get(v); vert_accum[index] += face_angles[i]; @@ -597,7 +597,7 @@ static void solidify_add_thickness(BMesh *bm, const float dist) BLI_array_empty(face_angles); } - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { index = BM_elem_index_get(v); if (vert_accum[index]) { /* zero if unselected */ madd_v3_v3fl(v->co, v->no, dist * (vert_angles[index] / vert_accum[index])); diff --git a/source/blender/bmesh/operators/bmo_inset.c b/source/blender/bmesh/operators/bmo_inset.c index 1c823e7590c..38fa7237e9c 100644 --- a/source/blender/bmesh/operators/bmo_inset.c +++ b/source/blender/bmesh/operators/bmo_inset.c @@ -122,7 +122,7 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) /* first count all inset edges we will split */ /* fill in array and initialize tagging */ - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { if ( /* tag if boundary is enabled */ (use_boundary && BM_edge_is_boundary(e) && BM_elem_flag_test(e->l->f, BM_ELEM_TAG)) || @@ -152,7 +152,7 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) /* fill in array and initialize tagging */ es = edge_info; - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { i = BM_elem_index_get(e); if (i != -1) { /* calc edge-split info */ @@ -246,7 +246,7 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) int vecpair[2]; /* find adjacent */ - BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v_split) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_VERT, v_split) { if (BM_elem_flag_test(e, BM_ELEM_TAG) && e->l && BM_elem_flag_test(e->l->f, BM_ELEM_TAG)) { @@ -411,7 +411,7 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) if (r_vout_len > 2) { int ok = TRUE; /* last step, NULL this vertex if has a tagged face */ - BM_ITER(f, &iter, bm, BM_FACES_OF_VERT, v_split) { + BM_ITER (f, &iter, bm, BM_FACES_OF_VERT, v_split) { if (BM_elem_flag_test(f, BM_ELEM_TAG)) { ok = FALSE; break; diff --git a/source/blender/bmesh/operators/bmo_join_triangles.c b/source/blender/bmesh/operators/bmo_join_triangles.c index 01028116da3..a31b635021b 100644 --- a/source/blender/bmesh/operators/bmo_join_triangles.c +++ b/source/blender/bmesh/operators/bmo_join_triangles.c @@ -237,15 +237,15 @@ void bmo_join_triangles_exec(BMesh *bm, BMOperator *op) int i, totedge; /* flag all edges of all input face */ - BMO_ITER(f1, &siter, bm, op, "faces", BM_FACE) { + BMO_ITER (f1, &siter, bm, op, "faces", BM_FACE) { BMO_elem_flag_enable(bm, f1, FACE_INPUT); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f1) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f1) { BMO_elem_flag_enable(bm, l->e, EDGE_MARK); } } /* unflag edges that are invalid; e.g. aren't surrounded by triangle */ - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (!BMO_elem_flag_test(bm, e, EDGE_MARK)) continue; @@ -266,7 +266,7 @@ void bmo_join_triangles_exec(BMesh *bm, BMOperator *op) } i = 0; - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { BMVert *v1, *v2, *v3, *v4; BMFace *f1, *f2; float measure; @@ -323,7 +323,7 @@ void bmo_join_triangles_exec(BMesh *bm, BMOperator *op) BMO_elem_flag_enable(bm, e, EDGE_CHOSEN); } - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (!BMO_elem_flag_test(bm, e, EDGE_CHOSEN)) continue; @@ -332,7 +332,7 @@ void bmo_join_triangles_exec(BMesh *bm, BMOperator *op) BM_faces_join_pair(bm, f1, f2, e, TRUE); } - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, e, EDGE_MARK)) { /* ok, this edge wasn't merged, check if it's * in a 2-tri-pair island, and if so merg */ @@ -344,7 +344,7 @@ void bmo_join_triangles_exec(BMesh *bm, BMOperator *op) continue; for (i = 0; i < 2; i++) { - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, i ? f2 : f1) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, i ? f2 : f1) { if (l->e != e && BMO_elem_flag_test(bm, l->e, EDGE_MARK)) { break; } diff --git a/source/blender/bmesh/operators/bmo_mirror.c b/source/blender/bmesh/operators/bmo_mirror.c index 17a00f5e095..003cb49164f 100644 --- a/source/blender/bmesh/operators/bmo_mirror.c +++ b/source/blender/bmesh/operators/bmo_mirror.c @@ -70,7 +70,7 @@ void bmo_mirror_exec(BMesh *bm, BMOperator *op) /* create old -> new mappin */ i = 0; /* v2 = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); */ /* UNUSED */ - BMO_ITER(v, &siter, bm, &dupeop, "newout", BM_VERT) { + BMO_ITER (v, &siter, bm, &dupeop, "newout", BM_VERT) { BLI_array_growone(vmap); vmap[i] = v; /* v2 = BM_iter_step(&iter); */ /* UNUSED */ @@ -101,8 +101,8 @@ void bmo_mirror_exec(BMesh *bm, BMOperator *op) int totlayer; BMIter liter; - BMO_ITER(f, &siter, bm, &dupeop, "newout", BM_FACE) { - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BMO_ITER (f, &siter, bm, &dupeop, "newout", BM_FACE) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { totlayer = CustomData_number_of_layers(&bm->ldata, CD_MLOOPUV); for (i = 0; i < totlayer; i++) { luv = CustomData_bmesh_get_n(&bm->ldata, l->head.data, CD_MLOOPUV, i); diff --git a/source/blender/bmesh/operators/bmo_primitive.c b/source/blender/bmesh/operators/bmo_primitive.c index 4e89b7b7efe..ec2504c3976 100644 --- a/source/blender/bmesh/operators/bmo_primitive.c +++ b/source/blender/bmesh/operators/bmo_primitive.c @@ -370,7 +370,7 @@ void bmo_create_uvsphere_exec(BMesh *bm, BMOperator *op) } /* and now do imat */ - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, eve, VERT_MARK)) { mul_m4_v3(mat, eve->co); } @@ -415,7 +415,7 @@ void bmo_create_icosphere_exec(BMesh *bm, BMOperator *op) eftemp = BM_face_create_quad_tri(bm, v1, v2, v3, NULL, NULL, FALSE); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, eftemp) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, eftemp) { BMO_elem_flag_enable(bm, l->e, EDGE_MARK); } @@ -437,7 +437,7 @@ void bmo_create_icosphere_exec(BMesh *bm, BMOperator *op) } /* must transform after because of sphere subdivision */ - BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, v, VERT_MARK)) { mul_m4_v3(mat, v->co); } diff --git a/source/blender/bmesh/operators/bmo_removedoubles.c b/source/blender/bmesh/operators/bmo_removedoubles.c index d126da52b22..3eec9437299 100644 --- a/source/blender/bmesh/operators/bmo_removedoubles.c +++ b/source/blender/bmesh/operators/bmo_removedoubles.c @@ -43,7 +43,7 @@ static void remdoubles_splitface(BMFace *f, BMesh *bm, BMOperator *op) BMVert *v2, *doub; int split = FALSE; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { v2 = BMO_slot_map_ptr_get(bm, op, "targetmap", l->v); /* ok: if v2 is NULL (e.g. not in the map) then it's * a target vert, otherwise it's a double */ @@ -108,7 +108,7 @@ void bmo_weldverts_exec(BMesh *bm, BMOperator *op) int a, b; /* mark merge verts for deletion */ - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { if ((v2 = BMO_slot_map_ptr_get(bm, op, "targetmap", v))) { BMO_elem_flag_enable(bm, v, ELE_DEL); @@ -119,11 +119,11 @@ void bmo_weldverts_exec(BMesh *bm, BMOperator *op) /* check if any faces are getting their own corners merged together, split face if so */ - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { remdoubles_splitface(f, bm, op); } - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, e->v1, ELE_DEL) || BMO_elem_flag_test(bm, e->v2, ELE_DEL)) { v = BMO_slot_map_ptr_get(bm, op, "targetmap", e->v1); v2 = BMO_slot_map_ptr_get(bm, op, "targetmap", e->v2); @@ -143,9 +143,9 @@ void bmo_weldverts_exec(BMesh *bm, BMOperator *op) } /* BMESH_TODO, stop abusing face index here */ - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { BM_elem_index_set(f, 0); /* set_dirty! */ - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { if (BMO_elem_flag_test(bm, l->v, ELE_DEL)) { BMO_elem_flag_enable(bm, f, FACE_MARK|ELE_DEL); } @@ -158,7 +158,7 @@ void bmo_weldverts_exec(BMesh *bm, BMOperator *op) /* faces get "modified" by creating new faces here, then at the end the old faces are deleted */ - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BMO_elem_flag_test(bm, f, FACE_MARK)) continue; @@ -170,7 +170,7 @@ void bmo_weldverts_exec(BMesh *bm, BMOperator *op) BLI_array_empty(edges); BLI_array_empty(loops); a = 0; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { v = l->v; v2 = l->next->v; if (BMO_elem_flag_test(bm, v, ELE_DEL)) { @@ -218,7 +218,7 @@ void bmo_weldverts_exec(BMesh *bm, BMOperator *op) BM_elem_attrs_copy(bm, bm, f, f2); a = 0; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f2) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f2) { l2 = loops[a]; BM_elem_attrs_copy(bm, bm, l2, l); @@ -269,7 +269,7 @@ void bmo_pointmerge_facedata_exec(BMesh *bm, BMOperator *op) return; fac = 1.0f / tot; - BM_ITER(l, &iter, bm, BM_LOOPS_OF_VERT, snapv) { + BM_ITER (l, &iter, bm, BM_LOOPS_OF_VERT, snapv) { if (!firstl) { firstl = l; } @@ -290,8 +290,8 @@ void bmo_pointmerge_facedata_exec(BMesh *bm, BMOperator *op) } } - BMO_ITER(v, &siter, bm, op, "verts", BM_VERT) { - BM_ITER(l, &iter, bm, BM_LOOPS_OF_VERT, v) { + BMO_ITER (v, &siter, bm, op, "verts", BM_VERT) { + BM_ITER (l, &iter, bm, BM_LOOPS_OF_VERT, v) { if (l == firstl) { continue; } @@ -318,8 +318,8 @@ void bmo_vert_average_facedata_exec(BMesh *bm, BMOperator *op) type = bm->ldata.layers[i].type; CustomData_data_initminmax(type, &min, &max); - BMO_ITER(v, &siter, bm, op, "verts", BM_VERT) { - BM_ITER(l, &iter, bm, BM_LOOPS_OF_VERT, v) { + BMO_ITER (v, &siter, bm, op, "verts", BM_VERT) { + BM_ITER (l, &iter, bm, BM_LOOPS_OF_VERT, v) { block = CustomData_bmesh_get_layer_n(&bm->ldata, l->head.data, i); CustomData_data_dominmax(type, block, &min, &max); } @@ -329,8 +329,8 @@ void bmo_vert_average_facedata_exec(BMesh *bm, BMOperator *op) CustomData_data_multiply(type, &max, 0.5f); CustomData_data_add(type, &min, &max); - BMO_ITER(v, &siter, bm, op, "verts", BM_VERT) { - BM_ITER(l, &iter, bm, BM_LOOPS_OF_VERT, v) { + BMO_ITER (v, &siter, bm, op, "verts", BM_VERT) { + BM_ITER (l, &iter, bm, BM_LOOPS_OF_VERT, v) { block = CustomData_bmesh_get_layer_n(&bm->ldata, l->head.data, i); CustomData_data_copy_value(type, &min, block); } @@ -350,7 +350,7 @@ void bmo_pointmerge_exec(BMesh *bm, BMOperator *op) //BMO_op_callf(bm, "collapse_uvs edges=%s", op, "edges"); BMO_op_init(bm, &weldop, "weldverts"); - BMO_ITER(v, &siter, bm, op, "verts", BM_VERT) { + BMO_ITER (v, &siter, bm, op, "verts", BM_VERT) { if (!snapv) { snapv = v; copy_v3_v3(snapv->co, vec); @@ -384,7 +384,7 @@ void bmo_collapse_exec(BMesh *bm, BMOperator *op) BMW_FLAG_NOP, /* no need to use BMW_FLAG_TEST_HIDDEN, already marked data */ BMW_NIL_LAY); - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (!BMO_elem_flag_test(bm, e, EDGE_MARK)) continue; @@ -444,8 +444,8 @@ static void bmo_collapsecon_do_layer(BMesh *bm, BMOperator *op, int layer) BMW_FLAG_NOP, /* no need to use BMW_FLAG_TEST_HIDDEN, already marked data */ layer); - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { if (BMO_elem_flag_test(bm, l->e, EDGE_MARK)) { /* walk */ BLI_array_empty(blocks); @@ -500,7 +500,7 @@ void bmesh_finddoubles_common(BMesh *bm, BMOperator *op, BMOperator *optarget, c dist3 = dist * 3.0f; i = 0; - BMO_ITER(v, &oiter, bm, op, "verts", BM_VERT) { + BMO_ITER (v, &oiter, bm, op, "verts", BM_VERT) { BLI_array_growone(verts); verts[i++] = v; } @@ -583,7 +583,7 @@ void bmo_automerge_exec(BMesh *bm, BMOperator *op) * can be merged away into any other verts. Mark all other verts * as VERT_KEEP. */ BMO_slot_buffer_flag_enable(bm, op, "verts", BM_VERT, VERT_IN); - BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { if (!BMO_elem_flag_test(bm, v, VERT_IN)) { BMO_elem_flag_enable(bm, v, VERT_KEEP); } diff --git a/source/blender/bmesh/operators/bmo_slide.c b/source/blender/bmesh/operators/bmo_slide.c index 7b7b0638a3f..4b1c2b56f05 100644 --- a/source/blender/bmesh/operators/bmo_slide.c +++ b/source/blender/bmesh/operators/bmo_slide.c @@ -68,7 +68,7 @@ void bmo_vertex_slide_exec(BMesh *bm, BMOperator *op) } /* Count selected edges */ - BMO_ITER(h, &oiter, bm, op, "edge", BM_VERT | BM_EDGE) { + BMO_ITER (h, &oiter, bm, op, "edge", BM_VERT | BM_EDGE) { switch (h->htype) { case BM_EDGE: selected_edges++; @@ -88,7 +88,7 @@ void bmo_vertex_slide_exec(BMesh *bm, BMOperator *op) } /* Make sure we get the correct edge. */ - BM_ITER(edge, &iter, bm, BM_EDGES_OF_VERT, vertex) { + BM_ITER (edge, &iter, bm, BM_EDGES_OF_VERT, vertex) { if (BMO_elem_flag_test(bm, edge, EDGE_MARK) && BM_vert_in_edge(edge, vertex)) { slide_edge = edge; break; diff --git a/source/blender/bmesh/operators/bmo_subdivide.c b/source/blender/bmesh/operators/bmo_subdivide.c index 335b0257572..3d148d6268f 100644 --- a/source/blender/bmesh/operators/bmo_subdivide.c +++ b/source/blender/bmesh/operators/bmo_subdivide.c @@ -742,7 +742,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) BM_data_layer_add(bmesh, &bmesh->vdata, CD_SHAPEKEY); skey = CustomData_number_of_layers(&bmesh->vdata, CD_SHAPEKEY) - 1; - BM_ITER(v, &viter, bmesh, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, bmesh, BM_VERTS_OF_MESH, NULL) { float *co = CustomData_bmesh_get_n(&bmesh->vdata, v->head.data, CD_SHAPEKEY, skey); copy_v3_v3(co, v->co); } @@ -768,7 +768,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) BM_EDGE, EDGE_PERCENT); - BM_ITER(face, &fiter, bmesh, BM_FACES_OF_MESH, NULL) { + BM_ITER (face, &fiter, bmesh, BM_FACES_OF_MESH, NULL) { BMEdge *e1 = NULL, *e2 = NULL; float vec1[3], vec2[3]; @@ -783,7 +783,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) matched = 0; totesel = 0; - BM_ITER_INDEX(nl, &liter, bmesh, BM_LOOPS_OF_FACE, face, i) { + BM_ITER_INDEX (nl, &liter, bmesh, BM_LOOPS_OF_FACE, face, i) { edges[i] = nl->e; verts[i] = nl->v; @@ -894,7 +894,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) } /* copy original-geometry displacements to current coordinates */ - BM_ITER(v, &viter, bmesh, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, bmesh, BM_VERTS_OF_MESH, NULL) { float *co = CustomData_bmesh_get_n(&bmesh->vdata, v->head.data, CD_SHAPEKEY, skey); copy_v3_v3(v->co, co); } @@ -916,7 +916,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) BLI_array_empty(splits); /* for case of two edges, connecting them shouldn't be too hard */ - BM_ITER(l, &liter, bmesh, BM_LOOPS_OF_FACE, face) { + BM_ITER (l, &liter, bmesh, BM_LOOPS_OF_FACE, face) { BLI_array_growone(loops); loops[BLI_array_count(loops) - 1] = l; } @@ -1003,7 +1003,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) } /* copy original-geometry displacements to current coordinates */ - BM_ITER(v, &viter, bmesh, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, bmesh, BM_VERTS_OF_MESH, NULL) { float *co = CustomData_bmesh_get_n(&bmesh->vdata, v->head.data, CD_SHAPEKEY, skey); copy_v3_v3(v->co, co); } @@ -1064,7 +1064,7 @@ void BM_mesh_esubdivideflag(Object *UNUSED(obedit), BMesh *bm, int flag, float s BMEdge *e; BMIter eiter; - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, ele) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, ele) { if (!BM_elem_flag_test(e, BM_ELEM_SELECT) && BM_elem_flag_test(e->v1, BM_ELEM_SELECT) && BM_elem_flag_test(e->v2, BM_ELEM_SELECT)) @@ -1101,7 +1101,7 @@ void bmo_edgebisect_exec(BMesh *bm, BMOperator *op) params.origkey = skey; /* go through and split edges */ - BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { bm_subdivide_multicut(bm, e, ¶ms, e->v1, e->v2); } diff --git a/source/blender/bmesh/operators/bmo_triangulate.c b/source/blender/bmesh/operators/bmo_triangulate.c index fd6106a11c9..33c4cfc45e8 100644 --- a/source/blender/bmesh/operators/bmo_triangulate.c +++ b/source/blender/bmesh/operators/bmo_triangulate.c @@ -94,7 +94,7 @@ void bmo_beautify_fill_exec(BMesh *bm, BMOperator *op) BMO_slot_buffer_flag_enable(bm, op, "constrain_edges", BM_EDGE, EDGE_MARK); - BMO_ITER(f, &siter, bm, op, "faces", BM_FACE) { + BMO_ITER (f, &siter, bm, op, "faces", BM_FACE) { if (f->len == 3) { BMO_elem_flag_enable(bm, f, FACE_MARK); } @@ -103,7 +103,7 @@ void bmo_beautify_fill_exec(BMesh *bm, BMOperator *op) while (!stop) { stop = 1; - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { BMVert *v1, *v2, *v3, *v4; if (!BM_edge_is_manifold(e) || BMO_elem_flag_test(bm, e, EDGE_MARK)) { @@ -175,7 +175,7 @@ void bmo_triangle_fill_exec(BMesh *bm, BMOperator *op) BLI_begin_edgefill(&sf_ctx); - BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { BMO_elem_flag_enable(bm, e, EDGE_MARK); if (!BLI_smallhash_haskey(&hash, (uintptr_t)e->v1)) { @@ -206,7 +206,7 @@ void bmo_triangle_fill_exec(BMesh *bm, BMOperator *op) BMIter liter; BMO_elem_flag_enable(bm, f, ELE_NEW); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { if (!BMO_elem_flag_test(bm, l->e, EDGE_MARK)) { BMO_elem_flag_enable(bm, l->e, ELE_NEW); } diff --git a/source/blender/bmesh/operators/bmo_utils.c b/source/blender/bmesh/operators/bmo_utils.c index ea1fc5171e5..b35bcc8eaec 100644 --- a/source/blender/bmesh/operators/bmo_utils.c +++ b/source/blender/bmesh/operators/bmo_utils.c @@ -59,7 +59,7 @@ void bmo_transform_exec(BMesh *bm, BMOperator *op) BMO_slot_mat4_get(op, "mat", mat); - BMO_ITER(v, &iter, bm, op, "verts", BM_VERT) { + BMO_ITER (v, &iter, bm, op, "verts", BM_VERT) { mul_m4_v3(mat, v->co); } } @@ -113,7 +113,7 @@ void bmo_reversefaces_exec(BMesh *bm, BMOperator *op) BMOIter siter; BMFace *f; - BMO_ITER(f, &siter, bm, op, "faces", BM_FACE) { + BMO_ITER (f, &siter, bm, op, "faces", BM_FACE) { BM_face_normal_flip(bm, f); } } @@ -131,7 +131,7 @@ void bmo_edgerotate_exec(BMesh *bm, BMOperator *op) #define EDGE_OUT 1 #define FACE_TAINT 1 - BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) { + BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { /** * this ends up being called twice, could add option to not to call check in * #BM_edge_rotate to get some extra speed */ @@ -180,14 +180,14 @@ static void bmo_regionextend_extend(BMesh *bm, BMOperator *op, int usefaces) BMOIter siter; if (!usefaces) { - BMO_ITER(v, &siter, bm, op, "geom", BM_VERT) { - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BMO_ITER (v, &siter, bm, op, "geom", BM_VERT) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { if (!BMO_elem_flag_test(bm, e, SEL_ORIG)) break; } if (e) { - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { BMO_elem_flag_enable(bm, e, SEL_FLAG); BMO_elem_flag_enable(bm, BM_edge_other_vert(e, v), SEL_FLAG); } @@ -199,9 +199,9 @@ static void bmo_regionextend_extend(BMesh *bm, BMOperator *op, int usefaces) BMFace *f, *f2; BMLoop *l; - BMO_ITER(f, &siter, bm, op, "geom", BM_FACE) { - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { - BM_ITER(f2, &fiter, bm, BM_FACES_OF_EDGE, l->e) { + BMO_ITER (f, &siter, bm, op, "geom", BM_FACE) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (f2, &fiter, bm, BM_FACES_OF_EDGE, l->e) { if (!BMO_elem_flag_test(bm, f2, SEL_ORIG)) { BMO_elem_flag_enable(bm, f2, SEL_FLAG); } @@ -219,8 +219,8 @@ static void bmo_regionextend_constrict(BMesh *bm, BMOperator *op, int usefaces) BMOIter siter; if (!usefaces) { - BMO_ITER(v, &siter, bm, op, "geom", BM_VERT) { - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BMO_ITER (v, &siter, bm, op, "geom", BM_VERT) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { if (!BMO_elem_flag_test(bm, e, SEL_ORIG)) break; } @@ -228,7 +228,7 @@ static void bmo_regionextend_constrict(BMesh *bm, BMOperator *op, int usefaces) if (e) { BMO_elem_flag_enable(bm, v, SEL_FLAG); - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { BMO_elem_flag_enable(bm, e, SEL_FLAG); } @@ -240,9 +240,9 @@ static void bmo_regionextend_constrict(BMesh *bm, BMOperator *op, int usefaces) BMFace *f, *f2; BMLoop *l; - BMO_ITER(f, &siter, bm, op, "geom", BM_FACE) { - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { - BM_ITER(f2, &fiter, bm, BM_FACES_OF_EDGE, l->e) { + BMO_ITER (f, &siter, bm, op, "geom", BM_FACE) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (f2, &fiter, bm, BM_FACES_OF_EDGE, l->e) { if (!BMO_elem_flag_test(bm, f2, SEL_ORIG)) { BMO_elem_flag_enable(bm, f, SEL_FLAG); break; @@ -312,7 +312,7 @@ void bmo_righthandfaces_exec(BMesh *bm, BMOperator *op) BMO_slot_buffer_flag_enable(bm, op, "faces", BM_FACE, FACE_FLAG); /* find a starting face */ - BMO_ITER(f, &siter, bm, op, "faces", BM_FACE) { + BMO_ITER (f, &siter, bm, op, "faces", BM_FACE) { /* clear dirty flag */ BM_elem_flag_disable(f, BM_ELEM_TAG); @@ -358,8 +358,8 @@ void bmo_righthandfaces_exec(BMesh *bm, BMOperator *op) f = fstack[i]; i--; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { - BM_ITER(l2, &liter2, bm, BM_LOOPS_OF_LOOP, l) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l2, &liter2, bm, BM_LOOPS_OF_LOOP, l) { if (!BMO_elem_flag_test(bm, l2->f, FACE_FLAG) || l2 == l) continue; @@ -395,7 +395,7 @@ void bmo_righthandfaces_exec(BMesh *bm, BMOperator *op) BLI_array_free(fstack); /* check if we have faces yet to do. if so, recurse */ - BMO_ITER(f, &siter, bm, op, "faces", BM_FACE) { + BMO_ITER (f, &siter, bm, op, "faces", BM_FACE) { if (!BMO_elem_flag_test(bm, f, FACE_VIS)) { bmo_righthandfaces_exec(bm, op); break; @@ -419,12 +419,12 @@ void bmo_vertexsmooth_exec(BMesh *bm, BMOperator *op) clipz = BMO_slot_bool_get(op, "mirror_clip_z"); i = 0; - BMO_ITER(v, &siter, bm, op, "verts", BM_VERT) { + BMO_ITER (v, &siter, bm, op, "verts", BM_VERT) { BLI_array_growone(cos); co = cos[i]; j = 0; - BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_VERT, v) { co2 = BM_edge_other_vert(e, v)->co; add_v3_v3v3(co, co, co2); j += 1; @@ -450,7 +450,7 @@ void bmo_vertexsmooth_exec(BMesh *bm, BMOperator *op) } i = 0; - BMO_ITER(v, &siter, bm, op, "verts", BM_VERT) { + BMO_ITER (v, &siter, bm, op, "verts", BM_VERT) { copy_v3_v3(v->co, cos[i]); i++; } @@ -475,7 +475,7 @@ static float ngon_fake_area(BMesh *bm, BMFace *f) BM_face_center_mean_calc(bm, f, c); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { if (num_verts == 0) { copy_v3_v3(v, l->v->co); copy_v3_v3(sv, l->v->co); @@ -533,7 +533,7 @@ void bmo_similarfaces_exec(BMesh *bm, BMOperator *op) * so the overall complexity will be less than $O(mn)$ where is the total number of selected faces, * and n is the total number of faces */ - BMO_ITER(fs, &fs_iter, bm, op, "faces", BM_FACE) { + BMO_ITER (fs, &fs_iter, bm, op, "faces", BM_FACE) { if (!BMO_elem_flag_test(bm, fs, FACE_MARK)) { /* is this really needed ? */ BMO_elem_flag_enable(bm, fs, FACE_MARK); num_sels++; @@ -545,7 +545,7 @@ void bmo_similarfaces_exec(BMesh *bm, BMOperator *op) f_ext = (SimSel_FaceExt *)MEM_callocN(sizeof(SimSel_FaceExt) * num_total, "f_ext util.c"); /* loop through all the faces and fill the faces/indices structure */ - BM_ITER(fm, &fm_iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (fm, &fm_iter, bm, BM_FACES_OF_MESH, NULL) { f_ext[i].f = fm; if (BMO_elem_flag_test(bm, fm, FACE_MARK)) { indices[idx] = i; @@ -673,7 +673,7 @@ static float edge_angle(BMesh *bm, BMEdge *e) /* first edge faces, don't account for 3+ */ - BM_ITER(f, &fiter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_EDGE, e) { if (f_prev == NULL) { f_prev = f; } @@ -723,7 +723,7 @@ void bmo_similaredges_exec(BMesh *bm, BMOperator *op) num_total = BM_mesh_elem_count(bm, BM_EDGE); /* iterate through all selected edges and mark them */ - BMO_ITER(es, &es_iter, bm, op, "edges", BM_EDGE) { + BMO_ITER (es, &es_iter, bm, op, "edges", BM_EDGE) { BMO_elem_flag_enable(bm, es, EDGE_MARK); num_sels++; } @@ -733,7 +733,7 @@ void bmo_similaredges_exec(BMesh *bm, BMOperator *op) e_ext = (SimSel_EdgeExt *)MEM_callocN(sizeof(SimSel_EdgeExt) * num_total, "e_ext util.c"); /* loop through all the edges and fill the edges/indices structure */ - BM_ITER(e, &e_iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &e_iter, bm, BM_EDGES_OF_MESH, NULL) { e_ext[i].e = e; if (BMO_elem_flag_test(bm, e, EDGE_MARK)) { indices[idx] = i; @@ -887,7 +887,7 @@ void bmo_similarverts_exec(BMesh *bm, BMOperator *op) num_total = BM_mesh_elem_count(bm, BM_VERT); /* iterate through all selected edges and mark them */ - BMO_ITER(vs, &vs_iter, bm, op, "verts", BM_VERT) { + BMO_ITER (vs, &vs_iter, bm, op, "verts", BM_VERT) { BMO_elem_flag_enable(bm, vs, VERT_MARK); num_sels++; } @@ -897,7 +897,7 @@ void bmo_similarverts_exec(BMesh *bm, BMOperator *op) v_ext = (SimSel_VertExt *)MEM_mallocN(sizeof(SimSel_VertExt) * num_total, "vertex extra"); /* loop through all the vertices and fill the vertices/indices structure */ - BM_ITER(v, &v_iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &v_iter, bm, BM_VERTS_OF_MESH, NULL) { v_ext[i].v = v; if (BMO_elem_flag_test(bm, v, VERT_MARK)) { indices[idx] = i; @@ -984,7 +984,7 @@ void bmo_face_rotateuvs_exec(BMesh *bm, BMOperator *op) int dir = BMO_slot_int_get(op, "dir"); - BMO_ITER(fs, &fs_iter, bm, op, "faces", BM_FACE) { + BMO_ITER (fs, &fs_iter, bm, op, "faces", BM_FACE) { if (CustomData_has_layer(&(bm->ldata), CD_MLOOPUV)) { if (dir == DIRECTION_CW) { /* same loops direction */ BMLoop *lf; /* current face loops */ @@ -993,7 +993,7 @@ void bmo_face_rotateuvs_exec(BMesh *bm, BMOperator *op) float t_uv[2]; /* tmp uvs */ int n = 0; - BM_ITER(lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { + BM_ITER (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { /* current loop uv is the previous loop uv */ MLoopUV *luv = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPUV); if (n == 0) { @@ -1017,7 +1017,7 @@ void bmo_face_rotateuvs_exec(BMesh *bm, BMOperator *op) float t_uv[2]; /* current uvs */ int n = 0; - BM_ITER(lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { + BM_ITER (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { /* previous loop uv is the current loop uv */ luv = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPUV); if (n == 0) { @@ -1050,7 +1050,7 @@ void bmo_face_reverseuvs_exec(BMesh *bm, BMOperator *op) BLI_array_declare(uvs); float (*uvs)[2] = NULL; - BMO_ITER(fs, &fs_iter, bm, op, "faces", BM_FACE) { + BMO_ITER (fs, &fs_iter, bm, op, "faces", BM_FACE) { if (CustomData_has_layer(&(bm->ldata), CD_MLOOPUV)) { BMLoop *lf; /* current face loops */ int i; @@ -1058,7 +1058,7 @@ void bmo_face_reverseuvs_exec(BMesh *bm, BMOperator *op) BLI_array_empty(uvs); BLI_array_growitems(uvs, fs->len); - BM_ITER_INDEX(lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs, i) { + BM_ITER_INDEX (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs, i) { MLoopUV *luv = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPUV); /* current loop uv is the previous loop uv */ @@ -1067,7 +1067,7 @@ void bmo_face_reverseuvs_exec(BMesh *bm, BMOperator *op) /* now that we have the uvs in the array, reverse! */ i = 0; - BM_ITER(lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { + BM_ITER (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { /* current loop uv is the previous loop uv */ MLoopUV *luv = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPUV); luv->uv[0] = uvs[(fs->len - i - 1)][0]; @@ -1093,7 +1093,7 @@ void bmo_rotatecolors_exec(BMesh *bm, BMOperator *op) int dir = BMO_slot_int_get(op, "dir"); - BMO_ITER(fs, &fs_iter, bm, op, "faces", BM_FACE) { + BMO_ITER (fs, &fs_iter, bm, op, "faces", BM_FACE) { if (CustomData_has_layer(&(bm->ldata), CD_MLOOPCOL)) { if (dir == DIRECTION_CW) { /* same loops direction */ BMLoop *lf; /* current face loops */ @@ -1102,7 +1102,7 @@ void bmo_rotatecolors_exec(BMesh *bm, BMOperator *op) MLoopCol t_col; /* tmp color */ int n = 0; - BM_ITER(lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { + BM_ITER (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { /* current loop color is the previous loop color */ MLoopCol *luv = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPCOL); if (n == 0) { @@ -1126,7 +1126,7 @@ void bmo_rotatecolors_exec(BMesh *bm, BMOperator *op) MLoopCol t_col; /* current color */ int n = 0; - BM_ITER(lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { + BM_ITER (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { /* previous loop color is the current loop color */ lcol = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPCOL); if (n == 0) { @@ -1158,13 +1158,13 @@ void bmo_face_reversecolors_exec(BMesh *bm, BMOperator *op) BLI_array_declare(cols); MLoopCol *cols = NULL; - BMO_ITER(fs, &fs_iter, bm, op, "faces", BM_FACE) { + BMO_ITER (fs, &fs_iter, bm, op, "faces", BM_FACE) { if (CustomData_has_layer(&(bm->ldata), CD_MLOOPCOL)) { BMLoop *lf; /* current face loops */ int i = 0; BLI_array_empty(cols); - BM_ITER(lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { + BM_ITER (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { MLoopCol *lcol = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPCOL); /* current loop uv is the previous loop color */ @@ -1175,7 +1175,7 @@ void bmo_face_reversecolors_exec(BMesh *bm, BMOperator *op) /* now that we have the uvs in the array, reverse! */ i = 0; - BM_ITER(lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { + BM_ITER (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { /* current loop uv is the previous loop color */ MLoopCol *lcol = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPCOL); *lcol = cols[(fs->len - i - 1)]; @@ -1212,10 +1212,10 @@ void bmo_vertexshortestpath_exec(BMesh *bm, BMOperator *op) int num_total = 0 /*, num_sels = 0 */, i = 0; int type = BMO_slot_int_get(op, "type"); - BMO_ITER(vs, &vs_iter, bm, op, "startv", BM_VERT) { + BMO_ITER (vs, &vs_iter, bm, op, "startv", BM_VERT) { sv = vs; } - BMO_ITER(vs, &vs_iter, bm, op, "endv", BM_VERT) { + BMO_ITER (vs, &vs_iter, bm, op, "endv", BM_VERT) { ev = vs; } @@ -1227,7 +1227,7 @@ void bmo_vertexshortestpath_exec(BMesh *bm, BMOperator *op) /* iterate through all the mesh vertices */ /* loop through all the vertices and fill the vertices/indices structure */ i = 0; - BM_ITER(v, &v_iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &v_iter, bm, BM_VERTS_OF_MESH, NULL) { vert_list[i].v = v; vert_list[i].parent = NULL; vert_list[i].weight = FLT_MAX; @@ -1262,7 +1262,7 @@ void bmo_vertexshortestpath_exec(BMesh *bm, BMOperator *op) v_weight = vert_list[BM_elem_index_get(v)].weight; - BM_ITER(e, &e_i, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &e_i, bm, BM_EDGES_OF_VERT, v) { BMVert *u; float e_weight = v_weight; diff --git a/source/blender/bmesh/tools/BME_bevel.c b/source/blender/bmesh/tools/BME_bevel.c index 83dcf3c8238..307136c504c 100644 --- a/source/blender/bmesh/tools/BME_bevel.c +++ b/source/blender/bmesh/tools/BME_bevel.c @@ -788,13 +788,13 @@ static float UNUSED_FUNCTION(BME_bevel_get_angle_vert)(BMesh *bm, BMVert *v) float angle_diff = 0.0f; - BM_ITER(l, &iter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER (l, &iter, bm, BM_LOOPS_OF_VERT, v) { BM_loop_face_normal(l, n_tmp); madd_v3_v3fl(n, n_tmp, BM_loop_face_angle(l)); } normalize_v3(n); - BM_ITER(l, &iter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER (l, &iter, bm, BM_LOOPS_OF_VERT, v) { /* could cache from before */ BM_loop_face_normal(l, n_tmp); angle_diff += angle_normalized_v3v3(n, n_tmp) * (BM_loop_face_angle(l) * (float)(M_PI * 0.5)); diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c index d4a799764df..f1d0d63ba03 100644 --- a/source/blender/editors/mesh/editface.c +++ b/source/blender/editors/mesh/editface.c @@ -814,7 +814,7 @@ void ED_mesh_mirrtopo_init(Mesh *me, const int ob_mode, MirrTopoStore_t *mesh_to if (em) { totedge = me->edit_btmesh->bm->totedge; - BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { topo_hash[BM_elem_index_get(eed->v1)]++; topo_hash[BM_elem_index_get(eed->v2)]++; } @@ -835,7 +835,7 @@ void ED_mesh_mirrtopo_init(Mesh *me, const int ob_mode, MirrTopoStore_t *mesh_to /* use the number of edges per vert to give verts unique topology IDs */ if (em) { - BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { topo_hash[BM_elem_index_get(eed->v1)] += topo_hash_prev[BM_elem_index_get(eed->v2)]; topo_hash[BM_elem_index_get(eed->v2)] += topo_hash_prev[BM_elem_index_get(eed->v1)]; } diff --git a/source/blender/editors/mesh/editmesh_bvh.c b/source/blender/editors/mesh/editmesh_bvh.c index 4b21b6b2a8e..9f5ab8a20d8 100644 --- a/source/blender/editors/mesh/editmesh_bvh.c +++ b/source/blender/editors/mesh/editmesh_bvh.c @@ -125,7 +125,7 @@ BMBVHTree *BMBVH_NewBVH(BMEditMesh *em, int flag, Scene *scene, Object *obedit) void *data[3]; tree->cos = MEM_callocN(sizeof(float) * 3 * em->bm->totvert, "bmbvh cos"); - BM_ITER_INDEX(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_INDEX (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL, i) { BM_elem_index_set(v, i); /* set_inline */ copy_v3_v3(tree->cos[i], v->co); } diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 39b214289dc..dc0d8f13a2a 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -556,7 +556,7 @@ static void knife_get_vert_faces(knifetool_opdata *kcd, KnifeVert *kfv, BMFace * } else if (kfv->v) { BMesh *bm = kcd->em->bm; - BM_ITER(f, &bmiter, bm, BM_FACES_OF_VERT, kfv->v) { + BM_ITER (f, &bmiter, bm, BM_FACES_OF_VERT, kfv->v) { knife_append_list(kcd, lst, f); } } @@ -569,7 +569,7 @@ static void knife_get_edge_faces(knifetool_opdata *kcd, KnifeEdge *kfe, ListBase if (kfe->e) { BMesh *bm = kcd->em->bm; - BM_ITER(f, &bmiter, bm, BM_FACES_OF_EDGE, kfe->e) { + BM_ITER (f, &bmiter, bm, BM_FACES_OF_EDGE, kfe->e) { knife_append_list(kcd, lst, f); } } @@ -1681,7 +1681,7 @@ static void remerge_faces(knifetool_opdata *kcd) BMO_op_finish(bm, &bmop); BLI_smallhash_init(visit); - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { BMIter eiter; BMEdge *e; BMFace *f2; @@ -1702,14 +1702,14 @@ static void remerge_faces(knifetool_opdata *kcd) BLI_array_append(faces, f2); - BM_ITER(e, &eiter, bm, BM_EDGES_OF_FACE, f2) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_FACE, f2) { BMIter fiter; BMFace *f3; if (BMO_elem_flag_test(bm, e, BOUNDARY)) continue; - BM_ITER(f3, &fiter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER (f3, &fiter, bm, BM_FACES_OF_EDGE, e) { if (!BMO_elem_flag_test(bm, f3, FACE_NEW)) continue; if (BLI_smallhash_haskey(visit, (intptr_t)f3)) @@ -1764,14 +1764,14 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) /* BMESH_TODO this should be valid now, leaving here until we can ensure this - campbell */ i = 0; - BM_ITER(f, &bmiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &bmiter, bm, BM_FACES_OF_MESH, NULL) { BM_elem_index_set(f, i); /* set_inline */ faces[i] = f; i++; } bm->elem_index_dirty &= ~BM_FACE; - BM_ITER(e, &bmiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &bmiter, bm, BM_EDGES_OF_MESH, NULL) { BMO_elem_flag_enable(bm, e, BOUNDARY); } @@ -1959,7 +1959,7 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) bm->elem_index_dirty |= BM_FACE; /* interpolate customdata */ - BM_ITER(f, &bmiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &bmiter, bm, BM_FACES_OF_MESH, NULL) { BMLoop *l1; BMFace *f2; BMIter liter1; @@ -1974,7 +1974,7 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) BM_elem_attrs_copy(bm, bm, f2, f); - BM_ITER(l1, &liter1, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l1, &liter1, bm, BM_LOOPS_OF_FACE, f) { BM_loop_interp_from_face(bm, l1, f2, TRUE, TRUE); } } @@ -2281,7 +2281,7 @@ static int find_hole_chains(knifetool_opdata *kcd, ListBase *hole, BMFace *f, Li } j = 0; - BM_ITER(v, &iter, kcd->em->bm, BM_VERTS_OF_FACE, f) { + BM_ITER (v, &iter, kcd->em->bm, BM_VERTS_OF_FACE, f) { fco[j] = BLI_memarena_alloc(kcd->arena, 2 * sizeof(float)); fco[j][0] = v->co[ax]; fco[j][1] = v->co[ay]; @@ -2388,7 +2388,7 @@ static int knife_edge_in_face(knifetool_opdata *kcd, KnifeEdge *kfe, BMFace *f) l2 = NULL; /* find out if v1 and v2, if set, are part of the face */ - BM_ITER(l, &iter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &iter, bm, BM_LOOPS_OF_FACE, f) { if (v1 && l->v == v1) l1 = l; if (v2 && l->v == v2) diff --git a/source/blender/editors/mesh/editmesh_loopcut.c b/source/blender/editors/mesh/editmesh_loopcut.c index 90f88abe141..a41059ef3ca 100644 --- a/source/blender/editors/mesh/editmesh_loopcut.c +++ b/source/blender/editors/mesh/editmesh_loopcut.c @@ -145,7 +145,7 @@ static void edgering_find_order(BMEditMesh *em, BMEdge *lasteed, BMEdge *eed, /* find correct order for v[1] */ if (!(BM_edge_in_face(l->f, eed) && BM_edge_in_face(l->f, lasteed))) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_LOOP, l) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_LOOP, l) { if (BM_edge_in_face(l->f, eed) && BM_edge_in_face(l->f, lasteed)) break; } diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index f22a4ae9a97..7904c6f8c36 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -158,7 +158,7 @@ static BMEdge *edbm_ripsel_edge_mark_step(BMesh *bm, BMVert *v, const int uid) { BMIter iter; BMEdge *e; - BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_VERT, v) { if (IS_VISIT_POSSIBLE(e) && !IS_VISIT_DONE(e)) { BMLoop *l_a, *l_b; @@ -196,8 +196,8 @@ static EdgeLoopPair *edbm_ripsel_looptag_helper(BMesh *bm) EdgeLoopPair *lp; /* initialize loops with dummy invalid index values */ - BM_ITER(f, &fiter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { BM_elem_index_set(l, INVALID_UID); } } @@ -213,7 +213,7 @@ static EdgeLoopPair *edbm_ripsel_looptag_helper(BMesh *bm) BMEdge *e_last; e_first = NULL; - BM_ITER(e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { if (IS_VISIT_POSSIBLE(e) && !IS_VISIT_DONE(e)) { e_first = e; break; @@ -290,7 +290,7 @@ static BMEdge *edbm_ripsel_edge_uid_step(BMesh *bm, BMEdge *e_orig, BMVert **v_p BMVert *v = BM_edge_other_vert(e_orig, *v_prev); const int uid_cmp = BM_elem_index_get(e_orig->l) - 1; - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { if (BM_elem_index_get(e->l) == uid_cmp) { *v_prev = v; return e; @@ -374,7 +374,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) ED_view3d_ob_project_mat_get(rv3d, obedit, projectMat); /* BM_ELEM_SELECT --> BM_ELEM_TAG */ - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { BM_elem_flag_set(e, BM_ELEM_TAG, BM_elem_flag_test(e, BM_ELEM_SELECT)); } @@ -393,7 +393,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) else { ese.ele = NULL; - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) break; } @@ -407,7 +407,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) if (v->e) { /* find closest edge to mouse cursor */ - BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_VERT, v) { int is_boundary = BM_edge_is_boundary(e); /* consider wire as boundary for this purpose, * otherwise we can't a face away from a wire edge */ @@ -455,7 +455,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) dist = FLT_MAX; for (i = 0; i < vout_len; i++) { - BM_ITER(l, &iter, bm, BM_LOOPS_OF_VERT, vout[i]) { + BM_ITER (l, &iter, bm, BM_LOOPS_OF_VERT, vout[i]) { if (!BM_elem_flag_test(l->f, BM_ELEM_HIDDEN)) { float l_mid_co[3]; BM_loop_face_tangent(l, l_mid_co); @@ -534,10 +534,10 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) } else { /* expand edge selection */ - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { e2 = NULL; i = 0; - BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { /* important to check selection rather then tag here * else we get feedback loop */ if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { @@ -584,7 +584,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) { /* simple per edge selection check, saves a lot of code and is almost good enough */ BMOIter siter; - BMO_ITER(e, &siter, bm, &bmop, "edgeout", BM_EDGE) { + BMO_ITER (e, &siter, bm, &bmop, "edgeout", BM_EDGE) { if (edbm_rip_edge_side_measure(e, ar, projectMat, fmval) > 0.0f) { BM_elem_select_set(bm, e, FALSE); } @@ -604,12 +604,12 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) #else dist = FLT_MAX; - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { /* disable by default, re-enable winner at end */ BM_elem_select_set(bm, v, FALSE); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v) { /* calculate a point in the face, rather then calculate the middle, * make a vector pointing between the 2 edges attached to this loop */ sub_v3_v3v3(l_prev_co, l->prev->v->co, l->v->co); diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 6505337d1a4..df1775c3f07 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -75,7 +75,7 @@ void EDBM_select_mirrored(Object *UNUSED(obedit), BMEditMesh *em, int extend) BMVert *v1, *v2; BMIter iter; - BM_ITER(v1, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v1, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(v1, BM_ELEM_SELECT) || BM_elem_flag_test(v1, BM_ELEM_HIDDEN)) { BM_elem_flag_disable(v1, BM_ELEM_TAG); } @@ -89,7 +89,7 @@ void EDBM_select_mirrored(Object *UNUSED(obedit), BMEditMesh *em, int extend) if (!extend) EDBM_flag_disable_all(em, BM_ELEM_SELECT); - BM_ITER(v1, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v1, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(v1, BM_ELEM_TAG) || BM_elem_flag_test(v1, BM_ELEM_HIDDEN)) continue; @@ -1221,7 +1221,7 @@ static int edgetag_shortest_path(Scene *scene, BMEditMesh *em, BMEdge *source, B /* note, would pass BM_EDGE except we are looping over all edges anyway */ BM_mesh_elem_index_ensure(em->bm, BM_VERT /* | BM_EDGE */); - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(e, BM_ELEM_HIDDEN)) { BLI_smallhash_insert(&visithash, (uintptr_t)e, NULL); } @@ -1239,7 +1239,7 @@ static int edgetag_shortest_path(Scene *scene, BMEditMesh *em, BMEdge *source, B cost = MEM_mallocN(sizeof(*cost) * totedge, "SeamPathCost"); /* count edges, compute adjacent edges offsets and fill adjacent */ - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { nedges[BM_elem_index_get(e->v1) + 1]++; nedges[BM_elem_index_get(e->v2) + 1]++; } @@ -1252,7 +1252,7 @@ static int edgetag_shortest_path(Scene *scene, BMEditMesh *em, BMEdge *source, B nedges[0] = nedges[1] = 0; i = 0; - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { edges[nedges[BM_elem_index_get(e->v1) + 1]++] = i; edges[nedges[BM_elem_index_get(e->v2) + 1]++] = i; @@ -1643,7 +1643,7 @@ void EDBM_deselect_by_material(BMEditMesh *em, const short index, const short se BMIter iter; BMFace *efa; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; if (efa->mat_nr == index) { @@ -1668,21 +1668,21 @@ void EDBM_select_swap(BMEditMesh *em) /* exported for UV */ BMFace *efa; if (em->bm->selectmode & SCE_SELECT_VERTEX) { - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) continue; BM_elem_select_set(em->bm, eve, !BM_elem_flag_test(eve, BM_ELEM_SELECT)); } } else if (em->selectmode & SCE_SELECT_EDGE) { - BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) continue; BM_elem_select_set(em->bm, eed, !BM_elem_flag_test(eed, BM_ELEM_SELECT)); } } else { - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; BM_elem_select_set(em->bm, efa, !BM_elem_flag_test(efa, BM_ELEM_SELECT)); @@ -1702,13 +1702,13 @@ int EDBM_select_interior_faces(BMEditMesh *em) int ok; int change = FALSE; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; ok = TRUE; - BM_ITER(eed, &eiter, bm, BM_EDGES_OF_FACE, efa) { + BM_ITER (eed, &eiter, bm, BM_EDGES_OF_FACE, efa) { if (BM_edge_face_count(eed) < 3) { ok = FALSE; break; @@ -1785,7 +1785,7 @@ static int edbm_select_linked_pick_invoke(bContext *C, wmOperator *op, wmEvent * if (limit) { /* hflag no-seam --> bmo-tag */ - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { /* BMESH_TODO, don't use 'BM_ELEM_SELECT' here, its a HFLAG only! */ BMO_elem_flag_set(bm, e, BM_ELEM_SELECT, !BM_elem_flag_test(e, BM_ELEM_SEAM)); } @@ -1870,13 +1870,13 @@ static int edbm_select_linked_exec(bContext *C, wmOperator *op) if (em->selectmode == SCE_SELECT_FACE) { BMFace *efa; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { BM_elem_flag_set(efa, BM_ELEM_TAG, (BM_elem_flag_test(efa, BM_ELEM_SELECT) && !BM_elem_flag_test(efa, BM_ELEM_HIDDEN))); } if (limit) { - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { /* BMESH_TODO, don't use 'BM_ELEM_SELECT' here, its a HFLAG only! */ BMO_elem_flag_set(bm, e, BM_ELEM_SELECT, !BM_elem_flag_test(e, BM_ELEM_SEAM)); } @@ -1887,7 +1887,7 @@ static int edbm_select_linked_exec(bContext *C, wmOperator *op) BMW_FLAG_TEST_HIDDEN, BMW_NIL_LAY); - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(efa, BM_ELEM_TAG)) { e = BMW_begin(&walker, efa); for (; efa; efa = BMW_step(&walker)) { @@ -1898,7 +1898,7 @@ static int edbm_select_linked_exec(bContext *C, wmOperator *op) BMW_end(&walker); } else { - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { BM_elem_flag_enable(v, BM_ELEM_TAG); } @@ -1912,7 +1912,7 @@ static int edbm_select_linked_exec(bContext *C, wmOperator *op) BMW_FLAG_TEST_HIDDEN, BMW_NIL_LAY); - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v, BM_ELEM_TAG)) { e = BMW_begin(&walker, v); for (; e; e = BMW_step(&walker)) { @@ -2044,8 +2044,7 @@ static void walker_deselect_nth(BMEditMesh *em, int nth, int offset, BMHeader *h /* Walker restrictions uses BMO flags, not header flags, * so transfer BM_ELEM_SELECT from HFlags onto a BMO flag layer. */ BMO_push(bm, NULL); - BM_ITER(ele, &iter, bm, itertype, NULL) - { + BM_ITER (ele, &iter, bm, itertype, NULL) { if (BM_elem_flag_test(ele, BM_ELEM_SELECT)) { /* BMESH_TODO, don't use 'BM_ELEM_SELECT' here, its a HFLAG only! */ BMO_elem_flag_enable(bm, (BMElemF *)ele, BM_ELEM_SELECT); @@ -2103,7 +2102,7 @@ static void deselect_nth_active(BMEditMesh *em, BMVert **r_eve, BMEdge **r_eed, } if (em->selectmode & SCE_SELECT_VERTEX) { - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { *r_eve = v; return; @@ -2111,7 +2110,7 @@ static void deselect_nth_active(BMEditMesh *em, BMVert **r_eve, BMEdge **r_eed, } } else if (em->selectmode & SCE_SELECT_EDGE) { - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { *r_eed = e; return; @@ -2224,7 +2223,7 @@ static int edbm_select_sharp_edges_exec(bContext *C, wmOperator *op) sharp = DEG2RADF(sharp); - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(e, BM_ELEM_HIDDEN) || !e->l) continue; @@ -2279,11 +2278,11 @@ static int edbm_select_linked_flat_faces_exec(bContext *C, wmOperator *op) sharp = (sharp * M_PI) / 180.0; - BM_ITER(f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { BM_elem_flag_disable(f, BM_ELEM_TAG); } - BM_ITER(f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(f, BM_ELEM_HIDDEN) || !BM_elem_flag_test(f, BM_ELEM_SELECT) || BM_elem_flag_test(f, BM_ELEM_TAG)) continue; @@ -2301,8 +2300,8 @@ static int edbm_select_linked_flat_faces_exec(bContext *C, wmOperator *op) BM_elem_flag_enable(f, BM_ELEM_TAG); - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { - BM_ITER(l2, &liter2, em->bm, BM_LOOPS_OF_LOOP, l) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l2, &liter2, em->bm, BM_LOOPS_OF_LOOP, l) { float angle; if (BM_elem_flag_test(l2->f, BM_ELEM_TAG) || BM_elem_flag_test(l2->f, BM_ELEM_HIDDEN)) @@ -2364,13 +2363,13 @@ static int edbm_select_non_manifold_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(v, BM_ELEM_HIDDEN) && !BM_vert_is_manifold(v)) { BM_elem_select_set(em->bm, v, TRUE); } } - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (!BM_elem_flag_test(e, BM_ELEM_HIDDEN) && !BM_edge_is_manifold(e)) { BM_elem_select_set(em->bm, e, TRUE); } @@ -2412,7 +2411,7 @@ static int edbm_select_random_exec(bContext *C, wmOperator *op) EDBM_flag_disable_all(em, BM_ELEM_SELECT); if (em->selectmode & SCE_SELECT_VERTEX) { - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) && BLI_frand() < randfac) { BM_elem_select_set(em->bm, eve, TRUE); } @@ -2420,7 +2419,7 @@ static int edbm_select_random_exec(bContext *C, wmOperator *op) EDBM_selectmode_flush(em); } else if (em->selectmode & SCE_SELECT_EDGE) { - BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN) && BLI_frand() < randfac) { BM_elem_select_set(em->bm, eed, TRUE); } @@ -2428,7 +2427,7 @@ static int edbm_select_random_exec(bContext *C, wmOperator *op) EDBM_selectmode_flush(em); } else { - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && BLI_frand() < randfac) { BM_elem_select_set(em->bm, efa, TRUE); } @@ -2470,15 +2469,15 @@ static int edbm_select_next_loop_exec(bContext *C, wmOperator *UNUSED(op)) BMVert *v; BMIter iter; - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { BM_elem_flag_disable(v, BM_ELEM_TAG); } - BM_ITER(f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { BMLoop *l; BMIter liter; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { if (BM_elem_flag_test(l->v, BM_ELEM_SELECT)) { BM_elem_flag_enable(l->next->v, BM_ELEM_TAG); BM_elem_select_set(em->bm, l->v, FALSE); @@ -2486,7 +2485,7 @@ static int edbm_select_next_loop_exec(bContext *C, wmOperator *UNUSED(op)) } } - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v, BM_ELEM_TAG)) { BM_elem_select_set(em->bm, v, TRUE); } @@ -2523,18 +2522,18 @@ static int edbm_region_to_loop_exec(bContext *C, wmOperator *UNUSED(op)) em_setup_viewcontext(C, &vc); - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { BM_elem_flag_disable(e, BM_ELEM_TAG); } - BM_ITER(f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { BMLoop *l1, *l2; BMIter liter1, liter2; - BM_ITER(l1, &liter1, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l1, &liter1, em->bm, BM_LOOPS_OF_FACE, f) { int tot = 0, totsel = 0; - BM_ITER(l2, &liter2, em->bm, BM_LOOPS_OF_EDGE, l1->e) { + BM_ITER (l2, &liter2, em->bm, BM_LOOPS_OF_EDGE, l1->e) { tot++; totsel += BM_elem_flag_test(l2->f, BM_ELEM_SELECT) != 0; } @@ -2546,7 +2545,7 @@ static int edbm_region_to_loop_exec(bContext *C, wmOperator *UNUSED(op)) EDBM_flag_disable_all(em, BM_ELEM_SELECT); - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(e, BM_ELEM_TAG) && !BM_elem_flag_test(e, BM_ELEM_HIDDEN)) BM_edge_select_set(em->bm, e, TRUE); } @@ -2598,11 +2597,11 @@ static int loop_find_region(BMEditMesh *em, BMLoop *l, int flag, f = BLI_array_pop(stack); BLI_array_append(region, f); - BM_ITER(l1, &liter1, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l1, &liter1, em->bm, BM_LOOPS_OF_FACE, f) { if (BM_elem_flag_test(l1->e, flag)) continue; - BM_ITER(l2, &liter2, em->bm, BM_LOOPS_OF_EDGE, l1->e) { + BM_ITER (l2, &liter2, em->bm, BM_LOOPS_OF_EDGE, l1->e) { if (BLI_smallhash_haskey(fhash, (uintptr_t)l2->f)) continue; @@ -2645,11 +2644,11 @@ static int loop_find_regions(BMEditMesh *em, int selbigger) BLI_smallhash_init(&visithash); - BM_ITER(f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { BM_elem_flag_disable(f, BM_ELEM_TAG); } - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { BLI_array_append(edges, e); BM_elem_flag_enable(e, BM_ELEM_TAG); @@ -2673,7 +2672,7 @@ static int loop_find_regions(BMEditMesh *em, int selbigger) if (!BM_elem_flag_test(e, BM_ELEM_TAG)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_EDGE, e) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_EDGE, e) { if (BLI_smallhash_haskey(&visithash, (uintptr_t)l->f)) continue; @@ -2700,7 +2699,7 @@ static int loop_find_regions(BMEditMesh *em, int selbigger) for (j = 0; j < tot; j++) { BM_elem_flag_enable(region[j], BM_ELEM_TAG); - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, region[j]) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, region[j]) { BM_elem_flag_disable(l->e, BM_ELEM_TAG); } } @@ -2736,7 +2735,7 @@ static int edbm_loop_to_region_exec(bContext *C, wmOperator *op) EDBM_flag_disable_all(em, BM_ELEM_SELECT); - BM_ITER(f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(f, BM_ELEM_TAG) && !BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { BM_face_select_set(em->bm, f, TRUE); } diff --git a/source/blender/editors/mesh/editmesh_slide.c b/source/blender/editors/mesh/editmesh_slide.c index 266117ec9a5..f678999311d 100644 --- a/source/blender/editors/mesh/editmesh_slide.c +++ b/source/blender/editors/mesh/editmesh_slide.c @@ -504,8 +504,7 @@ static int vtx_slide_set_frame(VertexSlideOp *vso) } /* Iterate over edges of vertex and copy them */ - BM_ITER_INDEX(edge, &iter, bm, BM_EDGES_OF_VERT, sel_vtx, idx) - { + BM_ITER_INDEX (edge, &iter, bm, BM_EDGES_OF_VERT, sel_vtx, idx) { curr_vert = BM_edge_other_vert(edge, sel_vtx); if (curr_vert) { BLI_array_growone(vtx_frame); diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 12cd7893f5a..e5eb7ad11fd 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -159,7 +159,7 @@ void EMBM_project_snap_verts(bContext *C, ARegion *ar, Object *obedit, BMEditMes BMIter iter; BMVert *eve; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { float mval[2], vec[3], no_dummy[3]; int dist_dummy; @@ -190,11 +190,11 @@ static short edbm_extrude_face_indiv(BMEditMesh *em, wmOperator *op, const char BMO_op_exec(em->bm, &bmop); - BMO_ITER(f, &siter, em->bm, &bmop, "faceout", BM_FACE) { + BMO_ITER (f, &siter, em->bm, &bmop, "faceout", BM_FACE) { BM_elem_select_set(em->bm, f, TRUE); /* set face vertex normals to face normal */ - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { copy_v3_v3(l->v->no, f->no); } } @@ -327,7 +327,7 @@ static short edbm_extrude_edge(Object *obedit, BMEditMesh *em, const char hflag, zero_v3(nor); - BMO_ITER(ele, &siter, bm, &extop, "geomout", BM_ALL) { + BMO_ITER (ele, &siter, bm, &extop, "geomout", BM_ALL) { BM_elem_select_set(bm, ele, TRUE); if (ele->head.htype == BM_FACE) { @@ -735,7 +735,7 @@ static int edbm_dupli_extrude_cursor_invoke(bContext *C, wmOperator *op, wmEvent INIT_MINMAX(min, max); - BM_ITER(v1, &iter, vc.em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v1, &iter, vc.em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v1, BM_ELEM_SELECT)) { DO_MINMAX(v1->co, min, max); done = 1; @@ -757,7 +757,7 @@ static int edbm_dupli_extrude_cursor_invoke(bContext *C, wmOperator *op, wmEvent /* check for edges that are half selected, use for rotation */ done = 0; - BM_ITER(eed, &iter, vc.em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, vc.em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { float co1[3], co2[3]; mul_v3_m4v3(co1, vc.obedit->obmat, eed->v1->co); @@ -859,7 +859,7 @@ static int edbm_dupli_extrude_cursor_invoke(bContext *C, wmOperator *op, wmEvent EDBM_op_init(vc.em, &bmop, op, "makevert co=%v", min); BMO_op_exec(vc.em->bm, &bmop); - BMO_ITER(v1, &oiter, vc.em->bm, &bmop, "newvertout", BM_VERT) { + BMO_ITER (v1, &oiter, vc.em->bm, &bmop, "newvertout", BM_VERT) { BM_elem_select_set(vc.em->bm, v1, TRUE); } @@ -1075,7 +1075,7 @@ static int edbm_mark_seam(bContext *C, wmOperator *op) } if (clear) { - BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (!BM_elem_flag_test(eed, BM_ELEM_SELECT) || BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) continue; @@ -1083,7 +1083,7 @@ static int edbm_mark_seam(bContext *C, wmOperator *op) } } else { - BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (!BM_elem_flag_test(eed, BM_ELEM_SELECT) || BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) continue; BM_elem_flag_enable(eed, BM_ELEM_SEAM); @@ -1129,7 +1129,7 @@ static int edbm_mark_sharp(bContext *C, wmOperator *op) } if (!clear) { - BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (!BM_elem_flag_test(eed, BM_ELEM_SELECT) || BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) continue; @@ -1137,7 +1137,7 @@ static int edbm_mark_sharp(bContext *C, wmOperator *op) } } else { - BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (!BM_elem_flag_test(eed, BM_ELEM_SELECT) || BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) continue; @@ -1341,7 +1341,7 @@ static int edbm_edge_rotate_selected_exec(bContext *C, wmOperator *op) } /* first see if we have two adjacent faces */ - BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { BM_elem_flag_disable(eed, BM_ELEM_TAG); if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { BMFace *fa, *fb; @@ -1581,7 +1581,7 @@ static void mesh_set_smooth_faces(BMEditMesh *em, short smooth) if (em == NULL) return; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { BM_elem_flag_set(efa, BM_ELEM_SMOOTH, smooth); } @@ -1863,7 +1863,7 @@ static int merge_target(BMEditMesh *em, Scene *scene, View3D *v3d, Object *ob, else { float fac; int i = 0; - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(v, BM_ELEM_SELECT)) continue; add_v3_v3(cent, v->co); @@ -2149,7 +2149,7 @@ static void shape_propagate(BMEditMesh *em, wmOperator *op) return; } - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(eve, BM_ELEM_SELECT) || BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) continue; @@ -2218,7 +2218,7 @@ static int edbm_blend_from_shape_exec(bContext *C, wmOperator *op) if (totshape == 0 || shape < 0 || shape >= totshape) return OPERATOR_CANCELLED; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(eve, BM_ELEM_SELECT) || BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) continue; @@ -2323,7 +2323,7 @@ static int edbm_select_axis_exec(bContext *C, wmOperator *op) else if (mode == 1) value += limit; - BM_ITER(ev, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (ev, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(ev, BM_ELEM_HIDDEN)) { switch (mode) { case -1: /* aligned */ @@ -2797,7 +2797,7 @@ static int mesh_separate_selected(Main *bmain, Scene *scene, Base *editbase, wmO EDBM_op_callf(em, wmop, "del geom=%hvef context=%i", BM_ELEM_SELECT, DEL_FACES); /* clean up any loose edges */ - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(e, BM_ELEM_HIDDEN)) continue; @@ -2808,7 +2808,7 @@ static int mesh_separate_selected(Main *bmain, Scene *scene, Base *editbase, wmO EDBM_op_callf(em, wmop, "del geom=%hvef context=%i", BM_ELEM_SELECT, DEL_EDGES); /* clean up any loose verts */ - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v, BM_ELEM_HIDDEN)) continue; @@ -2844,7 +2844,7 @@ static int mesh_separate_material(Main *bmain, Scene *scene, Base *editbase, wmO const short mat_nr = f_cmp->mat_nr; int tot = 0; - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { if (f->mat_nr == mat_nr) { BM_face_select_set(bm, f, TRUE); tot++; @@ -2888,7 +2888,7 @@ static int mesh_separate_loose(Main *bmain, Scene *scene, Base *editbase, wmOper for (i = 0; i < max_iter; i++) { /* Get a seed vertex to start the walk */ v_seed = NULL; - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { v_seed = v; break; } @@ -3664,8 +3664,7 @@ static void xsortvert_flag(bContext *UNUSED(C), int UNUSED(flag)) amount = em->bm->totvert; sortblock = MEM_callocN(sizeof(xvertsort) * amount, "xsort"); - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) - { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) sortblock[i].v1 = eve; } @@ -4012,7 +4011,7 @@ static int edbm_noise_exec(bContext *C, wmOperator *op) if (tex->type == TEX_STUCCI) { float b2, vec[3]; float ofs = tex->turbul / 200.0; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { b2 = BLI_hnoise(tex->noisesize, eve->co[0], eve->co[1], eve->co[2]); if (tex->stype) ofs *= (b2 * b2); @@ -4025,7 +4024,7 @@ static int edbm_noise_exec(bContext *C, wmOperator *op) } } else { - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { float tin, dum; externtex(ma->mtex[0], eve->co, &tin, &dum, &dum, &dum, &dum, 0); @@ -4076,7 +4075,7 @@ static int edbm_bevel_exec(bContext *C, wmOperator *op) BM_data_layer_add(em->bm, &em->bm->edata, CD_PROP_FLT); li = CustomData_number_of_layers(&em->bm->edata, CD_PROP_FLT) - 1; - BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { float d = len_v3v3(eed->v1->co, eed->v2->co); float *dv = CustomData_bmesh_get_n(&em->bm->edata, eed->head.data, CD_PROP_FLT, li); diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c index 6511cc713e3..d48f1776c59 100644 --- a/source/blender/editors/mesh/editmesh_utils.c +++ b/source/blender/editors/mesh/editmesh_utils.c @@ -614,7 +614,7 @@ UvVertMap *EDBM_uv_vert_map_create(BMEditMesh *em, int selected, int do_face_idx totuv = 0; /* generate UvMapVert array */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!selected || ((!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) && BM_elem_flag_test(efa, BM_ELEM_SELECT))) totuv += efa->len; } @@ -642,10 +642,10 @@ UvVertMap *EDBM_uv_vert_map_create(BMEditMesh *em, int selected, int do_face_idx } a = 0; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!selected || ((!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) && BM_elem_flag_test(efa, BM_ELEM_SELECT))) { i = 0; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { buf->tfindex = i; buf->f = a; buf->separate = 0; @@ -663,7 +663,7 @@ UvVertMap *EDBM_uv_vert_map_create(BMEditMesh *em, int selected, int do_face_idx /* sort individual uvs for each vert */ a = 0; - BM_ITER(ev, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (ev, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { UvMapVert *newvlist = NULL, *vlist = vmap->vert[a]; UvMapVert *iterv, *v, *lastv, *next; float *uv, *uv2, uvdiff[2]; @@ -762,7 +762,7 @@ UvElementMap *EDBM_uv_element_map_create(BMEditMesh *em, int selected, int do_is } /* generate UvElement array */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!selected || ((!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) && BM_elem_flag_test(efa, BM_ELEM_SELECT))) totuv += efa->len; } @@ -787,10 +787,10 @@ UvElementMap *EDBM_uv_element_map_create(BMEditMesh *em, int selected, int do_is } j = 0; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { island_number[j++] = INVALID_ISLAND; if (!selected || ((!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) && BM_elem_flag_test(efa, BM_ELEM_SELECT))) { - BM_ITER_INDEX(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa, i) { + BM_ITER_INDEX (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa, i) { buf->l = l; buf->face = efa; buf->separate = 0; @@ -807,7 +807,7 @@ UvElementMap *EDBM_uv_element_map_create(BMEditMesh *em, int selected, int do_is /* sort individual uvs for each vert */ i = 0; - BM_ITER(ev, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (ev, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { UvElement *newvlist = NULL, *vlist = element_map->vert[i]; UvElement *iterv, *v, *lastv, *next; float *uv, *uv2, uvdiff[2]; @@ -871,7 +871,7 @@ UvElementMap *EDBM_uv_element_map_create(BMEditMesh *em, int selected, int do_is while (stacksize > 0) { efa = stack[--stacksize]; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { UvElement *element, *initelement = element_map->vert[BM_elem_index_get(l->v)]; for (element = initelement; element; element = element->next) { @@ -1019,7 +1019,7 @@ static BMVert *cache_mirr_intptr_as_bmvert(intptr_t *index_lookup, int index) * EDBM_verts_mirror_cache_begin(em); * ... * ... - * BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + * BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { * mirrorv = EDBM_verts_mirror_get(em, v); * } * ... @@ -1071,7 +1071,7 @@ void EDBM_verts_mirror_cache_begin(BMEditMesh *em, const short use_select) tree = BMBVH_NewBVH(em, 0, NULL, NULL); } - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { /* temporary for testing, check for selection */ if (use_select && !BM_elem_flag_test(v, BM_ELEM_SELECT)) { @@ -1159,7 +1159,7 @@ void EDBM_verts_mirror_apply(BMEditMesh *em, const int sel_from, const int sel_t BLI_assert(em->vert_index != NULL); - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v, BM_ELEM_SELECT) == sel_from) { BMVert *mirr = EDBM_verts_mirror_get(em, v); if (mirr) { @@ -1189,7 +1189,7 @@ void EDBM_mesh_hide(BMEditMesh *em, int swap) else itermode = BM_FACES_OF_MESH; - BM_ITER(ele, &iter, em->bm, itermode, NULL) { + BM_ITER (ele, &iter, em->bm, itermode, NULL) { if (BM_elem_flag_test(ele, BM_ELEM_SELECT) ^ swap) BM_elem_hide_set(em->bm, ele, TRUE); } @@ -1223,7 +1223,7 @@ void EDBM_mesh_reveal(BMEditMesh *em) /* Use tag flag to remember what was hidden before all is revealed. * BM_ELEM_HIDDEN --> BM_ELEM_TAG */ for (i = 0; i < 3; i++) { - BM_ITER(ele, &iter, em->bm, iter_types[i], NULL) { + BM_ITER (ele, &iter, em->bm, iter_types[i], NULL) { BM_elem_flag_set(ele, BM_ELEM_TAG, BM_elem_flag_test(ele, BM_ELEM_HIDDEN)); } } @@ -1237,7 +1237,7 @@ void EDBM_mesh_reveal(BMEditMesh *em) continue; } - BM_ITER(ele, &iter, em->bm, iter_types[i], NULL) { + BM_ITER (ele, &iter, em->bm, iter_types[i], NULL) { if (BM_elem_flag_test(ele, BM_ELEM_TAG)) { BM_elem_select_set(em->bm, ele, TRUE); } diff --git a/source/blender/editors/mesh/mesh_data.c b/source/blender/editors/mesh/mesh_data.c index b2d37e8fc67..d3c0a1245fc 100644 --- a/source/blender/editors/mesh/mesh_data.c +++ b/source/blender/editors/mesh/mesh_data.c @@ -199,7 +199,7 @@ static void editmesh_face_copy_customdata(BMEditMesh *em, int type, int index) const int n = CustomData_get_active_layer(pdata, type); /* ensure all current elements follow new customdata layout */ - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { void *data = CustomData_bmesh_get_n(pdata, efa->head.data, type, n); CustomData_bmesh_set_n(pdata, efa->head.data, type, index, data); } @@ -217,8 +217,8 @@ static void editmesh_loop_copy_customdata(BMEditMesh *em, int type, int index) const int n = CustomData_get_active_layer(ldata, type); /* ensure all current elements follow new customdata layout */ - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER(loop, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (loop, &liter, bm, BM_LOOPS_OF_FACE, efa) { void *data = CustomData_bmesh_get_n(ldata, loop->head.data, type, n); CustomData_bmesh_set_n(ldata, loop->head.data, type, index, data); } @@ -245,12 +245,12 @@ int ED_mesh_uv_loop_reset_ex(struct bContext *C, struct Mesh *me, const int laye BLI_assert(CustomData_has_layer(&em->bm->ldata, CD_MLOOPUV)); - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; i = 0; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get_n(&em->bm->ldata, l->head.data, CD_MLOOPUV, layernum); BLI_array_append(uvs, luv->uv); i++; diff --git a/source/blender/editors/mesh/mesh_navmesh.c b/source/blender/editors/mesh/mesh_navmesh.c index 7d78a527b06..3d57c5144de 100644 --- a/source/blender/editors/mesh/mesh_navmesh.c +++ b/source/blender/editors/mesh/mesh_navmesh.c @@ -500,7 +500,7 @@ static int navmesh_face_copy_exec(bContext *C, wmOperator *op) if (targetPolyIdx > 0) { /* set target poly idx to other selected faces */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT) && efa != efa_act) { int *recastDataBlock = (int *)CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_RECAST); *recastDataBlock = targetPolyIdx; @@ -549,7 +549,7 @@ static int findFreeNavPolyIndex(BMEditMesh *em) int i, idx = em->bm->totface - 1, freeIdx = 1; /*XXX this originally went last to first, but that isn't possible anymore*/ - BM_ITER(ef, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (ef, &iter, em->bm, BM_FACES_OF_MESH, NULL) { int polyIdx = *(int *)CustomData_bmesh_get(&em->bm->pdata, ef->head.data, CD_RECAST); indices[idx] = polyIdx; idx--; @@ -585,7 +585,7 @@ static int navmesh_face_add_exec(bContext *C, wmOperator *UNUSED(op)) /* set target poly idx to selected faces */ /*XXX this originally went last to first, but that isn't possible anymore*/ - BM_ITER(ef, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (ef, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(ef, BM_ELEM_SELECT)) { int *recastDataBlock = (int *)CustomData_bmesh_get(&em->bm->pdata, ef->head.data, CD_RECAST); *recastDataBlock = targetPolyIdx; diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index 87640c9d419..c10173ec19c 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -803,8 +803,7 @@ intptr_t mesh_octree_table(Object *ob, BMEditMesh *em, float *co, char mode) BMIter iter; BMVert *eve; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) - { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { DO_MINMAX(eve->co, min, max); } } @@ -841,8 +840,7 @@ intptr_t mesh_octree_table(Object *ob, BMEditMesh *em, float *co, char mode) BMVert *eve; BMIter iter; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) - { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { mesh_octree_add_nodes(MeshOctree.table, eve->co, MeshOctree.offs, MeshOctree.div, (intptr_t)(eve)); } } @@ -955,8 +953,7 @@ static BMVert *editbmesh_get_x_mirror_vert_topo(Object *ob, struct BMEditMesh *e BMVert *v; index = 0; - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) - { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (v == eve) break; index++; @@ -1018,16 +1015,14 @@ static float *editmesh_get_mirror_uv(BMEditMesh *em, int axis, float *uv, float BMIter iter; BMFace *efa; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) - { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { poly_uv_center(em, efa, cent); if ( (fabs(cent[0] - cent_vec[0]) < 0.001) && (fabs(cent[1] - cent_vec[1]) < 0.001) ) { BMIter liter; BMLoop *l; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) - { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if ( (fabs(luv->uv[0] - vec[0]) < 0.001) && (fabs(luv->uv[1] - vec[1]) < 0.001) ) { return luv->uv; diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c index 4e967b6791b..e2b77d62386 100644 --- a/source/blender/editors/object/object_hook.c +++ b/source/blender/editors/object/object_hook.c @@ -78,7 +78,7 @@ static int return_editmesh_indexar(BMEditMesh *em, int *tot, int **indexar, floa BMIter iter; int *index, nr, totvert=0; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) totvert++; } if (totvert==0) return 0; @@ -88,7 +88,7 @@ static int return_editmesh_indexar(BMEditMesh *em, int *tot, int **indexar, floa nr= 0; zero_v3(cent); - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { *index= nr; index++; add_v3_v3(cent, eve->co); @@ -114,7 +114,7 @@ static int return_editmesh_vgroup(Object *obedit, BMEditMesh *em, char *name, fl BMIter iter; /* find the vertices */ - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { dvert= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (dvert) { @@ -146,7 +146,7 @@ static void select_editbmesh_hook(Object *ob, HookModifierData *hmd) if (hmd->indexar == NULL) return; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (nr==hmd->indexar[index]) { BM_elem_select_set(em->bm, eve, TRUE); if (index < hmd->totindex-1) index++; diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index 57d0de522a1..b7207896e60 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -137,7 +137,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op) * so re-create it here */ makeDerivedMesh(scene, obedit, em, CD_MASK_BAREMESH, 0); - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { if (v1==0) v1= nr; else if (v2==0) v2= nr; diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c index 474d10ffbd8..84861e9bf5d 100644 --- a/source/blender/editors/object/object_transform.c +++ b/source/blender/editors/object/object_transform.c @@ -687,7 +687,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) mul_m4_v3(obedit->imat, cent); } else { - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (around==V3D_CENTROID) { total++; add_v3_v3(cent, eve->co); @@ -700,7 +700,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) } } - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { sub_v3_v3(eve->co, cent); } diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index e4b8e21c13a..9b00dd9ac2b 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -206,14 +206,14 @@ static int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_to i = 0; if (use_vert_sel) { - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { (*dvert_arr)[i] = BM_elem_flag_test(eve, BM_ELEM_SELECT) ? CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT) : NULL; i++; } } else { - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { (*dvert_arr)[i] = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); i++; } @@ -593,7 +593,7 @@ static void vgroup_select_verts(Object *ob, int select) BMIter iter; BMVert *eve; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) { dv= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (defvert_find_index(dv, def_nr)) { @@ -1296,7 +1296,7 @@ static void vgroup_blend(Object *ob, const float fac) vg_users = MEM_callocN(sizeof(int) * dvert_tot, "vgroup_blend_i"); if (bm) { - BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { sel1 = BM_elem_flag_test(eed->v1, BM_ELEM_SELECT); sel2 = BM_elem_flag_test(eed->v2, BM_ELEM_SELECT); @@ -1322,7 +1322,7 @@ static void vgroup_blend(Object *ob, const float fac) } } - BM_ITER_INDEX(eve, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT) && vg_users[i] > 0) { dv = CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_MDEFORMVERT); @@ -1571,7 +1571,7 @@ void ED_vgroup_mirror(Object *ob, const short mirror_weights, const short flip_v EDBM_verts_mirror_cache_begin(em, FALSE); /* Go through the list of editverts and assign them */ - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if ((eve_mirr= EDBM_verts_mirror_get(em, eve))) { sel= BM_elem_flag_test(eve, BM_ELEM_SELECT); sel_mirr= BM_elem_flag_test(eve_mirr, BM_ELEM_SELECT); @@ -1796,7 +1796,7 @@ static void vgroup_active_remove_verts(Object *ob, const int allverts, bDeformGr BMVert *eve; BMIter iter; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { dv= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (dv && dv->dw && (allverts || BM_elem_flag_test(eve, BM_ELEM_SELECT))) { @@ -1866,7 +1866,7 @@ static void vgroup_delete_edit_mode(Object *ob, bDeformGroup *dg) BMVert *eve; MDeformVert *dvert; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { dvert= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (dvert) @@ -1998,7 +1998,7 @@ static void vgroup_assign_verts(Object *ob, const float weight) BM_data_layer_add(em->bm, &em->bm->vdata, CD_MDEFORMVERT); /* Go through the list of editverts and assign them */ - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { MDeformWeight *dw; dv= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); /* can be NULL */ @@ -2855,7 +2855,7 @@ static int vgroup_do_remap(Object *ob, char *name_array, wmOperator *op) BMIter iter; BMVert *eve; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { dvert= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (dvert && dvert->totweight) { defvert_remap(dvert, sort_map, defbase_tot); diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c index 14f7e337f91..87c225e064e 100644 --- a/source/blender/editors/render/render_shading.c +++ b/source/blender/editors/render/render_shading.c @@ -170,8 +170,7 @@ static int material_slot_assign_exec(bContext *C, wmOperator *UNUSED(op)) BMIter iter; if (em) { - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) - { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) efa->mat_nr = ob->actcol - 1; } diff --git a/source/blender/editors/sculpt_paint/sculpt_uv.c b/source/blender/editors/sculpt_paint/sculpt_uv.c index 2a0118f9c24..5fe043ab8d5 100644 --- a/source/blender/editors/sculpt_paint/sculpt_uv.c +++ b/source/blender/editors/sculpt_paint/sculpt_uv.c @@ -594,8 +594,8 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent /* Now, on to generate our uv connectivity data */ counter = 0; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { int offset1, itmp1 = uv_element_offset_from_face_get(data->elementMap, efa, l, island_index, do_island_optimization); int offset2, itmp2 = uv_element_offset_from_face_get(data->elementMap, efa, l->next, island_index, do_island_optimization); diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index bdc07ccc98c..d520c98c6d0 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -2957,7 +2957,7 @@ static void draw_em_indices(BMEditMesh *em) i = 0; if (em->selectmode & SCE_SELECT_VERTEX) { UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEANG, col); - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { sprintf(numstr, "%d", i); view3d_cached_text_draw_add(v->co, numstr, 0, txt_flag, col); @@ -2969,7 +2969,7 @@ static void draw_em_indices(BMEditMesh *em) if (em->selectmode & SCE_SELECT_EDGE) { i = 0; UI_GetThemeColor3ubv(TH_DRAWEXTRA_EDGELEN, col); - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { sprintf(numstr, "%d", i); mid_v3_v3v3(pos, e->v1->co, e->v2->co); @@ -2982,7 +2982,7 @@ static void draw_em_indices(BMEditMesh *em) if (em->selectmode & SCE_SELECT_FACE) { i = 0; UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEAREA, col); - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(f, BM_ELEM_SELECT)) { BM_face_center_mean_calc(bm, f, pos); sprintf(numstr, "%d", i); diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index b1cddf5b6c5..a3bf0d40c43 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -157,7 +157,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float BMEdge *eed; BMIter iter; - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { evedef = eve; tot++; @@ -165,7 +165,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float } } - BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { float *f; @@ -404,7 +404,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float if (len_v3(median) > 0.000001f) { - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { add_v3_v3(eve->co, median); } @@ -418,7 +418,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float const float sca = compute_scale_factor(ve_median[3], median[3]); if (ELEM(sca, 0.0f, 1.0f)) { - BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { float *crease = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_CREASE); if (crease) { @@ -428,7 +428,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float } } else if (sca > 0.0f) { - BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT) && !BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) { float *crease = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_CREASE); if (crease) { @@ -439,7 +439,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float } } else { - BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT) && !BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) { float *crease = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_CREASE); if (crease) { @@ -456,7 +456,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float const float sca = compute_scale_factor(ve_median[6], median[6]); if (ELEM(sca, 0.0f, 1.0f)) { - BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { float *bweight = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_BWEIGHT); if (bweight) { @@ -466,7 +466,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float } } else if (sca > 0.0f) { - BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT) && !BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) { float *bweight = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_BWEIGHT); if (bweight) { @@ -477,7 +477,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float } } else { - BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT) && !BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) { float *bweight = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_BWEIGHT); if (bweight) { @@ -678,7 +678,7 @@ static void vgroup_copy_active_to_sel(Object *ob) MDeformVert *dvert; int index = 0; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT) && eve != eve_act) { dvert = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (dvert) { diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index faf765fdaef..4943d5c5281 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -242,7 +242,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) // transform now requires awareness for select mode, so we tag the f1 flags in verts tottrans = 0; if (em->selectmode & SCE_SELECT_VERTEX) { - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) && BM_elem_flag_test(eve, BM_ELEM_SELECT)) { BM_elem_index_set(eve, 1); /* set_dirty! */ tottrans++; @@ -253,41 +253,42 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) else if (em->selectmode & SCE_SELECT_EDGE) { BMEdge *eed; - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { BM_elem_index_set(eve, 0); /* set_dirty! */ } - BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN) && BM_elem_flag_test(eed, BM_ELEM_SELECT)) { BM_elem_index_set(eed->v1, 1); /* set_dirty! */ BM_elem_index_set(eed->v2, 1); /* set_dirty! */ } } - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_index_get(eve)) tottrans++; } } else { BMFace *efa; - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { BM_elem_index_set(eve, 0); /* set_dirty! */ } - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && BM_elem_flag_test(efa, BM_ELEM_SELECT)) { BMIter liter; BMLoop *l; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { BM_elem_index_set(l->v, 1); /* set_dirty! */ } } } - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_index_get(eve)) tottrans++; + } } /* for any of the 3 loops above which all dirty the indices */ bm->elem_index_dirty |= BM_VERT; @@ -297,7 +298,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) tv = transvmain = MEM_callocN(tottrans * sizeof(TransVert), "maketransverts"); a = 0; - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_index_get(eve)) { BM_elem_index_set(eve, a); /* set_dirty! */ copy_v3_v3(tv->oldloc, eve->co); diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index bb1800a79cf..7c198cce746 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -4318,7 +4318,7 @@ static BMEdge *get_other_edge(BMesh *bm, BMVert *v, BMEdge *e) BMIter iter; BMEdge *e2; - BM_ITER(e2, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e2, &iter, bm, BM_EDGES_OF_VERT, v) { if (BM_elem_flag_test(e2, BM_ELEM_SELECT) && e2 != e) return e2; } @@ -4419,10 +4419,10 @@ static int createSlideVerts(TransInfo *t) BLI_smallhash_init(&table); /*ensure valid selection*/ - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { numsel = 0; - BM_ITER(e, &iter2, em->bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e, &iter2, em->bm, BM_EDGES_OF_VERT, v) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { /* BMESH_TODO: this is probably very evil, * set v->e to a selected edge*/ @@ -4440,7 +4440,7 @@ static int createSlideVerts(TransInfo *t) } } - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { if (!BM_edge_is_manifold(e)) { MEM_freeN(sld); @@ -4451,7 +4451,7 @@ static int createSlideVerts(TransInfo *t) } j = 0; - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { BM_elem_flag_enable(v, BM_ELEM_TAG); BLI_smallhash_insert(&table, (uintptr_t)v, SET_INT_IN_POINTER(j)); @@ -4473,7 +4473,7 @@ static int createSlideVerts(TransInfo *t) j = 0; while (1) { v = NULL; - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v, BM_ELEM_TAG)) break; @@ -4591,7 +4591,7 @@ static int createSlideVerts(TransInfo *t) /* size = 50.0; */ /* UNUSED */ zero_v3(lastvec); zero_v3(dir); /* ee = le = NULL; */ /* UNUSED */ - BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { BMIter iter2; BMEdge *e2; @@ -4602,7 +4602,7 @@ static int createSlideVerts(TransInfo *t) dis2 = -1.0f; for (i=0; i<2; i++) { v = i?e->v1:e->v2; - BM_ITER(e2, &iter2, em->bm, BM_EDGES_OF_VERT, v) { + BM_ITER (e2, &iter2, em->bm, BM_EDGES_OF_VERT, v) { if (BM_elem_flag_test(e2, BM_ELEM_SELECT)) continue; @@ -4648,14 +4648,14 @@ static int createSlideVerts(TransInfo *t) BMFace *f; BMLoop *l; - BM_ITER(f, &fiter, em->bm, BM_FACES_OF_VERT, tempsv->v) { + BM_ITER (f, &fiter, em->bm, BM_FACES_OF_VERT, tempsv->v) { if (!BLI_smallhash_haskey(&sld->origfaces, (uintptr_t)f)) { BMFace *copyf = BM_face_copy(em->bm, f, TRUE, TRUE); BM_elem_select_set(em->bm, copyf, FALSE); BM_elem_flag_enable(copyf, BM_ELEM_HIDDEN); - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, copyf) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, copyf) { BM_elem_select_set(em->bm, l->v, FALSE); BM_elem_flag_enable(l->v, BM_ELEM_HIDDEN); BM_elem_select_set(em->bm, l->e, FALSE); @@ -4720,7 +4720,7 @@ void projectSVData(TransInfo *t, int final) BMIter fiter; BMFace *f; - BM_ITER(f, &fiter, em->bm, BM_FACES_OF_VERT, tempsv->v) { + BM_ITER (f, &fiter, em->bm, BM_FACES_OF_VERT, tempsv->v) { BMIter liter2; BMFace *copyf, *copyf2; BMLoop *l2; @@ -4740,7 +4740,7 @@ void projectSVData(TransInfo *t, int final) copyf2 = BLI_smallhash_lookup(&sld->origfaces, (uintptr_t)f); /* project onto copied projection face */ - BM_ITER(l2, &liter2, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l2, &liter2, em->bm, BM_LOOPS_OF_FACE, f) { copyf = copyf2; if (BM_elem_flag_test(l2->e, BM_ELEM_SELECT) || BM_elem_flag_test(l2->prev->e, BM_ELEM_SELECT)) { diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index a6f26f4a5d1..ff5ce9af596 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -309,7 +309,7 @@ static void createTransEdge(TransInfo *t) int count=0, countsel=0; int propmode = t->flag & T_PROP_EDIT; - BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) countsel++; if (propmode) count++; @@ -331,7 +331,7 @@ static void createTransEdge(TransInfo *t) copy_m3_m4(mtx, t->obedit->obmat); invert_m3_m3(smtx, mtx); - BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN) && (BM_elem_flag_test(eed, BM_ELEM_SELECT) || propmode)) { float *bweight = CustomData_bmesh_get(&em->bm->edata, eed->head.data, CD_BWEIGHT); float *crease = CustomData_bmesh_get(&em->bm->edata, eed->head.data, CD_CREASE); @@ -1888,7 +1888,7 @@ static void editmesh_set_connectivity_distance(BMEditMesh *em, float mtx[][3], f BLI_smallhash_init(visit); - BM_ITER(v, &viter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &viter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)==0 || BM_elem_flag_test(v, BM_ELEM_HIDDEN)) continue; @@ -1909,7 +1909,7 @@ static void editmesh_set_connectivity_distance(BMEditMesh *em, float mtx[][3], f v2 = queue[start]; d = dqueue[start]; - BM_ITER(e, &eiter, em->bm, BM_EDGES_OF_VERT, v2) { + BM_ITER (e, &eiter, em->bm, BM_EDGES_OF_VERT, v2) { float d2; v3 = BM_edge_other_vert(e, v2); @@ -1959,7 +1959,7 @@ static void editmesh_set_connectivity_distance(BMEditMesh *em, float mtx[][3], f BMFace *efa; BMIter iter; - BM_ITER(efa, &iter, bm, BM_FACES_OF_VERT, eve) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_VERT, eve) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { BM_face_center_mean_calc(bm, efa, cent_r); break; @@ -1972,7 +1972,7 @@ static void get_edge_center(float cent_r[3], BMesh *bm, BMVert *eve) BMEdge *eed; BMIter iter; - BM_ITER(eed, &iter, bm, BM_EDGES_OF_VERT, eve) { + BM_ITER (eed, &iter, bm, BM_EDGES_OF_VERT, eve) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { mid_v3_v3v3(cent_r, eed->v1->co, eed->v2->co); break; @@ -2051,7 +2051,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) // transform now requires awareness for select mode, so we tag the f1 flags in verts if (selectmode & SCE_SELECT_VERTEX) { - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { BM_elem_flag_set(eve, BM_ELEM_TAG, BM_elem_flag_test(eve, BM_ELEM_SELECT)); } } @@ -2452,7 +2452,7 @@ static void createTransUVs(bContext *C, TransInfo *t) if (!ED_space_image_show_uvedit(sima, t->obedit)) return; /* count */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf= CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) { @@ -2461,7 +2461,7 @@ static void createTransUVs(bContext *C, TransInfo *t) } BM_elem_flag_enable(efa, BM_ELEM_TAG); - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (uvedit_uv_selected(em, scene, l)) countsel++; @@ -2485,11 +2485,11 @@ static void createTransUVs(bContext *C, TransInfo *t) td= t->data; td2d= t->data2d; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (!propmode && !uvedit_uv_selected(em, scene, l)) continue; diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index c6b8403d54f..4d7c1338f30 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -315,7 +315,7 @@ int calc_manipulator_stats(const bContext *C) * mode. note we can't use just vertex selection flag because * it is not flush down on changes */ if (ts->selectmode & SCE_SELECT_VERTEX) { - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { totsel++; @@ -327,10 +327,10 @@ int calc_manipulator_stats(const bContext *C) else if (ts->selectmode & SCE_SELECT_EDGE) { BMIter itersub; BMEdge *eed; - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) { /* check the vertex has a selected edge, only add it once */ - BM_ITER(eed, &itersub, bm, BM_EDGES_OF_VERT, eve) { + BM_ITER (eed, &itersub, bm, BM_EDGES_OF_VERT, eve) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { totsel++; calc_tw_center(scene, eve->co); @@ -343,10 +343,10 @@ int calc_manipulator_stats(const bContext *C) else { BMIter itersub; BMFace *efa; - BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) { /* check the vertex has a selected face, only add it once */ - BM_ITER(efa, &itersub, bm, BM_FACES_OF_VERT, eve) { + BM_ITER (efa, &itersub, bm, BM_FACES_OF_VERT, eve) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { totsel++; calc_tw_center(scene, eve->co); diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index d822bb0aaf7..968b3fd6993 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -599,7 +599,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], BMFace *efa; BMIter iter; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { add_v3_v3(normal, efa->no); sub_v3_v3v3(vec, @@ -616,7 +616,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], BMIter iter; float cotangent[3]; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { if (v1 == NULL) { v1 = eve; @@ -640,7 +640,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], BMEdge *eed = NULL; BMIter iter; - BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { sub_v3_v3v3(plane, eed->v2->co, eed->v1->co); break; @@ -654,7 +654,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], BMEdge *eed = NULL; BMIter iter; - BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { /* use average vert normals as plane and edge vector as normal */ copy_v3_v3(plane, eed->v1->no); @@ -669,7 +669,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], BMVert *v1 = NULL, *v2 = NULL; BMIter iter; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { if (v1 == NULL) { v1 = eve; @@ -689,7 +689,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], else if (em->bm->totvertsel == 1) { BMIter iter; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { copy_v3_v3(normal, eve->no); break; @@ -702,7 +702,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], zero_v3(normal); - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { add_v3_v3(normal, eve->no); } diff --git a/source/blender/editors/util/crazyspace.c b/source/blender/editors/util/crazyspace.c index 504d296bda8..ee80fe92983 100644 --- a/source/blender/editors/util/crazyspace.c +++ b/source/blender/editors/util/crazyspace.c @@ -149,13 +149,11 @@ void crazyspace_set_quats_editmesh(BMEditMesh *em, float *origcos, float *mapped BM_mesh_elem_index_ensure(em->bm, BM_VERT); - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) - { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(v, BM_ELEM_SELECT) || BM_elem_flag_test(v, BM_ELEM_HIDDEN)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_VERT, v) - { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_VERT, v) { BMLoop *l2 = BM_face_other_edge_loop(l->f, l->e, v); /* retrieve mapped coordinates */ @@ -178,7 +176,7 @@ void crazyspace_set_quats_editmesh(BMEditMesh *em, float *origcos, float *mapped } index = 0; - BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (vert_table[index] != 0) BM_elem_index_set(v, vert_table[index] - 1); /* set_dirty! */ else diff --git a/source/blender/editors/uvedit/uvedit_buttons.c b/source/blender/editors/uvedit/uvedit_buttons.c index 123fe58100f..586d714e5f7 100644 --- a/source/blender/editors/uvedit/uvedit_buttons.c +++ b/source/blender/editors/uvedit/uvedit_buttons.c @@ -72,12 +72,12 @@ static int uvedit_center(Scene *scene, BMEditMesh *em, Image *ima, float center[ int tot = 0.0; zero_v2(center); - BM_ITER(f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, f->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, f, tf)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (uvedit_uv_selected(em, scene, l)) { add_v2_v2(center, luv->uv); @@ -101,8 +101,8 @@ static void uvedit_translate(Scene *scene, BMEditMesh *em, Image *UNUSED(ima), f BMIter iter, liter; MLoopUV *luv; - BM_ITER(f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (uvedit_uv_selected(em, scene, l)) { add_v2_v2(luv->uv, delta); diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c index c079388be1c..befdce301f2 100644 --- a/source/blender/editors/uvedit/uvedit_draw.c +++ b/source/blender/editors/uvedit/uvedit_draw.c @@ -136,9 +136,9 @@ static void draw_uvs_shadow(Object *obedit) /* draws the grey mesh when painting */ glColor3ub(112, 112, 112); - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { glBegin(GL_LINE_LOOP); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); @@ -181,7 +181,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe { float totarea = 0.0f, totuvarea = 0.0f, areadiff, uvarea, area; - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY); BLI_array_empty(tf_uv); @@ -190,7 +190,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe BLI_array_growitems(tf_uvorig, efa->len); i = 0; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); copy_v2_v2(tf_uvorig[i], luv->uv); @@ -218,10 +218,10 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe col[0] = 1.0; col[1] = col[2] = 0.0; glColor3fv(col); - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(efa, BM_ELEM_TAG)) { glBegin(GL_POLYGON); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -230,7 +230,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe } } else { - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(efa, BM_ELEM_TAG)) { area = BM_face_area_calc(bm, efa) / totarea; @@ -240,7 +240,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe BLI_array_growitems(tf_uvorig, efa->len); i = 0; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); copy_v2_v2(tf_uvorig[i], luv->uv); @@ -264,7 +264,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe glColor3fv(col); glBegin(GL_POLYGON); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -291,7 +291,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe glShadeModel(GL_SMOOTH); - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY); if (uvedit_face_visible(scene, ima, efa, tf)) { @@ -310,7 +310,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe BLI_array_growitems(av, nverts); BLI_array_growitems(auv, nverts); - BM_ITER_INDEX(l, &liter, bm, BM_LOOPS_OF_FACE, efa, i) { + BM_ITER_INDEX (l, &liter, bm, BM_LOOPS_OF_FACE, efa, i) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); copy_v2_v2(tf_uvorig[i], luv->uv); } @@ -318,7 +318,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe poly_copy_aspect(tf_uvorig, tf_uv, aspx, aspy, nverts); j = nverts - 1; - BM_ITER_INDEX(l, &liter, bm, BM_LOOPS_OF_FACE, efa, i) { + BM_ITER_INDEX (l, &liter, bm, BM_LOOPS_OF_FACE, efa, i) { sub_v2_v2v2(auv[i], tf_uv[j], tf_uv[i]); normalize_v2(auv[i]); sub_v3_v3v3(av[i], l->prev->v->co, l->v->co); normalize_v3(av[i]); j = i; @@ -336,7 +336,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe } glBegin(GL_POLYGON); - BM_ITER_INDEX(l, &liter, bm, BM_LOOPS_OF_FACE, efa, i) { + BM_ITER_INDEX (l, &liter, bm, BM_LOOPS_OF_FACE, efa, i) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); a = fabsf(uvang[i] - ang[i]) / (float)M_PI; weight_to_rgb(col, 1.0f - powf((1.0f - a), 2.0f)); @@ -503,7 +503,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY); if (uvedit_face_visible(scene, ima, efa, tf)) { @@ -516,7 +516,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glColor4ubv((GLubyte *)col1); glBegin(GL_POLYGON); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -533,7 +533,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) else { /* would be nice to do this within a draw loop but most below are optional, so it would involve too many checks */ - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY); if (uvedit_face_visible(scene, ima, efa, tf)) { @@ -561,7 +561,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glPolygonStipple(stipple_quarttone); glBegin(GL_POLYGON); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, activef) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, activef) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -582,7 +582,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) switch (sima->dt_uv) { case SI_UVDT_DASH: - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; tf = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY); @@ -591,7 +591,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) cpack(0x111111); glBegin(GL_LINE_LOOP); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -601,7 +601,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) cpack(0x909090); glBegin(GL_LINE_LOOP); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -625,12 +625,12 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) if (sima->dt_uv == SI_UVDT_WHITE) glColor3f(1.0f, 1.0f, 1.0f); else glColor3f(0.0f, 0.0f, 0.0f); - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; glBegin(GL_LINE_LOOP); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -641,12 +641,12 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glLineWidth(3); cpack(0x0); - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; glBegin(GL_LINE_LOOP); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -664,12 +664,12 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) if (interpedges) { glShadeModel(GL_SMOOTH); - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; glBegin(GL_LINE_LOOP); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { sel = (uvedit_uv_selected(em, scene, l) ? 1 : 0); glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); @@ -682,12 +682,12 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glShadeModel(GL_FLAT); } else { - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; glBegin(GL_LINES); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { sel = (uvedit_edge_selected(em, scene, l) ? 1 : 0); if (sel != lastsel) { glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); @@ -704,12 +704,12 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) } else { /* no nice edges */ - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; glBegin(GL_LINE_LOOP); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -737,7 +737,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) UI_ThemeColor(TH_WIRE); bglBegin(GL_POINTS); - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; @@ -752,7 +752,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) UI_ThemeColor(TH_FACE_DOT); bglBegin(GL_POINTS); - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; @@ -773,11 +773,11 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glPointSize(pointsize); bglBegin(GL_POINTS); - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); if (!uvedit_uv_selected(em, scene, l)) bglVertex2fv(luv->uv); @@ -791,11 +791,11 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) cpack(0xFF); bglBegin(GL_POINTS); - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); if (luv->flag & MLOOPUV_PINNED) @@ -809,11 +809,11 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glPointSize(pointsize); bglBegin(GL_POINTS); - BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); if (uvedit_uv_selected(em, scene, l)) diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 8046555443c..4e3a7540261 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -204,7 +204,7 @@ void ED_uvedit_assign_image(Main *bmain, Scene *scene, Object *obedit, Image *im } /* now assign to all visible faces */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (uvedit_face_visible(scene, previma, efa, tf)) { @@ -251,7 +251,7 @@ static int uvedit_set_tile(Object *obedit, Image *ima, int curtile) em = BMEdit_FromObject(obedit); - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && BM_elem_flag_test(efa, BM_ELEM_SELECT)) @@ -314,7 +314,7 @@ int uvedit_face_selected(Scene *scene, BMEditMesh *em, BMFace *efa) MLoopUV *luv; BMIter liter; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (!(luv->flag & MLOOPUV_VERTSEL)) return 0; @@ -335,7 +335,7 @@ int uvedit_face_select(Scene *scene, BMEditMesh *em, BMFace *efa) MLoopUV *luv; BMIter liter; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; } @@ -358,7 +358,7 @@ int uvedit_face_deselect(Scene *scene, BMEditMesh *em, BMFace *efa) MLoopUV *luv; BMIter liter; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag &= ~MLOOPUV_VERTSEL; } @@ -518,7 +518,7 @@ void poly_uv_center(BMEditMesh *em, BMFace *f, float cent[2]) zero_v2(cent); - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); add_v2_v2(cent, luv->uv); } @@ -597,12 +597,12 @@ int ED_uvedit_minmax(Scene *scene, Image *ima, Object *obedit, float *min, float INIT_MINMAX2(min, max); sel = 0; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (uvedit_uv_selected(em, scene, l)) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); DO_MINMAX2(luv->uv, min, max); @@ -625,12 +625,12 @@ static int ED_uvedit_median(Scene *scene, Image *ima, Object *obedit, float co[2 unsigned int sel = 0; zero_v2(co); - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (uvedit_uv_selected(em, scene, l)) { add_v2_v2(co, luv->uv); @@ -681,13 +681,13 @@ void uv_find_nearest_edge(Scene *scene, Image *ima, BMEditMesh *em, float co[2], BM_mesh_elem_index_ensure(em->bm, BM_VERT); - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; i = 0; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); nextluv = CustomData_bmesh_get(&em->bm->ldata, l->next->head.data, CD_MLOOPUV); @@ -730,13 +730,13 @@ static void find_nearest_uv_face(Scene *scene, Image *ima, BMEditMesh *em, float hit->l = hit->nextl = NULL; hit->luv = hit->nextluv = NULL; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; cent[0] = cent[1] = 0.0f; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); add_v2_v2(cent, luv->uv); @@ -770,7 +770,7 @@ static int nearest_uv_between(BMEditMesh *em, BMFace *efa, int UNUSED(nverts), i m[1] = co[1] - uv[1]; i = 0; - BM_ITER(l, &iter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &iter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (i == id1) @@ -821,13 +821,13 @@ void uv_find_nearest_vert(Scene *scene, Image *ima, BMEditMesh *em, BM_mesh_elem_index_ensure(em->bm, BM_VERT); - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; i = 0; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (penalty && uvedit_uv_selected(em, scene, l)) @@ -874,12 +874,12 @@ int ED_uvedit_nearest_uv(Scene *scene, Object *obedit, Image *ima, float co[2], uv[0] = co[0]; uv[1] = co[1]; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); dist = fabs(co[0] - luv->uv[0]) + fabs(co[1] - luv->uv[1]); @@ -1014,7 +1014,7 @@ static int select_edgeloop(Scene *scene, Image *ima, BMEditMesh *em, NearestHit BM_mesh_elem_index_ensure(em->bm, BM_VERT); count = 0; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!extend) { uvedit_face_deselect(scene, em, efa); } @@ -1047,7 +1047,7 @@ static int select_edgeloop(Scene *scene, Image *ima, BMEditMesh *em, NearestHit /* find correct valence edges which are not tagged yet, but connect to tagged one */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!BMO_elem_flag_test(em->bm, efa, EFA_F1_FLAG) && uvedit_face_visible(scene, ima, efa, tf)) { @@ -1092,9 +1092,9 @@ static int select_edgeloop(Scene *scene, Image *ima, BMEditMesh *em, NearestHit else select = 1; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { a = 0; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { iterv1 = uv_vertex_map_get(vmap, efa, a); if (iterv1->flag) { @@ -1138,11 +1138,11 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ flag = MEM_callocN(sizeof(*flag) * em->bm->totface, "UvLinkFlag"); if (!hit) { - BM_ITER_INDEX(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL, a) { + BM_ITER_INDEX (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL, a) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (uvedit_face_visible(scene, ima, efa, tf)) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (luv->flag & MLOOPUV_VERTSEL) { @@ -1158,7 +1158,7 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ } else { a = 0; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (efa == hit->efa) { stack[stacksize] = a; stacksize++; @@ -1177,7 +1177,7 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ a = stack[stacksize]; j = 0; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (j == a) break; @@ -1185,7 +1185,7 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ } i = 0; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { /* make_uv_vert_map_EM sets verts tmp.l to the indices */ vlist = EDBM_uv_vert_map_at_index(vmap, BM_elem_index_get(l->v)); @@ -1215,8 +1215,8 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ if (!extend) { a = 0; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (flag[a]) @@ -1229,13 +1229,13 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ } else { a = 0; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!flag[a]) { a++; continue; } - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (luv->flag & MLOOPUV_VERTSEL) @@ -1250,13 +1250,13 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ if (efa) { a = 0; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!flag[a]) { a++; continue; } - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag &= ~MLOOPUV_VERTSEL; @@ -1267,13 +1267,13 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ } else { a = 0; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!flag[a]) { a++; continue; } - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; @@ -1297,7 +1297,7 @@ static float *uv_sel_co_from_eve(Scene *scene, Image *ima, BMEditMesh *em, BMVer BMIter liter; BMLoop *l; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_VERT, eve) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_VERT, eve) { MTexPoly *tf = CustomData_bmesh_get(&em->bm->pdata, l->f->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, l->f, tf)) @@ -1338,13 +1338,13 @@ static void weld_align_uv(bContext *C, int tool) BMFace *efa; BMLoop *l; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (uvedit_uv_selected(em, scene, l)) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); DO_MINMAX2(luv->uv, min, max); @@ -1361,12 +1361,12 @@ static void weld_align_uv(bContext *C, int tool) BMFace *efa; BMLoop *l; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (uvedit_uv_selected(em, scene, l)) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->uv[0] = cent[0]; @@ -1380,12 +1380,12 @@ static void weld_align_uv(bContext *C, int tool) BMFace *efa; BMLoop *l; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (uvedit_uv_selected(em, scene, l)) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->uv[1] = cent[1]; @@ -1403,13 +1403,13 @@ static void weld_align_uv(bContext *C, int tool) BMIter iter, liter, eiter; /* clear tag */ - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { BM_elem_flag_disable(eve, BM_ELEM_TAG); } /* tag verts with a selected UV */ - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_VERT, eve) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_VERT, eve) { tf = CustomData_bmesh_get(&em->bm->pdata, l->f->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, l->f, tf)) @@ -1423,16 +1423,16 @@ static void weld_align_uv(bContext *C, int tool) } /* flush vertex tags to edges */ - BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { BM_elem_flag_set(eed, BM_ELEM_TAG, (BM_elem_flag_test(eed->v1, BM_ELEM_TAG) && BM_elem_flag_test(eed->v2, BM_ELEM_TAG))); } /* find a vertex with only one tagged edge */ eve_start = NULL; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { int tot_eed_tag = 0; - BM_ITER(eed, &eiter, em->bm, BM_EDGES_OF_VERT, eve) { + BM_ITER (eed, &eiter, em->bm, BM_EDGES_OF_VERT, eve) { if (BM_elem_flag_test(eed, BM_ELEM_TAG)) { tot_eed_tag++; } @@ -1461,7 +1461,7 @@ static void weld_align_uv(bContext *C, int tool) eve_next = NULL; /* find next eve */ - BM_ITER(eed, &eiter, em->bm, BM_EDGES_OF_VERT, eve) { + BM_ITER (eed, &eiter, em->bm, BM_EDGES_OF_VERT, eve) { if (BM_elem_flag_test(eed, BM_ELEM_TAG)) { BMVert *eve_other = BM_edge_other_vert(eed, eve); if (BM_elem_flag_test(eve_other, BM_ELEM_TAG)) { @@ -1499,7 +1499,7 @@ static void weld_align_uv(bContext *C, int tool) /* go over all verts except for endpoints */ for (i = 0; i < BLI_array_count(eve_line); i++) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_VERT, eve_line[i]) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_VERT, eve_line[i]) { tf = CustomData_bmesh_get(&em->bm->pdata, l->f->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, l->f, tf)) @@ -1637,13 +1637,13 @@ static void select_all_perform(bContext *C, int action) else { if (action == SEL_TOGGLE) { action = SEL_SELECT; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (luv->flag & MLOOPUV_VERTSEL) { @@ -1655,13 +1655,13 @@ static void select_all_perform(bContext *C, int action) } - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); switch (action) { @@ -1856,7 +1856,7 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop) BLI_array_growitems(hitv, hit.efa->len); BLI_array_growitems(hituv, hit.efa->len); i = 0; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, hit.efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, hit.efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); hituv[i] = luv->uv; hitv[i] = BM_elem_index_get(l->v); @@ -1935,12 +1935,12 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop) /* deselect */ if (select == 0) { - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (sticky_select(limit, hitv, BM_elem_index_get(l->v), hituv, luv->uv, sticky, hitlen)) uvedit_uv_deselect(em, scene, l); @@ -1950,12 +1950,12 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop) } /* select */ else { - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (sticky_select(limit, hitv, BM_elem_index_get(l->v), hituv, luv->uv, sticky, hitlen)) uvedit_uv_select(em, scene, l); @@ -1968,7 +1968,7 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop) } else { /* deselect all */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { uvedit_face_deselect(scene, em, efa); } @@ -1989,12 +1989,12 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop) /* select sticky uvs */ if (sticky != SI_STICKY_DISABLE) { - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (sticky == SI_STICKY_DISABLE) continue; luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); @@ -2241,14 +2241,14 @@ static int unlink_selection_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { int desel = 0; tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (!(luv->flag & MLOOPUV_VERTSEL)) { @@ -2258,7 +2258,7 @@ static int unlink_selection_exec(bContext *C, wmOperator *op) } if (desel) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag &= ~MLOOPUV_VERTSEL; } @@ -2313,23 +2313,23 @@ static void uv_faces_do_sticky(bContext *C, SpaceImage *sima, Scene *scene, Obje * in the loop and select all MLoopUV's that use a touched vert. */ BMVert *eve; - BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { BM_elem_flag_disable(eve, BM_ELEM_TAG); } - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(efa, BM_ELEM_TAG)) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { BM_elem_flag_enable(l->v, BM_ELEM_TAG); } } } /* now select tagged verts */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { /* tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); */ /* UNUSED */ - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (BM_elem_flag_test(l->v, BM_ELEM_TAG)) { if (select) uvedit_uv_select(em, scene, l); @@ -2364,7 +2364,7 @@ static void uv_faces_do_sticky(bContext *C, SpaceImage *sima, Scene *scene, Obje if (BM_elem_flag_test(efa, BM_ELEM_TAG)) { /* tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); */ /* UNUSED */ - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (select) uvedit_uv_select(em, scene, l); else @@ -2407,7 +2407,7 @@ static void uv_faces_do_sticky(bContext *C, SpaceImage *sima, Scene *scene, Obje } else { /* SI_STICKY_DISABLE or ts->uv_flag & UV_SYNC_SELECTION */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(efa, BM_ELEM_TAG)) { if (select) uvedit_face_select(scene, em, efa); @@ -2465,7 +2465,7 @@ static int border_select_exec(bContext *C, wmOperator *op) change = 0; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { /* assume not touched */ BM_elem_flag_disable(efa, BM_ELEM_TAG); @@ -2487,11 +2487,11 @@ static int border_select_exec(bContext *C, wmOperator *op) /* other selection modes */ change = 1; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (!pinned || (ts->uv_flag & UV_SYNC_SELECTION) ) { @@ -2608,8 +2608,8 @@ static int circle_select_exec(bContext *C, wmOperator *op) UI_view2d_region_to_view(&ar->v2d, x, y, &offset[0], &offset[1]); /* do selection */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); select_uv_inside_ellipse(em, sima, scene, select, offset, ellipse, l, luv); } @@ -2728,12 +2728,12 @@ static int snap_uvs_to_cursor(Scene *scene, Image *ima, Object *obedit, SpaceIma MLoopUV *luv; short change = 0; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tface = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tface)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (uvedit_uv_selected(em, scene, l)) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); copy_v2_v2(luv->uv, sima->cursor); @@ -2758,11 +2758,11 @@ static int snap_uvs_to_adjacent_unselected(Scene *scene, Image *ima, Object *obe /* index every vert that has a selected UV using it, but only once so as to * get unique indices and to count how much to malloc */ - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { tface = CustomData_bmesh_get(&bm->pdata, f->head.data, CD_MTEXPOLY); if (uvedit_face_visible(scene, ima, f, tface)) { BM_elem_flag_enable(f, BM_ELEM_TAG); - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { BM_elem_flag_set(l, BM_ELEM_TAG, uvedit_uv_selected(em, scene, l)); } } @@ -2771,14 +2771,14 @@ static int snap_uvs_to_adjacent_unselected(Scene *scene, Image *ima, Object *obe } } - BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(f, BM_ELEM_TAG)) { /* face: visible */ - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { if (BM_elem_flag_test(l, BM_ELEM_TAG)) { /* loop: selected*/ float uv[2] = {0.0f, 0.0f}; int uv_tot = 0; - BM_ITER(lsub, &lsubiter, bm, BM_LOOPS_OF_VERT, l->v) { + BM_ITER (lsub, &lsubiter, bm, BM_LOOPS_OF_VERT, l->v) { if (BM_elem_flag_test(lsub->f, BM_ELEM_TAG) && /* face: visible */ !BM_elem_flag_test(lsub, BM_ELEM_TAG)) /* loop: unselected */ { @@ -2819,12 +2819,12 @@ static int snap_uvs_to_pixels(SpaceImage *sima, Scene *scene, Object *obedit) w = (float)width; h = (float)height; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tface = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tface)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (uvedit_uv_selected(em, scene, l)) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); snap_uv_to_pixel(luv->uv, w, h); @@ -2904,12 +2904,12 @@ static int pin_exec(bContext *C, wmOperator *op) MLoopUV *luv; int clear = RNA_boolean_get(op->ptr, "clear"); - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tface = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tface)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (!clear) { @@ -2958,12 +2958,12 @@ static int select_pinned_exec(bContext *C, wmOperator *UNUSED(op)) MTexPoly *tface; MLoopUV *luv; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tface = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tface)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (luv->flag & MLOOPUV_PINNED) @@ -3035,7 +3035,7 @@ static int hide_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { int hide = 0; tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); @@ -3044,7 +3044,7 @@ static int hide_exec(bContext *C, wmOperator *op) continue; } - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (UV_SEL_TEST(luv, !swap)) { @@ -3066,7 +3066,7 @@ static int hide_exec(bContext *C, wmOperator *op) } else { if (bm_face_is_all_uv_sel(em->bm, efa, TRUE) == !swap) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (UV_SEL_TEST(luv, !swap)) { BM_elem_select_set(em->bm, l->v, FALSE); @@ -3086,7 +3086,7 @@ static int hide_exec(bContext *C, wmOperator *op) } } else { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (UV_SEL_TEST(luv, !swap)) { BM_elem_select_set(em->bm, l->v, FALSE); @@ -3153,10 +3153,10 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) } if (facemode) { if (em->selectmode == SCE_SELECT_FACE) { - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { BM_elem_flag_disable(efa, BM_ELEM_TAG); if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; } @@ -3168,16 +3168,16 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) else { /* enable adjacent faces to have disconnected UV selections if sticky is disabled */ if (!stickymode) { - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { BM_elem_flag_disable(efa, BM_ELEM_TAG); if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) { int totsel = 0; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { totsel += BM_elem_flag_test(l->v, BM_ELEM_SELECT); } if (!totsel) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; } @@ -3188,10 +3188,10 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) } } else { - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { BM_elem_flag_disable(efa, BM_ELEM_TAG); if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (BM_elem_flag_test(l->v, BM_ELEM_SELECT) == 0) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; @@ -3205,10 +3205,10 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) } } else if (em->selectmode == SCE_SELECT_FACE) { - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { BM_elem_flag_disable(efa, BM_ELEM_TAG); if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; } @@ -3218,10 +3218,10 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) } } else { - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { BM_elem_flag_disable(efa, BM_ELEM_TAG); if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (BM_elem_flag_test(l->v, BM_ELEM_SELECT) == 0) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; @@ -3395,7 +3395,7 @@ static int seams_from_islands_exec(bContext *C, wmOperator *op) EDBM_index_arrays_init(em, 0, 0, 1); vmap = EDBM_uv_vert_map_create(em, 0, 0, limit); - BM_ITER(editedge, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (editedge, &iter, bm, BM_EDGES_OF_MESH, NULL) { /* flags to determine if we uv is separated from first editface match */ char separated1 = 0, separated2; /* set to denote edge must be flagged as seam */ @@ -3511,8 +3511,8 @@ static int mark_seam_exec(bContext *C, wmOperator *UNUSED(op)) BMIter iter, liter; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { - BM_ITER(loop, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (loop, &liter, bm, BM_LOOPS_OF_FACE, efa) { if (uvedit_edge_selected(em, scene, loop)) { BM_elem_flag_enable(loop->e, BM_ELEM_SEAM); } diff --git a/source/blender/editors/uvedit/uvedit_smart_stitch.c b/source/blender/editors/uvedit/uvedit_smart_stitch.c index 33ecf3c97ef..cd89dd4b294 100644 --- a/source/blender/editors/uvedit/uvedit_smart_stitch.c +++ b/source/blender/editors/uvedit/uvedit_smart_stitch.c @@ -686,7 +686,7 @@ static int stitch_process_data(StitchState *state, Scene *scene, int final) } /* copy data from MTFaces to the preview display buffers */ - BM_ITER(efa, &iter, state->em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, state->em->bm, BM_FACES_OF_MESH, NULL) { /* just to test if face was added for processing. uvs of inselected vertices will return NULL */ UvElement *element = ED_uv_element_get(state->element_map, efa, BM_FACE_FIRST_LOOP(efa)); @@ -696,7 +696,7 @@ static int stitch_process_data(StitchState *state, Scene *scene, int final) int face_preview_pos = preview_position[index].data_position; if (face_preview_pos != STITCH_NO_PREVIEW) { preview->uvs_per_polygon[preview_position[index].polycount_position] = efa->len; - BM_ITER_INDEX(l, &liter, state->em->bm, BM_LOOPS_OF_FACE, efa, i) { + BM_ITER_INDEX (l, &liter, state->em->bm, BM_LOOPS_OF_FACE, efa, i) { luv = CustomData_bmesh_get(&state->em->bm->ldata, l->head.data, CD_MLOOPUV); copy_v2_v2(preview->preview_polys + face_preview_pos + i * 2, luv->uv); } @@ -706,7 +706,7 @@ static int stitch_process_data(StitchState *state, Scene *scene, int final) BMLoop *fl = BM_FACE_FIRST_LOOP(efa); MLoopUV *fuv = CustomData_bmesh_get(&state->em->bm->ldata, fl->head.data, CD_MLOOPUV); - BM_ITER_INDEX(l, &liter, state->em->bm, BM_LOOPS_OF_FACE, efa, i) { + BM_ITER_INDEX (l, &liter, state->em->bm, BM_LOOPS_OF_FACE, efa, i) { if (i < numoftris) { /* using next since the first uv is already accounted for */ BMLoop *lnext = l->next; @@ -1061,11 +1061,11 @@ static int stitch_init(bContext *C, wmOperator *op) counter = 0; /* Now, on to generate our uv connectivity data */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!(ts->uv_flag & UV_SYNC_SELECTION) && ((BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) || !BM_elem_flag_test(efa, BM_ELEM_SELECT))) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { UvElement *element = ED_uv_element_get(state->element_map, efa, l); int offset1, itmp1 = element - state->element_map->buf; int offset2, itmp2 = ED_uv_element_get(state->element_map, efa, l->next) - state->element_map->buf; @@ -1177,9 +1177,9 @@ static int stitch_init(bContext *C, wmOperator *op) } else { - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { i = 0; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (uvedit_uv_selected(em, scene, l)) { UvElement *element = ED_uv_element_get(state->element_map, efa, l); stitch_select_uv(element, state, 1); @@ -1197,7 +1197,7 @@ static int stitch_init(bContext *C, wmOperator *op) state->tris_per_island[i] = 0; } - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { UvElement *element = ED_uv_element_get(state->element_map, efa, BM_FACE_FIRST_LOOP(efa)); if (element) { diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index 6e1506d4c0f..8c3906a2c2d 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -138,7 +138,7 @@ static int ED_uvedit_ensure_uvs(bContext *C, Scene *scene, Object *obedit) ED_uvedit_assign_image(bmain, scene, obedit, ima, NULL); /* select new UV's */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { uvedit_face_select(scene, em, efa); } @@ -156,7 +156,7 @@ static int uvedit_have_selection(Scene *scene, BMEditMesh *em, short implicit) /* verify if we have any selected uv's before unwrapping, * so we can cancel the operator early */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (scene->toolsettings->uv_flag & UV_SYNC_SELECTION) { if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; @@ -164,7 +164,7 @@ static int uvedit_have_selection(Scene *scene, BMEditMesh *em, short implicit) else if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN) || !BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (!luv) return 1; @@ -215,7 +215,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, BLI_srand(0); - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { ScanFillVert *v, *lastv, *firstv; ScanFillFace *sefa; ParamKey key, vkeys[4]; @@ -230,7 +230,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, lsel = 0; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (uvedit_uv_selected(em, scene, l)) { lsel = 1; break; @@ -247,7 +247,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, /* for quads let parametrize split, it can make better decisions about which split is best for unwrapping than scanfill */ i = 0; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); vkeys[i] = (ParamKey)BM_elem_index_get(l->v); co[i] = l->v->co; @@ -265,7 +265,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, BLI_begin_edgefill(&sf_ctx); firstv = lastv = NULL; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { int i; v = BLI_addfillvert(&sf_ctx, l->v->co); @@ -311,7 +311,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, } if (!implicit) { - BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(eed, BM_ELEM_SEAM)) { ParamKey vkeys[2]; vkeys[0] = (ParamKey)BM_elem_index_get(eed->v1); @@ -340,7 +340,7 @@ static void texface_from_original_index(BMFace *efa, int index, float **uv, Para if (index == ORIGINDEX_NONE) return; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { if (BM_elem_index_get(l->v) == index) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); *uv = luv->uv; @@ -868,9 +868,9 @@ static void uv_map_transform_center(Scene *scene, View3D *v3d, float *result, min[0] = min[1] = min[2] = 1e20f; max[0] = max[1] = max[2] = -1e20f; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { DO_MINMAX(l->v->co, min, max); } } @@ -1020,11 +1020,11 @@ static void correct_uv_aspect(BMEditMesh *em) if (aspx > aspy) { scale = aspy / aspx; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT) || BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->uv[0] = ((luv->uv[0] - 0.5) * scale) + 0.5; } @@ -1033,11 +1033,11 @@ static void correct_uv_aspect(BMEditMesh *em) else { scale = aspx / aspy; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT) || BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->uv[1] = ((luv->uv[1] - 0.5) * scale) + 0.5; } @@ -1075,11 +1075,11 @@ static void uv_map_clip_correct(BMEditMesh *em, wmOperator *op) if (scale_to_bounds) { INIT_MINMAX2(min, max); - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); DO_MINMAX2(luv->uv, min, max); } @@ -1094,11 +1094,11 @@ static void uv_map_clip_correct(BMEditMesh *em, wmOperator *op) if (dy > 0.0f) dy = 1.0f / dy; - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->uv[0] = (luv->uv[0] - min[0]) * dx; @@ -1108,11 +1108,11 @@ static void uv_map_clip_correct(BMEditMesh *em, wmOperator *op) } else if (clip_to_bounds) { /* clipping and wrapping */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); CLAMP(luv->uv[0], 0.0f, 1.0f); CLAMP(luv->uv[1], 0.0f, 1.0f); @@ -1257,11 +1257,11 @@ static int uv_from_view_exec(bContext *C, wmOperator *op) if (RNA_boolean_get(op->ptr, "orthographic")) { uv_map_rotation_matrix(rotmat, rv3d, obedit, 90.0f, 0.0f, 1.0f); - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); project_from_view_ortho(luv->uv, l->v->co, rotmat); } @@ -1271,11 +1271,11 @@ static int uv_from_view_exec(bContext *C, wmOperator *op) struct UvCameraInfo *uci = project_camera_info(v3d->camera, obedit->obmat, scene->r.xsch, scene->r.ysch); if (uci) { - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); project_from_camera(luv->uv, l->v->co, uci); } @@ -1287,11 +1287,11 @@ static int uv_from_view_exec(bContext *C, wmOperator *op) else { copy_m4_m4(rotmat, obedit->obmat); - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); project_from_view(luv->uv, l->v->co, rv3d->persmat, rotmat, ar->winx, ar->winy); } @@ -1394,7 +1394,7 @@ static void uv_map_mirror(BMEditMesh *em, BMFace *efa, MTexPoly *UNUSED(tf)) int i, mi; i = 0; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); uvs[i] = luv->uv; i++; @@ -1434,11 +1434,11 @@ static int sphere_project_exec(bContext *C, wmOperator *op) uv_map_transform(C, op, center, rotmat); - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); uv_sphere_project(luv->uv, l->v->co, center, rotmat); @@ -1507,12 +1507,12 @@ static int cylinder_project_exec(bContext *C, wmOperator *op) uv_map_transform(C, op, center, rotmat); - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); uv_cylinder_project(luv->uv, l->v->co, center, rotmat); @@ -1571,7 +1571,7 @@ static int cube_project_exec(bContext *C, wmOperator *op) /* choose x,y,z axis for projection depending on the largest normal * component, but clusters all together around the center of map. */ - BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { int first = 1; /* tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); */ /* UNUSED */ @@ -1581,7 +1581,7 @@ static int cube_project_exec(bContext *C, wmOperator *op) axis_dominant_v3(&cox, &coy, efa->no); dx = dy = 0; - BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->uv[0] = 0.5f + 0.5f * cube_size * (loc[cox] + l->v->co[cox]); diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c index ead657aaf24..8a3c730385b 100644 --- a/source/blender/modifiers/intern/MOD_array.c +++ b/source/blender/modifiers/intern/MOD_array.c @@ -179,12 +179,12 @@ static int *find_doubles_index_map(BMesh *bm, BMOperator *dupe_op, BMO_op_exec(bm, &find_op); i = 0; - BMO_ITER(ele, &oiter, bm, dupe_op, "geom", BM_ALL) { + BMO_ITER (ele, &oiter, bm, dupe_op, "geom", BM_ALL) { BM_elem_index_set(ele, i); /* set_dirty */ i++; } - BMO_ITER(ele, &oiter, bm, dupe_op, "newout", BM_ALL) { + BMO_ITER (ele, &oiter, bm, dupe_op, "newout", BM_ALL) { BM_elem_index_set(ele, i); /* set_dirty */ i++; } @@ -196,7 +196,7 @@ static int *find_doubles_index_map(BMesh *bm, BMOperator *dupe_op, index_map = MEM_callocN(sizeof(int) * (*index_map_length), "index_map"); /*element type argument doesn't do anything here*/ - BMO_ITER(v, &oiter, bm, &find_op, "targetmapout", 0) { + BMO_ITER (v, &oiter, bm, &find_op, "targetmapout", 0) { v2 = BMO_iter_map_value_p(&oiter); index_map[BM_elem_index_get(v)] = BM_elem_index_get(v2) + 1; @@ -240,7 +240,7 @@ static void bm_merge_dm_transform(BMesh* bm, DerivedMesh *dm, float mat[4][4], BMO_slot_buffer_append(&find_op, "verts", dupe_op, dupe_slot_name); /* transform and tag verts */ - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(v, BM_ELEM_TAG)) { mul_m4_v3(mat, v->co); BM_elem_flag_enable(v, BM_ELEM_TAG); @@ -250,7 +250,7 @@ static void bm_merge_dm_transform(BMesh* bm, DerivedMesh *dm, float mat[4][4], BMO_op_exec(bm, &find_op); /* add new merge targets to weld operator */ - BMO_ITER(v, &oiter, bm, &find_op, "targetmapout", 0) { + BMO_ITER (v, &oiter, bm, &find_op, "targetmapout", 0) { v2 = BMO_iter_map_value_p(&oiter); BMO_slot_map_ptr_insert(bm, weld_op, "targetmap", v, v2); } @@ -259,7 +259,7 @@ static void bm_merge_dm_transform(BMesh* bm, DerivedMesh *dm, float mat[4][4], } else { /* transform and tag verts */ - BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { if (!BM_elem_flag_test(v, BM_ELEM_TAG)) { mul_m4_v3(mat, v->co); BM_elem_flag_enable(v, BM_ELEM_TAG); @@ -289,7 +289,7 @@ static void merge_first_last(BMesh* bm, BMO_op_exec(bm, &find_op); /* add new merge targets to weld operator */ - BMO_ITER(v, &oiter, bm, &find_op, "targetmapout", 0) { + BMO_ITER (v, &oiter, bm, &find_op, "targetmapout", 0) { v2 = BMO_iter_map_value_p(&oiter); BMO_slot_map_ptr_insert(bm, weld_op, "targetmap", v, v2); } @@ -432,7 +432,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, } /* apply transformation matrix */ - BMO_ITER(v, &oiter, em->bm, &dupe_op, "newout", BM_VERT) { + BMO_ITER (v, &oiter, em->bm, &dupe_op, "newout", BM_VERT) { mul_m4_v3(offset, v->co); } diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c index 57634627cee..ef728477408 100644 --- a/source/blender/modifiers/intern/MOD_bevel.c +++ b/source/blender/modifiers/intern/MOD_bevel.c @@ -125,7 +125,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Object *UNUSED(ob), BMO_push(bm, NULL); if (bmd->lim_flags & BME_BEVEL_ANGLE) { - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { /* check for 1 edge having 2 face users */ BMLoop *l1, *l2; if ( (l1= e->l) && @@ -139,7 +139,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Object *UNUSED(ob), } else { /* crummy, is there a way just to operator on all? - campbell */ - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { BMO_elem_flag_enable(bm, e, EDGE_MARK); } } diff --git a/source/blender/modifiers/intern/MOD_edgesplit.c b/source/blender/modifiers/intern/MOD_edgesplit.c index 6ffacba3b68..38ed2fbe801 100644 --- a/source/blender/modifiers/intern/MOD_edgesplit.c +++ b/source/blender/modifiers/intern/MOD_edgesplit.c @@ -73,7 +73,7 @@ static DerivedMesh *doEdgeSplit(DerivedMesh *dm, EdgeSplitModifierData *emd, Obj BMO_push(bm, NULL); if (emd->flags & MOD_EDGESPLIT_FROMANGLE) { - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { /* check for 1 edge having 2 face users */ BMLoop *l1, *l2; if ( (l1= e->l) && @@ -87,7 +87,7 @@ static DerivedMesh *doEdgeSplit(DerivedMesh *dm, EdgeSplitModifierData *emd, Obj } if (emd->flags & MOD_EDGESPLIT_FROMFLAG) { - BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { /* check for 2 or more edge users */ if ((e->l) && (e->l->next != e->l)) diff --git a/source/blender/python/bmesh/bmesh_py_types.c b/source/blender/python/bmesh/bmesh_py_types.c index 6b6fd8a0bd4..e3020fb0e18 100644 --- a/source/blender/python/bmesh/bmesh_py_types.c +++ b/source/blender/python/bmesh/bmesh_py_types.c @@ -998,13 +998,13 @@ static PyObject *bpy_bmesh_transform(BPy_BMElem *self, PyObject *args, PyObject mat_ptr = mat->matrix; if (!filter_flags) { - BM_ITER(eve, &iter, self->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, self->bm, BM_VERTS_OF_MESH, NULL) { mul_m4_v3((float (*)[4])mat_ptr, eve->co); } } else { char filter_flags_ch = (char)filter_flags; - BM_ITER(eve, &iter, self->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, self->bm, BM_VERTS_OF_MESH, NULL) { if (eve->head.hflag & filter_flags_ch) { mul_m4_v3((float (*)[4])mat_ptr, eve->co); } diff --git a/source/blender/python/bmesh/bmesh_py_types.h b/source/blender/python/bmesh/bmesh_py_types.h index 0a94b346485..450a1366c31 100644 --- a/source/blender/python/bmesh/bmesh_py_types.h +++ b/source/blender/python/bmesh/bmesh_py_types.h @@ -176,7 +176,7 @@ char *BPy_BMElem_StringFromHType(const char htype); #define BPY_BM_IS_VALID(obj) (LIKELY((obj)->bm != NULL)) #define BM_ITER_BPY_BM_SEQ(ele, iter, bpy_bmelemseq) \ - BM_ITER(ele, iter, (bpy_bmelemseq)->bm, (bpy_bmelemseq)->itype, \ + BM_ITER (ele, iter, (bpy_bmelemseq)->bm, (bpy_bmelemseq)->itype, \ (bpy_bmelemseq)->py_ele ? ((BPy_BMElem *)(bpy_bmelemseq)->py_ele)->ele : NULL) #endif /* __BMESH_TYPES_H__ */ From 7cadd242d3eb7a29f19efe1d1462dbe12998c196 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Thu, 19 Apr 2012 12:31:39 +0000 Subject: [PATCH 122/156] BMESH_TODO: xsort of vertices working again. This commits adds a new function which can remap vertices/edges/faces of a BMesh in a new given order: void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx) --- source/blender/bmesh/intern/bmesh_mesh.c | 170 +++++++++++++++++++ source/blender/bmesh/intern/bmesh_mesh.h | 1 + source/blender/editors/mesh/editmesh_tools.c | 86 ++++++---- 3 files changed, 220 insertions(+), 37 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c index 826d4db4556..c70e694f9ea 100644 --- a/source/blender/bmesh/intern/bmesh_mesh.c +++ b/source/blender/bmesh/intern/bmesh_mesh.c @@ -584,6 +584,176 @@ void BM_mesh_elem_index_validate(BMesh *bm, const char *location, const char *fu } +/** + * Remaps the vertices, edges and/or faces of the bmesh as indicated by vert/edge/face_idx arrays + * (xxx_idx[org_index] = new_index). + * + * A NULL array means no changes. + * + * Note: - Does not mess with indices, just sets elem_index_dirty flag. + * - For verts/edges/faces only (as loops must remain "ordered" and "aligned" + * on a per-face basis...). + * + * WARNING: Be careful if you keep pointers to affected BM elements, or arrays, when using this func! + */ +void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx) +{ + /* Mapping old to new pointers. */ + GHash *vptr_map = NULL, *eptr_map = NULL, *fptr_map = NULL; + BMIter iter, iterl; + BMVert *ve; + BMEdge *ed; + BMFace *fa; + BMLoop *lo; + + if (!(vert_idx || edge_idx || face_idx)) + return; + + /* Remap vertices */ + if (vert_idx) { + BMVert **verts_pool, *verts_copy, **vep; + int i, totvert = bm->totvert; + int *new_idx = NULL; + + /* Init the old-to-new vert pointers mapping */ + vptr_map = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "BM_mesh_remap vert pointers mapping"); + + /* Make a copy of all vertices. */ + verts_pool = MEM_callocN(sizeof(BMVert*) * totvert, "BM_mesh_remap verts pool"); + BM_iter_as_array(bm, BM_VERTS_OF_MESH, NULL, (void**)verts_pool, totvert); + verts_copy = MEM_mallocN(sizeof(BMVert) * totvert, "BM_mesh_remap verts copy"); + for (i = totvert, ve = verts_copy + totvert - 1, vep = verts_pool + totvert - 1; i--; ve--, vep--) { + *ve = **vep; +/* printf("*vep: %p, verts_pool[%d]: %p\n", *vep, i, verts_pool[i]);*/ + } + + /* Copy back verts to their new place, and update old2new pointers mapping. */ + new_idx = vert_idx + totvert - 1; + ve = verts_copy + totvert - 1; + vep = verts_pool + totvert - 1; /* old, org pointer */ + for (i = totvert; i--; new_idx--, ve--, vep--) { + BMVert *new_vep = verts_pool[*new_idx]; + *new_vep = *ve; +/* printf("mapping vert from %d to %d (%p/%p to %p)\n", i, *new_idx, *vep, verts_pool[i], new_vep);*/ + BLI_ghash_insert(vptr_map, (void*)*vep, (void*)new_vep); + } + bm->elem_index_dirty |= BM_VERT; + + MEM_freeN(verts_pool); + MEM_freeN(verts_copy); + } + + /* XXX Code not tested yet (though I don't why it would fail)! */ + if (edge_idx) { + BMEdge **edges_pool, *edges_copy, **edp; + int i, totedge = bm->totedge; + int *new_idx = NULL; + + /* Init the old-to-new vert pointers mapping */ + eptr_map = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "BM_mesh_remap edge pointers mapping"); + + /* Make a copy of all vertices. */ + edges_pool = MEM_callocN(sizeof(BMEdge*) * totedge, "BM_mesh_remap edges pool"); + BM_iter_as_array(bm, BM_EDGES_OF_MESH, NULL, (void**)edges_pool, totedge); + edges_copy = MEM_mallocN(sizeof(BMEdge) * totedge, "BM_mesh_remap edges copy"); + for (i = totedge, ed = edges_copy + totedge - 1, edp = edges_pool + totedge - 1; i--; ed--, edp--) { + *ed = **edp; + } + + /* Copy back verts to their new place, and update old2new pointers mapping. */ + new_idx = edge_idx + totedge - 1; + ed = edges_copy + totedge - 1; + edp = edges_pool + totedge - 1; /* old, org pointer */ + for (i = totedge; i--; new_idx--, ed--, edp--) { + BMEdge *new_edp = edges_pool[*new_idx]; + *new_edp = *ed; + BLI_ghash_insert(eptr_map, (void*)*edp, (void*)new_edp); + } + + bm->elem_index_dirty |= BM_EDGE; + + MEM_freeN(edges_pool); + MEM_freeN(edges_copy); + } + + /* XXX Code not tested yet (though I don't why it would fail)! */ + if (face_idx) { + BMFace **faces_pool, *faces_copy, **fap; + int i, totface = bm->totface; + int *new_idx = NULL; + + /* Init the old-to-new vert pointers mapping */ + fptr_map = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "BM_mesh_remap face pointers mapping"); + + /* Make a copy of all vertices. */ + faces_pool = MEM_callocN(sizeof(BMFace*) * totface, "BM_mesh_remap faces pool"); + BM_iter_as_array(bm, BM_FACES_OF_MESH, NULL, (void**)faces_pool, totface); + faces_copy = MEM_mallocN(sizeof(BMFace) * totface, "BM_mesh_remap faces copy"); + for (i = totface, fa = faces_copy + totface - 1, fap = faces_pool + totface - 1; i--; fa--, fap--) { + *fa = **fap; + } + + /* Copy back verts to their new place, and update old2new pointers mapping. */ + new_idx = face_idx + totface - 1; + fa = faces_copy + totface - 1; + fap = faces_pool + totface - 1; /* old, org pointer */ + for (i = totface; i--; new_idx--, fa--, fap--) { + BMFace *new_fap = faces_pool[*new_idx]; + *new_fap = *fa; + BLI_ghash_insert(fptr_map, (void*)*fap, (void*)new_fap); + } + + bm->elem_index_dirty |= BM_FACE; + + MEM_freeN(faces_pool); + MEM_freeN(faces_copy); + } + + /* And now, fix all vertices/edges/faces/loops pointers! */ + /* Verts' pointers, only edge pointers... */ + if (eptr_map) { + BM_ITER(ve, &iter, bm, BM_VERTS_OF_MESH, NULL) { +/* printf("Vert e: %p -> %p\n", ve->e, BLI_ghash_lookup(eptr_map, (const void*)ve->e));*/ + ve->e = BLI_ghash_lookup(eptr_map, (const void*)ve->e); + } + } + + /* Edges' pointers, only vert pointers (as we don’t mess with loops!)... */ + if (vptr_map) { + BM_ITER(ed, &iter, bm, BM_EDGES_OF_MESH, NULL) { +/* printf("Edge v1: %p -> %p\n", ed->v1, BLI_ghash_lookup(vptr_map, (const void*)ed->v1));*/ +/* printf("Edge v2: %p -> %p\n", ed->v2, BLI_ghash_lookup(vptr_map, (const void*)ed->v2));*/ + ed->v1 = BLI_ghash_lookup(vptr_map, (const void*)ed->v1); + ed->v2 = BLI_ghash_lookup(vptr_map, (const void*)ed->v2); + } + } + + /* Faces' pointers (loops, in fact), always needed... */ + BM_ITER(fa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER(lo, &iterl, bm, BM_LOOPS_OF_FACE, fa) { + if (vptr_map) { +/* printf("Loop v: %p -> %p\n", lo->v, BLI_ghash_lookup(vptr_map, (const void*)lo->v));*/ + lo->v = BLI_ghash_lookup(vptr_map, (const void*)lo->v); + } + if (eptr_map) { +/* printf("Loop e: %p -> %p\n", lo->e, BLI_ghash_lookup(eptr_map, (const void*)lo->e));*/ + lo->e = BLI_ghash_lookup(eptr_map, (const void*)lo->e); + } + if (fptr_map) { +/* printf("Loop f: %p -> %p\n", lo->f, BLI_ghash_lookup(fptr_map, (const void*)lo->f));*/ + lo->f = BLI_ghash_lookup(fptr_map, (const void*)lo->f); + } + } + } + + if (vptr_map) + BLI_ghash_free(vptr_map, NULL, NULL); + if (eptr_map) + BLI_ghash_free(eptr_map, NULL, NULL); + if (fptr_map) + BLI_ghash_free(fptr_map, NULL, NULL); +} + BMVert *BM_vert_at_index(BMesh *bm, const int index) { return BLI_mempool_findelem(bm->vpool, index); diff --git a/source/blender/bmesh/intern/bmesh_mesh.h b/source/blender/bmesh/intern/bmesh_mesh.h index f48cc09af3b..970db6339c3 100644 --- a/source/blender/bmesh/intern/bmesh_mesh.h +++ b/source/blender/bmesh/intern/bmesh_mesh.h @@ -43,6 +43,7 @@ void bmesh_edit_end(BMesh *bm, int flag); void BM_mesh_elem_index_ensure(BMesh *bm, const char hflag); void BM_mesh_elem_index_validate(BMesh *bm, const char *location, const char *func, const char *msg_a, const char *msg_b); +void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx); BMVert *BM_vert_at_index(BMesh *bm, const int index); BMEdge *BM_edge_at_index(BMesh *bm, const int index); diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index e5eb7ad11fd..fe9571b1978 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -3599,15 +3599,14 @@ void MESH_OT_select_mirror(wmOperatorType *ot) RNA_def_boolean(ot->srna, "extend", 0, "Extend", "Extend the existing selection"); } -#if 0 /* UNUSED */ /* qsort routines. not sure how to make these * work, since we aren't using linked lists for * geometry anymore. might need a sortof "swap" * function for bmesh elements. */ typedef struct xvertsort { - float x; - BMVert *v1; + int x; /* X screen-coordinate */ + int org_idx; /* Original index of this vertex _in the mempool_ */ } xvertsort; @@ -3615,11 +3614,13 @@ static int vergxco(const void *v1, const void *v2) { const xvertsort *x1 = v1, *x2 = v2; - if (x1->x > x2->x) return 1; - else if (x1->x < x2->x) return -1; - return 0; + /* We move unchanged vertices (org_idx < 0) at the begining of the sorted list. */ + if (x1->org_idx >= 0 && x2->org_idx >= 0) + return (x1->x > x2->x) - (x1->x < x2->x); + return (x2->org_idx < 0) - (x1->org_idx < 0); } +#if 0 /* Unused */ struct facesort { uintptr_t x; struct EditFace *efa; @@ -3635,66 +3636,77 @@ static int vergface(const void *v1, const void *v2) } #endif -// XXX is this needed? -/* called from buttons */ -#if 0 /* UNUSED */ -static void xsortvert_flag__doSetX(void *userData, EditVert *UNUSED(eve), int x, int UNUSED(y), int index) +static void xsortvert_flag__doSetX(void *userData, BMVert *UNUSED(eve), int x, int UNUSED(y), int index) { xvertsort *sortblock = userData; sortblock[index].x = x; } -#endif /* all verts with (flag & 'flag') are sorted */ -static void xsortvert_flag(bContext *UNUSED(C), int UNUSED(flag)) +static void xsortvert_flag(bContext *C, int flag) { - /* BMESH_TODO */ -#if 0 //hrm, geometry isn't in linked lists anymore. . . ViewContext vc; BMEditMesh *em; - BMVert *eve; + BMVert *ve; BMIter iter; xvertsort *sortblock; - ListBase tbase; - int i, amount; + int *unchangedblock, *vmap; + int totvert, sorted = 0, unchanged = 0, i; em_setup_viewcontext(C, &vc); em = vc.em; - amount = em->bm->totvert; - sortblock = MEM_callocN(sizeof(xvertsort) * amount, "xsort"); - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { - if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) - sortblock[i].v1 = eve; + totvert = em->bm->totvert; + + sortblock = MEM_callocN(sizeof(xvertsort) * totvert, "xsort sorted"); + /* Stores unchanged verts, will be reused as final old2new vert mapping... */ + unchangedblock = MEM_callocN(sizeof(int) * totvert, "xsort unchanged"); + BM_ITER_INDEX(ve, &iter, em->bm, BM_VERTS_OF_MESH, NULL, i) { + if (BM_elem_flag_test(ve, flag)) { + sortblock[i].org_idx = i; + sorted++; + } + else { + unchangedblock[unchanged++] = i; + sortblock[i].org_idx = -1; + } } - +/* printf("%d verts: %d to be sorted, %d unchanged…\n", totvert, sorted, unchanged);*/ + if (sorted == 0) + return; + ED_view3d_init_mats_rv3d(vc.obedit, vc.rv3d); mesh_foreachScreenVert(&vc, xsortvert_flag__doSetX, sortblock, V3D_CLIP_TEST_OFF); - qsort(sortblock, amount, sizeof(xvertsort), vergxco); + qsort(sortblock, totvert, sizeof(xvertsort), vergxco); - /* make temporal listbase */ - tbase.first = tbase.last = 0; - for (i = 0; i < amount; i++) { - eve = sortblock[i].v1; - - if (eve) { - BLI_remlink(&vc.em->verts, eve); - BLI_addtail(&tbase, eve); - } + /* Convert sortblock into an array mapping old idx to new. */ + vmap = unchangedblock; + unchangedblock = NULL; + if (unchanged) { + unchangedblock = MEM_mallocN(sizeof(int) * unchanged, "xsort unchanged"); + memcpy(unchangedblock, vmap, unchanged * sizeof(int)); + } + for (i = totvert; i--; ) { + if (i < unchanged) + vmap[unchangedblock[i]] = i; + else + vmap[sortblock[i].org_idx] = i; } - BLI_movelisttolist(&vc.em->verts, &tbase); - MEM_freeN(sortblock); -#endif + if (unchangedblock) + MEM_freeN(unchangedblock); + BM_mesh_remap(em->bm, vmap, NULL, NULL); + + MEM_freeN(vmap); } static int edbm_vertices_sort_exec(bContext *C, wmOperator *UNUSED(op)) { - xsortvert_flag(C, SELECT); + xsortvert_flag(C, BM_ELEM_SELECT); return OPERATOR_FINISHED; } From 3ef79439100a910f2f23b8ad1d3584984d289ee9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 12:45:56 +0000 Subject: [PATCH 123/156] code cleanup: first step to replace BM_ITER BM_ITER_INDEX macros. --- source/blender/blenkernel/intern/customdata.c | 2 +- source/blender/bmesh/intern/bmesh_iterators.c | 9 ++-- source/blender/bmesh/intern/bmesh_iterators.h | 23 +++++++--- source/blender/bmesh/intern/bmesh_mesh.c | 46 +++++++++---------- source/blender/bmesh/intern/bmesh_operators.c | 4 +- source/blender/editors/mesh/editmesh_select.c | 2 +- source/blender/editors/mesh/editmesh_tools.c | 13 +++--- source/blender/editors/mesh/editmesh_utils.c | 6 +-- 8 files changed, 57 insertions(+), 48 deletions(-) diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index f2238a37ff9..b0c0294ca39 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -2191,7 +2191,7 @@ void CustomData_bmesh_merge(CustomData *source, CustomData *dest, if (t != BM_LOOPS_OF_FACE) { /*ensure all current elements follow new customdata layout*/ - BM_ITER (h, &iter, bm, t, NULL) { + BM_ITER_MESH (h, &iter, bm, t) { tmp = NULL; CustomData_bmesh_copy_data(&destold, dest, h->data, &tmp); CustomData_bmesh_free_block(&destold, &h->data); diff --git a/source/blender/bmesh/intern/bmesh_iterators.c b/source/blender/bmesh/intern/bmesh_iterators.c index b234d4514c0..384715d74f7 100644 --- a/source/blender/bmesh/intern/bmesh_iterators.c +++ b/source/blender/bmesh/intern/bmesh_iterators.c @@ -83,18 +83,17 @@ void *BM_iter_at_index(BMesh *bm, const char itype, void *data, int index) * Sometimes its convenient to get the iterator as an array * to avoid multiple calls to #BM_iter_at_index. */ -int BM_iter_as_array(BMesh *bm, const char type, void *data, void **array, const int len) +int BM_iter_as_array(BMesh *bm, const char itype, void *data, void **array, const int len) { int i = 0; /* sanity check */ if (len > 0) { - BMIter iter; - void *val; + void *ele; - BM_ITER (val, &iter, bm, type, data) { - array[i] = val; + for (ele = BM_iter_new(&iter, bm, itype, data); ele; ele = BM_iter_step(&iter)) { + array[i] = ele; i++; if (i == len) { return len; diff --git a/source/blender/bmesh/intern/bmesh_iterators.h b/source/blender/bmesh/intern/bmesh_iterators.h index d3566d8aead..65da25015ee 100644 --- a/source/blender/bmesh/intern/bmesh_iterators.h +++ b/source/blender/bmesh/intern/bmesh_iterators.h @@ -83,13 +83,24 @@ typedef enum BMIterType { extern const char bm_iter_itype_htype_map[BM_ITYPE_MAX]; -#define BM_ITER(ele, iter, bm, itype, data) \ - ele = BM_iter_new(iter, bm, itype, data); \ - for ( ; ele; ele = BM_iter_step(iter)) +#define BM_ITER(ele, iter, bm, itype, data) \ + for (ele = BM_iter_new(iter, bm, itype, data); ele; ele = BM_iter_step(iter)) + +#define BM_ITER_MESH(ele, iter, bm, itype) \ + for (ele = BM_iter_new(iter, bm, itype, NULL); ele; ele = BM_iter_step(iter)) + +#define BM_ITER_MESH_INDEX(ele, iter, bm, itype, indexvar) \ + for (ele = BM_iter_new(iter, bm, itype, NULL), indexvar = 0; ele; ele = BM_iter_step(iter), (indexvar)++) + +#define BM_ITER_ELEM(ele, iter, data, itype) \ + for (ele = BM_iter_new(iter, NULL, itype, data); ele; ele = BM_iter_step(iter)) + +#define BM_ITER_ELEM_INDEX(ele, iter, data, itype) \ + for (ele = BM_iter_new(iter, NULL, itype, data), indexvar = 0; ele; ele = BM_iter_step(iter), (indexvar)++) + +#define BM_ITER_INDEX(ele, iter, bm, itype, data, indexvar) \ + for (ele = BM_iter_new(iter, bm, itype, data), indexvar = 0; ele; ele = BM_iter_step(iter), (indexvar)++) -#define BM_ITER_INDEX(ele, iter, bm, itype, data, indexvar) \ - ele = BM_iter_new(iter, bm, itype, data); \ - for (indexvar = 0; ele; indexvar++, ele = BM_iter_step(iter)) /* Iterator Structure */ typedef struct BMIter { diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c index c70e694f9ea..d3c0404e73e 100644 --- a/source/blender/bmesh/intern/bmesh_mesh.c +++ b/source/blender/bmesh/intern/bmesh_mesh.c @@ -214,7 +214,7 @@ void BM_mesh_normals_update(BMesh *bm, const short skip_hidden) BM_ITER (f, &faces, bm, BM_FACES_OF_MESH, NULL) { if (skip_hidden && BM_elem_flag_test(f, BM_ELEM_HIDDEN)) continue; -#if 0 /* UNUSED */ +#if 0 /* UNUSED */ if (f->head.flag & BM_NONORMCALC) continue; #endif @@ -304,7 +304,7 @@ void BM_mesh_normals_update(BMesh *bm, const short skip_hidden) */ //keep in sycn with utils.c! -#define FACE_FLIP 8 +#define FACE_FLIP 8 static void bm_rationalize_normals(BMesh *bm, int undo) { BMOperator bmop; @@ -540,7 +540,7 @@ void BM_mesh_elem_index_validate(BMesh *bm, const char *location, const char *fu int err_val = 0; int err_idx = 0; - BM_ITER (ele, &iter, bm, iter_types[i], NULL) { + BM_ITER_MESH (ele, &iter, bm, iter_types[i]) { if (!is_dirty) { if (BM_elem_index_get(ele) != index) { err_val = BM_elem_index_get(ele); @@ -561,7 +561,7 @@ void BM_mesh_elem_index_validate(BMesh *bm, const char *location, const char *fu } else if ((is_error == FALSE) && (is_dirty == TRUE)) { -#if 0 /* mostly annoying */ +#if 0 /* mostly annoying */ /* dirty may have been incorrectly set */ fprintf(stderr, @@ -619,8 +619,8 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx) vptr_map = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "BM_mesh_remap vert pointers mapping"); /* Make a copy of all vertices. */ - verts_pool = MEM_callocN(sizeof(BMVert*) * totvert, "BM_mesh_remap verts pool"); - BM_iter_as_array(bm, BM_VERTS_OF_MESH, NULL, (void**)verts_pool, totvert); + verts_pool = MEM_callocN(sizeof(BMVert *) * totvert, "BM_mesh_remap verts pool"); + BM_iter_as_array(bm, BM_VERTS_OF_MESH, NULL, (void **)verts_pool, totvert); verts_copy = MEM_mallocN(sizeof(BMVert) * totvert, "BM_mesh_remap verts copy"); for (i = totvert, ve = verts_copy + totvert - 1, vep = verts_pool + totvert - 1; i--; ve--, vep--) { *ve = **vep; @@ -635,7 +635,7 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx) BMVert *new_vep = verts_pool[*new_idx]; *new_vep = *ve; /* printf("mapping vert from %d to %d (%p/%p to %p)\n", i, *new_idx, *vep, verts_pool[i], new_vep);*/ - BLI_ghash_insert(vptr_map, (void*)*vep, (void*)new_vep); + BLI_ghash_insert(vptr_map, (void *)*vep, (void *)new_vep); } bm->elem_index_dirty |= BM_VERT; @@ -653,8 +653,8 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx) eptr_map = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "BM_mesh_remap edge pointers mapping"); /* Make a copy of all vertices. */ - edges_pool = MEM_callocN(sizeof(BMEdge*) * totedge, "BM_mesh_remap edges pool"); - BM_iter_as_array(bm, BM_EDGES_OF_MESH, NULL, (void**)edges_pool, totedge); + edges_pool = MEM_callocN(sizeof(BMEdge *) * totedge, "BM_mesh_remap edges pool"); + BM_iter_as_array(bm, BM_EDGES_OF_MESH, NULL, (void **)edges_pool, totedge); edges_copy = MEM_mallocN(sizeof(BMEdge) * totedge, "BM_mesh_remap edges copy"); for (i = totedge, ed = edges_copy + totedge - 1, edp = edges_pool + totedge - 1; i--; ed--, edp--) { *ed = **edp; @@ -667,7 +667,7 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx) for (i = totedge; i--; new_idx--, ed--, edp--) { BMEdge *new_edp = edges_pool[*new_idx]; *new_edp = *ed; - BLI_ghash_insert(eptr_map, (void*)*edp, (void*)new_edp); + BLI_ghash_insert(eptr_map, (void *)*edp, (void *)new_edp); } bm->elem_index_dirty |= BM_EDGE; @@ -686,8 +686,8 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx) fptr_map = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "BM_mesh_remap face pointers mapping"); /* Make a copy of all vertices. */ - faces_pool = MEM_callocN(sizeof(BMFace*) * totface, "BM_mesh_remap faces pool"); - BM_iter_as_array(bm, BM_FACES_OF_MESH, NULL, (void**)faces_pool, totface); + faces_pool = MEM_callocN(sizeof(BMFace *) * totface, "BM_mesh_remap faces pool"); + BM_iter_as_array(bm, BM_FACES_OF_MESH, NULL, (void **)faces_pool, totface); faces_copy = MEM_mallocN(sizeof(BMFace) * totface, "BM_mesh_remap faces copy"); for (i = totface, fa = faces_copy + totface - 1, fap = faces_pool + totface - 1; i--; fa--, fap--) { *fa = **fap; @@ -700,7 +700,7 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx) for (i = totface; i--; new_idx--, fa--, fap--) { BMFace *new_fap = faces_pool[*new_idx]; *new_fap = *fa; - BLI_ghash_insert(fptr_map, (void*)*fap, (void*)new_fap); + BLI_ghash_insert(fptr_map, (void *)*fap, (void *)new_fap); } bm->elem_index_dirty |= BM_FACE; @@ -712,36 +712,36 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx) /* And now, fix all vertices/edges/faces/loops pointers! */ /* Verts' pointers, only edge pointers... */ if (eptr_map) { - BM_ITER(ve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (ve, &iter, bm, BM_VERTS_OF_MESH, NULL) { /* printf("Vert e: %p -> %p\n", ve->e, BLI_ghash_lookup(eptr_map, (const void*)ve->e));*/ - ve->e = BLI_ghash_lookup(eptr_map, (const void*)ve->e); + ve->e = BLI_ghash_lookup(eptr_map, (const void *)ve->e); } } /* Edges' pointers, only vert pointers (as we don’t mess with loops!)... */ if (vptr_map) { - BM_ITER(ed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER (ed, &iter, bm, BM_EDGES_OF_MESH, NULL) { /* printf("Edge v1: %p -> %p\n", ed->v1, BLI_ghash_lookup(vptr_map, (const void*)ed->v1));*/ /* printf("Edge v2: %p -> %p\n", ed->v2, BLI_ghash_lookup(vptr_map, (const void*)ed->v2));*/ - ed->v1 = BLI_ghash_lookup(vptr_map, (const void*)ed->v1); - ed->v2 = BLI_ghash_lookup(vptr_map, (const void*)ed->v2); + ed->v1 = BLI_ghash_lookup(vptr_map, (const void *)ed->v1); + ed->v2 = BLI_ghash_lookup(vptr_map, (const void *)ed->v2); } } /* Faces' pointers (loops, in fact), always needed... */ - BM_ITER(fa, &iter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER(lo, &iterl, bm, BM_LOOPS_OF_FACE, fa) { + BM_ITER (fa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER (lo, &iterl, bm, BM_LOOPS_OF_FACE, fa) { if (vptr_map) { /* printf("Loop v: %p -> %p\n", lo->v, BLI_ghash_lookup(vptr_map, (const void*)lo->v));*/ - lo->v = BLI_ghash_lookup(vptr_map, (const void*)lo->v); + lo->v = BLI_ghash_lookup(vptr_map, (const void *)lo->v); } if (eptr_map) { /* printf("Loop e: %p -> %p\n", lo->e, BLI_ghash_lookup(eptr_map, (const void*)lo->e));*/ - lo->e = BLI_ghash_lookup(eptr_map, (const void*)lo->e); + lo->e = BLI_ghash_lookup(eptr_map, (const void *)lo->e); } if (fptr_map) { /* printf("Loop f: %p -> %p\n", lo->f, BLI_ghash_lookup(fptr_map, (const void*)lo->f));*/ - lo->f = BLI_ghash_lookup(fptr_map, (const void*)lo->f); + lo->f = BLI_ghash_lookup(fptr_map, (const void *)lo->f); } } } diff --git a/source/blender/bmesh/intern/bmesh_operators.c b/source/blender/bmesh/intern/bmesh_operators.c index 32abaf10f64..e16554eb637 100644 --- a/source/blender/bmesh/intern/bmesh_operators.c +++ b/source/blender/bmesh/intern/bmesh_operators.c @@ -473,7 +473,7 @@ static int bmo_mesh_flag_count(BMesh *bm, const char htype, const short oflag, for (i = 0; i < 3; i++) { if (htype & flag_types[i]) { - BM_ITER (ele_f, &iter, bm, iter_types[i], NULL) { + BM_ITER_MESH (ele_f, &iter, bm, iter_types[i]) { if (BMO_elem_flag_test_bool(bm, ele_f, oflag) == test_for_enabled) count++; } @@ -508,7 +508,7 @@ void BMO_mesh_flag_disable_all(BMesh *bm, BMOperator *UNUSED(op), const char hty for (i = 0; i < 3; i++) { if (htype & flag_types[i]) { - BM_ITER (ele, &iter, bm, iter_types[i], NULL) { + BM_ITER_MESH (ele, &iter, bm, iter_types[i]) { BMO_elem_flag_disable(bm, ele, oflag); } } diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index df1775c3f07..831813c566f 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -2044,7 +2044,7 @@ static void walker_deselect_nth(BMEditMesh *em, int nth, int offset, BMHeader *h /* Walker restrictions uses BMO flags, not header flags, * so transfer BM_ELEM_SELECT from HFlags onto a BMO flag layer. */ BMO_push(bm, NULL); - BM_ITER (ele, &iter, bm, itertype, NULL) { + BM_ITER_MESH (ele, &iter, bm, itertype) { if (BM_elem_flag_test(ele, BM_ELEM_SELECT)) { /* BMESH_TODO, don't use 'BM_ELEM_SELECT' here, its a HFLAG only! */ BMO_elem_flag_enable(bm, (BMElemF *)ele, BM_ELEM_SELECT); diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index fe9571b1978..ba280878b2a 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -159,7 +159,7 @@ void EMBM_project_snap_verts(bContext *C, ARegion *ar, Object *obedit, BMEditMes BMIter iter; BMVert *eve; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { float mval[2], vec[3], no_dummy[3]; int dist_dummy; @@ -350,8 +350,7 @@ static short edbm_extrude_vert(Object *obedit, BMEditMesh *em, const char hflag, BMEdge *eed; /* ensure vert flags are consistent for edge selections */ - eed = BM_iter_new(&iter, em->bm, BM_EDGES_OF_MESH, NULL); - for ( ; eed; eed = BM_iter_step(&iter)) { + BM_ITER_MESH(eed, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, hflag)) { if (hflag & BM_ELEM_SELECT) { BM_elem_select_set(em->bm, eed->v1, TRUE); @@ -2033,7 +2032,7 @@ void MESH_OT_remove_doubles(wmOperatorType *ot) { /* identifiers */ ot->name = "Remove Doubles"; - ot->description= "Remove duplicate vertices"; + ot->description = "Remove duplicate vertices"; ot->idname = "MESH_OT_remove_doubles"; /* api callbacks */ @@ -3662,7 +3661,7 @@ static void xsortvert_flag(bContext *C, int flag) sortblock = MEM_callocN(sizeof(xvertsort) * totvert, "xsort sorted"); /* Stores unchanged verts, will be reused as final old2new vert mapping... */ unchangedblock = MEM_callocN(sizeof(int) * totvert, "xsort unchanged"); - BM_ITER_INDEX(ve, &iter, em->bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_INDEX (ve, &iter, em->bm, BM_VERTS_OF_MESH, NULL, i) { if (BM_elem_flag_test(ve, flag)) { sortblock[i].org_idx = i; sorted++; @@ -3754,8 +3753,8 @@ static int float_sort(const void *v1, const void *v2) x1 = face_sort_floats[((int *) v1)[0]]; x2 = face_sort_floats[((int *) v2)[0]]; - if (x1 > x2) return 1; - else if (x1 < x2) return -1; + if (x1 > x2) return 1; + else if (x1 < x2) return -1; return 0; } diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c index d48f1776c59..13e059bb5d8 100644 --- a/source/blender/editors/mesh/editmesh_utils.c +++ b/source/blender/editors/mesh/editmesh_utils.c @@ -1189,7 +1189,7 @@ void EDBM_mesh_hide(BMEditMesh *em, int swap) else itermode = BM_FACES_OF_MESH; - BM_ITER (ele, &iter, em->bm, itermode, NULL) { + BM_ITER_MESH (ele, &iter, em->bm, itermode) { if (BM_elem_flag_test(ele, BM_ELEM_SELECT) ^ swap) BM_elem_hide_set(em->bm, ele, TRUE); } @@ -1223,7 +1223,7 @@ void EDBM_mesh_reveal(BMEditMesh *em) /* Use tag flag to remember what was hidden before all is revealed. * BM_ELEM_HIDDEN --> BM_ELEM_TAG */ for (i = 0; i < 3; i++) { - BM_ITER (ele, &iter, em->bm, iter_types[i], NULL) { + BM_ITER_MESH (ele, &iter, em->bm, iter_types[i]) { BM_elem_flag_set(ele, BM_ELEM_TAG, BM_elem_flag_test(ele, BM_ELEM_HIDDEN)); } } @@ -1237,7 +1237,7 @@ void EDBM_mesh_reveal(BMEditMesh *em) continue; } - BM_ITER (ele, &iter, em->bm, iter_types[i], NULL) { + BM_ITER_MESH (ele, &iter, em->bm, iter_types[i]) { if (BM_elem_flag_test(ele, BM_ELEM_TAG)) { BM_elem_select_set(em->bm, ele, TRUE); } From 9276d7aeb2679a4eecbdd97f0ed699712920e4fb Mon Sep 17 00:00:00 2001 From: Howard Trickey Date: Thu, 19 Apr 2012 13:44:28 +0000 Subject: [PATCH 124/156] For bug #30931, change knife hardcoded colors to ones derived from theme. For now, just reusing some theme colors that are there for other reasons but matched approximately the colors used now. Except that cut lines are now purple-violet, so that they contrast with grid and edges better, especially in wireframe. --- source/blender/editors/mesh/editmesh_knife.c | 43 ++++++++++++++++---- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index dc0d8f13a2a..9d0285e9ceb 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -60,6 +60,7 @@ #include "DNA_mesh_types.h" #include "DNA_object_types.h" #include "BKE_tessmesh.h" +#include "UI_resources.h" #include "RNA_access.h" #include "RNA_define.h" @@ -874,7 +875,7 @@ static void knifetool_draw_angle_snapping(knifetool_opdata *kcd) mats.modelview, mats.projection, mats.viewport, &v2[0], &v2[1], &v2[2]); - glColor3f(0.6, 0.6, 0.6); + UI_ThemeColor(TH_TRANSFORM); glLineWidth(2.0); glBegin(GL_LINES); glVertex3dv(v1); @@ -882,11 +883,32 @@ static void knifetool_draw_angle_snapping(knifetool_opdata *kcd) glEnd(); } +static void knife_colors(unsigned char c_line[3], + unsigned char c_edge[3], + unsigned char c_curpoint[3], + unsigned char c_curpoint_a[4], + unsigned char c_point[3], + unsigned char c_point_a[4]) { + /* possible BMESH_TODO: add explicit themes or calculate these by + * figuring out constrasting colors with grid / edges / verts + * a la UI_make_axis_color */ + UI_GetThemeColor3ubv(TH_NURB_VLINE, c_line); + UI_GetThemeColor3ubv(TH_NURB_ULINE, c_edge); + UI_GetThemeColor3ubv(TH_HANDLE_SEL_VECT, c_curpoint); + UI_GetThemeColor3ubv(TH_HANDLE_SEL_VECT, c_curpoint_a); + c_curpoint_a[3] = 0.4; + UI_GetThemeColor3ubv(TH_ACTIVE_SPLINE, c_point); + UI_GetThemeColor3ubv(TH_ACTIVE_SPLINE, c_point_a); + c_point_a[3] = 0.4; +} + /* modal loop selection drawing callback */ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) { View3D *v3d = CTX_wm_view3d(C); knifetool_opdata *kcd = arg; + unsigned char c_line[3], c_edge[3], c_curpoint[3], c_point[3]; + unsigned char c_curpoint_a[4], c_point_a[4]; if(v3d->zbuf) glDisable(GL_DEPTH_TEST); @@ -895,11 +917,14 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) glPushMatrix(); glMultMatrixf(kcd->ob->obmat); + knife_colors(c_line, c_edge, c_curpoint, c_curpoint_a, c_point, c_point_a); + if (kcd->mode == MODE_DRAGGING) { if (kcd->angle_snapping != ANGLE_FREE) knifetool_draw_angle_snapping(kcd); - glColor3f(0.1, 0.1, 0.1); + glColor3ubv(c_line); + glLineWidth(2.0); glBegin(GL_LINES); @@ -911,7 +936,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) } if (kcd->cur.edge) { - glColor3f(0.5, 0.3, 0.15); + glColor3ubv(c_edge); glLineWidth(2.0); glBegin(GL_LINES); @@ -922,7 +947,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) glLineWidth(1.0); } else if (kcd->cur.vert) { - glColor3f(0.8, 0.2, 0.1); + glColor3ubv(c_point); glPointSize(11); glBegin(GL_POINTS); @@ -931,7 +956,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) } if (kcd->cur.bmface) { - glColor3f(0.1, 0.8, 0.05); + glColor3ubv(c_curpoint); glPointSize(9); glBegin(GL_POINTS); @@ -947,7 +972,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* draw any snapped verts first */ - glColor4f(0.8, 0.2, 0.1, 0.4); + glColor4ubv(c_point_a); glPointSize(11); glBegin(GL_POINTS); lh = kcd->linehits; @@ -979,7 +1004,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) glEnd(); /* now draw the rest */ - glColor4f(0.1, 0.8, 0.05, 0.4); + glColor4ubv(c_curpoint_a); glPointSize(7); glBegin(GL_POINTS); lh = kcd->linehits; @@ -1009,7 +1034,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) if (!kfe->draw) continue; - glColor3f(0.2, 0.2, 0.2); + glColor3ubv(c_line); glVertex3fv(kfe->v1->cageco); glVertex3fv(kfe->v2->cageco); @@ -1031,7 +1056,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) if (!kfv->draw) continue; - glColor3f(0.6, 0.1, 0.2); + glColor3ubv(c_point); glVertex3fv(kfv->cageco); } From 475ecbb0ce11d48ef41774ce1f982f992547beca Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 13:47:58 +0000 Subject: [PATCH 125/156] remove BM_ITER, BM_ITER_INDEX macros, use ELEM or MESH variants only (the maceros had unused args in both cases). --- source/blender/blenkernel/intern/bvhutils.c | 2 +- .../blender/blenkernel/intern/cdderivedmesh.c | 2 +- source/blender/blenkernel/intern/customdata.c | 4 +- .../blenkernel/intern/editderivedmesh.c | 16 +- source/blender/blenkernel/intern/key.c | 2 +- source/blender/blenkernel/intern/object.c | 2 +- source/blender/bmesh/intern/bmesh_construct.c | 32 +-- source/blender/bmesh/intern/bmesh_core.c | 12 +- source/blender/bmesh/intern/bmesh_interp.c | 14 +- source/blender/bmesh/intern/bmesh_iterators.h | 10 +- source/blender/bmesh/intern/bmesh_marking.c | 50 ++-- source/blender/bmesh/intern/bmesh_mesh.c | 42 ++-- source/blender/bmesh/intern/bmesh_mesh_conv.c | 26 +-- .../bmesh/intern/bmesh_mesh_validate.c | 8 +- source/blender/bmesh/intern/bmesh_mods.c | 8 +- source/blender/bmesh/intern/bmesh_operators.c | 36 +-- source/blender/bmesh/intern/bmesh_polygon.c | 6 +- source/blender/bmesh/intern/bmesh_queries.c | 26 +-- .../blender/bmesh/intern/bmesh_walkers_impl.c | 12 +- source/blender/bmesh/operators/bmo_bevel.c | 54 ++--- source/blender/bmesh/operators/bmo_connect.c | 8 +- source/blender/bmesh/operators/bmo_create.c | 18 +- source/blender/bmesh/operators/bmo_dissolve.c | 10 +- source/blender/bmesh/operators/bmo_dupe.c | 18 +- .../blender/bmesh/operators/bmo_edgesplit.c | 2 +- source/blender/bmesh/operators/bmo_extrude.c | 44 ++-- source/blender/bmesh/operators/bmo_inset.c | 8 +- .../bmesh/operators/bmo_join_triangles.c | 12 +- source/blender/bmesh/operators/bmo_mirror.c | 2 +- .../blender/bmesh/operators/bmo_primitive.c | 6 +- .../bmesh/operators/bmo_removedoubles.c | 34 +-- source/blender/bmesh/operators/bmo_slide.c | 2 +- .../blender/bmesh/operators/bmo_subdivide.c | 14 +- .../blender/bmesh/operators/bmo_triangulate.c | 4 +- source/blender/bmesh/operators/bmo_utils.c | 52 ++--- source/blender/bmesh/tools/BME_bevel.c | 36 +-- source/blender/editors/mesh/editface.c | 4 +- source/blender/editors/mesh/editmesh_bvh.c | 2 +- source/blender/editors/mesh/editmesh_knife.c | 22 +- .../blender/editors/mesh/editmesh_loopcut.c | 2 +- source/blender/editors/mesh/editmesh_rip.c | 26 +-- source/blender/editors/mesh/editmesh_select.c | 90 ++++---- source/blender/editors/mesh/editmesh_slide.c | 2 +- source/blender/editors/mesh/editmesh_tools.c | 44 ++-- source/blender/editors/mesh/editmesh_utils.c | 24 +- source/blender/editors/mesh/mesh_data.c | 10 +- source/blender/editors/mesh/mesh_navmesh.c | 6 +- source/blender/editors/mesh/meshtools.c | 10 +- source/blender/editors/object/object_hook.c | 8 +- .../blender/editors/object/object_relations.c | 2 +- .../blender/editors/object/object_transform.c | 4 +- source/blender/editors/object/object_vgroup.c | 20 +- .../blender/editors/render/render_shading.c | 2 +- .../blender/editors/sculpt_paint/sculpt_uv.c | 4 +- .../blender/editors/space_view3d/drawobject.c | 6 +- .../editors/space_view3d/view3d_buttons.c | 20 +- .../editors/space_view3d/view3d_snap.c | 18 +- source/blender/editors/transform/transform.c | 24 +- .../editors/transform/transform_conversions.c | 22 +- .../editors/transform/transform_manipulator.c | 10 +- .../transform/transform_orientations.c | 14 +- source/blender/editors/util/crazyspace.c | 6 +- .../blender/editors/uvedit/uvedit_buttons.c | 8 +- source/blender/editors/uvedit/uvedit_draw.c | 76 +++--- source/blender/editors/uvedit/uvedit_ops.c | 218 +++++++++--------- .../editors/uvedit/uvedit_smart_stitch.c | 16 +- .../editors/uvedit/uvedit_unwrap_ops.c | 68 +++--- source/blender/modifiers/intern/MOD_array.c | 4 +- source/blender/modifiers/intern/MOD_bevel.c | 4 +- .../blender/modifiers/intern/MOD_edgesplit.c | 4 +- source/blender/python/bmesh/bmesh_py_types.c | 4 +- source/blender/python/bmesh/bmesh_py_types.h | 17 +- 72 files changed, 727 insertions(+), 728 deletions(-) diff --git a/source/blender/blenkernel/intern/bvhutils.c b/source/blender/blenkernel/intern/bvhutils.c index 5ccf47d5b73..009b7ca7f99 100644 --- a/source/blender/blenkernel/intern/bvhutils.c +++ b/source/blender/blenkernel/intern/bvhutils.c @@ -572,7 +572,7 @@ BVHTree* bvhtree_from_mesh_faces(BVHTreeFromMesh *data, DerivedMesh *mesh, float insert = 0; } else { - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_FACE, f) { + BM_ITER_ELEM (v, &iter, f, BM_VERTS_OF_FACE) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { /* Don't insert triangles tessellated from faces that have * any selected verts.*/ diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 232011c2d78..2d764142d26 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -1929,7 +1929,7 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis mp->loopstart = j; mp->mat_nr = efa->mat_nr; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { mloop->v = BM_elem_index_get(l->v); mloop->e = BM_elem_index_get(l->e); CustomData_from_bmesh_block(&bm->ldata, &dm->loopData, l->head.data, j); diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index b0c0294ca39..536d4d9c823 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -2204,8 +2204,8 @@ void CustomData_bmesh_merge(CustomData *source, CustomData *dest, BMIter liter; /*ensure all current elements follow new customdata layout*/ - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { tmp = NULL; CustomData_bmesh_copy_data(&destold, dest, l->head.data, &tmp); CustomData_bmesh_free_block(&destold, &l->head.data); diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index d17de34a1d3..b6aebcddd4c 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -493,7 +493,7 @@ static void emDM_drawUVEdges(DerivedMesh *dm) BMIter iter; glBegin(GL_LINES); - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { BMIter liter; BMLoop *l; MLoopUV *lastluv = NULL, *firstluv = NULL; @@ -501,7 +501,7 @@ static void emDM_drawUVEdges(DerivedMesh *dm) if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (luv) { @@ -1468,8 +1468,8 @@ static void emDM_copyLoopArray(DerivedMesh *dm, MLoop *loop_r) BM_mesh_elem_index_ensure(bm, BM_VERT | BM_EDGE); - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { loop_r->v = BM_elem_index_get(l->v); loop_r->e = BM_elem_index_get(l->e); loop_r++; @@ -1486,7 +1486,7 @@ static void emDM_copyPolyArray(DerivedMesh *dm, MPoly *poly_r) int i; i = 0; - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { poly_r->flag = BM_face_flag_to_mflag(f); poly_r->loopstart = i; poly_r->totloop = f->len; @@ -1559,7 +1559,7 @@ static void emDM_getVertCos(DerivedMesh *dm, float (*cos_r)[3]) int i; i= 0; - BM_ITER (eve, &iter, emdm->tc->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, emdm->tc->bm, BM_VERTS_OF_MESH) { if (emdm->vertexCos) { copy_v3_v3(cos_r[i], emdm->vertexCos[i]); } @@ -1709,7 +1709,7 @@ DerivedMesh *getEditDerivedBMesh( bmdm->polyNos = MEM_mallocN(sizeof(*bmdm->polyNos)*bm->totface, "bmdm_pno"); i = 0; - BM_ITER (efa, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &fiter, bm, BM_FACES_OF_MESH) { BM_elem_index_set(efa, i); /* set_inline */ BM_face_normal_update_vcos(bm, efa, bmdm->polyNos[i], (float const (*)[3])vertexCos); i++; @@ -1719,7 +1719,7 @@ DerivedMesh *getEditDerivedBMesh( eve=BM_iter_new(&viter, bm, BM_VERTS_OF_MESH, NULL); for (i=0; eve; eve=BM_iter_step(&viter), i++) { float *no = bmdm->vertexNos[i]; - BM_ITER (efa, &fiter, bm, BM_FACES_OF_VERT, eve) { + BM_ITER_ELEM (efa, &fiter, eve, BM_FACES_OF_VERT) { add_v3_v3(no, bmdm->polyNos[BM_elem_index_get(efa)]); } diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c index fc10a32c889..0a1c0467244 100644 --- a/source/blender/blenkernel/intern/key.c +++ b/source/blender/blenkernel/intern/key.c @@ -520,7 +520,7 @@ static char *key_block_get_data(Key *key, KeyBlock *actkb, KeyBlock *kb, char ** a = 0; co = MEM_callocN(sizeof(float) * 3 * me->edit_btmesh->bm->totvert, "key_block_get_data"); - BM_ITER (eve, &iter, me->edit_btmesh->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, me->edit_btmesh->bm, BM_VERTS_OF_MESH) { copy_v3_v3(co[a], eve->co); a++; } diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index f93592b769b..3271a623584 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1770,7 +1770,7 @@ static void give_parvert(Object *par, int nr, float vec[3]) BMVert *eve; BMIter iter; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { int *keyindex = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_SHAPE_KEYINDEX); if (keyindex && *keyindex==nr) { diff --git a/source/blender/bmesh/intern/bmesh_construct.c b/source/blender/bmesh/intern/bmesh_construct.c index 179feeccb18..dee18e62930 100644 --- a/source/blender/bmesh/intern/bmesh_construct.c +++ b/source/blender/bmesh/intern/bmesh_construct.c @@ -495,7 +495,7 @@ void BMO_remove_tagged_faces(BMesh *bm, const short oflag) BMFace *f; BMIter iter; - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (BMO_elem_flag_test(bm, f, oflag)) { BM_face_kill(bm, f); } @@ -507,7 +507,7 @@ void BMO_remove_tagged_edges(BMesh *bm, const short oflag) BMEdge *e; BMIter iter; - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (BMO_elem_flag_test(bm, e, oflag)) { BM_edge_kill(bm, e); } @@ -519,7 +519,7 @@ void BMO_remove_tagged_verts(BMesh *bm, const short oflag) BMVert *v; BMIter iter; - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if (BMO_elem_flag_test(bm, v, oflag)) { BM_vert_kill(bm, v); } @@ -545,14 +545,14 @@ static void bmo_remove_tagged_context_verts(BMesh *bm, const short oflag) BMIter iter; BMIter itersub; - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if (BMO_elem_flag_test(bm, v, oflag)) { /* Visit edge */ - BM_ITER (e, &itersub, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &itersub, v, BM_EDGES_OF_VERT) { BMO_elem_flag_enable(bm, e, oflag); } /* Visit face */ - BM_ITER (f, &itersub, bm, BM_FACES_OF_VERT, v) { + BM_ITER_ELEM (f, &itersub, v, BM_FACES_OF_VERT) { BMO_elem_flag_enable(bm, f, oflag); } } @@ -571,9 +571,9 @@ static void bmo_remove_tagged_context_edges(BMesh *bm, const short oflag) BMIter iter; BMIter itersub; - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (BMO_elem_flag_test(bm, e, oflag)) { - BM_ITER (f, &itersub, bm, BM_FACES_OF_EDGE, e) { + BM_ITER_ELEM (f, &itersub, e, BM_FACES_OF_EDGE) { BMO_elem_flag_enable(bm, f, oflag); } } @@ -610,7 +610,7 @@ void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type) case DEL_EDGES: { /* flush down to vert */ - BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) { if (BMO_elem_flag_test(bm, e, oflag)) { BMO_elem_flag_enable(bm, e->v1, oflag); BMO_elem_flag_enable(bm, e->v2, oflag); @@ -618,7 +618,7 @@ void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type) } bmo_remove_tagged_context_edges(bm, oflag); /* remove loose vertice */ - BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) { if (BMO_elem_flag_test(bm, v, oflag) && (!(v->e))) BMO_elem_flag_enable(bm, v, DEL_WIREVERT); } @@ -649,7 +649,7 @@ void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type) case DEL_FACES: { /* go through and mark all edges and all verts of all faces for delet */ - BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) { if (BMO_elem_flag_test(bm, f, oflag)) { for (e = BM_iter_new(&eiter, bm, BM_EDGES_OF_FACE, f); e; e = BM_iter_step(&eiter)) BMO_elem_flag_enable(bm, e, oflag); @@ -658,7 +658,7 @@ void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type) } } /* now go through and mark all remaining faces all edges for keeping */ - BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) { if (!BMO_elem_flag_test(bm, f, oflag)) { for (e = BM_iter_new(&eiter, bm, BM_EDGES_OF_FACE, f); e; e = BM_iter_step(&eiter)) { BMO_elem_flag_disable(bm, e, oflag); @@ -669,7 +669,7 @@ void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type) } } /* also mark all the vertices of remaining edges for keeping */ - BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) { if (!BMO_elem_flag_test(bm, e, oflag)) { BMO_elem_flag_disable(bm, e->v1, oflag); BMO_elem_flag_disable(bm, e->v2, oflag); @@ -687,13 +687,13 @@ void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type) case DEL_ALL: { /* does this option even belong in here? */ - BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) { BMO_elem_flag_enable(bm, f, oflag); } - BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) { BMO_elem_flag_enable(bm, e, oflag); } - BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) { BMO_elem_flag_enable(bm, v, oflag); } diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index ce1474e37af..01fe1c83bc0 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -1746,7 +1746,7 @@ int BM_vert_splice(BMesh *bm, BMVert *v, BMVert *vtarget) } /* retarget all the loops of v to vtarget */ - BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l, &liter, v, BM_LOOPS_OF_VERT) { l->v = vtarget; } @@ -1792,7 +1792,7 @@ int bmesh_vert_separate(BMesh *bm, BMVert *v, BMVert ***r_vout, int *r_vout_len) visithash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__); maxindex = 0; - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { if (BLI_ghash_haskey(visithash, e)) { continue; } @@ -1805,7 +1805,7 @@ int bmesh_vert_separate(BMesh *bm, BMVert *v, BMVert ***r_vout, int *r_vout_len) while ((e = BLI_array_pop(stack))) { BLI_ghash_insert(visithash, e, SET_INT_IN_POINTER(maxindex)); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_EDGE, e) { + BM_ITER_ELEM (l, &liter, e, BM_LOOPS_OF_EDGE) { nl = (l->v == v) ? l->prev : l->next; if (!BLI_ghash_haskey(visithash, nl->e)) { BLI_array_append(stack, nl->e); @@ -1825,7 +1825,7 @@ int bmesh_vert_separate(BMesh *bm, BMVert *v, BMVert ***r_vout, int *r_vout_len) /* Replace v with the new verts in each group */ #if 0 - BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l, &liter, v, BM_LOOPS_OF_VERT) { /* call first since its faster then a hash lookup */ if (l->v != v) { continue; @@ -1851,7 +1851,7 @@ int bmesh_vert_separate(BMesh *bm, BMVert *v, BMVert ***r_vout, int *r_vout_len) * bad practice but save alloc'ing a new array - note, the comment above is useful, keep it * if you are tidying up code - campbell */ BLI_array_empty(stack); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l, &liter, v, BM_LOOPS_OF_VERT) { if (l->v == v) { BLI_array_append(stack, (BMEdge *)l); } @@ -1865,7 +1865,7 @@ int bmesh_vert_separate(BMesh *bm, BMVert *v, BMVert ***r_vout, int *r_vout_len) BLI_array_free(stack); - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { i = GET_INT_FROM_POINTER(BLI_ghash_lookup(visithash, e)); if (i == 0) { continue; diff --git a/source/blender/bmesh/intern/bmesh_interp.c b/source/blender/bmesh/intern/bmesh_interp.c index d8a977c5431..c56d2c622a4 100644 --- a/source/blender/bmesh/intern/bmesh_interp.c +++ b/source/blender/bmesh/intern/bmesh_interp.c @@ -489,7 +489,7 @@ void BM_face_multires_bounds_smooth(BMesh *bm, BMFace *f) if (!CustomData_has_layer(&bm->ldata, CD_MDISPS)) return; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { MDisps *mdp = CustomData_bmesh_get(&bm->ldata, l->prev->head.data, CD_MDISPS); MDisps *mdl = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MDISPS); MDisps *mdn = CustomData_bmesh_get(&bm->ldata, l->next->head.data, CD_MDISPS); @@ -521,7 +521,7 @@ void BM_face_multires_bounds_smooth(BMesh *bm, BMFace *f) } } - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { MDisps *mdl1 = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MDISPS); MDisps *mdl2; float co1[3], co2[3], co[3]; @@ -726,7 +726,7 @@ static void update_data_blocks(BMesh *bm, CustomData *olddata, CustomData *data) CustomData_bmesh_init_pool(data, bm->totvert, BM_VERT); - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { block = NULL; CustomData_bmesh_set_default(data, &block); CustomData_bmesh_copy_data(olddata, data, eve->head.data, &block); @@ -739,7 +739,7 @@ static void update_data_blocks(BMesh *bm, CustomData *olddata, CustomData *data) CustomData_bmesh_init_pool(data, bm->totedge, BM_EDGE); - BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { block = NULL; CustomData_bmesh_set_default(data, &block); CustomData_bmesh_copy_data(olddata, data, eed->head.data, &block); @@ -753,8 +753,8 @@ static void update_data_blocks(BMesh *bm, CustomData *olddata, CustomData *data) BMLoop *l; CustomData_bmesh_init_pool(data, bm->totloop, BM_LOOP); - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { block = NULL; CustomData_bmesh_set_default(data, &block); CustomData_bmesh_copy_data(olddata, data, l->head.data, &block); @@ -768,7 +768,7 @@ static void update_data_blocks(BMesh *bm, CustomData *olddata, CustomData *data) CustomData_bmesh_init_pool(data, bm->totface, BM_FACE); - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { block = NULL; CustomData_bmesh_set_default(data, &block); CustomData_bmesh_copy_data(olddata, data, efa->head.data, &block); diff --git a/source/blender/bmesh/intern/bmesh_iterators.h b/source/blender/bmesh/intern/bmesh_iterators.h index 65da25015ee..c687e4b4e7a 100644 --- a/source/blender/bmesh/intern/bmesh_iterators.h +++ b/source/blender/bmesh/intern/bmesh_iterators.h @@ -82,10 +82,6 @@ typedef enum BMIterType { /* the iterator htype for each iterator */ extern const char bm_iter_itype_htype_map[BM_ITYPE_MAX]; - -#define BM_ITER(ele, iter, bm, itype, data) \ - for (ele = BM_iter_new(iter, bm, itype, data); ele; ele = BM_iter_step(iter)) - #define BM_ITER_MESH(ele, iter, bm, itype) \ for (ele = BM_iter_new(iter, bm, itype, NULL); ele; ele = BM_iter_step(iter)) @@ -95,13 +91,9 @@ extern const char bm_iter_itype_htype_map[BM_ITYPE_MAX]; #define BM_ITER_ELEM(ele, iter, data, itype) \ for (ele = BM_iter_new(iter, NULL, itype, data); ele; ele = BM_iter_step(iter)) -#define BM_ITER_ELEM_INDEX(ele, iter, data, itype) \ +#define BM_ITER_ELEM_INDEX(ele, iter, data, itype, indexvar) \ for (ele = BM_iter_new(iter, NULL, itype, data), indexvar = 0; ele; ele = BM_iter_step(iter), (indexvar)++) -#define BM_ITER_INDEX(ele, iter, bm, itype, data, indexvar) \ - for (ele = BM_iter_new(iter, bm, itype, data), indexvar = 0; ele; ele = BM_iter_step(iter), (indexvar)++) - - /* Iterator Structure */ typedef struct BMIter { BLI_mempool_iter pooliter; diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c index faf2d79046a..2e61592c172 100644 --- a/source/blender/bmesh/intern/bmesh_marking.c +++ b/source/blender/bmesh/intern/bmesh_marking.c @@ -84,7 +84,7 @@ void BM_mesh_select_mode_flush(BMesh *bm) int ok; if (bm->selectmode & SCE_SELECT_VERTEX) { - BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(e->v1, BM_ELEM_SELECT) && BM_elem_flag_test(e->v2, BM_ELEM_SELECT) && !BM_elem_flag_test(e, BM_ELEM_HIDDEN)) @@ -95,7 +95,7 @@ void BM_mesh_select_mode_flush(BMesh *bm) BM_elem_flag_disable(e, BM_ELEM_SELECT); } } - BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) { ok = TRUE; if (!BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { l_iter = l_first = BM_FACE_FIRST_LOOP(f); @@ -114,7 +114,7 @@ void BM_mesh_select_mode_flush(BMesh *bm) } } else if (bm->selectmode & SCE_SELECT_EDGE) { - BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) { ok = TRUE; if (!BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { l_iter = l_first = BM_FACE_FIRST_LOOP(f); @@ -154,7 +154,7 @@ void BM_mesh_deselect_flush(BMesh *bm) int ok; - BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) { if (!(BM_elem_flag_test(e->v1, BM_ELEM_SELECT) && BM_elem_flag_test(e->v2, BM_ELEM_SELECT) && !BM_elem_flag_test(e, BM_ELEM_HIDDEN))) @@ -163,7 +163,7 @@ void BM_mesh_deselect_flush(BMesh *bm) } } - BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) { ok = TRUE; if (!BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { l_iter = l_first = BM_FACE_FIRST_LOOP(f); @@ -205,7 +205,7 @@ void BM_mesh_select_flush(BMesh *bm) int ok; - BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(e->v1, BM_ELEM_SELECT) && BM_elem_flag_test(e->v2, BM_ELEM_SELECT) && !BM_elem_flag_test(e, BM_ELEM_HIDDEN)) @@ -214,7 +214,7 @@ void BM_mesh_select_flush(BMesh *bm) } } - BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) { ok = TRUE; if (!BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { l_iter = l_first = BM_FACE_FIRST_LOOP(f); @@ -360,10 +360,10 @@ void BM_face_select_set(BMesh *bm, BMFace *f, int select) BM_elem_flag_disable(f, BM_ELEM_SELECT); /* flush down to edges */ - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { BMIter fiter; BMFace *f2; - BM_ITER (f2, &fiter, bm, BM_FACES_OF_EDGE, l->e) { + BM_ITER_ELEM (f2, &fiter, l->e, BM_FACES_OF_EDGE) { if (BM_elem_flag_test(f2, BM_ELEM_SELECT)) break; } @@ -374,10 +374,10 @@ void BM_face_select_set(BMesh *bm, BMFace *f, int select) } /* flush down to verts */ - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { BMIter eiter; BMEdge *e; - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, l->v) { + BM_ITER_ELEM (e, &eiter, l->v, BM_EDGES_OF_VERT) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) break; } @@ -405,10 +405,10 @@ void BM_mesh_select_mode_set(BMesh *bm, int selectmode) if (bm->selectmode & SCE_SELECT_VERTEX) { /* disabled because selection flushing handles these */ #if 0 - BM_ITER (ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_EDGES_OF_MESH) { BM_elem_flag_disable(ele, BM_ELEM_SELECT); } - BM_ITER (ele, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_FACES_OF_MESH) { BM_elem_flag_disable(ele, BM_ELEM_SELECT); } #endif @@ -417,12 +417,12 @@ void BM_mesh_select_mode_set(BMesh *bm, int selectmode) else if (bm->selectmode & SCE_SELECT_EDGE) { /* disabled because selection flushing handles these */ #if 0 - BM_ITER (ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_VERTS_OF_MESH) { BM_elem_flag_disable(ele, BM_ELEM_SELECT); } #endif - BM_ITER (ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(ele, BM_ELEM_SELECT)) { BM_edge_select_set(bm, (BMEdge *)ele, TRUE); } @@ -432,11 +432,11 @@ void BM_mesh_select_mode_set(BMesh *bm, int selectmode) else if (bm->selectmode & SCE_SELECT_FACE) { /* disabled because selection flushing handles these */ #if 0 - BM_ITER (ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_EDGES_OF_MESH) { BM_elem_flag_disable(ele, BM_ELEM_SELECT); } #endif - BM_ITER (ele, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(ele, BM_ELEM_SELECT)) { BM_face_select_set(bm, (BMFace *)ele, TRUE); } @@ -543,7 +543,7 @@ BMFace *BM_active_face_get(BMesh *bm, int sloppy) } /* Last attempt: try to find any selected face */ if (f == NULL) { - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(f, BM_ELEM_SELECT)) { break; } @@ -896,7 +896,7 @@ static void vert_flush_hide_set(BMesh *bm, BMVert *v) BMEdge *e; int hide = TRUE; - BM_ITER (e, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &iter, v, BM_EDGES_OF_VERT) { hide = hide && BM_elem_flag_test(e, BM_ELEM_HIDDEN); } @@ -909,7 +909,7 @@ static void edge_flush_hide(BMesh *bm, BMEdge *e) BMFace *f; int hide = TRUE; - BM_ITER (f, &iter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER_ELEM (f, &iter, e, BM_FACES_OF_EDGE) { hide = hide && BM_elem_flag_test(f, BM_ELEM_HIDDEN); } @@ -925,10 +925,10 @@ void BM_vert_hide_set(BMesh *bm, BMVert *v, int hide) BM_elem_flag_set(v, BM_ELEM_HIDDEN, hide); - BM_ITER (e, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &iter, v, BM_EDGES_OF_VERT) { BM_elem_flag_set(e, BM_ELEM_HIDDEN, hide); - BM_ITER (f, &fiter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER_ELEM (f, &fiter, e, BM_FACES_OF_EDGE) { BM_elem_flag_set(f, BM_ELEM_HIDDEN, hide); } } @@ -941,7 +941,7 @@ void BM_edge_hide_set(BMesh *bm, BMEdge *e, int hide) /* BMVert *v; */ /* edge hiding: faces around the edge */ - BM_ITER (f, &iter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER_ELEM (f, &iter, e, BM_FACES_OF_EDGE) { BM_elem_flag_set(f, BM_ELEM_HIDDEN, hide); } @@ -959,11 +959,11 @@ void BM_face_hide_set(BMesh *bm, BMFace *f, int hide) BM_elem_flag_set(f, BM_ELEM_HIDDEN, hide); - BM_ITER (l, &iter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &iter, f, BM_LOOPS_OF_FACE) { edge_flush_hide(bm, l->e); } - BM_ITER (l, &iter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &iter, f, BM_LOOPS_OF_FACE) { vert_flush_hide_set(bm, l->v); } } diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c index d3c0404e73e..e2b9732e87a 100644 --- a/source/blender/bmesh/intern/bmesh_mesh.c +++ b/source/blender/bmesh/intern/bmesh_mesh.c @@ -104,15 +104,15 @@ void BM_mesh_data_free(BMesh *bm) BMIter iter; BMIter itersub; - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { CustomData_bmesh_free_block(&(bm->vdata), &(v->head.data)); } - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { CustomData_bmesh_free_block(&(bm->edata), &(e->head.data)); } - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { CustomData_bmesh_free_block(&(bm->pdata), &(f->head.data)); - BM_ITER (l, &itersub, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &itersub, f, BM_LOOPS_OF_FACE) { CustomData_bmesh_free_block(&(bm->ldata), &(l->head.data)); } } @@ -211,7 +211,7 @@ void BM_mesh_normals_update(BMesh *bm, const short skip_hidden) float (*edgevec)[3]; /* calculate all face normals */ - BM_ITER (f, &faces, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &faces, bm, BM_FACES_OF_MESH) { if (skip_hidden && BM_elem_flag_test(f, BM_ELEM_HIDDEN)) continue; #if 0 /* UNUSED */ @@ -223,7 +223,7 @@ void BM_mesh_normals_update(BMesh *bm, const short skip_hidden) } /* Zero out vertex normals */ - BM_ITER (v, &verts, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &verts, bm, BM_VERTS_OF_MESH) { if (skip_hidden && BM_elem_flag_test(v, BM_ELEM_HIDDEN)) continue; @@ -235,7 +235,7 @@ void BM_mesh_normals_update(BMesh *bm, const short skip_hidden) * normals */ index = 0; edgevec = MEM_callocN(sizeof(float) * 3 * bm->totedge, "BM normal computation array"); - BM_ITER (e, &edges, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &edges, bm, BM_EDGES_OF_MESH) { BM_elem_index_set(e, index); /* set_inline */ if (e->l) { @@ -251,12 +251,12 @@ void BM_mesh_normals_update(BMesh *bm, const short skip_hidden) bm->elem_index_dirty &= ~BM_EDGE; /* add weighted face normals to vertices */ - BM_ITER (f, &faces, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &faces, bm, BM_FACES_OF_MESH) { if (skip_hidden && BM_elem_flag_test(f, BM_ELEM_HIDDEN)) continue; - BM_ITER (l, &loops, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &loops, f, BM_LOOPS_OF_FACE) { float *e1diff, *e2diff; float dotprod; float fac; @@ -282,7 +282,7 @@ void BM_mesh_normals_update(BMesh *bm, const short skip_hidden) } /* normalize the accumulated vertex normals */ - BM_ITER (v, &verts, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &verts, bm, BM_VERTS_OF_MESH) { if (skip_hidden && BM_elem_flag_test(v, BM_ELEM_HIDDEN)) continue; @@ -312,7 +312,7 @@ static void bm_rationalize_normals(BMesh *bm, int undo) BMIter iter; if (undo) { - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(f, BM_ELEM_TAG)) { BM_face_normal_flip(bm, f); } @@ -327,7 +327,7 @@ static void bm_rationalize_normals(BMesh *bm, int undo) BMO_push(bm, &bmop); bmo_righthandfaces_exec(bm, &bmop); - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { BM_elem_flag_set(f, BM_ELEM_TAG, BMO_elem_flag_test(bm, f, FACE_FLIP)); } @@ -350,10 +350,10 @@ static void UNUSED_FUNCTION(bm_mdisps_space_set)(Object *ob, BMesh *bm, int from mdisps = CustomData_get_layer(&dm->loopData, CD_MDISPS); - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { BMLoop *l; BMIter liter; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { MDisps *lmd = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MDISPS); if (!lmd->disps) { @@ -463,7 +463,7 @@ void BM_mesh_elem_index_ensure(BMesh *bm, const char hflag) if (hflag & BM_VERT) { if (bm->elem_index_dirty & BM_VERT) { int index = 0; - BM_ITER (ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_VERTS_OF_MESH) { BM_elem_index_set(ele, index); /* set_ok */ index++; } @@ -478,7 +478,7 @@ void BM_mesh_elem_index_ensure(BMesh *bm, const char hflag) if (hflag & BM_EDGE) { if (bm->elem_index_dirty & BM_EDGE) { int index = 0; - BM_ITER (ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_EDGES_OF_MESH) { BM_elem_index_set(ele, index); /* set_ok */ index++; } @@ -493,7 +493,7 @@ void BM_mesh_elem_index_ensure(BMesh *bm, const char hflag) if (hflag & BM_FACE) { if (bm->elem_index_dirty & BM_FACE) { int index = 0; - BM_ITER (ele, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_FACES_OF_MESH) { BM_elem_index_set(ele, index); /* set_ok */ index++; } @@ -712,7 +712,7 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx) /* And now, fix all vertices/edges/faces/loops pointers! */ /* Verts' pointers, only edge pointers... */ if (eptr_map) { - BM_ITER (ve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (ve, &iter, bm, BM_VERTS_OF_MESH) { /* printf("Vert e: %p -> %p\n", ve->e, BLI_ghash_lookup(eptr_map, (const void*)ve->e));*/ ve->e = BLI_ghash_lookup(eptr_map, (const void *)ve->e); } @@ -720,7 +720,7 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx) /* Edges' pointers, only vert pointers (as we don’t mess with loops!)... */ if (vptr_map) { - BM_ITER (ed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (ed, &iter, bm, BM_EDGES_OF_MESH) { /* printf("Edge v1: %p -> %p\n", ed->v1, BLI_ghash_lookup(vptr_map, (const void*)ed->v1));*/ /* printf("Edge v2: %p -> %p\n", ed->v2, BLI_ghash_lookup(vptr_map, (const void*)ed->v2));*/ ed->v1 = BLI_ghash_lookup(vptr_map, (const void *)ed->v1); @@ -729,8 +729,8 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx) } /* Faces' pointers (loops, in fact), always needed... */ - BM_ITER (fa, &iter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER (lo, &iterl, bm, BM_LOOPS_OF_FACE, fa) { + BM_ITER_MESH (fa, &iter, bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (lo, &iterl, fa, BM_LOOPS_OF_FACE) { if (vptr_map) { /* printf("Loop v: %p -> %p\n", lo->v, BLI_ghash_lookup(vptr_map, (const void*)lo->v));*/ lo->v = BLI_ghash_lookup(vptr_map, (const void *)lo->v); diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.c b/source/blender/bmesh/intern/bmesh_mesh_conv.c index cc96cfbef6d..d15e3d36523 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_conv.c +++ b/source/blender/bmesh/intern/bmesh_mesh_conv.c @@ -336,7 +336,7 @@ void BM_mesh_bm_from_me(BMesh *bm, Mesh *me, int set_key, int act_key_nr) if (i == me->act_face) bm->act_face = f; j = 0; - BM_ITER_INDEX (l, &iter, bm, BM_LOOPS_OF_FACE, f, j) { + BM_ITER_ELEM_INDEX (l, &iter, f, BM_LOOPS_OF_FACE, j) { /* Save index of correspsonding MLoop */ BM_elem_index_set(l, mpoly->loopstart + j); /* set_loop */ } @@ -355,8 +355,8 @@ void BM_mesh_bm_from_me(BMesh *bm, Mesh *me, int set_key, int act_key_nr) * but is an optimization, to avoid copying a bunch of interpolated customdata * for each BMLoop (from previous BMLoops using the same edge), always followed * by freeing the interpolated data and overwriting it with data from the Mesh. */ - BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { int li = BM_elem_index_get(l); CustomData_to_bmesh_block(&me->ldata, &bm->ldata, li, &l->head.data); BM_elem_index_set(l, 0); /* set_loop */ @@ -379,9 +379,9 @@ void BM_mesh_bm_from_me(BMesh *bm, Mesh *me, int set_key, int act_key_nr) BMFace *face; MSelect *msel; - BM_ITER_INDEX (vert, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { vert_array[i] = vert; } - BM_ITER_INDEX (edge, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { edge_array[i] = edge; } - BM_ITER_INDEX (face, &iter, bm, BM_FACES_OF_MESH, NULL, i) { face_array[i] = face; } + BM_ITER_MESH_INDEX (vert, &iter, bm, BM_VERTS_OF_MESH, i) { vert_array[i] = vert; } + BM_ITER_MESH_INDEX (edge, &iter, bm, BM_EDGES_OF_MESH, i) { edge_array[i] = edge; } + BM_ITER_MESH_INDEX (face, &iter, bm, BM_FACES_OF_MESH, i) { face_array[i] = face; } for (i = 0, msel = me->mselect; i < me->totselect; i++, msel++) { switch (msel->type) { @@ -432,7 +432,7 @@ static BMVert **bm_to_mesh_vertex_map(BMesh *bm, int ototvert) vertMap = MEM_callocN(sizeof(*vertMap) * ototvert, "vertMap"); if (CustomData_has_layer(&bm->vdata, CD_SHAPE_KEYINDEX)) { int *keyi; - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { keyi = CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_SHAPE_KEYINDEX); if (keyi) { if (((index = *keyi) != ORIGINDEX_NONE) && (index < ototvert)) { @@ -448,7 +448,7 @@ static BMVert **bm_to_mesh_vertex_map(BMesh *bm, int ototvert) } } else { - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { if (i < ototvert) { vertMap[i] = eve; } @@ -564,7 +564,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) mesh_update_customdata_pointers(me, 0); i = 0; - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { float *bweight = CustomData_bmesh_get(&bm->vdata, v->head.data, CD_BWEIGHT); mvert->bweight = bweight ? (char)((*bweight) * 255) : 0; @@ -588,7 +588,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) med = medge; i = 0; - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { float *crease = CustomData_bmesh_get(&bm->edata, e->head.data, CD_CREASE); float *bweight = CustomData_bmesh_get(&bm->edata, e->head.data, CD_BWEIGHT); @@ -614,7 +614,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) i = 0; j = 0; - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { mpoly->loopstart = j; mpoly->totloop = f->len; mpoly->mat_nr = f->mat_nr; @@ -783,7 +783,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) ofs = MEM_callocN(sizeof(float) * 3 * bm->totvert, "currkey->data"); mvert = me->mvert; - BM_ITER_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, i) { keyi = CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_SHAPE_KEYINDEX); if (keyi && *keyi != ORIGINDEX_NONE) { sub_v3_v3v3(ofs[i], mvert->co, fp[*keyi]); @@ -806,7 +806,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) oldkey = currkey->data; mvert = me->mvert; - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { if (currkey == actkey) { copy_v3_v3(fp, eve->co); diff --git a/source/blender/bmesh/intern/bmesh_mesh_validate.c b/source/blender/bmesh/intern/bmesh_mesh_validate.c index 6f30134f66c..3ec3b84c120 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_validate.c +++ b/source/blender/bmesh/intern/bmesh_mesh_validate.c @@ -70,7 +70,7 @@ int BM_mesh_validate(BMesh *bm) bm->elem_index_dirty |= BM_ALL; BM_mesh_elem_index_ensure(bm, BM_ALL); - BM_ITER_INDEX (v, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (v, &iter, bm, BM_VERTS_OF_MESH, i) { if (BM_elem_flag_test(v, BM_ELEM_SELECT | BM_ELEM_HIDDEN) == (BM_ELEM_SELECT | BM_ELEM_HIDDEN)) { ERRMSG("vert %d: is hidden and selected", i); } @@ -83,13 +83,13 @@ int BM_mesh_validate(BMesh *bm) } /* check edges */ - BM_ITER_INDEX (e, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (e, &iter, bm, BM_EDGES_OF_MESH, i) { if (e->v1 == e->v2) ERRMSG("edge %d: duplicate index: %d", i, BM_elem_index_get(e->v1)); } /* edge radial structure */ - BM_ITER_INDEX (e, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (e, &iter, bm, BM_EDGES_OF_MESH, i) { if (BM_elem_flag_test(e, BM_ELEM_SELECT | BM_ELEM_HIDDEN) == (BM_ELEM_SELECT | BM_ELEM_HIDDEN)) { ERRMSG("edge %d: is hidden and selected", i); } @@ -117,7 +117,7 @@ int BM_mesh_validate(BMesh *bm) } /* face structure */ - BM_ITER_INDEX (f, &iter, bm, BM_FACES_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (f, &iter, bm, BM_FACES_OF_MESH, i) { BMLoop *l_iter; BMLoop *l_first; diff --git a/source/blender/bmesh/intern/bmesh_mods.c b/source/blender/bmesh/intern/bmesh_mods.c index f4aa1133d27..a29b657d76e 100644 --- a/source/blender/bmesh/intern/bmesh_mods.c +++ b/source/blender/bmesh/intern/bmesh_mods.c @@ -286,8 +286,8 @@ BMEdge *BM_verts_connect(BMesh *bm, BMVert *v1, BMVert *v2, BMFace **r_f) BMFace *f_iter; /* be warned: this can do weird things in some ngon situation, see BM_face_legal_splits */ - BM_ITER (f_iter, &fiter, bm, BM_FACES_OF_VERT, v1) { - BM_ITER (v_iter, &viter, bm, BM_FACES_OF_VERT, f_iter) { + BM_ITER_ELEM (f_iter, &fiter, v1, BM_FACES_OF_VERT) { + BM_ITER_ELEM (v_iter, &viter, f_iter, BM_FACES_OF_VERT) { if (v_iter == v2) { BMLoop *nl; @@ -521,7 +521,7 @@ BMEdge *BM_vert_collapse_faces(BMesh *bm, BMEdge *ke, BMVert *kv, float fac, BMFace *f; BLI_array_staticdeclare(faces, 8); - BM_ITER (f, &iter, bm, BM_FACES_OF_VERT, kv) { + BM_ITER_ELEM (f, &iter, kv, BM_FACES_OF_VERT) { BLI_array_append(faces, f); } @@ -556,7 +556,7 @@ BMEdge *BM_vert_collapse_faces(BMesh *bm, BMEdge *ke, BMVert *kv, float fac, for (i = 0; i < 2; i++) { /* cant kill data we loop on, build a list and remove those */ BLI_array_empty(bad_faces); - BM_ITER (f, &fiter, bm, BM_FACES_OF_VERT, verts[i]) { + BM_ITER_ELEM (f, &fiter, verts[i], BM_FACES_OF_VERT) { if (f->len < 3) { BLI_array_append(bad_faces, f); } diff --git a/source/blender/bmesh/intern/bmesh_operators.c b/source/blender/bmesh/intern/bmesh_operators.c index e16554eb637..dce491efe72 100644 --- a/source/blender/bmesh/intern/bmesh_operators.c +++ b/source/blender/bmesh/intern/bmesh_operators.c @@ -663,21 +663,21 @@ static void BMO_slot_buffer_from_all(BMesh *bm, BMOperator *op, const char *slot /* TODO - collapse these loops into one */ if (htype & BM_VERT) { - BM_ITER (ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_VERTS_OF_MESH) { ((BMHeader **)output->data.p)[i] = ele; i++; } } if (htype & BM_EDGE) { - BM_ITER (ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_EDGES_OF_MESH) { ((BMHeader **)output->data.p)[i] = ele; i++; } } if (htype & BM_FACE) { - BM_ITER (ele, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_FACES_OF_MESH) { ((BMHeader **)output->data.p)[i] = ele; i++; } @@ -714,7 +714,7 @@ static void bmo_slot_buffer_from_hflag(BMesh *bm, BMOperator *op, const char *sl /* TODO - collapse these loops into one */ if (htype & BM_VERT) { - BM_ITER (ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(ele, BM_ELEM_HIDDEN) && BM_elem_flag_test_bool(ele, hflag) == test_for_enabled) { @@ -725,7 +725,7 @@ static void bmo_slot_buffer_from_hflag(BMesh *bm, BMOperator *op, const char *sl } if (htype & BM_EDGE) { - BM_ITER (ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_EDGES_OF_MESH) { if (!BM_elem_flag_test(ele, BM_ELEM_HIDDEN) && BM_elem_flag_test_bool(ele, hflag) == test_for_enabled) { @@ -736,7 +736,7 @@ static void bmo_slot_buffer_from_hflag(BMesh *bm, BMOperator *op, const char *sl } if (htype & BM_FACE) { - BM_ITER (ele, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(ele, BM_ELEM_HIDDEN) && BM_elem_flag_test_bool(ele, hflag) == test_for_enabled) { @@ -828,7 +828,7 @@ static void bmo_slot_buffer_from_flag(BMesh *bm, BMOperator *op, const char *slo /* TODO - collapse these loops into one */ if (htype & BM_VERT) { - BM_ITER (ele, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_VERTS_OF_MESH) { if (BMO_elem_flag_test_bool(bm, (BMElemF *)ele, oflag) == test_for_enabled) { ele_array[i] = ele; i++; @@ -837,7 +837,7 @@ static void bmo_slot_buffer_from_flag(BMesh *bm, BMOperator *op, const char *slo } if (htype & BM_EDGE) { - BM_ITER (ele, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_EDGES_OF_MESH) { if (BMO_elem_flag_test_bool(bm, (BMElemF *)ele, oflag) == test_for_enabled) { ele_array[i] = ele; i++; @@ -846,7 +846,7 @@ static void bmo_slot_buffer_from_flag(BMesh *bm, BMOperator *op, const char *slo } if (htype & BM_FACE) { - BM_ITER (ele, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (ele, &iter, bm, BM_FACES_OF_MESH) { if (BMO_elem_flag_test_bool(bm, (BMElemF *)ele, oflag) == test_for_enabled) { ele_array[i] = ele; i++; @@ -1035,19 +1035,19 @@ static void bmo_flag_layer_alloc(BMesh *bm) bm->toolflagpool = newpool = BLI_mempool_create(sizeof(BMFlagLayer) * bm->totflags, 512, 512, 0); /* now go through and memcpy all the flags. Loops don't get a flag layer at this time.. */ - BM_ITER_INDEX (ele, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (ele, &iter, bm, BM_VERTS_OF_MESH, i) { oldflags = ele->oflags; ele->oflags = BLI_mempool_calloc(newpool); memcpy(ele->oflags, oldflags, old_totflags_size); BM_elem_index_set(ele, i); /* set_inline */ } - BM_ITER_INDEX (ele, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (ele, &iter, bm, BM_EDGES_OF_MESH, i) { oldflags = ele->oflags; ele->oflags = BLI_mempool_calloc(newpool); memcpy(ele->oflags, oldflags, old_totflags_size); BM_elem_index_set(ele, i); /* set_inline */ } - BM_ITER_INDEX (ele, &iter, bm, BM_FACES_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (ele, &iter, bm, BM_FACES_OF_MESH, i) { oldflags = ele->oflags; ele->oflags = BLI_mempool_calloc(newpool); memcpy(ele->oflags, oldflags, old_totflags_size); @@ -1080,19 +1080,19 @@ static void bmo_flag_layer_free(BMesh *bm) bm->toolflagpool = newpool = BLI_mempool_create(new_totflags_size, 512, 512, BLI_MEMPOOL_SYSMALLOC); /* now go through and memcpy all the flag */ - BM_ITER_INDEX (ele, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (ele, &iter, bm, BM_VERTS_OF_MESH, i) { oldflags = ele->oflags; ele->oflags = BLI_mempool_calloc(newpool); memcpy(ele->oflags, oldflags, new_totflags_size); BM_elem_index_set(ele, i); /* set_inline */ } - BM_ITER_INDEX (ele, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (ele, &iter, bm, BM_EDGES_OF_MESH, i) { oldflags = ele->oflags; ele->oflags = BLI_mempool_calloc(newpool); memcpy(ele->oflags, oldflags, new_totflags_size); BM_elem_index_set(ele, i); /* set_inline */ } - BM_ITER_INDEX (ele, &iter, bm, BM_FACES_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (ele, &iter, bm, BM_FACES_OF_MESH, i) { oldflags = ele->oflags; ele->oflags = BLI_mempool_calloc(newpool); memcpy(ele->oflags, oldflags, new_totflags_size); @@ -1115,15 +1115,15 @@ static void bmo_flag_layer_clear(BMesh *bm) const int totflags_offset = bm->totflags - 1; /* now go through and memcpy all the flag */ - BM_ITER_INDEX (ele, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (ele, &iter, bm, BM_VERTS_OF_MESH, i) { memset(ele->oflags + totflags_offset, 0, sizeof(BMFlagLayer)); BM_elem_index_set(ele, i); /* set_inline */ } - BM_ITER_INDEX (ele, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (ele, &iter, bm, BM_EDGES_OF_MESH, i) { memset(ele->oflags + totflags_offset, 0, sizeof(BMFlagLayer)); BM_elem_index_set(ele, i); /* set_inline */ } - BM_ITER_INDEX (ele, &iter, bm, BM_FACES_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (ele, &iter, bm, BM_FACES_OF_MESH, i) { memset(ele->oflags + totflags_offset, 0, sizeof(BMFlagLayer)); BM_elem_index_set(ele, i); /* set_inline */ } diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c index 869ab4f74e4..971ad96c24a 100644 --- a/source/blender/bmesh/intern/bmesh_polygon.c +++ b/source/blender/bmesh/intern/bmesh_polygon.c @@ -164,7 +164,7 @@ float BM_face_area_calc(BMesh *bm, BMFace *f) BLI_array_fixedstack_declare(verts, BM_NGON_STACK_SIZE, f->len, __func__); - BM_ITER_INDEX (l, &iter, bm, BM_LOOPS_OF_FACE, f, i) { + BM_ITER_ELEM_INDEX (l, &iter, f, BM_LOOPS_OF_FACE, i) { copy_v3_v3(verts[i], l->v->co); } @@ -360,7 +360,7 @@ void BM_vert_normal_update(BMesh *bm, BMVert *v) zero_v3(v->no); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l, &liter, v, BM_LOOPS_OF_VERT) { /* Same calculation used in BM_mesh_normals_update */ sub_v3_v3v3(vec1, l->v->co, l->prev->v->co); sub_v3_v3v3(vec2, l->next->v->co, l->v->co); @@ -384,7 +384,7 @@ void BM_vert_normal_update_all(BMesh *bm, BMVert *v) BMIter iter; BMFace *f; - BM_ITER (f, &iter, bm, BM_FACES_OF_VERT, v) { + BM_ITER_ELEM (f, &iter, v, BM_FACES_OF_VERT) { BM_face_normal_update(bm, f); } diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c index c615f81f3f8..1238038c67c 100644 --- a/source/blender/bmesh/intern/bmesh_queries.c +++ b/source/blender/bmesh/intern/bmesh_queries.c @@ -125,7 +125,7 @@ BMLoop *BM_face_other_vert_loop(BMFace *f, BMVert *v_prev, BMVert *v) BLI_assert(BM_edge_exists(v_prev, v) != NULL); - BM_ITER (l_iter, &liter, NULL, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l_iter, &liter, v, BM_LOOPS_OF_VERT) { if (l_iter->f == f) { break; } @@ -379,7 +379,7 @@ int BM_vert_edge_count_nonwire(BMVert *v) int count = 0; BMIter eiter; BMEdge *edge; - BM_ITER (edge, &eiter, NULL, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (edge, &eiter, v, BM_EDGES_OF_VERT) { if (edge->l) { count++; } @@ -416,7 +416,7 @@ int BM_vert_face_count(BMVert *v) BMLoop *l; BMIter iter; - BM_ITER (l, &iter, NULL, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l, &iter, v, BM_LOOPS_OF_VERT) { count++; } @@ -877,7 +877,7 @@ BMEdge *BM_edge_exists(BMVert *v1, BMVert *v2) BMIter iter; BMEdge *e; - BM_ITER (e, &iter, NULL, BM_EDGES_OF_VERT, v1) { + BM_ITER_ELEM (e, &iter, v1, BM_EDGES_OF_VERT) { if (e->v1 == v2 || e->v2 == v2) return e; } @@ -902,7 +902,7 @@ int BM_face_exists_overlap(BMesh *bm, BMVert **varr, int len, BMFace **r_overlap int i, amount; for (i = 0; i < len; i++) { - BM_ITER (f, &viter, bm, BM_FACES_OF_VERT, varr[i]) { + BM_ITER_ELEM (f, &viter, varr[i], BM_FACES_OF_VERT) { amount = BM_verts_in_face(bm, f, varr, len); if (amount >= len) { if (r_overlapface) { @@ -932,7 +932,7 @@ int BM_face_exists(BMesh *bm, BMVert **varr, int len, BMFace **r_existface) int i, amount; for (i = 0; i < len; i++) { - BM_ITER (f, &viter, bm, BM_FACES_OF_VERT, varr[i]) { + BM_ITER_ELEM (f, &viter, varr[i], BM_FACES_OF_VERT) { amount = BM_verts_in_face(bm, f, varr, len); if (amount == len && amount == f->len) { if (r_existface) { @@ -978,15 +978,15 @@ int BM_face_exists_multi(BMesh *bm, BMVert **varr, BMEdge **earr, int len) for (i = 0; i < len; i++) { /* save some time by looping over edge faces rather then vert faces * will still loop over some faces twice but not as many */ - BM_ITER (f, &fiter, bm, BM_FACES_OF_EDGE, earr[i]) { + BM_ITER_ELEM (f, &fiter, earr[i], BM_FACES_OF_EDGE) { BM_elem_flag_disable(f, BM_ELEM_INTERNAL_TAG); - BM_ITER (v, &viter, bm, BM_VERTS_OF_FACE, f) { + BM_ITER_ELEM (v, &viter, f, BM_VERTS_OF_FACE) { BM_elem_flag_disable(v, BM_ELEM_INTERNAL_TAG); } } /* clear all edge tags */ - BM_ITER (e, &fiter, bm, BM_EDGES_OF_VERT, varr[i]) { + BM_ITER_ELEM (e, &fiter, varr[i], BM_EDGES_OF_VERT) { BM_elem_flag_disable(e, BM_ELEM_INTERNAL_TAG); } } @@ -1005,10 +1005,10 @@ int BM_face_exists_multi(BMesh *bm, BMVert **varr, BMEdge **earr, int len) /* 1) tag all faces connected to edges - if all their verts are boundary */ tot_tag = 0; for (i = 0; i < len; i++) { - BM_ITER (f, &fiter, bm, BM_FACES_OF_EDGE, earr[i]) { + BM_ITER_ELEM (f, &fiter, earr[i], BM_FACES_OF_EDGE) { if (!BM_elem_flag_test(f, BM_ELEM_INTERNAL_TAG)) { ok = TRUE; - BM_ITER (v, &viter, bm, BM_VERTS_OF_FACE, f) { + BM_ITER_ELEM (v, &viter, f, BM_VERTS_OF_FACE) { if (!BM_elem_flag_test(v, BM_ELEM_INTERNAL_TAG)) { ok = FALSE; break; @@ -1036,7 +1036,7 @@ int BM_face_exists_multi(BMesh *bm, BMVert **varr, BMEdge **earr, int len) * check each have 2 tagges faces connected (faces that only use 'varr' verts) */ ok = TRUE; for (i = 0; i < len; i++) { - BM_ITER (e, &fiter, bm, BM_EDGES_OF_VERT, varr[i]) { + BM_ITER_ELEM (e, &fiter, varr[i], BM_EDGES_OF_VERT) { if (/* non-boundary edge */ BM_elem_flag_test(e, BM_ELEM_INTERNAL_TAG) == FALSE && @@ -1045,7 +1045,7 @@ int BM_face_exists_multi(BMesh *bm, BMVert **varr, BMEdge **earr, int len) BM_elem_flag_test(e->v2, BM_ELEM_INTERNAL_TAG) == TRUE) { int tot_face_tag = 0; - BM_ITER (f, &fiter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER_ELEM (f, &fiter, e, BM_FACES_OF_EDGE) { if (BM_elem_flag_test(f, BM_ELEM_INTERNAL_TAG)) { tot_face_tag++; } diff --git a/source/blender/bmesh/intern/bmesh_walkers_impl.c b/source/blender/bmesh/intern/bmesh_walkers_impl.c index 6f283116236..113e1ddc164 100644 --- a/source/blender/bmesh/intern/bmesh_walkers_impl.c +++ b/source/blender/bmesh/intern/bmesh_walkers_impl.c @@ -115,7 +115,7 @@ static void bmw_ShellWalker_begin(BMWalker *walker, void *data) /* starting the walk at a vert, add all the edges * to the worklist */ v = (BMVert *)h; - BM_ITER (e, &eiter, walker->bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { bmw_ShellWalker_visitEdge(walker, e); } break; @@ -151,7 +151,7 @@ static void *bmw_ShellWalker_step(BMWalker *walker) for (i = 0; i < 2; i++) { v = i ? e->v2 : e->v1; - BM_ITER (e2, &iter, walker->bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e2, &iter, v, BM_EDGES_OF_VERT) { bmw_ShellWalker_visitEdge(walker, e2); } } @@ -249,7 +249,7 @@ static void *bmw_ConnectedVertexWalker_step(BMWalker *walker) BMW_state_remove(walker); - BM_ITER (e, &iter, walker->bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &iter, v, BM_EDGES_OF_VERT) { v2 = BM_edge_other_vert(e, v); if (!BLI_ghash_haskey(walker->visithash, v2)) { bmw_ConnectedVertexWalker_visitVertex(walker, v2); @@ -450,7 +450,7 @@ static void bmw_LoopWalker_begin(BMWalker *walker, void *data) BMFace *f_iter; BMFace *f_best = NULL; - BM_ITER (f_iter, &iter, walker->bm, BM_FACES_OF_EDGE, e) { + BM_ITER_ELEM (f_iter, &iter, e, BM_FACES_OF_EDGE) { if (f_best == NULL || f_best->len < f_iter->len) { f_best = f_iter; } @@ -606,7 +606,7 @@ static void *bmw_LoopWalker_step(BMWalker *walker) for (i = 0; i < 2; i++) { v = i ? e->v2 : e->v1; - BM_ITER (nexte, &eiter, walker->bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (nexte, &eiter, v, BM_EDGES_OF_VERT) { if ((nexte->l == NULL) && bmw_mask_check_edge(walker, nexte) && !BLI_ghash_haskey(walker->visithash, nexte)) @@ -953,7 +953,7 @@ static void *bmw_UVEdgeWalker_step(BMWalker *walker) * mloopuv's coordinates. in addition, push on l->next if necessary */ for (i = 0; i < 2; i++) { cl = i ? nl : l; - BM_ITER (l2, &liter, walker->bm, BM_LOOPS_OF_VERT, cl->v) { + BM_ITER_ELEM (l2, &liter, cl->v, BM_LOOPS_OF_VERT) { d1 = CustomData_bmesh_get_layer_n(&walker->bm->ldata, cl->head.data, walker->layer); diff --git a/source/blender/bmesh/operators/bmo_bevel.c b/source/blender/bmesh/operators/bmo_bevel.c index dd94e14ba1c..99c70cc7c13 100644 --- a/source/blender/bmesh/operators/bmo_bevel.c +++ b/source/blender/bmesh/operators/bmo_bevel.c @@ -80,7 +80,7 @@ static void calc_corner_co(BMesh *bm, BMLoop *l, const float fac, float r_co[3], copy_v3_v3(l_co_prev, l->prev->v->co); copy_v3_v3(l_co, l->v->co); - BM_ITER (l2, &iter, bm, BM_LOOPS_OF_VERT, l->v) { + BM_ITER_ELEM (l2, &iter, l->v, BM_LOOPS_OF_VERT) { if (l2->f != l->f) { copy_v3_v3(l_co_next, BM_edge_other_vert(l2->e, l2->next->v)->co); break; @@ -228,14 +228,14 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) #endif } - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { BMO_elem_flag_enable(bm, v, VERT_OLD); } #if 0 //a bit of cleaner code that, alas, doens't work. /* build edge tag */ - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (BMO_elem_flag_test(bm, e->v1, BEVEL_FLAG) || BMO_elem_flag_test(bm, e->v2, BEVEL_FLAG)) { BMIter liter; BMLoop *l; @@ -247,14 +247,14 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMO_elem_flag_enable(bm, e, EDGE_OLD); } - BM_ITER (l, &liter, bm, BM_LOOPS_OF_EDGE, e) { + BM_ITER_ELEM (l, &liter, e, BM_LOOPS_OF_EDGE) { BMLoop *l2; BMIter liter2; if (BMO_elem_flag_test(bm, l->f, BEVEL_FLAG)) continue; - BM_ITER (l2, &liter2, bm, BM_LOOPS_OF_FACE, l->f) { + BM_ITER_ELEM (l2, &liter2, l->f, BM_LOOPS_OF_FACE) { BM_elem_index_set(l2, BLI_array_count(tags)); /* set_loop */ BLI_array_growone(tags); @@ -299,7 +299,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) /* find all faces surrounding e->v1 and, e->v2 */ for (i = 0; i < 2; i++) { - BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, i ? e->v2:e->v1) { + BM_ITER_ELEM (l, &liter, i ? e->v2:e->v1, BM_LOOPS_OF_VERT) { BMLoop *l2; BMIter liter2; @@ -308,7 +308,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) continue; /* create tags for all loops in l-> */ - BM_ITER (l2, &liter2, bm, BM_LOOPS_OF_FACE, l->f) { + BM_ITER_ELEM (l2, &liter2, l->f, BM_LOOPS_OF_FACE) { BLI_array_growone(tags); BM_elem_index_set(l2, BLI_array_count(tags) - 1); /* set_loop */ @@ -329,13 +329,13 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) bm->elem_index_dirty |= BM_EDGE; - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { BMIter eiter; if (!BMO_elem_flag_test(bm, v, BEVEL_FLAG)) continue; - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { if (!BMO_elem_flag_test(bm, e, BEVEL_FLAG) && !ETAG_GET(e, v)) { BMVert *v2; float co[3]; @@ -364,7 +364,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMO_elem_flag_enable(bm, faces[i], FACE_OLD); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, faces[i]) { + BM_ITER_ELEM (l, &liter, faces[i], BM_LOOPS_OF_FACE) { float co[3]; if (BMO_elem_flag_test(bm, l->e, BEVEL_FLAG)) { @@ -438,7 +438,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BLI_array_empty(verts); BLI_array_empty(edges); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, faces[i]) { + BM_ITER_ELEM (l, &liter, faces[i], BM_LOOPS_OF_FACE) { BMVert *v2; tag = tags + BM_elem_index_get(l); @@ -489,7 +489,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) int j; /* create quad spans between split edge */ - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, faces[i]) { + BM_ITER_ELEM (l, &liter, faces[i], BM_LOOPS_OF_FACE) { BMVert *v1 = NULL, *v2 = NULL, *v3 = NULL, *v4 = NULL; if (!BMO_elem_flag_test(bm, l->e, BEVEL_FLAG)) @@ -516,7 +516,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMIter eiter; BMVert *v = j ? v4 : v3; - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { if (!BM_vert_in_edge(e, v3) || !BM_vert_in_edge(e, v4)) continue; @@ -600,7 +600,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMO_elem_flag_enable(bm, f, FACE_NEW|FACE_SPAN); /* un-tag edges in f for deletio */ - BM_ITER (l2, &liter2, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l2, &liter2, f, BM_LOOPS_OF_FACE) { BMO_elem_flag_disable(bm, l2->e, BEVEL_DEL); } } @@ -611,7 +611,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) } /* fill in holes at vertices */ - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { BMIter eiter; BMVert *vv, *vstart = NULL, *lastv = NULL; SmallHash tmphash; @@ -625,7 +625,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BLI_array_empty(verts); BLI_array_empty(edges); - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { BMIter liter; BMVert *v1 = NULL, *v2 = NULL; BMLoop *l; @@ -637,7 +637,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) continue; rad = 0; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_EDGE, e) { + BM_ITER_ELEM (l, &liter, e, BM_LOOPS_OF_EDGE) { if (!BMO_elem_flag_test(bm, l->f, FACE_OLD)) continue; @@ -685,7 +685,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) vstart = vstart ? vstart : verts[0]; vv = vstart; do { - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, vv) { + BM_ITER_ELEM (e, &eiter, vv, BM_EDGES_OF_VERT) { BMVert *vv2 = BM_edge_other_vert(e, vv); if (vv2 != lastv && BLI_smallhash_haskey(&tmphash, (intptr_t)vv2)) { @@ -730,7 +730,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) lastv = NULL; BLI_array_empty(edges); do { - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, vv) { + BM_ITER_ELEM (e, &eiter, vv, BM_EDGES_OF_VERT) { BMVert *vv2 = BM_edge_other_vert(e, vv); if (vv2 != lastv && BLI_smallhash_haskey(&tmphash, (intptr_t)vv2)) { @@ -787,7 +787,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMIter liter; BMFace *f = faces[i]; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { BMLoop *l2; BMIter liter2; @@ -795,7 +795,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) if (!tag->newv) continue; - BM_ITER (l2, &liter2, bm, BM_LOOPS_OF_VERT, tag->newv) { + BM_ITER_ELEM (l2, &liter2, tag->newv, BM_LOOPS_OF_VERT) { if (!BMO_elem_flag_test(bm, l2->f, FACE_NEW) || (l2->v != tag->newv && l2->v != l->v)) continue; @@ -812,7 +812,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMLoop *l3; BMIter liter3; - BM_ITER (l3, &liter3, bm, BM_LOOPS_OF_FACE, l2->f) { + BM_ITER_ELEM (l3, &liter3, l2->f, BM_LOOPS_OF_FACE) { BM_loop_interp_multires(bm, l3, l->f); } } @@ -821,7 +821,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) } /* handle vertices along boundary edge */ - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if (BMO_elem_flag_test(bm, v, VERT_OLD) && BMO_elem_flag_test(bm, v, BEVEL_FLAG) && !BMO_elem_flag_test(bm, v, BEVEL_DEL)) @@ -830,7 +830,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMLoop *lorig = NULL; BMIter liter; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l, &liter, v, BM_LOOPS_OF_VERT) { // BMIter liter2; // BMLoop *l2 = l->v == v ? l : l->next, *l3; @@ -843,7 +843,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) if (!lorig) continue; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l, &liter, v, BM_LOOPS_OF_VERT) { BMLoop *l2 = l->v == v ? l : l->next; BM_elem_attrs_copy(bm, bm, lorig->f, l2->f); @@ -853,7 +853,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) } #if 0 /* clean up any remaining 2-edged face */ - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (f->len == 2) { BMFace *faces[2] = {f, BM_FACE_FIRST_LOOP(f)->radial_next->f}; @@ -868,7 +868,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMO_op_callf(bm, "del geom=%fv context=%i", BEVEL_DEL, DEL_VERTS); /* clean up any edges that might not get properly delete */ - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (BMO_elem_flag_test(bm, e, EDGE_OLD) && !e->l) BMO_elem_flag_enable(bm, e, BEVEL_DEL); } diff --git a/source/blender/bmesh/operators/bmo_connect.c b/source/blender/bmesh/operators/bmo_connect.c index 98bf22fb833..3c1f10be4c4 100644 --- a/source/blender/bmesh/operators/bmo_connect.c +++ b/source/blender/bmesh/operators/bmo_connect.c @@ -135,7 +135,7 @@ static BMVert *get_outer_vert(BMesh *bm, BMEdge *e) int i; i = 0; - BM_ITER (e2, &iter, bm, BM_EDGES_OF_VERT, e->v1) { + BM_ITER_ELEM (e2, &iter, e->v1, BM_EDGES_OF_VERT) { if (BMO_elem_flag_test(bm, e2, EDGE_MARK)) { i++; } @@ -191,7 +191,7 @@ static void bm_vert_loop_pair(BMesh *bm, BMVert *v1, BMVert *v2, BMLoop **l1, BM if ((v1->e && v1->e->l) && (v2->e && v2->e->l)) { - BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v1) { + BM_ITER_ELEM (l, &liter, v1, BM_LOOPS_OF_VERT) { if (l->prev->v == v2) { *l1 = l; *l2 = l->prev; @@ -241,7 +241,7 @@ void bmo_bridge_loops_exec(BMesh *bm, BMOperator *op) do { v = BM_edge_other_vert(e2, v); nexte = NULL; - BM_ITER (e3, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e3, &iter, v, BM_EDGES_OF_VERT) { if (e3 != e2 && BMO_elem_flag_test(bm, e3, EDGE_MARK)) { if (nexte == NULL) { nexte = e3; @@ -278,7 +278,7 @@ void bmo_bridge_loops_exec(BMesh *bm, BMOperator *op) BMO_elem_flag_enable(bm, e2, EDGE_DONE); v = BM_edge_other_vert(e2, v); - BM_ITER (e3, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e3, &iter, v, BM_EDGES_OF_VERT) { if (e3 != e2 && BMO_elem_flag_test(bm, e3, EDGE_MARK) && !BMO_elem_flag_test(bm, e3, EDGE_DONE)) { break; } diff --git a/source/blender/bmesh/operators/bmo_create.c b/source/blender/bmesh/operators/bmo_create.c index a090536fbe0..9e09f71d123 100644 --- a/source/blender/bmesh/operators/bmo_create.c +++ b/source/blender/bmesh/operators/bmo_create.c @@ -225,7 +225,7 @@ static int UNUSED_FUNCTION(rotsys_fill_faces)(BMesh *bm, EdgeData *edata, VertDa SmallHash visithash, *hash = &visithash; int i; - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { BMEdge *e2, *starte; BMVert *startv; int rad, ok; @@ -366,7 +366,7 @@ static void init_rotsys(BMesh *bm, EdgeData *edata, VertData *vdata) #define SIGN(n) ((n)<0.0f) - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { BMIter eiter; float no[3], cent[3]; int j, k = 0, totedge = 0; @@ -376,7 +376,7 @@ static void init_rotsys(BMesh *bm, EdgeData *edata, VertData *vdata) BLI_array_empty(edges); - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { if (BMO_elem_flag_test(bm, e, EDGE_MARK)) { BLI_array_append(edges, e); totedge++; @@ -581,7 +581,7 @@ static void init_rotsys(BMesh *bm, EdgeData *edata, VertData *vdata) #if 0 /* create visualizing geometr */ BMVert *lastv; - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { BMVert *v2; BMFace *f; int totedge = BM_vert_edge_count(v); @@ -915,12 +915,12 @@ void bmo_edgenet_fill_exec(BMesh *bm, BMOperator *op) BM_mesh_elem_index_ensure(bm, BM_VERT); - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { BMO_elem_flag_enable(bm, f, ELE_ORIG); } i = 0; - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { BM_elem_index_set(e, i); /* set_inline */ if (!BMO_elem_flag_test(bm, e, EDGE_MARK)) { @@ -1076,7 +1076,7 @@ static BMEdge *edge_next(BMesh *bm, BMEdge *e) int i; for (i = 0; i < 2; i++) { - BM_ITER (e2, &iter, bm, BM_EDGES_OF_VERT, i ? e->v2 : e->v1) { + BM_ITER_ELEM (e2, &iter, i ? e->v2 : e->v1, BM_EDGES_OF_VERT) { if ((BMO_elem_flag_test(bm, e2, EDGE_MARK)) && (!BMO_elem_flag_test(bm, e2, EDGE_VIS)) && (e2 != e)) @@ -1317,7 +1317,7 @@ void bmo_contextual_create_exec(BMesh *bm, BMOperator *op) BMO_ITER (v, &oiter, bm, op, "geom", BM_VERT) { /* count how many flagged edges this vertex uses */ int tot_edges = 0; - BM_ITER (e, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &iter, v, BM_EDGES_OF_VERT) { if (BMO_elem_flag_test(bm, e, ELE_NEW)) { tot_edges++; if (tot_edges > 2) { @@ -1392,7 +1392,7 @@ void bmo_contextual_create_exec(BMesh *bm, BMOperator *op) /* now, count how many verts we have */ amount = 0; - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if (BMO_elem_flag_test(bm, v, ELE_NEW)) { verts[amount] = v; amount++; diff --git a/source/blender/bmesh/operators/bmo_dissolve.c b/source/blender/bmesh/operators/bmo_dissolve.c index b69408480d0..3e3dae11ab9 100644 --- a/source/blender/bmesh/operators/bmo_dissolve.c +++ b/source/blender/bmesh/operators/bmo_dissolve.c @@ -93,7 +93,7 @@ void bmo_dissolve_faces_exec(BMesh *bm, BMOperator *op) BMIter viter; BMVert *v; - BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) { BMO_elem_flag_set(bm, v, VERT_MARK, (BM_vert_edge_count(v) != 2)); } } @@ -171,7 +171,7 @@ void bmo_dissolve_faces_exec(BMesh *bm, BMOperator *op) BMIter viter; BMVert *v; - BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) { if (BMO_elem_flag_test(bm, v, VERT_MARK)) { if (BM_vert_edge_count(v) == 2) { BM_vert_collapse_edge(bm, v->e, v, TRUE); @@ -219,7 +219,7 @@ void bmo_dissolve_edgeloop_exec(BMesh *bm, BMOperator *op) } } - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if (BMO_elem_flag_test(bm, v, VERT_MARK) && BM_vert_edge_count(v) == 2) { BLI_array_append(verts, v); } @@ -257,7 +257,7 @@ void bmo_dissolve_edges_exec(BMesh *bm, BMOperator *op) int use_verts = BMO_slot_bool_get(op, "use_verts"); if (use_verts) { - BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) { BMO_elem_flag_set(bm, v, VERT_MARK, (BM_vert_edge_count(v) != 2)); } } @@ -276,7 +276,7 @@ void bmo_dissolve_edges_exec(BMesh *bm, BMOperator *op) } if (use_verts) { - BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) { if (BMO_elem_flag_test(bm, v, VERT_MARK)) { if (BM_vert_edge_count(v) == 2) { BM_vert_collapse_edge(bm, v->e, v, TRUE); diff --git a/source/blender/bmesh/operators/bmo_dupe.c b/source/blender/bmesh/operators/bmo_dupe.c index 1a067430239..36d446a0a8c 100644 --- a/source/blender/bmesh/operators/bmo_dupe.c +++ b/source/blender/bmesh/operators/bmo_dupe.c @@ -163,8 +163,8 @@ static BMFace *copy_face(BMOperator *op, BMesh *source_mesh, BMO_elem_flag_enable(target_mesh, target_face, DUPE_NEW); /* copy per-loop custom data */ - BM_ITER (source_loop, &iter, source_mesh, BM_LOOPS_OF_FACE, source_face) { - BM_ITER (target_loop, &iter2, target_mesh, BM_LOOPS_OF_FACE, target_face) { + BM_ITER_ELEM (source_loop, &iter, source_face, BM_LOOPS_OF_FACE) { + BM_ITER_ELEM (target_loop, &iter2, target_face, BM_LOOPS_OF_FACE) { if (BLI_ghash_lookup(vhash, source_loop->v) == target_loop->v) { BM_elem_attrs_copy(source_mesh, target_mesh, source_loop, target_loop); break; @@ -201,7 +201,7 @@ static void copy_mesh(BMOperator *op, BMesh *source, BMesh *target) ehash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh dupeops e"); /* duplicate flagged vertices */ - BM_ITER (v, &viter, source, BM_VERTS_OF_MESH, source) { + BM_ITER_MESH (v, &viter, source, BM_VERTS_OF_MESH) { if (BMO_elem_flag_test(source, v, DUPE_INPUT) && !BMO_elem_flag_test(source, v, DUPE_DONE)) { @@ -210,7 +210,7 @@ static void copy_mesh(BMOperator *op, BMesh *source, BMesh *target) v2 = copy_vertex(source, v, target, vhash); - BM_ITER (f, &iter, source, BM_FACES_OF_VERT, v) { + BM_ITER_ELEM (f, &iter, v, BM_FACES_OF_VERT) { if (BMO_elem_flag_test(source, f, DUPE_INPUT)) { isolated = 0; break; @@ -218,7 +218,7 @@ static void copy_mesh(BMOperator *op, BMesh *source, BMesh *target) } if (isolated) { - BM_ITER (e, &iter, source, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &iter, v, BM_EDGES_OF_VERT) { if (BMO_elem_flag_test(source, e, DUPE_INPUT)) { isolated = 0; break; @@ -235,7 +235,7 @@ static void copy_mesh(BMOperator *op, BMesh *source, BMesh *target) } /* now we dupe all the edges */ - BM_ITER (e, &eiter, source, BM_EDGES_OF_MESH, source) { + BM_ITER_MESH (e, &eiter, source, BM_EDGES_OF_MESH) { if (BMO_elem_flag_test(source, e, DUPE_INPUT) && !BMO_elem_flag_test(source, e, DUPE_DONE)) { @@ -255,10 +255,10 @@ static void copy_mesh(BMOperator *op, BMesh *source, BMesh *target) } /* first we dupe all flagged faces and their elements from source */ - BM_ITER (f, &fiter, source, BM_FACES_OF_MESH, source) { + BM_ITER_MESH (f, &fiter, source, BM_FACES_OF_MESH) { if (BMO_elem_flag_test(source, f, DUPE_INPUT)) { /* vertex pass */ - BM_ITER (v, &viter, source, BM_VERTS_OF_FACE, f) { + BM_ITER_ELEM (v, &viter, f, BM_VERTS_OF_FACE) { if (!BMO_elem_flag_test(source, v, DUPE_DONE)) { copy_vertex(source, v, target, vhash); BMO_elem_flag_enable(source, v, DUPE_DONE); @@ -266,7 +266,7 @@ static void copy_mesh(BMOperator *op, BMesh *source, BMesh *target) } /* edge pass */ - BM_ITER (e, &eiter, source, BM_EDGES_OF_FACE, f) { + BM_ITER_ELEM (e, &eiter, f, BM_EDGES_OF_FACE) { if (!BMO_elem_flag_test(source, e, DUPE_DONE)) { copy_edge(op, source, e, target, vhash, ehash); BMO_elem_flag_enable(source, e, DUPE_DONE); diff --git a/source/blender/bmesh/operators/bmo_edgesplit.c b/source/blender/bmesh/operators/bmo_edgesplit.c index 05703ce1933..ccbcb293915 100644 --- a/source/blender/bmesh/operators/bmo_edgesplit.c +++ b/source/blender/bmesh/operators/bmo_edgesplit.c @@ -60,7 +60,7 @@ static void bm_edgesplit_validate_seams(BMesh *bm, BMOperator *op) vtouch = MEM_callocN(sizeof(char) * bm->totvert, __func__); /* tag all boundary verts so as not to untag an edge which is inbetween only 2 faces [] */ - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { /* unrelated to flag assignment in this function - since this is the * only place we loop over all edges, disable tag */ diff --git a/source/blender/bmesh/operators/bmo_extrude.c b/source/blender/bmesh/operators/bmo_extrude.c index af62abaeec9..4124eafda74 100644 --- a/source/blender/bmesh/operators/bmo_extrude.c +++ b/source/blender/bmesh/operators/bmo_extrude.c @@ -62,7 +62,7 @@ void bmo_extrude_face_indiv_exec(BMesh *bm, BMOperator *op) i = 0; firstv = lastv = NULL; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { v = BM_vert_create(bm, l->v->co, l->v); /* skip on the first iteration */ @@ -93,7 +93,7 @@ void bmo_extrude_face_indiv_exec(BMesh *bm, BMOperator *op) BM_elem_attrs_copy(bm, bm, f, f2); l2 = BM_iter_new(&liter2, bm, BM_LOOPS_OF_FACE, f2); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { BM_elem_attrs_copy(bm, bm, l, l2); l3 = l->next; @@ -258,7 +258,7 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) /* if one flagged face is bordered by an un-flagged face, then we delete * original geometry unless caller explicitly asked to keep it. */ if (!BMO_slot_bool_get(op, "alwayskeeporig")) { - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { int edge_face_tot; @@ -269,7 +269,7 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) found = FALSE; /* found a face that isn't input? */ edge_face_tot = 0; /* edge/face count */ - BM_ITER (f, &fiter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER_ELEM (f, &fiter, e, BM_FACES_OF_EDGE) { if (!BMO_elem_flag_test(bm, f, EXT_INPUT)) { found = TRUE; delorig = TRUE; @@ -287,10 +287,10 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) } /* calculate verts to delete */ - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { found = FALSE; - BM_ITER (e, &viter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &viter, v, BM_EDGES_OF_VERT) { if (!BMO_elem_flag_test(bm, e, EXT_INPUT) || !BMO_elem_flag_test(bm, e, EXT_DEL)) { found = TRUE; break; @@ -299,7 +299,7 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) /* avoid an extra loop */ if (found == TRUE) { - BM_ITER (f, &viter, bm, BM_FACES_OF_VERT, v) { + BM_ITER_ELEM (f, &viter, v, BM_FACES_OF_VERT) { if (!BMO_elem_flag_test(bm, f, EXT_INPUT)) { found = TRUE; break; @@ -312,7 +312,7 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) } } - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (BMO_elem_flag_test(bm, f, EXT_INPUT)) { BMO_elem_flag_enable(bm, f, EXT_DEL); } @@ -335,7 +335,7 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) /* if not delorig, reverse loops of original face */ if (!delorig) { - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (BMO_elem_flag_test(bm, f, EXT_INPUT)) { BM_face_normal_flip(bm, f); } @@ -418,18 +418,18 @@ static void calc_solidify_normals(BMesh *bm) /* can't use BM_edge_face_count because we need to count only marked faces */ int *edge_face_count = MEM_callocN(sizeof(int) * bm->totedge, __func__); - BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) { BM_elem_flag_enable(v, BM_ELEM_TAG); } BM_mesh_elem_index_ensure(bm, BM_EDGE); - BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) { if (!BMO_elem_flag_test(bm, f, FACE_MARK)) { continue; } - BM_ITER (e, &eiter, bm, BM_EDGES_OF_FACE, f) { + BM_ITER_ELEM (e, &eiter, f, BM_EDGES_OF_FACE) { /* And mark all edges and vertices on the * marked faces */ @@ -440,7 +440,7 @@ static void calc_solidify_normals(BMesh *bm) } } - BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) { if (!BMO_elem_flag_test(bm, e, EDGE_MARK)) { continue; } @@ -458,7 +458,7 @@ static void calc_solidify_normals(BMesh *bm) MEM_freeN(edge_face_count); edge_face_count = NULL; /* don't re-use */ - BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) { if (!BM_vert_is_manifold(v)) { BMO_elem_flag_enable(bm, v, VERT_NONMAN); continue; @@ -469,7 +469,7 @@ static void calc_solidify_normals(BMesh *bm) } } - BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) { /* If the edge is not part of a the solidify region * its normal should not be considered */ @@ -485,7 +485,7 @@ static void calc_solidify_normals(BMesh *bm) f1 = f2 = NULL; - BM_ITER (f, &fiter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER_ELEM (f, &fiter, e, BM_FACES_OF_EDGE) { if (BMO_elem_flag_test(bm, f, FACE_MARK)) { if (f1 == NULL) { f1 = f; @@ -530,7 +530,7 @@ static void calc_solidify_normals(BMesh *bm) } /* normalize accumulated vertex normal */ - BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) { if (!BMO_elem_flag_test(bm, v, VERT_MARK)) { continue; } @@ -542,7 +542,7 @@ static void calc_solidify_normals(BMesh *bm) else if (normalize_v3(v->no) == 0.0f && !BM_elem_flag_test(v, BM_ELEM_TAG)) { /* exceptional case, totally flat. use the normal * of any marked face around the vertex */ - BM_ITER (f, &fiter, bm, BM_FACES_OF_VERT, v) { + BM_ITER_ELEM (f, &fiter, v, BM_FACES_OF_VERT) { if (BMO_elem_flag_test(bm, f, FACE_MARK)) { break; } @@ -571,13 +571,13 @@ static void solidify_add_thickness(BMesh *bm, const float dist) BM_mesh_elem_index_ensure(bm, BM_VERT); - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (!BMO_elem_flag_test(bm, f, FACE_MARK)) { continue; } BLI_array_growitems(verts, f->len); - BM_ITER_INDEX (l, &loopIter, bm, BM_LOOPS_OF_FACE, f, i) { + BM_ITER_ELEM_INDEX (l, &loopIter, f, BM_LOOPS_OF_FACE, i) { verts[i] = l->v->co; } @@ -585,7 +585,7 @@ static void solidify_add_thickness(BMesh *bm, const float dist) angle_poly_v3(face_angles, (const float **)verts, f->len); i = 0; - BM_ITER (l, &loopIter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &loopIter, f, BM_LOOPS_OF_FACE) { v = l->v; index = BM_elem_index_get(v); vert_accum[index] += face_angles[i]; @@ -597,7 +597,7 @@ static void solidify_add_thickness(BMesh *bm, const float dist) BLI_array_empty(face_angles); } - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { index = BM_elem_index_get(v); if (vert_accum[index]) { /* zero if unselected */ madd_v3_v3fl(v->co, v->no, dist * (vert_angles[index] / vert_accum[index])); diff --git a/source/blender/bmesh/operators/bmo_inset.c b/source/blender/bmesh/operators/bmo_inset.c index 38fa7237e9c..4e4ea655414 100644 --- a/source/blender/bmesh/operators/bmo_inset.c +++ b/source/blender/bmesh/operators/bmo_inset.c @@ -122,7 +122,7 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) /* first count all inset edges we will split */ /* fill in array and initialize tagging */ - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if ( /* tag if boundary is enabled */ (use_boundary && BM_edge_is_boundary(e) && BM_elem_flag_test(e->l->f, BM_ELEM_TAG)) || @@ -152,7 +152,7 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) /* fill in array and initialize tagging */ es = edge_info; - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { i = BM_elem_index_get(e); if (i != -1) { /* calc edge-split info */ @@ -246,7 +246,7 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) int vecpair[2]; /* find adjacent */ - BM_ITER (e, &iter, bm, BM_EDGES_OF_VERT, v_split) { + BM_ITER_ELEM (e, &iter, v_split, BM_EDGES_OF_VERT) { if (BM_elem_flag_test(e, BM_ELEM_TAG) && e->l && BM_elem_flag_test(e->l->f, BM_ELEM_TAG)) { @@ -411,7 +411,7 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) if (r_vout_len > 2) { int ok = TRUE; /* last step, NULL this vertex if has a tagged face */ - BM_ITER (f, &iter, bm, BM_FACES_OF_VERT, v_split) { + BM_ITER_ELEM (f, &iter, v_split, BM_FACES_OF_VERT) { if (BM_elem_flag_test(f, BM_ELEM_TAG)) { ok = FALSE; break; diff --git a/source/blender/bmesh/operators/bmo_join_triangles.c b/source/blender/bmesh/operators/bmo_join_triangles.c index a31b635021b..c8c36f94c0c 100644 --- a/source/blender/bmesh/operators/bmo_join_triangles.c +++ b/source/blender/bmesh/operators/bmo_join_triangles.c @@ -239,13 +239,13 @@ void bmo_join_triangles_exec(BMesh *bm, BMOperator *op) /* flag all edges of all input face */ BMO_ITER (f1, &siter, bm, op, "faces", BM_FACE) { BMO_elem_flag_enable(bm, f1, FACE_INPUT); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f1) { + BM_ITER_ELEM (l, &liter, f1, BM_LOOPS_OF_FACE) { BMO_elem_flag_enable(bm, l->e, EDGE_MARK); } } /* unflag edges that are invalid; e.g. aren't surrounded by triangle */ - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (!BMO_elem_flag_test(bm, e, EDGE_MARK)) continue; @@ -266,7 +266,7 @@ void bmo_join_triangles_exec(BMesh *bm, BMOperator *op) } i = 0; - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { BMVert *v1, *v2, *v3, *v4; BMFace *f1, *f2; float measure; @@ -323,7 +323,7 @@ void bmo_join_triangles_exec(BMesh *bm, BMOperator *op) BMO_elem_flag_enable(bm, e, EDGE_CHOSEN); } - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (!BMO_elem_flag_test(bm, e, EDGE_CHOSEN)) continue; @@ -332,7 +332,7 @@ void bmo_join_triangles_exec(BMesh *bm, BMOperator *op) BM_faces_join_pair(bm, f1, f2, e, TRUE); } - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (BMO_elem_flag_test(bm, e, EDGE_MARK)) { /* ok, this edge wasn't merged, check if it's * in a 2-tri-pair island, and if so merg */ @@ -344,7 +344,7 @@ void bmo_join_triangles_exec(BMesh *bm, BMOperator *op) continue; for (i = 0; i < 2; i++) { - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, i ? f2 : f1) { + BM_ITER_ELEM (l, &liter, i ? f2 : f1, BM_LOOPS_OF_FACE) { if (l->e != e && BMO_elem_flag_test(bm, l->e, EDGE_MARK)) { break; } diff --git a/source/blender/bmesh/operators/bmo_mirror.c b/source/blender/bmesh/operators/bmo_mirror.c index 003cb49164f..cf1669d441e 100644 --- a/source/blender/bmesh/operators/bmo_mirror.c +++ b/source/blender/bmesh/operators/bmo_mirror.c @@ -102,7 +102,7 @@ void bmo_mirror_exec(BMesh *bm, BMOperator *op) BMIter liter; BMO_ITER (f, &siter, bm, &dupeop, "newout", BM_FACE) { - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { totlayer = CustomData_number_of_layers(&bm->ldata, CD_MLOOPUV); for (i = 0; i < totlayer; i++) { luv = CustomData_bmesh_get_n(&bm->ldata, l->head.data, CD_MLOOPUV, i); diff --git a/source/blender/bmesh/operators/bmo_primitive.c b/source/blender/bmesh/operators/bmo_primitive.c index ec2504c3976..e526e2eaca0 100644 --- a/source/blender/bmesh/operators/bmo_primitive.c +++ b/source/blender/bmesh/operators/bmo_primitive.c @@ -370,7 +370,7 @@ void bmo_create_uvsphere_exec(BMesh *bm, BMOperator *op) } /* and now do imat */ - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { if (BMO_elem_flag_test(bm, eve, VERT_MARK)) { mul_m4_v3(mat, eve->co); } @@ -415,7 +415,7 @@ void bmo_create_icosphere_exec(BMesh *bm, BMOperator *op) eftemp = BM_face_create_quad_tri(bm, v1, v2, v3, NULL, NULL, FALSE); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, eftemp) { + BM_ITER_ELEM (l, &liter, eftemp, BM_LOOPS_OF_FACE) { BMO_elem_flag_enable(bm, l->e, EDGE_MARK); } @@ -437,7 +437,7 @@ void bmo_create_icosphere_exec(BMesh *bm, BMOperator *op) } /* must transform after because of sphere subdivision */ - BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) { if (BMO_elem_flag_test(bm, v, VERT_MARK)) { mul_m4_v3(mat, v->co); } diff --git a/source/blender/bmesh/operators/bmo_removedoubles.c b/source/blender/bmesh/operators/bmo_removedoubles.c index 3eec9437299..8cdb3b9b373 100644 --- a/source/blender/bmesh/operators/bmo_removedoubles.c +++ b/source/blender/bmesh/operators/bmo_removedoubles.c @@ -43,7 +43,7 @@ static void remdoubles_splitface(BMFace *f, BMesh *bm, BMOperator *op) BMVert *v2, *doub; int split = FALSE; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { v2 = BMO_slot_map_ptr_get(bm, op, "targetmap", l->v); /* ok: if v2 is NULL (e.g. not in the map) then it's * a target vert, otherwise it's a double */ @@ -108,7 +108,7 @@ void bmo_weldverts_exec(BMesh *bm, BMOperator *op) int a, b; /* mark merge verts for deletion */ - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if ((v2 = BMO_slot_map_ptr_get(bm, op, "targetmap", v))) { BMO_elem_flag_enable(bm, v, ELE_DEL); @@ -119,11 +119,11 @@ void bmo_weldverts_exec(BMesh *bm, BMOperator *op) /* check if any faces are getting their own corners merged together, split face if so */ - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { remdoubles_splitface(f, bm, op); } - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (BMO_elem_flag_test(bm, e->v1, ELE_DEL) || BMO_elem_flag_test(bm, e->v2, ELE_DEL)) { v = BMO_slot_map_ptr_get(bm, op, "targetmap", e->v1); v2 = BMO_slot_map_ptr_get(bm, op, "targetmap", e->v2); @@ -143,9 +143,9 @@ void bmo_weldverts_exec(BMesh *bm, BMOperator *op) } /* BMESH_TODO, stop abusing face index here */ - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { BM_elem_index_set(f, 0); /* set_dirty! */ - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { if (BMO_elem_flag_test(bm, l->v, ELE_DEL)) { BMO_elem_flag_enable(bm, f, FACE_MARK|ELE_DEL); } @@ -158,7 +158,7 @@ void bmo_weldverts_exec(BMesh *bm, BMOperator *op) /* faces get "modified" by creating new faces here, then at the end the old faces are deleted */ - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (!BMO_elem_flag_test(bm, f, FACE_MARK)) continue; @@ -170,7 +170,7 @@ void bmo_weldverts_exec(BMesh *bm, BMOperator *op) BLI_array_empty(edges); BLI_array_empty(loops); a = 0; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { v = l->v; v2 = l->next->v; if (BMO_elem_flag_test(bm, v, ELE_DEL)) { @@ -218,7 +218,7 @@ void bmo_weldverts_exec(BMesh *bm, BMOperator *op) BM_elem_attrs_copy(bm, bm, f, f2); a = 0; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f2) { + BM_ITER_ELEM (l, &liter, f2, BM_LOOPS_OF_FACE) { l2 = loops[a]; BM_elem_attrs_copy(bm, bm, l2, l); @@ -269,7 +269,7 @@ void bmo_pointmerge_facedata_exec(BMesh *bm, BMOperator *op) return; fac = 1.0f / tot; - BM_ITER (l, &iter, bm, BM_LOOPS_OF_VERT, snapv) { + BM_ITER_ELEM (l, &iter, snapv, BM_LOOPS_OF_VERT) { if (!firstl) { firstl = l; } @@ -291,7 +291,7 @@ void bmo_pointmerge_facedata_exec(BMesh *bm, BMOperator *op) } BMO_ITER (v, &siter, bm, op, "verts", BM_VERT) { - BM_ITER (l, &iter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l, &iter, v, BM_LOOPS_OF_VERT) { if (l == firstl) { continue; } @@ -319,7 +319,7 @@ void bmo_vert_average_facedata_exec(BMesh *bm, BMOperator *op) CustomData_data_initminmax(type, &min, &max); BMO_ITER (v, &siter, bm, op, "verts", BM_VERT) { - BM_ITER (l, &iter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l, &iter, v, BM_LOOPS_OF_VERT) { block = CustomData_bmesh_get_layer_n(&bm->ldata, l->head.data, i); CustomData_data_dominmax(type, block, &min, &max); } @@ -330,7 +330,7 @@ void bmo_vert_average_facedata_exec(BMesh *bm, BMOperator *op) CustomData_data_add(type, &min, &max); BMO_ITER (v, &siter, bm, op, "verts", BM_VERT) { - BM_ITER (l, &iter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l, &iter, v, BM_LOOPS_OF_VERT) { block = CustomData_bmesh_get_layer_n(&bm->ldata, l->head.data, i); CustomData_data_copy_value(type, &min, block); } @@ -384,7 +384,7 @@ void bmo_collapse_exec(BMesh *bm, BMOperator *op) BMW_FLAG_NOP, /* no need to use BMW_FLAG_TEST_HIDDEN, already marked data */ BMW_NIL_LAY); - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (!BMO_elem_flag_test(bm, e, EDGE_MARK)) continue; @@ -444,8 +444,8 @@ static void bmo_collapsecon_do_layer(BMesh *bm, BMOperator *op, int layer) BMW_FLAG_NOP, /* no need to use BMW_FLAG_TEST_HIDDEN, already marked data */ layer); - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { if (BMO_elem_flag_test(bm, l->e, EDGE_MARK)) { /* walk */ BLI_array_empty(blocks); @@ -583,7 +583,7 @@ void bmo_automerge_exec(BMesh *bm, BMOperator *op) * can be merged away into any other verts. Mark all other verts * as VERT_KEEP. */ BMO_slot_buffer_flag_enable(bm, op, "verts", BM_VERT, VERT_IN); - BM_ITER (v, &viter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) { if (!BMO_elem_flag_test(bm, v, VERT_IN)) { BMO_elem_flag_enable(bm, v, VERT_KEEP); } diff --git a/source/blender/bmesh/operators/bmo_slide.c b/source/blender/bmesh/operators/bmo_slide.c index 4b1c2b56f05..57bda579603 100644 --- a/source/blender/bmesh/operators/bmo_slide.c +++ b/source/blender/bmesh/operators/bmo_slide.c @@ -88,7 +88,7 @@ void bmo_vertex_slide_exec(BMesh *bm, BMOperator *op) } /* Make sure we get the correct edge. */ - BM_ITER (edge, &iter, bm, BM_EDGES_OF_VERT, vertex) { + BM_ITER_ELEM (edge, &iter, vertex, BM_EDGES_OF_VERT) { if (BMO_elem_flag_test(bm, edge, EDGE_MARK) && BM_vert_in_edge(edge, vertex)) { slide_edge = edge; break; diff --git a/source/blender/bmesh/operators/bmo_subdivide.c b/source/blender/bmesh/operators/bmo_subdivide.c index 3d148d6268f..b5ca85ebe81 100644 --- a/source/blender/bmesh/operators/bmo_subdivide.c +++ b/source/blender/bmesh/operators/bmo_subdivide.c @@ -742,7 +742,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) BM_data_layer_add(bmesh, &bmesh->vdata, CD_SHAPEKEY); skey = CustomData_number_of_layers(&bmesh->vdata, CD_SHAPEKEY) - 1; - BM_ITER (v, &viter, bmesh, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, bmesh, BM_VERTS_OF_MESH) { float *co = CustomData_bmesh_get_n(&bmesh->vdata, v->head.data, CD_SHAPEKEY, skey); copy_v3_v3(co, v->co); } @@ -768,7 +768,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) BM_EDGE, EDGE_PERCENT); - BM_ITER (face, &fiter, bmesh, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (face, &fiter, bmesh, BM_FACES_OF_MESH) { BMEdge *e1 = NULL, *e2 = NULL; float vec1[3], vec2[3]; @@ -783,7 +783,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) matched = 0; totesel = 0; - BM_ITER_INDEX (nl, &liter, bmesh, BM_LOOPS_OF_FACE, face, i) { + BM_ITER_ELEM_INDEX (nl, &liter, face, BM_LOOPS_OF_FACE, i) { edges[i] = nl->e; verts[i] = nl->v; @@ -894,7 +894,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) } /* copy original-geometry displacements to current coordinates */ - BM_ITER (v, &viter, bmesh, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, bmesh, BM_VERTS_OF_MESH) { float *co = CustomData_bmesh_get_n(&bmesh->vdata, v->head.data, CD_SHAPEKEY, skey); copy_v3_v3(v->co, co); } @@ -916,7 +916,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) BLI_array_empty(splits); /* for case of two edges, connecting them shouldn't be too hard */ - BM_ITER (l, &liter, bmesh, BM_LOOPS_OF_FACE, face) { + BM_ITER_ELEM (l, &liter, face, BM_LOOPS_OF_FACE) { BLI_array_growone(loops); loops[BLI_array_count(loops) - 1] = l; } @@ -1003,7 +1003,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) } /* copy original-geometry displacements to current coordinates */ - BM_ITER (v, &viter, bmesh, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, bmesh, BM_VERTS_OF_MESH) { float *co = CustomData_bmesh_get_n(&bmesh->vdata, v->head.data, CD_SHAPEKEY, skey); copy_v3_v3(v->co, co); } @@ -1064,7 +1064,7 @@ void BM_mesh_esubdivideflag(Object *UNUSED(obedit), BMesh *bm, int flag, float s BMEdge *e; BMIter eiter; - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, ele) { + BM_ITER_ELEM (e, &eiter, ele, BM_EDGES_OF_VERT) { if (!BM_elem_flag_test(e, BM_ELEM_SELECT) && BM_elem_flag_test(e->v1, BM_ELEM_SELECT) && BM_elem_flag_test(e->v2, BM_ELEM_SELECT)) diff --git a/source/blender/bmesh/operators/bmo_triangulate.c b/source/blender/bmesh/operators/bmo_triangulate.c index 33c4cfc45e8..916b10d707e 100644 --- a/source/blender/bmesh/operators/bmo_triangulate.c +++ b/source/blender/bmesh/operators/bmo_triangulate.c @@ -103,7 +103,7 @@ void bmo_beautify_fill_exec(BMesh *bm, BMOperator *op) while (!stop) { stop = 1; - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { BMVert *v1, *v2, *v3, *v4; if (!BM_edge_is_manifold(e) || BMO_elem_flag_test(bm, e, EDGE_MARK)) { @@ -206,7 +206,7 @@ void bmo_triangle_fill_exec(BMesh *bm, BMOperator *op) BMIter liter; BMO_elem_flag_enable(bm, f, ELE_NEW); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { if (!BMO_elem_flag_test(bm, l->e, EDGE_MARK)) { BMO_elem_flag_enable(bm, l->e, ELE_NEW); } diff --git a/source/blender/bmesh/operators/bmo_utils.c b/source/blender/bmesh/operators/bmo_utils.c index b35bcc8eaec..30bb1d2913d 100644 --- a/source/blender/bmesh/operators/bmo_utils.c +++ b/source/blender/bmesh/operators/bmo_utils.c @@ -181,13 +181,13 @@ static void bmo_regionextend_extend(BMesh *bm, BMOperator *op, int usefaces) if (!usefaces) { BMO_ITER (v, &siter, bm, op, "geom", BM_VERT) { - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { if (!BMO_elem_flag_test(bm, e, SEL_ORIG)) break; } if (e) { - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { BMO_elem_flag_enable(bm, e, SEL_FLAG); BMO_elem_flag_enable(bm, BM_edge_other_vert(e, v), SEL_FLAG); } @@ -200,8 +200,8 @@ static void bmo_regionextend_extend(BMesh *bm, BMOperator *op, int usefaces) BMLoop *l; BMO_ITER (f, &siter, bm, op, "geom", BM_FACE) { - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { - BM_ITER (f2, &fiter, bm, BM_FACES_OF_EDGE, l->e) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { + BM_ITER_ELEM (f2, &fiter, l->e, BM_FACES_OF_EDGE) { if (!BMO_elem_flag_test(bm, f2, SEL_ORIG)) { BMO_elem_flag_enable(bm, f2, SEL_FLAG); } @@ -220,7 +220,7 @@ static void bmo_regionextend_constrict(BMesh *bm, BMOperator *op, int usefaces) if (!usefaces) { BMO_ITER (v, &siter, bm, op, "geom", BM_VERT) { - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { if (!BMO_elem_flag_test(bm, e, SEL_ORIG)) break; } @@ -228,7 +228,7 @@ static void bmo_regionextend_constrict(BMesh *bm, BMOperator *op, int usefaces) if (e) { BMO_elem_flag_enable(bm, v, SEL_FLAG); - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { BMO_elem_flag_enable(bm, e, SEL_FLAG); } @@ -241,8 +241,8 @@ static void bmo_regionextend_constrict(BMesh *bm, BMOperator *op, int usefaces) BMLoop *l; BMO_ITER (f, &siter, bm, op, "geom", BM_FACE) { - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { - BM_ITER (f2, &fiter, bm, BM_FACES_OF_EDGE, l->e) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { + BM_ITER_ELEM (f2, &fiter, l->e, BM_FACES_OF_EDGE) { if (!BMO_elem_flag_test(bm, f2, SEL_ORIG)) { BMO_elem_flag_enable(bm, f, SEL_FLAG); break; @@ -358,8 +358,8 @@ void bmo_righthandfaces_exec(BMesh *bm, BMOperator *op) f = fstack[i]; i--; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { - BM_ITER (l2, &liter2, bm, BM_LOOPS_OF_LOOP, l) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { + BM_ITER_ELEM (l2, &liter2, l, BM_LOOPS_OF_LOOP) { if (!BMO_elem_flag_test(bm, l2->f, FACE_FLAG) || l2 == l) continue; @@ -424,7 +424,7 @@ void bmo_vertexsmooth_exec(BMesh *bm, BMOperator *op) co = cos[i]; j = 0; - BM_ITER (e, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &iter, v, BM_EDGES_OF_VERT) { co2 = BM_edge_other_vert(e, v)->co; add_v3_v3v3(co, co, co2); j += 1; @@ -475,7 +475,7 @@ static float ngon_fake_area(BMesh *bm, BMFace *f) BM_face_center_mean_calc(bm, f, c); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { if (num_verts == 0) { copy_v3_v3(v, l->v->co); copy_v3_v3(sv, l->v->co); @@ -545,7 +545,7 @@ void bmo_similarfaces_exec(BMesh *bm, BMOperator *op) f_ext = (SimSel_FaceExt *)MEM_callocN(sizeof(SimSel_FaceExt) * num_total, "f_ext util.c"); /* loop through all the faces and fill the faces/indices structure */ - BM_ITER (fm, &fm_iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (fm, &fm_iter, bm, BM_FACES_OF_MESH) { f_ext[i].f = fm; if (BMO_elem_flag_test(bm, fm, FACE_MARK)) { indices[idx] = i; @@ -673,7 +673,7 @@ static float edge_angle(BMesh *bm, BMEdge *e) /* first edge faces, don't account for 3+ */ - BM_ITER (f, &fiter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER_ELEM (f, &fiter, e, BM_FACES_OF_EDGE) { if (f_prev == NULL) { f_prev = f; } @@ -733,7 +733,7 @@ void bmo_similaredges_exec(BMesh *bm, BMOperator *op) e_ext = (SimSel_EdgeExt *)MEM_callocN(sizeof(SimSel_EdgeExt) * num_total, "e_ext util.c"); /* loop through all the edges and fill the edges/indices structure */ - BM_ITER (e, &e_iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &e_iter, bm, BM_EDGES_OF_MESH) { e_ext[i].e = e; if (BMO_elem_flag_test(bm, e, EDGE_MARK)) { indices[idx] = i; @@ -897,7 +897,7 @@ void bmo_similarverts_exec(BMesh *bm, BMOperator *op) v_ext = (SimSel_VertExt *)MEM_mallocN(sizeof(SimSel_VertExt) * num_total, "vertex extra"); /* loop through all the vertices and fill the vertices/indices structure */ - BM_ITER (v, &v_iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &v_iter, bm, BM_VERTS_OF_MESH) { v_ext[i].v = v; if (BMO_elem_flag_test(bm, v, VERT_MARK)) { indices[idx] = i; @@ -993,7 +993,7 @@ void bmo_face_rotateuvs_exec(BMesh *bm, BMOperator *op) float t_uv[2]; /* tmp uvs */ int n = 0; - BM_ITER (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { + BM_ITER_ELEM (lf, &l_iter, fs, BM_LOOPS_OF_FACE) { /* current loop uv is the previous loop uv */ MLoopUV *luv = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPUV); if (n == 0) { @@ -1017,7 +1017,7 @@ void bmo_face_rotateuvs_exec(BMesh *bm, BMOperator *op) float t_uv[2]; /* current uvs */ int n = 0; - BM_ITER (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { + BM_ITER_ELEM (lf, &l_iter, fs, BM_LOOPS_OF_FACE) { /* previous loop uv is the current loop uv */ luv = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPUV); if (n == 0) { @@ -1058,7 +1058,7 @@ void bmo_face_reverseuvs_exec(BMesh *bm, BMOperator *op) BLI_array_empty(uvs); BLI_array_growitems(uvs, fs->len); - BM_ITER_INDEX (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs, i) { + BM_ITER_ELEM_INDEX (lf, &l_iter, fs, BM_LOOPS_OF_FACE, i) { MLoopUV *luv = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPUV); /* current loop uv is the previous loop uv */ @@ -1067,7 +1067,7 @@ void bmo_face_reverseuvs_exec(BMesh *bm, BMOperator *op) /* now that we have the uvs in the array, reverse! */ i = 0; - BM_ITER (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { + BM_ITER_ELEM (lf, &l_iter, fs, BM_LOOPS_OF_FACE) { /* current loop uv is the previous loop uv */ MLoopUV *luv = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPUV); luv->uv[0] = uvs[(fs->len - i - 1)][0]; @@ -1102,7 +1102,7 @@ void bmo_rotatecolors_exec(BMesh *bm, BMOperator *op) MLoopCol t_col; /* tmp color */ int n = 0; - BM_ITER (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { + BM_ITER_ELEM (lf, &l_iter, fs, BM_LOOPS_OF_FACE) { /* current loop color is the previous loop color */ MLoopCol *luv = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPCOL); if (n == 0) { @@ -1126,7 +1126,7 @@ void bmo_rotatecolors_exec(BMesh *bm, BMOperator *op) MLoopCol t_col; /* current color */ int n = 0; - BM_ITER (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { + BM_ITER_ELEM (lf, &l_iter, fs, BM_LOOPS_OF_FACE) { /* previous loop color is the current loop color */ lcol = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPCOL); if (n == 0) { @@ -1164,7 +1164,7 @@ void bmo_face_reversecolors_exec(BMesh *bm, BMOperator *op) int i = 0; BLI_array_empty(cols); - BM_ITER (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { + BM_ITER_ELEM (lf, &l_iter, fs, BM_LOOPS_OF_FACE) { MLoopCol *lcol = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPCOL); /* current loop uv is the previous loop color */ @@ -1175,7 +1175,7 @@ void bmo_face_reversecolors_exec(BMesh *bm, BMOperator *op) /* now that we have the uvs in the array, reverse! */ i = 0; - BM_ITER (lf, &l_iter, bm, BM_LOOPS_OF_FACE, fs) { + BM_ITER_ELEM (lf, &l_iter, fs, BM_LOOPS_OF_FACE) { /* current loop uv is the previous loop color */ MLoopCol *lcol = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPCOL); *lcol = cols[(fs->len - i - 1)]; @@ -1227,7 +1227,7 @@ void bmo_vertexshortestpath_exec(BMesh *bm, BMOperator *op) /* iterate through all the mesh vertices */ /* loop through all the vertices and fill the vertices/indices structure */ i = 0; - BM_ITER (v, &v_iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &v_iter, bm, BM_VERTS_OF_MESH) { vert_list[i].v = v; vert_list[i].parent = NULL; vert_list[i].weight = FLT_MAX; @@ -1262,7 +1262,7 @@ void bmo_vertexshortestpath_exec(BMesh *bm, BMOperator *op) v_weight = vert_list[BM_elem_index_get(v)].weight; - BM_ITER (e, &e_i, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &e_i, v, BM_EDGES_OF_VERT) { BMVert *u; float e_weight = v_weight; diff --git a/source/blender/bmesh/tools/BME_bevel.c b/source/blender/bmesh/tools/BME_bevel.c index 307136c504c..02ae75c5d9a 100644 --- a/source/blender/bmesh/tools/BME_bevel.c +++ b/source/blender/bmesh/tools/BME_bevel.c @@ -661,7 +661,7 @@ static BMFace *BME_bevel_poly(BMesh *bm, BMFace *f, float value, int options, BM zero_v3(up_vec); /* find a good normal for this face (there's better ways, I'm sure) */ - BM_ITER (l, &iter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &iter, f, BM_LOOPS_OF_FACE) { BME_bevel_get_vec(vec1, l->v, l->next->v, td); BME_bevel_get_vec(vec2, l->prev->v, l->v, td); cross_v3_v3v3(vec3, vec2, vec1); @@ -690,7 +690,7 @@ static BMFace *BME_bevel_poly(BMesh *bm, BMFace *f, float value, int options, BM /* max pass */ if (value > 0.5f && max > 0) { max = -1; - BM_ITER (l, &iter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &iter, f, BM_LOOPS_OF_FACE) { if (BMO_elem_flag_test(bm, l->e, BME_BEVEL_BEVEL) || BMO_elem_flag_test(bm, l->e, BME_BEVEL_ORIG)) { BME_bevel_get_vec(vec1, l->v, l->next->v, td); vtd1 = BME_get_transdata(td, l->v); @@ -788,13 +788,13 @@ static float UNUSED_FUNCTION(BME_bevel_get_angle_vert)(BMesh *bm, BMVert *v) float angle_diff = 0.0f; - BM_ITER (l, &iter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l, &iter, v, BM_LOOPS_OF_VERT) { BM_loop_face_normal(l, n_tmp); madd_v3_v3fl(n, n_tmp, BM_loop_face_angle(l)); } normalize_v3(n); - BM_ITER (l, &iter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l, &iter, v, BM_LOOPS_OF_VERT) { /* could cache from before */ BM_loop_face_normal(l, n_tmp); angle_diff += angle_normalized_v3v3(n, n_tmp) * (BM_loop_face_angle(l) * (float)(M_PI * 0.5)); @@ -848,7 +848,7 @@ static void bevel_init_verts(BMesh *bm, int options, float angle, BME_TransData_ // const float threshold = (options & BME_BEVEL_ANGLE) ? cosf(angle + 0.001) : 0.0f; (void)angle; - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { weight = 0.0f; if (!BMO_elem_flag_test(bm, v, BME_BEVEL_NONMAN)) { /* modifiers should not use selection */ @@ -889,7 +889,7 @@ static void bevel_init_edges(BMesh *bm, int options, float angle, BME_TransData_ BMIter iter; const float threshold = (options & BME_BEVEL_ANGLE) ? cosf(angle + 0.001) : 0.0f; - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { weight = 0.0; if (!BMO_elem_flag_test(bm, e, BME_BEVEL_NONMAN)) { if (options & BME_BEVEL_SELECT) { @@ -930,7 +930,7 @@ static void bevel_init_edges(BMesh *bm, int options, float angle, BME_TransData_ } /* clean up edges with 2 faces that share more than one edg */ - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (BMO_elem_flag_test(bm, e, BME_BEVEL_BEVEL)) { count = BM_face_share_edge_count(e->l->f, e->l->radial_next->f); if (count > 1) BMO_elem_flag_disable(bm, e, BME_BEVEL_BEVEL); @@ -947,7 +947,7 @@ static BMesh *BME_bevel_initialize(BMesh *bm, int options, int UNUSED(defgrp_ind int /* wire, */ len; /* tag non-manifold geometr */ - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { BMO_elem_flag_enable(bm, v, BME_BEVEL_ORIG); if (v->e) { BME_assign_transdata(td, bm, v, v->co, v->co, NULL, NULL, 0, -1, -1, NULL); @@ -965,7 +965,7 @@ static BMesh *BME_bevel_initialize(BMesh *bm, int options, int UNUSED(defgrp_ind } } - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { BMO_elem_flag_enable(bm, e, BME_BEVEL_ORIG); if (!(BM_edge_is_boundary(e) || BM_edge_is_manifold(e))) { BMO_elem_flag_enable(bm, e->v1, BME_BEVEL_NONMAN); @@ -977,7 +977,7 @@ static BMesh *BME_bevel_initialize(BMesh *bm, int options, int UNUSED(defgrp_ind } } - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { BMO_elem_flag_enable(bm, f, BME_BEVEL_ORIG); } @@ -1001,13 +1001,13 @@ static BMesh *BME_bevel_reinitialize(BMesh *bm) BMFace *f; BMIter iter; - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { BMO_elem_flag_enable(bm, v, BME_BEVEL_ORIG); } - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { BMO_elem_flag_enable(bm, e, BME_BEVEL_ORIG); } - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { BMO_elem_flag_enable(bm, f, BME_BEVEL_ORIG); } return bm; @@ -1041,21 +1041,21 @@ static BMesh *BME_bevel_mesh(BMesh *bm, float value, int UNUSED(res), int option /* unsigned int i, len; */ /* bevel poly */ - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (BMO_elem_flag_test(bm, f, BME_BEVEL_ORIG)) { BME_bevel_poly(bm, f, value, options, td); } } /* get rid of beveled edge */ - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (BMO_elem_flag_test(bm, e, BME_BEVEL_BEVEL) && BMO_elem_flag_test(bm, e, BME_BEVEL_ORIG)) { BM_faces_join_pair(bm, e->l->f, e->l->radial_next->f, e, TRUE); } } /* link up corners and cli */ - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if (BMO_elem_flag_test(bm, v, BME_BEVEL_ORIG) && BMO_elem_flag_test(bm, v, BME_BEVEL_BEVEL)) { curedge = v->e; do { @@ -1075,7 +1075,7 @@ static BMesh *BME_bevel_mesh(BMesh *bm, float value, int UNUSED(res), int option #ifdef DEBUG /* Debug print, remov */ - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (f->len == 2) { printf("%s: warning, 2 edge face\n", __func__); } @@ -1128,7 +1128,7 @@ BMesh *BME_bevel(BMEditMesh *em, float value, int res, int options, int defgrp_i } /* otherwise apply transforms */ - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if ((vtd = BME_get_transdata(td, v))) { if (vtd->max && (*vtd->max > 0 && value > *vtd->max)) { d = *vtd->max; diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c index f1d0d63ba03..f38bdb1ebe3 100644 --- a/source/blender/editors/mesh/editface.c +++ b/source/blender/editors/mesh/editface.c @@ -814,7 +814,7 @@ void ED_mesh_mirrtopo_init(Mesh *me, const int ob_mode, MirrTopoStore_t *mesh_to if (em) { totedge = me->edit_btmesh->bm->totedge; - BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { topo_hash[BM_elem_index_get(eed->v1)]++; topo_hash[BM_elem_index_get(eed->v2)]++; } @@ -835,7 +835,7 @@ void ED_mesh_mirrtopo_init(Mesh *me, const int ob_mode, MirrTopoStore_t *mesh_to /* use the number of edges per vert to give verts unique topology IDs */ if (em) { - BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { topo_hash[BM_elem_index_get(eed->v1)] += topo_hash_prev[BM_elem_index_get(eed->v2)]; topo_hash[BM_elem_index_get(eed->v2)] += topo_hash_prev[BM_elem_index_get(eed->v1)]; } diff --git a/source/blender/editors/mesh/editmesh_bvh.c b/source/blender/editors/mesh/editmesh_bvh.c index 9f5ab8a20d8..8be0cc0aa36 100644 --- a/source/blender/editors/mesh/editmesh_bvh.c +++ b/source/blender/editors/mesh/editmesh_bvh.c @@ -125,7 +125,7 @@ BMBVHTree *BMBVH_NewBVH(BMEditMesh *em, int flag, Scene *scene, Object *obedit) void *data[3]; tree->cos = MEM_callocN(sizeof(float) * 3 * em->bm->totvert, "bmbvh cos"); - BM_ITER_INDEX (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (v, &iter, em->bm, BM_VERTS_OF_MESH, i) { BM_elem_index_set(v, i); /* set_inline */ copy_v3_v3(tree->cos[i], v->co); } diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 9d0285e9ceb..29006a78a29 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -557,7 +557,7 @@ static void knife_get_vert_faces(knifetool_opdata *kcd, KnifeVert *kfv, BMFace * } else if (kfv->v) { BMesh *bm = kcd->em->bm; - BM_ITER (f, &bmiter, bm, BM_FACES_OF_VERT, kfv->v) { + BM_ITER_ELEM (f, &bmiter, kfv->v, BM_FACES_OF_VERT) { knife_append_list(kcd, lst, f); } } @@ -570,7 +570,7 @@ static void knife_get_edge_faces(knifetool_opdata *kcd, KnifeEdge *kfe, ListBase if (kfe->e) { BMesh *bm = kcd->em->bm; - BM_ITER (f, &bmiter, bm, BM_FACES_OF_EDGE, kfe->e) { + BM_ITER_ELEM (f, &bmiter, kfe->e, BM_FACES_OF_EDGE) { knife_append_list(kcd, lst, f); } } @@ -1706,7 +1706,7 @@ static void remerge_faces(knifetool_opdata *kcd) BMO_op_finish(bm, &bmop); BLI_smallhash_init(visit); - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { BMIter eiter; BMEdge *e; BMFace *f2; @@ -1727,14 +1727,14 @@ static void remerge_faces(knifetool_opdata *kcd) BLI_array_append(faces, f2); - BM_ITER (e, &eiter, bm, BM_EDGES_OF_FACE, f2) { + BM_ITER_ELEM (e, &eiter, f2, BM_EDGES_OF_FACE) { BMIter fiter; BMFace *f3; if (BMO_elem_flag_test(bm, e, BOUNDARY)) continue; - BM_ITER (f3, &fiter, bm, BM_FACES_OF_EDGE, e) { + BM_ITER_ELEM (f3, &fiter, e, BM_FACES_OF_EDGE) { if (!BMO_elem_flag_test(bm, f3, FACE_NEW)) continue; if (BLI_smallhash_haskey(visit, (intptr_t)f3)) @@ -1789,14 +1789,14 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) /* BMESH_TODO this should be valid now, leaving here until we can ensure this - campbell */ i = 0; - BM_ITER (f, &bmiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &bmiter, bm, BM_FACES_OF_MESH) { BM_elem_index_set(f, i); /* set_inline */ faces[i] = f; i++; } bm->elem_index_dirty &= ~BM_FACE; - BM_ITER (e, &bmiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &bmiter, bm, BM_EDGES_OF_MESH) { BMO_elem_flag_enable(bm, e, BOUNDARY); } @@ -1984,7 +1984,7 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) bm->elem_index_dirty |= BM_FACE; /* interpolate customdata */ - BM_ITER (f, &bmiter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &bmiter, bm, BM_FACES_OF_MESH) { BMLoop *l1; BMFace *f2; BMIter liter1; @@ -1999,7 +1999,7 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) BM_elem_attrs_copy(bm, bm, f2, f); - BM_ITER (l1, &liter1, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l1, &liter1, f, BM_LOOPS_OF_FACE) { BM_loop_interp_from_face(bm, l1, f2, TRUE, TRUE); } } @@ -2306,7 +2306,7 @@ static int find_hole_chains(knifetool_opdata *kcd, ListBase *hole, BMFace *f, Li } j = 0; - BM_ITER (v, &iter, kcd->em->bm, BM_VERTS_OF_FACE, f) { + BM_ITER_ELEM (v, &iter, f, BM_VERTS_OF_FACE) { fco[j] = BLI_memarena_alloc(kcd->arena, 2 * sizeof(float)); fco[j][0] = v->co[ax]; fco[j][1] = v->co[ay]; @@ -2413,7 +2413,7 @@ static int knife_edge_in_face(knifetool_opdata *kcd, KnifeEdge *kfe, BMFace *f) l2 = NULL; /* find out if v1 and v2, if set, are part of the face */ - BM_ITER (l, &iter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &iter, f, BM_LOOPS_OF_FACE) { if (v1 && l->v == v1) l1 = l; if (v2 && l->v == v2) diff --git a/source/blender/editors/mesh/editmesh_loopcut.c b/source/blender/editors/mesh/editmesh_loopcut.c index a41059ef3ca..27e3e643be1 100644 --- a/source/blender/editors/mesh/editmesh_loopcut.c +++ b/source/blender/editors/mesh/editmesh_loopcut.c @@ -145,7 +145,7 @@ static void edgering_find_order(BMEditMesh *em, BMEdge *lasteed, BMEdge *eed, /* find correct order for v[1] */ if (!(BM_edge_in_face(l->f, eed) && BM_edge_in_face(l->f, lasteed))) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_LOOP, l) { + BM_ITER_ELEM (l, &liter, l, BM_LOOPS_OF_LOOP) { if (BM_edge_in_face(l->f, eed) && BM_edge_in_face(l->f, lasteed)) break; } diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index 7904c6f8c36..9ae816903f2 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -158,7 +158,7 @@ static BMEdge *edbm_ripsel_edge_mark_step(BMesh *bm, BMVert *v, const int uid) { BMIter iter; BMEdge *e; - BM_ITER (e, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &iter, v, BM_EDGES_OF_VERT) { if (IS_VISIT_POSSIBLE(e) && !IS_VISIT_DONE(e)) { BMLoop *l_a, *l_b; @@ -196,8 +196,8 @@ static EdgeLoopPair *edbm_ripsel_looptag_helper(BMesh *bm) EdgeLoopPair *lp; /* initialize loops with dummy invalid index values */ - BM_ITER (f, &fiter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { BM_elem_index_set(l, INVALID_UID); } } @@ -213,7 +213,7 @@ static EdgeLoopPair *edbm_ripsel_looptag_helper(BMesh *bm) BMEdge *e_last; e_first = NULL; - BM_ITER (e, &eiter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) { if (IS_VISIT_POSSIBLE(e) && !IS_VISIT_DONE(e)) { e_first = e; break; @@ -290,7 +290,7 @@ static BMEdge *edbm_ripsel_edge_uid_step(BMesh *bm, BMEdge *e_orig, BMVert **v_p BMVert *v = BM_edge_other_vert(e_orig, *v_prev); const int uid_cmp = BM_elem_index_get(e_orig->l) - 1; - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { if (BM_elem_index_get(e->l) == uid_cmp) { *v_prev = v; return e; @@ -374,7 +374,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) ED_view3d_ob_project_mat_get(rv3d, obedit, projectMat); /* BM_ELEM_SELECT --> BM_ELEM_TAG */ - BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { BM_elem_flag_set(e, BM_ELEM_TAG, BM_elem_flag_test(e, BM_ELEM_SELECT)); } @@ -393,7 +393,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) else { ese.ele = NULL; - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) break; } @@ -407,7 +407,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) if (v->e) { /* find closest edge to mouse cursor */ - BM_ITER (e, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &iter, v, BM_EDGES_OF_VERT) { int is_boundary = BM_edge_is_boundary(e); /* consider wire as boundary for this purpose, * otherwise we can't a face away from a wire edge */ @@ -455,7 +455,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) dist = FLT_MAX; for (i = 0; i < vout_len; i++) { - BM_ITER (l, &iter, bm, BM_LOOPS_OF_VERT, vout[i]) { + BM_ITER_ELEM (l, &iter, vout[i], BM_LOOPS_OF_VERT) { if (!BM_elem_flag_test(l->f, BM_ELEM_HIDDEN)) { float l_mid_co[3]; BM_loop_face_tangent(l, l_mid_co); @@ -534,10 +534,10 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) } else { /* expand edge selection */ - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { e2 = NULL; i = 0; - BM_ITER (e, &eiter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { /* important to check selection rather then tag here * else we get feedback loop */ if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { @@ -604,12 +604,12 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) #else dist = FLT_MAX; - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { /* disable by default, re-enable winner at end */ BM_elem_select_set(bm, v, FALSE); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l, &liter, v, BM_LOOPS_OF_VERT) { /* calculate a point in the face, rather then calculate the middle, * make a vector pointing between the 2 edges attached to this loop */ sub_v3_v3v3(l_prev_co, l->prev->v->co, l->v->co); diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 831813c566f..52547c120c0 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -75,7 +75,7 @@ void EDBM_select_mirrored(Object *UNUSED(obedit), BMEditMesh *em, int extend) BMVert *v1, *v2; BMIter iter; - BM_ITER (v1, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v1, &iter, em->bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(v1, BM_ELEM_SELECT) || BM_elem_flag_test(v1, BM_ELEM_HIDDEN)) { BM_elem_flag_disable(v1, BM_ELEM_TAG); } @@ -89,7 +89,7 @@ void EDBM_select_mirrored(Object *UNUSED(obedit), BMEditMesh *em, int extend) if (!extend) EDBM_flag_disable_all(em, BM_ELEM_SELECT); - BM_ITER (v1, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v1, &iter, em->bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(v1, BM_ELEM_TAG) || BM_elem_flag_test(v1, BM_ELEM_HIDDEN)) continue; @@ -1221,7 +1221,7 @@ static int edgetag_shortest_path(Scene *scene, BMEditMesh *em, BMEdge *source, B /* note, would pass BM_EDGE except we are looping over all edges anyway */ BM_mesh_elem_index_ensure(em->bm, BM_VERT /* | BM_EDGE */); - BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(e, BM_ELEM_HIDDEN)) { BLI_smallhash_insert(&visithash, (uintptr_t)e, NULL); } @@ -1239,7 +1239,7 @@ static int edgetag_shortest_path(Scene *scene, BMEditMesh *em, BMEdge *source, B cost = MEM_mallocN(sizeof(*cost) * totedge, "SeamPathCost"); /* count edges, compute adjacent edges offsets and fill adjacent */ - BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { nedges[BM_elem_index_get(e->v1) + 1]++; nedges[BM_elem_index_get(e->v2) + 1]++; } @@ -1252,7 +1252,7 @@ static int edgetag_shortest_path(Scene *scene, BMEditMesh *em, BMEdge *source, B nedges[0] = nedges[1] = 0; i = 0; - BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { edges[nedges[BM_elem_index_get(e->v1) + 1]++] = i; edges[nedges[BM_elem_index_get(e->v2) + 1]++] = i; @@ -1643,7 +1643,7 @@ void EDBM_deselect_by_material(BMEditMesh *em, const short index, const short se BMIter iter; BMFace *efa; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; if (efa->mat_nr == index) { @@ -1668,21 +1668,21 @@ void EDBM_select_swap(BMEditMesh *em) /* exported for UV */ BMFace *efa; if (em->bm->selectmode & SCE_SELECT_VERTEX) { - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) continue; BM_elem_select_set(em->bm, eve, !BM_elem_flag_test(eve, BM_ELEM_SELECT)); } } else if (em->selectmode & SCE_SELECT_EDGE) { - BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) continue; BM_elem_select_set(em->bm, eed, !BM_elem_flag_test(eed, BM_ELEM_SELECT)); } } else { - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; BM_elem_select_set(em->bm, efa, !BM_elem_flag_test(efa, BM_ELEM_SELECT)); @@ -1702,13 +1702,13 @@ int EDBM_select_interior_faces(BMEditMesh *em) int ok; int change = FALSE; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; ok = TRUE; - BM_ITER (eed, &eiter, bm, BM_EDGES_OF_FACE, efa) { + BM_ITER_ELEM (eed, &eiter, efa, BM_EDGES_OF_FACE) { if (BM_edge_face_count(eed) < 3) { ok = FALSE; break; @@ -1785,7 +1785,7 @@ static int edbm_select_linked_pick_invoke(bContext *C, wmOperator *op, wmEvent * if (limit) { /* hflag no-seam --> bmo-tag */ - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { /* BMESH_TODO, don't use 'BM_ELEM_SELECT' here, its a HFLAG only! */ BMO_elem_flag_set(bm, e, BM_ELEM_SELECT, !BM_elem_flag_test(e, BM_ELEM_SEAM)); } @@ -1870,13 +1870,13 @@ static int edbm_select_linked_exec(bContext *C, wmOperator *op) if (em->selectmode == SCE_SELECT_FACE) { BMFace *efa; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { BM_elem_flag_set(efa, BM_ELEM_TAG, (BM_elem_flag_test(efa, BM_ELEM_SELECT) && !BM_elem_flag_test(efa, BM_ELEM_HIDDEN))); } if (limit) { - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { /* BMESH_TODO, don't use 'BM_ELEM_SELECT' here, its a HFLAG only! */ BMO_elem_flag_set(bm, e, BM_ELEM_SELECT, !BM_elem_flag_test(e, BM_ELEM_SEAM)); } @@ -1887,7 +1887,7 @@ static int edbm_select_linked_exec(bContext *C, wmOperator *op) BMW_FLAG_TEST_HIDDEN, BMW_NIL_LAY); - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_TAG)) { e = BMW_begin(&walker, efa); for (; efa; efa = BMW_step(&walker)) { @@ -1898,7 +1898,7 @@ static int edbm_select_linked_exec(bContext *C, wmOperator *op) BMW_end(&walker); } else { - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { BM_elem_flag_enable(v, BM_ELEM_TAG); } @@ -1912,7 +1912,7 @@ static int edbm_select_linked_exec(bContext *C, wmOperator *op) BMW_FLAG_TEST_HIDDEN, BMW_NIL_LAY); - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_TAG)) { e = BMW_begin(&walker, v); for (; e; e = BMW_step(&walker)) { @@ -2102,7 +2102,7 @@ static void deselect_nth_active(BMEditMesh *em, BMVert **r_eve, BMEdge **r_eed, } if (em->selectmode & SCE_SELECT_VERTEX) { - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { *r_eve = v; return; @@ -2110,7 +2110,7 @@ static void deselect_nth_active(BMEditMesh *em, BMVert **r_eve, BMEdge **r_eed, } } else if (em->selectmode & SCE_SELECT_EDGE) { - BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { *r_eed = e; return; @@ -2223,7 +2223,7 @@ static int edbm_select_sharp_edges_exec(bContext *C, wmOperator *op) sharp = DEG2RADF(sharp); - BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(e, BM_ELEM_HIDDEN) || !e->l) continue; @@ -2278,11 +2278,11 @@ static int edbm_select_linked_flat_faces_exec(bContext *C, wmOperator *op) sharp = (sharp * M_PI) / 180.0; - BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) { BM_elem_flag_disable(f, BM_ELEM_TAG); } - BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(f, BM_ELEM_HIDDEN) || !BM_elem_flag_test(f, BM_ELEM_SELECT) || BM_elem_flag_test(f, BM_ELEM_TAG)) continue; @@ -2300,8 +2300,8 @@ static int edbm_select_linked_flat_faces_exec(bContext *C, wmOperator *op) BM_elem_flag_enable(f, BM_ELEM_TAG); - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { - BM_ITER (l2, &liter2, em->bm, BM_LOOPS_OF_LOOP, l) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { + BM_ITER_ELEM (l2, &liter2, l, BM_LOOPS_OF_LOOP) { float angle; if (BM_elem_flag_test(l2->f, BM_ELEM_TAG) || BM_elem_flag_test(l2->f, BM_ELEM_HIDDEN)) @@ -2363,13 +2363,13 @@ static int edbm_select_non_manifold_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(v, BM_ELEM_HIDDEN) && !BM_vert_is_manifold(v)) { BM_elem_select_set(em->bm, v, TRUE); } } - BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { if (!BM_elem_flag_test(e, BM_ELEM_HIDDEN) && !BM_edge_is_manifold(e)) { BM_elem_select_set(em->bm, e, TRUE); } @@ -2411,7 +2411,7 @@ static int edbm_select_random_exec(bContext *C, wmOperator *op) EDBM_flag_disable_all(em, BM_ELEM_SELECT); if (em->selectmode & SCE_SELECT_VERTEX) { - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) && BLI_frand() < randfac) { BM_elem_select_set(em->bm, eve, TRUE); } @@ -2419,7 +2419,7 @@ static int edbm_select_random_exec(bContext *C, wmOperator *op) EDBM_selectmode_flush(em); } else if (em->selectmode & SCE_SELECT_EDGE) { - BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN) && BLI_frand() < randfac) { BM_elem_select_set(em->bm, eed, TRUE); } @@ -2427,7 +2427,7 @@ static int edbm_select_random_exec(bContext *C, wmOperator *op) EDBM_selectmode_flush(em); } else { - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && BLI_frand() < randfac) { BM_elem_select_set(em->bm, efa, TRUE); } @@ -2469,15 +2469,15 @@ static int edbm_select_next_loop_exec(bContext *C, wmOperator *UNUSED(op)) BMVert *v; BMIter iter; - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { BM_elem_flag_disable(v, BM_ELEM_TAG); } - BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) { BMLoop *l; BMIter liter; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { if (BM_elem_flag_test(l->v, BM_ELEM_SELECT)) { BM_elem_flag_enable(l->next->v, BM_ELEM_TAG); BM_elem_select_set(em->bm, l->v, FALSE); @@ -2485,7 +2485,7 @@ static int edbm_select_next_loop_exec(bContext *C, wmOperator *UNUSED(op)) } } - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_TAG)) { BM_elem_select_set(em->bm, v, TRUE); } @@ -2522,18 +2522,18 @@ static int edbm_region_to_loop_exec(bContext *C, wmOperator *UNUSED(op)) em_setup_viewcontext(C, &vc); - BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { BM_elem_flag_disable(e, BM_ELEM_TAG); } - BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) { BMLoop *l1, *l2; BMIter liter1, liter2; - BM_ITER (l1, &liter1, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l1, &liter1, f, BM_LOOPS_OF_FACE) { int tot = 0, totsel = 0; - BM_ITER (l2, &liter2, em->bm, BM_LOOPS_OF_EDGE, l1->e) { + BM_ITER_ELEM (l2, &liter2, l1->e, BM_LOOPS_OF_EDGE) { tot++; totsel += BM_elem_flag_test(l2->f, BM_ELEM_SELECT) != 0; } @@ -2545,7 +2545,7 @@ static int edbm_region_to_loop_exec(bContext *C, wmOperator *UNUSED(op)) EDBM_flag_disable_all(em, BM_ELEM_SELECT); - BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(e, BM_ELEM_TAG) && !BM_elem_flag_test(e, BM_ELEM_HIDDEN)) BM_edge_select_set(em->bm, e, TRUE); } @@ -2597,11 +2597,11 @@ static int loop_find_region(BMEditMesh *em, BMLoop *l, int flag, f = BLI_array_pop(stack); BLI_array_append(region, f); - BM_ITER (l1, &liter1, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l1, &liter1, f, BM_LOOPS_OF_FACE) { if (BM_elem_flag_test(l1->e, flag)) continue; - BM_ITER (l2, &liter2, em->bm, BM_LOOPS_OF_EDGE, l1->e) { + BM_ITER_ELEM (l2, &liter2, l1->e, BM_LOOPS_OF_EDGE) { if (BLI_smallhash_haskey(fhash, (uintptr_t)l2->f)) continue; @@ -2644,11 +2644,11 @@ static int loop_find_regions(BMEditMesh *em, int selbigger) BLI_smallhash_init(&visithash); - BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) { BM_elem_flag_disable(f, BM_ELEM_TAG); } - BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { BLI_array_append(edges, e); BM_elem_flag_enable(e, BM_ELEM_TAG); @@ -2672,7 +2672,7 @@ static int loop_find_regions(BMEditMesh *em, int selbigger) if (!BM_elem_flag_test(e, BM_ELEM_TAG)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_EDGE, e) { + BM_ITER_ELEM (l, &liter, e, BM_LOOPS_OF_EDGE) { if (BLI_smallhash_haskey(&visithash, (uintptr_t)l->f)) continue; @@ -2699,7 +2699,7 @@ static int loop_find_regions(BMEditMesh *em, int selbigger) for (j = 0; j < tot; j++) { BM_elem_flag_enable(region[j], BM_ELEM_TAG); - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, region[j]) { + BM_ITER_ELEM (l, &liter, region[j], BM_LOOPS_OF_FACE) { BM_elem_flag_disable(l->e, BM_ELEM_TAG); } } @@ -2735,7 +2735,7 @@ static int edbm_loop_to_region_exec(bContext *C, wmOperator *op) EDBM_flag_disable_all(em, BM_ELEM_SELECT); - BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(f, BM_ELEM_TAG) && !BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { BM_face_select_set(em->bm, f, TRUE); } diff --git a/source/blender/editors/mesh/editmesh_slide.c b/source/blender/editors/mesh/editmesh_slide.c index f678999311d..dd68cd30cf5 100644 --- a/source/blender/editors/mesh/editmesh_slide.c +++ b/source/blender/editors/mesh/editmesh_slide.c @@ -504,7 +504,7 @@ static int vtx_slide_set_frame(VertexSlideOp *vso) } /* Iterate over edges of vertex and copy them */ - BM_ITER_INDEX (edge, &iter, bm, BM_EDGES_OF_VERT, sel_vtx, idx) { + BM_ITER_ELEM_INDEX (edge, &iter, sel_vtx, BM_EDGES_OF_VERT, idx) { curr_vert = BM_edge_other_vert(edge, sel_vtx); if (curr_vert) { BLI_array_growone(vtx_frame); diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index ba280878b2a..ce1ecf2a12e 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -159,7 +159,7 @@ void EMBM_project_snap_verts(bContext *C, ARegion *ar, Object *obedit, BMEditMes BMIter iter; BMVert *eve; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { float mval[2], vec[3], no_dummy[3]; int dist_dummy; @@ -194,7 +194,7 @@ static short edbm_extrude_face_indiv(BMEditMesh *em, wmOperator *op, const char BM_elem_select_set(em->bm, f, TRUE); /* set face vertex normals to face normal */ - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { copy_v3_v3(l->v->no, f->no); } } @@ -734,7 +734,7 @@ static int edbm_dupli_extrude_cursor_invoke(bContext *C, wmOperator *op, wmEvent INIT_MINMAX(min, max); - BM_ITER (v1, &iter, vc.em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v1, &iter, vc.em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v1, BM_ELEM_SELECT)) { DO_MINMAX(v1->co, min, max); done = 1; @@ -756,7 +756,7 @@ static int edbm_dupli_extrude_cursor_invoke(bContext *C, wmOperator *op, wmEvent /* check for edges that are half selected, use for rotation */ done = 0; - BM_ITER (eed, &iter, vc.em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, vc.em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { float co1[3], co2[3]; mul_v3_m4v3(co1, vc.obedit->obmat, eed->v1->co); @@ -1074,7 +1074,7 @@ static int edbm_mark_seam(bContext *C, wmOperator *op) } if (clear) { - BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { if (!BM_elem_flag_test(eed, BM_ELEM_SELECT) || BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) continue; @@ -1082,7 +1082,7 @@ static int edbm_mark_seam(bContext *C, wmOperator *op) } } else { - BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { if (!BM_elem_flag_test(eed, BM_ELEM_SELECT) || BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) continue; BM_elem_flag_enable(eed, BM_ELEM_SEAM); @@ -1128,7 +1128,7 @@ static int edbm_mark_sharp(bContext *C, wmOperator *op) } if (!clear) { - BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { if (!BM_elem_flag_test(eed, BM_ELEM_SELECT) || BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) continue; @@ -1136,7 +1136,7 @@ static int edbm_mark_sharp(bContext *C, wmOperator *op) } } else { - BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { if (!BM_elem_flag_test(eed, BM_ELEM_SELECT) || BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) continue; @@ -1340,7 +1340,7 @@ static int edbm_edge_rotate_selected_exec(bContext *C, wmOperator *op) } /* first see if we have two adjacent faces */ - BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { BM_elem_flag_disable(eed, BM_ELEM_TAG); if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { BMFace *fa, *fb; @@ -1580,7 +1580,7 @@ static void mesh_set_smooth_faces(BMEditMesh *em, short smooth) if (em == NULL) return; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { BM_elem_flag_set(efa, BM_ELEM_SMOOTH, smooth); } @@ -1862,7 +1862,7 @@ static int merge_target(BMEditMesh *em, Scene *scene, View3D *v3d, Object *ob, else { float fac; int i = 0; - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(v, BM_ELEM_SELECT)) continue; add_v3_v3(cent, v->co); @@ -2148,7 +2148,7 @@ static void shape_propagate(BMEditMesh *em, wmOperator *op) return; } - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(eve, BM_ELEM_SELECT) || BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) continue; @@ -2217,7 +2217,7 @@ static int edbm_blend_from_shape_exec(bContext *C, wmOperator *op) if (totshape == 0 || shape < 0 || shape >= totshape) return OPERATOR_CANCELLED; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(eve, BM_ELEM_SELECT) || BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) continue; @@ -2322,7 +2322,7 @@ static int edbm_select_axis_exec(bContext *C, wmOperator *op) else if (mode == 1) value += limit; - BM_ITER (ev, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (ev, &iter, em->bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(ev, BM_ELEM_HIDDEN)) { switch (mode) { case -1: /* aligned */ @@ -2796,7 +2796,7 @@ static int mesh_separate_selected(Main *bmain, Scene *scene, Base *editbase, wmO EDBM_op_callf(em, wmop, "del geom=%hvef context=%i", BM_ELEM_SELECT, DEL_FACES); /* clean up any loose edges */ - BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(e, BM_ELEM_HIDDEN)) continue; @@ -2807,7 +2807,7 @@ static int mesh_separate_selected(Main *bmain, Scene *scene, Base *editbase, wmO EDBM_op_callf(em, wmop, "del geom=%hvef context=%i", BM_ELEM_SELECT, DEL_EDGES); /* clean up any loose verts */ - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_HIDDEN)) continue; @@ -2843,7 +2843,7 @@ static int mesh_separate_material(Main *bmain, Scene *scene, Base *editbase, wmO const short mat_nr = f_cmp->mat_nr; int tot = 0; - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (f->mat_nr == mat_nr) { BM_face_select_set(bm, f, TRUE); tot++; @@ -2887,7 +2887,7 @@ static int mesh_separate_loose(Main *bmain, Scene *scene, Base *editbase, wmOper for (i = 0; i < max_iter; i++) { /* Get a seed vertex to start the walk */ v_seed = NULL; - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { v_seed = v; break; } @@ -3661,7 +3661,7 @@ static void xsortvert_flag(bContext *C, int flag) sortblock = MEM_callocN(sizeof(xvertsort) * totvert, "xsort sorted"); /* Stores unchanged verts, will be reused as final old2new vert mapping... */ unchangedblock = MEM_callocN(sizeof(int) * totvert, "xsort unchanged"); - BM_ITER_INDEX (ve, &iter, em->bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (ve, &iter, em->bm, BM_VERTS_OF_MESH, i) { if (BM_elem_flag_test(ve, flag)) { sortblock[i].org_idx = i; sorted++; @@ -4022,7 +4022,7 @@ static int edbm_noise_exec(bContext *C, wmOperator *op) if (tex->type == TEX_STUCCI) { float b2, vec[3]; float ofs = tex->turbul / 200.0; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { b2 = BLI_hnoise(tex->noisesize, eve->co[0], eve->co[1], eve->co[2]); if (tex->stype) ofs *= (b2 * b2); @@ -4035,7 +4035,7 @@ static int edbm_noise_exec(bContext *C, wmOperator *op) } } else { - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { float tin, dum; externtex(ma->mtex[0], eve->co, &tin, &dum, &dum, &dum, &dum, 0); @@ -4086,7 +4086,7 @@ static int edbm_bevel_exec(bContext *C, wmOperator *op) BM_data_layer_add(em->bm, &em->bm->edata, CD_PROP_FLT); li = CustomData_number_of_layers(&em->bm->edata, CD_PROP_FLT) - 1; - BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { float d = len_v3v3(eed->v1->co, eed->v2->co); float *dv = CustomData_bmesh_get_n(&em->bm->edata, eed->head.data, CD_PROP_FLT, li); diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c index 13e059bb5d8..b006f77200e 100644 --- a/source/blender/editors/mesh/editmesh_utils.c +++ b/source/blender/editors/mesh/editmesh_utils.c @@ -614,7 +614,7 @@ UvVertMap *EDBM_uv_vert_map_create(BMEditMesh *em, int selected, int do_face_idx totuv = 0; /* generate UvMapVert array */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!selected || ((!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) && BM_elem_flag_test(efa, BM_ELEM_SELECT))) totuv += efa->len; } @@ -642,10 +642,10 @@ UvVertMap *EDBM_uv_vert_map_create(BMEditMesh *em, int selected, int do_face_idx } a = 0; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!selected || ((!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) && BM_elem_flag_test(efa, BM_ELEM_SELECT))) { i = 0; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { buf->tfindex = i; buf->f = a; buf->separate = 0; @@ -663,7 +663,7 @@ UvVertMap *EDBM_uv_vert_map_create(BMEditMesh *em, int selected, int do_face_idx /* sort individual uvs for each vert */ a = 0; - BM_ITER (ev, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (ev, &iter, em->bm, BM_VERTS_OF_MESH) { UvMapVert *newvlist = NULL, *vlist = vmap->vert[a]; UvMapVert *iterv, *v, *lastv, *next; float *uv, *uv2, uvdiff[2]; @@ -762,7 +762,7 @@ UvElementMap *EDBM_uv_element_map_create(BMEditMesh *em, int selected, int do_is } /* generate UvElement array */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!selected || ((!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) && BM_elem_flag_test(efa, BM_ELEM_SELECT))) totuv += efa->len; } @@ -787,10 +787,10 @@ UvElementMap *EDBM_uv_element_map_create(BMEditMesh *em, int selected, int do_is } j = 0; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { island_number[j++] = INVALID_ISLAND; if (!selected || ((!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) && BM_elem_flag_test(efa, BM_ELEM_SELECT))) { - BM_ITER_INDEX (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa, i) { + BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) { buf->l = l; buf->face = efa; buf->separate = 0; @@ -807,7 +807,7 @@ UvElementMap *EDBM_uv_element_map_create(BMEditMesh *em, int selected, int do_is /* sort individual uvs for each vert */ i = 0; - BM_ITER (ev, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (ev, &iter, em->bm, BM_VERTS_OF_MESH) { UvElement *newvlist = NULL, *vlist = element_map->vert[i]; UvElement *iterv, *v, *lastv, *next; float *uv, *uv2, uvdiff[2]; @@ -871,7 +871,7 @@ UvElementMap *EDBM_uv_element_map_create(BMEditMesh *em, int selected, int do_is while (stacksize > 0) { efa = stack[--stacksize]; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { UvElement *element, *initelement = element_map->vert[BM_elem_index_get(l->v)]; for (element = initelement; element; element = element->next) { @@ -1019,7 +1019,7 @@ static BMVert *cache_mirr_intptr_as_bmvert(intptr_t *index_lookup, int index) * EDBM_verts_mirror_cache_begin(em); * ... * ... - * BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + * BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { * mirrorv = EDBM_verts_mirror_get(em, v); * } * ... @@ -1071,7 +1071,7 @@ void EDBM_verts_mirror_cache_begin(BMEditMesh *em, const short use_select) tree = BMBVH_NewBVH(em, 0, NULL, NULL); } - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { /* temporary for testing, check for selection */ if (use_select && !BM_elem_flag_test(v, BM_ELEM_SELECT)) { @@ -1159,7 +1159,7 @@ void EDBM_verts_mirror_apply(BMEditMesh *em, const int sel_from, const int sel_t BLI_assert(em->vert_index != NULL); - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_SELECT) == sel_from) { BMVert *mirr = EDBM_verts_mirror_get(em, v); if (mirr) { diff --git a/source/blender/editors/mesh/mesh_data.c b/source/blender/editors/mesh/mesh_data.c index d3c0a1245fc..d1fb437e114 100644 --- a/source/blender/editors/mesh/mesh_data.c +++ b/source/blender/editors/mesh/mesh_data.c @@ -199,7 +199,7 @@ static void editmesh_face_copy_customdata(BMEditMesh *em, int type, int index) const int n = CustomData_get_active_layer(pdata, type); /* ensure all current elements follow new customdata layout */ - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { void *data = CustomData_bmesh_get_n(pdata, efa->head.data, type, n); CustomData_bmesh_set_n(pdata, efa->head.data, type, index, data); } @@ -217,8 +217,8 @@ static void editmesh_loop_copy_customdata(BMEditMesh *em, int type, int index) const int n = CustomData_get_active_layer(ldata, type); /* ensure all current elements follow new customdata layout */ - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { - BM_ITER (loop, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (loop, &liter, efa, BM_LOOPS_OF_FACE) { void *data = CustomData_bmesh_get_n(ldata, loop->head.data, type, n); CustomData_bmesh_set_n(ldata, loop->head.data, type, index, data); } @@ -245,12 +245,12 @@ int ED_mesh_uv_loop_reset_ex(struct bContext *C, struct Mesh *me, const int laye BLI_assert(CustomData_has_layer(&em->bm->ldata, CD_MLOOPUV)); - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; i = 0; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get_n(&em->bm->ldata, l->head.data, CD_MLOOPUV, layernum); BLI_array_append(uvs, luv->uv); i++; diff --git a/source/blender/editors/mesh/mesh_navmesh.c b/source/blender/editors/mesh/mesh_navmesh.c index 3d57c5144de..71aaacb7e49 100644 --- a/source/blender/editors/mesh/mesh_navmesh.c +++ b/source/blender/editors/mesh/mesh_navmesh.c @@ -500,7 +500,7 @@ static int navmesh_face_copy_exec(bContext *C, wmOperator *op) if (targetPolyIdx > 0) { /* set target poly idx to other selected faces */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT) && efa != efa_act) { int *recastDataBlock = (int *)CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_RECAST); *recastDataBlock = targetPolyIdx; @@ -549,7 +549,7 @@ static int findFreeNavPolyIndex(BMEditMesh *em) int i, idx = em->bm->totface - 1, freeIdx = 1; /*XXX this originally went last to first, but that isn't possible anymore*/ - BM_ITER (ef, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (ef, &iter, em->bm, BM_FACES_OF_MESH) { int polyIdx = *(int *)CustomData_bmesh_get(&em->bm->pdata, ef->head.data, CD_RECAST); indices[idx] = polyIdx; idx--; @@ -585,7 +585,7 @@ static int navmesh_face_add_exec(bContext *C, wmOperator *UNUSED(op)) /* set target poly idx to selected faces */ /*XXX this originally went last to first, but that isn't possible anymore*/ - BM_ITER (ef, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (ef, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(ef, BM_ELEM_SELECT)) { int *recastDataBlock = (int *)CustomData_bmesh_get(&em->bm->pdata, ef->head.data, CD_RECAST); *recastDataBlock = targetPolyIdx; diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index c10173ec19c..7c02f26dbdc 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -803,7 +803,7 @@ intptr_t mesh_octree_table(Object *ob, BMEditMesh *em, float *co, char mode) BMIter iter; BMVert *eve; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { DO_MINMAX(eve->co, min, max); } } @@ -840,7 +840,7 @@ intptr_t mesh_octree_table(Object *ob, BMEditMesh *em, float *co, char mode) BMVert *eve; BMIter iter; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { mesh_octree_add_nodes(MeshOctree.table, eve->co, MeshOctree.offs, MeshOctree.div, (intptr_t)(eve)); } } @@ -953,7 +953,7 @@ static BMVert *editbmesh_get_x_mirror_vert_topo(Object *ob, struct BMEditMesh *e BMVert *v; index = 0; - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (v == eve) break; index++; @@ -1015,14 +1015,14 @@ static float *editmesh_get_mirror_uv(BMEditMesh *em, int axis, float *uv, float BMIter iter; BMFace *efa; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { poly_uv_center(em, efa, cent); if ( (fabs(cent[0] - cent_vec[0]) < 0.001) && (fabs(cent[1] - cent_vec[1]) < 0.001) ) { BMIter liter; BMLoop *l; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if ( (fabs(luv->uv[0] - vec[0]) < 0.001) && (fabs(luv->uv[1] - vec[1]) < 0.001) ) { return luv->uv; diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c index e2b77d62386..ce4984384ba 100644 --- a/source/blender/editors/object/object_hook.c +++ b/source/blender/editors/object/object_hook.c @@ -78,7 +78,7 @@ static int return_editmesh_indexar(BMEditMesh *em, int *tot, int **indexar, floa BMIter iter; int *index, nr, totvert=0; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) totvert++; } if (totvert==0) return 0; @@ -88,7 +88,7 @@ static int return_editmesh_indexar(BMEditMesh *em, int *tot, int **indexar, floa nr= 0; zero_v3(cent); - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { *index= nr; index++; add_v3_v3(cent, eve->co); @@ -114,7 +114,7 @@ static int return_editmesh_vgroup(Object *obedit, BMEditMesh *em, char *name, fl BMIter iter; /* find the vertices */ - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { dvert= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (dvert) { @@ -146,7 +146,7 @@ static void select_editbmesh_hook(Object *ob, HookModifierData *hmd) if (hmd->indexar == NULL) return; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (nr==hmd->indexar[index]) { BM_elem_select_set(em->bm, eve, TRUE); if (index < hmd->totindex-1) index++; diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index b7207896e60..7ee57dd78d3 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -137,7 +137,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op) * so re-create it here */ makeDerivedMesh(scene, obedit, em, CD_MASK_BAREMESH, 0); - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { if (v1==0) v1= nr; else if (v2==0) v2= nr; diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c index 84861e9bf5d..55954790687 100644 --- a/source/blender/editors/object/object_transform.c +++ b/source/blender/editors/object/object_transform.c @@ -687,7 +687,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) mul_m4_v3(obedit->imat, cent); } else { - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (around==V3D_CENTROID) { total++; add_v3_v3(cent, eve->co); @@ -700,7 +700,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) } } - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { sub_v3_v3(eve->co, cent); } diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index 9b00dd9ac2b..81810c793b8 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -206,14 +206,14 @@ static int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_to i = 0; if (use_vert_sel) { - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { (*dvert_arr)[i] = BM_elem_flag_test(eve, BM_ELEM_SELECT) ? CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT) : NULL; i++; } } else { - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { (*dvert_arr)[i] = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); i++; } @@ -593,7 +593,7 @@ static void vgroup_select_verts(Object *ob, int select) BMIter iter; BMVert *eve; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) { dv= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (defvert_find_index(dv, def_nr)) { @@ -1296,7 +1296,7 @@ static void vgroup_blend(Object *ob, const float fac) vg_users = MEM_callocN(sizeof(int) * dvert_tot, "vgroup_blend_i"); if (bm) { - BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { sel1 = BM_elem_flag_test(eed->v1, BM_ELEM_SELECT); sel2 = BM_elem_flag_test(eed->v2, BM_ELEM_SELECT); @@ -1322,7 +1322,7 @@ static void vgroup_blend(Object *ob, const float fac) } } - BM_ITER_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { + BM_ITER_MESH_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, i) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT) && vg_users[i] > 0) { dv = CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_MDEFORMVERT); @@ -1571,7 +1571,7 @@ void ED_vgroup_mirror(Object *ob, const short mirror_weights, const short flip_v EDBM_verts_mirror_cache_begin(em, FALSE); /* Go through the list of editverts and assign them */ - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if ((eve_mirr= EDBM_verts_mirror_get(em, eve))) { sel= BM_elem_flag_test(eve, BM_ELEM_SELECT); sel_mirr= BM_elem_flag_test(eve_mirr, BM_ELEM_SELECT); @@ -1796,7 +1796,7 @@ static void vgroup_active_remove_verts(Object *ob, const int allverts, bDeformGr BMVert *eve; BMIter iter; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { dv= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (dv && dv->dw && (allverts || BM_elem_flag_test(eve, BM_ELEM_SELECT))) { @@ -1866,7 +1866,7 @@ static void vgroup_delete_edit_mode(Object *ob, bDeformGroup *dg) BMVert *eve; MDeformVert *dvert; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { dvert= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (dvert) @@ -1998,7 +1998,7 @@ static void vgroup_assign_verts(Object *ob, const float weight) BM_data_layer_add(em->bm, &em->bm->vdata, CD_MDEFORMVERT); /* Go through the list of editverts and assign them */ - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { MDeformWeight *dw; dv= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); /* can be NULL */ @@ -2855,7 +2855,7 @@ static int vgroup_do_remap(Object *ob, char *name_array, wmOperator *op) BMIter iter; BMVert *eve; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { dvert= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (dvert && dvert->totweight) { defvert_remap(dvert, sort_map, defbase_tot); diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c index 87c225e064e..6722ac5e686 100644 --- a/source/blender/editors/render/render_shading.c +++ b/source/blender/editors/render/render_shading.c @@ -170,7 +170,7 @@ static int material_slot_assign_exec(bContext *C, wmOperator *UNUSED(op)) BMIter iter; if (em) { - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) efa->mat_nr = ob->actcol - 1; } diff --git a/source/blender/editors/sculpt_paint/sculpt_uv.c b/source/blender/editors/sculpt_paint/sculpt_uv.c index 5fe043ab8d5..4b866c3c9c3 100644 --- a/source/blender/editors/sculpt_paint/sculpt_uv.c +++ b/source/blender/editors/sculpt_paint/sculpt_uv.c @@ -594,8 +594,8 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent /* Now, on to generate our uv connectivity data */ counter = 0; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { int offset1, itmp1 = uv_element_offset_from_face_get(data->elementMap, efa, l, island_index, do_island_optimization); int offset2, itmp2 = uv_element_offset_from_face_get(data->elementMap, efa, l->next, island_index, do_island_optimization); diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index d520c98c6d0..7f2e42f18e9 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -2957,7 +2957,7 @@ static void draw_em_indices(BMEditMesh *em) i = 0; if (em->selectmode & SCE_SELECT_VERTEX) { UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEANG, col); - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { sprintf(numstr, "%d", i); view3d_cached_text_draw_add(v->co, numstr, 0, txt_flag, col); @@ -2969,7 +2969,7 @@ static void draw_em_indices(BMEditMesh *em) if (em->selectmode & SCE_SELECT_EDGE) { i = 0; UI_GetThemeColor3ubv(TH_DRAWEXTRA_EDGELEN, col); - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { sprintf(numstr, "%d", i); mid_v3_v3v3(pos, e->v1->co, e->v2->co); @@ -2982,7 +2982,7 @@ static void draw_em_indices(BMEditMesh *em) if (em->selectmode & SCE_SELECT_FACE) { i = 0; UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEAREA, col); - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(f, BM_ELEM_SELECT)) { BM_face_center_mean_calc(bm, f, pos); sprintf(numstr, "%d", i); diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index a3bf0d40c43..88d78442587 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -157,7 +157,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float BMEdge *eed; BMIter iter; - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { evedef = eve; tot++; @@ -165,7 +165,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float } } - BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { float *f; @@ -404,7 +404,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float if (len_v3(median) > 0.000001f) { - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { add_v3_v3(eve->co, median); } @@ -418,7 +418,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float const float sca = compute_scale_factor(ve_median[3], median[3]); if (ELEM(sca, 0.0f, 1.0f)) { - BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { float *crease = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_CREASE); if (crease) { @@ -428,7 +428,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float } } else if (sca > 0.0f) { - BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT) && !BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) { float *crease = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_CREASE); if (crease) { @@ -439,7 +439,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float } } else { - BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT) && !BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) { float *crease = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_CREASE); if (crease) { @@ -456,7 +456,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float const float sca = compute_scale_factor(ve_median[6], median[6]); if (ELEM(sca, 0.0f, 1.0f)) { - BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { float *bweight = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_BWEIGHT); if (bweight) { @@ -466,7 +466,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float } } else if (sca > 0.0f) { - BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT) && !BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) { float *bweight = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_BWEIGHT); if (bweight) { @@ -477,7 +477,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float } } else { - BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT) && !BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) { float *bweight = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_BWEIGHT); if (bweight) { @@ -678,7 +678,7 @@ static void vgroup_copy_active_to_sel(Object *ob) MDeformVert *dvert; int index = 0; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT) && eve != eve_act) { dvert = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (dvert) { diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 4943d5c5281..6dff792352b 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -242,7 +242,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) // transform now requires awareness for select mode, so we tag the f1 flags in verts tottrans = 0; if (em->selectmode & SCE_SELECT_VERTEX) { - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) && BM_elem_flag_test(eve, BM_ELEM_SELECT)) { BM_elem_index_set(eve, 1); /* set_dirty! */ tottrans++; @@ -253,40 +253,40 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) else if (em->selectmode & SCE_SELECT_EDGE) { BMEdge *eed; - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { BM_elem_index_set(eve, 0); /* set_dirty! */ } - BM_ITER (eed, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN) && BM_elem_flag_test(eed, BM_ELEM_SELECT)) { BM_elem_index_set(eed->v1, 1); /* set_dirty! */ BM_elem_index_set(eed->v2, 1); /* set_dirty! */ } } - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { if (BM_elem_index_get(eve)) tottrans++; } } else { BMFace *efa; - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { BM_elem_index_set(eve, 0); /* set_dirty! */ } - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && BM_elem_flag_test(efa, BM_ELEM_SELECT)) { BMIter liter; BMLoop *l; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { BM_elem_index_set(l->v, 1); /* set_dirty! */ } } } - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { if (BM_elem_index_get(eve)) tottrans++; } } @@ -298,7 +298,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) tv = transvmain = MEM_callocN(tottrans * sizeof(TransVert), "maketransverts"); a = 0; - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { if (BM_elem_index_get(eve)) { BM_elem_index_set(eve, a); /* set_dirty! */ copy_v3_v3(tv->oldloc, eve->co); diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 7c198cce746..6c254dc4d19 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -4318,7 +4318,7 @@ static BMEdge *get_other_edge(BMesh *bm, BMVert *v, BMEdge *e) BMIter iter; BMEdge *e2; - BM_ITER (e2, &iter, bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e2, &iter, v, BM_EDGES_OF_VERT) { if (BM_elem_flag_test(e2, BM_ELEM_SELECT) && e2 != e) return e2; } @@ -4419,10 +4419,10 @@ static int createSlideVerts(TransInfo *t) BLI_smallhash_init(&table); /*ensure valid selection*/ - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { numsel = 0; - BM_ITER (e, &iter2, em->bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e, &iter2, v, BM_EDGES_OF_VERT) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { /* BMESH_TODO: this is probably very evil, * set v->e to a selected edge*/ @@ -4440,7 +4440,7 @@ static int createSlideVerts(TransInfo *t) } } - BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { if (!BM_edge_is_manifold(e)) { MEM_freeN(sld); @@ -4451,7 +4451,7 @@ static int createSlideVerts(TransInfo *t) } j = 0; - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { BM_elem_flag_enable(v, BM_ELEM_TAG); BLI_smallhash_insert(&table, (uintptr_t)v, SET_INT_IN_POINTER(j)); @@ -4473,7 +4473,7 @@ static int createSlideVerts(TransInfo *t) j = 0; while (1) { v = NULL; - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_TAG)) break; @@ -4591,7 +4591,7 @@ static int createSlideVerts(TransInfo *t) /* size = 50.0; */ /* UNUSED */ zero_v3(lastvec); zero_v3(dir); /* ee = le = NULL; */ /* UNUSED */ - BM_ITER (e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { BMIter iter2; BMEdge *e2; @@ -4602,7 +4602,7 @@ static int createSlideVerts(TransInfo *t) dis2 = -1.0f; for (i=0; i<2; i++) { v = i?e->v1:e->v2; - BM_ITER (e2, &iter2, em->bm, BM_EDGES_OF_VERT, v) { + BM_ITER_ELEM (e2, &iter2, v, BM_EDGES_OF_VERT) { if (BM_elem_flag_test(e2, BM_ELEM_SELECT)) continue; @@ -4648,14 +4648,14 @@ static int createSlideVerts(TransInfo *t) BMFace *f; BMLoop *l; - BM_ITER (f, &fiter, em->bm, BM_FACES_OF_VERT, tempsv->v) { + BM_ITER_ELEM (f, &fiter, tempsv->v, BM_FACES_OF_VERT) { if (!BLI_smallhash_haskey(&sld->origfaces, (uintptr_t)f)) { BMFace *copyf = BM_face_copy(em->bm, f, TRUE, TRUE); BM_elem_select_set(em->bm, copyf, FALSE); BM_elem_flag_enable(copyf, BM_ELEM_HIDDEN); - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, copyf) { + BM_ITER_ELEM (l, &liter, copyf, BM_LOOPS_OF_FACE) { BM_elem_select_set(em->bm, l->v, FALSE); BM_elem_flag_enable(l->v, BM_ELEM_HIDDEN); BM_elem_select_set(em->bm, l->e, FALSE); @@ -4720,7 +4720,7 @@ void projectSVData(TransInfo *t, int final) BMIter fiter; BMFace *f; - BM_ITER (f, &fiter, em->bm, BM_FACES_OF_VERT, tempsv->v) { + BM_ITER_ELEM (f, &fiter, tempsv->v, BM_FACES_OF_VERT) { BMIter liter2; BMFace *copyf, *copyf2; BMLoop *l2; @@ -4740,7 +4740,7 @@ void projectSVData(TransInfo *t, int final) copyf2 = BLI_smallhash_lookup(&sld->origfaces, (uintptr_t)f); /* project onto copied projection face */ - BM_ITER (l2, &liter2, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l2, &liter2, f, BM_LOOPS_OF_FACE) { copyf = copyf2; if (BM_elem_flag_test(l2->e, BM_ELEM_SELECT) || BM_elem_flag_test(l2->prev->e, BM_ELEM_SELECT)) { diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index ff5ce9af596..2b60ff353d7 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -309,7 +309,7 @@ static void createTransEdge(TransInfo *t) int count=0, countsel=0; int propmode = t->flag & T_PROP_EDIT; - BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) countsel++; if (propmode) count++; @@ -331,7 +331,7 @@ static void createTransEdge(TransInfo *t) copy_m3_m4(mtx, t->obedit->obmat); invert_m3_m3(smtx, mtx); - BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN) && (BM_elem_flag_test(eed, BM_ELEM_SELECT) || propmode)) { float *bweight = CustomData_bmesh_get(&em->bm->edata, eed->head.data, CD_BWEIGHT); float *crease = CustomData_bmesh_get(&em->bm->edata, eed->head.data, CD_CREASE); @@ -1888,7 +1888,7 @@ static void editmesh_set_connectivity_distance(BMEditMesh *em, float mtx[][3], f BLI_smallhash_init(visit); - BM_ITER (v, &viter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &viter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)==0 || BM_elem_flag_test(v, BM_ELEM_HIDDEN)) continue; @@ -1909,7 +1909,7 @@ static void editmesh_set_connectivity_distance(BMEditMesh *em, float mtx[][3], f v2 = queue[start]; d = dqueue[start]; - BM_ITER (e, &eiter, em->bm, BM_EDGES_OF_VERT, v2) { + BM_ITER_ELEM (e, &eiter, v2, BM_EDGES_OF_VERT) { float d2; v3 = BM_edge_other_vert(e, v2); @@ -1959,7 +1959,7 @@ static void editmesh_set_connectivity_distance(BMEditMesh *em, float mtx[][3], f BMFace *efa; BMIter iter; - BM_ITER (efa, &iter, bm, BM_FACES_OF_VERT, eve) { + BM_ITER_ELEM (efa, &iter, eve, BM_FACES_OF_VERT) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { BM_face_center_mean_calc(bm, efa, cent_r); break; @@ -1972,7 +1972,7 @@ static void get_edge_center(float cent_r[3], BMesh *bm, BMVert *eve) BMEdge *eed; BMIter iter; - BM_ITER (eed, &iter, bm, BM_EDGES_OF_VERT, eve) { + BM_ITER_ELEM (eed, &iter, eve, BM_EDGES_OF_VERT) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { mid_v3_v3v3(cent_r, eed->v1->co, eed->v2->co); break; @@ -2051,7 +2051,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) // transform now requires awareness for select mode, so we tag the f1 flags in verts if (selectmode & SCE_SELECT_VERTEX) { - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { BM_elem_flag_set(eve, BM_ELEM_TAG, BM_elem_flag_test(eve, BM_ELEM_SELECT)); } } @@ -2452,7 +2452,7 @@ static void createTransUVs(bContext *C, TransInfo *t) if (!ED_space_image_show_uvedit(sima, t->obedit)) return; /* count */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf= CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) { @@ -2461,7 +2461,7 @@ static void createTransUVs(bContext *C, TransInfo *t) } BM_elem_flag_enable(efa, BM_ELEM_TAG); - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (uvedit_uv_selected(em, scene, l)) countsel++; @@ -2485,11 +2485,11 @@ static void createTransUVs(bContext *C, TransInfo *t) td= t->data; td2d= t->data2d; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (!propmode && !uvedit_uv_selected(em, scene, l)) continue; diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index 4d7c1338f30..180c631d39a 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -315,7 +315,7 @@ int calc_manipulator_stats(const bContext *C) * mode. note we can't use just vertex selection flag because * it is not flush down on changes */ if (ts->selectmode & SCE_SELECT_VERTEX) { - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { totsel++; @@ -327,10 +327,10 @@ int calc_manipulator_stats(const bContext *C) else if (ts->selectmode & SCE_SELECT_EDGE) { BMIter itersub; BMEdge *eed; - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) { /* check the vertex has a selected edge, only add it once */ - BM_ITER (eed, &itersub, bm, BM_EDGES_OF_VERT, eve) { + BM_ITER_ELEM (eed, &itersub, eve, BM_EDGES_OF_VERT) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { totsel++; calc_tw_center(scene, eve->co); @@ -343,10 +343,10 @@ int calc_manipulator_stats(const bContext *C) else { BMIter itersub; BMFace *efa; - BM_ITER (eve, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) { /* check the vertex has a selected face, only add it once */ - BM_ITER (efa, &itersub, bm, BM_FACES_OF_VERT, eve) { + BM_ITER_ELEM (efa, &itersub, eve, BM_FACES_OF_VERT) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { totsel++; calc_tw_center(scene, eve->co); diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index 968b3fd6993..2cc9d8fca93 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -599,7 +599,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], BMFace *efa; BMIter iter; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { add_v3_v3(normal, efa->no); sub_v3_v3v3(vec, @@ -616,7 +616,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], BMIter iter; float cotangent[3]; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { if (v1 == NULL) { v1 = eve; @@ -640,7 +640,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], BMEdge *eed = NULL; BMIter iter; - BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { sub_v3_v3v3(plane, eed->v2->co, eed->v1->co); break; @@ -654,7 +654,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], BMEdge *eed = NULL; BMIter iter; - BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { /* use average vert normals as plane and edge vector as normal */ copy_v3_v3(plane, eed->v1->no); @@ -669,7 +669,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], BMVert *v1 = NULL, *v2 = NULL; BMIter iter; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { if (v1 == NULL) { v1 = eve; @@ -689,7 +689,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], else if (em->bm->totvertsel == 1) { BMIter iter; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { copy_v3_v3(normal, eve->no); break; @@ -702,7 +702,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], zero_v3(normal); - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { add_v3_v3(normal, eve->no); } diff --git a/source/blender/editors/util/crazyspace.c b/source/blender/editors/util/crazyspace.c index ee80fe92983..4b03c846f3e 100644 --- a/source/blender/editors/util/crazyspace.c +++ b/source/blender/editors/util/crazyspace.c @@ -149,11 +149,11 @@ void crazyspace_set_quats_editmesh(BMEditMesh *em, float *origcos, float *mapped BM_mesh_elem_index_ensure(em->bm, BM_VERT); - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(v, BM_ELEM_SELECT) || BM_elem_flag_test(v, BM_ELEM_HIDDEN)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_VERT, v) { + BM_ITER_ELEM (l, &liter, v, BM_LOOPS_OF_VERT) { BMLoop *l2 = BM_face_other_edge_loop(l->f, l->e, v); /* retrieve mapped coordinates */ @@ -176,7 +176,7 @@ void crazyspace_set_quats_editmesh(BMEditMesh *em, float *origcos, float *mapped } index = 0; - BM_ITER (v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (vert_table[index] != 0) BM_elem_index_set(v, vert_table[index] - 1); /* set_dirty! */ else diff --git a/source/blender/editors/uvedit/uvedit_buttons.c b/source/blender/editors/uvedit/uvedit_buttons.c index 586d714e5f7..394b8952a13 100644 --- a/source/blender/editors/uvedit/uvedit_buttons.c +++ b/source/blender/editors/uvedit/uvedit_buttons.c @@ -72,12 +72,12 @@ static int uvedit_center(Scene *scene, BMEditMesh *em, Image *ima, float center[ int tot = 0.0; zero_v2(center); - BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, f->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, f, tf)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (uvedit_uv_selected(em, scene, l)) { add_v2_v2(center, luv->uv); @@ -101,8 +101,8 @@ static void uvedit_translate(Scene *scene, BMEditMesh *em, Image *UNUSED(ima), f BMIter iter, liter; MLoopUV *luv; - BM_ITER (f, &iter, em->bm, BM_FACES_OF_MESH, NULL) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (uvedit_uv_selected(em, scene, l)) { add_v2_v2(luv->uv, delta); diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c index befdce301f2..4bcfcdc76f1 100644 --- a/source/blender/editors/uvedit/uvedit_draw.c +++ b/source/blender/editors/uvedit/uvedit_draw.c @@ -136,9 +136,9 @@ static void draw_uvs_shadow(Object *obedit) /* draws the grey mesh when painting */ glColor3ub(112, 112, 112); - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { glBegin(GL_LINE_LOOP); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); @@ -181,7 +181,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe { float totarea = 0.0f, totuvarea = 0.0f, areadiff, uvarea, area; - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY); BLI_array_empty(tf_uv); @@ -190,7 +190,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe BLI_array_growitems(tf_uvorig, efa->len); i = 0; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); copy_v2_v2(tf_uvorig[i], luv->uv); @@ -218,10 +218,10 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe col[0] = 1.0; col[1] = col[2] = 0.0; glColor3fv(col); - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_TAG)) { glBegin(GL_POLYGON); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -230,7 +230,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe } } else { - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_TAG)) { area = BM_face_area_calc(bm, efa) / totarea; @@ -240,7 +240,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe BLI_array_growitems(tf_uvorig, efa->len); i = 0; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); copy_v2_v2(tf_uvorig[i], luv->uv); @@ -264,7 +264,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe glColor3fv(col); glBegin(GL_POLYGON); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -291,7 +291,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe glShadeModel(GL_SMOOTH); - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY); if (uvedit_face_visible(scene, ima, efa, tf)) { @@ -310,7 +310,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe BLI_array_growitems(av, nverts); BLI_array_growitems(auv, nverts); - BM_ITER_INDEX (l, &liter, bm, BM_LOOPS_OF_FACE, efa, i) { + BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); copy_v2_v2(tf_uvorig[i], luv->uv); } @@ -318,7 +318,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe poly_copy_aspect(tf_uvorig, tf_uv, aspx, aspy, nverts); j = nverts - 1; - BM_ITER_INDEX (l, &liter, bm, BM_LOOPS_OF_FACE, efa, i) { + BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) { sub_v2_v2v2(auv[i], tf_uv[j], tf_uv[i]); normalize_v2(auv[i]); sub_v3_v3v3(av[i], l->prev->v->co, l->v->co); normalize_v3(av[i]); j = i; @@ -336,7 +336,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe } glBegin(GL_POLYGON); - BM_ITER_INDEX (l, &liter, bm, BM_LOOPS_OF_FACE, efa, i) { + BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); a = fabsf(uvang[i] - ang[i]) / (float)M_PI; weight_to_rgb(col, 1.0f - powf((1.0f - a), 2.0f)); @@ -503,7 +503,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY); if (uvedit_face_visible(scene, ima, efa, tf)) { @@ -516,7 +516,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glColor4ubv((GLubyte *)col1); glBegin(GL_POLYGON); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -533,7 +533,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) else { /* would be nice to do this within a draw loop but most below are optional, so it would involve too many checks */ - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY); if (uvedit_face_visible(scene, ima, efa, tf)) { @@ -561,7 +561,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glPolygonStipple(stipple_quarttone); glBegin(GL_POLYGON); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, activef) { + BM_ITER_ELEM (l, &liter, activef, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -582,7 +582,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) switch (sima->dt_uv) { case SI_UVDT_DASH: - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; tf = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY); @@ -591,7 +591,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) cpack(0x111111); glBegin(GL_LINE_LOOP); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -601,7 +601,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) cpack(0x909090); glBegin(GL_LINE_LOOP); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -625,12 +625,12 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) if (sima->dt_uv == SI_UVDT_WHITE) glColor3f(1.0f, 1.0f, 1.0f); else glColor3f(0.0f, 0.0f, 0.0f); - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; glBegin(GL_LINE_LOOP); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -641,12 +641,12 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glLineWidth(3); cpack(0x0); - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; glBegin(GL_LINE_LOOP); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -664,12 +664,12 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) if (interpedges) { glShadeModel(GL_SMOOTH); - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; glBegin(GL_LINE_LOOP); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { sel = (uvedit_uv_selected(em, scene, l) ? 1 : 0); glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); @@ -682,12 +682,12 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glShadeModel(GL_FLAT); } else { - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; glBegin(GL_LINES); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { sel = (uvedit_edge_selected(em, scene, l) ? 1 : 0); if (sel != lastsel) { glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); @@ -704,12 +704,12 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) } else { /* no nice edges */ - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; glBegin(GL_LINE_LOOP); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); glVertex2fv(luv->uv); } @@ -737,7 +737,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) UI_ThemeColor(TH_WIRE); bglBegin(GL_POINTS); - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; @@ -752,7 +752,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) UI_ThemeColor(TH_FACE_DOT); bglBegin(GL_POINTS); - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; @@ -773,11 +773,11 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glPointSize(pointsize); bglBegin(GL_POINTS); - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); if (!uvedit_uv_selected(em, scene, l)) bglVertex2fv(luv->uv); @@ -791,11 +791,11 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) cpack(0xFF); bglBegin(GL_POINTS); - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); if (luv->flag & MLOOPUV_PINNED) @@ -809,11 +809,11 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glPointSize(pointsize); bglBegin(GL_POINTS); - BM_ITER (efa, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) continue; - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); if (uvedit_uv_selected(em, scene, l)) diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 4e3a7540261..006b2fcf564 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -204,7 +204,7 @@ void ED_uvedit_assign_image(Main *bmain, Scene *scene, Object *obedit, Image *im } /* now assign to all visible faces */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (uvedit_face_visible(scene, previma, efa, tf)) { @@ -251,7 +251,7 @@ static int uvedit_set_tile(Object *obedit, Image *ima, int curtile) em = BMEdit_FromObject(obedit); - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && BM_elem_flag_test(efa, BM_ELEM_SELECT)) @@ -314,7 +314,7 @@ int uvedit_face_selected(Scene *scene, BMEditMesh *em, BMFace *efa) MLoopUV *luv; BMIter liter; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (!(luv->flag & MLOOPUV_VERTSEL)) return 0; @@ -335,7 +335,7 @@ int uvedit_face_select(Scene *scene, BMEditMesh *em, BMFace *efa) MLoopUV *luv; BMIter liter; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; } @@ -358,7 +358,7 @@ int uvedit_face_deselect(Scene *scene, BMEditMesh *em, BMFace *efa) MLoopUV *luv; BMIter liter; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag &= ~MLOOPUV_VERTSEL; } @@ -518,7 +518,7 @@ void poly_uv_center(BMEditMesh *em, BMFace *f, float cent[2]) zero_v2(cent); - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); add_v2_v2(cent, luv->uv); } @@ -597,12 +597,12 @@ int ED_uvedit_minmax(Scene *scene, Image *ima, Object *obedit, float *min, float INIT_MINMAX2(min, max); sel = 0; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (uvedit_uv_selected(em, scene, l)) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); DO_MINMAX2(luv->uv, min, max); @@ -625,12 +625,12 @@ static int ED_uvedit_median(Scene *scene, Image *ima, Object *obedit, float co[2 unsigned int sel = 0; zero_v2(co); - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (uvedit_uv_selected(em, scene, l)) { add_v2_v2(co, luv->uv); @@ -681,13 +681,13 @@ void uv_find_nearest_edge(Scene *scene, Image *ima, BMEditMesh *em, float co[2], BM_mesh_elem_index_ensure(em->bm, BM_VERT); - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; i = 0; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); nextluv = CustomData_bmesh_get(&em->bm->ldata, l->next->head.data, CD_MLOOPUV); @@ -730,13 +730,13 @@ static void find_nearest_uv_face(Scene *scene, Image *ima, BMEditMesh *em, float hit->l = hit->nextl = NULL; hit->luv = hit->nextluv = NULL; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; cent[0] = cent[1] = 0.0f; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); add_v2_v2(cent, luv->uv); @@ -770,7 +770,7 @@ static int nearest_uv_between(BMEditMesh *em, BMFace *efa, int UNUSED(nverts), i m[1] = co[1] - uv[1]; i = 0; - BM_ITER (l, &iter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &iter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (i == id1) @@ -821,13 +821,13 @@ void uv_find_nearest_vert(Scene *scene, Image *ima, BMEditMesh *em, BM_mesh_elem_index_ensure(em->bm, BM_VERT); - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; i = 0; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (penalty && uvedit_uv_selected(em, scene, l)) @@ -874,12 +874,12 @@ int ED_uvedit_nearest_uv(Scene *scene, Object *obedit, Image *ima, float co[2], uv[0] = co[0]; uv[1] = co[1]; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); dist = fabs(co[0] - luv->uv[0]) + fabs(co[1] - luv->uv[1]); @@ -1014,7 +1014,7 @@ static int select_edgeloop(Scene *scene, Image *ima, BMEditMesh *em, NearestHit BM_mesh_elem_index_ensure(em->bm, BM_VERT); count = 0; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!extend) { uvedit_face_deselect(scene, em, efa); } @@ -1047,7 +1047,7 @@ static int select_edgeloop(Scene *scene, Image *ima, BMEditMesh *em, NearestHit /* find correct valence edges which are not tagged yet, but connect to tagged one */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!BMO_elem_flag_test(em->bm, efa, EFA_F1_FLAG) && uvedit_face_visible(scene, ima, efa, tf)) { @@ -1092,9 +1092,9 @@ static int select_edgeloop(Scene *scene, Image *ima, BMEditMesh *em, NearestHit else select = 1; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { a = 0; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { iterv1 = uv_vertex_map_get(vmap, efa, a); if (iterv1->flag) { @@ -1138,11 +1138,11 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ flag = MEM_callocN(sizeof(*flag) * em->bm->totface, "UvLinkFlag"); if (!hit) { - BM_ITER_INDEX (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL, a) { + BM_ITER_MESH_INDEX (efa, &iter, em->bm, BM_FACES_OF_MESH, a) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (uvedit_face_visible(scene, ima, efa, tf)) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (luv->flag & MLOOPUV_VERTSEL) { @@ -1158,7 +1158,7 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ } else { a = 0; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (efa == hit->efa) { stack[stacksize] = a; stacksize++; @@ -1177,7 +1177,7 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ a = stack[stacksize]; j = 0; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (j == a) break; @@ -1185,7 +1185,7 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ } i = 0; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { /* make_uv_vert_map_EM sets verts tmp.l to the indices */ vlist = EDBM_uv_vert_map_at_index(vmap, BM_elem_index_get(l->v)); @@ -1215,8 +1215,8 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ if (!extend) { a = 0; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (flag[a]) @@ -1229,13 +1229,13 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ } else { a = 0; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!flag[a]) { a++; continue; } - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (luv->flag & MLOOPUV_VERTSEL) @@ -1250,13 +1250,13 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ if (efa) { a = 0; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!flag[a]) { a++; continue; } - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag &= ~MLOOPUV_VERTSEL; @@ -1267,13 +1267,13 @@ static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[ } else { a = 0; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!flag[a]) { a++; continue; } - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; @@ -1297,7 +1297,7 @@ static float *uv_sel_co_from_eve(Scene *scene, Image *ima, BMEditMesh *em, BMVer BMIter liter; BMLoop *l; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_VERT, eve) { + BM_ITER_ELEM (l, &liter, eve, BM_LOOPS_OF_VERT) { MTexPoly *tf = CustomData_bmesh_get(&em->bm->pdata, l->f->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, l->f, tf)) @@ -1338,13 +1338,13 @@ static void weld_align_uv(bContext *C, int tool) BMFace *efa; BMLoop *l; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (uvedit_uv_selected(em, scene, l)) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); DO_MINMAX2(luv->uv, min, max); @@ -1361,12 +1361,12 @@ static void weld_align_uv(bContext *C, int tool) BMFace *efa; BMLoop *l; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (uvedit_uv_selected(em, scene, l)) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->uv[0] = cent[0]; @@ -1380,12 +1380,12 @@ static void weld_align_uv(bContext *C, int tool) BMFace *efa; BMLoop *l; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (uvedit_uv_selected(em, scene, l)) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->uv[1] = cent[1]; @@ -1403,13 +1403,13 @@ static void weld_align_uv(bContext *C, int tool) BMIter iter, liter, eiter; /* clear tag */ - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { BM_elem_flag_disable(eve, BM_ELEM_TAG); } /* tag verts with a selected UV */ - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_VERT, eve) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { + BM_ITER_ELEM (l, &liter, eve, BM_LOOPS_OF_VERT) { tf = CustomData_bmesh_get(&em->bm->pdata, l->f->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, l->f, tf)) @@ -1423,16 +1423,16 @@ static void weld_align_uv(bContext *C, int tool) } /* flush vertex tags to edges */ - BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { BM_elem_flag_set(eed, BM_ELEM_TAG, (BM_elem_flag_test(eed->v1, BM_ELEM_TAG) && BM_elem_flag_test(eed->v2, BM_ELEM_TAG))); } /* find a vertex with only one tagged edge */ eve_start = NULL; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { int tot_eed_tag = 0; - BM_ITER (eed, &eiter, em->bm, BM_EDGES_OF_VERT, eve) { + BM_ITER_ELEM (eed, &eiter, eve, BM_EDGES_OF_VERT) { if (BM_elem_flag_test(eed, BM_ELEM_TAG)) { tot_eed_tag++; } @@ -1461,7 +1461,7 @@ static void weld_align_uv(bContext *C, int tool) eve_next = NULL; /* find next eve */ - BM_ITER (eed, &eiter, em->bm, BM_EDGES_OF_VERT, eve) { + BM_ITER_ELEM (eed, &eiter, eve, BM_EDGES_OF_VERT) { if (BM_elem_flag_test(eed, BM_ELEM_TAG)) { BMVert *eve_other = BM_edge_other_vert(eed, eve); if (BM_elem_flag_test(eve_other, BM_ELEM_TAG)) { @@ -1499,7 +1499,7 @@ static void weld_align_uv(bContext *C, int tool) /* go over all verts except for endpoints */ for (i = 0; i < BLI_array_count(eve_line); i++) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_VERT, eve_line[i]) { + BM_ITER_ELEM (l, &liter, eve_line[i], BM_LOOPS_OF_VERT) { tf = CustomData_bmesh_get(&em->bm->pdata, l->f->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, l->f, tf)) @@ -1637,13 +1637,13 @@ static void select_all_perform(bContext *C, int action) else { if (action == SEL_TOGGLE) { action = SEL_SELECT; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (luv->flag & MLOOPUV_VERTSEL) { @@ -1655,13 +1655,13 @@ static void select_all_perform(bContext *C, int action) } - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); switch (action) { @@ -1856,7 +1856,7 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop) BLI_array_growitems(hitv, hit.efa->len); BLI_array_growitems(hituv, hit.efa->len); i = 0; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, hit.efa) { + BM_ITER_ELEM (l, &liter, hit.efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); hituv[i] = luv->uv; hitv[i] = BM_elem_index_get(l->v); @@ -1935,12 +1935,12 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop) /* deselect */ if (select == 0) { - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (sticky_select(limit, hitv, BM_elem_index_get(l->v), hituv, luv->uv, sticky, hitlen)) uvedit_uv_deselect(em, scene, l); @@ -1950,12 +1950,12 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop) } /* select */ else { - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (sticky_select(limit, hitv, BM_elem_index_get(l->v), hituv, luv->uv, sticky, hitlen)) uvedit_uv_select(em, scene, l); @@ -1968,7 +1968,7 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop) } else { /* deselect all */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { uvedit_face_deselect(scene, em, efa); } @@ -1989,12 +1989,12 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop) /* select sticky uvs */ if (sticky != SI_STICKY_DISABLE) { - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (sticky == SI_STICKY_DISABLE) continue; luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); @@ -2241,14 +2241,14 @@ static int unlink_selection_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { int desel = 0; tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (!(luv->flag & MLOOPUV_VERTSEL)) { @@ -2258,7 +2258,7 @@ static int unlink_selection_exec(bContext *C, wmOperator *op) } if (desel) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag &= ~MLOOPUV_VERTSEL; } @@ -2313,23 +2313,23 @@ static void uv_faces_do_sticky(bContext *C, SpaceImage *sima, Scene *scene, Obje * in the loop and select all MLoopUV's that use a touched vert. */ BMVert *eve; - BM_ITER (eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { BM_elem_flag_disable(eve, BM_ELEM_TAG); } - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_TAG)) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { BM_elem_flag_enable(l->v, BM_ELEM_TAG); } } } /* now select tagged verts */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { /* tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); */ /* UNUSED */ - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (BM_elem_flag_test(l->v, BM_ELEM_TAG)) { if (select) uvedit_uv_select(em, scene, l); @@ -2364,7 +2364,7 @@ static void uv_faces_do_sticky(bContext *C, SpaceImage *sima, Scene *scene, Obje if (BM_elem_flag_test(efa, BM_ELEM_TAG)) { /* tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); */ /* UNUSED */ - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (select) uvedit_uv_select(em, scene, l); else @@ -2407,7 +2407,7 @@ static void uv_faces_do_sticky(bContext *C, SpaceImage *sima, Scene *scene, Obje } else { /* SI_STICKY_DISABLE or ts->uv_flag & UV_SYNC_SELECTION */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_TAG)) { if (select) uvedit_face_select(scene, em, efa); @@ -2465,7 +2465,7 @@ static int border_select_exec(bContext *C, wmOperator *op) change = 0; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { /* assume not touched */ BM_elem_flag_disable(efa, BM_ELEM_TAG); @@ -2487,11 +2487,11 @@ static int border_select_exec(bContext *C, wmOperator *op) /* other selection modes */ change = 1; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tf)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (!pinned || (ts->uv_flag & UV_SYNC_SELECTION) ) { @@ -2608,8 +2608,8 @@ static int circle_select_exec(bContext *C, wmOperator *op) UI_view2d_region_to_view(&ar->v2d, x, y, &offset[0], &offset[1]); /* do selection */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); select_uv_inside_ellipse(em, sima, scene, select, offset, ellipse, l, luv); } @@ -2728,12 +2728,12 @@ static int snap_uvs_to_cursor(Scene *scene, Image *ima, Object *obedit, SpaceIma MLoopUV *luv; short change = 0; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tface = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tface)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (uvedit_uv_selected(em, scene, l)) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); copy_v2_v2(luv->uv, sima->cursor); @@ -2758,11 +2758,11 @@ static int snap_uvs_to_adjacent_unselected(Scene *scene, Image *ima, Object *obe /* index every vert that has a selected UV using it, but only once so as to * get unique indices and to count how much to malloc */ - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { tface = CustomData_bmesh_get(&bm->pdata, f->head.data, CD_MTEXPOLY); if (uvedit_face_visible(scene, ima, f, tface)) { BM_elem_flag_enable(f, BM_ELEM_TAG); - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { BM_elem_flag_set(l, BM_ELEM_TAG, uvedit_uv_selected(em, scene, l)); } } @@ -2771,14 +2771,14 @@ static int snap_uvs_to_adjacent_unselected(Scene *scene, Image *ima, Object *obe } } - BM_ITER (f, &iter, bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(f, BM_ELEM_TAG)) { /* face: visible */ - BM_ITER (l, &liter, bm, BM_LOOPS_OF_FACE, f) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { if (BM_elem_flag_test(l, BM_ELEM_TAG)) { /* loop: selected*/ float uv[2] = {0.0f, 0.0f}; int uv_tot = 0; - BM_ITER (lsub, &lsubiter, bm, BM_LOOPS_OF_VERT, l->v) { + BM_ITER_ELEM (lsub, &lsubiter, l->v, BM_LOOPS_OF_VERT) { if (BM_elem_flag_test(lsub->f, BM_ELEM_TAG) && /* face: visible */ !BM_elem_flag_test(lsub, BM_ELEM_TAG)) /* loop: unselected */ { @@ -2819,12 +2819,12 @@ static int snap_uvs_to_pixels(SpaceImage *sima, Scene *scene, Object *obedit) w = (float)width; h = (float)height; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tface = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tface)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (uvedit_uv_selected(em, scene, l)) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); snap_uv_to_pixel(luv->uv, w, h); @@ -2904,12 +2904,12 @@ static int pin_exec(bContext *C, wmOperator *op) MLoopUV *luv; int clear = RNA_boolean_get(op->ptr, "clear"); - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tface = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tface)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (!clear) { @@ -2958,12 +2958,12 @@ static int select_pinned_exec(bContext *C, wmOperator *UNUSED(op)) MTexPoly *tface; MLoopUV *luv; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tface = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible(scene, ima, efa, tface)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (luv->flag & MLOOPUV_PINNED) @@ -3035,7 +3035,7 @@ static int hide_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { int hide = 0; tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); @@ -3044,7 +3044,7 @@ static int hide_exec(bContext *C, wmOperator *op) continue; } - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (UV_SEL_TEST(luv, !swap)) { @@ -3066,7 +3066,7 @@ static int hide_exec(bContext *C, wmOperator *op) } else { if (bm_face_is_all_uv_sel(em->bm, efa, TRUE) == !swap) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (UV_SEL_TEST(luv, !swap)) { BM_elem_select_set(em->bm, l->v, FALSE); @@ -3086,7 +3086,7 @@ static int hide_exec(bContext *C, wmOperator *op) } } else { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (UV_SEL_TEST(luv, !swap)) { BM_elem_select_set(em->bm, l->v, FALSE); @@ -3153,10 +3153,10 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) } if (facemode) { if (em->selectmode == SCE_SELECT_FACE) { - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { BM_elem_flag_disable(efa, BM_ELEM_TAG); if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; } @@ -3168,16 +3168,16 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) else { /* enable adjacent faces to have disconnected UV selections if sticky is disabled */ if (!stickymode) { - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { BM_elem_flag_disable(efa, BM_ELEM_TAG); if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) { int totsel = 0; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { totsel += BM_elem_flag_test(l->v, BM_ELEM_SELECT); } if (!totsel) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; } @@ -3188,10 +3188,10 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) } } else { - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { BM_elem_flag_disable(efa, BM_ELEM_TAG); if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (BM_elem_flag_test(l->v, BM_ELEM_SELECT) == 0) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; @@ -3205,10 +3205,10 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) } } else if (em->selectmode == SCE_SELECT_FACE) { - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { BM_elem_flag_disable(efa, BM_ELEM_TAG); if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; } @@ -3218,10 +3218,10 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) } } else { - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { BM_elem_flag_disable(efa, BM_ELEM_TAG); if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && !BM_elem_flag_test(efa, BM_ELEM_SELECT)) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (BM_elem_flag_test(l->v, BM_ELEM_SELECT) == 0) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; @@ -3395,7 +3395,7 @@ static int seams_from_islands_exec(bContext *C, wmOperator *op) EDBM_index_arrays_init(em, 0, 0, 1); vmap = EDBM_uv_vert_map_create(em, 0, 0, limit); - BM_ITER (editedge, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (editedge, &iter, bm, BM_EDGES_OF_MESH) { /* flags to determine if we uv is separated from first editface match */ char separated1 = 0, separated2; /* set to denote edge must be flagged as seam */ @@ -3511,8 +3511,8 @@ static int mark_seam_exec(bContext *C, wmOperator *UNUSED(op)) BMIter iter, liter; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { - BM_ITER (loop, &liter, bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (loop, &liter, efa, BM_LOOPS_OF_FACE) { if (uvedit_edge_selected(em, scene, loop)) { BM_elem_flag_enable(loop->e, BM_ELEM_SEAM); } diff --git a/source/blender/editors/uvedit/uvedit_smart_stitch.c b/source/blender/editors/uvedit/uvedit_smart_stitch.c index cd89dd4b294..53572f114d2 100644 --- a/source/blender/editors/uvedit/uvedit_smart_stitch.c +++ b/source/blender/editors/uvedit/uvedit_smart_stitch.c @@ -686,7 +686,7 @@ static int stitch_process_data(StitchState *state, Scene *scene, int final) } /* copy data from MTFaces to the preview display buffers */ - BM_ITER (efa, &iter, state->em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, state->em->bm, BM_FACES_OF_MESH) { /* just to test if face was added for processing. uvs of inselected vertices will return NULL */ UvElement *element = ED_uv_element_get(state->element_map, efa, BM_FACE_FIRST_LOOP(efa)); @@ -696,7 +696,7 @@ static int stitch_process_data(StitchState *state, Scene *scene, int final) int face_preview_pos = preview_position[index].data_position; if (face_preview_pos != STITCH_NO_PREVIEW) { preview->uvs_per_polygon[preview_position[index].polycount_position] = efa->len; - BM_ITER_INDEX (l, &liter, state->em->bm, BM_LOOPS_OF_FACE, efa, i) { + BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) { luv = CustomData_bmesh_get(&state->em->bm->ldata, l->head.data, CD_MLOOPUV); copy_v2_v2(preview->preview_polys + face_preview_pos + i * 2, luv->uv); } @@ -706,7 +706,7 @@ static int stitch_process_data(StitchState *state, Scene *scene, int final) BMLoop *fl = BM_FACE_FIRST_LOOP(efa); MLoopUV *fuv = CustomData_bmesh_get(&state->em->bm->ldata, fl->head.data, CD_MLOOPUV); - BM_ITER_INDEX (l, &liter, state->em->bm, BM_LOOPS_OF_FACE, efa, i) { + BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) { if (i < numoftris) { /* using next since the first uv is already accounted for */ BMLoop *lnext = l->next; @@ -1061,11 +1061,11 @@ static int stitch_init(bContext *C, wmOperator *op) counter = 0; /* Now, on to generate our uv connectivity data */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!(ts->uv_flag & UV_SYNC_SELECTION) && ((BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) || !BM_elem_flag_test(efa, BM_ELEM_SELECT))) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { UvElement *element = ED_uv_element_get(state->element_map, efa, l); int offset1, itmp1 = element - state->element_map->buf; int offset2, itmp2 = ED_uv_element_get(state->element_map, efa, l->next) - state->element_map->buf; @@ -1177,9 +1177,9 @@ static int stitch_init(bContext *C, wmOperator *op) } else { - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { i = 0; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (uvedit_uv_selected(em, scene, l)) { UvElement *element = ED_uv_element_get(state->element_map, efa, l); stitch_select_uv(element, state, 1); @@ -1197,7 +1197,7 @@ static int stitch_init(bContext *C, wmOperator *op) state->tris_per_island[i] = 0; } - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { UvElement *element = ED_uv_element_get(state->element_map, efa, BM_FACE_FIRST_LOOP(efa)); if (element) { diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index 8c3906a2c2d..ad78a5b6643 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -138,7 +138,7 @@ static int ED_uvedit_ensure_uvs(bContext *C, Scene *scene, Object *obedit) ED_uvedit_assign_image(bmain, scene, obedit, ima, NULL); /* select new UV's */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { uvedit_face_select(scene, em, efa); } @@ -156,7 +156,7 @@ static int uvedit_have_selection(Scene *scene, BMEditMesh *em, short implicit) /* verify if we have any selected uv's before unwrapping, * so we can cancel the operator early */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (scene->toolsettings->uv_flag & UV_SYNC_SELECTION) { if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; @@ -164,7 +164,7 @@ static int uvedit_have_selection(Scene *scene, BMEditMesh *em, short implicit) else if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN) || !BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (!luv) return 1; @@ -215,7 +215,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, BLI_srand(0); - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { ScanFillVert *v, *lastv, *firstv; ScanFillFace *sefa; ParamKey key, vkeys[4]; @@ -230,7 +230,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, lsel = 0; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (uvedit_uv_selected(em, scene, l)) { lsel = 1; break; @@ -247,7 +247,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, /* for quads let parametrize split, it can make better decisions about which split is best for unwrapping than scanfill */ i = 0; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); vkeys[i] = (ParamKey)BM_elem_index_get(l->v); co[i] = l->v->co; @@ -265,7 +265,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, BLI_begin_edgefill(&sf_ctx); firstv = lastv = NULL; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { int i; v = BLI_addfillvert(&sf_ctx, l->v->co); @@ -311,7 +311,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, } if (!implicit) { - BM_ITER (eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, BM_ELEM_SEAM)) { ParamKey vkeys[2]; vkeys[0] = (ParamKey)BM_elem_index_get(eed->v1); @@ -340,7 +340,7 @@ static void texface_from_original_index(BMFace *efa, int index, float **uv, Para if (index == ORIGINDEX_NONE) return; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (BM_elem_index_get(l->v) == index) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); *uv = luv->uv; @@ -868,9 +868,9 @@ static void uv_map_transform_center(Scene *scene, View3D *v3d, float *result, min[0] = min[1] = min[2] = 1e20f; max[0] = max[1] = max[2] = -1e20f; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { DO_MINMAX(l->v->co, min, max); } } @@ -1020,11 +1020,11 @@ static void correct_uv_aspect(BMEditMesh *em) if (aspx > aspy) { scale = aspy / aspx; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT) || BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->uv[0] = ((luv->uv[0] - 0.5) * scale) + 0.5; } @@ -1033,11 +1033,11 @@ static void correct_uv_aspect(BMEditMesh *em) else { scale = aspx / aspy; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT) || BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->uv[1] = ((luv->uv[1] - 0.5) * scale) + 0.5; } @@ -1075,11 +1075,11 @@ static void uv_map_clip_correct(BMEditMesh *em, wmOperator *op) if (scale_to_bounds) { INIT_MINMAX2(min, max); - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); DO_MINMAX2(luv->uv, min, max); } @@ -1094,11 +1094,11 @@ static void uv_map_clip_correct(BMEditMesh *em, wmOperator *op) if (dy > 0.0f) dy = 1.0f / dy; - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->uv[0] = (luv->uv[0] - min[0]) * dx; @@ -1108,11 +1108,11 @@ static void uv_map_clip_correct(BMEditMesh *em, wmOperator *op) } else if (clip_to_bounds) { /* clipping and wrapping */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); CLAMP(luv->uv[0], 0.0f, 1.0f); CLAMP(luv->uv[1], 0.0f, 1.0f); @@ -1257,11 +1257,11 @@ static int uv_from_view_exec(bContext *C, wmOperator *op) if (RNA_boolean_get(op->ptr, "orthographic")) { uv_map_rotation_matrix(rotmat, rv3d, obedit, 90.0f, 0.0f, 1.0f); - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); project_from_view_ortho(luv->uv, l->v->co, rotmat); } @@ -1271,11 +1271,11 @@ static int uv_from_view_exec(bContext *C, wmOperator *op) struct UvCameraInfo *uci = project_camera_info(v3d->camera, obedit->obmat, scene->r.xsch, scene->r.ysch); if (uci) { - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); project_from_camera(luv->uv, l->v->co, uci); } @@ -1287,11 +1287,11 @@ static int uv_from_view_exec(bContext *C, wmOperator *op) else { copy_m4_m4(rotmat, obedit->obmat); - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); project_from_view(luv->uv, l->v->co, rv3d->persmat, rotmat, ar->winx, ar->winy); } @@ -1394,7 +1394,7 @@ static void uv_map_mirror(BMEditMesh *em, BMFace *efa, MTexPoly *UNUSED(tf)) int i, mi; i = 0; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); uvs[i] = luv->uv; i++; @@ -1434,11 +1434,11 @@ static int sphere_project_exec(bContext *C, wmOperator *op) uv_map_transform(C, op, center, rotmat); - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); uv_sphere_project(luv->uv, l->v->co, center, rotmat); @@ -1507,12 +1507,12 @@ static int cylinder_project_exec(bContext *C, wmOperator *op) uv_map_transform(C, op, center, rotmat); - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) continue; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); uv_cylinder_project(luv->uv, l->v->co, center, rotmat); @@ -1571,7 +1571,7 @@ static int cube_project_exec(bContext *C, wmOperator *op) /* choose x,y,z axis for projection depending on the largest normal * component, but clusters all together around the center of map. */ - BM_ITER (efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { int first = 1; /* tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); */ /* UNUSED */ @@ -1581,7 +1581,7 @@ static int cube_project_exec(bContext *C, wmOperator *op) axis_dominant_v3(&cox, &coy, efa->no); dx = dy = 0; - BM_ITER (l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->uv[0] = 0.5f + 0.5f * cube_size * (loc[cox] + l->v->co[cox]); diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c index 8a3c730385b..8c90c62884e 100644 --- a/source/blender/modifiers/intern/MOD_array.c +++ b/source/blender/modifiers/intern/MOD_array.c @@ -240,7 +240,7 @@ static void bm_merge_dm_transform(BMesh* bm, DerivedMesh *dm, float mat[4][4], BMO_slot_buffer_append(&find_op, "verts", dupe_op, dupe_slot_name); /* transform and tag verts */ - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(v, BM_ELEM_TAG)) { mul_m4_v3(mat, v->co); BM_elem_flag_enable(v, BM_ELEM_TAG); @@ -259,7 +259,7 @@ static void bm_merge_dm_transform(BMesh* bm, DerivedMesh *dm, float mat[4][4], } else { /* transform and tag verts */ - BM_ITER (v, &iter, bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(v, BM_ELEM_TAG)) { mul_m4_v3(mat, v->co); BM_elem_flag_enable(v, BM_ELEM_TAG); diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c index ef728477408..613dfee8997 100644 --- a/source/blender/modifiers/intern/MOD_bevel.c +++ b/source/blender/modifiers/intern/MOD_bevel.c @@ -125,7 +125,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Object *UNUSED(ob), BMO_push(bm, NULL); if (bmd->lim_flags & BME_BEVEL_ANGLE) { - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { /* check for 1 edge having 2 face users */ BMLoop *l1, *l2; if ( (l1= e->l) && @@ -139,7 +139,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Object *UNUSED(ob), } else { /* crummy, is there a way just to operator on all? - campbell */ - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { BMO_elem_flag_enable(bm, e, EDGE_MARK); } } diff --git a/source/blender/modifiers/intern/MOD_edgesplit.c b/source/blender/modifiers/intern/MOD_edgesplit.c index 38ed2fbe801..def02081be8 100644 --- a/source/blender/modifiers/intern/MOD_edgesplit.c +++ b/source/blender/modifiers/intern/MOD_edgesplit.c @@ -73,7 +73,7 @@ static DerivedMesh *doEdgeSplit(DerivedMesh *dm, EdgeSplitModifierData *emd, Obj BMO_push(bm, NULL); if (emd->flags & MOD_EDGESPLIT_FROMANGLE) { - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { /* check for 1 edge having 2 face users */ BMLoop *l1, *l2; if ( (l1= e->l) && @@ -87,7 +87,7 @@ static DerivedMesh *doEdgeSplit(DerivedMesh *dm, EdgeSplitModifierData *emd, Obj } if (emd->flags & MOD_EDGESPLIT_FROMFLAG) { - BM_ITER (e, &iter, bm, BM_EDGES_OF_MESH, NULL) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { /* check for 2 or more edge users */ if ((e->l) && (e->l->next != e->l)) diff --git a/source/blender/python/bmesh/bmesh_py_types.c b/source/blender/python/bmesh/bmesh_py_types.c index e3020fb0e18..39b4ce06b9c 100644 --- a/source/blender/python/bmesh/bmesh_py_types.c +++ b/source/blender/python/bmesh/bmesh_py_types.c @@ -998,13 +998,13 @@ static PyObject *bpy_bmesh_transform(BPy_BMElem *self, PyObject *args, PyObject mat_ptr = mat->matrix; if (!filter_flags) { - BM_ITER (eve, &iter, self->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, self->bm, BM_VERTS_OF_MESH) { mul_m4_v3((float (*)[4])mat_ptr, eve->co); } } else { char filter_flags_ch = (char)filter_flags; - BM_ITER (eve, &iter, self->bm, BM_VERTS_OF_MESH, NULL) { + BM_ITER_MESH (eve, &iter, self->bm, BM_VERTS_OF_MESH) { if (eve->head.hflag & filter_flags_ch) { mul_m4_v3((float (*)[4])mat_ptr, eve->co); } diff --git a/source/blender/python/bmesh/bmesh_py_types.h b/source/blender/python/bmesh/bmesh_py_types.h index 450a1366c31..a69091cb7ec 100644 --- a/source/blender/python/bmesh/bmesh_py_types.h +++ b/source/blender/python/bmesh/bmesh_py_types.h @@ -138,8 +138,8 @@ void BPy_BM_init_types(void); PyObject *BPyInit_bmesh_types(void); enum { - BPY_BMFLAG_NOP = 0, /* do nothing */ - BPY_BMFLAG_IS_WRAPPED = 1 /* the mesh is owned by editmode */ + BPY_BMFLAG_NOP = 0, /* do nothing */ + BPY_BMFLAG_IS_WRAPPED = 1 /* the mesh is owned by editmode */ }; PyObject *BPy_BMesh_CreatePyObject(BMesh *bm, int flag); @@ -175,8 +175,15 @@ char *BPy_BMElem_StringFromHType(const char htype); #define BPY_BM_IS_VALID(obj) (LIKELY((obj)->bm != NULL)) -#define BM_ITER_BPY_BM_SEQ(ele, iter, bpy_bmelemseq) \ - BM_ITER (ele, iter, (bpy_bmelemseq)->bm, (bpy_bmelemseq)->itype, \ - (bpy_bmelemseq)->py_ele ? ((BPy_BMElem *)(bpy_bmelemseq)->py_ele)->ele : NULL) +#define BM_ITER_BPY_BM_SEQ(ele, iter, bpy_bmelemseq) \ + for (ele = BM_iter_new(iter, \ + (bpy_bmelemseq)->bm, \ + (bpy_bmelemseq)->itype, \ + (bpy_bmelemseq)->py_ele ? \ + ((BPy_BMElem *)(bpy_bmelemseq)->py_ele)->ele : \ + NULL \ + ); \ + ele; \ + ele = BM_iter_step(iter)) #endif /* __BMESH_TYPES_H__ */ From ac6b702c9326df0ba55b8bc02a149b92e7119b09 Mon Sep 17 00:00:00 2001 From: Howard Trickey Date: Thu, 19 Apr 2012 13:59:03 +0000 Subject: [PATCH 126/156] Change knife header to reflect current key binding (RMB cancels now). --- source/blender/editors/mesh/editmesh_knife.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 29006a78a29..2a8de974b82 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -194,7 +194,7 @@ static void knife_update_header(bContext *C, knifetool_opdata *kcd) #define HEADER_LENGTH 170 char header[HEADER_LENGTH]; - BLI_snprintf(header, HEADER_LENGTH, "LMB: define cut lines, Return or RMB: confirm, E: new cut, Ctrl: midpoint snap (%s), " + BLI_snprintf(header, HEADER_LENGTH, "LMB: define cut lines, Return: confirm, Esc or RMB: cancel, E: new cut, Ctrl: midpoint snap (%s), " "Shift: ignore snap (%s), C: angle constrain (%s), Z: cut through (%s)", kcd->snap_midpoints? "On" : "Off", kcd->ignore_edge_snapping? "On" : "Off", From b40476455ea41788741d45b6dc4c7ea219b59a61 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 14:38:09 +0000 Subject: [PATCH 127/156] code cleanup: remove unused BMesh args. --- source/blender/bmesh/intern/bmesh_core.c | 98 +++++++++---------- source/blender/bmesh/intern/bmesh_interp.c | 8 +- source/blender/bmesh/intern/bmesh_marking.c | 30 +++--- source/blender/bmesh/intern/bmesh_marking.h | 10 +- source/blender/bmesh/intern/bmesh_mesh.c | 2 +- source/blender/bmesh/intern/bmesh_mesh_conv.c | 12 +-- source/blender/bmesh/intern/bmesh_mods.c | 27 ++--- source/blender/bmesh/intern/bmesh_mods.h | 16 +-- .../bmesh/intern/bmesh_operators_private.h | 10 +- source/blender/bmesh/intern/bmesh_polygon.c | 37 ++++--- source/blender/bmesh/intern/bmesh_polygon.h | 18 ++-- source/blender/bmesh/intern/bmesh_private.h | 8 +- source/blender/bmesh/intern/bmesh_queries.c | 6 +- source/blender/bmesh/intern/bmesh_queries.h | 4 +- source/blender/bmesh/operators/bmo_bevel.c | 4 +- source/blender/bmesh/operators/bmo_create.c | 2 +- source/blender/bmesh/operators/bmo_dissolve.c | 4 +- source/blender/bmesh/operators/bmo_extrude.c | 2 +- .../bmesh/operators/bmo_join_triangles.c | 4 +- .../blender/bmesh/operators/bmo_subdivide.c | 82 ++++++++-------- source/blender/bmesh/operators/bmo_utils.c | 39 ++------ source/blender/bmesh/tools/BME_bevel.c | 8 +- source/blender/editors/include/ED_mesh.h | 2 +- source/blender/editors/mesh/editmesh_knife.c | 14 ++- .../blender/editors/mesh/editmesh_loopcut.c | 6 +- source/blender/editors/mesh/editmesh_rip.c | 24 ++--- source/blender/editors/mesh/editmesh_select.c | 4 +- source/blender/editors/mesh/editmesh_slide.c | 2 - source/blender/editors/mesh/editmesh_utils.c | 4 +- .../blender/editors/space_view3d/drawobject.c | 4 +- .../editors/space_view3d/view3d_snap.c | 2 +- source/blender/editors/transform/transform.c | 32 +++--- .../editors/transform/transform_conversions.c | 10 +- .../editors/transform/transform_generics.c | 2 +- .../editors/transform/transform_manipulator.c | 2 +- source/blender/editors/uvedit/uvedit_draw.c | 4 +- source/blender/editors/uvedit/uvedit_ops.c | 2 +- source/blender/python/bmesh/bmesh_py_types.c | 14 +-- 38 files changed, 263 insertions(+), 296 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index 01fe1c83bc0..76095728d5a 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -80,7 +80,7 @@ BMVert *BM_vert_create(BMesh *bm, const float co[3], const BMVert *example) BM_elem_attrs_copy(bm, bm, example, v); } - BM_CHECK_ELEMENT(bm, v); + BM_CHECK_ELEMENT(v); return v; } @@ -122,7 +122,7 @@ BMEdge *BM_edge_create(BMesh *bm, BMVert *v1, BMVert *v2, const BMEdge *example, if (example) BM_elem_attrs_copy(bm, bm, example, e); - BM_CHECK_ELEMENT(bm, e); + BM_CHECK_ELEMENT(e); return e; } @@ -314,12 +314,12 @@ BMFace *BM_face_create(BMesh *bm, BMVert **verts, BMEdge **edges, const int len, f->len = len; - BM_CHECK_ELEMENT(bm, f); + BM_CHECK_ELEMENT(f); return f; } -int bmesh_elem_check(BMesh *UNUSED(bm), void *element, const char htype) +int bmesh_elem_check(void *element, const char htype) { BMHeader *head = element; int err = 0; @@ -555,7 +555,7 @@ void BM_face_kill(BMesh *bm, BMFace *f) BMLoopList *ls, *ls_next; #endif - BM_CHECK_ELEMENT(bm, f); + BM_CHECK_ELEMENT(f); #ifdef USE_BMESH_HOLES for (ls = f->loops.first; ls; ls = ls_next) @@ -733,15 +733,15 @@ static int bm_loop_reverse_loop(BMesh *bm, BMFace *f /* validate radia */ for (i = 0, l_iter = l_first; i < len; i++, l_iter = l_iter->next) { - BM_CHECK_ELEMENT(bm, l_iter); - BM_CHECK_ELEMENT(bm, l_iter->e); - BM_CHECK_ELEMENT(bm, l_iter->v); - BM_CHECK_ELEMENT(bm, l_iter->f); + BM_CHECK_ELEMENT(l_iter); + BM_CHECK_ELEMENT(l_iter->e); + BM_CHECK_ELEMENT(l_iter->v); + BM_CHECK_ELEMENT(l_iter->f); } BLI_array_free(edar); - BM_CHECK_ELEMENT(bm, f); + BM_CHECK_ELEMENT(f); return 1; } @@ -755,7 +755,7 @@ int bmesh_loop_reverse(BMesh *bm, BMFace *f) #endif } -static void bm_elements_systag_enable(BMesh *UNUSED(bm), void *veles, int tot, int flag) +static void bm_elements_systag_enable(void *veles, int tot, int flag) { BMHeader **eles = veles; int i; @@ -765,7 +765,7 @@ static void bm_elements_systag_enable(BMesh *UNUSED(bm), void *veles, int tot, i } } -static void bm_elements_systag_disable(BMesh *UNUSED(bm), void *veles, int tot, int flag) +static void bm_elements_systag_disable(void *veles, int tot, int flag) { BMHeader **eles = veles; int i; @@ -893,7 +893,7 @@ BMFace *BM_faces_join(BMesh *bm, BMFace **faces, int totface, const short do_del if (totface == 1) return faces[0]; - bm_elements_systag_enable(bm, faces, totface, _FLAG_JF); + bm_elements_systag_enable(faces, totface, _FLAG_JF); for (i = 0; i < totface; i++) { f = faces[i]; @@ -1012,7 +1012,7 @@ BMFace *BM_faces_join(BMesh *bm, BMFace **faces, int totface, const short do_del } while ((l_iter = l_iter->next) != l_first); } - bm_elements_systag_disable(bm, faces, totface, _FLAG_JF); + bm_elements_systag_disable(faces, totface, _FLAG_JF); BM_ELEM_API_FLAG_DISABLE(newf, _FLAG_JF); /* handle multi-res data */ @@ -1046,11 +1046,11 @@ BMFace *BM_faces_join(BMesh *bm, BMFace **faces, int totface, const short do_del BLI_array_free(deledges); BLI_array_free(delverts); - BM_CHECK_ELEMENT(bm, newf); + BM_CHECK_ELEMENT(newf); return newf; error: - bm_elements_systag_disable(bm, faces, totface, _FLAG_JF); + bm_elements_systag_disable(faces, totface, _FLAG_JF); BLI_array_free(edges); BLI_array_free(deledges); BLI_array_free(delverts); @@ -1092,13 +1092,13 @@ static BMFace *bm_face_create__sfme(BMesh *bm, BMFace *UNUSED(example)) * \par Examples: * * Before: After: - * ---------- ---------- + * +--------+ +--------+ * | | | | * | | | f1 | * v1 f1 v2 v1======v2 * | | | f2 | * | | | | - * ---------- ---------- + * +--------+ +--------+ * * \note the input vertices can be part of the same edge. This will * result in a two edged face. This is desirable for advanced construction @@ -1243,9 +1243,9 @@ BMFace *bmesh_sfme(BMesh *bm, BMFace *f, BMVert *v1, BMVert *v2, } #endif - BM_CHECK_ELEMENT(bm, e); - BM_CHECK_ELEMENT(bm, f); - BM_CHECK_ELEMENT(bm, f2); + BM_CHECK_ELEMENT(e); + BM_CHECK_ELEMENT(f); + BM_CHECK_ELEMENT(f2); return f2; } @@ -1391,10 +1391,10 @@ BMVert *bmesh_semv(BMesh *bm, BMVert *tv, BMEdge *e, BMEdge **r_e) BMESH_ASSERT(l->e != l->next->e); /* verify loop cycle for kloop-> */ - BM_CHECK_ELEMENT(bm, l); - BM_CHECK_ELEMENT(bm, l->v); - BM_CHECK_ELEMENT(bm, l->e); - BM_CHECK_ELEMENT(bm, l->f); + BM_CHECK_ELEMENT(l); + BM_CHECK_ELEMENT(l->v); + BM_CHECK_ELEMENT(l->e); + BM_CHECK_ELEMENT(l->f); } /* verify loop->v and loop->next->v pointers for ne */ for (i = 0, l = ne->l; i < radlen; i++, l = l->radial_next) { @@ -1406,18 +1406,18 @@ BMVert *bmesh_semv(BMesh *bm, BMVert *tv, BMEdge *e, BMEdge **r_e) BMESH_ASSERT(l->v != l->next->v); BMESH_ASSERT(l->e != l->next->e); - BM_CHECK_ELEMENT(bm, l); - BM_CHECK_ELEMENT(bm, l->v); - BM_CHECK_ELEMENT(bm, l->e); - BM_CHECK_ELEMENT(bm, l->f); + BM_CHECK_ELEMENT(l); + BM_CHECK_ELEMENT(l->v); + BM_CHECK_ELEMENT(l->e); + BM_CHECK_ELEMENT(l->f); } } - BM_CHECK_ELEMENT(bm, ne); - BM_CHECK_ELEMENT(bm, nv); - BM_CHECK_ELEMENT(bm, ov); - BM_CHECK_ELEMENT(bm, e); - BM_CHECK_ELEMENT(bm, tv); + BM_CHECK_ELEMENT(ne); + BM_CHECK_ELEMENT(nv); + BM_CHECK_ELEMENT(ov); + BM_CHECK_ELEMENT(e); + BM_CHECK_ELEMENT(tv); if (r_e) *r_e = ne; return nv; @@ -1561,10 +1561,10 @@ BMEdge *bmesh_jekv(BMesh *bm, BMEdge *ke, BMVert *kv, const short check_edge_dou edok = bmesh_loop_validate(l->f); BMESH_ASSERT(edok != FALSE); - BM_CHECK_ELEMENT(bm, l); - BM_CHECK_ELEMENT(bm, l->v); - BM_CHECK_ELEMENT(bm, l->e); - BM_CHECK_ELEMENT(bm, l->f); + BM_CHECK_ELEMENT(l); + BM_CHECK_ELEMENT(l->v); + BM_CHECK_ELEMENT(l->e); + BM_CHECK_ELEMENT(l->f); } if (check_edge_double) { @@ -1574,9 +1574,9 @@ BMEdge *bmesh_jekv(BMesh *bm, BMEdge *ke, BMVert *kv, const short check_edge_dou } } - BM_CHECK_ELEMENT(bm, ov); - BM_CHECK_ELEMENT(bm, tv); - BM_CHECK_ELEMENT(bm, oe); + BM_CHECK_ELEMENT(ov); + BM_CHECK_ELEMENT(tv); + BM_CHECK_ELEMENT(oe); return oe; } @@ -1718,7 +1718,7 @@ BMFace *bmesh_jfke(BMesh *bm, BMFace *f1, BMFace *f2, BMEdge *e) /* account for both above */ bm->elem_index_dirty |= BM_EDGE | BM_FACE; - BM_CHECK_ELEMENT(bm, f1); + BM_CHECK_ELEMENT(f1); /* validate the new loop cycle */ edok = bmesh_loop_validate(f1); @@ -1757,8 +1757,8 @@ int BM_vert_splice(BMesh *bm, BMVert *v, BMVert *vtarget) bmesh_disk_edge_append(e, vtarget); } - BM_CHECK_ELEMENT(bm, v); - BM_CHECK_ELEMENT(bm, vtarget); + BM_CHECK_ELEMENT(v); + BM_CHECK_ELEMENT(vtarget); /* v is unused now, and can be killed */ BM_vert_kill(bm, v); @@ -1880,7 +1880,7 @@ int bmesh_vert_separate(BMesh *bm, BMVert *v, BMVert ***r_vout, int *r_vout_len) BLI_ghash_free(visithash, NULL, NULL); for (i = 0; i < maxindex; i++) { - BM_CHECK_ELEMENT(bm, verts[i]); + BM_CHECK_ELEMENT(verts[i]); } if (r_vout_len != NULL) { @@ -1943,8 +1943,8 @@ int BM_edge_splice(BMesh *bm, BMEdge *e, BMEdge *etarget) BLI_assert(bmesh_radial_length(e->l) == 0); - BM_CHECK_ELEMENT(bm, e); - BM_CHECK_ELEMENT(bm, etarget); + BM_CHECK_ELEMENT(e); + BM_CHECK_ELEMENT(etarget); /* removes from disks too */ BM_edge_kill(bm, e); @@ -1989,8 +1989,8 @@ int bmesh_edge_separate(BMesh *bm, BMEdge *e, BMLoop *l_sep) BLI_assert(bmesh_radial_length(e->l) == radlen - 1); BLI_assert(bmesh_radial_length(ne->l) == 1); - BM_CHECK_ELEMENT(bm, ne); - BM_CHECK_ELEMENT(bm, e); + BM_CHECK_ELEMENT(ne); + BM_CHECK_ELEMENT(e); return TRUE; } diff --git a/source/blender/bmesh/intern/bmesh_interp.c b/source/blender/bmesh/intern/bmesh_interp.c index c56d2c622a4..5149a5436a2 100644 --- a/source/blender/bmesh/intern/bmesh_interp.c +++ b/source/blender/bmesh/intern/bmesh_interp.c @@ -327,16 +327,16 @@ static void mdisp_axis_from_quad(float v1[3], float v2[3], float UNUSED(v3[3]), /* tl is loop to project onto, l is loop whose internal displacement, co, is being * projected. x and y are location in loop's mdisps grid of point co. */ -static int mdisp_in_mdispquad(BMesh *bm, BMLoop *l, BMLoop *tl, float p[3], float *x, float *y, +static int mdisp_in_mdispquad(BMLoop *l, BMLoop *tl, float p[3], float *x, float *y, int res, float axis_x[3], float axis_y[3]) { float v1[3], v2[3], c[3], v3[3], v4[3], e1[3], e2[3]; float eps = FLT_EPSILON * 4000; if (len_v3(l->v->no) == 0.0f) - BM_vert_normal_update_all(bm, l->v); + BM_vert_normal_update_all(l->v); if (len_v3(tl->v->no) == 0.0f) - BM_vert_normal_update_all(bm, tl->v); + BM_vert_normal_update_all(tl->v); compute_mdisp_quad(tl, v1, v2, v3, v4, e1, e2); @@ -466,7 +466,7 @@ static void bm_loop_interp_mdisps(BMesh *bm, BMLoop *target, BMFace *source) md1 = CustomData_bmesh_get(&bm->ldata, target->head.data, CD_MDISPS); md2 = CustomData_bmesh_get(&bm->ldata, l_iter->head.data, CD_MDISPS); - if (mdisp_in_mdispquad(bm, target, l_iter, co, &x2, &y2, res, src_axis_x, src_axis_y)) { + if (mdisp_in_mdispquad(target, l_iter, co, &x2, &y2, res, src_axis_x, src_axis_y)) { old_mdisps_bilinear(md1->disps[iy * res + ix], md2->disps, res, (float)x2, (float)y2); bm_loop_flip_disp(src_axis_x, src_axis_y, axis_x, axis_y, md1->disps[iy * res + ix]); diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c index 2e61592c172..7cf29031765 100644 --- a/source/blender/bmesh/intern/bmesh_marking.c +++ b/source/blender/bmesh/intern/bmesh_marking.c @@ -563,7 +563,7 @@ BMFace *BM_active_face_get(BMesh *bm, int sloppy) * - #EM_editselection_normal * - #EM_editselection_plane */ -void BM_editselection_center(BMesh *bm, float r_center[3], BMEditSelection *ese) +void BM_editselection_center(float r_center[3], BMEditSelection *ese) { if (ese->htype == BM_VERT) { BMVert *eve = (BMVert *)ese->ele; @@ -576,7 +576,7 @@ void BM_editselection_center(BMesh *bm, float r_center[3], BMEditSelection *ese) } else if (ese->htype == BM_FACE) { BMFace *efa = (BMFace *)ese->ele; - BM_face_center_bounds_calc(bm, efa, r_center); + BM_face_center_bounds_calc(efa, r_center); } } @@ -621,7 +621,7 @@ void BM_editselection_plane(BMesh *bm, float r_plane[3], BMEditSelection *ese) float vec[3] = {0.0f, 0.0f, 0.0f}; if (ese->prev) { /* use previously selected data to make a useful vertex plane */ - BM_editselection_center(bm, vec, ese->prev); + BM_editselection_center(vec, ese->prev); sub_v3_v3v3(r_plane, vec, eve->co); } else { @@ -890,7 +890,7 @@ void BM_mesh_elem_hflag_enable_all(BMesh *bm, const char htype, const char hflag /***************** Mesh Hiding stuff *********** */ -static void vert_flush_hide_set(BMesh *bm, BMVert *v) +static void vert_flush_hide_set(BMVert *v) { BMIter iter; BMEdge *e; @@ -903,7 +903,7 @@ static void vert_flush_hide_set(BMesh *bm, BMVert *v) BM_elem_flag_set(v, BM_ELEM_HIDDEN, hide); } -static void edge_flush_hide(BMesh *bm, BMEdge *e) +static void edge_flush_hide(BMEdge *e) { BMIter iter; BMFace *f; @@ -916,7 +916,7 @@ static void edge_flush_hide(BMesh *bm, BMEdge *e) BM_elem_flag_set(e, BM_ELEM_HIDDEN, hide); } -void BM_vert_hide_set(BMesh *bm, BMVert *v, int hide) +void BM_vert_hide_set(BMVert *v, int hide) { /* vert hiding: vert + surrounding edges and faces */ BMIter iter, fiter; @@ -934,7 +934,7 @@ void BM_vert_hide_set(BMesh *bm, BMVert *v, int hide) } } -void BM_edge_hide_set(BMesh *bm, BMEdge *e, int hide) +void BM_edge_hide_set(BMEdge *e, int hide) { BMIter iter; BMFace *f; @@ -948,11 +948,11 @@ void BM_edge_hide_set(BMesh *bm, BMEdge *e, int hide) BM_elem_flag_set(e, BM_ELEM_HIDDEN, hide); /* hide vertices if necessary */ - vert_flush_hide_set(bm, e->v1); - vert_flush_hide_set(bm, e->v2); + vert_flush_hide_set(e->v1); + vert_flush_hide_set(e->v2); } -void BM_face_hide_set(BMesh *bm, BMFace *f, int hide) +void BM_face_hide_set(BMFace *f, int hide) { BMIter iter; BMLoop *l; @@ -960,11 +960,11 @@ void BM_face_hide_set(BMesh *bm, BMFace *f, int hide) BM_elem_flag_set(f, BM_ELEM_HIDDEN, hide); BM_ITER_ELEM (l, &iter, f, BM_LOOPS_OF_FACE) { - edge_flush_hide(bm, l->e); + edge_flush_hide(l->e); } BM_ITER_ELEM (l, &iter, f, BM_LOOPS_OF_FACE) { - vert_flush_hide_set(bm, l->v); + vert_flush_hide_set(l->v); } } @@ -975,15 +975,15 @@ void _bm_elem_hide_set(BMesh *bm, BMHeader *head, int hide) switch (head->htype) { case BM_VERT: if (hide) BM_vert_select_set(bm, (BMVert *)head, FALSE); - BM_vert_hide_set(bm, (BMVert *)head, hide); + BM_vert_hide_set((BMVert *)head, hide); break; case BM_EDGE: if (hide) BM_edge_select_set(bm, (BMEdge *)head, FALSE); - BM_edge_hide_set(bm, (BMEdge *)head, hide); + BM_edge_hide_set((BMEdge *)head, hide); break; case BM_FACE: if (hide) BM_face_select_set(bm, (BMFace *)head, FALSE); - BM_face_hide_set(bm, (BMFace *)head, hide); + BM_face_hide_set((BMFace *)head, hide); break; default: BMESH_ASSERT(0); diff --git a/source/blender/bmesh/intern/bmesh_marking.h b/source/blender/bmesh/intern/bmesh_marking.h index 73423bc181d..a3e97ea9677 100644 --- a/source/blender/bmesh/intern/bmesh_marking.h +++ b/source/blender/bmesh/intern/bmesh_marking.h @@ -37,9 +37,9 @@ typedef struct BMEditSelection /* geometry hiding code */ #define BM_elem_hide_set(bm, ele, hide) _bm_elem_hide_set(bm, &(ele)->head, hide) void _bm_elem_hide_set(BMesh *bm, BMHeader *ele, int hide); -void BM_vert_hide_set(BMesh *bm, BMVert *v, int hide); -void BM_edge_hide_set(BMesh *bm, BMEdge *e, int hide); -void BM_face_hide_set(BMesh *bm, BMFace *f, int hide); +void BM_vert_hide_set(BMVert *v, int hide); +void BM_edge_hide_set(BMEdge *e, int hide); +void BM_face_hide_set(BMFace *f, int hide); /* Selection code */ #define BM_elem_select_set(bm, ele, hide) _bm_elem_select_set(bm, &(ele)->head, hide) @@ -71,9 +71,9 @@ int BM_mesh_elem_hflag_count_enabled(BMesh *bm, const char htype, const char hfl int BM_mesh_elem_hflag_count_disabled(BMesh *bm, const char htype, const char hflag, int respecthide); /* edit selection stuff */ -void BM_active_face_set(BMesh *em, BMFace *f); +void BM_active_face_set(BMesh *bm, BMFace *f); BMFace *BM_active_face_get(BMesh *bm, int sloppy); -void BM_editselection_center(BMesh *bm, float r_center[3], BMEditSelection *ese); +void BM_editselection_center(float r_center[3], BMEditSelection *ese); void BM_editselection_normal(float r_normal[3], BMEditSelection *ese); void BM_editselection_plane(BMesh *bm, float r_plane[3], BMEditSelection *ese); diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c index e2b9732e87a..454ab58d720 100644 --- a/source/blender/bmesh/intern/bmesh_mesh.c +++ b/source/blender/bmesh/intern/bmesh_mesh.c @@ -219,7 +219,7 @@ void BM_mesh_normals_update(BMesh *bm, const short skip_hidden) continue; #endif - BM_face_normal_update(bm, f); + BM_face_normal_update(f); } /* Zero out vertex normals */ diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.c b/source/blender/bmesh/intern/bmesh_mesh_conv.c index d15e3d36523..574fb62b703 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_conv.c +++ b/source/blender/bmesh/intern/bmesh_mesh_conv.c @@ -582,7 +582,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) i++; mvert++; - BM_CHECK_ELEMENT(bm, v); + BM_CHECK_ELEMENT(v); } bm->elem_index_dirty &= ~BM_VERT; @@ -608,7 +608,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) i++; med++; - BM_CHECK_ELEMENT(bm, e); + BM_CHECK_ELEMENT(e); } bm->elem_index_dirty &= ~BM_EDGE; @@ -627,9 +627,9 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) /* copy over customdat */ CustomData_from_bmesh_block(&bm->ldata, &me->ldata, l->head.data, j); - BM_CHECK_ELEMENT(bm, l); - BM_CHECK_ELEMENT(bm, l->e); - BM_CHECK_ELEMENT(bm, l->v); + BM_CHECK_ELEMENT(l); + BM_CHECK_ELEMENT(l->e); + BM_CHECK_ELEMENT(l->v); } if (f == bm->act_face) me->act_face = i; @@ -639,7 +639,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) i++; mpoly++; - BM_CHECK_ELEMENT(bm, f); + BM_CHECK_ELEMENT(f); } /* patch hook indices and vertex parents */ diff --git a/source/blender/bmesh/intern/bmesh_mods.c b/source/blender/bmesh/intern/bmesh_mods.c index a29b657d76e..21654097219 100644 --- a/source/blender/bmesh/intern/bmesh_mods.c +++ b/source/blender/bmesh/intern/bmesh_mods.c @@ -817,14 +817,14 @@ int BM_face_validate(BMesh *bm, BMFace *face, FILE *err) * * \note #BM_edge_rotate_check must have already run. */ -void BM_edge_rotate_calc(BMesh *bm, BMEdge *e, int ccw, +void BM_edge_rotate_calc(BMEdge *e, int ccw, BMLoop **r_l1, BMLoop **r_l2) { BMVert *v1, *v2; BMFace *fa, *fb; /* this should have already run */ - BLI_assert(BM_edge_rotate_check(bm, e) == TRUE); + BLI_assert(BM_edge_rotate_check(e) == TRUE); /* we know this will work */ BM_edge_face_pair(e, &fa, &fb); @@ -842,9 +842,6 @@ void BM_edge_rotate_calc(BMesh *bm, BMEdge *e, int ccw, *r_l1 = BM_face_other_vert_loop(fb, v2, v1); *r_l2 = BM_face_other_vert_loop(fa, v1, v2); - - /* when assert isn't used */ - (void)bm; } /** @@ -853,7 +850,7 @@ void BM_edge_rotate_calc(BMesh *bm, BMEdge *e, int ccw, * Quick check to see if we could rotate the edge, * use this to avoid calling exceptions on common cases. */ -int BM_edge_rotate_check(BMesh *UNUSED(bm), BMEdge *e) +int BM_edge_rotate_check(BMEdge *e) { BMFace *fa, *fb; if (BM_edge_face_pair(e, &fa, &fb)) { @@ -894,8 +891,7 @@ int BM_edge_rotate_check(BMesh *UNUSED(bm), BMEdge *e) * \param l1,l2 are the loops of the proposed verts to rotate too and should * be the result of calling #BM_edge_rotate_calc */ -int BM_edge_rotate_check_degenerate(BMesh *bm, BMEdge *e, - BMLoop *l1, BMLoop *l2) +int BM_edge_rotate_check_degenerate(BMEdge *e, BMLoop *l1, BMLoop *l2) { /* note: for these vars 'old' just means initial edge state. */ @@ -922,7 +918,7 @@ int BM_edge_rotate_check_degenerate(BMesh *bm, BMEdge *e, BMVert *v1_alt, *v2_alt; /* this should have already run */ - BLI_assert(BM_edge_rotate_check(bm, e) == TRUE); + BLI_assert(BM_edge_rotate_check(e) == TRUE); BM_edge_ordered_verts(e, &v1_old, &v2_old); @@ -981,12 +977,9 @@ int BM_edge_rotate_check_degenerate(BMesh *bm, BMEdge *e, } return TRUE; - - /* when assert isn't used */ - (void)bm; } -int BM_edge_rotate_check_beauty(BMesh *UNUSED(bm), BMEdge *e, +int BM_edge_rotate_check_beauty(BMEdge *e, BMLoop *l1, BMLoop *l2) { /* Stupid check for now: @@ -1019,11 +1012,11 @@ BMEdge *BM_edge_rotate(BMesh *bm, BMEdge *e, const short ccw, const short check_ char f_hflag_prev_1; char f_hflag_prev_2; - if (!BM_edge_rotate_check(bm, e)) { + if (!BM_edge_rotate_check(e)) { return NULL; } - BM_edge_rotate_calc(bm, e, ccw, &l1, &l2); + BM_edge_rotate_calc(e, ccw, &l1, &l2); /* the loops will be freed so assign verts */ v1 = l1->v; @@ -1033,7 +1026,7 @@ BMEdge *BM_edge_rotate(BMesh *bm, BMEdge *e, const short ccw, const short check_ /* Checking Code - make sure we can rotate */ if (check_flag & BM_EDGEROT_CHECK_BEAUTY) { - if (!BM_edge_rotate_check_beauty(bm, e, l1, l2)) { + if (!BM_edge_rotate_check_beauty(e, l1, l2)) { return NULL; } } @@ -1047,7 +1040,7 @@ BMEdge *BM_edge_rotate(BMesh *bm, BMEdge *e, const short ccw, const short check_ /* slowest, check last */ if (check_flag & BM_EDGEROT_CHECK_DEGENERATE) { - if (!BM_edge_rotate_check_degenerate(bm, e, l1, l2)) { + if (!BM_edge_rotate_check_degenerate(e, l1, l2)) { return NULL; } } diff --git a/source/blender/bmesh/intern/bmesh_mods.h b/source/blender/bmesh/intern/bmesh_mods.h index ba601eb64dc..ba6acac1a27 100644 --- a/source/blender/bmesh/intern/bmesh_mods.h +++ b/source/blender/bmesh/intern/bmesh_mods.h @@ -43,9 +43,9 @@ BMFace *BM_face_split(BMesh *bm, BMFace *f, BMEdge *example, const short nodouble); BMFace *BM_face_split_n(BMesh *bm, BMFace *f, - BMVert *v1, BMVert *v2, - float cos[][3], int n, - BMLoop **r_l, BMEdge *example); + BMVert *v1, BMVert *v2, + float cos[][3], int n, + BMLoop **r_l, BMEdge *example); BMEdge* BM_vert_collapse_faces(BMesh *bm, BMEdge *ke, BMVert *kv, float fac, const short join_faces, const short kill_degenerate_faces); @@ -59,12 +59,12 @@ BMVert *BM_edge_split_n(BMesh *bm, BMEdge *e, int numcuts); int BM_face_validate(BMesh *bm, BMFace *face, FILE *err); -void BM_edge_rotate_calc(BMesh *bm, BMEdge *e, int ccw, - BMLoop **r_l1, BMLoop **r_l2); -int BM_edge_rotate_check(BMesh *UNUSED(bm), BMEdge *e); -int BM_edge_rotate_check_degenerate(BMesh *bm, BMEdge *e, +void BM_edge_rotate_calc(BMEdge *e, int ccw, + BMLoop **r_l1, BMLoop **r_l2); +int BM_edge_rotate_check(BMEdge *e); +int BM_edge_rotate_check_degenerate(BMEdge *e, BMLoop *l1, BMLoop *l2); -int BM_edge_rotate_check_beauty(BMesh *bm, BMEdge *e, +int BM_edge_rotate_check_beauty(BMEdge *e, BMLoop *l1, BMLoop *l2); BMEdge *BM_edge_rotate(BMesh *bm, BMEdge *e, const short ccw, const short check_flag); diff --git a/source/blender/bmesh/intern/bmesh_operators_private.h b/source/blender/bmesh/intern/bmesh_operators_private.h index 62cabe88b05..423b30a503a 100644 --- a/source/blender/bmesh/intern/bmesh_operators_private.h +++ b/source/blender/bmesh/intern/bmesh_operators_private.h @@ -37,11 +37,11 @@ void bmo_split_exec(BMesh *bm, BMOperator *op); void bmo_spin_exec(BMesh *bm, BMOperator *op); void bmo_dupe_exec(BMesh *bm, BMOperator *op); void bmo_del_exec(BMesh *bm, BMOperator *op); -void bmo_esubd_exec(BMesh *bmesh, BMOperator *op); -void bmo_triangulate_exec(BMesh *bmesh, BMOperator *op); -void bmo_dissolve_faces_exec(BMesh *bmesh, BMOperator *op); -void bmo_dissolve_verts_exec(BMesh *bmesh, BMOperator *op); -void bmo_dissolve_limit_exec(BMesh *bmesh, BMOperator *op); +void bmo_esubd_exec(BMesh *bm, BMOperator *op); +void bmo_triangulate_exec(BMesh *bm, BMOperator *op); +void bmo_dissolve_faces_exec(BMesh *bm, BMOperator *op); +void bmo_dissolve_verts_exec(BMesh *bm, BMOperator *op); +void bmo_dissolve_limit_exec(BMesh *bm, BMOperator *op); void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op); void bmo_vertex_slide_exec(BMesh *bm, BMOperator *op); void bmo_connectverts_exec(BMesh *bm, BMOperator *op); diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c index 971ad96c24a..e7ee5cb605d 100644 --- a/source/blender/bmesh/intern/bmesh_polygon.c +++ b/source/blender/bmesh/intern/bmesh_polygon.c @@ -153,7 +153,7 @@ static void bm_face_compute_poly_normal_vertex_cos(BMFace *f, float n[3], /** * get the area of the face */ -float BM_face_area_calc(BMesh *bm, BMFace *f) +float BM_face_area_calc(BMFace *f) { BMLoop *l; BMIter iter; @@ -187,7 +187,7 @@ float BM_face_area_calc(BMesh *bm, BMFace *f) /** * compute the perimeter of an ngon */ -float BM_face_perimeter_calc(BMesh *UNUSED(bm), BMFace *f) +float BM_face_perimeter_calc(BMFace *f) { BMLoop *l_iter, *l_first; float perimeter = 0.0f; @@ -203,7 +203,7 @@ float BM_face_perimeter_calc(BMesh *UNUSED(bm), BMFace *f) /** * computes center of face in 3d. uses center of bounding box. */ -void BM_face_center_bounds_calc(BMesh *UNUSED(bm), BMFace *f, float r_cent[3]) +void BM_face_center_bounds_calc(BMFace *f, float r_cent[3]) { BMLoop *l_iter; BMLoop *l_first; @@ -222,7 +222,7 @@ void BM_face_center_bounds_calc(BMesh *UNUSED(bm), BMFace *f, float r_cent[3]) /** * computes the center of a face, using the mean average */ -void BM_face_center_mean_calc(BMesh *UNUSED(bm), BMFace *f, float r_cent[3]) +void BM_face_center_mean_calc(BMFace *f, float r_cent[3]) { BMLoop *l_iter; BMLoop *l_first; @@ -332,24 +332,23 @@ void poly_rotate_plane(const float normal[3], float (*verts)[3], const int nvert /** * updates face and vertex normals incident on an edge */ -void BM_edge_normals_update(BMesh *bm, BMEdge *e) +void BM_edge_normals_update(BMEdge *e) { BMIter iter; BMFace *f; - f = BM_iter_new(&iter, bm, BM_FACES_OF_EDGE, e); - for (; f; f = BM_iter_step(&iter)) { - BM_face_normal_update(bm, f); + BM_ITER_ELEM (f, &iter, e, BM_FACES_OF_EDGE) { + BM_face_normal_update(f); } - BM_vert_normal_update(bm, e->v1); - BM_vert_normal_update(bm, e->v2); + BM_vert_normal_update(e->v1); + BM_vert_normal_update(e->v2); } /** * update a vert normal (but not the faces incident on it) */ -void BM_vert_normal_update(BMesh *bm, BMVert *v) +void BM_vert_normal_update(BMVert *v) { /* TODO, we can normalize each edge only once, then compare with previous edge */ @@ -379,16 +378,16 @@ void BM_vert_normal_update(BMesh *bm, BMVert *v) } } -void BM_vert_normal_update_all(BMesh *bm, BMVert *v) +void BM_vert_normal_update_all(BMVert *v) { BMIter iter; BMFace *f; BM_ITER_ELEM (f, &iter, v, BM_FACES_OF_VERT) { - BM_face_normal_update(bm, f); + BM_face_normal_update(f); } - BM_vert_normal_update(bm, v); + BM_vert_normal_update(v); } /** @@ -401,7 +400,7 @@ void BM_vert_normal_update_all(BMesh *bm, BMVert *v) * is passed in as well. */ -void BM_face_normal_update(BMesh *UNUSED(bm), BMFace *f) +void BM_face_normal_update(BMFace *f) { BMLoop *l; @@ -564,7 +563,7 @@ static int linecrossesf(const float v1[2], const float v2[2], const float v3[2], * instead of projecting co directly into f's orientation space, * so there might be accuracy issues. */ -int BM_face_point_inside_test(BMesh *bm, BMFace *f, const float co[3]) +int BM_face_point_inside_test(BMFace *f, const float co[3]) { int ax, ay; float co2[2], cent[2] = {0.0f, 0.0f}, out[2] = {FLT_MAX * 0.5f, FLT_MAX * 0.5f}; @@ -574,7 +573,7 @@ int BM_face_point_inside_test(BMesh *bm, BMFace *f, const float co[3]) float onepluseps = 1.0f + (float)FLT_EPSILON * 150.0f; if (dot_v3v3(f->no, f->no) <= FLT_EPSILON * 10) - BM_face_normal_update(bm, f); + BM_face_normal_update(f); /* find best projection of face XY, XZ or YZ: barycentric weights of * the 2d projected coords are the same and faster to compute @@ -659,7 +658,7 @@ static int goodline(float const (*projectverts)[3], BMFace *f, * * \param use_beauty Currently only applies to quads, can be extended later on. */ -static BMLoop *find_ear(BMesh *UNUSED(bm), BMFace *f, float (*verts)[3], const int nvert, const int use_beauty) +static BMLoop *find_ear(BMFace *f, float (*verts)[3], const int nvert, const int use_beauty) { BMLoop *bestear = NULL; @@ -779,7 +778,7 @@ void BM_face_triangulate(BMesh *bm, BMFace *f, float (*projectverts)[3], done = 0; while (!done && f->len > 3) { done = 1; - l_iter = find_ear(bm, f, projectverts, nvert, use_beauty); + l_iter = find_ear(f, projectverts, nvert, use_beauty); if (l_iter) { done = 0; /* v = l->v; */ /* UNUSED */ diff --git a/source/blender/bmesh/intern/bmesh_polygon.h b/source/blender/bmesh/intern/bmesh_polygon.h index 71387f18ce2..117a47d34f2 100644 --- a/source/blender/bmesh/intern/bmesh_polygon.h +++ b/source/blender/bmesh/intern/bmesh_polygon.h @@ -27,22 +27,22 @@ * \ingroup bmesh */ -float BM_face_area_calc(BMesh *bm, BMFace *f); -float BM_face_perimeter_calc(BMesh *bm, BMFace *f); -void BM_face_center_bounds_calc(BMesh *bm, BMFace *f, float center[3]); -void BM_face_center_mean_calc(BMesh *bm, BMFace *f, float center[3]); +float BM_face_area_calc(BMFace *f); +float BM_face_perimeter_calc(BMFace *f); +void BM_face_center_bounds_calc(BMFace *f, float center[3]); +void BM_face_center_mean_calc(BMFace *f, float center[3]); -void BM_face_normal_update(BMesh *bm, BMFace *f); +void BM_face_normal_update(BMFace *f); void BM_face_normal_update_vcos(BMesh *bm, BMFace *f, float no[3], float const (*vertexCos)[3]); -void BM_edge_normals_update(BMesh *bm, BMEdge *e); +void BM_edge_normals_update(BMEdge *e); -void BM_vert_normal_update(BMesh *bm, BMVert *v); -void BM_vert_normal_update_all(BMesh *bm, BMVert *v); +void BM_vert_normal_update(BMVert *v); +void BM_vert_normal_update_all(BMVert *v); void BM_face_normal_flip(BMesh *bm, BMFace *f); -int BM_face_point_inside_test(BMesh *bm, BMFace *f, const float co[3]); +int BM_face_point_inside_test(BMFace *f, const float co[3]); void BM_face_triangulate(BMesh *bm, BMFace *f, float (*projectverts)[3], const short newedge_oflag, const short newface_oflag, BMFace **newfaces, diff --git a/source/blender/bmesh/intern/bmesh_private.h b/source/blender/bmesh/intern/bmesh_private.h index 791c8d68880..f963425e1bd 100644 --- a/source/blender/bmesh/intern/bmesh_private.h +++ b/source/blender/bmesh/intern/bmesh_private.h @@ -37,13 +37,13 @@ */ /* returns positive nonzero on error */ -int bmesh_elem_check(BMesh *bm, void *element, const char htype); +int bmesh_elem_check(void *element, const char htype); -#define BM_CHECK_ELEMENT(bm, el) \ - if (bmesh_elem_check(bm, el, ((BMHeader *)el)->htype)) { \ +#define BM_CHECK_ELEMENT(el) \ + if (bmesh_elem_check(el, ((BMHeader *)el)->htype)) { \ printf("check_element failure, with code %i on line %i in file\n" \ " \"%s\"\n\n", \ - bmesh_elem_check(bm, el, ((BMHeader *)el)->htype), \ + bmesh_elem_check(el, ((BMHeader *)el)->htype), \ __LINE__, __FILE__); \ } diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c index 1238038c67c..af614f78aff 100644 --- a/source/blender/bmesh/intern/bmesh_queries.c +++ b/source/blender/bmesh/intern/bmesh_queries.c @@ -962,7 +962,7 @@ int BM_face_exists(BMesh *bm, BMVert **varr, int len, BMFace **r_existface) * * \a earr and \a varr can be in any order, however they _must_ form a closed loop. */ -int BM_face_exists_multi(BMesh *bm, BMVert **varr, BMEdge **earr, int len) +int BM_face_exists_multi(BMVert **varr, BMEdge **earr, int len) { BMFace *f; BMEdge *e; @@ -1068,7 +1068,7 @@ int BM_face_exists_multi(BMesh *bm, BMVert **varr, BMEdge **earr, int len) } /* same as 'BM_face_exists_multi' but built vert array from edges */ -int BM_face_exists_multi_edge(BMesh *bm, BMEdge **earr, int len) +int BM_face_exists_multi_edge(BMEdge **earr, int len) { BMVert **varr; BLI_array_fixedstack_declare(varr, BM_NGON_STACK_SIZE, len, __func__); @@ -1091,7 +1091,7 @@ int BM_face_exists_multi_edge(BMesh *bm, BMEdge **earr, int len) return FALSE; } - ok = BM_face_exists_multi(bm, varr, earr, len); + ok = BM_face_exists_multi(varr, earr, len); BLI_array_fixedstack_free(varr); diff --git a/source/blender/bmesh/intern/bmesh_queries.h b/source/blender/bmesh/intern/bmesh_queries.h index 280fe843b1c..73d724c7bdd 100644 --- a/source/blender/bmesh/intern/bmesh_queries.h +++ b/source/blender/bmesh/intern/bmesh_queries.h @@ -72,8 +72,8 @@ int BM_face_exists_overlap(BMesh *bm, BMVert **varr, int len, BMFace **r_exi int BM_face_exists(BMesh *bm, BMVert **varr, int len, BMFace **r_existface); -int BM_face_exists_multi(BMesh *bm, BMVert **varr, BMEdge **earr, int len); -int BM_face_exists_multi_edge(BMesh *bm, BMEdge **earr, int len); +int BM_face_exists_multi(BMVert **varr, BMEdge **earr, int len); +int BM_face_exists_multi_edge(BMEdge **earr, int len); int BM_face_share_edge_count(BMFace *f1, BMFace *f2); int BM_edge_share_face_count(BMEdge *e1, BMEdge *e2); diff --git a/source/blender/bmesh/operators/bmo_bevel.c b/source/blender/bmesh/operators/bmo_bevel.c index 99c70cc7c13..46dd7606940 100644 --- a/source/blender/bmesh/operators/bmo_bevel.c +++ b/source/blender/bmesh/operators/bmo_bevel.c @@ -53,7 +53,7 @@ typedef struct EdgeTag { BMVert *newv1, *newv2; } EdgeTag; -static void calc_corner_co(BMesh *bm, BMLoop *l, const float fac, float r_co[3], +static void calc_corner_co(BMLoop *l, const float fac, float r_co[3], const short do_dist, const short do_even) { float no[3], l_vec_prev[3], l_vec_next[3], l_co_prev[3], l_co[3], l_co_next[3], co_ofs[3]; @@ -370,7 +370,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) if (BMO_elem_flag_test(bm, l->e, BEVEL_FLAG)) { if (BMO_elem_flag_test(bm, l->prev->e, BEVEL_FLAG)) { tag = tags + BM_elem_index_get(l); - calc_corner_co(bm, l, fac, co, do_dist, do_even); + calc_corner_co(l, fac, co, do_dist, do_even); tag->newv = BM_vert_create(bm, co, l->v); } else { diff --git a/source/blender/bmesh/operators/bmo_create.c b/source/blender/bmesh/operators/bmo_create.c index 9e09f71d123..d02bb14bebf 100644 --- a/source/blender/bmesh/operators/bmo_create.c +++ b/source/blender/bmesh/operators/bmo_create.c @@ -1043,7 +1043,7 @@ void bmo_edgenet_fill_exec(BMesh *bm, BMOperator *op) if ((use_fill_check == FALSE) || /* fairly expensive check - see if there are already faces filling this area */ - (BM_face_exists_multi_edge(bm, edges, i) == FALSE)) + (BM_face_exists_multi_edge(edges, i) == FALSE)) { f = BM_face_create_ngon(bm, v1, v2, edges, i, TRUE); if (f && !BMO_elem_flag_test(bm, f, ELE_ORIG)) { diff --git a/source/blender/bmesh/operators/bmo_dissolve.c b/source/blender/bmesh/operators/bmo_dissolve.c index 3e3dae11ab9..f0e8ad81d07 100644 --- a/source/blender/bmesh/operators/bmo_dissolve.c +++ b/source/blender/bmesh/operators/bmo_dissolve.c @@ -554,7 +554,7 @@ void bmo_dissolve_limit_exec(BMesh *bm, BMOperator *op) /* there may be some errors, we don't mind, just move on */ if (nf) { - BM_face_normal_update(bm, nf); + BM_face_normal_update(nf); } else { BMO_error_clear(bm); @@ -604,7 +604,7 @@ void bmo_dissolve_limit_exec(BMesh *bm, BMOperator *op) BMEdge *ne = BM_vert_collapse_edge(bm, v->e, v, TRUE); /* join edges */ if (ne && ne->l) { - BM_edge_normals_update(bm, ne); + BM_edge_normals_update(ne); } } } diff --git a/source/blender/bmesh/operators/bmo_extrude.c b/source/blender/bmesh/operators/bmo_extrude.c index 4124eafda74..73997c774af 100644 --- a/source/blender/bmesh/operators/bmo_extrude.c +++ b/source/blender/bmesh/operators/bmo_extrude.c @@ -537,7 +537,7 @@ static void calc_solidify_normals(BMesh *bm) if (BMO_elem_flag_test(bm, v, VERT_NONMAN)) { /* use standard normals for vertices connected to non-manifold edges */ - BM_vert_normal_update(bm, v); + BM_vert_normal_update(v); } else if (normalize_v3(v->no) == 0.0f && !BM_elem_flag_test(v, BM_ELEM_TAG)) { /* exceptional case, totally flat. use the normal diff --git a/source/blender/bmesh/operators/bmo_join_triangles.c b/source/blender/bmesh/operators/bmo_join_triangles.c index c8c36f94c0c..582039fc1a2 100644 --- a/source/blender/bmesh/operators/bmo_join_triangles.c +++ b/source/blender/bmesh/operators/bmo_join_triangles.c @@ -43,7 +43,7 @@ #define T2QJOIN 4 /* assumes edges are validated before reaching this poin */ -static float measure_facepair(BMesh *UNUSED(bm), BMVert *v1, BMVert *v2, +static float measure_facepair(BMVert *v1, BMVert *v2, BMVert *v3, BMVert *v4, float limit) { /* gives a 'weight' to a pair of triangles that join an edge to decide how good a join they would make */ @@ -291,7 +291,7 @@ void bmo_join_triangles_exec(BMesh *bm, BMOperator *op) if (domat && f1->mat_nr != f2->mat_nr) continue; - measure = measure_facepair(bm, v1, v2, v3, v4, limit); + measure = measure_facepair(v1, v2, v3, v4, limit); if (measure < limit) { BLI_array_growone(jedges); diff --git a/source/blender/bmesh/operators/bmo_subdivide.c b/source/blender/bmesh/operators/bmo_subdivide.c index b5ca85ebe81..b3d4584107a 100644 --- a/source/blender/bmesh/operators/bmo_subdivide.c +++ b/source/blender/bmesh/operators/bmo_subdivide.c @@ -105,7 +105,7 @@ static void alter_co(BMesh *bm, BMVert *v, BMEdge *UNUSED(origed), const SubDPar float *co = NULL; int i, totlayer = CustomData_number_of_layers(&bm->vdata, CD_SHAPEKEY); - BM_vert_normal_update_all(bm, v); + BM_vert_normal_update_all(v); co = CustomData_bmesh_get_n(&bm->vdata, v->head.data, CD_SHAPEKEY, params->origkey); copy_v3_v3(co, v->co); @@ -257,9 +257,9 @@ static void bm_subdivide_multicut(BMesh *bm, BMEdge *edge, const SubDParams *par BMO_elem_flag_enable(bm, eed, ELE_SPLIT); BMO_elem_flag_enable(bm, newe, SUBD_SPLIT); - BM_CHECK_ELEMENT(bm, v); - if (v->e) BM_CHECK_ELEMENT(bm, v->e); - if (v->e && v->e->l) BM_CHECK_ELEMENT(bm, v->e->l->f); + BM_CHECK_ELEMENT(v); + if (v->e) BM_CHECK_ELEMENT(v->e); + if (v->e && v->e->l) BM_CHECK_ELEMENT(v->e->l->f); } alter_co(bm, v1, &temp, params, 0, &ov1, &ov2); @@ -673,7 +673,7 @@ typedef struct SubDFaceData { BMFace *face; } SubDFaceData; -void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) +void bmo_esubd_exec(BMesh *bm, BMOperator *op) { BMOpSlot *einput; SubDPattern *pat; @@ -693,7 +693,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) int beauty, cornertype, singleedge, gridfill; int skey, seed, i, j, matched, a, b, numcuts, totesel; - BMO_slot_buffer_flag_enable(bmesh, op, "edges", BM_EDGE, SUBD_SPLIT); + BMO_slot_buffer_flag_enable(bm, op, "edges", BM_EDGE, SUBD_SPLIT); numcuts = BMO_slot_int_get(op, "numcuts"); seed = BMO_slot_int_get(op, "seed"); @@ -739,16 +739,16 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) } /* add a temporary shapekey layer to store displacements on current geometry */ - BM_data_layer_add(bmesh, &bmesh->vdata, CD_SHAPEKEY); - skey = CustomData_number_of_layers(&bmesh->vdata, CD_SHAPEKEY) - 1; + BM_data_layer_add(bm, &bm->vdata, CD_SHAPEKEY); + skey = CustomData_number_of_layers(&bm->vdata, CD_SHAPEKEY) - 1; - BM_ITER_MESH (v, &viter, bmesh, BM_VERTS_OF_MESH) { - float *co = CustomData_bmesh_get_n(&bmesh->vdata, v->head.data, CD_SHAPEKEY, skey); + BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) { + float *co = CustomData_bmesh_get_n(&bm->vdata, v->head.data, CD_SHAPEKEY, skey); copy_v3_v3(co, v->co); } /* first go through and tag edges */ - BMO_slot_buffer_from_enabled_flag(bmesh, op, "edges", BM_EDGE, SUBD_SPLIT); + BMO_slot_buffer_from_enabled_flag(bm, op, "edges", BM_EDGE, SUBD_SPLIT); params.numcuts = numcuts; params.op = op; @@ -761,14 +761,14 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) params.off[1] = (float)BLI_drand() * 200.0f; params.off[2] = (float)BLI_drand() * 200.0f; - BMO_slot_map_to_flag(bmesh, op, "custompatterns", + BMO_slot_map_to_flag(bm, op, "custompatterns", BM_FACE, FACE_CUSTOMFILL); - BMO_slot_map_to_flag(bmesh, op, "edgepercents", + BMO_slot_map_to_flag(bm, op, "edgepercents", BM_EDGE, EDGE_PERCENT); - BM_ITER_MESH (face, &fiter, bmesh, BM_FACES_OF_MESH) { + BM_ITER_MESH (face, &fiter, bm, BM_FACES_OF_MESH) { BMEdge *e1 = NULL, *e2 = NULL; float vec1[3], vec2[3]; @@ -787,7 +787,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) edges[i] = nl->e; verts[i] = nl->v; - if (BMO_elem_flag_test(bmesh, edges[i], SUBD_SPLIT)) { + if (BMO_elem_flag_test(bm, edges[i], SUBD_SPLIT)) { if (!e1) e1 = edges[i]; else e2 = edges[i]; @@ -811,14 +811,14 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) } } - if (BMO_elem_flag_test(bmesh, face, FACE_CUSTOMFILL)) { - pat = BMO_slot_map_data_get(bmesh, op, + if (BMO_elem_flag_test(bm, face, FACE_CUSTOMFILL)) { + pat = BMO_slot_map_data_get(bm, op, "custompatterns", face); for (i = 0; i < pat->len; i++) { matched = 1; for (j = 0; j < pat->len; j++) { a = (j + i) % pat->len; - if ((!!BMO_elem_flag_test(bmesh, edges[a], SUBD_SPLIT)) != (!!pat->seledges[j])) { + if ((!!BMO_elem_flag_test(bm, edges[a], SUBD_SPLIT)) != (!!pat->seledges[j])) { matched = 0; break; } @@ -830,7 +830,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) facedata[b].start = verts[i]; facedata[b].face = face; facedata[b].totedgesel = totesel; - BMO_elem_flag_enable(bmesh, face, SUBD_SPLIT); + BMO_elem_flag_enable(bm, face, SUBD_SPLIT); break; } } @@ -850,7 +850,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) matched = 1; for (b = 0; b < pat->len; b++) { j = (b + a) % pat->len; - if ((!!BMO_elem_flag_test(bmesh, edges[j], SUBD_SPLIT)) != (!!pat->seledges[b])) { + if ((!!BMO_elem_flag_test(bm, edges[j], SUBD_SPLIT)) != (!!pat->seledges[b])) { matched = 0; break; } @@ -863,7 +863,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) BLI_array_growone(facedata); j = BLI_array_count(facedata) - 1; - BMO_elem_flag_enable(bmesh, face, SUBD_SPLIT); + BMO_elem_flag_enable(bm, face, SUBD_SPLIT); facedata[j].pat = pat; facedata[j].start = verts[a]; @@ -879,7 +879,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) BLI_array_growone(facedata); j = BLI_array_count(facedata) - 1; - BMO_elem_flag_enable(bmesh, face, SUBD_SPLIT); + BMO_elem_flag_enable(bm, face, SUBD_SPLIT); facedata[j].totedgesel = totesel; facedata[j].face = face; } @@ -890,12 +890,12 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) /* go through and split edges */ for (i = 0; i < einput->len; i++) { edge = ((BMEdge **)einput->data.p)[i]; - bm_subdivide_multicut(bmesh, edge, ¶ms, edge->v1, edge->v2); + bm_subdivide_multicut(bm, edge, ¶ms, edge->v1, edge->v2); } /* copy original-geometry displacements to current coordinates */ - BM_ITER_MESH (v, &viter, bmesh, BM_VERTS_OF_MESH) { - float *co = CustomData_bmesh_get_n(&bmesh->vdata, v->head.data, CD_SHAPEKEY, skey); + BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) { + float *co = CustomData_bmesh_get_n(&bm->vdata, v->head.data, CD_SHAPEKEY, skey); copy_v3_v3(v->co, co); } @@ -925,22 +925,22 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) /* find the boundary of one of the split edges */ for (a = 1; a < vlen; a++) { - if (!BMO_elem_flag_test(bmesh, loops[a - 1]->v, ELE_INNER) && - BMO_elem_flag_test(bmesh, loops[a]->v, ELE_INNER)) + if (!BMO_elem_flag_test(bm, loops[a - 1]->v, ELE_INNER) && + BMO_elem_flag_test(bm, loops[a]->v, ELE_INNER)) { break; } } - if (BMO_elem_flag_test(bmesh, loops[(a + numcuts + 1) % vlen]->v, ELE_INNER)) { + if (BMO_elem_flag_test(bm, loops[(a + numcuts + 1) % vlen]->v, ELE_INNER)) { b = (a + numcuts + 1) % vlen; } else { /* find the boundary of the other edge. */ for (j = 0; j < vlen; j++) { b = (j + a + numcuts + 1) % vlen; - if (!BMO_elem_flag_test(bmesh, loops[b == 0 ? vlen - 1 : b - 1]->v, ELE_INNER) && - BMO_elem_flag_test(bmesh, loops[b]->v, ELE_INNER)) + if (!BMO_elem_flag_test(bm, loops[b == 0 ? vlen - 1 : b - 1]->v, ELE_INNER) && + BMO_elem_flag_test(bm, loops[b]->v, ELE_INNER)) { break; } @@ -965,7 +965,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) for (j = 0; j < BLI_array_count(splits) / 2; j++) { if (splits[j * 2]) { /* BMFace *nf = */ /* UNUSED */ - BM_face_split(bmesh, face, splits[j * 2]->v, splits[j * 2 + 1]->v, &nl, NULL, FALSE); + BM_face_split(bm, face, splits[j * 2]->v, splits[j * 2 + 1]->v, &nl, NULL, FALSE); } } @@ -976,7 +976,7 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) } j = a = 0; - for (nl = BM_iter_new(&liter, bmesh, BM_LOOPS_OF_FACE, face); + for (nl = BM_iter_new(&liter, bm, BM_LOOPS_OF_FACE, face); nl; nl = BM_iter_step(&liter)) { @@ -992,23 +992,23 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) } j = 0; - for (nl = BM_iter_new(&liter, bmesh, BM_LOOPS_OF_FACE, face); nl; nl = BM_iter_step(&liter)) { + for (nl = BM_iter_new(&liter, bm, BM_LOOPS_OF_FACE, face); nl; nl = BM_iter_step(&liter)) { b = (j - a + face->len) % face->len; verts[b] = nl->v; j += 1; } - BM_CHECK_ELEMENT(bmesh, face); - pat->connectexec(bmesh, face, verts, ¶ms); + BM_CHECK_ELEMENT(face); + pat->connectexec(bm, face, verts, ¶ms); } /* copy original-geometry displacements to current coordinates */ - BM_ITER_MESH (v, &viter, bmesh, BM_VERTS_OF_MESH) { - float *co = CustomData_bmesh_get_n(&bmesh->vdata, v->head.data, CD_SHAPEKEY, skey); + BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) { + float *co = CustomData_bmesh_get_n(&bm->vdata, v->head.data, CD_SHAPEKEY, skey); copy_v3_v3(v->co, co); } - BM_data_layer_free_n(bmesh, &bmesh->vdata, CD_SHAPEKEY, skey); + BM_data_layer_free_n(bm, &bm->vdata, CD_SHAPEKEY, skey); if (facedata) BLI_array_free(facedata); if (edges) BLI_array_free(edges); @@ -1016,10 +1016,10 @@ void bmo_esubd_exec(BMesh *bmesh, BMOperator *op) BLI_array_free(splits); BLI_array_free(loops); - BMO_slot_buffer_from_enabled_flag(bmesh, op, "outinner", BM_ALL, ELE_INNER); - BMO_slot_buffer_from_enabled_flag(bmesh, op, "outsplit", BM_ALL, ELE_SPLIT); + BMO_slot_buffer_from_enabled_flag(bm, op, "outinner", BM_ALL, ELE_INNER); + BMO_slot_buffer_from_enabled_flag(bm, op, "outsplit", BM_ALL, ELE_SPLIT); - BMO_slot_buffer_from_enabled_flag(bmesh, op, "geomout", BM_ALL, ELE_INNER|ELE_SPLIT|SUBD_SPLIT); + BMO_slot_buffer_from_enabled_flag(bm, op, "geomout", BM_ALL, ELE_INNER|ELE_SPLIT|SUBD_SPLIT); } /* editmesh-emulating function */ diff --git a/source/blender/bmesh/operators/bmo_utils.c b/source/blender/bmesh/operators/bmo_utils.c index 30bb1d2913d..87aba98836d 100644 --- a/source/blender/bmesh/operators/bmo_utils.c +++ b/source/blender/bmesh/operators/bmo_utils.c @@ -135,7 +135,7 @@ void bmo_edgerotate_exec(BMesh *bm, BMOperator *op) /** * this ends up being called twice, could add option to not to call check in * #BM_edge_rotate to get some extra speed */ - if (BM_edge_rotate_check(bm, e)) { + if (BM_edge_rotate_check(e)) { BMFace *fa, *fb; if (BM_edge_face_pair(e, &fa, &fb)) { @@ -322,7 +322,7 @@ void bmo_righthandfaces_exec(BMesh *bm, BMOperator *op) if (!startf) startf = f; - BM_face_center_bounds_calc(bm, f, cent); + BM_face_center_bounds_calc(f, cent); if ((maxx_test = dot_v3v3(cent, cent)) > maxx) { maxx = maxx_test; @@ -332,7 +332,7 @@ void bmo_righthandfaces_exec(BMesh *bm, BMOperator *op) if (!startf) return; - BM_face_center_bounds_calc(bm, startf, cent); + BM_face_center_bounds_calc(startf, cent); /* make sure the starting face has the correct winding */ if (dot_v3v3(cent, startf->no) < 0.0f) { @@ -465,7 +465,7 @@ void bmo_vertexsmooth_exec(BMesh *bm, BMOperator *op) * * NOTE: This should probably go to bmesh_polygon.c */ -static float ngon_fake_area(BMesh *bm, BMFace *f) +static float ngon_fake_area(BMFace *f) { BMIter liter; BMLoop *l; @@ -473,7 +473,7 @@ static float ngon_fake_area(BMesh *bm, BMFace *f) float v[3], sv[3], c[3]; float area = 0.0f; - BM_face_center_mean_calc(bm, f, c); + BM_face_center_mean_calc(f, c); BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { if (num_verts == 0) { @@ -563,12 +563,12 @@ void bmo_similarfaces_exec(BMesh *bm, BMOperator *op) switch (type) { case SIMFACE_PERIMETER: /* set the perimeter */ - f_ext[i].perim = BM_face_perimeter_calc(bm, f_ext[i].f); + f_ext[i].perim = BM_face_perimeter_calc(f_ext[i].f); break; case SIMFACE_COPLANAR: /* compute the center of the polygon */ - BM_face_center_mean_calc(bm, f_ext[i].f, f_ext[i].c); + BM_face_center_mean_calc(f_ext[i].f, f_ext[i].c); /* normalize the polygon normal */ copy_v3_v3(t_no, f_ext[i].f->no); @@ -579,7 +579,7 @@ void bmo_similarfaces_exec(BMesh *bm, BMOperator *op) break; case SIMFACE_AREA: - f_ext[i].area = ngon_fake_area(bm, f_ext[i].f); + f_ext[i].area = ngon_fake_area(f_ext[i].f); break; case SIMFACE_IMAGE: @@ -663,27 +663,6 @@ void bmo_similarfaces_exec(BMesh *bm, BMOperator *op) **************************************************************************** */ #define EDGE_MARK 1 -/* - * compute the angle of an edge (i.e. the angle between two faces) - */ -static float edge_angle(BMesh *bm, BMEdge *e) -{ - BMIter fiter; - BMFace *f, *f_prev = NULL; - - /* first edge faces, don't account for 3+ */ - - BM_ITER_ELEM (f, &fiter, e, BM_FACES_OF_EDGE) { - if (f_prev == NULL) { - f_prev = f; - } - else { - return angle_v3v3(f_prev->no, f->no); - } - } - - return 0.0f; -} /* * extra edge information */ @@ -761,7 +740,7 @@ void bmo_similaredges_exec(BMesh *bm, BMOperator *op) case SIMEDGE_FACE_ANGLE: e_ext[i].faces = BM_edge_face_count(e_ext[i].e); if (e_ext[i].faces == 2) - e_ext[i].angle = edge_angle(bm, e_ext[i].e); + e_ext[i].angle = BM_edge_face_angle(e_ext[i].e); break; } } diff --git a/source/blender/bmesh/tools/BME_bevel.c b/source/blender/bmesh/tools/BME_bevel.c index 02ae75c5d9a..0d177f5ab18 100644 --- a/source/blender/bmesh/tools/BME_bevel.c +++ b/source/blender/bmesh/tools/BME_bevel.c @@ -740,7 +740,7 @@ static BMFace *BME_bevel_poly(BMesh *bm, BMFace *f, float value, int options, BM return NULL; } -static float BME_bevel_get_angle(BMesh *UNUSED(bm), BMEdge *e, BMVert *v) +static float BME_bevel_get_angle(BMEdge *e, BMVert *v) { BMVert *v1, *v2; BMLoop *l1, *l2; @@ -779,7 +779,7 @@ static float BME_bevel_get_angle(BMesh *UNUSED(bm), BMEdge *e, BMVert *v) return dot_v3v3(vec3, vec4); } -static float UNUSED_FUNCTION(BME_bevel_get_angle_vert)(BMesh *bm, BMVert *v) +static float UNUSED_FUNCTION(BME_bevel_get_angle_vert)(BMVert *v) { BMIter iter; BMLoop *l; @@ -902,14 +902,14 @@ static void bevel_init_edges(BMesh *bm, int options, float angle, BME_TransData_ } else if (options & BME_BEVEL_ANGLE) { /* dont set weight_v1/weight_v2 here, add direct */ - if (!BMO_elem_flag_test(bm, e->v1, BME_BEVEL_NONMAN) && BME_bevel_get_angle(bm, e, e->v1) < threshold) { + if (!BMO_elem_flag_test(bm, e->v1, BME_BEVEL_NONMAN) && BME_bevel_get_angle(e, e->v1) < threshold) { BMO_elem_flag_enable(bm, e, BME_BEVEL_BEVEL); BME_bevel_add_vweight(td, bm, e->v1, 1.0, 1.0, options); } else { BME_bevel_add_vweight(td, bm, e->v1, 0.0, 1.0, options); } - if (!BMO_elem_flag_test(bm, e->v2, BME_BEVEL_NONMAN) && BME_bevel_get_angle(bm, e, e->v2) < threshold) { + if (!BMO_elem_flag_test(bm, e->v2, BME_BEVEL_NONMAN) && BME_bevel_get_angle(e, e->v2) < threshold) { BMO_elem_flag_enable(bm, e, BME_BEVEL_BEVEL); BME_bevel_add_vweight(td, bm, e->v2, 1.0, 1.0, options); } diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h index 0ab9c5dd977..16b3e0654bd 100644 --- a/source/blender/editors/include/ED_mesh.h +++ b/source/blender/editors/include/ED_mesh.h @@ -136,7 +136,7 @@ void EDBM_selectmode_convert(struct BMEditMesh *em, short oldmode, short selectm void undo_push_mesh(struct bContext *C, const char *name); int EDBM_editselection_active_get(struct BMEditMesh *em, struct BMEditSelection *ese); -void EDBM_editselection_center(struct BMEditMesh *em, float *center, struct BMEditSelection *ese); +void EDBM_editselection_center(float *center, struct BMEditSelection *ese); void EDBM_editselection_plane(struct BMEditMesh *em, float *plane, struct BMEditSelection *ese); void EDBM_editselection_normal(float *normal, struct BMEditSelection *ese); int EDBM_vert_color_check(struct BMEditMesh *em); diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 2a8de974b82..1f272e83023 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -556,7 +556,6 @@ static void knife_get_vert_faces(knifetool_opdata *kcd, KnifeVert *kfv, BMFace * knife_append_list(kcd, lst, facef); } else if (kfv->v) { - BMesh *bm = kcd->em->bm; BM_ITER_ELEM (f, &bmiter, kfv->v, BM_FACES_OF_VERT) { knife_append_list(kcd, lst, f); } @@ -569,7 +568,6 @@ static void knife_get_edge_faces(knifetool_opdata *kcd, KnifeEdge *kfe, ListBase BMFace *f; if (kfe->e) { - BMesh *bm = kcd->em->bm; BM_ITER_ELEM (f, &bmiter, kfe->e, BM_FACES_OF_EDGE) { knife_append_list(kcd, lst, f); } @@ -1972,7 +1970,7 @@ static void knifenet_fill_faces(knifetool_opdata *kcd) BMO_elem_flag_disable(bm, f2, DEL); BM_elem_index_set(f2, i); /* set_dirty! *//* note, not 100% sure this is dirty? need to check */ - BM_face_normal_update(bm, f2); + BM_face_normal_update(f2); if (dot_v3v3(f->no, f2->no) < 0.0f) { BM_face_normal_flip(bm, f2); } @@ -2395,9 +2393,9 @@ static int find_hole_chains(knifetool_opdata *kcd, ListBase *hole, BMFace *f, Li } } -static int knife_edge_in_face(knifetool_opdata *kcd, KnifeEdge *kfe, BMFace *f) +static int knife_edge_in_face(knifetool_opdata *UNUSED(kcd), KnifeEdge *kfe, BMFace *f) { - BMesh *bm = kcd->em->bm; + /* BMesh *bm = kcd->em->bm; */ /* UNUSED */ BMVert *v1, *v2; BMLoop *l1, *l2, *l; float mid[3]; @@ -2421,8 +2419,8 @@ static int knife_edge_in_face(knifetool_opdata *kcd, KnifeEdge *kfe, BMFace *f) } /* BM_face_point_inside_test uses best-axis projection so this isn't most accurate test... */ - v1inside = l1 ? 0 : BM_face_point_inside_test(bm, f, kfe->v1->co); - v2inside = l2 ? 0 : BM_face_point_inside_test(bm, f, kfe->v2->co); + v1inside = l1 ? 0 : BM_face_point_inside_test(f, kfe->v1->co); + v2inside = l2 ? 0 : BM_face_point_inside_test(f, kfe->v2->co); if ((l1 && v2inside) || (l2 && v1inside) || (v1inside && v2inside)) return TRUE; if (l1 && l2) { @@ -2431,7 +2429,7 @@ static int knife_edge_in_face(knifetool_opdata *kcd, KnifeEdge *kfe, BMFace *f) * but it is expensive and maybe a bit buggy, so use a simple * "is the midpoint in the face" test */ mid_v3_v3v3(mid, kfe->v1->co, kfe->v2->co); - return BM_face_point_inside_test(bm, f, mid); + return BM_face_point_inside_test(f, mid); } return FALSE; } diff --git a/source/blender/editors/mesh/editmesh_loopcut.c b/source/blender/editors/mesh/editmesh_loopcut.c index 27e3e643be1..d05bf10e206 100644 --- a/source/blender/editors/mesh/editmesh_loopcut.c +++ b/source/blender/editors/mesh/editmesh_loopcut.c @@ -134,7 +134,7 @@ static void ringsel_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) /* given two opposite edges in a face, finds the ordering of their vertices so * that cut preview lines won't cross each other */ -static void edgering_find_order(BMEditMesh *em, BMEdge *lasteed, BMEdge *eed, +static void edgering_find_order(BMEdge *lasteed, BMEdge *eed, BMVert *lastv1, BMVert *v[2][2]) { BMIter liter; @@ -237,7 +237,7 @@ static void edgering_sel(tringselOpData *lcd, int previewlines, int select) lastv1 = lasteed->v1; } - edgering_find_order(em, lasteed, eed, lastv1, v); + edgering_find_order(lasteed, eed, lastv1, v); lastv1 = v[0][0]; BLI_array_growitems(edges, previewlines); @@ -263,7 +263,7 @@ static void edgering_sel(tringselOpData *lcd, int previewlines, int select) v[1][0] = v[0][0]; v[1][1] = v[0][1]; - edgering_find_order(em, lasteed, startedge, lastv1, v); + edgering_find_order(lasteed, startedge, lastv1, v); BLI_array_growitems(edges, previewlines); diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index 9ae816903f2..43e9b885037 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -154,7 +154,7 @@ static float edbm_rip_edge_side_measure(BMEdge *e, #define INVALID_UID INT_MIN /* mark, assign uid and step */ -static BMEdge *edbm_ripsel_edge_mark_step(BMesh *bm, BMVert *v, const int uid) +static BMEdge *edbm_ripsel_edge_mark_step(BMVert *v, const int uid) { BMIter iter; BMEdge *e; @@ -230,7 +230,7 @@ static EdgeLoopPair *edbm_ripsel_looptag_helper(BMesh *bm) v_step = e_first->v1; uid_start = uid; - while ((e = edbm_ripsel_edge_mark_step(bm, v_step, uid))) { + while ((e = edbm_ripsel_edge_mark_step(v_step, uid))) { BM_elem_flag_disable(e, BM_ELEM_SMOOTH); v_step = BM_edge_other_vert((e_step = e), v_step); uid++; /* only different line */ @@ -247,7 +247,7 @@ static EdgeLoopPair *edbm_ripsel_looptag_helper(BMesh *bm) /* initialize */ v_step = e_first->v1; - while ((e = edbm_ripsel_edge_mark_step(bm, v_step, uid))) { + while ((e = edbm_ripsel_edge_mark_step(v_step, uid))) { BM_elem_flag_disable(e, BM_ELEM_SMOOTH); v_step = BM_edge_other_vert((e_step = e), v_step); uid--; /* only different line */ @@ -283,7 +283,7 @@ static EdgeLoopPair *edbm_ripsel_looptag_helper(BMesh *bm) /* - De-Select the worst rip-edge side -------------------------------- */ -static BMEdge *edbm_ripsel_edge_uid_step(BMesh *bm, BMEdge *e_orig, BMVert **v_prev) +static BMEdge *edbm_ripsel_edge_uid_step(BMEdge *e_orig, BMVert **v_prev) { BMIter eiter; BMEdge *e; @@ -299,11 +299,11 @@ static BMEdge *edbm_ripsel_edge_uid_step(BMesh *bm, BMEdge *e_orig, BMVert **v_p return NULL; } -static BMVert *edbm_ripsel_edloop_pair_start_vert(BMesh *bm, BMEdge *e) +static BMVert *edbm_ripsel_edloop_pair_start_vert(BMEdge *e) { /* try step in a direction, if it fails we know do go the other way */ BMVert *v_test = e->v1; - return (edbm_ripsel_edge_uid_step(bm, e, &v_test)) ? e->v1 : e->v2; + return (edbm_ripsel_edge_uid_step(e, &v_test)) ? e->v1 : e->v2; } static void edbm_ripsel_deselect_helper(BMesh *bm, EdgeLoopPair *eloop_pairs, @@ -319,19 +319,19 @@ static void edbm_ripsel_deselect_helper(BMesh *bm, EdgeLoopPair *eloop_pairs, float score_b = 0.0f; e = lp->l_a->e; - v_prev = edbm_ripsel_edloop_pair_start_vert(bm, e); - for (; e; e = edbm_ripsel_edge_uid_step(bm, e, &v_prev)) { + v_prev = edbm_ripsel_edloop_pair_start_vert(e); + for (; e; e = edbm_ripsel_edge_uid_step(e, &v_prev)) { score_a += edbm_rip_edge_side_measure(e, ar, projectMat, fmval); } e = lp->l_b->e; - v_prev = edbm_ripsel_edloop_pair_start_vert(bm, e); - for (; e; e = edbm_ripsel_edge_uid_step(bm, e, &v_prev)) { + v_prev = edbm_ripsel_edloop_pair_start_vert(e); + for (; e; e = edbm_ripsel_edge_uid_step(e, &v_prev)) { score_b += edbm_rip_edge_side_measure(e, ar, projectMat, fmval); } e = (score_a > score_b) ? lp->l_a->e : lp->l_b->e; - v_prev = edbm_ripsel_edloop_pair_start_vert(bm, e); - for (; e; e = edbm_ripsel_edge_uid_step(bm, e, &v_prev)) { + v_prev = edbm_ripsel_edloop_pair_start_vert(e); + for (; e; e = edbm_ripsel_edge_uid_step(e, &v_prev)) { BM_elem_select_set(bm, e, FALSE); } } diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 52547c120c0..d6aa3f48b85 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -2578,7 +2578,7 @@ void MESH_OT_region_to_loop(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } -static int loop_find_region(BMEditMesh *em, BMLoop *l, int flag, +static int loop_find_region(BMLoop *l, int flag, SmallHash *fhash, BMFace ***region_out) { BLI_array_declare(region); @@ -2676,7 +2676,7 @@ static int loop_find_regions(BMEditMesh *em, int selbigger) if (BLI_smallhash_haskey(&visithash, (uintptr_t)l->f)) continue; - c = loop_find_region(em, l, BM_ELEM_SELECT, &visithash, ®ion_out); + c = loop_find_region(l, BM_ELEM_SELECT, &visithash, ®ion_out); if (!region || (selbigger ? c >= tot : c < tot)) { /* this region is the best seen so far */ diff --git a/source/blender/editors/mesh/editmesh_slide.c b/source/blender/editors/mesh/editmesh_slide.c index dd68cd30cf5..6534210601c 100644 --- a/source/blender/editors/mesh/editmesh_slide.c +++ b/source/blender/editors/mesh/editmesh_slide.c @@ -486,8 +486,6 @@ static int vtx_slide_set_frame(VertexSlideOp *vso) BLI_array_declare(vtx_frame); BLI_array_declare(edge_frame); BMIter iter; - BMEditMesh *em = BMEdit_FromObject(vso->obj); - BMesh *bm = em->bm; BMVert *sel_vtx = vso->start_vtx; int idx = 0; diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c index b006f77200e..468f5699bce 100644 --- a/source/blender/editors/mesh/editmesh_utils.c +++ b/source/blender/editors/mesh/editmesh_utils.c @@ -1270,9 +1270,9 @@ void EDBM_update_generic(bContext *C, BMEditMesh *em, const short do_tessface) * need (at the moment) to wrap them, but on the other hand having these * wrapped avoids a confusing mess of mixing BM_ and EDBM_ namespaces. */ -void EDBM_editselection_center(BMEditMesh *em, float *center, BMEditSelection *ese) +void EDBM_editselection_center(float *center, BMEditSelection *ese) { - BM_editselection_center(em->bm, center, ese); + BM_editselection_center(center, ese); } void EDBM_editselection_normal(float *normal, BMEditSelection *ese) diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 7f2e42f18e9..7a1d9b8604f 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -2910,7 +2910,7 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, BMEditMesh *em, UnitS BMIter liter; BMLoop *loop; - BM_face_center_bounds_calc(em->bm, efa, vmid); + BM_face_center_bounds_calc(efa, vmid); for (loop = BM_iter_new(&liter, em->bm, BM_LOOPS_OF_FACE, efa); loop; loop = BM_iter_step(&liter)) @@ -2984,7 +2984,7 @@ static void draw_em_indices(BMEditMesh *em) UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEAREA, col); BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(f, BM_ELEM_SELECT)) { - BM_face_center_mean_calc(bm, f, pos); + BM_face_center_mean_calc(f, pos); sprintf(numstr, "%d", i); view3d_cached_text_draw_add(pos, numstr, 0, txt_flag, col); } diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 6dff792352b..f19c8891f96 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -994,7 +994,7 @@ static int snap_curs_to_active(bContext *C, wmOperator *UNUSED(op)) BMEditSelection ese; if (EDBM_editselection_active_get(me->edit_btmesh, &ese)) { - EDBM_editselection_center(me->edit_btmesh, curs, &ese); + EDBM_editselection_center(curs, &ese); } mul_m4_v3(obedit->obmat, curs); diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 6c254dc4d19..0559237343a 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -4313,7 +4313,7 @@ int BoneEnvelope(TransInfo *t, const int UNUSED(mval[2])) } /* ******************** Edge Slide *************** */ -static BMEdge *get_other_edge(BMesh *bm, BMVert *v, BMEdge *e) +static BMEdge *get_other_edge(BMVert *v, BMEdge *e) { BMIter iter; BMEdge *e2; @@ -4326,7 +4326,7 @@ static BMEdge *get_other_edge(BMesh *bm, BMVert *v, BMEdge *e) return NULL; } -static BMLoop *get_next_loop(BMesh *UNUSED(bm), BMVert *v, BMLoop *l, +static BMLoop *get_next_loop(BMVert *v, BMLoop *l, BMEdge *olde, BMEdge *nexte, float vec[3]) { BMLoop *firstl; @@ -4419,7 +4419,7 @@ static int createSlideVerts(TransInfo *t) BLI_smallhash_init(&table); /*ensure valid selection*/ - BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { numsel = 0; BM_ITER_ELEM (e, &iter2, v, BM_EDGES_OF_VERT) { @@ -4440,7 +4440,7 @@ static int createSlideVerts(TransInfo *t) } } - BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { if (!BM_edge_is_manifold(e)) { MEM_freeN(sld); @@ -4451,7 +4451,7 @@ static int createSlideVerts(TransInfo *t) } j = 0; - BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { BM_elem_flag_enable(v, BM_ELEM_TAG); BLI_smallhash_insert(&table, (uintptr_t)v, SET_INT_IN_POINTER(j)); @@ -4473,7 +4473,7 @@ static int createSlideVerts(TransInfo *t) j = 0; while (1) { v = NULL; - BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_TAG)) break; @@ -4493,7 +4493,7 @@ static int createSlideVerts(TransInfo *t) /*first, rewind*/ numsel = 0; do { - e = get_other_edge(bm, v, e); + e = get_other_edge(v, e); if (!e) { e = v->e; break; @@ -4546,7 +4546,7 @@ static int createSlideVerts(TransInfo *t) v2=v, v = BM_edge_other_vert(e, v); e1 = e; - e = get_other_edge(bm, v, e); + e = get_other_edge(v, e); if (!e) { //v2=v, v = BM_edge_other_vert(l1->e, v); @@ -4571,8 +4571,8 @@ static int createSlideVerts(TransInfo *t) break; } - l1 = get_next_loop(bm, v, l1, e1, e, vec); - l2 = l2 ? get_next_loop(bm, v, l2, e1, e, vec2) : NULL; + l1 = get_next_loop(v, l1, e1, e, vec); + l2 = l2 ? get_next_loop(v, l2, e1, e, vec2) : NULL; j += 1; @@ -4591,7 +4591,7 @@ static int createSlideVerts(TransInfo *t) /* size = 50.0; */ /* UNUSED */ zero_v3(lastvec); zero_v3(dir); /* ee = le = NULL; */ /* UNUSED */ - BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { + BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { BMIter iter2; BMEdge *e2; @@ -4639,7 +4639,7 @@ static int createSlideVerts(TransInfo *t) } } - bmesh_edit_begin(em->bm, BMO_OP_FLAG_UNTAN_MULTIRES); + bmesh_edit_begin(bm, BMO_OP_FLAG_UNTAN_MULTIRES); /*create copies of faces for customdata projection*/ tempsv = sld->sv; @@ -4651,14 +4651,14 @@ static int createSlideVerts(TransInfo *t) BM_ITER_ELEM (f, &fiter, tempsv->v, BM_FACES_OF_VERT) { if (!BLI_smallhash_haskey(&sld->origfaces, (uintptr_t)f)) { - BMFace *copyf = BM_face_copy(em->bm, f, TRUE, TRUE); + BMFace *copyf = BM_face_copy(bm, f, TRUE, TRUE); - BM_elem_select_set(em->bm, copyf, FALSE); + BM_elem_select_set(bm, copyf, FALSE); BM_elem_flag_enable(copyf, BM_ELEM_HIDDEN); BM_ITER_ELEM (l, &liter, copyf, BM_LOOPS_OF_FACE) { - BM_elem_select_set(em->bm, l->v, FALSE); + BM_elem_select_set(bm, l->v, FALSE); BM_elem_flag_enable(l->v, BM_ELEM_HIDDEN); - BM_elem_select_set(em->bm, l->e, FALSE); + BM_elem_select_set(bm, l->e, FALSE); BM_elem_flag_enable(l->e, BM_ELEM_HIDDEN); } diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 2b60ff353d7..ba720ea8087 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -1953,7 +1953,7 @@ static void editmesh_set_connectivity_distance(BMEditMesh *em, float mtx[][3], f } /* loop-in-a-loop I know, but we need it! (ton) */ - static void get_face_center(float cent_r[3], BMesh *bm, BMVert *eve) + static void get_face_center(float cent_r[3], BMVert *eve) { BMFace *efa; @@ -1961,13 +1961,13 @@ static void editmesh_set_connectivity_distance(BMEditMesh *em, float mtx[][3], f BM_ITER_ELEM (efa, &iter, eve, BM_FACES_OF_VERT) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { - BM_face_center_mean_calc(bm, efa, cent_r); + BM_face_center_mean_calc(efa, cent_r); break; } } } -static void get_edge_center(float cent_r[3], BMesh *bm, BMVert *eve) +static void get_edge_center(float cent_r[3], BMVert *eve) { BMEdge *eed; BMIter iter; @@ -1993,9 +1993,9 @@ static void VertsToTransData(TransInfo *t, TransData *td, BMEditMesh *em, BMVert if (t->around==V3D_LOCAL) { if (em->selectmode & SCE_SELECT_FACE) - get_face_center(td->center, em->bm, eve); + get_face_center(td->center, eve); else if (em->selectmode & SCE_SELECT_EDGE) - get_edge_center(td->center, em->bm, eve); + get_edge_center(td->center, eve); } copy_v3_v3(td->iloc, td->loc); diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index eb04ad04aa7..a7f58373e41 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -1524,7 +1524,7 @@ void calculateCenter(TransInfo *t) BMEditMesh *em = BMEdit_FromObject(t->obedit); if (EDBM_editselection_active_get(em, &ese)) { - EDBM_editselection_center(em, t->center, &ese); + EDBM_editselection_center(t->center, &ese); calculateCenter2D(t); break; } diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index 180c631d39a..82e57cca705 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -301,7 +301,7 @@ int calc_manipulator_stats(const bContext *C) /* USE LAST SELECTE WITH ACTIVE */ if (v3d->around==V3D_ACTIVE && EDBM_editselection_active_get(em, &ese)) { - EDBM_editselection_center(em, vec, &ese); + EDBM_editselection_center(vec, &ese); calc_tw_center(scene, vec); totsel= 1; } diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c index 4bcfcdc76f1..f40e344deb7 100644 --- a/source/blender/editors/uvedit/uvedit_draw.c +++ b/source/blender/editors/uvedit/uvedit_draw.c @@ -200,7 +200,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe poly_copy_aspect(tf_uvorig, tf_uv, aspx, aspy, efa->len); - totarea += BM_face_area_calc(bm, efa); + totarea += BM_face_area_calc(efa); //totuvarea += tf_area(tf, efa->v4!=0); totuvarea += poly_uv_area(tf_uv, efa->len); @@ -232,7 +232,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe else { BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_TAG)) { - area = BM_face_area_calc(bm, efa) / totarea; + area = BM_face_area_calc(efa) / totarea; BLI_array_empty(tf_uv); BLI_array_empty(tf_uvorig); diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 006b2fcf564..7eb71ecc9d0 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -3511,7 +3511,7 @@ static int mark_seam_exec(bContext *C, wmOperator *UNUSED(op)) BMIter iter, liter; - BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { BM_ITER_ELEM (loop, &liter, efa, BM_LOOPS_OF_FACE) { if (uvedit_edge_selected(em, scene, loop)) { BM_elem_flag_enable(loop->e, BM_ELEM_SEAM); diff --git a/source/blender/python/bmesh/bmesh_py_types.c b/source/blender/python/bmesh/bmesh_py_types.c index 39b4ce06b9c..45f1cecb99d 100644 --- a/source/blender/python/bmesh/bmesh_py_types.c +++ b/source/blender/python/bmesh/bmesh_py_types.c @@ -1210,7 +1210,7 @@ static PyObject *bpy_bmvert_normal_update(BPy_BMVert *self) { BPY_BM_CHECK_OBJ(self); - BM_vert_normal_update(self->bm, self->v); + BM_vert_normal_update(self->v); Py_RETURN_NONE; } @@ -1325,7 +1325,7 @@ static PyObject *bpy_bmedge_normal_update(BPy_BMEdge *self) { BPY_BM_CHECK_OBJ(self); - BM_edge_normals_update(self->bm, self->e); + BM_edge_normals_update(self->e); Py_RETURN_NONE; } @@ -1426,7 +1426,7 @@ PyDoc_STRVAR(bpy_bmface_calc_area_doc, static PyObject *bpy_bmface_calc_area(BPy_BMFace *self) { BPY_BM_CHECK_OBJ(self); - return PyFloat_FromDouble(BM_face_area_calc(self->bm, self->f)); + return PyFloat_FromDouble(BM_face_area_calc(self->f)); } @@ -1441,7 +1441,7 @@ PyDoc_STRVAR(bpy_bmface_calc_perimeter_doc, static PyObject *bpy_bmface_calc_perimeter(BPy_BMFace *self) { BPY_BM_CHECK_OBJ(self); - return PyFloat_FromDouble(BM_face_perimeter_calc(self->bm, self->f)); + return PyFloat_FromDouble(BM_face_perimeter_calc(self->f)); } @@ -1458,7 +1458,7 @@ static PyObject *bpy_bmface_calc_center_mean(BPy_BMFace *self) float cent[3]; BPY_BM_CHECK_OBJ(self); - BM_face_center_mean_calc(self->bm, self->f, cent); + BM_face_center_mean_calc(self->f, cent); return Vector_CreatePyObject(cent, 3, Py_NEW, NULL); } @@ -1476,7 +1476,7 @@ static PyObject *bpy_bmface_calc_center_bounds(BPy_BMFace *self) float cent[3]; BPY_BM_CHECK_OBJ(self); - BM_face_center_bounds_calc(self->bm, self->f, cent); + BM_face_center_bounds_calc(self->f, cent); return Vector_CreatePyObject(cent, 3, Py_NEW, NULL); } @@ -1490,7 +1490,7 @@ static PyObject *bpy_bmface_normal_update(BPy_BMFace *self) { BPY_BM_CHECK_OBJ(self); - BM_face_normal_update(self->bm, self->f); + BM_face_normal_update(self->f); Py_RETURN_NONE; } From 801aaf5cdc46fca052b76b80d02c4e82f04a1d90 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 19 Apr 2012 15:00:54 +0000 Subject: [PATCH 128/156] Fix exposure being applied to cycles AO pass. --- intern/cycles/render/film.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/intern/cycles/render/film.cpp b/intern/cycles/render/film.cpp index ed4d0b2dcde..cc17f86fcb6 100644 --- a/intern/cycles/render/film.cpp +++ b/intern/cycles/render/film.cpp @@ -125,7 +125,6 @@ void Pass::add(PassType type, vector& passes) break; case PASS_AO: pass.components = 4; - pass.exposure = true; break; case PASS_SHADOW: pass.components = 4; From 6b006059ec55c6d0f0c8e7302b9b16bb81ee2365 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 19 Apr 2012 15:14:28 +0000 Subject: [PATCH 129/156] Fix #31016: rigid body joint constraint in game engine did not respect constraint enable/disable option. --- source/gameengine/Converter/BL_BlenderDataConversion.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index e112537d0f6..4c7170c4c9e 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -2757,7 +2757,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie, bRigidBodyJointConstraint *dat=(bRigidBodyJointConstraint *)curcon->data; - if (!dat->child) { + if (!dat->child && !(curcon->flag & CONSTRAINT_OFF)) { PHY_IPhysicsController* physctr2 = 0; From bea1a127511ff7659dcff7a30f2af46fc8a29304 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 16:20:07 +0000 Subject: [PATCH 130/156] fix [#31015] Rip has weird results in vertex selection mode vs face --- source/blender/editors/mesh/editmesh_rip.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index 43e9b885037..7ccfaf6074e 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -31,6 +31,7 @@ #include "MEM_guardedalloc.h" +#include "DNA_scene_types.h" #include "DNA_object_types.h" #include "RNA_define.h" @@ -361,6 +362,25 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) EdgeLoopPair *eloop_pairs; + /* running in face mode hardly makes sense, if we try to run code below it almost works ok + * but doesnt make sense logically because ripping is supposed to rip an edge apart. + * + * Rather then disable, we can split in this case + */ + if (em->selectmode == SCE_SELECT_FACE) { + EDBM_op_init(em, &bmop, op, "split geom=%hvef use_only_faces=%b", BM_ELEM_SELECT, TRUE); + BMO_op_exec(em->bm, &bmop); + BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, FALSE); + BMO_slot_buffer_hflag_enable(em->bm, &bmop, "geomout", BM_ALL, BM_ELEM_SELECT, TRUE); + if (!EDBM_op_finish(em, &bmop, op, TRUE)) { + return OPERATOR_CANCELLED; + } + else { + return OPERATOR_FINISHED; + } + } + + /* note on selection: * When calling edge split we operate on tagged edges rather then selected * this is important because the edges to operate on are extended by one, From a82eaf36ca44f18f97db11007e3accc21acbee4e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 16:57:50 +0000 Subject: [PATCH 131/156] bmesh rip: when there are selected faces call region_to_loop before ripping. gives better results then previous fix when there are selected faces as apart of an edge selection. --- source/blender/editors/mesh/editmesh_rip.c | 46 +++++++++++-------- source/blender/editors/mesh/editmesh_select.c | 12 ++--- 2 files changed, 32 insertions(+), 26 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index 7ccfaf6074e..f7895e931a2 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -45,6 +45,7 @@ #include "BKE_report.h" #include "BKE_tessmesh.h" +#include "WM_api.h" #include "WM_types.h" #include "ED_mesh.h" @@ -339,6 +340,27 @@ static void edbm_ripsel_deselect_helper(BMesh *bm, EdgeLoopPair *eloop_pairs, } /* --- end 'ripsel' selection handling code --- */ +/* return TRUE if the face is... +*/ +int edbm_rip_edge_is_ripable(BMEdge *e) +{ + int tot; + BMLoop *l_iter; + BMLoop *l_first; + + l_iter = l_first = e->l; + /* we could do more checks here, but save for face checks */ + do { + if (!BM_elem_flag_test(l_iter->f, BM_ELEM_HIDDEN)) { + if (!BM_elem_flag_test(l_iter->f, BM_ELEM_SELECT)) { + return TRUE; + } + tot++; + } + } while ((l_iter = l_iter->radial_next) != l_first); + + return tot < 2; +} /* based on mouse cursor position, it defines how is being ripped */ @@ -362,25 +384,11 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) EdgeLoopPair *eloop_pairs; - /* running in face mode hardly makes sense, if we try to run code below it almost works ok - * but doesnt make sense logically because ripping is supposed to rip an edge apart. - * - * Rather then disable, we can split in this case - */ - if (em->selectmode == SCE_SELECT_FACE) { - EDBM_op_init(em, &bmop, op, "split geom=%hvef use_only_faces=%b", BM_ELEM_SELECT, TRUE); - BMO_op_exec(em->bm, &bmop); - BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, FALSE); - BMO_slot_buffer_hflag_enable(em->bm, &bmop, "geomout", BM_ALL, BM_ELEM_SELECT, TRUE); - if (!EDBM_op_finish(em, &bmop, op, TRUE)) { - return OPERATOR_CANCELLED; - } - else { - return OPERATOR_FINISHED; - } + /* running in face mode hardly makes sense, so convert to region loop and rip */ + if (em->bm->totfacesel) { + WM_operator_name_call(C, "MESH_OT_region_to_loop", WM_OP_INVOKE_DEFAULT, NULL); } - /* note on selection: * When calling edge split we operate on tagged edges rather then selected * this is important because the edges to operate on are extended by one, @@ -395,7 +403,9 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) /* BM_ELEM_SELECT --> BM_ELEM_TAG */ BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { - BM_elem_flag_set(e, BM_ELEM_TAG, BM_elem_flag_test(e, BM_ELEM_SELECT)); + if (edbm_rip_edge_is_ripable(e)) { + BM_elem_flag_set(e, BM_ELEM_TAG, BM_elem_flag_test(e, BM_ELEM_SELECT)); + } } /* handle case of one vert selected. identify diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index d6aa3f48b85..c20c3e50e67 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -2518,13 +2518,8 @@ static int edbm_region_to_loop_exec(bContext *C, wmOperator *UNUSED(op)) BMFace *f; BMEdge *e; BMIter iter; - ViewContext vc; - - em_setup_viewcontext(C, &vc); - - BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { - BM_elem_flag_disable(e, BM_ELEM_TAG); - } + + BM_mesh_elem_hflag_disable_all(em->bm, BM_EDGE, BM_ELEM_TAG, FALSE); BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) { BMLoop *l1, *l2; @@ -2546,8 +2541,9 @@ static int edbm_region_to_loop_exec(bContext *C, wmOperator *UNUSED(op)) EDBM_flag_disable_all(em, BM_ELEM_SELECT); BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { - if (BM_elem_flag_test(e, BM_ELEM_TAG) && !BM_elem_flag_test(e, BM_ELEM_HIDDEN)) + if (BM_elem_flag_test(e, BM_ELEM_TAG)) { BM_edge_select_set(em->bm, e, TRUE); + } } /* If in face-only select mode, switch to edge select mode so that From e730c1af6db8547dd9949240f13c8eb712918dc0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 17:26:22 +0000 Subject: [PATCH 132/156] committed check by mistake, its not needed. --- source/blender/editors/mesh/editmesh_rip.c | 27 +------------------- source/blender/editors/mesh/editmesh_tools.c | 3 ++- 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index f7895e931a2..34666c2cb7a 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -340,29 +340,6 @@ static void edbm_ripsel_deselect_helper(BMesh *bm, EdgeLoopPair *eloop_pairs, } /* --- end 'ripsel' selection handling code --- */ -/* return TRUE if the face is... -*/ -int edbm_rip_edge_is_ripable(BMEdge *e) -{ - int tot; - BMLoop *l_iter; - BMLoop *l_first; - - l_iter = l_first = e->l; - /* we could do more checks here, but save for face checks */ - do { - if (!BM_elem_flag_test(l_iter->f, BM_ELEM_HIDDEN)) { - if (!BM_elem_flag_test(l_iter->f, BM_ELEM_SELECT)) { - return TRUE; - } - tot++; - } - } while ((l_iter = l_iter->radial_next) != l_first); - - return tot < 2; -} - - /* based on mouse cursor position, it defines how is being ripped */ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) { @@ -403,9 +380,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) /* BM_ELEM_SELECT --> BM_ELEM_TAG */ BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { - if (edbm_rip_edge_is_ripable(e)) { - BM_elem_flag_set(e, BM_ELEM_TAG, BM_elem_flag_test(e, BM_ELEM_SELECT)); - } + BM_elem_flag_set(e, BM_ELEM_TAG, BM_elem_flag_test(e, BM_ELEM_SELECT)); } /* handle case of one vert selected. identify diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index ce1ecf2a12e..5a568084d28 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -730,7 +730,8 @@ static int edbm_dupli_extrude_cursor_invoke(bContext *C, wmOperator *op, wmEvent em_setup_viewcontext(C, &vc); - use_proj = (vc.scene->toolsettings->snap_flag & SCE_SNAP) && (vc.scene->toolsettings->snap_mode == SCE_SNAP_MODE_FACE); + use_proj = ((vc.scene->toolsettings->snap_flag & SCE_SNAP) && + (vc.scene->toolsettings->snap_mode == SCE_SNAP_MODE_FACE)); INIT_MINMAX(min, max); From c7f8af329bb6c8cf7eeaa480269d75f86de9b896 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Thu, 19 Apr 2012 18:53:32 +0000 Subject: [PATCH 133/156] BMESH_TODO: randomize vertices working again. That whole "element re-arrange" area could use some love, though (e.g. make a single vert operator with more options, as faces; and make faces work in edit mode, probably no more reasons to switch to object mode?). Post-release TODO, anyway. Also spotted a glitch in BLI_rand code, imho, which makes first element of an array not guarantied to be shuffled by BLI_array_randomize()... No correction though, as this might/would affect other parts of the code! --- source/blender/blenlib/intern/rand.c | 2 + source/blender/editors/mesh/editmesh_tools.c | 104 +++++++++---------- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/source/blender/blenlib/intern/rand.c b/source/blender/blenlib/intern/rand.c index 20f0a11f75f..2e722c2a135 100644 --- a/source/blender/blenlib/intern/rand.c +++ b/source/blender/blenlib/intern/rand.c @@ -119,6 +119,8 @@ void rng_shuffleArray(RNG *rng, void *data, int elemSize, int numElems) temp = malloc(elemSize); + /* XXX Shouldn’t it rather be "while (i--) {" ? + * Else we have no guaranty first (0) element has a chance to be shuffled... --mont29 */ while (--i) { int j = rng_getInt(rng)%numElems; if (i!=j) { diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 5a568084d28..2d27b64d3af 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -3604,6 +3604,10 @@ void MESH_OT_select_mirror(wmOperatorType *ot) * geometry anymore. might need a sortof "swap" * function for bmesh elements. */ +/* TODO All this section could probably use a refresh... + * face code works in object mode, does everything in one op, while vert uses several... + */ + typedef struct xvertsort { int x; /* X screen-coordinate */ int org_idx; /* Original index of this vertex _in the mempool_ */ @@ -3908,75 +3912,66 @@ void MESH_OT_sort_faces(wmOperatorType *ot) ot->prop = RNA_def_enum(ot->srna, "type", type_items, 0, "Type", ""); } -#if 0 -/* called from buttons */ -static void hashvert_flag(EditMesh *em, int flag) +/* ******************************* Randomize verts ************************* */ +static void hashvert_flag(BMEditMesh *em, int flag, unsigned int seed) { - /* switch vertex order using hash table */ - EditVert *eve; - struct xvertsort *sortblock, *sb, onth, *newsort; - ListBase tbase; - int amount, a, b; + BMVert *ve; + BMIter iter; + char *block/* Just to mark protected vertices */, *t_blk; + int *randblock, *vmap, *t_idx, *r_idx; + int totvert, randomized = 0, /*protected = 0, */ i; - /* count */ - eve = em->verts.first; - amount = 0; - while (eve) { - if (eve->f & flag) amount++; - eve = eve->next; - } - if (amount == 0) return; + totvert = em->bm->totvert; - /* allocate memory */ - sb = sortblock = (struct xvertsort *)MEM_mallocN(sizeof(struct xvertsort) * amount, "sortremovedoub"); - eve = em->verts.first; - while (eve) { - if (eve->f & flag) { - sb->v1 = eve; - sb++; + block = MEM_callocN(sizeof(char) * totvert, "randvert block"); + randblock = MEM_callocN(sizeof(int) * totvert, "randvert randblock"); + BM_ITER_MESH_INDEX (ve, &iter, em->bm, BM_VERTS_OF_MESH, i) { + if (BM_elem_flag_test(ve, flag)) { + block[i] = FALSE; + randblock[randomized++] = i; } - eve = eve->next; - } - - BLI_srand(1); - - sb = sortblock; - for (a = 0; a < amount; a++, sb++) { - b = (int)(amount * BLI_drand()); - if (b >= 0 && b < amount) { - newsort = sortblock + b; - onth = *sb; - *sb = *newsort; - *newsort = onth; + else { + block[i] = TRUE; } } +/* protected = totvert - randomized;*/ +/* printf("%d verts: %d to be randomized, %d protected…\n", totvert, randomized, protected);*/ + if (randomized == 0) + return; - /* make temporal listbase */ - tbase.first = tbase.last = 0; - sb = sortblock; - while (amount--) { - eve = sb->v1; - BLI_remlink(&em->verts, eve); - BLI_addtail(&tbase, eve); - sb++; + + /* Randomize non-protected vertices indices, and create an array mapping old idx to new + * from both blocks, keeping protected vertices at the same indices. */ + vmap = randblock; + randblock = MEM_mallocN(sizeof(int) * randomized, "randvert randblock"); + memcpy(randblock, vmap, randomized * sizeof(int)); + BLI_array_randomize ((void*)randblock, sizeof(int), randomized, seed); + t_blk = block + totvert - 1; + t_idx = vmap + totvert - 1; + r_idx = randblock + randomized - 1; + for (i = totvert; i--; t_blk--, t_idx--) { + if (*t_blk) /* Protected! */ + *t_idx = i; + else + *t_idx = *r_idx--; } - BLI_movelisttolist(&em->verts, &tbase); + MEM_freeN(randblock); + MEM_freeN(block); - MEM_freeN(sortblock); + BM_mesh_remap(em->bm, vmap, NULL, NULL); + MEM_freeN(vmap); } -#endif -static int edbm_vertices_randomize_exec(bContext *C, wmOperator *UNUSED(op)) +static int edbm_vertices_randomize_exec(bContext *C, wmOperator *op) { Object *obedit = CTX_data_edit_object(C); BMEditMesh *em = BMEdit_FromObject(obedit); -#if 1 /* BMESH TODO */ - (void)em; -#else - hashvert_flag(em, SELECT); -#endif + unsigned int seed = RNA_int_get(op->ptr, "seed"); + + hashvert_flag(em, BM_ELEM_SELECT, seed); + return OPERATOR_FINISHED; } @@ -3994,6 +3989,9 @@ void MESH_OT_vertices_randomize(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* Properties */ + ot->prop = RNA_def_int(ot->srna, "seed", 0, 0, INT_MAX, "Seed", "Seed for the random generator", 0, 255); } /******end of qsort stuff ****/ From e387ccdb427030927bb2cf9552c3ce6eb6ffa6b7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 19:03:15 +0000 Subject: [PATCH 134/156] bmesh inset: add depth option (make use of relative and even offset options) --- source/blender/bmesh/intern/bmesh_opdefines.c | 1 + source/blender/bmesh/intern/bmesh_queries.c | 20 +++++++ source/blender/bmesh/intern/bmesh_queries.h | 1 + source/blender/bmesh/operators/bmo_inset.c | 57 ++++++++++++++++++- source/blender/editors/mesh/editmesh_tools.c | 13 +++-- 5 files changed, 87 insertions(+), 5 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c index 5896a18223a..98d2b31e57c 100644 --- a/source/blender/bmesh/intern/bmesh_opdefines.c +++ b/source/blender/bmesh/intern/bmesh_opdefines.c @@ -1099,6 +1099,7 @@ static BMOpDefine bmo_inset_def = { {BMO_OP_SLOT_BOOL, "use_even_offset"}, {BMO_OP_SLOT_BOOL, "use_relative_offset"}, {BMO_OP_SLOT_FLT, "thickness"}, + {BMO_OP_SLOT_FLT, "depth"}, {BMO_OP_SLOT_BOOL, "use_outset"}, {0} /* null-terminating sentinel */}, bmo_inset_exec, diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c index af614f78aff..09cd6a2f96b 100644 --- a/source/blender/bmesh/intern/bmesh_queries.c +++ b/source/blender/bmesh/intern/bmesh_queries.c @@ -866,6 +866,26 @@ float BM_vert_edge_angle(BMVert *v) } } +/** + * \note this isn't optimal to run on an array of verts, + * see 'solidify_add_thickness' for a function which runs on an array. + */ +float BM_vert_shell_factor(BMVert *v) +{ + BMIter iter; + BMLoop *l; + float accum_shell = 0.0f; + float accum_angle = 0.0f; + + BM_ITER_ELEM (l, &iter, v, BM_LOOPS_OF_VERT) { + const float face_angle = BM_loop_face_angle(l); + accum_shell += shell_angle_to_dist(angle_normalized_v3v3(v->no, l->f->no)) * face_angle; + accum_angle += face_angle; + } + + return accum_shell / accum_angle; +} + /** * Returns the edge existing between v1 and v2, or NULL if there isn't one. * diff --git a/source/blender/bmesh/intern/bmesh_queries.h b/source/blender/bmesh/intern/bmesh_queries.h index 73d724c7bdd..d69a57bdb40 100644 --- a/source/blender/bmesh/intern/bmesh_queries.h +++ b/source/blender/bmesh/intern/bmesh_queries.h @@ -65,6 +65,7 @@ float BM_edge_face_angle(BMEdge *e); void BM_edge_face_tangent(BMEdge *e, BMLoop *e_loop, float r_tangent[3]); float BM_vert_edge_angle(BMVert *v); +float BM_vert_shell_factor(BMVert *v); BMEdge *BM_edge_exists(BMVert *v1, BMVert *v2); diff --git a/source/blender/bmesh/operators/bmo_inset.c b/source/blender/bmesh/operators/bmo_inset.c index 4e4ea655414..c6fc173148f 100644 --- a/source/blender/bmesh/operators/bmo_inset.c +++ b/source/blender/bmesh/operators/bmo_inset.c @@ -80,6 +80,22 @@ static BMLoop *bm_edge_is_mixed_face_tag(BMLoop *l) } } +float bm_vert_avg_tag_dist(BMVert *v) +{ + BMIter iter; + BMEdge *e; + int tot; + float length = 0.0f; + + BM_ITER_ELEM_INDEX (e, &iter, v, BM_EDGES_OF_VERT, tot) { + BMVert *v_other = BM_edge_other_vert(e, v); + if (BM_elem_flag_test(v_other, BM_ELEM_TAG)) { + length += BM_edge_length_calc(e); + } + } + + return length / (float)tot; +} /** * implementation is as follows... @@ -98,7 +114,8 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) const int use_even_offset = BMO_slot_bool_get(op, "use_even_offset"); const int use_even_boundry = use_even_offset; /* could make own option */ const int use_relative_offset = BMO_slot_bool_get(op, "use_relative_offset"); - const float thickness = BMO_slot_float_get(op, "thickness"); + const float thickness = BMO_slot_float_get(op, "thickness"); + const float depth = BMO_slot_float_get(op, "depth"); int edge_info_len = 0; @@ -482,4 +499,42 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) /* we could flag new edges/verts too, is it useful? */ BMO_slot_buffer_from_enabled_flag(bm, op, "faceout", BM_FACE, ELE_NEW); + + /* cheap feature to add depth to the inset */ + if (depth != 0.0f) { + float (*varr_co)[3]; + BMOIter oiter; + + /* untag verts */ + BM_mesh_elem_hflag_disable_all(bm, BM_VERT, BM_ELEM_TAG, FALSE); + + /* tag face verts */ + BMO_ITER (f, &oiter, bm, op, "faces", BM_FACE) { + BM_ITER_ELEM (v, &iter, f, BM_VERTS_OF_FACE) { + BM_elem_flag_enable(v, BM_ELEM_TAG); + } + } + + /* do in 2 passes so moving the verts doesn't feed back into face angle checks + * which BM_vert_shell_factor uses. */ + + /* over allocate */ + varr_co = MEM_callocN(sizeof(*varr_co) * bm->totvert, __func__); + + BM_ITER_MESH_INDEX (v, &iter, bm, BM_VERTS_OF_MESH, i) { + if (BM_elem_flag_test(v, BM_ELEM_TAG)) { + const float fac = (depth * + (use_relative_offset ? bm_vert_avg_tag_dist(v) : 1.0f) * + (use_even_boundry ? BM_vert_shell_factor(v) : 1.0f)); + madd_v3_v3v3fl(varr_co[i], v->co, v->no, fac); + } + } + + BM_ITER_MESH_INDEX (v, &iter, bm, BM_VERTS_OF_MESH, i) { + if (BM_elem_flag_test(v, BM_ELEM_TAG)) { + copy_v3_v3(v->co, varr_co[i]); + } + } + MEM_freeN(varr_co); + } } diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 2d27b64d3af..26c50fb4feb 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -4200,13 +4200,16 @@ static int edbm_inset_exec(bContext *C, wmOperator *op) const int use_boundary = RNA_boolean_get(op->ptr, "use_boundary"); const int use_even_offset = RNA_boolean_get(op->ptr, "use_even_offset"); const int use_relative_offset = RNA_boolean_get(op->ptr, "use_relative_offset"); - const float thickness = RNA_float_get(op->ptr, "thickness"); + const float thickness = RNA_float_get(op->ptr, "thickness"); + const float depth = RNA_float_get(op->ptr, "depth"); const int use_outset = RNA_boolean_get(op->ptr, "use_outset"); const int use_select_inset = RNA_boolean_get(op->ptr, "use_select_inset"); /* not passed onto the BMO */ EDBM_op_init(em, &bmop, op, - "inset faces=%hf use_boundary=%b use_even_offset=%b use_relative_offset=%b thickness=%f use_outset=%b", - BM_ELEM_SELECT, use_boundary, use_even_offset, use_relative_offset, thickness, use_outset); + "inset faces=%hf use_boundary=%b use_even_offset=%b use_relative_offset=%b " + "thickness=%f depth=%f use_outset=%b", + BM_ELEM_SELECT, use_boundary, use_even_offset, use_relative_offset, + thickness, depth, use_outset); BMO_op_exec(em->bm, &bmop); @@ -4252,9 +4255,11 @@ void MESH_OT_inset(wmOperatorType *ot) RNA_def_boolean(ot->srna, "use_even_offset", TRUE, "Offset Even", "Scale the offset to give more even thickness"); RNA_def_boolean(ot->srna, "use_relative_offset", FALSE, "Offset Relative", "Scale the offset by surrounding geometry"); - prop = RNA_def_float(ot->srna, "thickness", 0.01f, 0.0f, FLT_MAX, "thickness", "", 0.0f, 10.0f); + prop = RNA_def_float(ot->srna, "thickness", 0.01f, 0.0f, FLT_MAX, "Thickness", "", 0.0f, 10.0f); /* use 1 rather then 10 for max else dragging the button moves too far */ RNA_def_property_ui_range(prop, 0.0, 1.0, 0.01, 4); + prop = RNA_def_float(ot->srna, "depth", 0.0f, -FLT_MAX, FLT_MAX, "Depth", "", -10.0f, 10.0f); + RNA_def_property_ui_range(prop, -10.0f, 10.0f, 0.01, 4); RNA_def_boolean(ot->srna, "use_outset", FALSE, "Outset", "Outset rather than inset"); RNA_def_boolean(ot->srna, "use_select_inset", TRUE, "Select Outer", "Select the new inset faces"); From 417117e20753baa2a2b69dd305e989855889393d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 19:13:57 +0000 Subject: [PATCH 135/156] bmesh py api: expose BMVert.calc_shell_factor() --- source/blender/python/bmesh/bmesh_py_types.c | 22 +++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/source/blender/python/bmesh/bmesh_py_types.c b/source/blender/python/bmesh/bmesh_py_types.c index 45f1cecb99d..c1404e7ef0a 100644 --- a/source/blender/python/bmesh/bmesh_py_types.c +++ b/source/blender/python/bmesh/bmesh_py_types.c @@ -1189,9 +1189,9 @@ static PyObject *bpy_bmvert_copy_from_face_interp(BPy_BMVert *self, PyObject *ar PyDoc_STRVAR(bpy_bmvert_calc_edge_angle_doc, ".. method:: calc_edge_angle()\n" "\n" -" Return the angle between 2 connected edges.\n" +" Return the angle between this verts 2 connected edges.\n" "\n" -" :return: The angle between both edges in radians.\n" +" :return: Angle between edges in radians.\n" " :rtype: float\n" ); static PyObject *bpy_bmvert_calc_edge_angle(BPy_BMVert *self) @@ -1200,6 +1200,21 @@ static PyObject *bpy_bmvert_calc_edge_angle(BPy_BMVert *self) return PyFloat_FromDouble(BM_vert_edge_angle(self->v)); } +PyDoc_STRVAR(bpy_bmvert_calc_shell_factor_doc, +".. method:: calc_shell_factor()\n" +"\n" +" Return a multiplier calculated based on the sharpness of the vertex.\n" +" Where a flat surface gives 1.0, and higher values sharper edges.\n" +" This is used to maintain shell thickness when offsetting verts along their normals.\n" +"\n" +" :return: offset multiplier\n" +" :rtype: float\n" +); +static PyObject *bpy_bmvert_calc_shell_factor(BPy_BMVert *self) +{ + BPY_BM_CHECK_OBJ(self); + return PyFloat_FromDouble(BM_vert_shell_factor(self->v)); +} PyDoc_STRVAR(bpy_bmvert_normal_update_doc, ".. method:: normal_update()\n" @@ -2094,7 +2109,8 @@ static struct PyMethodDef bpy_bmvert_methods[] = { {"copy_from_face_interp", (PyCFunction)bpy_bmvert_copy_from_face_interp, METH_VARARGS, bpy_bmvert_copy_from_face_interp_doc}, {"copy_from_vert_interp", (PyCFunction)bpy_bmvert_copy_from_vert_interp, METH_VARARGS, bpy_bmvert_copy_from_vert_interp_doc}, - {"calc_vert_angle", (PyCFunction)bpy_bmvert_calc_edge_angle, METH_NOARGS, bpy_bmvert_calc_edge_angle_doc}, + {"calc_vert_angle", (PyCFunction)bpy_bmvert_calc_edge_angle, METH_NOARGS, bpy_bmvert_calc_edge_angle_doc}, + {"calc_shell_factor", (PyCFunction)bpy_bmvert_calc_shell_factor, METH_NOARGS, bpy_bmvert_calc_shell_factor_doc}, {"normal_update", (PyCFunction)bpy_bmvert_normal_update, METH_NOARGS, bpy_bmvert_normal_update_doc}, From ebbfcd71e5ea35a64759ecbf9bc0f34d582a6bde Mon Sep 17 00:00:00 2001 From: Joseph Eagar Date: Thu, 19 Apr 2012 21:14:11 +0000 Subject: [PATCH 136/156] Fixed crash in iter api, triggered by calling index_update() on the loop py seq in the py api. Note, I didn't fix the underlying problem (bad iter type) so loops.index_update() still isn't working (it's just not crashing). --- source/blender/bmesh/intern/bmesh_iterators_inline.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/blender/bmesh/intern/bmesh_iterators_inline.h b/source/blender/bmesh/intern/bmesh_iterators_inline.h index 57f0da4081b..5b5da53f842 100644 --- a/source/blender/bmesh/intern/bmesh_iterators_inline.h +++ b/source/blender/bmesh/intern/bmesh_iterators_inline.h @@ -161,10 +161,12 @@ BLI_INLINE int BM_iter_init(BMIter *iter, BMesh *bm, const char itype, void *dat iter->edata = data; break; default: + return FALSE; break; } - + iter->begin(iter); + return TRUE; } From 741a177a74057b9baaae17640205017ca393ed89 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 21:47:32 +0000 Subject: [PATCH 137/156] bmesh: improve rip tool - When the rip extends into a fan, pick the opposite edge in the fan (rather then 2 along) - When stepping over the fan to find the rip edge, walk in the direction closest to the mouse (generally works nicer) --- source/blender/bmesh/intern/bmesh_core.c | 3 +- source/blender/bmesh/intern/bmesh_queries.c | 53 +++++++++++++++++ source/blender/bmesh/intern/bmesh_queries.h | 1 + source/blender/editors/mesh/editmesh_rip.c | 65 ++++++++++++++++----- 4 files changed, 105 insertions(+), 17 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index 76095728d5a..51ca11b0898 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -814,8 +814,7 @@ static int UNUSED_FUNCTION(count_flagged_disk)(BMVert *v, int flag) do { i += BM_ELEM_API_FLAG_TEST(e, flag) ? 1 : 0; - e = bmesh_disk_edge_next(e, v); - } while (e != v->e); + } while ((e = bmesh_disk_edge_next(e, v)) != v->e); return i; } diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c index 09cd6a2f96b..3561092b1cf 100644 --- a/source/blender/bmesh/intern/bmesh_queries.c +++ b/source/blender/bmesh/intern/bmesh_queries.c @@ -308,6 +308,59 @@ BMVert *BM_edge_other_vert(BMEdge *e, BMVert *v) return bmesh_edge_other_vert_get(e, v); } +/** + * The function takes a vertex at the center of a fan and returns the opposite edge in the fan. + * All edges in the fan must be manifold, otherwise return NULL. + * + * \note This could (probably) be done more effieiently. + */ +BMEdge *BM_vert_other_disk_edge(BMVert *v, BMEdge *e_first) +{ + BMLoop *l_a; + int tot = 0; + int i; + + BLI_assert(BM_vert_in_edge(e_first, v)); + + l_a = e_first->l; + do { + l_a = BM_loop_other_vert_loop(l_a, v); + l_a = BM_vert_in_edge(l_a->e, v) ? l_a : l_a->prev; + if (BM_edge_is_manifold(l_a->e)) { + l_a = l_a->radial_next; + } + else { + return NULL; + } + + tot++; + } while (l_a != e_first->l); + + /* we know the total, now loop half way */ + tot /= 2; + i = 0; + + l_a = e_first->l; + do { + if (i == tot) { + l_a = BM_vert_in_edge(l_a->e, v) ? l_a : l_a->prev; + return l_a->e; + } + + l_a = BM_loop_other_vert_loop(l_a, v); + l_a = BM_vert_in_edge(l_a->e, v) ? l_a : l_a->prev; + if (BM_edge_is_manifold(l_a->e)) { + l_a = l_a->radial_next; + } + /* this wont have changed from the previous loop */ + + + i++; + } while (l_a != e_first->l); + + return NULL; +} + /** * Returms edge length */ diff --git a/source/blender/bmesh/intern/bmesh_queries.h b/source/blender/bmesh/intern/bmesh_queries.h index d69a57bdb40..5178311eea4 100644 --- a/source/blender/bmesh/intern/bmesh_queries.h +++ b/source/blender/bmesh/intern/bmesh_queries.h @@ -49,6 +49,7 @@ int BM_vert_edge_count_nonwire(BMVert *v); int BM_vert_edge_count(BMVert *v); int BM_edge_face_count(BMEdge *e); int BM_vert_face_count(BMVert *v); +BMEdge *BM_vert_other_disk_edge(BMVert *v, BMEdge *e); int BM_vert_is_wire(BMVert *v); int BM_edge_is_wire(BMEdge *e); diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index 34666c2cb7a..3d310e5ea90 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -66,7 +66,7 @@ static float edbm_rip_rip_edgedist(ARegion *ar, float mat[][4], float *co1, floa return dist_to_line_segment_v2(mvalf, vec1, vec2); } -static float edbm_rip_edge_side_measure(BMEdge *e, +static float edbm_rip_edge_side_measure(BMEdge *e, BMLoop *e_l, ARegion *ar, float projectMat[4][4], const float fmval[2]) { @@ -80,6 +80,8 @@ static float edbm_rip_edge_side_measure(BMEdge *e, BMVert *v1_other; BMVert *v2_other; + BLI_assert(BM_vert_in_edge(e, e_l->v)); + /* method for calculating distance: * * for each edge: calculate face center, then made a vector @@ -88,8 +90,8 @@ static float edbm_rip_edge_side_measure(BMEdge *e, /* rather then the face center, get the middle of * both edge verts connected to this one */ - v1_other = BM_face_other_vert_loop(e->l->f, e->v2, e->v1)->v; - v2_other = BM_face_other_vert_loop(e->l->f, e->v1, e->v2)->v; + v1_other = BM_face_other_vert_loop(e_l->f, e->v2, e->v1)->v; + v2_other = BM_face_other_vert_loop(e_l->f, e->v1, e->v2)->v; mid_v3_v3v3(cent, v1_other->co, v2_other->co); mid_v3_v3v3(mid, e->v1->co, e->v2->co); @@ -323,12 +325,12 @@ static void edbm_ripsel_deselect_helper(BMesh *bm, EdgeLoopPair *eloop_pairs, e = lp->l_a->e; v_prev = edbm_ripsel_edloop_pair_start_vert(e); for (; e; e = edbm_ripsel_edge_uid_step(e, &v_prev)) { - score_a += edbm_rip_edge_side_measure(e, ar, projectMat, fmval); + score_a += edbm_rip_edge_side_measure(e, e->l, ar, projectMat, fmval); } e = lp->l_b->e; v_prev = edbm_ripsel_edloop_pair_start_vert(e); for (; e; e = edbm_ripsel_edge_uid_step(e, &v_prev)) { - score_b += edbm_rip_edge_side_measure(e, ar, projectMat, fmval); + score_b += edbm_rip_edge_side_measure(e, e->l, ar, projectMat, fmval); } e = (score_a > score_b) ? lp->l_a->e : lp->l_b->e; @@ -538,26 +540,59 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) dist = FLT_MAX; } else { + int totedge; + int all_minifold; /* expand edge selection */ BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { e2 = NULL; i = 0; + totedge = 0; + all_minifold = TRUE; BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { - /* important to check selection rather then tag here - * else we get feedback loop */ - if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { - e2 = e; - i++; + + if (!BM_edge_is_wire(e) && + !BM_elem_flag_test(e, BM_ELEM_HIDDEN)) + { + /* important to check selection rather then tag here + * else we get feedback loop */ + if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { + e2 = e; + i++; + } + totedge++; + } + + /** #BM_vert_other_disk_edge has no hidden checks so don't check hidden here */ + if ((all_minifold == TRUE) && (BM_edge_is_manifold(e) == FALSE)) { + all_minifold = FALSE; } } + /* single edge, extend */ if (i == 1 && e2->l) { - l = BM_face_other_edge_loop(e2->l->f, e2, v); - l = l->radial_next; - l = BM_face_other_edge_loop(l->f, l->e, v); + if ((totedge == 4) || (all_minifold == FALSE)) { + BMLoop *l_a = e2->l; + BMLoop *l_b = l_a->radial_next; - if (l) { - BM_elem_flag_enable(l->e, BM_ELEM_TAG); + /* find the best face to follow, this wat the edge won't point away from + * the mouse when there are more then 4 (takes the shortest face fan around) */ + l = (edbm_rip_edge_side_measure(e2, l_a, ar, projectMat, fmval) < + edbm_rip_edge_side_measure(e2, l_b, ar, projectMat, fmval)) ? l_a : l_b; + + l = BM_face_other_edge_loop(l->f, e2, v); + l = l->radial_next; + l = BM_face_other_edge_loop(l->f, l->e, v); + + if (l) { + BM_elem_flag_enable(l->e, BM_ELEM_TAG); + } + } + else { + e = BM_vert_other_disk_edge(v, e2); + + if (e) { + BM_elem_flag_enable(e, BM_ELEM_TAG); + } } } } From 028dbb132d7a0f27adb9fab539fc9409043ea742 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 22:40:09 +0000 Subject: [PATCH 138/156] add asserts for invalid iteratpr values so we can catch them in debug mode. --- source/blender/bmesh/intern/bmesh_iterators_inline.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/blender/bmesh/intern/bmesh_iterators_inline.h b/source/blender/bmesh/intern/bmesh_iterators_inline.h index 5b5da53f842..96816521493 100644 --- a/source/blender/bmesh/intern/bmesh_iterators_inline.h +++ b/source/blender/bmesh/intern/bmesh_iterators_inline.h @@ -59,14 +59,20 @@ BLI_INLINE int BM_iter_init(BMIter *iter, BMesh *bm, const char itype, void *dat /* inlining optimizes out this switch when called with the defined type */ switch ((BMIterType)itype) { case BM_VERTS_OF_MESH: + BLI_assert(bm != NULL); + BLI_assert(data == NULL); iter->begin = bmiter__vert_of_mesh_begin; iter->step = bmiter__vert_of_mesh_step; break; case BM_EDGES_OF_MESH: + BLI_assert(bm != NULL); + BLI_assert(data == NULL); iter->begin = bmiter__edge_of_mesh_begin; iter->step = bmiter__edge_of_mesh_step; break; case BM_FACES_OF_MESH: + BLI_assert(bm != NULL); + BLI_assert(data == NULL); iter->begin = bmiter__face_of_mesh_begin; iter->step = bmiter__face_of_mesh_step; break; @@ -161,6 +167,8 @@ BLI_INLINE int BM_iter_init(BMIter *iter, BMesh *bm, const char itype, void *dat iter->edata = data; break; default: + /* should never happen */ + BLI_assert(0); return FALSE; break; } From 384f87cd1cbb3549daa448e499184eec5183ae97 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 23:16:57 +0000 Subject: [PATCH 139/156] rip tool wasnt working on a single edge selection in some cases (own error in recent fix). --- source/blender/bmesh/bmesh.h | 2 +- source/blender/editors/mesh/editmesh_rip.c | 37 +++++++++----------- source/blender/editors/mesh/editmesh_tools.c | 8 ++--- 3 files changed, 21 insertions(+), 26 deletions(-) diff --git a/source/blender/bmesh/bmesh.h b/source/blender/bmesh/bmesh.h index 81bd164fbdf..6b41babd927 100644 --- a/source/blender/bmesh/bmesh.h +++ b/source/blender/bmesh/bmesh.h @@ -202,7 +202,7 @@ extern "C" { #include "DNA_customdata_types.h" /* BMesh struct in bmesh_class.h uses */ #include -// #include "BLI_utildefines.h" +#include #include "bmesh_class.h" diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index 3d310e5ea90..8ae05e3b1b8 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -361,7 +361,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) float d; const int totedge_orig = bm->totedge; - EdgeLoopPair *eloop_pairs; + EdgeLoopPair *eloop_pairs = NULL; /* running in face mode hardly makes sense, so convert to region loop and rip */ if (em->bm->totfacesel) { @@ -388,7 +388,10 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) /* handle case of one vert selected. identify * closest edge around that vert to mouse cursor, * then rip two adjacent edges in the vert fan. */ + if (bm->totvertsel == 1 && bm->totedgesel == 0 && bm->totfacesel == 0) { + /* --- Vert-Rip --- */ + BMEditSelection ese; int totboundary_edge = 0; singlesel = TRUE; @@ -540,8 +543,13 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) dist = FLT_MAX; } else { + /* --- Edge-Rip --- */ int totedge; int all_minifold; + + /* important this runs on the original selection, before tempering with tagging */ + eloop_pairs = edbm_ripsel_looptag_helper(bm); + /* expand edge selection */ BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { e2 = NULL; @@ -598,11 +606,9 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) } } - eloop_pairs = edbm_ripsel_looptag_helper(bm); - if (!EDBM_op_init(em, &bmop, op, "edgesplit edges=%he verts=%hv use_verts=%b", BM_ELEM_TAG, BM_ELEM_SELECT, TRUE)) { - MEM_freeN(eloop_pairs); + if (eloop_pairs) MEM_freeN(eloop_pairs); return OPERATOR_CANCELLED; } @@ -612,26 +618,10 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) EDBM_op_finish(em, &bmop, op, TRUE); BKE_report(op->reports, RPT_ERROR, "No edges could be ripped"); - MEM_freeN(eloop_pairs); + if (eloop_pairs) MEM_freeN(eloop_pairs); return OPERATOR_CANCELLED; } -#if 1 - edbm_ripsel_deselect_helper(bm, eloop_pairs, - ar, projectMat, fmval); - MEM_freeN(eloop_pairs); -#else - { - /* simple per edge selection check, saves a lot of code and is almost good enough */ - BMOIter siter; - BMO_ITER (e, &siter, bm, &bmop, "edgeout", BM_EDGE) { - if (edbm_rip_edge_side_measure(e, ar, projectMat, fmval) > 0.0f) { - BM_elem_select_set(bm, e, FALSE); - } - } - } -#endif - if (singlesel) { BMVert *v_best = NULL; float l_prev_co[3], l_next_co[3], l_corner_co[3]; @@ -676,6 +666,11 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) } #endif } + else { + edbm_ripsel_deselect_helper(bm, eloop_pairs, + ar, projectMat, fmval); + MEM_freeN(eloop_pairs); + } EDBM_selectmode_flush(em); diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 26c50fb4feb..2c1c25b2a91 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -350,7 +350,7 @@ static short edbm_extrude_vert(Object *obedit, BMEditMesh *em, const char hflag, BMEdge *eed; /* ensure vert flags are consistent for edge selections */ - BM_ITER_MESH(eed, &iter, em->bm, BM_EDGES_OF_MESH) { + BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, hflag)) { if (hflag & BM_ELEM_SELECT) { BM_elem_select_set(em->bm, eed->v1, TRUE); @@ -2663,7 +2663,7 @@ static int edbm_knife_cut_exec(bContext *C, wmOperator *op) } /* get the cut curve */ - RNA_BEGIN(op->ptr, itemptr, "path") { + RNA_BEGIN (op->ptr, itemptr, "path") { RNA_float_get_array(&itemptr, "loc", (float *)&curve[len]); len++; if (len >= MAX_CUTS) { @@ -3917,7 +3917,7 @@ static void hashvert_flag(BMEditMesh *em, int flag, unsigned int seed) { BMVert *ve; BMIter iter; - char *block/* Just to mark protected vertices */, *t_blk; + char *block /* Just to mark protected vertices */, *t_blk; int *randblock, *vmap, *t_idx, *r_idx; int totvert, randomized = 0, /*protected = 0, */ i; @@ -3945,7 +3945,7 @@ static void hashvert_flag(BMEditMesh *em, int flag, unsigned int seed) vmap = randblock; randblock = MEM_mallocN(sizeof(int) * randomized, "randvert randblock"); memcpy(randblock, vmap, randomized * sizeof(int)); - BLI_array_randomize ((void*)randblock, sizeof(int), randomized, seed); + BLI_array_randomize((void *)randblock, sizeof(int), randomized, seed); t_blk = block + totvert - 1; t_idx = vmap + totvert - 1; r_idx = randblock + randomized - 1; From 80ff1984f87dc44e984edb5b84e41f769fa64fee Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 Apr 2012 23:23:29 +0000 Subject: [PATCH 140/156] bmesh py api: remove bmesh.loops.index_update(), it wasn't working, as joe noticed. --- source/blender/python/bmesh/bmesh_py_types.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/python/bmesh/bmesh_py_types.c b/source/blender/python/bmesh/bmesh_py_types.c index c1404e7ef0a..ee91b19a5a4 100644 --- a/source/blender/python/bmesh/bmesh_py_types.c +++ b/source/blender/python/bmesh/bmesh_py_types.c @@ -2201,7 +2201,7 @@ static struct PyMethodDef bpy_bmfaceseq_methods[] = { static struct PyMethodDef bpy_bmloopseq_methods[] = { /* odd function, initializes index values */ - {"index_update", (PyCFunction)bpy_bmelemseq_index_update, METH_NOARGS, bpy_bmelemseq_index_update_doc}, + /* no: index_update() function since we cant iterate over loops */ {NULL, NULL, 0, NULL} }; From 3d851bfd5bf4fd486d8e9b8baec3d184dd4be939 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 20 Apr 2012 10:52:13 +0000 Subject: [PATCH 141/156] knife tool modifications from user freedback it seems there are 2 use cases, both valid. * Select geometry and cut the selection in half (as 2.4x worked) * Point-to-point define the faces to cut, dont cut through everything (only cut what you see). With the second, since you are already selecting the edges to cut and snapping to them. only cutting the selecting is limiting/annoying. Modifying these options while the knife tool runs doesn't work well, so expose under 2 keys, K, Shift-K. --- .../startup/bl_ui/space_view3d_toolbar.py | 8 +++ source/blender/editors/mesh/editmesh_bvh.c | 21 +++++- source/blender/editors/mesh/editmesh_bvh.h | 3 +- source/blender/editors/mesh/editmesh_knife.c | 72 ++++++++----------- source/blender/editors/mesh/mesh_intern.h | 2 +- source/blender/editors/mesh/mesh_ops.c | 11 ++- 6 files changed, 67 insertions(+), 50 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py index 52658411fb0..c494590d005 100644 --- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py +++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py @@ -142,6 +142,14 @@ class VIEW3D_PT_tools_meshedit(View3DPanel, Panel): col.operator("mesh.spin") col.operator("mesh.screw") + row = col.row(align=True) + props = row.operator("mesh.knife_tool", text="Knife") + props.use_occlude_geometry = True + props.only_select = False + props = row.operator("mesh.knife_tool", text="Select") + props.use_occlude_geometry = False + props.only_select = True + col = layout.column(align=True) col.label(text="Remove:") col.menu("VIEW3D_MT_edit_mesh_delete") diff --git a/source/blender/editors/mesh/editmesh_bvh.c b/source/blender/editors/mesh/editmesh_bvh.c index 8be0cc0aa36..6155ad1be1c 100644 --- a/source/blender/editors/mesh/editmesh_bvh.c +++ b/source/blender/editors/mesh/editmesh_bvh.c @@ -104,8 +104,16 @@ BMBVHTree *BMBVH_NewBVH(BMEditMesh *em, int flag, Scene *scene, Object *obedit) tree->bm = em->bm; tree->epsilon = FLT_EPSILON * 2.0f; tree->flag = flag; - - if (flag & BMBVH_RESPECT_HIDDEN) { + + if (flag & (BMBVH_RESPECT_SELECT)) { + tottri = 0; + for (i = 0; i < em->tottri; i++) { + if (BM_elem_flag_test(em->looptris[i][0]->f, BM_ELEM_SELECT)) { + tottri++; + } + } + } + else if (flag & (BMBVH_RESPECT_HIDDEN)) { tottri = 0; for (i = 0; i < em->tottri; i++) { if (!BM_elem_flag_test(em->looptris[i][0]->f, BM_ELEM_HIDDEN)) { @@ -146,7 +154,14 @@ BMBVHTree *BMBVH_NewBVH(BMEditMesh *em, int flag, Scene *scene, Object *obedit) for (i = 0; i < em->tottri; i++) { - if (flag & BMBVH_RESPECT_HIDDEN) { + + if (flag & BMBVH_RESPECT_SELECT) { + /* note, the arrays wont allign now! take care */ + if (!BM_elem_flag_test(em->looptris[i][0]->f, BM_ELEM_SELECT)) { + continue; + } + } + else if (flag & BMBVH_RESPECT_HIDDEN) { /* note, the arrays wont allign now! take care */ if (BM_elem_flag_test(em->looptris[i][0]->f, BM_ELEM_HIDDEN)) { continue; diff --git a/source/blender/editors/mesh/editmesh_bvh.h b/source/blender/editors/mesh/editmesh_bvh.h index 2b0a7cc02dd..e2b45062e41 100644 --- a/source/blender/editors/mesh/editmesh_bvh.h +++ b/source/blender/editors/mesh/editmesh_bvh.h @@ -64,7 +64,8 @@ struct BMVert *BMBVH_FindClosestVert(struct BMBVHTree *tree, float *co, float ma enum { BMBVH_USE_CAGE = 1, /* project geometry onto modifier cage */ BMBVH_RETURN_ORIG = 2, /* use with BMBVH_USE_CAGE, returns hits in relation to original geometry */ - BMBVH_RESPECT_HIDDEN = 4 + BMBVH_RESPECT_SELECT = 4, /* restrict to hidden geometry (overrides BMBVH_RESPECT_HIDDEN) */ + BMBVH_RESPECT_HIDDEN = 8 /* omit hidden geometry */ }; #endif /* __EDITBMESH_BVH_H__ */ diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 1f272e83023..9134fe49837 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -71,8 +71,6 @@ #define KMAXDIST 10 /* max mouse distance from edge before not detecting it */ -#define USE_SELECTED_ONLY - /* knifetool operator */ typedef struct KnifeVert { BMVert *v; /* non-NULL if this is an original vert */ @@ -159,8 +157,13 @@ typedef struct knifetool_opdata { BLI_mempool *refs; float projmat[4][4]; - int is_ortho; - int cut_through; + + short is_ortho; + + /* operatpr options */ + char cut_through; /* preference, can be modified at runtime (that feature may go) */ + char only_select; /* set on initialization */ + float clipsta, clipend; enum { @@ -733,15 +736,6 @@ static void knife_add_cut(knifetool_opdata *kcd) if (len_v3v3(kcd->cur.cage, lh->realhit) < FLT_EPSILON * 80) continue; -#if 0 /* not working perfect, ignore for now */ -#ifdef USE_SELECTED_ONLY - /* don't mess up logic by skipping too early */ - if (lh->kfe->e && !BM_elem_flag_test(lh->kfe->e, BM_ELEM_SELECT)) { - continue; - } -#endif -#endif - if (kcd->prev.is_space) { kcd->prev.is_space = 0; copy_v3_v3(kcd->prev.co, lh->hit); @@ -976,13 +970,6 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) lh = kcd->linehits; for (i = 0; i < kcd->totlinehit; i++, lh++) { float sv1[3], sv2[3]; - int do_draw = TRUE; - -#ifdef USE_SELECTED_ONLY - if (!BM_elem_flag_test(lh->f, BM_ELEM_SELECT)) { - do_draw = FALSE; - } -#endif knife_project_v3(kcd, lh->kfe->v1->cageco, sv1); knife_project_v3(kcd, lh->kfe->v2->cageco, sv2); @@ -990,12 +977,12 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) if (len_v2v2(lh->schit, sv1) < kcd->vthresh / 4.0f) { copy_v3_v3(lh->cagehit, lh->kfe->v1->cageco); - if (do_draw) glVertex3fv(lh->cagehit); + glVertex3fv(lh->cagehit); lh->v = lh->kfe->v1; } else if (len_v2v2(lh->schit, sv2) < kcd->vthresh / 4.0f) { copy_v3_v3(lh->cagehit, lh->kfe->v2->cageco); - if (do_draw) glVertex3fv(lh->cagehit); + glVertex3fv(lh->cagehit); lh->v = lh->kfe->v2; } } @@ -1007,13 +994,6 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) glBegin(GL_POINTS); lh = kcd->linehits; for (i = 0; i < kcd->totlinehit; i++, lh++) { - -#ifdef USE_SELECTED_ONLY - if (!BM_elem_flag_test(lh->f, BM_ELEM_SELECT)) { - continue; - } -#endif - glVertex3fv(lh->cagehit); } glEnd(); @@ -2655,11 +2635,11 @@ static void knife_make_cuts(knifetool_opdata *kcd) for (lst = BLI_smallhash_iternew(ehash, &hiter, (uintptr_t *)&e); lst; lst = BLI_smallhash_iternext(&hiter, (uintptr_t *)&e)) { -#ifdef USE_SELECTED_ONLY - if (!BM_elem_flag_test(e, BM_ELEM_SELECT)) { - continue; + if (kcd->only_select) { + if (!BM_elem_flag_test(e, BM_ELEM_SELECT)) { + continue; + } } -#endif sort_by_frac_along(lst, e); for (ref = lst->first; ref; ref = ref->next) { @@ -2673,11 +2653,12 @@ static void knife_make_cuts(knifetool_opdata *kcd) for (lst = BLI_smallhash_iternew(fhash, &hiter, (uintptr_t *)&f); lst; lst = BLI_smallhash_iternext(&hiter, (uintptr_t *)&f)) { -#ifdef USE_SELECTED_ONLY - if (!BM_elem_flag_test(f, BM_ELEM_SELECT)) { - continue; + + if (kcd->only_select) { + if (!BM_elem_flag_test(f, BM_ELEM_SELECT)) { + continue; + } } -#endif knife_make_face_cuts(kcd, f, lst); } @@ -2802,6 +2783,7 @@ static int knifetool_init(bContext *C, wmOperator *op, int UNUSED(do_cut)) DerivedMesh *cage, *final; SmallHash shash; void *data[3]; + const short only_select = RNA_boolean_get(op->ptr, "only_select"); /* alloc new customdata */ kcd = op->customdata = MEM_callocN(sizeof(knifetool_opdata), "knifetool Modal Op Data"); @@ -2827,7 +2809,11 @@ static int knifetool_init(bContext *C, wmOperator *op, int UNUSED(do_cut)) cage->foreachMappedVert(cage, cage_mapped_verts_callback, data); BLI_smallhash_release(&shash); - kcd->bmbvh = BMBVH_NewBVH(kcd->em, BMBVH_USE_CAGE | BMBVH_RETURN_ORIG | BMBVH_RESPECT_HIDDEN, scene, obedit); + kcd->bmbvh = BMBVH_NewBVH(kcd->em, + (BMBVH_USE_CAGE | BMBVH_RETURN_ORIG) | + (only_select ? BMBVH_RESPECT_SELECT : BMBVH_RESPECT_HIDDEN), + scene, obedit); + kcd->arena = BLI_memarena_new(1 << 15, "knife"); kcd->vthresh = KMAXDIST - 1; kcd->ethresh = KMAXDIST; @@ -2848,6 +2834,7 @@ static int knifetool_init(bContext *C, wmOperator *op, int UNUSED(do_cut)) /* cut all the way through the mesh if use_occlude_geometry button not pushed */ kcd->cut_through = !RNA_boolean_get(op->ptr, "use_occlude_geometry"); + kcd->only_select = only_select; knife_pos_data_clear(&kcd->cur); knife_pos_data_clear(&kcd->prev); @@ -2939,7 +2926,7 @@ wmKeyMap *knifetool_modal_keymap(wmKeyConfig *keyconf) WM_modalkeymap_add_item(keymap, CKEY, KM_PRESS, 0, 0, KNF_MODAL_ANGLE_SNAP_TOGGLE); WM_modalkeymap_add_item(keymap, ZKEY, KM_PRESS, 0, 0, KNF_MODAL_CUT_THROUGH_TOGGLE); - WM_modalkeymap_assign(keymap, "MESH_OT_knifetool"); + WM_modalkeymap_assign(keymap, "MESH_OT_knife_tool"); return keymap; } @@ -3074,11 +3061,11 @@ static int knifetool_modal(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_RUNNING_MODAL; } -void MESH_OT_knifetool(wmOperatorType *ot) +void MESH_OT_knife_tool(wmOperatorType *ot) { /* description */ ot->name = "Knife Topology Tool"; - ot->idname = "MESH_OT_knifetool"; + ot->idname = "MESH_OT_knife_tool"; ot->description = "Cut new topology"; /* callbacks */ @@ -3090,5 +3077,6 @@ void MESH_OT_knifetool(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; - RNA_def_boolean(ot->srna, "use_occlude_geometry", 0, "Occlude Geometry", "Only cut the front most geometry"); + RNA_def_boolean(ot->srna, "use_occlude_geometry", TRUE, "Occlude Geometry", "Only cut the front most geometry"); + RNA_def_boolean(ot->srna, "only_select", FALSE, "Only Selected", "Only cut selected geometry"); } diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h index 706192f882b..772e80fff69 100644 --- a/source/blender/editors/mesh/mesh_intern.h +++ b/source/blender/editors/mesh/mesh_intern.h @@ -209,7 +209,7 @@ void MESH_OT_extrude_faces_indiv(struct wmOperatorType *ot); void MESH_OT_edgering_select(struct wmOperatorType *ot); void MESH_OT_loopcut(struct wmOperatorType *ot); -void MESH_OT_knifetool(struct wmOperatorType *ot); +void MESH_OT_knife_tool(struct wmOperatorType *ot); void MESH_OT_bevel(struct wmOperatorType *ot); void MESH_OT_bridge_edge_loops(struct wmOperatorType *ot); diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c index 145bef56285..7e8c38c9abc 100644 --- a/source/blender/editors/mesh/mesh_ops.c +++ b/source/blender/editors/mesh/mesh_ops.c @@ -156,7 +156,7 @@ void ED_operatortypes_mesh(void) WM_operatortype_append(MESH_OT_select_nth); WM_operatortype_append(MESH_OT_vert_connect); WM_operatortype_append(MESH_OT_vert_slide); - WM_operatortype_append(MESH_OT_knifetool); + WM_operatortype_append(MESH_OT_knife_tool); WM_operatortype_append(MESH_OT_bevel); @@ -347,8 +347,13 @@ void ED_keymap_mesh(wmKeyConfig *keyconf) WM_keymap_add_menu(keymap, "VIEW3D_MT_edit_mesh_delete", XKEY, KM_PRESS, 0, 0); WM_keymap_add_menu(keymap, "VIEW3D_MT_edit_mesh_delete", DELKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "MESH_OT_knifetool", KKEY, KM_PRESS, 0, 0); - //RNA_enum_set(WM_keymap_add_item(keymap, "MESH_OT_knife_cut", LEFTMOUSE, KM_PRESS, KM_SHIFT, KKEY)->ptr, "type", 2/*KNIFE_MIDPOINT*/); + kmi = WM_keymap_add_item(keymap, "MESH_OT_knife_tool", KKEY, KM_PRESS, 0, 0); + RNA_boolean_set(kmi->ptr, "use_occlude_geometry", TRUE); + RNA_boolean_set(kmi->ptr, "only_select", FALSE); + + kmi = WM_keymap_add_item(keymap, "MESH_OT_knife_tool", KKEY, KM_PRESS, KM_SHIFT, 0); + RNA_boolean_set(kmi->ptr, "use_occlude_geometry", FALSE); + RNA_boolean_set(kmi->ptr, "only_select", TRUE); WM_keymap_add_item(keymap, "OBJECT_OT_vertex_parent_set", PKEY, KM_PRESS, KM_CTRL, 0); From 617af9d99d2960b96e308d09abf230a92b7d14f1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 20 Apr 2012 11:14:16 +0000 Subject: [PATCH 142/156] knife tool now selects newly cut edges. --- source/blender/editors/mesh/editmesh_knife.c | 34 ++++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 9134fe49837..a99bd9b5f3a 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -163,6 +163,7 @@ typedef struct knifetool_opdata { /* operatpr options */ char cut_through; /* preference, can be modified at runtime (that feature may go) */ char only_select; /* set on initialization */ + char select_result; /* set on initialization */ float clipsta, clipend; @@ -2452,7 +2453,8 @@ static void knife_make_chain_cut(knifetool_opdata *kcd, BMFace *f, ListBase *cha /* Want to prevent creating two-sided polygons */ if (BM_edge_exists(v1, v2)) { *newface = NULL; - } else { + } + else { *newface = BM_face_split(bm, f, v1, v2, &lnew, NULL, TRUE); } } @@ -2464,11 +2466,21 @@ static void knife_make_chain_cut(knifetool_opdata *kcd, BMFace *f, ListBase *cha /* Now go through lnew chain matching up chain kv's and assign real v's to them */ for (l_iter = lnew->next, i = 0; i < nco; l_iter = l_iter->next, i++) { BLI_assert(equals_v3v3(cos[i], l_iter->v->co)); + if (kcd->select_result) { + BM_edge_select_set(bm, l_iter->e, TRUE); + } kverts[i]->v = l_iter->v; } } } + /* the select chain above doesnt account for the first loop */ + if (kcd->select_result) { + if (lnew) { + BM_edge_select_set(bm, lnew->e, TRUE); + } + } + BLI_array_fixedstack_free(cos); BLI_array_fixedstack_free(kverts); } @@ -2635,12 +2647,6 @@ static void knife_make_cuts(knifetool_opdata *kcd) for (lst = BLI_smallhash_iternew(ehash, &hiter, (uintptr_t *)&e); lst; lst = BLI_smallhash_iternext(&hiter, (uintptr_t *)&e)) { - if (kcd->only_select) { - if (!BM_elem_flag_test(e, BM_ELEM_SELECT)) { - continue; - } - } - sort_by_frac_along(lst, e); for (ref = lst->first; ref; ref = ref->next) { kfv = ref->ref; @@ -2649,17 +2655,14 @@ static void knife_make_cuts(knifetool_opdata *kcd) } } + if (kcd->select_result) { + EDBM_flag_disable_all(kcd->em, BM_ELEM_SELECT); + } + /* do cuts for each face */ for (lst = BLI_smallhash_iternew(fhash, &hiter, (uintptr_t *)&f); lst; lst = BLI_smallhash_iternext(&hiter, (uintptr_t *)&f)) { - - if (kcd->only_select) { - if (!BM_elem_flag_test(f, BM_ELEM_SELECT)) { - continue; - } - } - knife_make_face_cuts(kcd, f, lst); } @@ -2836,6 +2839,9 @@ static int knifetool_init(bContext *C, wmOperator *op, int UNUSED(do_cut)) kcd->cut_through = !RNA_boolean_get(op->ptr, "use_occlude_geometry"); kcd->only_select = only_select; + /* can't usefully select resulting edges in face mode */ + kcd->select_result = (kcd->em->selectmode != SCE_SELECT_FACE); + knife_pos_data_clear(&kcd->cur); knife_pos_data_clear(&kcd->prev); From aa02acfe952cb8464df24e2fea94a1f8f2403642 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 20 Apr 2012 12:05:08 +0000 Subject: [PATCH 143/156] knife tool: store color once on initializations, de-select only when cutting selected. --- source/blender/editors/mesh/editmesh_knife.c | 66 +++++++++++--------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index a99bd9b5f3a..65b65a68a6f 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -71,6 +71,15 @@ #define KMAXDIST 10 /* max mouse distance from edge before not detecting it */ +typedef struct KnifeColors { + unsigned char line[3]; + unsigned char edge[3]; + unsigned char curpoint[3]; + unsigned char curpoint_a[4]; + unsigned char point[3]; + unsigned char point_a[4]; +} KnifeColors; + /* knifetool operator */ typedef struct KnifeVert { BMVert *v; /* non-NULL if this is an original vert */ @@ -158,13 +167,14 @@ typedef struct knifetool_opdata { float projmat[4][4]; - short is_ortho; + KnifeColors colors; /* operatpr options */ char cut_through; /* preference, can be modified at runtime (that feature may go) */ char only_select; /* set on initialization */ char select_result; /* set on initialization */ + short is_ortho; float clipsta, clipend; enum { @@ -876,23 +886,19 @@ static void knifetool_draw_angle_snapping(knifetool_opdata *kcd) glEnd(); } -static void knife_colors(unsigned char c_line[3], - unsigned char c_edge[3], - unsigned char c_curpoint[3], - unsigned char c_curpoint_a[4], - unsigned char c_point[3], - unsigned char c_point_a[4]) { - /* possible BMESH_TODO: add explicit themes or calculate these by - * figuring out constrasting colors with grid / edges / verts - * a la UI_make_axis_color */ - UI_GetThemeColor3ubv(TH_NURB_VLINE, c_line); - UI_GetThemeColor3ubv(TH_NURB_ULINE, c_edge); - UI_GetThemeColor3ubv(TH_HANDLE_SEL_VECT, c_curpoint); - UI_GetThemeColor3ubv(TH_HANDLE_SEL_VECT, c_curpoint_a); - c_curpoint_a[3] = 0.4; - UI_GetThemeColor3ubv(TH_ACTIVE_SPLINE, c_point); - UI_GetThemeColor3ubv(TH_ACTIVE_SPLINE, c_point_a); - c_point_a[3] = 0.4; +static void knife_init_colors(KnifeColors *colors) +{ + /* possible BMESH_TODO: add explicit themes or calculate these by + * figuring out constrasting colors with grid / edges / verts + * a la UI_make_axis_color */ + UI_GetThemeColor3ubv(TH_NURB_VLINE, colors->line); + UI_GetThemeColor3ubv(TH_NURB_ULINE, colors->edge); + UI_GetThemeColor3ubv(TH_HANDLE_SEL_VECT, colors->curpoint); + UI_GetThemeColor3ubv(TH_HANDLE_SEL_VECT, colors->curpoint_a); + colors->curpoint_a[3] = 0.4; + UI_GetThemeColor3ubv(TH_ACTIVE_SPLINE, colors->point); + UI_GetThemeColor3ubv(TH_ACTIVE_SPLINE, colors->point_a); + colors->point_a[3] = 0.4; } /* modal loop selection drawing callback */ @@ -900,8 +906,6 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) { View3D *v3d = CTX_wm_view3d(C); knifetool_opdata *kcd = arg; - unsigned char c_line[3], c_edge[3], c_curpoint[3], c_point[3]; - unsigned char c_curpoint_a[4], c_point_a[4]; if(v3d->zbuf) glDisable(GL_DEPTH_TEST); @@ -910,13 +914,11 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) glPushMatrix(); glMultMatrixf(kcd->ob->obmat); - knife_colors(c_line, c_edge, c_curpoint, c_curpoint_a, c_point, c_point_a); - if (kcd->mode == MODE_DRAGGING) { if (kcd->angle_snapping != ANGLE_FREE) knifetool_draw_angle_snapping(kcd); - glColor3ubv(c_line); + glColor3ubv(kcd->colors.line); glLineWidth(2.0); @@ -929,7 +931,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) } if (kcd->cur.edge) { - glColor3ubv(c_edge); + glColor3ubv(kcd->colors.edge); glLineWidth(2.0); glBegin(GL_LINES); @@ -940,7 +942,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) glLineWidth(1.0); } else if (kcd->cur.vert) { - glColor3ubv(c_point); + glColor3ubv(kcd->colors.point); glPointSize(11); glBegin(GL_POINTS); @@ -949,7 +951,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) } if (kcd->cur.bmface) { - glColor3ubv(c_curpoint); + glColor3ubv(kcd->colors.curpoint); glPointSize(9); glBegin(GL_POINTS); @@ -965,7 +967,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* draw any snapped verts first */ - glColor4ubv(c_point_a); + glColor4ubv(kcd->colors.point_a); glPointSize(11); glBegin(GL_POINTS); lh = kcd->linehits; @@ -990,7 +992,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) glEnd(); /* now draw the rest */ - glColor4ubv(c_curpoint_a); + glColor4ubv(kcd->colors.curpoint_a); glPointSize(7); glBegin(GL_POINTS); lh = kcd->linehits; @@ -1013,7 +1015,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) if (!kfe->draw) continue; - glColor3ubv(c_line); + glColor3ubv(kcd->colors.line); glVertex3fv(kfe->v1->cageco); glVertex3fv(kfe->v2->cageco); @@ -1035,7 +1037,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) if (!kfv->draw) continue; - glColor3ubv(c_point); + glColor3ubv(kcd->colors.point); glVertex3fv(kfv->cageco); } @@ -2655,7 +2657,7 @@ static void knife_make_cuts(knifetool_opdata *kcd) } } - if (kcd->select_result) { + if (kcd->only_select) { EDBM_flag_disable_all(kcd->em, BM_ELEM_SELECT); } @@ -2845,6 +2847,8 @@ static int knifetool_init(bContext *C, wmOperator *op, int UNUSED(do_cut)) knife_pos_data_clear(&kcd->cur); knife_pos_data_clear(&kcd->prev); + knife_init_colors(&kcd->colors); + return 1; } From 4d1faf1fd9dd7d5f7d70b37d9c64f0312d38b182 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 20 Apr 2012 12:19:09 +0000 Subject: [PATCH 144/156] knife tool: use the knife mouse cursor, dont store the context in the knife tool data, also rename struct camel case (follow own style guide) --- source/blender/editors/mesh/editmesh_knife.c | 131 +++++++++---------- 1 file changed, 64 insertions(+), 67 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 65b65a68a6f..216852bc91f 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -130,11 +130,11 @@ typedef struct KnifePosData { } KnifePosData; /* struct for properties used while drawing */ -typedef struct knifetool_opdata { +typedef struct KnifeTool_OpData { ARegion *ar; /* region that knifetool was activated in */ void *draw_handle; /* for drawing preview loop */ ViewContext vc; - bContext *C; + //bContext *C; Object *ob; BMEditMesh *em; @@ -196,14 +196,14 @@ typedef struct knifetool_opdata { } angle_snapping; float (*cagecos)[3]; -} knifetool_opdata; +} KnifeTool_OpData; -static ListBase *knife_get_face_kedges(knifetool_opdata *kcd, BMFace *f); +static ListBase *knife_get_face_kedges(KnifeTool_OpData *kcd, BMFace *f); -static void knife_input_ray_cast(knifetool_opdata *kcd, const int mval_i[2], +static void knife_input_ray_cast(KnifeTool_OpData *kcd, const int mval_i[2], float r_origin[3], float r_ray[3]); -static void knife_update_header(bContext *C, knifetool_opdata *kcd) +static void knife_update_header(bContext *C, KnifeTool_OpData *kcd) { #define HEADER_LENGTH 170 char header[HEADER_LENGTH]; @@ -219,7 +219,7 @@ static void knife_update_header(bContext *C, knifetool_opdata *kcd) } -static void knife_project_v3(knifetool_opdata *kcd, const float co[3], float sco[3]) +static void knife_project_v3(KnifeTool_OpData *kcd, const float co[3], float sco[3]) { ED_view3d_project_float_v3(kcd->ar, co, sco, kcd->projmat); } @@ -235,7 +235,7 @@ static void knife_pos_data_clear(KnifePosData *kpd) kpd->mval[1] = 0; } -static ListBase *knife_empty_list(knifetool_opdata *kcd) +static ListBase *knife_empty_list(KnifeTool_OpData *kcd) { ListBase *lst; @@ -244,7 +244,7 @@ static ListBase *knife_empty_list(knifetool_opdata *kcd) return lst; } -static void knife_append_list(knifetool_opdata *kcd, ListBase *lst, void *elem) +static void knife_append_list(KnifeTool_OpData *kcd, ListBase *lst, void *elem) { Ref *ref; @@ -265,19 +265,19 @@ static Ref *find_ref(ListBase *lb, void *ref) return NULL; } -static KnifeEdge *new_knife_edge(knifetool_opdata *kcd) +static KnifeEdge *new_knife_edge(KnifeTool_OpData *kcd) { kcd->totkedge++; return BLI_mempool_calloc(kcd->kedges); } -static void knife_add_to_vert_edges(knifetool_opdata *kcd, KnifeEdge *kfe) +static void knife_add_to_vert_edges(KnifeTool_OpData *kcd, KnifeEdge *kfe) { knife_append_list(kcd, &kfe->v1->edges, kfe); knife_append_list(kcd, &kfe->v2->edges, kfe); } -static KnifeVert *new_knife_vert(knifetool_opdata *kcd, float *co, float *cageco) +static KnifeVert *new_knife_vert(KnifeTool_OpData *kcd, float *co, float *cageco) { KnifeVert *kfv = BLI_mempool_calloc(kcd->kverts); @@ -293,7 +293,7 @@ static KnifeVert *new_knife_vert(knifetool_opdata *kcd, float *co, float *cageco } /* get a KnifeVert wrapper for an existing BMVert */ -static KnifeVert *get_bm_knife_vert(knifetool_opdata *kcd, BMVert *v) +static KnifeVert *get_bm_knife_vert(KnifeTool_OpData *kcd, BMVert *v) { KnifeVert *kfv = BLI_ghash_lookup(kcd->origvertmap, v); @@ -309,7 +309,7 @@ static KnifeVert *get_bm_knife_vert(knifetool_opdata *kcd, BMVert *v) /** * get a KnifeEdge wrapper for an existing BMEdge * \note #knife_get_face_kedges / #get_bm_knife_edge are called recusively - KEEP STACK MEM USAGE LOW */ -static KnifeEdge *get_bm_knife_edge(knifetool_opdata *kcd, BMEdge *e) +static KnifeEdge *get_bm_knife_edge(KnifeTool_OpData *kcd, BMEdge *e) { KnifeEdge *kfe = BLI_ghash_lookup(kcd->origedgemap, e); if (!kfe) { @@ -342,7 +342,7 @@ static KnifeEdge *get_bm_knife_edge(knifetool_opdata *kcd, BMEdge *e) /* User has just clicked for first time or first time after a restart (E key). * Copy the current position data into prev. */ -static void knife_start_cut(knifetool_opdata *kcd) +static void knife_start_cut(KnifeTool_OpData *kcd) { kcd->prev = kcd->cur; kcd->cur.is_space = 0; /*TODO: why do we do this? */ @@ -366,7 +366,7 @@ static void knife_start_cut(knifetool_opdata *kcd) /** * \note #knife_get_face_kedges / #get_bm_knife_edge are called recusively - KEEP STACK MEM USAGE LOW */ -static ListBase *knife_get_face_kedges(knifetool_opdata *kcd, BMFace *f) +static ListBase *knife_get_face_kedges(KnifeTool_OpData *kcd, BMFace *f) { ListBase *lst = BLI_ghash_lookup(kcd->kedgefacemap, f); @@ -389,7 +389,7 @@ static ListBase *knife_get_face_kedges(knifetool_opdata *kcd, BMFace *f) } /* finds the proper face to restrict face fill to */ -static void knife_find_basef(knifetool_opdata *kcd, KnifeEdge *kfe) +static void knife_find_basef(KnifeTool_OpData *kcd, KnifeEdge *kfe) { if (!kfe->basef) { Ref *r1, *r2, *r3, *r4; @@ -420,13 +420,13 @@ static void knife_find_basef(knifetool_opdata *kcd, KnifeEdge *kfe) } } -static void knife_edge_append_face(knifetool_opdata *kcd, KnifeEdge *kfe, BMFace *f) +static void knife_edge_append_face(KnifeTool_OpData *kcd, KnifeEdge *kfe, BMFace *f) { knife_append_list(kcd, knife_get_face_kedges(kcd, f), kfe); knife_append_list(kcd, &kfe->faces, f); } -static KnifeVert *knife_split_edge(knifetool_opdata *kcd, KnifeEdge *kfe, float co[3], KnifeEdge **newkfe_out) +static KnifeVert *knife_split_edge(KnifeTool_OpData *kcd, KnifeEdge *kfe, float co[3], KnifeEdge **newkfe_out) { KnifeEdge *newkfe = new_knife_edge(kcd); Ref *ref; @@ -467,7 +467,7 @@ static KnifeVert *knife_split_edge(knifetool_opdata *kcd, KnifeEdge *kfe, float /* Make a single KnifeEdge for cut from kcd->prev to kcd->cur. * and move cur data to prev. */ -static void knife_add_single_cut(knifetool_opdata *kcd) +static void knife_add_single_cut(KnifeTool_OpData *kcd) { KnifeEdge *kfe = new_knife_edge(kcd), *kfe2 = NULL, *kfe3 = NULL; @@ -544,7 +544,7 @@ static int verge_linehit(const void *vlh1, const void *vlh2) else return 0; } -static void knife_add_single_cut_through(knifetool_opdata *kcd, KnifeVert *v1, KnifeVert *v2, BMFace *f) +static void knife_add_single_cut_through(KnifeTool_OpData *kcd, KnifeVert *v1, KnifeVert *v2, BMFace *f) { KnifeEdge *kfenew; @@ -561,7 +561,7 @@ static void knife_add_single_cut_through(knifetool_opdata *kcd, KnifeVert *v1, K knife_edge_append_face(kcd, kfenew, f); } -static void knife_get_vert_faces(knifetool_opdata *kcd, KnifeVert *kfv, BMFace *facef, ListBase *lst) +static void knife_get_vert_faces(KnifeTool_OpData *kcd, KnifeVert *kfv, BMFace *facef, ListBase *lst) { BMIter bmiter; BMFace *f; @@ -576,7 +576,7 @@ static void knife_get_vert_faces(knifetool_opdata *kcd, KnifeVert *kfv, BMFace * } } -static void knife_get_edge_faces(knifetool_opdata *kcd, KnifeEdge *kfe, ListBase *lst) +static void knife_get_edge_faces(KnifeTool_OpData *kcd, KnifeEdge *kfe, ListBase *lst) { BMIter bmiter; BMFace *f; @@ -591,7 +591,7 @@ static void knife_get_edge_faces(knifetool_opdata *kcd, KnifeEdge *kfe, ListBase /* BMESH_TODO: add more functionality to cut-through: * - cutting "in face" (e.g., holes) should cut in all faces, not just visible one * - perhaps improve O(n^2) algorithm used here */ -static void knife_cut_through(knifetool_opdata *kcd) +static void knife_cut_through(KnifeTool_OpData *kcd) { BMEdgeHit *lh, *lh2; BMFace *f; @@ -705,7 +705,7 @@ static void knife_cut_through(knifetool_opdata *kcd) /* User has just left-clicked after the first time. * Add all knife cuts implied by line from prev to cur. * If that line crossed edges then kcd->linehits will be non-NULL. */ -static void knife_add_cut(knifetool_opdata *kcd) +static void knife_add_cut(KnifeTool_OpData *kcd) { KnifePosData savcur = kcd->cur; @@ -784,12 +784,12 @@ static void knife_add_cut(knifetool_opdata *kcd) } } -static void knife_finish_cut(knifetool_opdata *UNUSED(kcd)) +static void knife_finish_cut(KnifeTool_OpData *UNUSED(kcd)) { } -static void knifetool_draw_angle_snapping(knifetool_opdata *kcd) +static void knifetool_draw_angle_snapping(KnifeTool_OpData *kcd) { bglMats mats; double u[3], u1[2], u2[2], v1[3], v2[3], dx, dy; @@ -905,7 +905,7 @@ static void knife_init_colors(KnifeColors *colors) static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) { View3D *v3d = CTX_wm_view3d(C); - knifetool_opdata *kcd = arg; + KnifeTool_OpData *kcd = arg; if(v3d->zbuf) glDisable(GL_DEPTH_TEST); @@ -1059,7 +1059,7 @@ static float len_v3_tri_side_max(const float v1[3], const float v2[3], const flo return MAX3(s1, s2, s3); } -static BMEdgeHit *knife_edge_tri_isect(knifetool_opdata *kcd, BMBVHTree *bmtree, +static BMEdgeHit *knife_edge_tri_isect(KnifeTool_OpData *kcd, BMBVHTree *bmtree, const float v1[3], const float v2[3], const float v3[3], SmallHash *ehash, bglMats *mats, int *count) { @@ -1201,7 +1201,7 @@ static BMEdgeHit *knife_edge_tri_isect(knifetool_opdata *kcd, BMBVHTree *bmtree, return edges; } -static void knife_bgl_get_mats(knifetool_opdata *UNUSED(kcd), bglMats *mats) +static void knife_bgl_get_mats(KnifeTool_OpData *UNUSED(kcd), bglMats *mats) { bgl_get_mats(mats); //copy_m4_m4(mats->modelview, kcd->vc.rv3d->viewmat); @@ -1209,7 +1209,7 @@ static void knife_bgl_get_mats(knifetool_opdata *UNUSED(kcd), bglMats *mats) } /* Finds visible (or all, if cutting through) edges that intersects the current screen drag line */ -static void knife_find_line_hits(knifetool_opdata *kcd) +static void knife_find_line_hits(KnifeTool_OpData *kcd) { bglMats mats; BMEdgeHit *e1, *e2; @@ -1281,7 +1281,7 @@ static void knife_find_line_hits(knifetool_opdata *kcd) BLI_smallhash_release(ehash); } -static void knife_input_ray_cast(knifetool_opdata *kcd, const int mval_i[2], +static void knife_input_ray_cast(KnifeTool_OpData *kcd, const int mval_i[2], float r_origin[3], float r_ray[3]) { bglMats mats; @@ -1312,7 +1312,7 @@ static void knife_input_ray_cast(knifetool_opdata *kcd, const int mval_i[2], mul_m3_v3(imat, r_ray); } -static BMFace *knife_find_closest_face(knifetool_opdata *kcd, float co[3], float cageco[3], int *is_space) +static BMFace *knife_find_closest_face(KnifeTool_OpData *kcd, float co[3], float cageco[3], int *is_space) { BMFace *f; int dist = KMAXDIST; @@ -1343,7 +1343,7 @@ static BMFace *knife_find_closest_face(knifetool_opdata *kcd, float co[3], float /* find the 2d screen space density of vertices within a radius. used to scale snapping * distance for picking edges/verts.*/ -static int knife_sample_screen_density(knifetool_opdata *kcd, float radius) +static int knife_sample_screen_density(KnifeTool_OpData *kcd, float radius) { BMFace *f; int is_space; @@ -1396,7 +1396,7 @@ static int knife_sample_screen_density(knifetool_opdata *kcd, float radius) /* returns snapping distance for edges/verts, scaled by the density of the * surrounding mesh (in screen space)*/ -static float knife_snap_size(knifetool_opdata *kcd, float maxsize) +static float knife_snap_size(KnifeTool_OpData *kcd, float maxsize) { float density = (float)knife_sample_screen_density(kcd, maxsize * 2.0f); @@ -1406,7 +1406,7 @@ static float knife_snap_size(knifetool_opdata *kcd, float maxsize) } /* p is closest point on edge to the mouse cursor */ -static KnifeEdge *knife_find_closest_edge(knifetool_opdata *kcd, float p[3], float cagep[3], BMFace **fptr, int *is_space) +static KnifeEdge *knife_find_closest_edge(KnifeTool_OpData *kcd, float p[3], float cagep[3], BMFace **fptr, int *is_space) { BMFace *f; float co[3], cageco[3], sco[3], maxdist = knife_snap_size(kcd, kcd->ethresh); @@ -1495,7 +1495,7 @@ static KnifeEdge *knife_find_closest_edge(knifetool_opdata *kcd, float p[3], flo } /* find a vertex near the mouse cursor, if it exists */ -static KnifeVert *knife_find_closest_vert(knifetool_opdata *kcd, float p[3], float cagep[3], BMFace **fptr, +static KnifeVert *knife_find_closest_vert(KnifeTool_OpData *kcd, float p[3], float cagep[3], BMFace **fptr, int *is_space) { BMFace *f; @@ -1575,7 +1575,7 @@ static KnifeVert *knife_find_closest_vert(knifetool_opdata *kcd, float p[3], flo return NULL; } -static void knife_snap_angle(knifetool_opdata *kcd) +static void knife_snap_angle(KnifeTool_OpData *kcd) { int dx, dy; float w, abs_tan; @@ -1608,7 +1608,7 @@ static void knife_snap_angle(knifetool_opdata *kcd) } /* update active knife edge/vert pointers */ -static int knife_update_active(knifetool_opdata *kcd) +static int knife_update_active(KnifeTool_OpData *kcd) { if (kcd->angle_snapping != ANGLE_FREE && kcd->mode == MODE_DRAGGING) knife_snap_angle(kcd); @@ -1666,7 +1666,7 @@ static void rnd_offset_co(float co[3], float scale) } } -static void remerge_faces(knifetool_opdata *kcd) +static void remerge_faces(KnifeTool_OpData *kcd) { BMesh *bm = kcd->em->bm; SmallHash svisit, *visit = &svisit; @@ -1748,7 +1748,7 @@ static void remerge_faces(knifetool_opdata *kcd) } /* use edgenet to fill faces. this is a bit annoying and convoluted.*/ -static void knifenet_fill_faces(knifetool_opdata *kcd) +static void knifenet_fill_faces(KnifeTool_OpData *kcd) { ScanFillContext sf_ctx; BMesh *bm = kcd->em->bm; @@ -2055,7 +2055,7 @@ static void sort_by_frac_along(ListBase *lst, BMEdge *e) /* The chain so far goes from an instantiated vertex to kfv (some may be reversed). * If possible, complete the chain to another instantiated vertex and return 1, else return 0. * The visited hash says which KnifeVert's have already been tried, not including kfv. */ -static int find_chain_search(knifetool_opdata *kcd, KnifeVert *kfv, ListBase *fedges, SmallHash *visited, +static int find_chain_search(KnifeTool_OpData *kcd, KnifeVert *kfv, ListBase *fedges, SmallHash *visited, ListBase *chain) { Ref *r; @@ -2087,7 +2087,7 @@ static int find_chain_search(knifetool_opdata *kcd, KnifeVert *kfv, ListBase *fe return FALSE; } -static ListBase *find_chain_from_vertex(knifetool_opdata *kcd, KnifeEdge *kfe, BMVert *v, ListBase *fedges) +static ListBase *find_chain_from_vertex(KnifeTool_OpData *kcd, KnifeEdge *kfe, BMVert *v, ListBase *fedges) { SmallHash visited_, *visited = &visited_; ListBase *ans; @@ -2117,7 +2117,7 @@ static ListBase *find_chain_from_vertex(knifetool_opdata *kcd, KnifeEdge *kfe, B /* Find a chain in fedges from one instantiated vertex to another. * Remove the edges in the chain from fedges and return a separate list of the chain. */ -static ListBase *find_chain(knifetool_opdata *kcd, ListBase *fedges) +static ListBase *find_chain(KnifeTool_OpData *kcd, ListBase *fedges) { Ref *r, *ref; KnifeEdge *kfe; @@ -2156,7 +2156,7 @@ static ListBase *find_chain(knifetool_opdata *kcd, ListBase *fedges) /* The hole so far goes from kfvfirst to kfv (some may be reversed). * If possible, complete the hole back to kfvfirst and return 1, else return 0. * The visited hash says which KnifeVert's have already been tried, not including kfv or kfvfirst. */ -static int find_hole_search(knifetool_opdata *kcd, KnifeVert *kfvfirst, KnifeVert *kfv, ListBase *fedges, +static int find_hole_search(KnifeTool_OpData *kcd, KnifeVert *kfvfirst, KnifeVert *kfv, ListBase *fedges, SmallHash *visited, ListBase *hole) { Ref *r; @@ -2191,7 +2191,7 @@ static int find_hole_search(knifetool_opdata *kcd, KnifeVert *kfvfirst, KnifeVer /* Find a hole (simple cycle with no instantiated vertices). * Remove the edges in the cycle from fedges and return a separate list of the cycle */ -static ListBase *find_hole(knifetool_opdata *kcd, ListBase *fedges) +static ListBase *find_hole(KnifeTool_OpData *kcd, ListBase *fedges) { ListBase *ans; Ref *r, *ref; @@ -2234,7 +2234,7 @@ static ListBase *find_hole(knifetool_opdata *kcd, ListBase *fedges) * If found, return TRUE and make a 'main chain' going across f which uses * the two diagonals and one part of the hole, and a 'side chain' that * completes the hole. */ -static int find_hole_chains(knifetool_opdata *kcd, ListBase *hole, BMFace *f, ListBase **mainchain, +static int find_hole_chains(KnifeTool_OpData *kcd, ListBase *hole, BMFace *f, ListBase **mainchain, ListBase **sidechain) { float **fco, **hco; @@ -2376,7 +2376,7 @@ static int find_hole_chains(knifetool_opdata *kcd, ListBase *hole, BMFace *f, Li } } -static int knife_edge_in_face(knifetool_opdata *UNUSED(kcd), KnifeEdge *kfe, BMFace *f) +static int knife_edge_in_face(KnifeTool_OpData *UNUSED(kcd), KnifeEdge *kfe, BMFace *f) { /* BMesh *bm = kcd->em->bm; */ /* UNUSED */ BMVert *v1, *v2; @@ -2419,7 +2419,7 @@ static int knife_edge_in_face(knifetool_opdata *UNUSED(kcd), KnifeEdge *kfe, BMF /* Split face f with KnifeEdges on chain. f remains as one side, the face formed is put in *newface. * The new face will be on the left side of the chain as viewed from the normal-out side of f. */ -static void knife_make_chain_cut(knifetool_opdata *kcd, BMFace *f, ListBase *chain, BMFace **newface) +static void knife_make_chain_cut(KnifeTool_OpData *kcd, BMFace *f, ListBase *chain, BMFace **newface) { BMesh *bm = kcd->em->bm; KnifeEdge *kfe, *kfelast; @@ -2487,7 +2487,7 @@ static void knife_make_chain_cut(knifetool_opdata *kcd, BMFace *f, ListBase *cha BLI_array_fixedstack_free(kverts); } -static void knife_make_face_cuts(knifetool_opdata *kcd, BMFace *f, ListBase *kfedges) +static void knife_make_face_cuts(KnifeTool_OpData *kcd, BMFace *f, ListBase *kfedges) { BMesh *bm = kcd->em->bm; KnifeEdge *kfe; @@ -2592,7 +2592,7 @@ static void knife_make_face_cuts(knifetool_opdata *kcd, BMFace *f, ListBase *kfe } /* Use the network of KnifeEdges and KnifeVerts accumulated to make real BMVerts and BMEdedges */ -static void knife_make_cuts(knifetool_opdata *kcd) +static void knife_make_cuts(KnifeTool_OpData *kcd) { BMesh *bm = kcd->em->bm; KnifeEdge *kfe; @@ -2676,7 +2676,7 @@ static void knife_make_cuts(knifetool_opdata *kcd) /* called on tool confirmation */ static void knifetool_finish(bContext *C, wmOperator *op) { - knifetool_opdata *kcd = op->customdata; + KnifeTool_OpData *kcd = op->customdata; #if SCANFILL_CUTS knifenet_fill_faces(kcd); @@ -2701,15 +2701,10 @@ static int project_knife_view_clip(View3D *v3d, RegionView3D *rv3d, float *clips return orth; } -static void knife_recalc_projmat(knifetool_opdata *kcd) +static void knife_recalc_projmat(KnifeTool_OpData *kcd) { - ARegion *ar = CTX_wm_region(kcd->C); - - if (!ar) - return; - invert_m4_m4(kcd->ob->imat, kcd->ob->obmat); - ED_view3d_ob_project_mat_get(ar->regiondata, kcd->ob, kcd->projmat); + ED_view3d_ob_project_mat_get(kcd->ar->regiondata, kcd->ob, kcd->projmat); //mult_m4_m4m4(kcd->projmat, kcd->vc.rv3d->winmat, kcd->vc.rv3d->viewmat); kcd->is_ortho = project_knife_view_clip(kcd->vc.v3d, kcd->vc.rv3d, @@ -2717,13 +2712,15 @@ static void knife_recalc_projmat(knifetool_opdata *kcd) } /* called when modal loop selection is done... */ -static void knifetool_exit(bContext *UNUSED(C), wmOperator *op) +static void knifetool_exit(bContext *C, wmOperator *op) { - knifetool_opdata *kcd = op->customdata; + KnifeTool_OpData *kcd = op->customdata; if (!kcd) return; + WM_cursor_restore(CTX_wm_window(C)); + /* remember setting for later */ RNA_boolean_set(op->ptr, "use_occlude_geometry", !kcd->cut_through); WM_operator_last_properties_store(op); /* XXX - this is clunky but modal ops wont do this automatic */ @@ -2768,7 +2765,7 @@ static void cage_mapped_verts_callback(void *userData, int index, const float co } } -static void knifetool_update_mval(knifetool_opdata *kcd, int mval[2]) +static void knifetool_update_mval(KnifeTool_OpData *kcd, int mval[2]) { knife_recalc_projmat(kcd); kcd->vc.mval[0] = mval[0]; @@ -2782,7 +2779,7 @@ static void knifetool_update_mval(knifetool_opdata *kcd, int mval[2]) /* called when modal loop selection gets set up... */ static int knifetool_init(bContext *C, wmOperator *op, int UNUSED(do_cut)) { - knifetool_opdata *kcd; + KnifeTool_OpData *kcd; Scene *scene = CTX_data_scene(C); Object *obedit = CTX_data_edit_object(C); DerivedMesh *cage, *final; @@ -2791,12 +2788,11 @@ static int knifetool_init(bContext *C, wmOperator *op, int UNUSED(do_cut)) const short only_select = RNA_boolean_get(op->ptr, "only_select"); /* alloc new customdata */ - kcd = op->customdata = MEM_callocN(sizeof(knifetool_opdata), "knifetool Modal Op Data"); + kcd = op->customdata = MEM_callocN(sizeof(KnifeTool_OpData), "knifetool Modal Op Data"); /* assign the drawing handle for drawing preview line... */ kcd->ob = obedit; kcd->ar = CTX_wm_region(C); - kcd->C = C; kcd->draw_handle = ED_region_draw_cb_activate(kcd->ar->type, knifetool_draw, kcd, REGION_DRAW_POST_VIEW); em_setup_viewcontext(C, &kcd->vc); @@ -2861,7 +2857,7 @@ static int knifetool_cancel(bContext *C, wmOperator *op) static int knifetool_invoke(bContext *C, wmOperator *op, wmEvent *evt) { - knifetool_opdata *kcd; + KnifeTool_OpData *kcd; view3d_operator_needs_opengl(C); @@ -2869,6 +2865,7 @@ static int knifetool_invoke(bContext *C, wmOperator *op, wmEvent *evt) return OPERATOR_CANCELLED; /* add a modal handler for this operator - handles loop selection */ + WM_cursor_modal(CTX_wm_window(C), BC_KNIFECURSOR); WM_event_add_modal_handler(C, op); kcd = op->customdata; @@ -2944,7 +2941,7 @@ wmKeyMap *knifetool_modal_keymap(wmKeyConfig *keyconf) static int knifetool_modal(bContext *C, wmOperator *op, wmEvent *event) { Object *obedit; - knifetool_opdata *kcd = op->customdata; + KnifeTool_OpData *kcd = op->customdata; if (!C) { return OPERATOR_FINISHED; From 5874106ea7d9d6813b7f60027d3ee8febb98b8c7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 20 Apr 2012 12:26:16 +0000 Subject: [PATCH 145/156] style cleanup --- source/blender/editors/mesh/editmesh_knife.c | 24 ++++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 216852bc91f..7d0a5423405 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -170,9 +170,9 @@ typedef struct KnifeTool_OpData { KnifeColors colors; /* operatpr options */ - char cut_through; /* preference, can be modified at runtime (that feature may go) */ - char only_select; /* set on initialization */ - char select_result; /* set on initialization */ + char cut_through; /* preference, can be modified at runtime (that feature may go) */ + char only_select; /* set on initialization */ + char select_result; /* set on initialization */ short is_ortho; float clipsta, clipend; @@ -209,11 +209,11 @@ static void knife_update_header(bContext *C, KnifeTool_OpData *kcd) char header[HEADER_LENGTH]; BLI_snprintf(header, HEADER_LENGTH, "LMB: define cut lines, Return: confirm, Esc or RMB: cancel, E: new cut, Ctrl: midpoint snap (%s), " - "Shift: ignore snap (%s), C: angle constrain (%s), Z: cut through (%s)", - kcd->snap_midpoints? "On" : "Off", - kcd->ignore_edge_snapping? "On" : "Off", - kcd->angle_snapping? "On" : "Off", - kcd->cut_through? "On" : "Off"); + "Shift: ignore snap (%s), C: angle constrain (%s), Z: cut through (%s)", + kcd->snap_midpoints ? "On" : "Off", + kcd->ignore_edge_snapping ? "On" : "Off", + kcd->angle_snapping ? "On" : "Off", + kcd->cut_through ? "On" : "Off"); ED_area_headerprint(CTX_wm_area(C), header); } @@ -540,7 +540,7 @@ static int verge_linehit(const void *vlh1, const void *vlh2) const BMEdgeHit *lh1 = vlh1, *lh2 = vlh2; if (lh1->l < lh2->l) return -1; - else if (lh1->l > lh2->l) return 1; + else if (lh1->l > lh2->l) return 1; else return 0; } @@ -907,7 +907,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) View3D *v3d = CTX_wm_view3d(C); KnifeTool_OpData *kcd = arg; - if(v3d->zbuf) glDisable(GL_DEPTH_TEST); + if (v3d->zbuf) glDisable(GL_DEPTH_TEST); glPolygonOffset(1.0f, 1.0f); @@ -1047,7 +1047,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) glPopMatrix(); - if(v3d->zbuf) glEnable(GL_DEPTH_TEST); + if (v3d->zbuf) glEnable(GL_DEPTH_TEST); } static float len_v3_tri_side_max(const float v1[3], const float v2[3], const float v3[3]) @@ -1074,7 +1074,7 @@ static BMEdgeHit *knife_edge_tri_isect(KnifeTool_OpData *kcd, BMBVHTree *bmtree, /* for comparing distances, error of intersection depends on triangle scale. * need to scale down before squaring for accurate comparison */ - const float depsilon = 50 * FLT_EPSILON *len_v3_tri_side_max(v1, v2, v3); + const float depsilon = 50 * FLT_EPSILON * len_v3_tri_side_max(v1, v2, v3); const float depsilon_squared = depsilon * depsilon; copy_v3_v3(cos + 0, v1); From 71ac500fc2bc675ab34b91759c0712854fe7ee8c Mon Sep 17 00:00:00 2001 From: Lukas Toenne Date: Fri, 20 Apr 2012 12:55:57 +0000 Subject: [PATCH 146/156] Fix for particle dupli group relative offsets. The relative transforms of objects in the instanced group were not scaled according to the particle size, which would be expected when rendering as 'Whole Group'. Requested by Francesco Siddi (fsiddi) over IRC. --- source/blender/blenkernel/intern/anim.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c index 55b3a3f3e42..b547fedebb5 100644 --- a/source/blender/blenkernel/intern/anim.c +++ b/source/blender/blenkernel/intern/anim.c @@ -1407,17 +1407,16 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Scene *scene, Object *p if (part->ren_as==PART_DRAW_GR && psys->part->draw & PART_DRAW_WHOLE_GR) { for (go= part->dup_group->gobject.first, b=0; go; go= go->next, b++) { - /* group dupli offset, should apply after everything else */ - if (!is_zero_v3(part->dup_group->dupli_ofs)) { - copy_m4_m4(tmat, oblist[b]->obmat); - sub_v3_v3v3(tmat[3], tmat[3], part->dup_group->dupli_ofs); - mult_m4_m4m4(tmat, pamat, tmat); - } - else { - mult_m4_m4m4(tmat, pamat, oblist[b]->obmat); - } - + copy_m4_m4(tmat, oblist[b]->obmat); + /* apply particle scale */ mul_mat3_m4_fl(tmat, size*scale); + mul_v3_fl(tmat[3], size*scale); + /* group dupli offset, should apply after everything else */ + if (!is_zero_v3(part->dup_group->dupli_ofs)) + sub_v3_v3v3(tmat[3], tmat[3], part->dup_group->dupli_ofs); + /* individual particle transform */ + mult_m4_m4m4(tmat, pamat, tmat); + if (par_space_mat) mult_m4_m4m4(mat, par_space_mat, tmat); else From ed81982049987802b0215dc1b49439addbb9f0b3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 20 Apr 2012 13:45:38 +0000 Subject: [PATCH 147/156] knife tool alpha values where being set to zero (intersection points weren't visible), error made when converting to theme colors. also minor bmesh style cleanup. --- source/blender/bmesh/intern/bmesh_core.c | 18 +++++++++--------- source/blender/bmesh/intern/bmesh_queries.c | 2 +- source/blender/editors/mesh/editmesh_knife.c | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index 51ca11b0898..3457d295bdc 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -658,9 +658,9 @@ static int bm_loop_length(BMLoop *l) */ static int bm_loop_reverse_loop(BMesh *bm, BMFace *f #ifdef USE_BMESH_HOLES - , BMLoopList *lst + , BMLoopList *lst #endif - ) + ) { #ifdef USE_BMESH_HOLES @@ -775,7 +775,7 @@ static void bm_elements_systag_disable(void *veles, int tot, int flag) } } -#define FACE_MARK (1 << 10) +#define FACE_MARK (1 << 10) static int count_flagged_radial(BMesh *bm, BMLoop *l, int flag) { @@ -1173,17 +1173,17 @@ BMFace *bmesh_sfme(BMesh *bm, BMFace *f, BMVert *v1, BMVert *v2, l_iter = l_first = f1loop; first_loop_f1 = 0; do { - if(l_iter == f->l_first) + if (l_iter == f->l_first) first_loop_f1 = 1; } while ((l_iter = l_iter->next) != l_first); - if(first_loop_f1) { + if (first_loop_f1) { /* original first loop was in f1, find a suitable first loop for f2 which is as similar as possible to f1. the order matters for tools such as duplifaces. */ - if(f->l_first->prev == f1loop) + if (f->l_first->prev == f1loop) f2->l_first = f2loop->prev; - else if(f->l_first->next == f1loop) + else if (f->l_first->next == f1loop) f2->l_first = f2loop->next; else f2->l_first = f2loop; @@ -1192,9 +1192,9 @@ BMFace *bmesh_sfme(BMesh *bm, BMFace *f, BMVert *v1, BMVert *v2, /* original first loop was in f2, further do same as above */ f2->l_first = f->l_first; - if(f->l_first->prev == f2loop) + if (f->l_first->prev == f2loop) f->l_first = f1loop->prev; - else if(f->l_first->next == f2loop) + else if (f->l_first->next == f2loop) f->l_first = f1loop->next; else f->l_first = f1loop; diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c index 3561092b1cf..37935f33521 100644 --- a/source/blender/bmesh/intern/bmesh_queries.c +++ b/source/blender/bmesh/intern/bmesh_queries.c @@ -550,7 +550,7 @@ int BM_vert_is_manifold(BMVert *v) return FALSE; } len++; - } while((e = bmesh_disk_edge_next(e, v)) != oe); + } while ((e = bmesh_disk_edge_next(e, v)) != oe); count = 1; flag = 1; diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 7d0a5423405..84d6439688a 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -895,10 +895,10 @@ static void knife_init_colors(KnifeColors *colors) UI_GetThemeColor3ubv(TH_NURB_ULINE, colors->edge); UI_GetThemeColor3ubv(TH_HANDLE_SEL_VECT, colors->curpoint); UI_GetThemeColor3ubv(TH_HANDLE_SEL_VECT, colors->curpoint_a); - colors->curpoint_a[3] = 0.4; + colors->curpoint_a[3] = 102; UI_GetThemeColor3ubv(TH_ACTIVE_SPLINE, colors->point); UI_GetThemeColor3ubv(TH_ACTIVE_SPLINE, colors->point_a); - colors->point_a[3] = 0.4; + colors->point_a[3] = 102; } /* modal loop selection drawing callback */ From 380e6c2a58ea1a6dc88ef1d633d1563115dce3a4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 20 Apr 2012 14:36:06 +0000 Subject: [PATCH 148/156] refactor rip tool out into vert/edge functions, was getting too unweildy having them mixed in. --- source/blender/editors/mesh/editmesh_rip.c | 567 +++++++++++---------- 1 file changed, 306 insertions(+), 261 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index 8ae05e3b1b8..751f0296e2d 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -342,297 +342,201 @@ static void edbm_ripsel_deselect_helper(BMesh *bm, EdgeLoopPair *eloop_pairs, } /* --- end 'ripsel' selection handling code --- */ -/* based on mouse cursor position, it defines how is being ripped */ -static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) +static int edbm_rip_call_edgesplit(BMEditMesh *em, wmOperator *op) +{ + BMOperator bmop; + + if (!EDBM_op_init(em, &bmop, op, "edgesplit edges=%he verts=%hv use_verts=%b", + BM_ELEM_TAG, BM_ELEM_SELECT, TRUE)) { + return FALSE; + } + BMO_op_exec(em->bm, &bmop); + if (!EDBM_op_finish(em, &bmop, op, TRUE)) { + return FALSE; + } + + return TRUE; +} + +/** + * This is the main vert ripping function (rip when one vertex is selected) + */ +static int edbm_rip_invoke__vert(bContext *C, wmOperator *op, wmEvent *event) { Object *obedit = CTX_data_edit_object(C); ARegion *ar = CTX_wm_region(C); RegionView3D *rv3d = CTX_wm_region_view3d(C); BMEditMesh *em = BMEdit_FromObject(obedit); BMesh *bm = em->bm; - BMOperator bmop; - BMIter iter, eiter, liter; + BMIter iter, liter; BMLoop *l; BMEdge *e, *e2; BMVert *v, *ripvert = NULL; - int i, singlesel = FALSE; + int i; float projectMat[4][4], fmval[3] = {event->mval[0], event->mval[1]}; float dist = FLT_MAX; float d; - const int totedge_orig = bm->totedge; - EdgeLoopPair *eloop_pairs = NULL; - - /* running in face mode hardly makes sense, so convert to region loop and rip */ - if (em->bm->totfacesel) { - WM_operator_name_call(C, "MESH_OT_region_to_loop", WM_OP_INVOKE_DEFAULT, NULL); - } - - /* note on selection: - * When calling edge split we operate on tagged edges rather then selected - * this is important because the edges to operate on are extended by one, - * but the selection is left alone. - * - * After calling edge split - the duplicated edges have the same selection state as the - * original, so all we do is de-select the far side from the mouse and we have a - * useful selection for grabbing. - */ + BMEditSelection ese; + int totboundary_edge = 0; ED_view3d_ob_project_mat_get(rv3d, obedit, projectMat); - /* BM_ELEM_SELECT --> BM_ELEM_TAG */ - BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { - BM_elem_flag_set(e, BM_ELEM_TAG, BM_elem_flag_test(e, BM_ELEM_SELECT)); - } - - /* handle case of one vert selected. identify - * closest edge around that vert to mouse cursor, - * then rip two adjacent edges in the vert fan. */ - - if (bm->totvertsel == 1 && bm->totedgesel == 0 && bm->totfacesel == 0) { - /* --- Vert-Rip --- */ - - BMEditSelection ese; - int totboundary_edge = 0; - singlesel = TRUE; - - /* find selected vert - same some time and check history first */ - if (EDBM_editselection_active_get(em, &ese) && ese.htype == BM_VERT) { - v = (BMVert *)ese.ele; - } - else { - ese.ele = NULL; - - BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { - if (BM_elem_flag_test(v, BM_ELEM_SELECT)) - break; - } - } - - /* this should be impossible, but sanity checks are a good thing */ - if (!v) - return OPERATOR_CANCELLED; - - e2 = NULL; - - if (v->e) { - /* find closest edge to mouse cursor */ - BM_ITER_ELEM (e, &iter, v, BM_EDGES_OF_VERT) { - int is_boundary = BM_edge_is_boundary(e); - /* consider wire as boundary for this purpose, - * otherwise we can't a face away from a wire edge */ - totboundary_edge += (is_boundary != 0 || BM_edge_is_wire(e)); - if (!BM_elem_flag_test(e, BM_ELEM_HIDDEN)) { - if (is_boundary == FALSE && BM_edge_is_manifold(e)) { - d = edbm_rip_rip_edgedist(ar, projectMat, e->v1->co, e->v2->co, fmval); - if (d < dist) { - dist = d; - e2 = e; - } - } - } - } - - } - - /* should we go ahead with edge rip or do we need to do special case, split off vertex?: - * split off vertex if... - * - we cant find an edge - this means we are ripping a faces vert that is connected to other - * geometry only at the vertex. - * - the boundary edge total is greater then 2, - * in this case edge split _can_ work but we get far nicer results if we use this special case. */ - if (totboundary_edge > 2) { - BMVert **vout; - int vout_len; - - BM_elem_select_set(bm, v, FALSE); - bmesh_vert_separate(bm, v, &vout, &vout_len); - - if (vout_len < 2) { - /* set selection back to avoid active-unselected vertex */ - BM_elem_select_set(bm, v, TRUE); - /* should never happen */ - BKE_report(op->reports, RPT_ERROR, "Error ripping vertex from faces"); - return OPERATOR_CANCELLED; - } - else { - int vi_best = 0; - - if (ese.ele) { - EDBM_editselection_remove(em, &ese.ele->head); - } - - dist = FLT_MAX; - - for (i = 0; i < vout_len; i++) { - BM_ITER_ELEM (l, &iter, vout[i], BM_LOOPS_OF_VERT) { - if (!BM_elem_flag_test(l->f, BM_ELEM_HIDDEN)) { - float l_mid_co[3]; - BM_loop_face_tangent(l, l_mid_co); - - /* scale to average of surrounding edge size, only needs to be approx */ - mul_v3_fl(l_mid_co, (BM_edge_length_calc(l->e) + BM_edge_length_calc(l->prev->e)) / 2.0f); - add_v3_v3(l_mid_co, v->co); - - d = edbm_rip_rip_edgedist(ar, projectMat, v->co, l_mid_co, fmval); - - if (d < dist) { - dist = d; - vi_best = i; - } - } - } - } - - /* select the vert from the best region */ - v = vout[vi_best]; - BM_elem_select_set(bm, v, TRUE); - - if (ese.ele) { - EDBM_editselection_store(em, &v->head); - } - - /* splice all others back together */ - if (vout_len > 2) { - - /* vout[0] == best - * vout[1] == glue - * vout[2+] == splice with glue - */ - if (vi_best != 0) { - SWAP(BMVert *, vout[0], vout[vi_best]); - vi_best = 0; - } - - for (i = 2; i < vout_len; i++) { - BM_vert_splice(bm, vout[i], vout[1]); - } - } - - MEM_freeN(vout); - - return OPERATOR_FINISHED; - } - } - - if (!e2) { - BKE_report(op->reports, RPT_ERROR, "Selected vertex has no edge/face pairs attached"); - return OPERATOR_CANCELLED; - } - - /* rip two adjacent edges */ - if (BM_edge_is_boundary(e2) || BM_vert_face_count(v) == 2) { - l = e2->l; - ripvert = BM_face_vert_separate(bm, l->f, v); - - BLI_assert(ripvert); - if (!ripvert) { - return OPERATOR_CANCELLED; - } - } - else if (BM_edge_is_manifold(e2)) { - l = e2->l; - e = BM_face_other_edge_loop(l->f, e2, v)->e; - BM_elem_flag_enable(e, BM_ELEM_TAG); - - l = e2->l->radial_next; - e = BM_face_other_edge_loop(l->f, e2, v)->e; - BM_elem_flag_enable(e, BM_ELEM_TAG); - } - - dist = FLT_MAX; + /* find selected vert - same some time and check history first */ + if (EDBM_editselection_active_get(em, &ese) && ese.htype == BM_VERT) { + v = (BMVert *)ese.ele; } else { - /* --- Edge-Rip --- */ - int totedge; - int all_minifold; + ese.ele = NULL; - /* important this runs on the original selection, before tempering with tagging */ - eloop_pairs = edbm_ripsel_looptag_helper(bm); - - /* expand edge selection */ BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { - e2 = NULL; - i = 0; - totedge = 0; - all_minifold = TRUE; - BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { + if (BM_elem_flag_test(v, BM_ELEM_SELECT)) + break; + } + } - if (!BM_edge_is_wire(e) && - !BM_elem_flag_test(e, BM_ELEM_HIDDEN)) - { - /* important to check selection rather then tag here - * else we get feedback loop */ - if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { + /* this should be impossible, but sanity checks are a good thing */ + if (!v) + return OPERATOR_CANCELLED; + + e2 = NULL; + + if (v->e) { + /* find closest edge to mouse cursor */ + BM_ITER_ELEM (e, &iter, v, BM_EDGES_OF_VERT) { + int is_boundary = BM_edge_is_boundary(e); + /* consider wire as boundary for this purpose, + * otherwise we can't a face away from a wire edge */ + totboundary_edge += (is_boundary != 0 || BM_edge_is_wire(e)); + if (!BM_elem_flag_test(e, BM_ELEM_HIDDEN)) { + if (is_boundary == FALSE && BM_edge_is_manifold(e)) { + d = edbm_rip_rip_edgedist(ar, projectMat, e->v1->co, e->v2->co, fmval); + if (d < dist) { + dist = d; e2 = e; - i++; - } - totedge++; - } - - /** #BM_vert_other_disk_edge has no hidden checks so don't check hidden here */ - if ((all_minifold == TRUE) && (BM_edge_is_manifold(e) == FALSE)) { - all_minifold = FALSE; - } - } - - /* single edge, extend */ - if (i == 1 && e2->l) { - if ((totedge == 4) || (all_minifold == FALSE)) { - BMLoop *l_a = e2->l; - BMLoop *l_b = l_a->radial_next; - - /* find the best face to follow, this wat the edge won't point away from - * the mouse when there are more then 4 (takes the shortest face fan around) */ - l = (edbm_rip_edge_side_measure(e2, l_a, ar, projectMat, fmval) < - edbm_rip_edge_side_measure(e2, l_b, ar, projectMat, fmval)) ? l_a : l_b; - - l = BM_face_other_edge_loop(l->f, e2, v); - l = l->radial_next; - l = BM_face_other_edge_loop(l->f, l->e, v); - - if (l) { - BM_elem_flag_enable(l->e, BM_ELEM_TAG); - } - } - else { - e = BM_vert_other_disk_edge(v, e2); - - if (e) { - BM_elem_flag_enable(e, BM_ELEM_TAG); } } } } + } - if (!EDBM_op_init(em, &bmop, op, "edgesplit edges=%he verts=%hv use_verts=%b", - BM_ELEM_TAG, BM_ELEM_SELECT, TRUE)) { - if (eloop_pairs) MEM_freeN(eloop_pairs); - return OPERATOR_CANCELLED; + /* should we go ahead with edge rip or do we need to do special case, split off vertex?: + * split off vertex if... + * - we cant find an edge - this means we are ripping a faces vert that is connected to other + * geometry only at the vertex. + * - the boundary edge total is greater then 2, + * in this case edge split _can_ work but we get far nicer results if we use this special case. */ + if (totboundary_edge > 2) { + BMVert **vout; + int vout_len; + + BM_elem_select_set(bm, v, FALSE); + bmesh_vert_separate(bm, v, &vout, &vout_len); + + if (vout_len < 2) { + /* set selection back to avoid active-unselected vertex */ + BM_elem_select_set(bm, v, TRUE); + /* should never happen */ + BKE_report(op->reports, RPT_ERROR, "Error ripping vertex from faces"); + return OPERATOR_CANCELLED; + } + else { + int vi_best = 0; + + if (ese.ele) { + EDBM_editselection_remove(em, &ese.ele->head); + } + + dist = FLT_MAX; + + for (i = 0; i < vout_len; i++) { + BM_ITER_ELEM (l, &iter, vout[i], BM_LOOPS_OF_VERT) { + if (!BM_elem_flag_test(l->f, BM_ELEM_HIDDEN)) { + float l_mid_co[3]; + BM_loop_face_tangent(l, l_mid_co); + + /* scale to average of surrounding edge size, only needs to be approx */ + mul_v3_fl(l_mid_co, (BM_edge_length_calc(l->e) + BM_edge_length_calc(l->prev->e)) / 2.0f); + add_v3_v3(l_mid_co, v->co); + + d = edbm_rip_rip_edgedist(ar, projectMat, v->co, l_mid_co, fmval); + + if (d < dist) { + dist = d; + vi_best = i; + } + } + } + } + + /* select the vert from the best region */ + v = vout[vi_best]; + BM_elem_select_set(bm, v, TRUE); + + if (ese.ele) { + EDBM_editselection_store(em, &v->head); + } + + /* splice all others back together */ + if (vout_len > 2) { + + /* vout[0] == best + * vout[1] == glue + * vout[2+] == splice with glue + */ + if (vi_best != 0) { + SWAP(BMVert *, vout[0], vout[vi_best]); + vi_best = 0; + } + + for (i = 2; i < vout_len; i++) { + BM_vert_splice(bm, vout[i], vout[1]); + } + } + + MEM_freeN(vout); + + return OPERATOR_FINISHED; + } } - - BMO_op_exec(bm, &bmop); - if (totedge_orig == bm->totedge) { - EDBM_op_finish(em, &bmop, op, TRUE); - - BKE_report(op->reports, RPT_ERROR, "No edges could be ripped"); - if (eloop_pairs) MEM_freeN(eloop_pairs); + if (!e2) { + BKE_report(op->reports, RPT_ERROR, "Selected vertex has no edge/face pairs attached"); return OPERATOR_CANCELLED; } - if (singlesel) { + /* rip two adjacent edges */ + if (BM_edge_is_boundary(e2) || BM_vert_face_count(v) == 2) { + l = e2->l; + ripvert = BM_face_vert_separate(bm, l->f, v); + + BLI_assert(ripvert); + if (!ripvert) { + return OPERATOR_CANCELLED; + } + } + else if (BM_edge_is_manifold(e2)) { + l = e2->l; + e = BM_face_other_edge_loop(l->f, e2, v)->e; + BM_elem_flag_enable(e, BM_ELEM_TAG); + + l = e2->l->radial_next; + e = BM_face_other_edge_loop(l->f, e2, v)->e; + BM_elem_flag_enable(e, BM_ELEM_TAG); + } + + dist = FLT_MAX; + + if (!edbm_rip_call_edgesplit(em, op)) { + return OPERATOR_CANCELLED; + } + else { + /* --- select which vert --- */ BMVert *v_best = NULL; float l_prev_co[3], l_next_co[3], l_corner_co[3]; float scale; - /* not good enough! - original vert may not be attached to the closest edge */ -#if 0 - EDBM_flag_disable_all(em, BM_ELEM_SELECT); - BM_elem_select_set(bm, ripvert, TRUE); -#else - dist = FLT_MAX; BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { @@ -664,22 +568,162 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) if (v_best) { BM_elem_select_set(bm, v_best, TRUE); } -#endif + } + + return OPERATOR_FINISHED; +} + +/** + * This is the main edge ripping function + */ +static int edbm_rip_invoke__edge(bContext *C, wmOperator *op, wmEvent *event) +{ + Object *obedit = CTX_data_edit_object(C); + ARegion *ar = CTX_wm_region(C); + RegionView3D *rv3d = CTX_wm_region_view3d(C); + BMEditMesh *em = BMEdit_FromObject(obedit); + BMesh *bm = em->bm; + BMIter iter, eiter; + BMLoop *l; + BMEdge *e, *e2; + BMVert *v; + int i; + float projectMat[4][4], fmval[3] = {event->mval[0], event->mval[1]}; + + int totedge; + int all_minifold; + + EdgeLoopPair *eloop_pairs; + + ED_view3d_ob_project_mat_get(rv3d, obedit, projectMat); + + /* important this runs on the original selection, before tempering with tagging */ + eloop_pairs = edbm_ripsel_looptag_helper(bm); + + /* expand edge selection */ + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { + e2 = NULL; + i = 0; + totedge = 0; + all_minifold = TRUE; + BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) { + + if (!BM_edge_is_wire(e) && + !BM_elem_flag_test(e, BM_ELEM_HIDDEN)) + { + /* important to check selection rather then tag here + * else we get feedback loop */ + if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { + e2 = e; + i++; + } + totedge++; + } + + /** #BM_vert_other_disk_edge has no hidden checks so don't check hidden here */ + if ((all_minifold == TRUE) && (BM_edge_is_manifold(e) == FALSE)) { + all_minifold = FALSE; + } + } + + /* single edge, extend */ + if (i == 1 && e2->l) { + if ((totedge == 4) || (all_minifold == FALSE)) { + BMLoop *l_a = e2->l; + BMLoop *l_b = l_a->radial_next; + + /* find the best face to follow, this wat the edge won't point away from + * the mouse when there are more then 4 (takes the shortest face fan around) */ + l = (edbm_rip_edge_side_measure(e2, l_a, ar, projectMat, fmval) < + edbm_rip_edge_side_measure(e2, l_b, ar, projectMat, fmval)) ? l_a : l_b; + + l = BM_face_other_edge_loop(l->f, e2, v); + l = l->radial_next; + l = BM_face_other_edge_loop(l->f, l->e, v); + + if (l) { + BM_elem_flag_enable(l->e, BM_ELEM_TAG); + } + } + else { + e = BM_vert_other_disk_edge(v, e2); + + if (e) { + BM_elem_flag_enable(e, BM_ELEM_TAG); + } + } + } + } + + edbm_ripsel_deselect_helper(bm, eloop_pairs, + ar, projectMat, fmval); + MEM_freeN(eloop_pairs); + + if (!edbm_rip_call_edgesplit(em, op)) { + return OPERATOR_CANCELLED; + } + + return OPERATOR_FINISHED; +} + +/* based on mouse cursor position, it defines how is being ripped */ +static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + Object *obedit = CTX_data_edit_object(C); + BMEditMesh *em = BMEdit_FromObject(obedit); + BMesh *bm = em->bm; + BMIter iter; + BMEdge *e; + int singlesel = (bm->totvertsel == 1 && bm->totedgesel == 0 && bm->totfacesel == 0); + const int totedge_orig = bm->totedge; + int ret; + + /* running in face mode hardly makes sense, so convert to region loop and rip */ + if (em->bm->totfacesel) { + /* highly nifty but hard to sypport since the operator can fail and we're left + * with modified selection */ + // WM_operator_name_call(C, "MESH_OT_region_to_loop", WM_OP_INVOKE_DEFAULT, NULL); + + BKE_report(op->reports, RPT_ERROR, "Can't rip selected faces"); + return OPERATOR_CANCELLED; + } + + /* note on selection: + * When calling edge split we operate on tagged edges rather then selected + * this is important because the edges to operate on are extended by one, + * but the selection is left alone. + * + * After calling edge split - the duplicated edges have the same selection state as the + * original, so all we do is de-select the far side from the mouse and we have a + * useful selection for grabbing. + */ + + /* BM_ELEM_SELECT --> BM_ELEM_TAG */ + BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { + BM_elem_flag_set(e, BM_ELEM_TAG, BM_elem_flag_test(e, BM_ELEM_SELECT)); + } + + /* split 2 main parts of this operator out into vertex and edge ripping */ + if (singlesel) { + ret = edbm_rip_invoke__vert(C, op, event); } else { - edbm_ripsel_deselect_helper(bm, eloop_pairs, - ar, projectMat, fmval); - MEM_freeN(eloop_pairs); + ret = edbm_rip_invoke__edge(C, op, event); + } + + if (ret == OPERATOR_CANCELLED) { + return OPERATOR_CANCELLED; } EDBM_selectmode_flush(em); - BLI_assert(singlesel ? (bm->totvertsel > 0) : (bm->totedgesel > 0)); - - if (!EDBM_op_finish(em, &bmop, op, TRUE)) { + if (totedge_orig == bm->totedge) { + BKE_report(op->reports, RPT_ERROR, "No edges could be ripped"); return OPERATOR_CANCELLED; } + BLI_assert(singlesel ? (bm->totvertsel > 0) : (bm->totedgesel > 0)); + if (bm->totvertsel == 0) { return OPERATOR_CANCELLED; } @@ -689,6 +733,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_FINISHED; } + void MESH_OT_rip(wmOperatorType *ot) { /* identifiers */ From cb3dc8ff0ecb502716a1ca623a7079a647d0b3e7 Mon Sep 17 00:00:00 2001 From: Antony Riakiotakis Date: Fri, 20 Apr 2012 14:46:46 +0000 Subject: [PATCH 149/156] Knife tool: Increase the header string length to avoid clipping the message. --- source/blender/editors/mesh/editmesh_knife.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 84d6439688a..11c19af4914 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -205,7 +205,7 @@ static void knife_input_ray_cast(KnifeTool_OpData *kcd, const int mval_i[2], static void knife_update_header(bContext *C, KnifeTool_OpData *kcd) { - #define HEADER_LENGTH 170 + #define HEADER_LENGTH 180 char header[HEADER_LENGTH]; BLI_snprintf(header, HEADER_LENGTH, "LMB: define cut lines, Return: confirm, Esc or RMB: cancel, E: new cut, Ctrl: midpoint snap (%s), " From f62774505320a9e68001b9d3c1f655e354268473 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 20 Apr 2012 14:59:24 +0000 Subject: [PATCH 150/156] aparently `yards` are not used a lot, suppress their use in button display (input still knows about them) - was reported as a bug. also fix minor rip bug where active selection was lost. --- source/blender/blenkernel/intern/unit.c | 2 +- source/blender/editors/mesh/editmesh_rip.c | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/source/blender/blenkernel/intern/unit.c b/source/blender/blenkernel/intern/unit.c index 7a71853641d..48e939be7e9 100644 --- a/source/blender/blenkernel/intern/unit.c +++ b/source/blender/blenkernel/intern/unit.c @@ -131,7 +131,7 @@ static struct bUnitDef buImperialLenDef[] = { {"mile", "miles", "mi", "m", "Miles", UN_SC_MI, 0.0, B_UNIT_DEF_NONE}, {"furlong", "furlongs", "fur", NULL, "Furlongs",UN_SC_FUR, 0.0, B_UNIT_DEF_SUPPRESS}, {"chain", "chains", "ch", NULL, "Chains", UN_SC_CH, 0.0, B_UNIT_DEF_SUPPRESS}, - {"yard", "yards", "yd", NULL, "Yards", UN_SC_YD, 0.0, B_UNIT_DEF_NONE}, + {"yard", "yards", "yd", NULL, "Yards", UN_SC_YD, 0.0, B_UNIT_DEF_SUPPRESS}, {"foot", "feet", "'", "ft", "Feet", UN_SC_FT, 0.0, B_UNIT_DEF_NONE}, /* base unit */ {"inch", "inches", "\"", "in", "Inches", UN_SC_IN, 0.0, B_UNIT_DEF_NONE}, {"thou", "thou", "thou", "mil", "Thou", UN_SC_MIL, 0.0, B_UNIT_DEF_NONE}, /* plural for thou has no 's' */ diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index 751f0296e2d..7333bf9aa49 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -567,6 +567,9 @@ static int edbm_rip_invoke__vert(bContext *C, wmOperator *op, wmEvent *event) if (v_best) { BM_elem_select_set(bm, v_best, TRUE); + if (ese.ele) { + EDBM_editselection_store(em, &v_best->head); + } } } From 6ef9f021bc00872c20b778dff775cdba2af96f27 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 20 Apr 2012 15:06:54 +0000 Subject: [PATCH 151/156] fix [#31036] image.gl_load() consistently segfault at gluBuild2DMipmaps incorrect argument to gluBuild2DMipmaps() --- source/blender/makesrna/intern/rna_image_api.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/rna_image_api.c b/source/blender/makesrna/intern/rna_image_api.c index 1b50db36a3d..8594bda96d1 100644 --- a/source/blender/makesrna/intern/rna_image_api.c +++ b/source/blender/makesrna/intern/rna_image_api.c @@ -200,7 +200,7 @@ static int rna_Image_gl_load(Image *image, ReportList *reports, int filter, int glBindTexture(GL_TEXTURE_2D, *bind); if (filter != GL_NEAREST && filter != GL_LINEAR) - error = (int)gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_INT, ibuf->rect); + error = (int)gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect); if (!error) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, image->tpageflag & IMA_CLAMP_U ? GL_CLAMP : GL_REPEAT); From 91dc245f93d38307c586b445b91a49ea6cea32e1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 20 Apr 2012 16:17:52 +0000 Subject: [PATCH 152/156] attempt to fix [#31033], cant redo the bug but button layout wasnt great - no more blank space under XYZ - scales with DPI --- .../editors/space_view3d/view3d_buttons.c | 45 ++++++++++++------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 88d78442587..c3ff00e3c82 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -310,70 +310,83 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float if (block) { /* buttons */ uiBut *but; + int yi = 200; + const int buth = 20 * UI_DPI_ICON_FAC; + const int but_margin = 2; memcpy(tfp->ve_median, median, sizeof(tfp->ve_median)); uiBlockBeginAlign(block); if (tot == 1) { - uiDefBut(block, LABEL, 0, IFACE_("Vertex:"), 0, 170, 200, 20, NULL, 0, 0, 0, 0, ""); + uiDefBut(block, LABEL, 0, IFACE_("Vertex:"), 0, yi -= buth, 200, buth, NULL, 0, 0, 0, 0, ""); } else { - uiDefBut(block, LABEL, 0, IFACE_("Median:"), 0, 170, 200, 20, NULL, 0, 0, 0, 0, ""); + uiDefBut(block, LABEL, 0, IFACE_("Median:"), 0, yi -= buth, 200, buth, NULL, 0, 0, 0, 0, ""); } uiBlockBeginAlign(block); /* Should be no need to translate these. */ - but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "X:", 0, 150, 200, 20, + but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "X:", 0, yi -= buth, 200, buth, &(tfp->ve_median[0]), -lim, lim, 10, RNA_TRANSLATION_PREC_DEFAULT, ""); uiButSetUnitType(but, PROP_UNIT_LENGTH); - but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Y:", 0, 130, 200, 20, + but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Y:", 0, yi -= buth, 200, buth, &(tfp->ve_median[1]), -lim, lim, 10, RNA_TRANSLATION_PREC_DEFAULT, ""); uiButSetUnitType(but, PROP_UNIT_LENGTH); - but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Z:", 0, 110, 200, 20, + but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Z:",0, yi -= buth, 200, buth, &(tfp->ve_median[2]), -lim, lim, 10, RNA_TRANSLATION_PREC_DEFAULT, ""); uiButSetUnitType(but, PROP_UNIT_LENGTH); if (totw == tot) { - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "W:", 0, 90, 200, 20, + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "W:", 0, yi -= buth, 200, buth, &(tfp->ve_median[3]), 0.01, 100.0, 1, 3, ""); } uiBlockBeginAlign(block); - uiDefButBitS(block, TOG, V3D_GLOBAL_STATS, B_REDR, IFACE_("Global"), 0, 65, 100, 20, + uiDefButBitS(block, TOG, V3D_GLOBAL_STATS, B_REDR, IFACE_("Global"), + 0, yi -= buth + but_margin, 100, buth, &v3d->flag, 0, 0, 0, 0, "Displays global values"); - uiDefButBitS(block, TOGN, V3D_GLOBAL_STATS, B_REDR, IFACE_("Local"), 100, 65, 100, 20, + uiDefButBitS(block, TOGN, V3D_GLOBAL_STATS, B_REDR, IFACE_("Local"), + 100, yi, 100, buth, &v3d->flag, 0, 0, 0, 0, "Displays local values"); uiBlockEndAlign(block); if (totweight == 1) { - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Weight:"), 0, 40, 200, 20, + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Weight:"), + 0, yi -= buth + but_margin, 200, buth, &(tfp->ve_median[4]), 0.0, 1.0, 1, 3, TIP_("Weight used for SoftBody Goal")); } else if (totweight > 1) { - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Mean Weight:"), 0, 40, 200, 20, + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Mean Weight:"), + 0, yi -= buth, 200, buth, &(tfp->ve_median[4]), 0.0, 1.0, 1, 3, TIP_("Weight used for SoftBody Goal")); } if (totradius == 1) { - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Radius:"), 0, 20, 200, 20, + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Radius:"), + 0, yi -= buth + but_margin, 200, buth, &(tfp->ve_median[5]), 0.0, 100.0, 1, 3, TIP_("Radius of curve control points")); } else if (totradius > 1) { - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Mean Radius:"), 0, 20, 200, 20, + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Mean Radius:"), + 0, yi -= buth + but_margin, 200, buth, &(tfp->ve_median[5]), 0.0, 100.0, 1, 3, TIP_("Radius of curve control points")); } if (totedge == 1) { - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Crease:"), 0, 40, 200, 20, + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Crease:"), + 0, yi -= buth + but_margin, 200, buth, &(tfp->ve_median[3]), 0.0, 1.0, 1, 3, TIP_("Weight used by SubSurf modifier")); - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Bevel Weight:"), 0, 20, 200, 20, + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Bevel Weight:"), + 0, yi -= buth + but_margin, 200, buth, &(tfp->ve_median[6]), 0.0, 1.0, 1, 3, TIP_("Weight used by Bevel modifier")); } else if (totedge > 1) { - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Mean Crease:"), 0, 40, 200, 20, + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Mean Crease:"), + 0, yi -= buth + but_margin, 200, buth, &(tfp->ve_median[3]), 0.0, 1.0, 1, 3, TIP_("Weight used by SubSurf modifier")); - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Mean Bevel Weight:"), 0, 20, 200, 20, + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Mean Bevel Weight:"), + 0, yi -= buth + but_margin, 200, buth, &(tfp->ve_median[6]), 0.0, 1.0, 1, 3, TIP_("Weight used by Bevel modifier")); } From b26865ba99a8a9dea483a71b757d9eb2de0f7198 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 20 Apr 2012 16:55:47 +0000 Subject: [PATCH 153/156] code cleanup: prefer BM_face/edge/vert_select_set() over BM_elem_select_set() when the type is known (saves switch statement check on the type). Add asserts so the correct types are ensured. --- source/blender/bmesh/intern/bmesh_marking.c | 19 +++--- source/blender/bmesh/intern/bmesh_mesh_conv.c | 4 +- source/blender/bmesh/operators/bmo_create.c | 4 +- .../blender/bmesh/operators/bmo_subdivide.c | 4 +- .../blender/editors/mesh/editmesh_loopcut.c | 2 +- source/blender/editors/mesh/editmesh_rip.c | 12 ++-- source/blender/editors/mesh/editmesh_select.c | 68 +++++++++---------- source/blender/editors/mesh/editmesh_tools.c | 32 ++++----- source/blender/editors/object/object_hook.c | 2 +- source/blender/editors/object/object_vgroup.c | 2 +- .../editors/space_view3d/view3d_select.c | 22 +++--- source/blender/editors/transform/transform.c | 8 +-- source/blender/editors/uvedit/uvedit_ops.c | 46 ++++++------- 13 files changed, 114 insertions(+), 111 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c index 7cf29031765..7b6d562658e 100644 --- a/source/blender/bmesh/intern/bmesh_marking.c +++ b/source/blender/bmesh/intern/bmesh_marking.c @@ -245,8 +245,7 @@ void BM_mesh_select_flush(BMesh *bm) */ void BM_vert_select_set(BMesh *bm, BMVert *v, int select) { - /* BMIter iter; */ - /* BMEdge *e; */ + BLI_assert(v->head.htype == BM_VERT); if (BM_elem_flag_test(v, BM_ELEM_HIDDEN)) { return; @@ -273,6 +272,8 @@ void BM_vert_select_set(BMesh *bm, BMVert *v, int select) */ void BM_edge_select_set(BMesh *bm, BMEdge *e, int select) { + BLI_assert(e->head.htype == BM_EDGE); + if (BM_elem_flag_test(e, BM_ELEM_HIDDEN)) { return; } @@ -281,8 +282,8 @@ void BM_edge_select_set(BMesh *bm, BMEdge *e, int select) if (!BM_elem_flag_test(e, BM_ELEM_SELECT)) bm->totedgesel += 1; BM_elem_flag_enable(e, BM_ELEM_SELECT); - BM_elem_select_set(bm, e->v1, TRUE); - BM_elem_select_set(bm, e->v2, TRUE); + BM_vert_select_set(bm, e->v1, TRUE); + BM_vert_select_set(bm, e->v2, TRUE); } else { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) bm->totedgesel -= 1; @@ -318,8 +319,8 @@ void BM_edge_select_set(BMesh *bm, BMEdge *e, int select) } } else { - BM_elem_select_set(bm, e->v1, FALSE); - BM_elem_select_set(bm, e->v2, FALSE); + BM_vert_select_set(bm, e->v1, FALSE); + BM_vert_select_set(bm, e->v2, FALSE); } } @@ -336,6 +337,8 @@ void BM_face_select_set(BMesh *bm, BMFace *f, int select) BMLoop *l_iter; BMLoop *l_first; + BLI_assert(f->head.htype == BM_FACE); + if (BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { return; } @@ -369,7 +372,7 @@ void BM_face_select_set(BMesh *bm, BMFace *f, int select) } if (!f2) { - BM_elem_select_set(bm, l->e, FALSE); + BM_edge_select_set(bm, l->e, FALSE); } } @@ -383,7 +386,7 @@ void BM_face_select_set(BMesh *bm, BMFace *f, int select) } if (!e) { - BM_elem_select_set(bm, l->v, FALSE); + BM_vert_select_set(bm, l->v, FALSE); } } } diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.c b/source/blender/bmesh/intern/bmesh_mesh_conv.c index 574fb62b703..a7ecc897ff0 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_conv.c +++ b/source/blender/bmesh/intern/bmesh_mesh_conv.c @@ -263,7 +263,7 @@ void BM_mesh_bm_from_me(BMesh *bm, Mesh *me, int set_key, int act_key_nr) /* this is necessary for selection counts to work properly */ if (medge->flag & SELECT) { - BM_elem_select_set(bm, e, TRUE); + BM_edge_select_set(bm, e, TRUE); } /* Copy Custom Data */ @@ -329,7 +329,7 @@ void BM_mesh_bm_from_me(BMesh *bm, Mesh *me, int set_key, int act_key_nr) /* this is necessary for selection counts to work properly */ if (mpoly->flag & ME_FACE_SEL) { - BM_elem_select_set(bm, f, TRUE); + BM_face_select_set(bm, f, TRUE); } f->mat_nr = mpoly->mat_nr; diff --git a/source/blender/bmesh/operators/bmo_create.c b/source/blender/bmesh/operators/bmo_create.c index d02bb14bebf..6272c43d0c5 100644 --- a/source/blender/bmesh/operators/bmo_create.c +++ b/source/blender/bmesh/operators/bmo_create.c @@ -614,10 +614,10 @@ static void init_rotsys(BMesh *bm, EdgeData *edata, VertData *vdata) BM_elem_index_set(v2, -1); /* set_dirty! */ //BM_edge_create(bm, cv, v2, NULL, FALSE); - BM_elem_select_set(bm, v2, TRUE); + BM_vert_select_set(bm, v2, TRUE); if (lastv) { e2 = BM_edge_create(bm, lastv, v2, NULL, FALSE); - BM_elem_select_set(bm, e2, TRUE); + BM_edge_select_set(bm, e2, TRUE); } lastv = v2; diff --git a/source/blender/bmesh/operators/bmo_subdivide.c b/source/blender/bmesh/operators/bmo_subdivide.c index b3d4584107a..d629585f7cd 100644 --- a/source/blender/bmesh/operators/bmo_subdivide.c +++ b/source/blender/bmesh/operators/bmo_subdivide.c @@ -1069,13 +1069,13 @@ void BM_mesh_esubdivideflag(Object *UNUSED(obedit), BMesh *bm, int flag, float s BM_elem_flag_test(e->v1, BM_ELEM_SELECT) && BM_elem_flag_test(e->v2, BM_ELEM_SELECT)) { - BM_elem_select_set(bm, e, TRUE); + BM_edge_select_set(bm, e, TRUE); } else if (BM_elem_flag_test(e, BM_ELEM_SELECT) && (!BM_elem_flag_test(e->v1, BM_ELEM_SELECT) || !BM_elem_flag_test(e->v2, BM_ELEM_SELECT))) { - BM_elem_select_set(bm, e, FALSE); + BM_edge_select_set(bm, e, FALSE); } } } diff --git a/source/blender/editors/mesh/editmesh_loopcut.c b/source/blender/editors/mesh/editmesh_loopcut.c index d05bf10e206..45a975e5d52 100644 --- a/source/blender/editors/mesh/editmesh_loopcut.c +++ b/source/blender/editors/mesh/editmesh_loopcut.c @@ -211,7 +211,7 @@ static void edgering_sel(tringselOpData *lcd, int previewlines, int select) eed = BMW_begin(&walker, startedge); for ( ; eed; eed = BMW_step(&walker)) { - BM_elem_select_set(em->bm, eed, TRUE); + BM_edge_select_set(em->bm, eed, TRUE); } BMW_end(&walker); diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index 7333bf9aa49..1e0f0b2579b 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -336,7 +336,7 @@ static void edbm_ripsel_deselect_helper(BMesh *bm, EdgeLoopPair *eloop_pairs, e = (score_a > score_b) ? lp->l_a->e : lp->l_b->e; v_prev = edbm_ripsel_edloop_pair_start_vert(e); for (; e; e = edbm_ripsel_edge_uid_step(e, &v_prev)) { - BM_elem_select_set(bm, e, FALSE); + BM_edge_select_set(bm, e, FALSE); } } } @@ -431,12 +431,12 @@ static int edbm_rip_invoke__vert(bContext *C, wmOperator *op, wmEvent *event) BMVert **vout; int vout_len; - BM_elem_select_set(bm, v, FALSE); + BM_vert_select_set(bm, v, FALSE); bmesh_vert_separate(bm, v, &vout, &vout_len); if (vout_len < 2) { /* set selection back to avoid active-unselected vertex */ - BM_elem_select_set(bm, v, TRUE); + BM_vert_select_set(bm, v, TRUE); /* should never happen */ BKE_report(op->reports, RPT_ERROR, "Error ripping vertex from faces"); return OPERATOR_CANCELLED; @@ -472,7 +472,7 @@ static int edbm_rip_invoke__vert(bContext *C, wmOperator *op, wmEvent *event) /* select the vert from the best region */ v = vout[vi_best]; - BM_elem_select_set(bm, v, TRUE); + BM_vert_select_set(bm, v, TRUE); if (ese.ele) { EDBM_editselection_store(em, &v->head); @@ -541,7 +541,7 @@ static int edbm_rip_invoke__vert(bContext *C, wmOperator *op, wmEvent *event) BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_SELECT)) { /* disable by default, re-enable winner at end */ - BM_elem_select_set(bm, v, FALSE); + BM_vert_select_set(bm, v, FALSE); BM_ITER_ELEM (l, &liter, v, BM_LOOPS_OF_VERT) { /* calculate a point in the face, rather then calculate the middle, @@ -566,7 +566,7 @@ static int edbm_rip_invoke__vert(bContext *C, wmOperator *op, wmEvent *event) } if (v_best) { - BM_elem_select_set(bm, v_best, TRUE); + BM_vert_select_set(bm, v_best, TRUE); if (ese.ele) { EDBM_editselection_store(em, &v_best->head); } diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index c20c3e50e67..b6e162cb220 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -95,7 +95,7 @@ void EDBM_select_mirrored(Object *UNUSED(obedit), BMEditMesh *em, int extend) v2 = EDBM_verts_mirror_get(em, v1); if (v2 && !BM_elem_flag_test(v2, BM_ELEM_HIDDEN)) { - BM_elem_select_set(em->bm, v2, TRUE); + BM_vert_select_set(em->bm, v2, TRUE); } } @@ -1166,7 +1166,7 @@ static void edgetag_context_set(BMEditMesh *em, Scene *scene, BMEdge *e, int val switch (scene->toolsettings->edge_mode) { case EDGE_MODE_SELECT: - BM_elem_select_set(em->bm, e, val); + BM_edge_select_set(em->bm, e, val); break; case EDGE_MODE_TAG_SEAM: BM_elem_flag_set(e, BM_ELEM_SEAM, val); @@ -1459,31 +1459,31 @@ int mouse_mesh(bContext *C, const int mval[2], short extend) if (!BM_elem_flag_test(efa, BM_ELEM_SELECT)) { EDBM_editselection_store(vc.em, &efa->head); - BM_elem_select_set(vc.em->bm, efa, TRUE); + BM_face_select_set(vc.em->bm, efa, TRUE); } else if (extend) { EDBM_editselection_remove(vc.em, &efa->head); - BM_elem_select_set(vc.em->bm, efa, FALSE); + BM_face_select_set(vc.em->bm, efa, FALSE); } } else if (eed) { if (!BM_elem_flag_test(eed, BM_ELEM_SELECT)) { EDBM_editselection_store(vc.em, &eed->head); - BM_elem_select_set(vc.em->bm, eed, TRUE); + BM_edge_select_set(vc.em->bm, eed, TRUE); } else if (extend) { EDBM_editselection_remove(vc.em, &eed->head); - BM_elem_select_set(vc.em->bm, eed, FALSE); + BM_edge_select_set(vc.em->bm, eed, FALSE); } } else if (eve) { if (!BM_elem_flag_test(eve, BM_ELEM_SELECT)) { EDBM_editselection_store(vc.em, &eve->head); - BM_elem_select_set(vc.em->bm, eve, TRUE); + BM_vert_select_set(vc.em->bm, eve, TRUE); } else if (extend) { EDBM_editselection_remove(vc.em, &eve->head); - BM_elem_select_set(vc.em->bm, eve, FALSE); + BM_vert_select_set(vc.em->bm, eve, FALSE); } } @@ -1554,12 +1554,12 @@ void EDBM_selectmode_set(BMEditMesh *em) else if (em->selectmode & SCE_SELECT_EDGE) { /* deselect vertices, and select again based on edge select */ eve = BM_iter_new(&iter, em->bm, BM_VERTS_OF_MESH, NULL); - for (; eve; eve = BM_iter_step(&iter)) BM_elem_select_set(em->bm, eve, FALSE); + for (; eve; eve = BM_iter_step(&iter)) BM_vert_select_set(em->bm, eve, FALSE); eed = BM_iter_new(&iter, em->bm, BM_EDGES_OF_MESH, NULL); for (; eed; eed = BM_iter_step(&iter)) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { - BM_elem_select_set(em->bm, eed, TRUE); + BM_edge_select_set(em->bm, eed, TRUE); } } @@ -1569,12 +1569,12 @@ void EDBM_selectmode_set(BMEditMesh *em) else if (em->selectmode & SCE_SELECT_FACE) { /* deselect eges, and select again based on face select */ eed = BM_iter_new(&iter, em->bm, BM_EDGES_OF_MESH, NULL); - for (; eed; eed = BM_iter_step(&iter)) BM_elem_select_set(em->bm, eed, FALSE); + for (; eed; eed = BM_iter_step(&iter)) BM_edge_select_set(em->bm, eed, FALSE); efa = BM_iter_new(&iter, em->bm, BM_FACES_OF_MESH, NULL); for (; efa; efa = BM_iter_step(&iter)) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { - BM_elem_select_set(em->bm, efa, TRUE); + BM_face_select_set(em->bm, efa, TRUE); } } } @@ -1595,7 +1595,7 @@ void EDBM_selectmode_convert(BMEditMesh *em, short oldmode, short selectmode) if ((BM_elem_flag_test(eed->v1, BM_ELEM_SELECT) || BM_elem_flag_test(eed->v2, BM_ELEM_SELECT))) { - BM_elem_select_set(em->bm, eed, TRUE); + BM_edge_select_set(em->bm, eed, TRUE); } } } @@ -1609,7 +1609,7 @@ void EDBM_selectmode_convert(BMEditMesh *em, short oldmode, short selectmode) l = BM_iter_new(&liter, em->bm, BM_LOOPS_OF_FACE, efa); for (; l; l = BM_iter_step(&liter)) { if (BM_elem_flag_test(l->v, BM_ELEM_SELECT)) { - BM_elem_select_set(em->bm, efa, TRUE); + BM_face_select_set(em->bm, efa, TRUE); break; } } @@ -1628,7 +1628,7 @@ void EDBM_selectmode_convert(BMEditMesh *em, short oldmode, short selectmode) l = BM_iter_new(&liter, em->bm, BM_LOOPS_OF_FACE, efa); for (; l; l = BM_iter_step(&liter)) { if (BM_elem_flag_test(l->v, BM_ELEM_SELECT)) { - BM_elem_select_set(em->bm, efa, TRUE); + BM_face_select_set(em->bm, efa, TRUE); break; } } @@ -1647,7 +1647,7 @@ void EDBM_deselect_by_material(BMEditMesh *em, const short index, const short se if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; if (efa->mat_nr == index) { - BM_elem_select_set(em->bm, efa, select); + BM_face_select_set(em->bm, efa, select); } } } @@ -1671,21 +1671,21 @@ void EDBM_select_swap(BMEditMesh *em) /* exported for UV */ BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) continue; - BM_elem_select_set(em->bm, eve, !BM_elem_flag_test(eve, BM_ELEM_SELECT)); + BM_vert_select_set(em->bm, eve, !BM_elem_flag_test(eve, BM_ELEM_SELECT)); } } else if (em->selectmode & SCE_SELECT_EDGE) { BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) continue; - BM_elem_select_set(em->bm, eed, !BM_elem_flag_test(eed, BM_ELEM_SELECT)); + BM_edge_select_set(em->bm, eed, !BM_elem_flag_test(eed, BM_ELEM_SELECT)); } } else { BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) continue; - BM_elem_select_set(em->bm, efa, !BM_elem_flag_test(efa, BM_ELEM_SELECT)); + BM_face_select_set(em->bm, efa, !BM_elem_flag_test(efa, BM_ELEM_SELECT)); } } @@ -1716,7 +1716,7 @@ int EDBM_select_interior_faces(BMEditMesh *em) } if (ok) { - BM_elem_select_set(bm, efa, TRUE); + BM_face_select_set(bm, efa, TRUE); change = TRUE; } } @@ -1799,7 +1799,7 @@ static int edbm_select_linked_pick_invoke(bContext *C, wmOperator *op, wmEvent * e = BMW_begin(&walker, efa); for (; efa; efa = BMW_step(&walker)) { - BM_elem_select_set(bm, efa, sel); + BM_face_select_set(bm, efa, sel); } BMW_end(&walker); } @@ -1821,7 +1821,7 @@ static int edbm_select_linked_pick_invoke(bContext *C, wmOperator *op, wmEvent * e = BMW_begin(&walker, eed->v1); for (; e; e = BMW_step(&walker)) { - BM_elem_select_set(bm, e, sel); + BM_edge_select_set(bm, e, sel); } BMW_end(&walker); @@ -1891,7 +1891,7 @@ static int edbm_select_linked_exec(bContext *C, wmOperator *op) if (BM_elem_flag_test(efa, BM_ELEM_TAG)) { e = BMW_begin(&walker, efa); for (; efa; efa = BMW_step(&walker)) { - BM_elem_select_set(bm, efa, TRUE); + BM_face_select_set(bm, efa, TRUE); } } } @@ -1916,8 +1916,8 @@ static int edbm_select_linked_exec(bContext *C, wmOperator *op) if (BM_elem_flag_test(v, BM_ELEM_TAG)) { e = BMW_begin(&walker, v); for (; e; e = BMW_step(&walker)) { - BM_elem_select_set(em->bm, e->v1, TRUE); - BM_elem_select_set(em->bm, e->v2, TRUE); + BM_vert_select_set(em->bm, e->v1, TRUE); + BM_vert_select_set(em->bm, e->v2, TRUE); } } } @@ -2237,7 +2237,7 @@ static int edbm_select_sharp_edges_exec(bContext *C, wmOperator *op) angle = angle_normalized_v3v3(l1->f->no, l2->f->no); if (fabsf(angle) > sharp) { - BM_elem_select_set(em->bm, e, TRUE); + BM_edge_select_set(em->bm, e, TRUE); } } @@ -2296,7 +2296,7 @@ static int edbm_select_linked_flat_faces_exec(bContext *C, wmOperator *op) f = stack[i - 1]; i--; - BM_elem_select_set(em->bm, f, TRUE); + BM_face_select_set(em->bm, f, TRUE); BM_elem_flag_enable(f, BM_ELEM_TAG); @@ -2365,13 +2365,13 @@ static int edbm_select_non_manifold_exec(bContext *C, wmOperator *op) BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(v, BM_ELEM_HIDDEN) && !BM_vert_is_manifold(v)) { - BM_elem_select_set(em->bm, v, TRUE); + BM_vert_select_set(em->bm, v, TRUE); } } BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) { if (!BM_elem_flag_test(e, BM_ELEM_HIDDEN) && !BM_edge_is_manifold(e)) { - BM_elem_select_set(em->bm, e, TRUE); + BM_edge_select_set(em->bm, e, TRUE); } } @@ -2413,7 +2413,7 @@ static int edbm_select_random_exec(bContext *C, wmOperator *op) if (em->selectmode & SCE_SELECT_VERTEX) { BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) && BLI_frand() < randfac) { - BM_elem_select_set(em->bm, eve, TRUE); + BM_vert_select_set(em->bm, eve, TRUE); } } EDBM_selectmode_flush(em); @@ -2421,7 +2421,7 @@ static int edbm_select_random_exec(bContext *C, wmOperator *op) else if (em->selectmode & SCE_SELECT_EDGE) { BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN) && BLI_frand() < randfac) { - BM_elem_select_set(em->bm, eed, TRUE); + BM_edge_select_set(em->bm, eed, TRUE); } } EDBM_selectmode_flush(em); @@ -2429,7 +2429,7 @@ static int edbm_select_random_exec(bContext *C, wmOperator *op) else { BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) && BLI_frand() < randfac) { - BM_elem_select_set(em->bm, efa, TRUE); + BM_face_select_set(em->bm, efa, TRUE); } } EDBM_selectmode_flush(em); @@ -2480,14 +2480,14 @@ static int edbm_select_next_loop_exec(bContext *C, wmOperator *UNUSED(op)) BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { if (BM_elem_flag_test(l->v, BM_ELEM_SELECT)) { BM_elem_flag_enable(l->next->v, BM_ELEM_TAG); - BM_elem_select_set(em->bm, l->v, FALSE); + BM_vert_select_set(em->bm, l->v, FALSE); } } } BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(v, BM_ELEM_TAG)) { - BM_elem_select_set(em->bm, v, TRUE); + BM_vert_select_set(em->bm, v, TRUE); } } diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 2c1c25b2a91..a0fcae860f6 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -191,7 +191,7 @@ static short edbm_extrude_face_indiv(BMEditMesh *em, wmOperator *op, const char BMO_op_exec(em->bm, &bmop); BMO_ITER (f, &siter, em->bm, &bmop, "faceout", BM_FACE) { - BM_elem_select_set(em->bm, f, TRUE); + BM_face_select_set(em->bm, f, TRUE); /* set face vertex normals to face normal */ BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { @@ -353,8 +353,8 @@ static short edbm_extrude_vert(Object *obedit, BMEditMesh *em, const char hflag, BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(eed, hflag)) { if (hflag & BM_ELEM_SELECT) { - BM_elem_select_set(em->bm, eed->v1, TRUE); - BM_elem_select_set(em->bm, eed->v2, TRUE); + BM_vert_select_set(em->bm, eed->v1, TRUE); + BM_vert_select_set(em->bm, eed->v2, TRUE); } BM_elem_flag_enable(eed->v1, hflag & ~BM_ELEM_SELECT); @@ -363,7 +363,7 @@ static short edbm_extrude_vert(Object *obedit, BMEditMesh *em, const char hflag, else { if (BM_elem_flag_test(eed->v1, hflag) && BM_elem_flag_test(eed->v2, hflag)) { if (hflag & BM_ELEM_SELECT) { - BM_elem_select_set(em->bm, eed, TRUE); + BM_edge_select_set(em->bm, eed, TRUE); } BM_elem_flag_enable(eed, hflag & ~BM_ELEM_SELECT); @@ -860,7 +860,7 @@ static int edbm_dupli_extrude_cursor_invoke(bContext *C, wmOperator *op, wmEvent BMO_op_exec(vc.em->bm, &bmop); BMO_ITER (v1, &oiter, vc.em->bm, &bmop, "newvertout", BM_VERT) { - BM_elem_select_set(vc.em->bm, v1, TRUE); + BM_vert_select_set(vc.em->bm, v1, TRUE); } if (!EDBM_op_finish(vc.em, &bmop, op, TRUE)) { @@ -2328,15 +2328,15 @@ static int edbm_select_axis_exec(bContext *C, wmOperator *op) switch (mode) { case -1: /* aligned */ if (fabs(ev->co[axis] - value) < limit) - BM_elem_select_set(em->bm, ev, TRUE); + BM_vert_select_set(em->bm, ev, TRUE); break; case 0: /* neg */ if (ev->co[axis] > value) - BM_elem_select_set(em->bm, ev, TRUE); + BM_vert_select_set(em->bm, ev, TRUE); break; case 1: /* pos */ if (ev->co[axis] < value) - BM_elem_select_set(em->bm, ev, TRUE); + BM_vert_select_set(em->bm, ev, TRUE); break; } } @@ -2802,7 +2802,7 @@ static int mesh_separate_selected(Main *bmain, Scene *scene, Base *editbase, wmO continue; if (!BM_edge_is_wire(e)) { - BM_elem_select_set(em->bm, e, FALSE); + BM_edge_select_set(em->bm, e, FALSE); } } EDBM_op_callf(em, wmop, "del geom=%hvef context=%i", BM_ELEM_SELECT, DEL_EDGES); @@ -2813,7 +2813,7 @@ static int mesh_separate_selected(Main *bmain, Scene *scene, Base *editbase, wmO continue; if (BM_vert_edge_count(v) != 0) { - BM_elem_select_set(em->bm, v, FALSE); + BM_vert_select_set(em->bm, v, FALSE); } } @@ -2899,7 +2899,7 @@ static int mesh_separate_loose(Main *bmain, Scene *scene, Base *editbase, wmOper } /* Select the seed explicitly, in case it has no edges */ - BM_elem_select_set(bm, v_seed, TRUE); + BM_vert_select_set(bm, v_seed, TRUE); /* Walk from the single vertex, selecting everything connected * to it */ @@ -2910,8 +2910,8 @@ static int mesh_separate_loose(Main *bmain, Scene *scene, Base *editbase, wmOper e = BMW_begin(&walker, v_seed); for (; e; e = BMW_step(&walker)) { - BM_elem_select_set(bm, e->v1, TRUE); - BM_elem_select_set(bm, e->v2, TRUE); + BM_vert_select_set(bm, e->v1, TRUE); + BM_vert_select_set(bm, e->v2, TRUE); } BMW_end(&walker); @@ -3487,7 +3487,7 @@ static int edbm_select_by_number_vertices_exec(bContext *C, wmOperator *op) } if (select) { - BM_elem_select_set(em->bm, efa, TRUE); + BM_face_select_set(em->bm, efa, TRUE); } } @@ -3535,7 +3535,7 @@ static int edbm_select_loose_verts_exec(bContext *C, wmOperator *UNUSED(op)) eve; eve = BM_iter_step(&iter)) { if (!eve->e) { - BM_elem_select_set(em->bm, eve, TRUE); + BM_vert_select_set(em->bm, eve, TRUE); } } @@ -3543,7 +3543,7 @@ static int edbm_select_loose_verts_exec(bContext *C, wmOperator *UNUSED(op)) eed; eed = BM_iter_step(&iter)) { if (!eed->l) { - BM_elem_select_set(em->bm, eed, TRUE); + BM_edge_select_set(em->bm, eed, TRUE); } } diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c index ce4984384ba..ef428b5b1b7 100644 --- a/source/blender/editors/object/object_hook.c +++ b/source/blender/editors/object/object_hook.c @@ -148,7 +148,7 @@ static void select_editbmesh_hook(Object *ob, HookModifierData *hmd) BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (nr==hmd->indexar[index]) { - BM_elem_select_set(em->bm, eve, TRUE); + BM_vert_select_set(em->bm, eve, TRUE); if (index < hmd->totindex-1) index++; } diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index 81810c793b8..eb380700a61 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -597,7 +597,7 @@ static void vgroup_select_verts(Object *ob, int select) if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) { dv= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (defvert_find_index(dv, def_nr)) { - BM_elem_select_set(em->bm, eve, select); + BM_vert_select_set(em->bm, eve, select); } } } diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 5646570a623..c6a93a80b2e 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -474,7 +474,7 @@ static void do_lasso_select_mesh__doSelectVert(void *userData, BMVert *eve, int LassoSelectUserData *data = userData; if (BLI_in_rcti(data->rect, x, y) && lasso_inside(data->mcords, data->moves, x, y)) { - BM_elem_select_set(data->vc->em->bm, eve, data->select); + BM_vert_select_set(data->vc->em->bm, eve, data->select); } } static void do_lasso_select_mesh__doSelectEdge(void *userData, BMEdge *eed, int x0, int y0, int x1, int y1, int index) @@ -486,13 +486,13 @@ static void do_lasso_select_mesh__doSelectEdge(void *userData, BMEdge *eed, int if (edge_fully_inside_rect(data->rect, x0, y0, x1, y1) && lasso_inside(data->mcords, data->moves, x0, y0) && lasso_inside(data->mcords, data->moves, x1, y1)) { - BM_elem_select_set(data->vc->em->bm, eed, data->select); + BM_edge_select_set(data->vc->em->bm, eed, data->select); data->done = 1; } } else { if (lasso_inside_edge(data->mcords, data->moves, x0, y0, x1, y1)) { - BM_elem_select_set(data->vc->em->bm, eed, data->select); + BM_edge_select_set(data->vc->em->bm, eed, data->select); } } } @@ -502,7 +502,7 @@ static void do_lasso_select_mesh__doSelectFace(void *userData, BMFace *efa, int LassoSelectUserData *data = userData; if (BLI_in_rcti(data->rect, x, y) && lasso_inside(data->mcords, data->moves, x, y)) { - BM_elem_select_set(data->vc->em->bm, efa, data->select); + BM_face_select_set(data->vc->em->bm, efa, data->select); } } @@ -1756,7 +1756,7 @@ static void do_mesh_box_select__doSelectVert(void *userData, BMVert *eve, int x, BoxSelectUserData *data = userData; if (BLI_in_rcti(data->rect, x, y)) { - BM_elem_select_set(data->vc->em->bm, eve, data->select); + BM_vert_select_set(data->vc->em->bm, eve, data->select); } } static void do_mesh_box_select__doSelectEdge(void *userData, BMEdge *eed, int x0, int y0, int x1, int y1, int index) @@ -1766,13 +1766,13 @@ static void do_mesh_box_select__doSelectEdge(void *userData, BMEdge *eed, int x0 if (EDBM_backbuf_check(bm_solidoffs + index)) { if (data->pass == 0) { if (edge_fully_inside_rect(data->rect, x0, y0, x1, y1)) { - BM_elem_select_set(data->vc->em->bm, eed, data->select); + BM_edge_select_set(data->vc->em->bm, eed, data->select); data->done = 1; } } else { if (edge_inside_rect(data->rect, x0, y0, x1, y1)) { - BM_elem_select_set(data->vc->em->bm, eed, data->select); + BM_edge_select_set(data->vc->em->bm, eed, data->select); } } } @@ -1782,7 +1782,7 @@ static void do_mesh_box_select__doSelectFace(void *userData, BMFace *efa, int x, BoxSelectUserData *data = userData; if (BLI_in_rcti(data->rect, x, y)) { - BM_elem_select_set(data->vc->em->bm, efa, data->select); + BM_face_select_set(data->vc->em->bm, efa, data->select); } } static int do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int extend) @@ -2304,7 +2304,7 @@ static void mesh_circle_doSelectVert(void *userData, BMVert *eve, int x, int y, float r = sqrt(mx * mx + my * my); if (r <= data->radius) { - BM_elem_select_set(data->vc->em->bm, eve, data->select); + BM_vert_select_set(data->vc->em->bm, eve, data->select); } } static void mesh_circle_doSelectEdge(void *userData, BMEdge *eed, int x0, int y0, int x1, int y1, int UNUSED(index)) @@ -2312,7 +2312,7 @@ static void mesh_circle_doSelectEdge(void *userData, BMEdge *eed, int x0, int y0 CircleSelectUserData *data = userData; if (edge_inside_circle(data->mval[0], data->mval[1], (short) data->radius, x0, y0, x1, y1)) { - BM_elem_select_set(data->vc->em->bm, eed, data->select); + BM_edge_select_set(data->vc->em->bm, eed, data->select); } } static void mesh_circle_doSelectFace(void *userData, BMFace *efa, int x, int y, int UNUSED(index)) @@ -2322,7 +2322,7 @@ static void mesh_circle_doSelectFace(void *userData, BMFace *efa, int x, int y, float r = sqrt(mx * mx + my * my); if (r <= data->radius) { - BM_elem_select_set(data->vc->em->bm, efa, data->select); + BM_face_select_set(data->vc->em->bm, efa, data->select); } } diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 0559237343a..59626349ac5 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -4653,12 +4653,12 @@ static int createSlideVerts(TransInfo *t) if (!BLI_smallhash_haskey(&sld->origfaces, (uintptr_t)f)) { BMFace *copyf = BM_face_copy(bm, f, TRUE, TRUE); - BM_elem_select_set(bm, copyf, FALSE); + BM_face_select_set(bm, copyf, FALSE); BM_elem_flag_enable(copyf, BM_ELEM_HIDDEN); BM_ITER_ELEM (l, &liter, copyf, BM_LOOPS_OF_FACE) { - BM_elem_select_set(bm, l->v, FALSE); + BM_vert_select_set(bm, l->v, FALSE); BM_elem_flag_enable(l->v, BM_ELEM_HIDDEN); - BM_elem_select_set(bm, l->e, FALSE); + BM_edge_select_set(bm, l->e, FALSE); BM_elem_flag_enable(l->e, BM_ELEM_HIDDEN); } @@ -4775,7 +4775,7 @@ void projectSVData(TransInfo *t, int final) BM_elem_attrs_copy(em->bm, em->bm, copyf2, f); /* restore selection and hidden flags */ - BM_elem_select_set(em->bm, f, sel); + BM_face_select_set(em->bm, f, sel); if (!hide) { /* this check is a workaround for bug, see note - [#30735], without this edge can be hidden and selected */ BM_elem_hide_set(em->bm, f, hide); } diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 7eb71ecc9d0..969fa684c80 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -329,7 +329,7 @@ int uvedit_face_select(Scene *scene, BMEditMesh *em, BMFace *efa) ToolSettings *ts = scene->toolsettings; if (ts->uv_flag & UV_SYNC_SELECTION) - BM_elem_select_set(em->bm, efa, TRUE); + BM_face_select_set(em->bm, efa, TRUE); else { BMLoop *l; MLoopUV *luv; @@ -351,7 +351,7 @@ int uvedit_face_deselect(Scene *scene, BMEditMesh *em, BMFace *efa) ToolSettings *ts = scene->toolsettings; if (ts->uv_flag & UV_SYNC_SELECTION) { - BM_elem_select_set(em->bm, efa, FALSE); + BM_face_select_set(em->bm, efa, FALSE); } else { BMLoop *l; @@ -402,12 +402,12 @@ void uvedit_edge_select(BMEditMesh *em, Scene *scene, BMLoop *l) if (ts->uv_flag & UV_SYNC_SELECTION) { if (ts->selectmode & SCE_SELECT_FACE) - BM_elem_select_set(em->bm, l->f, TRUE); + BM_face_select_set(em->bm, l->f, TRUE); else if (ts->selectmode & SCE_SELECT_EDGE) - BM_elem_select_set(em->bm, l->e, TRUE); + BM_edge_select_set(em->bm, l->e, TRUE); else { - BM_elem_select_set(em->bm, l->e->v1, TRUE); - BM_elem_select_set(em->bm, l->e->v2, TRUE); + BM_vert_select_set(em->bm, l->e->v1, TRUE); + BM_vert_select_set(em->bm, l->e->v2, TRUE); } } else { @@ -428,12 +428,12 @@ void uvedit_edge_deselect(BMEditMesh *em, Scene *scene, BMLoop *l) if (ts->uv_flag & UV_SYNC_SELECTION) { if (ts->selectmode & SCE_SELECT_FACE) - BM_elem_select_set(em->bm, l->f, FALSE); + BM_face_select_set(em->bm, l->f, FALSE); else if (ts->selectmode & SCE_SELECT_EDGE) - BM_elem_select_set(em->bm, l->e, FALSE); + BM_edge_select_set(em->bm, l->e, FALSE); else { - BM_elem_select_set(em->bm, l->e->v1, FALSE); - BM_elem_select_set(em->bm, l->e->v2, FALSE); + BM_vert_select_set(em->bm, l->e->v1, FALSE); + BM_vert_select_set(em->bm, l->e->v2, FALSE); } } else { @@ -470,9 +470,9 @@ void uvedit_uv_select(BMEditMesh *em, Scene *scene, BMLoop *l) if (ts->uv_flag & UV_SYNC_SELECTION) { if (ts->selectmode & SCE_SELECT_FACE) - BM_elem_select_set(em->bm, l->f, TRUE); + BM_face_select_set(em->bm, l->f, TRUE); else - BM_elem_select_set(em->bm, l->v, TRUE); + BM_vert_select_set(em->bm, l->v, TRUE); } else { MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); @@ -487,9 +487,9 @@ void uvedit_uv_deselect(BMEditMesh *em, Scene *scene, BMLoop *l) if (ts->uv_flag & UV_SYNC_SELECTION) { if (ts->selectmode & SCE_SELECT_FACE) - BM_elem_select_set(em->bm, l->f, FALSE); + BM_face_select_set(em->bm, l->f, FALSE); else - BM_elem_select_set(em->bm, l->v, FALSE); + BM_vert_select_set(em->bm, l->v, FALSE); } else { MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); @@ -3060,7 +3060,7 @@ static int hide_exec(bContext *C, wmOperator *op) if (em->selectmode == SCE_SELECT_FACE) { /* check that every UV is selected */ if (bm_face_is_all_uv_sel(em->bm, efa, TRUE) == !swap) { - BM_elem_select_set(em->bm, efa, FALSE); + BM_face_select_set(em->bm, efa, FALSE); } uvedit_face_deselect(scene, em, efa); } @@ -3069,7 +3069,7 @@ static int hide_exec(bContext *C, wmOperator *op) BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (UV_SEL_TEST(luv, !swap)) { - BM_elem_select_set(em->bm, l->v, FALSE); + BM_vert_select_set(em->bm, l->v, FALSE); } } } @@ -3081,7 +3081,7 @@ static int hide_exec(bContext *C, wmOperator *op) else if (em->selectmode == SCE_SELECT_FACE) { /* check if a UV is de-selected */ if (bm_face_is_all_uv_sel(em->bm, efa, FALSE) != !swap) { - BM_elem_select_set(em->bm, efa, FALSE); + BM_face_select_set(em->bm, efa, FALSE); uvedit_face_deselect(scene, em, efa); } } @@ -3089,7 +3089,7 @@ static int hide_exec(bContext *C, wmOperator *op) BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (UV_SEL_TEST(luv, !swap)) { - BM_elem_select_set(em->bm, l->v, FALSE); + BM_vert_select_set(em->bm, l->v, FALSE); if (!swap) luv->flag &= ~MLOOPUV_VERTSEL; } } @@ -3160,7 +3160,7 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; } - /* BM_elem_select_set(em->bm, efa, TRUE); */ + /* BM_face_select_set(em->bm, efa, TRUE); */ BM_elem_flag_enable(efa, BM_ELEM_TAG); } } @@ -3181,7 +3181,7 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; } - /* BM_elem_select_set(em->bm, efa, TRUE); */ + /* BM_face_select_set(em->bm, efa, TRUE); */ BM_elem_flag_enable(efa, BM_ELEM_TAG); } } @@ -3197,7 +3197,7 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) luv->flag |= MLOOPUV_VERTSEL; } } - /* BM_elem_select_set(em->bm, efa, TRUE); */ + /* BM_face_select_set(em->bm, efa, TRUE); */ BM_elem_flag_enable(efa, BM_ELEM_TAG); } } @@ -3212,7 +3212,7 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); luv->flag |= MLOOPUV_VERTSEL; } - /* BM_elem_select_set(em->bm, efa, TRUE); */ + /* BM_face_select_set(em->bm, efa, TRUE); */ BM_elem_flag_enable(efa, BM_ELEM_TAG); } } @@ -3227,7 +3227,7 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) luv->flag |= MLOOPUV_VERTSEL; } } - /* BM_elem_select_set(em->bm, efa, TRUE); */ + /* BM_face_select_set(em->bm, efa, TRUE); */ BM_elem_flag_enable(efa, BM_ELEM_TAG); } } From 3dcd5a196db4cf67cd2b8322d6d0311371db28f2 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Fri, 20 Apr 2012 17:26:40 +0000 Subject: [PATCH 154/156] Fix [#31008] IK armature resize goes ugly (Pose mode resize). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This affected legacy solver. Note that even if I don't expect any, this fix *may* break some other IK setups, so animators, please check your IK rigs using legacy solver. ;) Easy to revert if needed, anyway. Note that iTaSC solver is also buggy with some scaled parent, but here IK'ed bones just can’t get scaled in any way (either from parent or from there own transformation)... Will try to find what's happenning, though the code is even harder than legacy solver to follow :/ --- source/blender/ikplugin/intern/iksolver_plugin.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/blender/ikplugin/intern/iksolver_plugin.c b/source/blender/ikplugin/intern/iksolver_plugin.c index 41700b96acc..8d4d01b7e97 100644 --- a/source/blender/ikplugin/intern/iksolver_plugin.c +++ b/source/blender/ikplugin/intern/iksolver_plugin.c @@ -347,11 +347,15 @@ static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree) /* first set the goal inverse transform, assuming the root of tree was done ok! */ pchan= tree->pchan[0]; - if (pchan->parent) + if (pchan->parent) { /* transform goal by parent mat, so this rotation is not part of the * segment's basis. otherwise rotation limits do not work on the * local transform of the segment itself. */ copy_m4_m4(rootmat, pchan->parent->pose_mat); + /* However, we do not want to get (i.e. reverse) parent's scale, as it generates [#31008] + * kind of nasty bugs... */ + normalize_m4(rootmat); + } else unit_m4(rootmat); copy_v3_v3(rootmat[3], pchan->pose_head); From 2e20d3dc9610b702788092e9d72689b971ed9f69 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 20 Apr 2012 18:34:58 +0000 Subject: [PATCH 155/156] fix for error using uninitialized variable with shape key conversion. --- source/blender/bmesh/intern/bmesh_mesh_conv.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.c b/source/blender/bmesh/intern/bmesh_mesh_conv.c index a7ecc897ff0..e247a69f1e9 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_conv.c +++ b/source/blender/bmesh/intern/bmesh_mesh_conv.c @@ -824,7 +824,10 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) /* in most cases this runs */ copy_v3_v3(fp, CustomData_bmesh_get_n(&bm->vdata, eve->head.data, CD_SHAPEKEY, j)); } - else if (oldkey) { + else if (oldkey && + (keyi = CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_SHAPE_KEYINDEX)) && + (*keyi != ORIGINDEX_NONE && *keyi < currkey->totelem)) + { /* old method of reconstructing keys via vertice's original key indices, * currently used if the new method above fails (which is theoretically * possible in certain cases of undo) */ From 15eb3452ecd96e4d79d438e8c954918639dc283d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 20 Apr 2012 18:50:18 +0000 Subject: [PATCH 156/156] style cleanup: pep8, also quiet compiler warning. --- doc/python_api/sphinx_doc_gen.py | 2 +- release/scripts/startup/bl_operators/mesh.py | 2 +- release/scripts/startup/bl_operators/presets.py | 7 ++++--- release/scripts/startup/bl_ui/properties_game.py | 2 +- release/scripts/startup/bl_ui/properties_particle.py | 6 +++--- release/scripts/startup/bl_ui/properties_physics_fluid.py | 3 ++- source/blender/editors/mesh/editmesh_rip.c | 4 ++-- 7 files changed, 14 insertions(+), 12 deletions(-) diff --git a/doc/python_api/sphinx_doc_gen.py b/doc/python_api/sphinx_doc_gen.py index cb03907c194..54a3868c0d7 100644 --- a/doc/python_api/sphinx_doc_gen.py +++ b/doc/python_api/sphinx_doc_gen.py @@ -131,7 +131,7 @@ def handle_args(): dest="sphinx_theme", type=str, default='default', - help = + help= # see SPHINX_THEMES below "Sphinx theme (default='default')\n" "Available themes\n" diff --git a/release/scripts/startup/bl_operators/mesh.py b/release/scripts/startup/bl_operators/mesh.py index 2d4c703dbf2..a54de25dbc7 100644 --- a/release/scripts/startup/bl_operators/mesh.py +++ b/release/scripts/startup/bl_operators/mesh.py @@ -100,7 +100,7 @@ class MeshMirrorUV(Operator): vidxs[i] = tuple(sorted(l.vertex_index for l in loops[lstart:lend])) # As we have no poly.center yet... - pcents[i] = tuple(map(lambda x : x / p.loop_total, + pcents[i] = tuple(map(lambda x: x / p.loop_total, map(sum, zip(*(verts[idx].co for idx in vidxs[i]))))) # Preparing next step finding matching polys. diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py index 2c92fccf3b4..6297945f8bd 100644 --- a/release/scripts/startup/bl_operators/presets.py +++ b/release/scripts/startup/bl_operators/presets.py @@ -294,21 +294,22 @@ class AddPresetCloth(AddPresetBase, Operator): preset_subdir = "cloth" + class AddPresetFluid(AddPresetBase, Operator): '''Add a Fluid Preset''' bl_idname = "fluid.preset_add" bl_label = "Add Fluid Preset" preset_menu = "FLUID_MT_presets" - + preset_defines = [ "fluid = bpy.context.fluid" ] - + preset_values = [ "fluid.settings.viscosity_base", "fluid.settings.viscosity_exponent", ] - + preset_subdir = "fluid" diff --git a/release/scripts/startup/bl_ui/properties_game.py b/release/scripts/startup/bl_ui/properties_game.py index 36941cdfbbf..c3f1c42d8a8 100644 --- a/release/scripts/startup/bl_ui/properties_game.py +++ b/release/scripts/startup/bl_ui/properties_game.py @@ -166,7 +166,7 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel, Panel): subsub.active = game.use_anisotropic_friction subsub.prop(game, "friction_coefficients", text="", slider=True) - elif physics_type =='SENSOR': + elif physics_type == 'SENSOR': col = layout.column() col.prop(game, "use_actor", text="Detect Actors") col.prop(ob, "hide_render", text="Invisible") diff --git a/release/scripts/startup/bl_ui/properties_particle.py b/release/scripts/startup/bl_ui/properties_particle.py index 74abc8fe559..9200c688394 100644 --- a/release/scripts/startup/bl_ui/properties_particle.py +++ b/release/scripts/startup/bl_ui/properties_particle.py @@ -1185,7 +1185,7 @@ class PARTICLE_PT_vertexgroups(ParticleButtonsPanel, Panel): psys = context.particle_system split = layout.split(percentage=0.85) - + col = split.column() col.label(text="Vertex Group:") col.prop_search(psys, "vertex_group_density", ob, "vertex_groups", text="Density") @@ -1195,7 +1195,7 @@ class PARTICLE_PT_vertexgroups(ParticleButtonsPanel, Panel): col.prop_search(psys, "vertex_group_roughness_1", ob, "vertex_groups", text="Roughness 1") col.prop_search(psys, "vertex_group_roughness_2", ob, "vertex_groups", text="Roughness 2") col.prop_search(psys, "vertex_group_roughness_end", ob, "vertex_groups", text="Roughness End") - + col = split.column() col.label(text="Negate:") col.alignment = 'RIGHT' @@ -1206,7 +1206,7 @@ class PARTICLE_PT_vertexgroups(ParticleButtonsPanel, Panel): col.prop(psys, "invert_vertex_group_roughness_1", text="") col.prop(psys, "invert_vertex_group_roughness_2", text="") col.prop(psys, "invert_vertex_group_roughness_end", text="") - + # Commented out vertex groups don't work and are still waiting for better implementation # row = layout.row() # row.prop_search(psys, "vertex_group_velocity", ob, "vertex_groups", text="Velocity") diff --git a/release/scripts/startup/bl_ui/properties_physics_fluid.py b/release/scripts/startup/bl_ui/properties_physics_fluid.py index 23b7a12753f..cec4bf125ee 100644 --- a/release/scripts/startup/bl_ui/properties_physics_fluid.py +++ b/release/scripts/startup/bl_ui/properties_physics_fluid.py @@ -20,6 +20,7 @@ import bpy from bpy.types import Panel, Menu + class FLUID_MT_presets(Menu): bl_label = "Fluid Presets" preset_subdir = "fluid" @@ -232,7 +233,7 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel, Panel): sub.menu("FLUID_MT_presets", text=bpy.types.FLUID_MT_presets.bl_label) sub.operator("fluid.preset_add", text="", icon='ZOOMIN') sub.operator("fluid.preset_add", text="", icon='ZOOMOUT').remove_active = True - + subsub = col.column(align=True) subsub.prop(fluid, "viscosity_base", text="Base") subsub.prop(fluid, "viscosity_exponent", text="Exponent", slider=True) diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index 1e0f0b2579b..37b12803962 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -228,10 +228,10 @@ static EdgeLoopPair *edbm_ripsel_looptag_helper(BMesh *bm) break; } - e_first = e; - /* initialize */ + e_first = e; v_step = e_first->v1; + e_step = NULL; /* quiet warning, will never remain this value */ uid_start = uid; while ((e = edbm_ripsel_edge_mark_step(v_step, uid))) {