Merging r58280 through r58329 from trunk into soc-2013-depsgaph_mt
This commit is contained in:
@@ -152,6 +152,10 @@ private:
|
||||
GHOST_SystemWin32 *m_system;
|
||||
/* Data type of the dragged object */
|
||||
GHOST_TDragnDropTypes m_draggedObjectType;
|
||||
|
||||
#ifdef WITH_CXX_GUARDEDALLOC
|
||||
MEM_CXX_CLASS_ALLOC_FUNCS("GHOST:GHOST_DropTargetWin32")
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif // __GHOST_DROPTARGETWIN32_H__
|
||||
|
||||
@@ -84,6 +84,9 @@ void GHOST_DropTargetX11::Initialize(void)
|
||||
void GHOST_DropTargetX11::Uninitialize(void)
|
||||
{
|
||||
xdnd_shut(&m_dndClass);
|
||||
|
||||
delete[] m_dndActions;
|
||||
delete[] m_dndTypes;
|
||||
}
|
||||
|
||||
GHOST_DropTargetX11::GHOST_DropTargetX11(GHOST_WindowX11 *window, GHOST_SystemX11 *system)
|
||||
|
||||
@@ -130,6 +130,10 @@ private:
|
||||
|
||||
/* counter of references to global XDND structures */
|
||||
static int m_refCounter;
|
||||
|
||||
#ifdef WITH_CXX_GUARDEDALLOC
|
||||
MEM_CXX_CLASS_ALLOC_FUNCS("GHOST:GHOST_DropTargetX11")
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif // __GHOST_DROPTARGETX11_H__
|
||||
|
||||
@@ -95,7 +95,7 @@ endif()
|
||||
|
||||
if(WITH_FFTW3)
|
||||
add_definitions(-DWITH_FFTW3)
|
||||
list(APPEND INC
|
||||
list(APPEND INC_SYS
|
||||
${FFTW3_INCLUDE_DIRS}
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -40,6 +40,7 @@ class SpellChecker():
|
||||
"derivate",
|
||||
"doesn", # doesn't
|
||||
"fader",
|
||||
"globbing",
|
||||
"hasn", # hasn't
|
||||
"hoc", # ad-hoc
|
||||
"indices",
|
||||
@@ -59,6 +60,7 @@ class SpellChecker():
|
||||
"autoclip",
|
||||
"autocomplete",
|
||||
"autoexec",
|
||||
"autoexecution",
|
||||
"autoname",
|
||||
"autosave",
|
||||
"autoscale",
|
||||
|
||||
@@ -2477,10 +2477,11 @@ void BKE_mesh_vert_poly_map_create(MeshElemMap **r_map, int **r_mem,
|
||||
int totvert, int totpoly, int totloop)
|
||||
{
|
||||
MeshElemMap *map = MEM_callocN(sizeof(MeshElemMap) * totvert, "vert poly map");
|
||||
int *indices = MEM_mallocN(sizeof(int) * totloop, "vert poly map mem");
|
||||
|
||||
int *indices, *index_iter;
|
||||
int i, j;
|
||||
|
||||
indices = index_iter = MEM_mallocN(sizeof(int) * totloop, "vert poly map mem");
|
||||
|
||||
/* Count number of polys for each vertex */
|
||||
for (i = 0; i < totpoly; i++) {
|
||||
const MPoly *p = &mpoly[i];
|
||||
@@ -2491,8 +2492,8 @@ void BKE_mesh_vert_poly_map_create(MeshElemMap **r_map, int **r_mem,
|
||||
|
||||
/* Assign indices mem */
|
||||
for (i = 0; i < totvert; i++) {
|
||||
map[i].indices = indices;
|
||||
indices += map[i].count;
|
||||
map[i].indices = index_iter;
|
||||
index_iter += map[i].count;
|
||||
|
||||
/* Reset 'count' for use as index in last loop */
|
||||
map[i].count = 0;
|
||||
|
||||
@@ -2102,7 +2102,7 @@ static void update_flowsfluids(Scene *scene, Object *ob, SmokeDomainSettings *sd
|
||||
/* sample subframes */
|
||||
else {
|
||||
int scene_frame = scene->r.cfra;
|
||||
float scene_subframe = scene->r.subframe;
|
||||
// float scene_subframe = scene->r.subframe; // UNUSED
|
||||
int subframe;
|
||||
for (subframe = 0; subframe <= subframes; subframe++) {
|
||||
EmissionMap em_temp = {0};
|
||||
|
||||
@@ -199,7 +199,7 @@ bool BLI_file_touch(const char *file)
|
||||
{
|
||||
FILE *f = BLI_fopen(file, "r+b");
|
||||
if (f != NULL) {
|
||||
char c = getc(f);
|
||||
int c = getc(f);
|
||||
rewind(f);
|
||||
putc(c, f);
|
||||
}
|
||||
|
||||
@@ -836,6 +836,7 @@ void orthogonalize_m3(float mat[3][3], int axis)
|
||||
normalize_v3(mat[0]);
|
||||
cross_v3_v3v3(mat[1], mat[2], mat[0]);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
BLI_assert(0);
|
||||
}
|
||||
|
||||
@@ -239,7 +239,7 @@ size_t BLI_strncpy_wchar_as_utf8(char *__restrict dst, const wchar_t *__restrict
|
||||
memset(dst, 0xff, sizeof(*dst) * maxncpy);
|
||||
#endif
|
||||
|
||||
while (*src && len != maxlen) { /* XXX can still run over the buffer because utf8 size isn't known :| */
|
||||
while (*src && len < maxlen) { /* XXX can still run over the buffer because utf8 size isn't known :| */
|
||||
len += BLI_str_utf8_from_unicode((unsigned int)*src++, dst + len);
|
||||
}
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ static void bridge_loop_pair(BMesh *bm,
|
||||
}
|
||||
|
||||
if (use_merge) {
|
||||
BLI_assert((el_store_a_len == el_store_a_len));
|
||||
BLI_assert((el_store_a_len == el_store_b_len));
|
||||
}
|
||||
|
||||
if (el_store_a_len != el_store_b_len) {
|
||||
|
||||
@@ -893,7 +893,7 @@ static void bm_edgering_pair_order(BMesh *bm,
|
||||
/* before going much further, get ourselves in order
|
||||
* - align loops (not strictly necessary but handy)
|
||||
* - ensure winding is set for both loops */
|
||||
if (BM_edgeloop_is_closed(el_store_a) && BM_edgeloop_is_closed(el_store_a)) {
|
||||
if (BM_edgeloop_is_closed(el_store_a) && BM_edgeloop_is_closed(el_store_b)) {
|
||||
BMIter eiter;
|
||||
BMEdge *e;
|
||||
BMVert *v_other;
|
||||
|
||||
@@ -682,16 +682,6 @@ static EnumPropertyItem prop_similar_types[] = {
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
/* could be used in more places */
|
||||
static void ED_armature_edit_bone_select(EditBone *ebone)
|
||||
{
|
||||
BLI_assert((ebone->flag & BONE_UNSELECTABLE) == 0);
|
||||
ebone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
|
||||
|
||||
if ((ebone->flag & BONE_CONNECTED) && (ebone->parent != NULL)) {
|
||||
ebone->parent->flag |= BONE_TIPSEL;
|
||||
}
|
||||
}
|
||||
|
||||
static void select_similar_length(bArmature *arm, EditBone *ebone_act, const float thresh)
|
||||
{
|
||||
@@ -706,7 +696,7 @@ static void select_similar_length(bArmature *arm, EditBone *ebone_act, const flo
|
||||
if ((ebone->length >= len_min) &&
|
||||
(ebone->length <= len_max))
|
||||
{
|
||||
ED_armature_edit_bone_select(ebone);
|
||||
ED_armature_ebone_select_set(ebone, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -724,7 +714,7 @@ static void select_similar_direction(bArmature *arm, EditBone *ebone_act, const
|
||||
sub_v3_v3v3(dir, ebone->head, ebone->tail);
|
||||
|
||||
if (angle_v3v3(dir_act, dir) / (float)M_PI < thresh) {
|
||||
ED_armature_edit_bone_select(ebone);
|
||||
ED_armature_ebone_select_set(ebone, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -737,7 +727,7 @@ static void select_similar_layer(bArmature *arm, EditBone *ebone_act)
|
||||
for (ebone = arm->edbo->first; ebone; ebone = ebone->next) {
|
||||
if (EBONE_SELECTABLE(arm, ebone)) {
|
||||
if (ebone->layer & ebone_act->layer) {
|
||||
ED_armature_edit_bone_select(ebone);
|
||||
ED_armature_ebone_select_set(ebone, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -760,8 +750,8 @@ static void select_similar_prefix(bArmature *arm, EditBone *ebone_act)
|
||||
if (EBONE_SELECTABLE(arm, ebone)) {
|
||||
char prefix_other[MAX_VGROUP_NAME];
|
||||
BKE_deform_split_prefix(ebone->name, prefix_other, body_tmp);
|
||||
if (!strcmp(prefix_act, prefix_other)) {
|
||||
ED_armature_edit_bone_select(ebone);
|
||||
if (STREQ(prefix_act, prefix_other)) {
|
||||
ED_armature_ebone_select_set(ebone, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -784,8 +774,8 @@ static void select_similar_suffix(bArmature *arm, EditBone *ebone_act)
|
||||
if (EBONE_SELECTABLE(arm, ebone)) {
|
||||
char suffix_other[MAX_VGROUP_NAME];
|
||||
BKE_deform_split_suffix(ebone->name, body_tmp, suffix_other);
|
||||
if (!strcmp(suffix_act, suffix_other)) {
|
||||
ED_armature_edit_bone_select(ebone);
|
||||
if (STREQ(suffix_act, suffix_other)) {
|
||||
ED_armature_ebone_select_set(ebone, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -337,18 +337,9 @@ EditBone *make_boneList(ListBase *edbo, ListBase *bones, EditBone *parent, Bone
|
||||
}
|
||||
else {
|
||||
/* if the bone is not selected, but connected to its parent
|
||||
* copy the parents tip selection state */
|
||||
* always use the parents tip selection state */
|
||||
if (eBone->parent && (eBone->flag & BONE_CONNECTED)) {
|
||||
/* selecting with the mouse gives this behavior */
|
||||
if (eBone->parent->flag & BONE_TIPSEL) {
|
||||
eBone->flag |= BONE_ROOTSEL;
|
||||
}
|
||||
else {
|
||||
eBone->flag &= ~BONE_ROOTSEL;
|
||||
}
|
||||
|
||||
/* probably not selected but just in case */
|
||||
eBone->flag &= ~BONE_TIPSEL;
|
||||
eBone->flag &= ~BONE_ROOTSEL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -713,3 +704,62 @@ void undo_push_armature(bContext *C, const char *name)
|
||||
// XXX solve getdata()
|
||||
undo_editmode_push(C, name, get_armature_edit, free_undoBones, undoBones_to_editBones, editBones_to_undoBones, NULL);
|
||||
}
|
||||
|
||||
/* *************************************************************** */
|
||||
/* Low level selection functions which hide connected-parent
|
||||
* flag behavior which gets tricky to handle in selection operators.
|
||||
* (no flushing in ED_armature_ebone_select.*, that should be explicit) */
|
||||
|
||||
int ED_armature_ebone_selectflag_get(const EditBone *ebone)
|
||||
{
|
||||
if (ebone->parent && (ebone->flag & BONE_CONNECTED)) {
|
||||
return ((ebone->flag & (BONE_SELECTED | BONE_TIPSEL)) |
|
||||
((ebone->parent->flag & BONE_TIPSEL) ? BONE_ROOTSEL : 0));
|
||||
}
|
||||
else {
|
||||
return (ebone->flag & (BONE_SELECTED | BONE_ROOTSEL | BONE_TIPSEL));
|
||||
}
|
||||
}
|
||||
|
||||
void ED_armature_ebone_selectflag_set(EditBone *ebone, int flag)
|
||||
{
|
||||
flag = flag & (BONE_SELECTED | BONE_ROOTSEL | BONE_TIPSEL);
|
||||
|
||||
if (ebone->parent && (ebone->flag & BONE_CONNECTED)) {
|
||||
ebone->flag &= ~(BONE_SELECTED | BONE_ROOTSEL | BONE_TIPSEL);
|
||||
ebone->parent->flag &= ~BONE_TIPSEL;
|
||||
|
||||
ebone->flag |= flag;
|
||||
ebone->parent->flag |= (flag & BONE_ROOTSEL) ? BONE_TIPSEL : 0;
|
||||
}
|
||||
else {
|
||||
ebone->flag &= ~(BONE_SELECTED | BONE_ROOTSEL | BONE_TIPSEL);
|
||||
ebone->flag |= flag;
|
||||
}
|
||||
}
|
||||
|
||||
void ED_armature_ebone_selectflag_enable(EditBone *ebone, int flag)
|
||||
{
|
||||
BLI_assert((flag & (BONE_SELECTED | BONE_ROOTSEL | BONE_TIPSEL)) != 0);
|
||||
ED_armature_ebone_selectflag_set(ebone, ebone->flag | flag);
|
||||
}
|
||||
|
||||
void ED_armature_ebone_selectflag_disable(EditBone *ebone, int flag)
|
||||
{
|
||||
BLI_assert((flag & (BONE_SELECTED | BONE_ROOTSEL | BONE_TIPSEL)) != 0);
|
||||
ED_armature_ebone_selectflag_set(ebone, ebone->flag & ~flag);
|
||||
}
|
||||
|
||||
/* could be used in more places */
|
||||
void ED_armature_ebone_select_set(EditBone *ebone, bool select)
|
||||
{
|
||||
int flag;
|
||||
if (select) {
|
||||
BLI_assert((ebone->flag & BONE_UNSELECTABLE) == 0);
|
||||
flag = (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
|
||||
}
|
||||
else {
|
||||
flag = 0;
|
||||
}
|
||||
ED_armature_ebone_selectflag_set(ebone, flag);
|
||||
}
|
||||
|
||||
@@ -1273,7 +1273,7 @@ static int insert_text_invoke(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
accentcode = 0;
|
||||
}
|
||||
else if (event->utf8_buf[0]) {
|
||||
BLI_strncpy_wchar_from_utf8(inserted_text, event->utf8_buf, 1);
|
||||
BLI_strncpy_wchar_from_utf8(inserted_text, event->utf8_buf, 2);
|
||||
ascii = inserted_text[0];
|
||||
insert_into_textbuf(obedit, ascii);
|
||||
accentcode = 0;
|
||||
|
||||
@@ -153,6 +153,13 @@ void ED_armature_bone_rename(struct bArmature *arm, const char *oldnamep, const
|
||||
|
||||
void undo_push_armature(struct bContext *C, const char *name);
|
||||
|
||||
/* low level selection functions which handle */
|
||||
int ED_armature_ebone_selectflag_get(const EditBone *ebone);
|
||||
void ED_armature_ebone_selectflag_set(EditBone *ebone, int flag);
|
||||
void ED_armature_ebone_select_set(EditBone *ebone, bool select);
|
||||
void ED_armature_ebone_selectflag_enable(EditBone *ebone, int flag);
|
||||
void ED_armature_ebone_selectflag_disable(EditBone *ebone, int flag);
|
||||
|
||||
/* poseobject.c */
|
||||
void ED_armature_exit_posemode(struct bContext *C, struct Base *base);
|
||||
void ED_armature_enter_posemode(struct bContext *C, struct Base *base);
|
||||
|
||||
@@ -226,7 +226,7 @@ float ED_object_new_primitive_matrix(bContext *C, Object *obedit,
|
||||
return dia;
|
||||
}
|
||||
|
||||
return 1.0f;
|
||||
// return 1.0f;
|
||||
}
|
||||
|
||||
/********************* Add Object Operator ********************/
|
||||
|
||||
@@ -3073,7 +3073,7 @@ void OBJECT_OT_vertex_group_remove(wmOperatorType *ot)
|
||||
/* identifiers */
|
||||
ot->name = "Remove Vertex Group";
|
||||
ot->idname = "OBJECT_OT_vertex_group_remove";
|
||||
ot->description = "Delete the active vertex group";
|
||||
ot->description = "Delete the active or all vertex groups from the active object";
|
||||
|
||||
/* api callbacks */
|
||||
ot->poll = vertex_group_poll;
|
||||
@@ -3457,7 +3457,8 @@ void OBJECT_OT_vertex_group_lock(wmOperatorType *ot)
|
||||
/* flags */
|
||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||
|
||||
RNA_def_enum(ot->srna, "action", vgroup_lock_actions, VGROUP_TOGGLE, "Action", "Lock action to execute on vertex groups");
|
||||
RNA_def_enum(ot->srna, "action", vgroup_lock_actions, VGROUP_TOGGLE, "Action",
|
||||
"Lock action to execute on vertex groups");
|
||||
}
|
||||
|
||||
static int vertex_group_invert_exec(bContext *C, wmOperator *op)
|
||||
@@ -3593,7 +3594,7 @@ void OBJECT_OT_vertex_group_clean(wmOperatorType *ot)
|
||||
/* identifiers */
|
||||
ot->name = "Clean Vertex Group";
|
||||
ot->idname = "OBJECT_OT_vertex_group_clean";
|
||||
ot->description = "Remove Vertex Group assignments which aren't required";
|
||||
ot->description = "Remove vertex group assignments which are not required";
|
||||
|
||||
/* api callbacks */
|
||||
ot->poll = vertex_group_poll;
|
||||
@@ -3730,7 +3731,7 @@ void OBJECT_OT_vertex_group_copy_to_linked(wmOperatorType *ot)
|
||||
/* identifiers */
|
||||
ot->name = "Copy Vertex Groups to Linked";
|
||||
ot->idname = "OBJECT_OT_vertex_group_copy_to_linked";
|
||||
ot->description = "Copy Vertex Groups to all users of the same Geometry data";
|
||||
ot->description = "Copy vertex groups to all users of the same geometry data";
|
||||
|
||||
/* api callbacks */
|
||||
ot->poll = vertex_group_poll;
|
||||
@@ -3757,7 +3758,7 @@ static int vertex_group_copy_to_selected_exec(bContext *C, wmOperator *op)
|
||||
|
||||
if ((change == 0 && fail == 0) || fail) {
|
||||
BKE_reportf(op->reports, RPT_ERROR,
|
||||
"Copy VGroups to Selected warning, %d done, %d failed (object data must have matching indices)",
|
||||
"Copy vertex groups to selected: %d done, %d failed (object data must have matching indices)",
|
||||
change, fail);
|
||||
}
|
||||
|
||||
@@ -3769,7 +3770,7 @@ void OBJECT_OT_vertex_group_copy_to_selected(wmOperatorType *ot)
|
||||
/* identifiers */
|
||||
ot->name = "Copy Vertex Group to Selected";
|
||||
ot->idname = "OBJECT_OT_vertex_group_copy_to_selected";
|
||||
ot->description = "Copy Vertex Groups to other selected objects with matching indices";
|
||||
ot->description = "Copy vertex groups to other selected objects with matching indices";
|
||||
|
||||
/* api callbacks */
|
||||
ot->poll = vertex_group_poll;
|
||||
@@ -3887,7 +3888,7 @@ static int vertex_group_transfer_weight_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
else {
|
||||
if (op->reports->list.first == NULL) {
|
||||
BKE_report(op->reports, RPT_WARNING, "Failed, no other selected objects with vertex groups found.");
|
||||
BKE_report(op->reports, RPT_WARNING, "Failed, no other selected objects with vertex groups found");
|
||||
}
|
||||
|
||||
return OPERATOR_FINISHED; /* to get the chance to make changes in the redo panel */
|
||||
@@ -4107,7 +4108,7 @@ void OBJECT_OT_vertex_group_sort(wmOperatorType *ot)
|
||||
{
|
||||
ot->name = "Sort Vertex Groups";
|
||||
ot->idname = "OBJECT_OT_vertex_group_sort";
|
||||
ot->description = "Sorts vertex groups alphabetically";
|
||||
ot->description = "Sort vertex groups alphabetically";
|
||||
|
||||
/* api callbacks */
|
||||
ot->poll = vertex_group_poll;
|
||||
@@ -4251,12 +4252,12 @@ static bool check_vertex_group_accessible(wmOperator *op, Object *ob, int def_nr
|
||||
bDeformGroup *dg = BLI_findlink(&ob->defbase, def_nr);
|
||||
|
||||
if (!dg) {
|
||||
BKE_report(op->reports, RPT_ERROR, "Invalid Weight Group Index");
|
||||
BKE_report(op->reports, RPT_ERROR, "Invalid vertex group index");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (dg->flag & DG_LOCK_WEIGHT) {
|
||||
BKE_report(op->reports, RPT_ERROR, "Weight Group is locked");
|
||||
BKE_report(op->reports, RPT_ERROR, "Vertex group is locked");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -4284,9 +4285,9 @@ void OBJECT_OT_vertex_weight_paste(wmOperatorType *ot)
|
||||
{
|
||||
PropertyRNA *prop;
|
||||
|
||||
ot->name = "Paste weight to Selected";
|
||||
ot->name = "Paste Weight to Selected";
|
||||
ot->idname = "OBJECT_OT_vertex_weight_paste";
|
||||
ot->description = "Copy this group's weight to other selected verts (disabled if vertex Group is locked)";
|
||||
ot->description = "Copy this group's weight to other selected verts (disabled if vertex group is locked)";
|
||||
|
||||
/* api callbacks */
|
||||
ot->poll = vertex_group_vert_select_mesh_poll;
|
||||
@@ -4296,7 +4297,7 @@ void OBJECT_OT_vertex_weight_paste(wmOperatorType *ot)
|
||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||
|
||||
prop = RNA_def_int(ot->srna, "weight_group", -1, -1, INT_MAX, "Weight Index",
|
||||
"Index of source weight in active Weight Group", -1, INT_MAX);
|
||||
"Index of source weight in active vertex group", -1, INT_MAX);
|
||||
RNA_def_property_flag(prop, PROP_SKIP_SAVE | PROP_HIDDEN);
|
||||
}
|
||||
|
||||
@@ -4323,7 +4324,7 @@ void OBJECT_OT_vertex_weight_delete(wmOperatorType *ot)
|
||||
|
||||
ot->name = "Delete Weight";
|
||||
ot->idname = "OBJECT_OT_vertex_weight_delete";
|
||||
ot->description = "Delete this weight from the vertex (disabled if vertex Group is locked)";
|
||||
ot->description = "Delete this weight from the vertex (disabled if vertex group is locked)";
|
||||
|
||||
/* api callbacks */
|
||||
ot->poll = vertex_group_vert_select_mesh_poll;
|
||||
@@ -4333,7 +4334,7 @@ void OBJECT_OT_vertex_weight_delete(wmOperatorType *ot)
|
||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||
|
||||
prop = RNA_def_int(ot->srna, "weight_group", -1, -1, INT_MAX, "Weight Index",
|
||||
"Index of source weight in active Weight Group", -1, INT_MAX);
|
||||
"Index of source weight in active vertex group", -1, INT_MAX);
|
||||
RNA_def_property_flag(prop, PROP_SKIP_SAVE | PROP_HIDDEN);
|
||||
}
|
||||
|
||||
@@ -4357,7 +4358,7 @@ void OBJECT_OT_vertex_weight_set_active(wmOperatorType *ot)
|
||||
|
||||
ot->name = "Set Active Group";
|
||||
ot->idname = "OBJECT_OT_vertex_weight_set_active";
|
||||
ot->description = "Set as active Vertex Group";
|
||||
ot->description = "Set as active vertex group";
|
||||
|
||||
/* api callbacks */
|
||||
ot->poll = vertex_group_vert_select_mesh_poll;
|
||||
@@ -4367,7 +4368,7 @@ void OBJECT_OT_vertex_weight_set_active(wmOperatorType *ot)
|
||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||
|
||||
prop = RNA_def_int(ot->srna, "weight_group", -1, -1, INT_MAX, "Weight Index",
|
||||
"Index of source weight in active Weight Group", -1, INT_MAX);
|
||||
"Index of source weight in active vertex group", -1, INT_MAX);
|
||||
RNA_def_property_flag(prop, PROP_SKIP_SAVE | PROP_HIDDEN);
|
||||
}
|
||||
|
||||
@@ -4390,7 +4391,7 @@ void OBJECT_OT_vertex_weight_normalize_active_vertex(wmOperatorType *ot)
|
||||
|
||||
ot->name = "Normalize Active";
|
||||
ot->idname = "OBJECT_OT_vertex_weight_normalize_active_vertex";
|
||||
ot->description = "Normalize Active Vert Weights";
|
||||
ot->description = "Normalize active vertex's weights";
|
||||
|
||||
/* api callbacks */
|
||||
ot->poll = vertex_group_vert_select_mesh_poll;
|
||||
@@ -4419,7 +4420,7 @@ void OBJECT_OT_vertex_weight_copy(wmOperatorType *ot)
|
||||
|
||||
ot->name = "Copy Active";
|
||||
ot->idname = "OBJECT_OT_vertex_weight_copy";
|
||||
ot->description = "Copy weights from Active to selected";
|
||||
ot->description = "Copy weights from active to selected";
|
||||
|
||||
/* api callbacks */
|
||||
ot->poll = vertex_group_vert_select_mesh_poll;
|
||||
|
||||
@@ -862,9 +862,10 @@ static void render_view3d_renderinfo_cb(void *rjp, RenderStats *rs)
|
||||
RenderPreview *rp = rjp;
|
||||
|
||||
/* during render, rv3d->engine can get freed */
|
||||
if (rp->rv3d->render_engine == NULL)
|
||||
if (rp->rv3d->render_engine == NULL) {
|
||||
*rp->stop = 1;
|
||||
else if (rp->engine->text) {
|
||||
}
|
||||
else {
|
||||
make_renderinfo_string(rs, rp->scene, false, rp->engine->text);
|
||||
|
||||
/* make jobs timer to send notifier */
|
||||
|
||||
@@ -3537,7 +3537,14 @@ int sculpt_mode_poll(bContext *C)
|
||||
|
||||
int sculpt_mode_poll_view3d(bContext *C)
|
||||
{
|
||||
return (sculpt_mode_poll(C) && CTX_wm_region_view3d(C));
|
||||
return (sculpt_mode_poll(C) &&
|
||||
CTX_wm_region_view3d(C));
|
||||
}
|
||||
|
||||
int sculpt_poll_view3d(bContext *C)
|
||||
{
|
||||
return (sculpt_poll(C) &&
|
||||
CTX_wm_region_view3d(C));
|
||||
}
|
||||
|
||||
int sculpt_poll(bContext *C)
|
||||
@@ -4954,7 +4961,7 @@ static int sculpt_toggle_mode(bContext *C, wmOperator *UNUSED(op))
|
||||
|
||||
BKE_paint_init(&ts->sculpt->paint, PAINT_CURSOR_SCULPT);
|
||||
|
||||
paint_cursor_start(C, sculpt_mode_poll_view3d);
|
||||
paint_cursor_start(C, sculpt_poll_view3d);
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_MODE, scene);
|
||||
|
||||
@@ -56,7 +56,9 @@ struct MultiresModifierData *sculpt_multires_active(struct Scene *scene, struct
|
||||
|
||||
int sculpt_mode_poll(struct bContext *C);
|
||||
int sculpt_mode_poll_view3d(struct bContext *C);
|
||||
/* checks for a brush, not just sculpt mode */
|
||||
int sculpt_poll(struct bContext *C);
|
||||
int sculpt_poll_view3d(struct bContext *C);
|
||||
void sculpt_update_mesh_elements(struct Scene *scene, struct Sculpt *sd, struct Object *ob,
|
||||
int need_pmap, int need_mask);
|
||||
|
||||
|
||||
@@ -420,7 +420,6 @@ static int mouse_on_slide_zone(SpaceClip *sc, MovieTrackingMarker *marker,
|
||||
float padding, int width, int height)
|
||||
{
|
||||
const float size = 12.0f;
|
||||
int inside = 0;
|
||||
float min[2], max[2];
|
||||
float dx, dy;
|
||||
|
||||
@@ -445,8 +444,6 @@ static int mouse_on_slide_zone(SpaceClip *sc, MovieTrackingMarker *marker,
|
||||
|
||||
return IN_RANGE_INCL(co[0], slide_zone[0] - dx, slide_zone[0] + dx) &&
|
||||
IN_RANGE_INCL(co[1], slide_zone[1] - dy, slide_zone[1] + dy);
|
||||
|
||||
return inside;
|
||||
}
|
||||
|
||||
static int mouse_on_corner(SpaceClip *sc, MovieTrackingMarker *marker,
|
||||
|
||||
@@ -704,7 +704,7 @@ static int tree_element_active_sequence_dup(Scene *scene, TreeElement *te, TreeS
|
||||
// XXX select_single_seq(seq, 1);
|
||||
p = ed->seqbasep->first;
|
||||
while (p) {
|
||||
if ((!p->strip) || (!p->strip->stripdata) || (!p->strip->stripdata->name)) {
|
||||
if ((!p->strip) || (!p->strip->stripdata) || (p->strip->stripdata->name[0] == '\0')) {
|
||||
p = p->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -957,7 +957,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
|
||||
else if (type == TSE_SEQ_STRIP) {
|
||||
Strip *strip = (Strip *)idv;
|
||||
|
||||
if (strip->dir)
|
||||
if (strip->dir[0] != '\0')
|
||||
te->name = strip->dir;
|
||||
else
|
||||
te->name = IFACE_("Strip None");
|
||||
@@ -1171,7 +1171,7 @@ static void outliner_add_seq_dup(SpaceOops *soops, Sequence *seq, TreeElement *t
|
||||
|
||||
p = seq;
|
||||
while (p) {
|
||||
if ((!p->strip) || (!p->strip->stripdata) || (!p->strip->stripdata->name)) {
|
||||
if ((!p->strip) || (!p->strip->stripdata) || (p->strip->stripdata->name[0] == '\0')) {
|
||||
p = p->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -551,6 +551,7 @@ int seq_effect_find_selected(Scene *scene, Sequence *activeseq, int type, Sequen
|
||||
}
|
||||
if (seq1 == NULL) seq1 = seq2;
|
||||
if (seq3 == NULL) seq3 = seq2;
|
||||
/* fall-through */
|
||||
case 2:
|
||||
if (seq1 == NULL || seq2 == NULL) {
|
||||
*error_str = N_("2 selected sequence strips are needed");
|
||||
|
||||
@@ -915,7 +915,7 @@ static void view3d_panel_vgroup(const bContext *C, Panel *pa)
|
||||
ot = WM_operatortype_find("OBJECT_OT_vertex_weight_normalize_active_vertex", 1);
|
||||
but = uiDefButO_ptr(block, BUT, ot, WM_OP_EXEC_DEFAULT, "Normalize",
|
||||
0, yco, UI_UNIT_X * 5, UI_UNIT_Y,
|
||||
TIP_("Normalize weights of active vertex (if affected groups are unlocked"));
|
||||
TIP_("Normalize weights of active vertex (if affected groups are unlocked)"));
|
||||
if (lock_count) {
|
||||
uiButSetFlag(but, UI_BUT_DISABLED);
|
||||
}
|
||||
@@ -923,7 +923,7 @@ static void view3d_panel_vgroup(const bContext *C, Panel *pa)
|
||||
ot = WM_operatortype_find("OBJECT_OT_vertex_weight_copy", 1);
|
||||
but = uiDefButO_ptr(block, BUT, ot, WM_OP_EXEC_DEFAULT, "Copy",
|
||||
UI_UNIT_X * 5, yco, UI_UNIT_X * 5, UI_UNIT_Y,
|
||||
TIP_("Copy active vertex to other selected verts (if affected groups are unlocked)"));
|
||||
TIP_("Copy active vertex to other selected vertices (if affected groups are unlocked)"));
|
||||
if (lock_count) {
|
||||
uiButSetFlag(but, UI_BUT_DISABLED);
|
||||
}
|
||||
|
||||
@@ -3033,7 +3033,7 @@ static void view3d_main_area_draw_engine_info(View3D *v3d, RegionView3D *rv3d, A
|
||||
{
|
||||
float fill_color[4] = {0.0f, 0.0f, 0.0f, 0.25f};
|
||||
|
||||
if (!rv3d->render_engine || !rv3d->render_engine->text)
|
||||
if (!rv3d->render_engine || !rv3d->render_engine->text[0])
|
||||
return;
|
||||
|
||||
if (render_border) {
|
||||
|
||||
@@ -1256,7 +1256,7 @@ static char *rna_def_property_lookup_string_func(FILE *f, StructRNA *srna, Prope
|
||||
fprintf(f, " extern int %s_%s_length(PointerRNA *);\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier));
|
||||
fprintf(f, " extern void %s_%s_get(PointerRNA *, char *);\n\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier));
|
||||
|
||||
fprintf(f, " int found= 0;\n");
|
||||
fprintf(f, " bool found = false;\n");
|
||||
fprintf(f, " CollectionPropertyIterator iter;\n");
|
||||
fprintf(f, " char namebuf[%d];\n", namebuflen);
|
||||
fprintf(f, " char *name;\n\n");
|
||||
@@ -1264,26 +1264,29 @@ static char *rna_def_property_lookup_string_func(FILE *f, StructRNA *srna, Prope
|
||||
fprintf(f, " %s_%s_begin(&iter, ptr);\n\n", srna->identifier, rna_safe_id(prop->identifier));
|
||||
|
||||
fprintf(f, " while (iter.valid) {\n");
|
||||
fprintf(f, " int namelen = %s_%s_length(&iter.ptr);\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier));
|
||||
fprintf(f, " if (namelen < %d) {\n", namebuflen);
|
||||
fprintf(f, " %s_%s_get(&iter.ptr, namebuf);\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier));
|
||||
fprintf(f, " if (strcmp(namebuf, key) == 0) {\n");
|
||||
fprintf(f, " found = 1;\n");
|
||||
fprintf(f, " *r_ptr = iter.ptr;\n");
|
||||
fprintf(f, " break;\n");
|
||||
fprintf(f, " if (iter.ptr.data) {\n");
|
||||
fprintf(f, " int namelen = %s_%s_length(&iter.ptr);\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier));
|
||||
fprintf(f, " if (namelen < %d) {\n", namebuflen);
|
||||
fprintf(f, " %s_%s_get(&iter.ptr, namebuf);\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier));
|
||||
fprintf(f, " if (strcmp(namebuf, key) == 0) {\n");
|
||||
fprintf(f, " found = true;\n");
|
||||
fprintf(f, " *r_ptr = iter.ptr;\n");
|
||||
fprintf(f, " break;\n");
|
||||
fprintf(f, " }\n");
|
||||
fprintf(f, " }\n");
|
||||
fprintf(f, " }\n");
|
||||
fprintf(f, " else {\n");
|
||||
fprintf(f, " name = MEM_mallocN(namelen+1, \"name string\");\n");
|
||||
fprintf(f, " %s_%s_get(&iter.ptr, name);\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier));
|
||||
fprintf(f, " if (strcmp(name, key) == 0) {\n");
|
||||
fprintf(f, " MEM_freeN(name);\n\n");
|
||||
fprintf(f, " found = 1;\n");
|
||||
fprintf(f, " *r_ptr = iter.ptr;\n");
|
||||
fprintf(f, " break;\n");
|
||||
fprintf(f, " else {\n");
|
||||
fprintf(f, " name = MEM_mallocN(namelen+1, \"name string\");\n");
|
||||
fprintf(f, " %s_%s_get(&iter.ptr, name);\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier));
|
||||
fprintf(f, " if (strcmp(name, key) == 0) {\n");
|
||||
fprintf(f, " MEM_freeN(name);\n\n");
|
||||
fprintf(f, " found = true;\n");
|
||||
fprintf(f, " *r_ptr = iter.ptr;\n");
|
||||
fprintf(f, " break;\n");
|
||||
fprintf(f, " }\n");
|
||||
fprintf(f, " else {\n");
|
||||
fprintf(f, " MEM_freeN(name);\n");
|
||||
fprintf(f, " }\n");
|
||||
fprintf(f, " }\n");
|
||||
fprintf(f, " else\n");
|
||||
fprintf(f, " MEM_freeN(name);\n");
|
||||
fprintf(f, " }\n");
|
||||
fprintf(f, " %s_%s_next(&iter);\n", srna->identifier, rna_safe_id(prop->identifier));
|
||||
fprintf(f, " }\n");
|
||||
|
||||
@@ -453,7 +453,7 @@ static void deformVerts(ModifierData *md, Object *ob,
|
||||
DerivedMesh *dm = NULL;
|
||||
CastModifierData *cmd = (CastModifierData *)md;
|
||||
|
||||
dm = get_dm(ob, NULL, derivedData, NULL, 0);
|
||||
dm = get_dm(ob, NULL, derivedData, NULL, false, false);
|
||||
|
||||
if (cmd->type == MOD_CAST_TYPE_CUBOID) {
|
||||
cuboid_do(cmd, ob, dm, vertexCos, numVerts);
|
||||
@@ -470,7 +470,7 @@ static void deformVertsEM(
|
||||
ModifierData *md, Object *ob, struct BMEditMesh *editData,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, 0);
|
||||
DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, false, false);
|
||||
CastModifierData *cmd = (CastModifierData *)md;
|
||||
|
||||
if (cmd->type == MOD_CAST_TYPE_CUBOID) {
|
||||
|
||||
@@ -82,7 +82,7 @@ static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
|
||||
return;
|
||||
}
|
||||
|
||||
dm = get_dm(ob, NULL, derivedData, NULL, 0);
|
||||
dm = get_dm(ob, NULL, derivedData, NULL, false, false);
|
||||
if (dm == derivedData)
|
||||
dm = CDDM_copy(dm);
|
||||
|
||||
|
||||
@@ -265,7 +265,7 @@ static void deformVerts(ModifierData *md, Object *ob,
|
||||
int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
{
|
||||
DerivedMesh *dm = get_cddm(ob, NULL, derivedData, vertexCos);
|
||||
DerivedMesh *dm = get_cddm(ob, NULL, derivedData, vertexCos, dependsOnNormals(md));
|
||||
|
||||
displaceModifier_do((DisplaceModifierData *)md, ob, dm,
|
||||
vertexCos, numVerts);
|
||||
@@ -278,7 +278,7 @@ static void deformVertsEM(
|
||||
ModifierData *md, Object *ob, struct BMEditMesh *editData,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_cddm(ob, editData, derivedData, vertexCos);
|
||||
DerivedMesh *dm = get_cddm(ob, editData, derivedData, vertexCos, dependsOnNormals(md));
|
||||
|
||||
displaceModifier_do((DisplaceModifierData *)md, ob, dm,
|
||||
vertexCos, numVerts);
|
||||
|
||||
@@ -252,7 +252,7 @@ static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
|
||||
DerivedMesh *dm = derivedData;
|
||||
/* We need a valid dm for meshes when a vgroup is set... */
|
||||
if (!dm && ob->type == OB_MESH && hmd->name[0] != '\0')
|
||||
dm = get_dm(ob, NULL, dm, NULL, 0);
|
||||
dm = get_dm(ob, NULL, dm, NULL, false, false);
|
||||
|
||||
deformVerts_do(hmd, ob, dm, vertexCos, numVerts);
|
||||
|
||||
@@ -267,7 +267,7 @@ static void deformVertsEM(ModifierData *md, Object *ob, struct BMEditMesh *editD
|
||||
DerivedMesh *dm = derivedData;
|
||||
/* We need a valid dm for meshes when a vgroup is set... */
|
||||
if (!dm && ob->type == OB_MESH && hmd->name[0] != '\0')
|
||||
dm = get_dm(ob, editData, dm, NULL, 0);
|
||||
dm = get_dm(ob, editData, dm, NULL, false, false);
|
||||
|
||||
deformVerts_do(hmd, ob, dm, vertexCos, numVerts);
|
||||
|
||||
|
||||
@@ -669,7 +669,7 @@ static void laplaciansmoothModifier_do(
|
||||
static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, 0);
|
||||
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
|
||||
|
||||
laplaciansmoothModifier_do((LaplacianSmoothModifierData *)md, ob, dm,
|
||||
vertexCos, numVerts);
|
||||
@@ -682,7 +682,7 @@ static void deformVertsEM(
|
||||
ModifierData *md, Object *ob, struct BMEditMesh *editData,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, 0);
|
||||
DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, false, false);
|
||||
|
||||
laplaciansmoothModifier_do((LaplacianSmoothModifierData *)md, ob, dm,
|
||||
vertexCos, numVerts);
|
||||
|
||||
@@ -212,7 +212,7 @@ static void meshdeformModifier_do(
|
||||
/* if we don't have one computed, use derivedmesh from data
|
||||
* without any modifiers */
|
||||
if (!cagedm) {
|
||||
cagedm = get_dm(mmd->object, NULL, NULL, NULL, 0);
|
||||
cagedm = get_dm(mmd->object, NULL, NULL, NULL, false, false);
|
||||
if (cagedm)
|
||||
cagedm->needsFree = 1;
|
||||
}
|
||||
@@ -343,7 +343,7 @@ static void deformVerts(ModifierData *md, Object *ob,
|
||||
int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, 0);
|
||||
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
|
||||
|
||||
modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
|
||||
|
||||
@@ -359,7 +359,7 @@ static void deformVertsEM(ModifierData *md, Object *ob,
|
||||
float (*vertexCos)[3],
|
||||
int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, 0);
|
||||
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
|
||||
|
||||
meshdeformModifier_do(md, ob, dm, vertexCos, numVerts);
|
||||
|
||||
|
||||
@@ -142,7 +142,7 @@ static void deformVerts(ModifierData *md, Object *ob,
|
||||
return;
|
||||
|
||||
if (dm == NULL) {
|
||||
dm = get_dm(ob, NULL, NULL, vertexCos, 1);
|
||||
dm = get_dm(ob, NULL, NULL, vertexCos, false, true);
|
||||
|
||||
if (!dm)
|
||||
return;
|
||||
|
||||
@@ -48,6 +48,8 @@
|
||||
|
||||
#include "MOD_util.h"
|
||||
|
||||
static bool dependsOnNormals(ModifierData *md);
|
||||
|
||||
|
||||
static void initData(ModifierData *md)
|
||||
{
|
||||
@@ -120,8 +122,9 @@ static void deformVerts(ModifierData *md, Object *ob,
|
||||
CustomDataMask dataMask = requiredDataMask(ob, md);
|
||||
|
||||
/* ensure we get a CDDM with applied vertex coords */
|
||||
if (dataMask)
|
||||
dm = get_cddm(ob, NULL, dm, vertexCos);
|
||||
if (dataMask) {
|
||||
dm = get_cddm(ob, NULL, dm, vertexCos, dependsOnNormals(md));
|
||||
}
|
||||
|
||||
shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ob, dm, vertexCos, numVerts);
|
||||
|
||||
@@ -136,8 +139,9 @@ static void deformVertsEM(ModifierData *md, Object *ob, struct BMEditMesh *editD
|
||||
CustomDataMask dataMask = requiredDataMask(ob, md);
|
||||
|
||||
/* ensure we get a CDDM with applied vertex coords */
|
||||
if (dataMask)
|
||||
dm = get_cddm(ob, editData, dm, vertexCos);
|
||||
if (dataMask) {
|
||||
dm = get_cddm(ob, editData, dm, vertexCos, dependsOnNormals(md));
|
||||
}
|
||||
|
||||
shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ob, dm, vertexCos, numVerts);
|
||||
|
||||
|
||||
@@ -317,7 +317,7 @@ static void deformVerts(ModifierData *md, Object *ob,
|
||||
/* we implement requiredDataMask but thats not really useful since
|
||||
* mesh_calc_modifiers pass a NULL derivedData */
|
||||
if (dataMask)
|
||||
dm = get_dm(ob, NULL, dm, NULL, 0);
|
||||
dm = get_dm(ob, NULL, dm, NULL, false, false);
|
||||
|
||||
SimpleDeformModifier_do((SimpleDeformModifierData *)md, ob, dm, vertexCos, numVerts);
|
||||
|
||||
@@ -337,7 +337,7 @@ static void deformVertsEM(ModifierData *md, Object *ob,
|
||||
/* we implement requiredDataMask but thats not really useful since
|
||||
* mesh_calc_modifiers pass a NULL derivedData */
|
||||
if (dataMask)
|
||||
dm = get_dm(ob, editData, dm, NULL, 0);
|
||||
dm = get_dm(ob, editData, dm, NULL, false, false);
|
||||
|
||||
SimpleDeformModifier_do((SimpleDeformModifierData *)md, ob, dm, vertexCos, numVerts);
|
||||
|
||||
|
||||
@@ -221,7 +221,7 @@ static void smoothModifier_do(
|
||||
static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, 0);
|
||||
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
|
||||
|
||||
smoothModifier_do((SmoothModifierData *)md, ob, dm,
|
||||
vertexCos, numVerts);
|
||||
@@ -234,7 +234,7 @@ static void deformVertsEM(
|
||||
ModifierData *md, Object *ob, struct BMEditMesh *editData,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, 0);
|
||||
DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, false, false);
|
||||
|
||||
smoothModifier_do((SmoothModifierData *)md, ob, dm,
|
||||
vertexCos, numVerts);
|
||||
|
||||
@@ -98,7 +98,7 @@ static void deformVerts(ModifierData *md, Object *ob,
|
||||
|
||||
/* if possible use/create DerivedMesh */
|
||||
if (derivedData) surmd->dm = CDDM_copy(derivedData);
|
||||
else surmd->dm = get_dm(ob, NULL, NULL, NULL, 0);
|
||||
else surmd->dm = get_dm(ob, NULL, NULL, NULL, false, false);
|
||||
|
||||
if (!ob->pd) {
|
||||
printf("SurfaceModifier deformVerts: Should not happen!\n");
|
||||
|
||||
@@ -179,30 +179,33 @@ void modifier_vgroup_cache(ModifierData *md, float (*vertexCos)[3])
|
||||
}
|
||||
|
||||
/* returns a cdderivedmesh if dm == NULL or is another type of derivedmesh */
|
||||
DerivedMesh *get_cddm(Object *ob, struct BMEditMesh *em, DerivedMesh *dm, float (*vertexCos)[3])
|
||||
DerivedMesh *get_cddm(Object *ob, struct BMEditMesh *em, DerivedMesh *dm, float (*vertexCos)[3], bool use_normals)
|
||||
{
|
||||
if (dm && dm->type == DM_TYPE_CDDM)
|
||||
return dm;
|
||||
if (dm) {
|
||||
if (dm->type != DM_TYPE_CDDM) {
|
||||
dm = CDDM_copy(dm);
|
||||
CDDM_apply_vert_coords(dm, vertexCos);
|
||||
}
|
||||
|
||||
if (!dm) {
|
||||
dm = get_dm(ob, em, dm, vertexCos, 0);
|
||||
if (use_normals) {
|
||||
DM_ensure_normals(dm);
|
||||
}
|
||||
}
|
||||
else {
|
||||
dm = CDDM_copy(dm);
|
||||
CDDM_apply_vert_coords(dm, vertexCos);
|
||||
dm->dirty |= DM_DIRTY_NORMALS;
|
||||
dm = get_dm(ob, em, dm, vertexCos, use_normals, false);
|
||||
}
|
||||
|
||||
return dm;
|
||||
}
|
||||
|
||||
/* returns a derived mesh if dm == NULL, for deforming modifiers that need it */
|
||||
DerivedMesh *get_dm(Object *ob, struct BMEditMesh *em, DerivedMesh *dm, float (*vertexCos)[3], int orco)
|
||||
DerivedMesh *get_dm(Object *ob, struct BMEditMesh *em, DerivedMesh *dm,
|
||||
float (*vertexCos)[3], bool use_normals, bool use_orco)
|
||||
{
|
||||
if (dm)
|
||||
return dm;
|
||||
|
||||
if (ob->type == OB_MESH) {
|
||||
if (dm) {
|
||||
/* pass */
|
||||
}
|
||||
else if (ob->type == OB_MESH) {
|
||||
if (em) dm = CDDM_from_editbmesh(em, FALSE, FALSE);
|
||||
else dm = CDDM_from_mesh((struct Mesh *)(ob->data), ob);
|
||||
|
||||
@@ -211,13 +214,20 @@ DerivedMesh *get_dm(Object *ob, struct BMEditMesh *em, DerivedMesh *dm, float (*
|
||||
dm->dirty |= DM_DIRTY_NORMALS;
|
||||
}
|
||||
|
||||
if (orco)
|
||||
if (use_orco) {
|
||||
DM_add_vert_layer(dm, CD_ORCO, CD_ASSIGN, BKE_mesh_orco_verts_get(ob));
|
||||
}
|
||||
}
|
||||
else if (ELEM3(ob->type, OB_FONT, OB_CURVE, OB_SURF)) {
|
||||
dm = CDDM_from_curve(ob);
|
||||
}
|
||||
|
||||
if (use_normals) {
|
||||
if (LIKELY(dm)) {
|
||||
DM_ensure_normals(dm);
|
||||
}
|
||||
}
|
||||
|
||||
return dm;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,9 +46,9 @@ void get_texture_coords(struct MappingInfoModifierData *dmd, struct Object *ob,
|
||||
float (*co)[3], float (*texco)[3], int numVerts);
|
||||
void modifier_vgroup_cache(struct ModifierData *md, float (*vertexCos)[3]);
|
||||
struct DerivedMesh *get_cddm(struct Object *ob, struct BMEditMesh *em, struct DerivedMesh *dm,
|
||||
float (*vertexCos)[3]);
|
||||
float (*vertexCos)[3], bool use_normals);
|
||||
struct DerivedMesh *get_dm(struct Object *ob, struct BMEditMesh *em, struct DerivedMesh *dm,
|
||||
float (*vertexCos)[3], int orco);
|
||||
float (*vertexCos)[3], bool use_normals, bool use_orco);
|
||||
void modifier_get_vgroup(struct Object *ob, struct DerivedMesh *dm,
|
||||
const char *name, struct MDeformVert **dvert, int *defgrp_index);
|
||||
|
||||
|
||||
@@ -327,7 +327,7 @@ static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
|
||||
int use_dm = warp_needs_dm((WarpModifierData *)md);
|
||||
|
||||
if (use_dm) {
|
||||
dm = get_cddm(ob, NULL, derivedData, vertexCos);
|
||||
dm = get_cddm(ob, NULL, derivedData, vertexCos, false);
|
||||
}
|
||||
|
||||
warpModifier_do((WarpModifierData *)md, ob, dm, vertexCos, numVerts);
|
||||
|
||||
@@ -346,9 +346,9 @@ static void deformVerts(ModifierData *md, Object *ob,
|
||||
WaveModifierData *wmd = (WaveModifierData *)md;
|
||||
|
||||
if (wmd->flag & MOD_WAVE_NORM)
|
||||
dm = get_cddm(ob, NULL, dm, vertexCos);
|
||||
dm = get_cddm(ob, NULL, dm, vertexCos, false);
|
||||
else if (wmd->texture || wmd->defgrp_name[0])
|
||||
dm = get_dm(ob, NULL, dm, NULL, 0);
|
||||
dm = get_dm(ob, NULL, dm, NULL, false, false);
|
||||
|
||||
waveModifier_do(wmd, md->scene, ob, dm, vertexCos, numVerts);
|
||||
|
||||
@@ -364,9 +364,9 @@ static void deformVertsEM(
|
||||
WaveModifierData *wmd = (WaveModifierData *)md;
|
||||
|
||||
if (wmd->flag & MOD_WAVE_NORM)
|
||||
dm = get_cddm(ob, editData, dm, vertexCos);
|
||||
dm = get_cddm(ob, editData, dm, vertexCos, false);
|
||||
else if (wmd->texture || wmd->defgrp_name[0])
|
||||
dm = get_dm(ob, editData, dm, NULL, 0);
|
||||
dm = get_dm(ob, editData, dm, NULL, false, false);
|
||||
|
||||
waveModifier_do(wmd, md->scene, ob, dm, vertexCos, numVerts);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user