Commit Graph

211 Commits

Author SHA1 Message Date
Joshua Leung
5d6bdd7c2e Various constraint code cleanups:
1) Fixed some weird formatting introduced during math-lib cleanups, and some other inconsistencies
2) Optimised the Maintain Volume constraint by taking the value calculations out

Copy All Constraints Operators:
* Added one for bones too
* These are now included in the menus
* Removed some weird/extra code copying/changing/bleh the actcol/totcol stuff...
2010-05-27 11:56:31 +00:00
Joshua Leung
4ebc634168 == Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.  

== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'. 

=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.

== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.

* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.

* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
Campbell Barton
610c4befd4 option to copy constraints without making their ID references direct links.
needed because proxies are causing libs to be linked directly when they should be kept indirect (likely slowing load times though I didnt time this)
2010-04-29 15:31:53 +00:00
Joshua Leung
4980e43dd1 Assorted code cleanups:
* Removed some un-needed armature code stubs
* Manually copying over the values of constraints in the constraint copy() callbacks should NOT be needed. Removed this from the Spline IK constraint. The manual process is only a hacky aspect of the modifier stack only!
2010-04-26 06:35:25 +00:00
Matt Ebb
f85fe4d633 Pass constraint names as operator properties in constraint operators
This is similar to commit revision 22078, but for constraint operators rather 
than modifiers, making it possible to use them from scripting.
2010-04-26 03:42:38 +00:00
Campbell Barton
cacd2477c0 bugfix [#22117] Memory Error messages with Spline IK
chainlen was initialized as 0
2010-04-25 13:27:52 +00:00
Campbell Barton
708667c6f6 minor mathutils update
- docstring for Euler.rotate
- rotate_eul, use upper case in Py and C. 
- use less verbose repr method.
2010-04-25 03:34:16 +00:00
Campbell Barton
fba7ebcbea replace add_v3_v3v3() --> add_v3_v3() where possible 2010-04-21 12:27:48 +00:00
Campbell Barton
f7717b2e80 option to use curve point weights to influence particle effectors. 2010-04-21 11:59:47 +00:00
Campbell Barton
8f1500da00 remove config.h references, was added for automake build system rev around 124-126 but isnt used by any build systems now. 2010-04-18 10:28:37 +00:00
Campbell Barton
8c3ab1c2a4 - use more inline math funcitons where possible
- swapped in less verbose math functons
- modifier include cleanup
2010-04-12 00:36:50 +00:00
Brecht Van Lommel
1af9e1fb2b Fix #21885: constraint with copy location/rotation from vertex group crashes. 2010-04-05 11:11:15 +00:00
Joshua Leung
3c872daa59 4 Devs in Agreement - End of the Road for Old Track
This commit removes the Old Track method (used to be found under Object -> Animation -> Track), with all existing instances of this being converted to Track To Constraints. In fact, while performing this removal, I found that this was supposed to have happened in version 2.27 already, but for some reason the options were left in, and this function managed to survive for a further decade.

I've left the tracking axes around still, since it seems some curve tools still use that. However, that usage should probably get faded out in future too?


Misc notes:
* Fixed compiling error with constaints from harkyman's Maintain Volume patch. 
* Subversion of 2.52 now bumped up to .2
2010-03-26 02:57:49 +00:00
Campbell Barton
1e9bf0cfdb spaces -> tabs, (4 spaces == 1 tab, only for white space preceding text) 2010-03-22 09:30:00 +00:00
Campbell Barton
546ca400d8 removed unused includes, except for physics and particle related files 2010-03-21 13:42:25 +00:00
Roland Hess
d617294c49 New "Maintain Volume" constraint. When attached to a bone, you specify a "free" axis. Upon scaling, this free axis scales normally, but the constraint forces the other two axes to adjust themselves appropriately so that overall bone volume is maintained. So, setting "Y" as the free axis (the default) creates a bone that automatically squashes and stretches when scaling. Thanks to Aligorith, Fweeb, Cessen and others for the feedback. 2010-03-16 12:55:56 +00:00
Joshua Leung
b55774aebe Missed a spot when renaming the API functions for adding Keying Set paths
Also some indention/whitespace tweaks
2010-03-01 09:42:39 +00:00
Campbell Barton
15db857628 rename flag for auto script execution since scriptlinks are no more. 2010-02-27 01:47:46 +00:00
Joshua Leung
f3b9ea066e Bugfix #21245: "Track to" (Ctrl + T) operator was missing notifier updates
Bugfix #21255: Clear track operator did not remove TrackTo constraints too. This could still be made to do Locked Track and other tracking constraints later too, but for now this will do.
2010-02-21 11:05:52 +00:00
Campbell Barton
42fd22531f constraints unique name length was set too long (could overrun the buffer), use sizeof() with other instances of BLI_uniquename too 2010-02-18 10:14:49 +00:00
Campbell Barton
081c1205a3 correct fsf address 2010-02-12 13:34:04 +00:00
Brecht Van Lommel
5df1bb84d8 Fix crash in copying constraints for proxy. 2010-02-10 14:47:39 +00:00
Joshua Leung
d359edbc84 Bugfix: Inserting keyframes from the buttons now ensures that the Graph Editor is updated in the process... 2010-02-09 00:02:22 +00:00
Campbell Barton
1cf9493e24 run id_lib_extern on all constraint ID data when copying. solves possible errors when running make proxy on a library object. 2010-02-08 17:30:35 +00:00
Joshua Leung
ae22d97c45 Constraints API: ID-Loopers
Added a system for running a callback on all the ID-blocks referenced by constraints (like for modifiers). Also, added an API function which calls these on the constraints present in the given list.

These could be used for:
- the proxies + action/pyconstraint fix that campbell committed
- simplification of file loading code
2010-02-06 11:28:22 +00:00
Campbell Barton
29e11e3ef4 bugfix for proxying linked objects & action constraints, reference to linked actions were being lost. 2010-02-05 11:32:27 +00:00
Joshua Leung
ba6d50c3d3 Bugfix #20975: Deleting a constraint causes segfault
Missing null checks in API functions.
2010-02-05 06:05:24 +00:00
Joshua Leung
53596fc6b8 Bugfix #20940: Offset always resets to 1 in follow path constraint
Made the 'Offset Factor' setting use a separate variable from the 'Offset' setting in the DNA stuff. While we could get away with this sort of thing in the past, it turns out that with the Datablocks viewer these days, settings sharing an internal var but with different ranges/behaviour doesn't work well anymore, since later instances override earlier ones.
2010-02-03 09:05:31 +00:00
Campbell Barton
e307f6c6a0 rename defgroup functions to be more consistant.
* no functional changes *
2010-01-26 13:50:17 +00:00
Matt Ebb
0c5998e799 Radians -> Degrees (in UI)
Rotations are now stored internally as radians, while exposing degrees in the UI - 
in the graph editor and UI controls. This is done in two areas:
1) Using the unit system to convert RNA data to display as degrees in the UI controls
2) FCurves now use degrees for rotation, so you can edit in the graph editor what 
you see in the UI.

