diff options
author | Daniel Dunbar <daniel@zuster.org> | 2005-07-20 00:14:17 +0400 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2005-07-20 00:14:17 +0400 |
commit | 1df154d14026daf7837f7ed6ea6553145436ae52 (patch) | |
tree | 32eae4e00158f1c9a320ef524b4b53ad7ac4139d /source/blender/blenkernel/BKE_modifier.h | |
parent | f1763b2f0878096d5ddb5b6aa96bda71aaeb6be1 (diff) |
- split {curve,lattice,armature}_deform_verts out of mesh_deform
- removed mesh_deform (merge into mesh_modifier)
- switch python lattice_apply function to use object_apply_deform,
this isn't exactly equivalent but the python system shouldn't
have been calling that deep into the kernel anyway.
New feature: Modifier stack
- added Object.modifiers (list of ModifierData elements)
- added DNA_modifier_types.h
o contains type definition for the file data for the various
modifier types
- added BKE_modifier.h
o contains modifierType_get_info (access to modifier type registry)
o structs and defines for runtime modifier usage
- updated mesh_calc_modifiers to evaluate modifier stack (note that
for the time being it also evaluates the old style modifiers so files
should load and work as normal).
- add file handling modifier code (todo: don't replicate on object copy)
- add modifier stack UI code (lives in object panel)
Only real new feature at the moment is that you can apply lattices and
curves *after* a subdivision surface which was never possible before.
Todo:
- DEP graph updating does not work correctly yet, so you generally have
to tab cycle to see results.
- editmode calculation does not use modifier stack.
- bug fixes (there must be a few in there somewhere)
Diffstat (limited to 'source/blender/blenkernel/BKE_modifier.h')
-rw-r--r-- | source/blender/blenkernel/BKE_modifier.h | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h new file mode 100644 index 00000000000..651eb781fe7 --- /dev/null +++ b/source/blender/blenkernel/BKE_modifier.h @@ -0,0 +1,116 @@ +/** + * + * $$ + * + * ***** BEGIN GPL/BL DUAL 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. The Blender + * Foundation also sells licenses for use in proprietary software under + * the Blender License. See http://www.blender.org/BL/ for information + * about this. + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL/BL DUAL LICENSE BLOCK ***** + */ +#ifndef BKE_MODIFIER_H +#define BKE_MODIFIER_H + +struct DerivedMesh; +struct ModifierData; +struct Object; + +typedef enum { + /* Should not be used, only for None modifier type */ + eModifierTypeType_None, + + /* Modifier only does deformation, implies that modifier + * type should have a valid deformVerts function. OnlyDeform + * style modifiers implicitly accept either mesh or CV + * input but should still declare flags appropriately. + */ + eModifierTypeType_OnlyDeform, + + eModifierTypeType_Constructive, + eModifierTypeType_Nonconstructive, +} ModifierTypeType; + +typedef enum { + eModifierTypeFlag_AcceptsMesh = (1<<0), + eModifierTypeFlag_AcceptsCVs = (1<<1), + eModifierTypeFlag_SupportsMapping = (1<<2), + eModifierTypeFlag_RequiresObject = (1<<3), +} ModifierTypeFlag; + +typedef struct ModifierTypeInfo { + char name[32], structName[32]; + ModifierTypeType type; + ModifierTypeFlag flags; + + /* Create new instance data for this modifier type. + * + * This function must be present. + */ + struct ModifierData *(*allocData)(void); + + /* Return a boolean value indicating if this modifier is able to be calculated + * based on the modifier data. This is *not* regarding the md->flag, that is + * tested by the system, this is just if the data validates (for example, a + * lattice will return false if the lattice object is not defined). + * + * This function must be present. + */ + int (*isDisabled)(struct ModifierData *md); + + /* Only for deform types, should apply the deformation + * to the given vertex array. Object is guaranteed to be + * non-NULL. + */ + void (*deformVerts)(struct ModifierData *md, struct Object *ob, float (*vertexCos)[3], int numVerts); + + /* For non-deform types: apply the modifier and return a new derived + * data object (type is dependent on object type). If the _derivedData_ + * argument is non-NULL then the modifier should read the object data + * from the derived object instead of the _data_ object. + * + * If the _vertexCos_ argument is non-NULL then the modifier should read + * the vertex coordinates from that (even if _derivedData_ is non-NULL). + * The length of the _vertexCos_ array is either the number of verts in + * the derived object (if non-NULL) or otherwise the number of verts in + * the original object. + * + * The _useRenderParams_ indicates if the modifier is being applied in + * the service of the renderer which may alter quality settings. + * + * The modifier is expected to release (or reuse) the _derivedData_ argument + * if non-NULL. The modifier *MAY NOT* share the _vertexCos_ argument. + * + * It is possible for _ob_ to be NULL if the modifier type is not flagged + * to require an object. A NULL _ob_ occurs when original coordinate data + * is requested for an object. + */ + void *(*applyModifier)(struct ModifierData *md, void *data, struct Object *ob, + void *derivedData, float (*vertexCos)[3], int useRenderParams); +} ModifierTypeInfo; + +ModifierTypeInfo *modifierType_get_info(ModifierType type); + +#endif + |