Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2005-07-20 00:14:17 +0400
committerDaniel Dunbar <daniel@zuster.org>2005-07-20 00:14:17 +0400
commit1df154d14026daf7837f7ed6ea6553145436ae52 (patch)
tree32eae4e00158f1c9a320ef524b4b53ad7ac4139d /source/blender/blenkernel/BKE_modifier.h
parentf1763b2f0878096d5ddb5b6aa96bda71aaeb6be1 (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.h116
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
+