All rotation data is consistently accessible in DNA and RNA as radians, degrees are only 
used for the UI controls and graph editor.

This commit includes conversions will convert old files (stored data and also fcurve data) 
to the new units, hopefully everything should go smoothly!

Part of this also changes a few properties that were hard-coded as degrees before (such 
as IK pole angle and brush texture rotation) to also use the same consistent system of 
radians (dna/rna) and degrees (ui).

Thanks to Joshua for hints and review here too.
2010-01-25 06:24:05 +00:00
Joshua Leung
a7d268d38e Cessen Rigging Request: "Copy Transforms" Constraint
This constraint simply copies the transformation matrix of the target, and assigns it to the owner.
2010-01-02 04:14:17 +00:00
Joshua Leung
e01b030817 Bugfix #20351:
- Offset parameter of the path constraint has no effect on the animation 
- Path animation was being repeated multiple times even though it was not supposed to
2009-12-14 06:25:42 +00:00
Brecht Van Lommel
55d2a56d60 Sculpt:
svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r24483:24889
2009-11-25 17:51:16 +00:00
Campbell Barton
d55ac4da2b - added rna api function scene.update(), needed for rig generation to update driver deps
- removed some warnings
2009-11-24 09:24:32 +00:00
Joshua Leung
a12c2a8561 Constraints: Code cleanup
* Removing duplicate api functions
* Shuffled around newly added api functions to make the ordering more consistent
* Fixes for a few bugs in the api functions as I checked over them
* Replaced most of the #defines for flags and modes with enums
2009-11-16 12:33:42 +00:00
Campbell Barton
567ee32f14 - fcurve modifiers.new()/remove()/active
- renamed .add() to .new() for rna collection functions since they dont add an existing item.
- remove 'name' as an argument from the new driver target function, better to keep the api minimal and let scripters use the data api for editing values after.
- added some api functions to keep rna api from becoming a mess.
2009-11-16 11:11:16 +00:00
Joshua Leung
e191007d5f Action Constraints Bugfix:
Action Constraints were failing when the rotation mode was non-default. Fixed this by copying over the current rotation mode when creating temp elements to evaluate with.
2009-11-14 02:50:45 +00:00
Campbell Barton
53250f85db object.constraints.add()/remove()/active, same for PoseChannel
modified internal api for minimal rna wrapper functions.

