Ejemplo n.º 1
0
static int armature_dissolve_selected_exec(bContext *C, wmOperator *UNUSED(op))
{
	bArmature *arm;
	EditBone *ebone, *ebone_next;
	Object *obedit = CTX_data_edit_object(C);
	bool changed = false;

	/* store for mirror */
	GHash *ebone_flag_orig = NULL;
	int ebone_num = 0;

	arm = obedit->data;

	for (ebone = arm->edbo->first; ebone; ebone = ebone->next) {
		ebone->temp.p = NULL;
		ebone->flag &= ~BONE_DONE;
		ebone_num++;
	}

	if (arm->flag & ARM_MIRROR_EDIT) {
		GHashIterator gh_iter;

		ebone_flag_orig = BLI_ghash_ptr_new_ex(__func__, ebone_num);
		for (ebone = arm->edbo->first; ebone; ebone = ebone->next) {
			union { int flag; void *p; } val = {0};
			val.flag = ebone->flag;
			BLI_ghash_insert(ebone_flag_orig, ebone, val.p);
		}

		armature_select_mirrored_ex(arm, BONE_SELECTED | BONE_ROOTSEL | BONE_TIPSEL);

		GHASH_ITER (gh_iter, ebone_flag_orig) {
			union { int flag; void *p; } *val_p = (void *)BLI_ghashIterator_getValue_p(&gh_iter);
			ebone = BLI_ghashIterator_getKey(&gh_iter);
			val_p->flag = ebone->flag & ~val_p->flag;
		}
	}
Ejemplo n.º 2
0
void armature_select_mirrored(bArmature *arm)
{
	armature_select_mirrored_ex(arm, BONE_SELECTED);
}