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-08-11 06:23:52 +0400
committerDaniel Dunbar <daniel@zuster.org>2005-08-11 06:23:52 +0400
commitac3ed0f92a8e8fab50312c716c8cbdf3f38616d9 (patch)
tree937296e5fa6b3001b54f6bd491090b1c01ffdb59 /source/blender/blenkernel
parent2f32c8451cf3afb2fbac412a43e39a29054a3dc5 (diff)
- switch to using softbody modifier, controls enabling but does not have
variables, these are still in same place. enable button automatically makes/enables modifier. - changed hook to hook modifier conversion to happen on direct link, required to make sure we don't forget to free any memory for files saved with 2.38 that have hooks. - update modifier interface to enforce modifiers with the require-original- data flag to not move beyond deforming modifiers. - enforce only one softbody modifier allowed NOTE: Once again, no modifier stack for lattice yet means softbody for lattice does not work atm.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_modifier.h51
-rw-r--r--source/blender/blenkernel/intern/deform.c37
-rw-r--r--source/blender/blenkernel/intern/depsgraph.c2
-rw-r--r--source/blender/blenkernel/intern/modifier.c32
-rw-r--r--source/blender/blenkernel/intern/softbody.c2
5 files changed, 51 insertions, 73 deletions
diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h
index e2838622494..574f7b313b4 100644
--- a/source/blender/blenkernel/BKE_modifier.h
+++ b/source/blender/blenkernel/BKE_modifier.h
@@ -34,7 +34,6 @@
#define BKE_MODIFIER_H
struct DerivedMesh;
-struct ModifierData;
struct DagForest;
struct DagNode;
struct Object;
@@ -94,19 +93,19 @@ typedef struct ModifierTypeInfo {
*
* This function is optional.
*/
- void (*initData)(struct ModifierData *md);
+ void (*initData)(ModifierData *md);
/* Copy instance data for this modifier type. Should copy all user
* level settings to the target modifier.
*/
- void (*copyData)(struct ModifierData *md, struct ModifierData *target);
+ void (*copyData)(ModifierData *md, ModifierData *target);
/* Free internal modifier data variables, this function should
* not free the _md_ variable itself.
*
* This function is optional.
*/
- void (*freeData)(struct ModifierData *md);
+ void (*freeData)(ModifierData *md);
/* 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
@@ -115,20 +114,20 @@ typedef struct ModifierTypeInfo {
*
* This function is optional (assumes never disabled if not present).
*/
- int (*isDisabled)(struct ModifierData *md);
+ int (*isDisabled)(ModifierData *md);
/* Add the appropriate relations to the DEP graph depending on the modifier
* data.
*
* This function is optional.
*/
- void (*updateDepgraph)(struct ModifierData *md, struct DagForest *forest, struct Object *ob, struct DagNode *obNode);
+ void (*updateDepgraph)(ModifierData *md, struct DagForest *forest, struct Object *ob, struct DagNode *obNode);
/* Should return true if the modifier needs to be recalculated on time changes.
*
* This function is optional (assumes false if not present).
*/
- int (*dependsOnTime)(struct ModifierData *md);
+ int (*dependsOnTime)(ModifierData *md);
/* Should call the given _walk_ function on with a pointer to each Object pointer
* that the modifier data stores. This is used for linking on file load and for
@@ -136,17 +135,17 @@ typedef struct ModifierTypeInfo {
*
* This function is optional.
*/
- void (*foreachObjectLink)(struct ModifierData *md, struct Object *ob, void (*walk)(void *userData, Object *ob, Object **obpoin), void *userData);
+ void (*foreachObjectLink)(ModifierData *md, struct Object *ob, void (*walk)(void *userData, Object *ob, Object **obpoin), void *userData);
/* Only for deform types, should apply the deformation
* to the given vertex array. If the deformer requires information from
* the object it can obtain it from the _derivedData_ argument if non-NULL,
* and otherwise the _ob_ argument.
*/
- void (*deformVerts)(struct ModifierData *md, struct Object *ob, void *derivedData, float (*vertexCos)[3], int numVerts);
+ void (*deformVerts)(ModifierData *md, struct Object *ob, void *derivedData, float (*vertexCos)[3], int numVerts);
/* Like deformVerts but called during editmode (for supporting modifiers) */
- void (*deformVertsEM)(struct ModifierData *md, struct Object *ob, void *editData, void *derivedData, float (*vertexCos)[3], int numVerts);
+ void (*deformVertsEM)(ModifierData *md, struct Object *ob, void *editData, void *derivedData, 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_
@@ -170,7 +169,7 @@ typedef struct ModifierTypeInfo {
* The modifier *MAY NOT* reuse or release the _derivedData_ argument
* if non-NULL. The modifier *MAY NOT* share the _vertexCos_ argument.
*/
- void *(*applyModifier)(struct ModifierData *md, struct Object *ob, void *derivedData, float (*vertexCos)[3], int useRenderParams, int isFinalCalc);
+ void *(*applyModifier)(ModifierData *md, struct Object *ob, void *derivedData, float (*vertexCos)[3], int useRenderParams, int isFinalCalc);
/* Like applyModifier but called during editmode (for supporting modifiers).
*
@@ -178,7 +177,7 @@ typedef struct ModifierTypeInfo {
* from editmode objects. The same qualifications regarding _derivedData_ and _vertexCos_
* apply as for applyModifier.
*/
- void *(*applyModifierEM)(struct ModifierData *md, struct Object *ob, void *editData, void *derivedData, float (*vertexCos)[3]);
+ void *(*applyModifierEM)(ModifierData *md, struct Object *ob, void *editData, void *derivedData, float (*vertexCos)[3]);
} ModifierTypeInfo;
ModifierTypeInfo* modifierType_getInfo (ModifierType type);
@@ -186,19 +185,21 @@ ModifierTypeInfo* modifierType_getInfo (ModifierType type);
/* Modifier utility calls, do call through type pointer and return
* default values if pointer is optional.
*/
-struct ModifierData* modifier_new (int type);
-void modifier_free (struct ModifierData *md);
-
-void modifier_copyData (struct ModifierData *md, struct ModifierData *target);
-int modifier_dependsOnTime (struct ModifierData *md);
-int modifier_supportsMapping(struct ModifierData *md);
-int modifier_couldBeCage (struct ModifierData *md);
-void modifier_setError (struct ModifierData *md, char *format, ...);
-
-void modifiers_foreachObjectLink (struct Object *ob, void (*walk)(void *userData, struct Object *ob, struct Object **obpoin), void *userData);
-struct ModifierData* modifiers_findByType (struct Object *ob, ModifierType type);
-void modifiers_clearErrors (struct Object *ob);
-int modifiers_getCageIndex (struct Object *ob, int *lastPossibleCageIndex_r);
+ModifierData* modifier_new (int type);
+void modifier_free (ModifierData *md);
+
+void modifier_copyData (ModifierData *md, ModifierData *target);
+int modifier_dependsOnTime (ModifierData *md);
+int modifier_supportsMapping (ModifierData *md);
+int modifier_couldBeCage (ModifierData *md);
+void modifier_setError (ModifierData *md, char *format, ...);
+
+void modifiers_foreachObjectLink (struct Object *ob, void (*walk)(void *userData, struct Object *ob, struct Object **obpoin), void *userData);
+ModifierData* modifiers_findByType (struct Object *ob, ModifierType type);
+void modifiers_clearErrors (struct Object *ob);
+int modifiers_getCageIndex (struct Object *ob, int *lastPossibleCageIndex_r);
+
+int modifiers_isSoftbodyEnabled (struct Object *ob);
#endif
diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c
index a1f04eaa048..e2cb842e16d 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -163,11 +163,6 @@ void mesh_modifier(Object *ob, float (**vertexCos_r)[3])
do_mesh_key(me);
- if((ob->softflag & OB_SB_ENABLE) && !(ob->softflag & OB_SB_POSTDEF)) {
- if (!vertexCos) vertexCos = mesh_getVertexCos(me, NULL);
- sbObjectStep(ob, (float)G.scene->r.cfra, vertexCos);
- }
-
if (ob->parent && me->totvert) {
if(ob->parent->type==OB_CURVE && ob->partype==PARSKEL) {
if (!vertexCos) vertexCos = mesh_getVertexCos(me, NULL);
@@ -183,11 +178,6 @@ void mesh_modifier(Object *ob, float (**vertexCos_r)[3])
}
}
- if((ob->softflag & OB_SB_ENABLE) && (ob->softflag & OB_SB_POSTDEF)) {
- if (!vertexCos) vertexCos = mesh_getVertexCos(me, NULL);
- sbObjectStep(ob, (float)G.scene->r.cfra, vertexCos);
- }
-
*vertexCos_r = vertexCos;
}
@@ -229,31 +219,10 @@ int curve_modifier(Object *ob, char mode)
int lattice_modifier(Object *ob, char mode)
{
- static BPoint *bpoint;
- Lattice *lt= ob->data;
- int done= 0;
-
+ Lattice *lt = ob->data;
+
do_latt_key(lt);
- /* conditions if it's needed */
- if(ob->parent && ob->partype==PARSKEL);
- else if((ob->softflag & OB_SB_ENABLE));
- else return 0;
-
- if(mode=='s') { // "start"
- /* copy */
- bpoint= MEM_dupallocN(lt->def);
-
- if((ob->softflag & OB_SB_ENABLE)) {
- sbObjectStep(ob, (float)G.scene->r.cfra, NULL);
- }
- }
- else { // end
- MEM_freeN(lt->def);
- lt->def= bpoint;
- bpoint= NULL;
- }
-
- return done;
+ return 0;
}
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index 323c6793c7d..bf0bab5403f 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -1426,7 +1426,7 @@ void DAG_scene_update_flags(Scene *sce, unsigned int lay)
if(ob->action) ob->recalc |= OB_RECALC_DATA;
else if(ob->nlastrips.first) ob->recalc |= OB_RECALC_DATA;
- else if(ob->softflag & OB_SB_ENABLE) ob->recalc |= OB_RECALC_DATA;
+ else if(modifiers_isSoftbodyEnabled(ob)) ob->recalc |= OB_RECALC_DATA;
else if(object_modifiers_use_time(ob)) ob->recalc |= OB_RECALC_DATA;
else {
Mesh *me;
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index 5e6be926caa..f306986a8ef 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -12,6 +12,7 @@
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
+#include "DNA_object_force.h"
#include "DNA_effect_types.h"
#include "DNA_scene_types.h"
#include "BLI_editVert.h"
@@ -26,6 +27,7 @@
#include "BKE_subsurf.h"
#include "BKE_object.h"
#include "BKE_mesh.h"
+#include "BKE_softbody.h"
#include "depsgraph_private.h"
#include "LOD_DependKludge.h"
@@ -1138,10 +1140,10 @@ static void hookModifier_deformVerts(ModifierData *md, Object *ob, void *derived
for (i=0; i<hmd->totindex; i++) {
int index = hmd->indexar[i];
- /* These should always be true and I don't generally like
+ /* This should always be true and I don't generally like
* "paranoid" style code like this, but old files can have
* indices that are out of range because old blender did
- * not correct them on exit editmode.
+ * not correct them on exit editmode. - zr
*/
if (index<numVerts) {
float *co = vertexCos[index];
@@ -1174,14 +1176,7 @@ static void softbodyModifier_deformVerts(ModifierData *md, Object *ob, void *der
{
SoftbodyModifierData *hmd = (SoftbodyModifierData*) md;
-// sbObjectStep(ob, (float)G.scene->r.cfra, vertexCos);
-}
-
-static void softbodyModifier_deformVertsEM(ModifierData *md, Object *ob, void *editData, void *derivedData, float (*vertexCos)[3], int numVerts)
-{
- SoftbodyModifierData *hmd = (SoftbodyModifierData*) md;
-
-// sbObjectStep(ob, (float)G.scene->r.cfra, vertexCos);
+ sbObjectStep(ob, (float)G.scene->r.cfra, vertexCos);
}
/***/
@@ -1299,9 +1294,8 @@ ModifierTypeInfo *modifierType_getInfo(ModifierType type)
mti = INIT_TYPE(Softbody);
mti->type = eModifierTypeType_OnlyDeform;
- mti->flags = eModifierTypeFlag_AcceptsCVs | eModifierTypeFlag_SupportsEditmode;
+ mti->flags = eModifierTypeFlag_AcceptsCVs | eModifierTypeFlag_RequiresOriginalData;
mti->deformVerts = softbodyModifier_deformVerts;
- mti->deformVertsEM = softbodyModifier_deformVertsEM;
typeArrInit = 0;
#undef INIT_TYPE
@@ -1460,3 +1454,17 @@ int modifiers_getCageIndex(Object *ob, int *lastPossibleCageIndex_r)
return cageIndex;
}
+
+
+int modifiers_isSoftbodyEnabled(Object *ob)
+{
+ ModifierData *md = modifiers_findByType(ob, eModifierType_Softbody);
+
+ /* Softbody not allowed in this situation, enforce! */
+ if (md && ob->pd && ob->pd->deflect) {
+ md->mode &= ~(eModifierMode_Realtime|eModifierMode_Render|eModifierMode_Editmode);
+ md = NULL;
+ }
+
+ return (md && md->mode&(eModifierMode_Realtime|eModifierMode_Render));
+}
diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c
index b4da0f1097c..5e23e00bb19 100644
--- a/source/blender/blenkernel/intern/softbody.c
+++ b/source/blender/blenkernel/intern/softbody.c
@@ -929,7 +929,7 @@ static void makelatticesprings(Lattice *lt, BodySpring *bs, int dostiff)
{
BPoint *bp, *bpu;
int u, v, w, dv, dw, uxt, vxt, wxt, bpc, bpuc;
-int debugspringcounter = 0;
+ int debugspringcounter = 0;
bp= lt->def;
bpc =0;