TODO
- missing updates for pose channels
- typecheck for pose/object constraints
2009-11-11 19:58:30 +00:00
Brecht Van Lommel
2e3326c153 Sculpt: svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r24330:24483 2009-11-11 10:44:46 +00:00
Brecht Van Lommel
37e4a311b0 Math Lib
* Convert all code to use new functions.
* Branch maintainers may want to skip this commit, and run this
  conversion script instead, if they use a lot of math functions
  in new code:
  http://www.pasteall.org/9052/python
2009-11-10 20:43:45 +00:00
Brecht Van Lommel
b90d8ec0f4 Sculpt: derivedmesh no longer created CD_ORIGINDEX layer when there
is no modifier, saving some memory.
2009-11-04 20:23:48 +00:00
Joshua Leung
2068eaf1b7 Rigging Goodies: Spline IK Constraint
At last, this commit introduces the Spline IK Constraint to Blender. Spline IK is a constraint that makes n bones follow the shape of a specified curve. 

Simply add a chain of bones, add a curve, add a Spline IK Constraint to the tip bone and set the number of bones in the chain to make it work. Or, try the following test file:
http://download.blender.org/ftp/incoming/250_splineik_spine01.blend

Screenshots of this in action (as proof):
http://download.blender.org/ftp/incoming/b250_splineik_001_before.png
http://download.blender.org/ftp/incoming/b250_splineik_001_after.png

I've implemented this in a similar way to how standard IK solvers are done. However, this code is currently not an IK plugin, since I imagine that it would be useful to be able to combine the 2 types of IK. This can be easily changed though :)

Finally, a few notes on what to expect still:
* Constraint blending currently doesn't affect this. Getting that to work correctly will take a bit more work still.
* Options for not affecting the root joint (to make it easier to attach the chain to a stump or whatever), and non-uniform scaling options have yet to be added. I've marked the places where they can be added though
* Control over the twisting of the chain still needs investigation. 

Have fun!
2009-11-01 11:29:40 +00:00
Joshua Leung
ae3cf92491 New Track To Constraint: "Damped"
This is effectively a C-port of Nathan Vegdahl's "No Twist" TrackTo PyConstraint, and has been added as a separate type of constraint to be consistent with the existing constraints (Locked Track, and Track To). 

