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:
authorTon Roosendaal <ton@blender.org>2004-09-28 20:18:22 +0400
committerTon Roosendaal <ton@blender.org>2004-09-28 20:18:22 +0400
commit5ac0d4fd26e9b670d83b8e9431707f9260c66bc6 (patch)
tree928cc78886d864577dcf3279ad7d400621797edd /source/blender
parentfc0c3a084dd20fd350ba4fe2c9e5f4d3889839f6 (diff)
Cleaned the apply deform code in Blender. Now also using the modifier code.
Right now, it works for Meshes (all deformers including Curve) and for Curve/Surfaces (only hooks). More follows.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/BKE_lattice.h1
-rw-r--r--source/blender/blenkernel/intern/deform.c15
-rw-r--r--source/blender/blenkernel/intern/lattice.c4
-rw-r--r--source/blender/include/BIF_editdeform.h2
-rw-r--r--source/blender/include/BIF_editlattice.h1
-rw-r--r--source/blender/src/editdeform.c33
-rw-r--r--source/blender/src/editlattice.c27
-rw-r--r--source/blender/src/editobject.c14
-rw-r--r--source/blender/src/toolbox.c4
9 files changed, 56 insertions, 45 deletions
diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h
index a9a3ee2d6f9..9186850e583 100644
--- a/source/blender/blenkernel/BKE_lattice.h
+++ b/source/blender/blenkernel/BKE_lattice.h
@@ -51,7 +51,6 @@ void init_latt_deform(struct Object *oblatt, struct Object *ob);
void calc_latt_deform(float *co);
void end_latt_deform(void);
int object_deform(struct Object *ob);
-int object_apply_deform(struct Object *ob);
struct BPoint *latt_bp(struct Lattice *lt, int u, int v, int w);
void outside_lattice(struct Lattice *lt);
diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c
index 290538013eb..8149d4540d8 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -199,7 +199,7 @@ void hook_object_deform(Object *ob, int index, float *vec)
/* modifiers: hooks, deform, softbody
- mode=='s' is start, 'e' end
+ mode=='s' is start, 'e' is end , 'a' is apply
*/
int mesh_modifier(Object *ob, char mode)
@@ -258,13 +258,17 @@ int mesh_modifier(Object *ob, char mode)
}
}
- else { // end
+ else if(mode=='e') { // end
if(mvert) {
- MEM_freeN(me->mvert);
+ if(me->mvert) MEM_freeN(me->mvert);
me->mvert= mvert;
mvert= NULL;
}
}
+ else if(mode=='a') { // apply
+ if(mvert) MEM_freeN(mvert);
+ mvert= NULL;
+ }
return done;
}
@@ -327,11 +331,14 @@ int curve_modifier(Object *ob, char mode)
}
}
}
- else {
+ else if(mode=='e') {
/* paste */
freeNurblist(&cu->nurb);
cu->nurb= nurb;
}
+ else if(mode=='a') {
+ freeNurblist(&nurb);
+ }
return done;
}
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index 0516db04a63..074bd8f561b 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -663,10 +663,6 @@ int object_deform(Object *ob)
{
return _object_deform(ob, 0);
}
-int object_apply_deform(Object *ob)
-{
- return _object_deform(ob, 1);
-}
BPoint *latt_bp(Lattice *lt, int u, int v, int w)
diff --git a/source/blender/include/BIF_editdeform.h b/source/blender/include/BIF_editdeform.h
index c45bdbccd24..3720e8e3d8a 100644
--- a/source/blender/include/BIF_editdeform.h
+++ b/source/blender/include/BIF_editdeform.h
@@ -61,5 +61,7 @@ void remove_vert_defgroup (struct Object *ob, struct bDeformGroup *dg,
int vertnum);
void create_dverts(Mesh *me);
+extern void object_apply_deform(struct Object *ob);
+
#endif
diff --git a/source/blender/include/BIF_editlattice.h b/source/blender/include/BIF_editlattice.h
index 738eb14847c..c882013576d 100644
--- a/source/blender/include/BIF_editlattice.h
+++ b/source/blender/include/BIF_editlattice.h
@@ -33,7 +33,6 @@
#ifndef BIF_EDITLATTICE_H
#define BIF_EDITLATTICE_H
-void apply_lattice(void);
void free_editLatt(void);
void make_editLatt(void);
void load_editLatt(void);
diff --git a/source/blender/src/editdeform.c b/source/blender/src/editdeform.c
index dfdfdf943cb..c42ea250f6d 100644
--- a/source/blender/src/editdeform.c
+++ b/source/blender/src/editdeform.c
@@ -29,12 +29,14 @@
*
* ***** END GPL/BL DUAL LICENSE BLOCK *****
* Creator-specific support for vertex deformation groups
+ * Added: apply deform function (ton)
*/
#include <string.h>
#include "MEM_guardedalloc.h"
+#include "DNA_curve_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
@@ -44,6 +46,7 @@
#include "BKE_global.h"
#include "BKE_deform.h"
+#include "BKE_displist.h"
#include "BKE_mesh.h"
#include "BIF_editdeform.h"
@@ -645,3 +648,33 @@ void unique_vertexgroup_name (bDeformGroup *dg, Object *ob)
}
}
}
+
+/* ******************* other deform edit stuff ********** */
+
+void object_apply_deform(Object *ob)
+{
+ char *err= NULL;
+
+ if(ob->type==OB_MESH) {
+ Mesh *me= ob->data;
+ if(me->id.us>1) {
+ err= "Can't apply deformation to Mesh with other users";
+ }
+ mesh_modifier(ob, 's'); // start
+ mesh_modifier(ob, 'a'); // apply and end
+ freedisplist(&ob->disp);
+ }
+ else if (ob->type==OB_CURVE || ob->type==OB_SURF) {
+ Curve *cu= ob->data;
+ if(cu->id.us>1) {
+ err= "Can't apply deformation to Curve with other users";
+ }
+ curve_modifier(ob, 's'); // start
+ curve_modifier(ob, 'a'); // apply and end
+ freedisplist(&ob->disp);
+ }
+
+ if(err) error(err);
+
+}
+
diff --git a/source/blender/src/editlattice.c b/source/blender/src/editlattice.c
index 8aebfdfedc5..18bed249da4 100644
--- a/source/blender/src/editlattice.c
+++ b/source/blender/src/editlattice.c
@@ -76,35 +76,8 @@
#include "BKE_armature.h"
-void apply_lattice(void)
-{
- Base *base;
- Object *par;
-
- if(okee("Apply lattice deformation")==0) return;
-
- base= FIRSTBASE;
- while(base) {
- if TESTBASELIB(base) {
- if( (par= base->object->parent) ) {
- if(par->type==OB_LATTICE) {
- object_apply_deform(base->object);
-
- base->object->parent= 0;
- }
- }
- }
- base= base->next;
- }
-
- allqueue(REDRAWVIEW3D, 0);
-}
-
/* ***************************** */
-
-
-
void free_editLatt(void)
{
if(editLatt) {
diff --git a/source/blender/src/editobject.c b/source/blender/src/editobject.c
index 27c562b3aa9..6b58e260e2d 100644
--- a/source/blender/src/editobject.c
+++ b/source/blender/src/editobject.c
@@ -812,9 +812,7 @@ void clear_parent(void)
}
if(par) {
- if(par->type==OB_LATTICE) makeDispList(base->object);
- if(par->type==OB_IKA) makeDispList(base->object);
- if(par->type==OB_ARMATURE) makeDispList(base->object);
+ makeDispList(base->object); // just always..., checks are not available well (ton)
}
}
base= base->next;
@@ -2865,9 +2863,13 @@ void apply_object()
if(ob==0) return;
if(ob->transflag & OB_DUPLI) make_duplilist_real();
- else if(ob->parent && ob->parent->type==OB_LATTICE) apply_lattice();
-
- return;
+ else {
+ if(okee("Apply deformation")==0) return;
+ object_apply_deform(ob);
+ allqueue(REDRAWVIEW3D, 0);
+
+ return;
+ }
}
if(okee("Apply size and rotation")==0) return;
diff --git a/source/blender/src/toolbox.c b/source/blender/src/toolbox.c
index 646c1d5f431..bfa41163934 100644
--- a/source/blender/src/toolbox.c
+++ b/source/blender/src/toolbox.c
@@ -82,6 +82,7 @@
#include "BIF_toolbox.h"
#include "BIF_mywindow.h"
#include "BIF_editarmature.h"
+#include "BIF_editdeform.h"
#include "BIF_editfont.h"
#include "BIF_editmesh.h"
#include "BIF_editseq.h"
@@ -1943,8 +1944,7 @@ static void tb_do_transform_clearapply(void *arg, int event)
apply_object();
break;
case 4: /* apply deformation */
- if (ob->parent && ob->parent->type==OB_LATTICE) apply_lattice();
- else error("The active object is not the child of a lattice");
+ object_apply_deform(ob);
break;
case 5: /* make duplicates real */
if (ob->transflag & OB_DUPLI) make_duplilist_real();