Lattice Editing: Distortion-Free "Flip" Operator
authorJoshua Leung <aligorith@gmail.com>
Sat, 13 Oct 2012 10:42:38 +0000 (10:42 +0000)
committerJoshua Leung <aligorith@gmail.com>
Sat, 13 Oct 2012 10:42:38 +0000 (10:42 +0000)
commitb6b2f37f2759a4738d6db970a7bda21709783f81
tree572be640a0b44afbcbe59937c2b014cca320aade
parent29ab21ee95bd76dd7fae788c0300082f96fe88a1
Lattice Editing: Distortion-Free "Flip" Operator

This operator (Ctrl-F) allows you to flip the lattice coordinates without
inverting the normals of meshes deformed by the lattice (or the lattice's
deformation space for that matter). Unlike the traditional mirror tool, this
tool is aware of the fact that the vertex order for lattice control points
matters, and that simply mirroring the coordinates will only cause the lattice
to have an inverted deform along a particular axis (i.e. it will be scaling by a
negative scaling factor along that axis).

The problems (as I discovered the other day) with having such an inverted
deformation space are that:
- the normals of meshes/objects inside that will be incorrect/flipped (and will
disappear in GLSL shading mode for instance)
- transforming objects deformed by the lattices will become really tricky and
counter-intuitive (e.g. rotate in opposite direction by asymmetric amounts to
get desired result)
- it is not always immediately obvious that problems have occurred

Specific use cases this operator is meant to solve:
1) You've created a lattice-based deformer for one cartoonish eye. Now you want
to make the second eye, but want to save some time crafting that basic shape
again but mirrored.
2) You've got an even more finely crafted setup for stretchy-rigs, and now need
to apply it to other parts of the rig.

Notes:
* I've implemented a separate operator for this vs extending/patching mirror
transform tool as it's easier to implement this way, but also because there are
still some cases where the old mirroring seems valid (i.e. you explicitly want
these sort of distortion effects).
* Currently this doesn't take selections into account, as it doesn't seem useful
to do so.
release/scripts/startup/bl_ui/space_view3d.py
source/blender/editors/object/object_intern.h
source/blender/editors/object/object_lattice.c
source/blender/editors/object/object_ops.c