In general, this works considerably better than the existing "Track To" constraint, since it works by determining the smallest rotation necessary to get the current orientation of the owner to an orientation which would be tracking the target. It is also a much more straightforward approach than the weird old method the old Track To uses.

I've made a few tweaks to the code to deal with the (hopefully rare) cases where the target and the constrained are coincident. These don't appear to cause too much trouble in general.

TODO:
- Probably the naming of the constraints will change, to better convey their purposes. Naming suggestions welcome.
2009-10-30 06:33:40 +00:00
Joshua Leung
829bbda7f5 Bugfix #19616: vertex group select as IK target cause crash in Blender2.5
Thanks to Masahito Takahashi (mato)  for the report and patch to fix this!
2009-10-12 09:39:57 +00:00
Joshua Leung
7d2fd5449e Durian Feature Request: Rotation Modes for Objects
This (biggish) commit generalises the rotation modes functionality added for Bones, allowing Objects to use the various Euler Rotation orders, Axis-Angle, and Quaternion rotation representations.

I've also cleaned up the nomenclature of the rotation-related settings so that the naming styles are more consistent with each other. Unfortunately, this will break all files involving object or bone rotation animation made in 2.5 versions (2.4x will still get correctly converted).

General Notes:
* By default, Objects still default to using Eulers, while Bones will use Quaternions by default still.
* I've fixed all areas that I'm currently aware of to work with these changes. However, there are probably a few places where I've missed a few changes (i.e. auto-keyframing will need attention later).
* Removed the old "IPO-Keys" stuff from Transform code. I'm unlikely to restore this in the near future, and trying to fix that to include support for this commit would have been too much work.
2009-09-28 10:19:20 +00:00
Joshua Leung
2d22ea1f92 Drivers: Copy/Paste tools for the RMB Menu
Drivers can now be copied/pasted for single properties, allowing drivers set up on one property to be added to a few other properties relatively easily. 

Also, added description strings for the other driver-button operators.
2009-09-25 04:51:04 +00:00
Benoit Bolsee
1483fafd13 Merge of itasc branch. Project files, scons and cmake should be working. Makefile updated but not tested. Comes with Eigen2 2.0.6 C++ matrix library. 2009-09-24 21:22:24 +00:00
Joshua Leung
d2639e732b 2.5 - Partial Bugfixes for Parenting Objects to Curves (Ctrl-P)
* Path Constraint option (i.e. this creates a follow-path constraint but doesn't actually parent the object to the curve) works now. Fixed a crash here too.

* Follow Path option (i.e. parent the object to the curve, and follow it), is not working correctly yet. Some matrix seems to get set wrongly.
2009-09-21 12:09:00 +00:00
Joshua Leung
2f71b49484 2.5 - Yet another round of bugfixes
* Copy Rotation constraint "should" work ok for custom rotation orders now. It now converts both rotations to the form used by the owner. So far, this doesn't seem to have broken any of the test rigs in my test-suite, though new specimens for the hall of flakiness are always welcome.

* Fixed many RNA wrapping bugs for Armature data. 
- Fixed a few wrong tooltips
- Made proper refreshes for restpose/posed, etc.

* Started converting special quaternion interpolation for Pose Sliding tools (push/relax/breakdown), though this doesn't seem to be working correctly yet. 
-->> Help to get these working right is welcome :)
2009-09-20 12:54:30 +00:00
Joshua Leung
ad25fc829e 2.5 - More animation/rigging bugfixes
* #19419: PoseLib rename/remove tools could crash when an invalid 
(However, now care is needed when touching that index field, since the warnings can keep piling up)

* Added Browse Poses for PoseLib to the toolbar

* Removing constraints from bones now properly updates. A DAG rebuild is now forced, and the constraint flags are cleared.

* Attempting to improve the situation with Copy Rotation constraint and rotation orders other than xyz. Unforunately, it looks like a different method is required...
2009-09-20 11:21:44 +00:00