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:
-rw-r--r--source/blender/blenkernel/BKE_lattice.h2
-rw-r--r--source/blender/blenkernel/intern/lattice.c12
-rw-r--r--source/blender/blenkernel/intern/modifier.c11
-rw-r--r--source/blender/blenloader/intern/readfile.c13
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h10
-rw-r--r--source/blender/src/buttons_editing.c11
6 files changed, 49 insertions, 10 deletions
diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h
index f422d00d857..6e738bd53fb 100644
--- a/source/blender/blenkernel/BKE_lattice.h
+++ b/source/blender/blenkernel/BKE_lattice.h
@@ -53,7 +53,7 @@ void calc_latt_deform(float *co, float weight);
void end_latt_deform(void);
int object_deform_mball(struct Object *ob);
void outside_lattice(struct Lattice *lt);
-void curve_deform_verts(struct Object *cuOb, struct Object *target, struct DerivedMesh *dm, float (*vertexCos)[3], int numVerts, char *vgroup);
+void curve_deform_verts(struct Object *cuOb, struct Object *target, struct DerivedMesh *dm, float (*vertexCos)[3], int numVerts, char *vgroup, short defaxis);
void lattice_deform_verts(struct Object *laOb, struct Object *target,
struct DerivedMesh *dm, float (*vertexCos)[3],
int numVerts, char *vgroup);
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index fe28d0f3150..3d8fd7d1311 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -514,14 +514,14 @@ static void calc_curve_deform(Object *par, float *co, short axis, CurveDeform *c
float fac, loc[4], dir[3], *quat, q[4], mat[3][3], cent[3];
short upflag, index;
- if(axis==OB_POSX || axis==OB_NEGX) {
+ if(axis==MOD_CURVE_POSX || axis==MOD_CURVE_NEGX) {
upflag= OB_POSZ;
cent[0]= 0.0;
cent[1]= co[1];
cent[2]= co[2];
index= 0;
}
- else if(axis==OB_POSY || axis==OB_NEGY) {
+ else if(axis==MOD_CURVE_POSY || axis==MOD_CURVE_NEGY) {
upflag= OB_POSZ;
cent[0]= co[0];
cent[1]= 0.0;
@@ -548,7 +548,7 @@ static void calc_curve_deform(Object *par, float *co, short axis, CurveDeform *c
if( where_on_path_deform(par, fac, loc, dir)) { /* returns OK */
- quat= vectoquat(dir, axis, upflag);
+ quat= vectoquat(dir, axis-1, upflag); /* -1 for compatibility with old track defines */
/* the tilt */
if(loc[3]!=0.0) {
@@ -572,7 +572,7 @@ static void calc_curve_deform(Object *par, float *co, short axis, CurveDeform *c
}
-void curve_deform_verts(Object *cuOb, Object *target, DerivedMesh *dm, float (*vertexCos)[3], int numVerts, char *vgroup)
+void curve_deform_verts(Object *cuOb, Object *target, DerivedMesh *dm, float (*vertexCos)[3], int numVerts, char *vgroup, short defaxis)
{
Curve *cu = cuOb->data;
int a, flag = cu->flag;
@@ -633,7 +633,7 @@ void curve_deform_verts(Object *cuOb, Object *target, DerivedMesh *dm, float (*v
for(j = 0; j < dvert->totweight; j++) {
if(dvert->dw[j].def_nr == index) {
VECCOPY(vec, vertexCos[a]);
- calc_curve_deform(cuOb, vec, target->trackflag, &cd);
+ calc_curve_deform(cuOb, vec, defaxis, &cd);
VecLerpf(vertexCos[a], vertexCos[a], vec,
dvert->dw[j].weight);
Mat4MulVecfl(cd.objectspace, vertexCos[a]);
@@ -651,7 +651,7 @@ void curve_deform_verts(Object *cuOb, Object *target, DerivedMesh *dm, float (*v
}
for(a = 0; a < numVerts; a++) {
- calc_curve_deform(cuOb, vertexCos[a], target->trackflag, &cd);
+ calc_curve_deform(cuOb, vertexCos[a], defaxis, &cd);
Mat4MulVecfl(cd.objectspace, vertexCos[a]);
}
}
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index fe457689c8f..bb4d46011a0 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -173,11 +173,19 @@ static int noneModifier_isDisabled(ModifierData *md)
/* Curve */
+static void curveModifier_initData(ModifierData *md)
+{
+ CurveModifierData *cmd = (CurveModifierData*) md;
+
+ cmd->defaxis = MOD_CURVE_POSX;
+}
+
static void curveModifier_copyData(ModifierData *md, ModifierData *target)
{
CurveModifierData *cmd = (CurveModifierData*) md;
CurveModifierData *tcmd = (CurveModifierData*) target;
+ tcmd->defaxis = cmd->defaxis;
tcmd->object = cmd->object;
strncpy(tcmd->name, cmd->name, 32);
}
@@ -220,7 +228,7 @@ static void curveModifier_deformVerts(
CurveModifierData *cmd = (CurveModifierData*) md;
curve_deform_verts(cmd->object, ob, derivedData, vertexCos, numVerts,
- cmd->name);
+ cmd->name, cmd->defaxis);
}
static void curveModifier_deformVertsEM(
@@ -3418,6 +3426,7 @@ ModifierTypeInfo *modifierType_getInfo(ModifierType type)
mti->type = eModifierTypeType_OnlyDeform;
mti->flags = eModifierTypeFlag_AcceptsCVs
| eModifierTypeFlag_SupportsEditmode;
+ mti->initData = curveModifier_initData;
mti->copyData = curveModifier_copyData;
mti->isDisabled = curveModifier_isDisabled;
mti->foreachObjectLink = curveModifier_foreachObjectLink;
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 7eea82917ca..e66a888aa47 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -5639,6 +5639,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
for(ob = main->object.first; ob; ob= ob->id.next) {
+ ModifierData *md;
ListBase *list;
list = &ob->constraints;
@@ -5679,12 +5680,24 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
}
}
+
+ /* copy old object level track settings to curve modifers */
+ for (md=ob->modifiers.first; md; md=md->next) {
+ if (md->type==eModifierType_Curve) {
+ CurveModifierData *cmd = (CurveModifierData*) md;
+
+ if (cmd->defaxis == 0) cmd->defaxis = ob->trackflag+1;
+ }
+ }
+
}
for(ma = main->mat.first; ma; ma= ma->id.next) {
if(ma->shad_alpha==0.0f)
ma->shad_alpha= 1.0f;
}
+
+
}
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index dee183ec353..65b694961bf 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -75,8 +75,18 @@ typedef struct CurveModifierData {
struct Object *object;
char name[32]; /* optional vertexgroup name */
+ short defaxis; /* axis along which curve deforms */
+ char pad[6];
} CurveModifierData;
+/* CurveModifierData->defaxis */
+#define MOD_CURVE_POSX 1
+#define MOD_CURVE_POSY 2
+#define MOD_CURVE_POSZ 3
+#define MOD_CURVE_NEGX 4
+#define MOD_CURVE_NEGY 5
+#define MOD_CURVE_NEGZ 6
+
typedef struct BuildModifierData {
ModifierData modifier;
diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c
index d3169168305..ce6730454be 100644
--- a/source/blender/src/buttons_editing.c
+++ b/source/blender/src/buttons_editing.c
@@ -1232,7 +1232,7 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
int isVirtual = md->mode&eModifierMode_Virtual;
int x = *xco, y = *yco, color = md->error?TH_REDALERT:TH_BUT_NEUTRAL;
int editing = (G.obedit==ob);
- short height=26, width = 295, buttonWidth = width-120-10;
+ short height=26, width = 295, buttonWidth = width-120-10;
char str[128];
/* rounded header */
@@ -1319,7 +1319,7 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
} else if (md->type==eModifierType_Lattice) {
height = 48;
} else if (md->type==eModifierType_Curve) {
- height = 48;
+ height = 72;
} else if (md->type==eModifierType_Build) {
height = 86;
} else if (md->type==eModifierType_Mirror) {
@@ -1398,6 +1398,13 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
uiDefIDPoinBut(block, modifier_testCurveObj, ID_OB, B_CHANGEDEP, "Ob: ", lx, (cy-=19), buttonWidth,19, &cmd->object, "Curve object to deform with");
but=uiDefBut(block, TEX, B_MODIFIER_RECALC, "VGroup: ", lx, (cy-=19), buttonWidth,19, &cmd->name, 0.0, 31.0, 0, 0, "Vertex Group name");
uiButSetCompleteFunc(but, autocomplete_vgroup, (void *)ob);
+
+ uiDefButS(block, ROW,B_MODIFIER_RECALC,"X", lx, (cy-=19), 19,19, &cmd->defaxis, 12.0, MOD_CURVE_POSX, 0, 0, "The axis that the curve deforms along");
+ uiDefButS(block, ROW,B_MODIFIER_RECALC,"Y", (lx+buttonWidth/6), cy, 19,19, &cmd->defaxis, 12.0, MOD_CURVE_POSY, 0, 0, "The axis that the curve deforms along");
+ uiDefButS(block, ROW,B_MODIFIER_RECALC,"Z", (lx+2*buttonWidth/6), cy, 19,19, &cmd->defaxis, 12.0, MOD_CURVE_POSZ, 0, 0, "The axis that the curve deforms along");
+ uiDefButS(block, ROW,B_MODIFIER_RECALC,"-X", (lx+3*buttonWidth/6), cy, 24,19, &cmd->defaxis, 12.0, MOD_CURVE_NEGX, 0, 0, "The axis that the curve deforms along");
+ uiDefButS(block, ROW,B_MODIFIER_RECALC,"-Y", (lx+4*buttonWidth/6), cy, 24,19, &cmd->defaxis, 12.0, MOD_CURVE_NEGY, 0, 0, "The axis that the curve deforms along");
+ uiDefButS(block, ROW,B_MODIFIER_RECALC,"-Z", (lx+buttonWidth-buttonWidth/6), cy, 24,19, &cmd->defaxis, 12.0, MOD_CURVE_NEGZ, 0, 0, "The axis that the curve deforms along");
} else if (md->type==eModifierType_Build) {
BuildModifierData *bmd = (BuildModifierData*) md;
uiDefButF(block, NUM, B_MODIFIER_RECALC, "Start:", lx, (cy-=19), buttonWidth,19, &bmd->start, 1.0, MAXFRAMEF, 100, 0, "Specify the start frame of the effect");