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>2009-01-02 22:10:35 +0300
committerTon Roosendaal <ton@blender.org>2009-01-02 22:10:35 +0300
commita6721c60d9bc0897e3ce0dc87264fbc705284397 (patch)
tree12dd77160bcfaa4b37e85a5e8ed29496bb6c0705 /source/blender
parent16ca4b572e07aa0f83158c187a7c64b27675d4c9 (diff)
2.5
From the anti-globalization department: G.obedit terminated! Wherever possible, use CTX_data_edit_object(C) to get this now. It's stored in scene now, and the screen context has it defined.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/BKE_DerivedMesh.h9
-rw-r--r--source/blender/blenkernel/BKE_displist.h2
-rw-r--r--source/blender/blenkernel/BKE_font.h2
-rw-r--r--source/blender/blenkernel/BKE_global.h1
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c111
-rw-r--r--source/blender/blenkernel/intern/anim.c46
-rw-r--r--source/blender/blenkernel/intern/armature.c7
-rw-r--r--source/blender/blenkernel/intern/blender.c5
-rw-r--r--source/blender/blenkernel/intern/curve.c4
-rw-r--r--source/blender/blenkernel/intern/depsgraph.c6
-rw-r--r--source/blender/blenkernel/intern/displist.c52
-rw-r--r--source/blender/blenkernel/intern/exotic.c201
-rw-r--r--source/blender/blenkernel/intern/font.c16
-rw-r--r--source/blender/blenkernel/intern/lattice.c22
-rw-r--r--source/blender/blenkernel/intern/material.c9
-rw-r--r--source/blender/blenkernel/intern/mball.c27
-rw-r--r--source/blender/blenkernel/intern/modifier.c7
-rw-r--r--source/blender/blenkernel/intern/multires.c2
-rw-r--r--source/blender/blenkernel/intern/object.c14
-rw-r--r--source/blender/blenkernel/intern/particle_system.c4
-rw-r--r--source/blender/blenkernel/intern/shrinkwrap.c9
-rw-r--r--source/blender/blenlib/BLI_editVert.h2
-rw-r--r--source/blender/blenloader/intern/readfile.c22
-rw-r--r--source/blender/blenloader/intern/readfile.h2
-rw-r--r--source/blender/editors/mesh/editmesh.c83
-rw-r--r--source/blender/editors/mesh/editmesh_add.c94
-rw-r--r--source/blender/editors/mesh/editmesh_lib.c24
-rw-r--r--source/blender/editors/mesh/editmesh_loop.c32
-rw-r--r--source/blender/editors/mesh/editmesh_mods.c260
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c132
-rw-r--r--source/blender/editors/mesh/mesh_intern.h8
-rw-r--r--source/blender/editors/mesh/meshtools.c12
-rw-r--r--source/blender/editors/object/object_edit.c198
-rw-r--r--source/blender/editors/space_outliner/outliner.c36
-rw-r--r--source/blender/editors/space_view3d/drawarmature.c4
-rw-r--r--source/blender/editors/space_view3d/drawmesh.c7
-rw-r--r--source/blender/editors/space_view3d/drawobject.c122
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c4
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c23
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c23
-rw-r--r--source/blender/editors/space_view3d/view3d_header.c7
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c39
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c14
-rw-r--r--source/blender/editors/transform/transform.c18
-rw-r--r--source/blender/editors/transform/transform_constraints.c8
-rw-r--r--source/blender/editors/transform/transform_conversions.c8
-rw-r--r--source/blender/editors/transform/transform_generics.c38
-rw-r--r--source/blender/editors/transform/transform_manipulator.c26
-rw-r--r--source/blender/editors/transform/transform_orientations.c19
-rw-r--r--source/blender/editors/transform/transform_snap.c2
-rw-r--r--source/blender/editors/util/editmode_undo.c19
-rw-r--r--source/blender/editors/util/undo.c27
-rw-r--r--source/blender/makesdna/DNA_armature_types.h2
-rw-r--r--source/blender/makesdna/DNA_curve_types.h4
-rw-r--r--source/blender/makesdna/DNA_customdata_types.h4
-rw-r--r--source/blender/makesdna/DNA_lattice_types.h2
-rw-r--r--source/blender/makesdna/DNA_meta_types.h1
-rw-r--r--source/blender/radiosity/intern/source/radpreprocess.c5
-rw-r--r--source/blender/render/intern/source/convertblender.c2
-rw-r--r--source/blender/windowmanager/intern/wm_files.c3
60 files changed, 792 insertions, 1100 deletions
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index 661686cf2a0..dc932af6518 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -443,14 +443,15 @@ DerivedMesh *mesh_create_derived_no_deform_render(struct Object *ob,
float (*vertCos)[3],
CustomDataMask dataMask);
-DerivedMesh *editmesh_get_derived_base(struct EditMesh *em);
-DerivedMesh *editmesh_get_derived_cage(struct EditMesh *em, CustomDataMask dataMask);
-DerivedMesh *editmesh_get_derived_cage_and_final(struct EditMesh *em, DerivedMesh **final_r,
+DerivedMesh *editmesh_get_derived_base(struct Object *, struct EditMesh *em);
+DerivedMesh *editmesh_get_derived_cage(struct Object *, struct EditMesh *em, CustomDataMask dataMask);
+DerivedMesh *editmesh_get_derived_cage_and_final(struct Object *, struct EditMesh *em, DerivedMesh **final_r,
CustomDataMask dataMask);
+void makeDerivedMesh(struct Object *ob, struct EditMesh *em, CustomDataMask dataMask);
/* returns an array of deform matrices for crazyspace correction, and the
number of modifiers left */
-int editmesh_get_first_deform_matrices(struct EditMesh *em, float (**deformmats)[3][3],
+int editmesh_get_first_deform_matrices(struct Object *, struct EditMesh *em, float (**deformmats)[3][3],
float (**deformcos)[3]);
void weight_to_rgb(float input, float *fr, float *fg, float *fb);
diff --git a/source/blender/blenkernel/BKE_displist.h b/source/blender/blenkernel/BKE_displist.h
index 6c77ac83e6b..64a451f3b19 100644
--- a/source/blender/blenkernel/BKE_displist.h
+++ b/source/blender/blenkernel/BKE_displist.h
@@ -85,7 +85,7 @@ extern void addnormalsDispList(struct Object *ob, struct ListBase *lb);
extern void count_displist(struct ListBase *lb, int *totvert, int *totface);
extern void freedisplist(struct ListBase *lb);
extern int displist_has_faces(struct ListBase *lb);
-extern void makeDerivedMesh(struct Object *ob, struct EditMesh *em, CustomDataMask dataMask);
+
extern void makeDispListSurf(struct Object *ob, struct ListBase *dispbase, int forRender);
extern void makeDispListCurveTypes(struct Object *ob, int forOrco);
extern void makeDispListMBall(struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_font.h b/source/blender/blenkernel/BKE_font.h
index 3f6b295b9ba..caeddf60638 100644
--- a/source/blender/blenkernel/BKE_font.h
+++ b/source/blender/blenkernel/BKE_font.h
@@ -67,7 +67,7 @@ struct chartrans *text_to_curve(struct Object *ob, int mode);
int style_to_sel(int style, int toggle);
int mat_to_sel(void);
-int getselection(int *start, int *end);
+int getselection(struct Object *ob, int *start, int *end);
void chtoutf8(unsigned long c, char *o);
void wcs2utf8s(char *dst, wchar_t *src);
diff --git a/source/blender/blenkernel/BKE_global.h b/source/blender/blenkernel/BKE_global.h
index 4b04a3c45d5..ea0c021652a 100644
--- a/source/blender/blenkernel/BKE_global.h
+++ b/source/blender/blenkernel/BKE_global.h
@@ -68,7 +68,6 @@ typedef struct Global {
struct Main *main;
struct Scene *scene; /* denk aan file.c */
struct bScreen *curscreen;
- struct Object *obedit;
char editModeTitleExtra[64];
/* fonts, allocated global data */
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 1636859d29b..9c8e88aceb5 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -2396,11 +2396,10 @@ static int editmesh_modifier_is_enabled(ModifierData *md, DerivedMesh *dm)
return 1;
}
-static void editmesh_calc_modifiers(EditMesh *em, DerivedMesh **cage_r,
+static void editmesh_calc_modifiers(Object *ob, EditMesh *em, DerivedMesh **cage_r,
DerivedMesh **final_r,
CustomDataMask dataMask)
{
- Object *ob = G.obedit;
ModifierData *md;
float (*deformedVerts)[3] = NULL;
CustomDataMask mask;
@@ -2694,58 +2693,59 @@ static void mesh_build_data(Object *ob, CustomDataMask dataMask)
{
Mesh *me = ob->data;
float min[3], max[3];
-
+ int needMapping= 0; //
+
clear_mesh_caches(ob);
- if(ob!=G.obedit) {
- Object *obact = G.scene->basact?G.scene->basact->object:NULL;
- int editing = (FACESEL_PAINT_TEST)|(G.f & G_PARTICLEEDIT);
- int needMapping = editing && (ob==obact);
-
- if( (G.f & G_WEIGHTPAINT) && ob==obact ) {
- MCol *wpcol = (MCol*)calc_weightpaint_colors(ob);
- int layernum = CustomData_number_of_layers(&me->fdata, CD_MCOL);
- int prevactive = CustomData_get_active_layer(&me->fdata, CD_MCOL);
- int prevrender = CustomData_get_render_layer(&me->fdata, CD_MCOL);
-
- /* ugly hack here, we temporarily add a new active mcol layer with
- weightpaint colors in it, that is then duplicated in CDDM_from_mesh */
- CustomData_add_layer(&me->fdata, CD_MCOL, CD_ASSIGN, wpcol, me->totface);
- CustomData_set_layer_active(&me->fdata, CD_MCOL, layernum);
- CustomData_set_layer_render(&me->fdata, CD_MCOL, layernum);
-
- mesh_calc_modifiers(ob, NULL, &ob->derivedDeform,
- &ob->derivedFinal, 0, 1,
- needMapping, dataMask, -1);
-
- CustomData_free_layer_active(&me->fdata, CD_MCOL, me->totface);
- CustomData_set_layer_active(&me->fdata, CD_MCOL, prevactive);
- CustomData_set_layer_render(&me->fdata, CD_MCOL, prevrender);
- } else {
- mesh_calc_modifiers(ob, NULL, &ob->derivedDeform,
- &ob->derivedFinal, G.rendering, 1,
- needMapping, dataMask, -1);
- }
+// XXX Object *obact = scene->basact?scene->basact->object:NULL;
+// int editing = (FACESEL_PAINT_TEST)|(G.f & G_PARTICLEEDIT);
+// int needMapping = editing && (ob==obact);
+// if( (G.f & G_WEIGHTPAINT) && ob==obact ) {
+ if(dataMask & CD_MASK_WEIGHTPAINT) {
+ MCol *wpcol = (MCol*)calc_weightpaint_colors(ob);
+ int layernum = CustomData_number_of_layers(&me->fdata, CD_MCOL);
+ int prevactive = CustomData_get_active_layer(&me->fdata, CD_MCOL);
+ int prevrender = CustomData_get_render_layer(&me->fdata, CD_MCOL);
+
+ /* ugly hack here, we temporarily add a new active mcol layer with
+ weightpaint colors in it, that is then duplicated in CDDM_from_mesh */
+ CustomData_add_layer(&me->fdata, CD_MCOL, CD_ASSIGN, wpcol, me->totface);
+ CustomData_set_layer_active(&me->fdata, CD_MCOL, layernum);
+ CustomData_set_layer_render(&me->fdata, CD_MCOL, layernum);
+
+ mesh_calc_modifiers(ob, NULL, &ob->derivedDeform,
+ &ob->derivedFinal, 0, 1,
+ needMapping, dataMask, -1);
+
+ CustomData_free_layer_active(&me->fdata, CD_MCOL, me->totface);
+ CustomData_set_layer_active(&me->fdata, CD_MCOL, prevactive);
+ CustomData_set_layer_render(&me->fdata, CD_MCOL, prevrender);
+ }
+ else {
+ mesh_calc_modifiers(ob, NULL, &ob->derivedDeform,
+ &ob->derivedFinal, G.rendering, 1,
+ needMapping, dataMask, -1);
+ }
+
+ INIT_MINMAX(min, max);
- INIT_MINMAX(min, max);
+ ob->derivedFinal->getMinMax(ob->derivedFinal, min, max);
- ob->derivedFinal->getMinMax(ob->derivedFinal, min, max);
+ if(!ob->bb)
+ ob->bb= MEM_callocN(sizeof(BoundBox), "bb");
+ boundbox_set_from_min_max(ob->bb, min, max);
- if(!ob->bb)
- ob->bb= MEM_callocN(sizeof(BoundBox), "bb");
- boundbox_set_from_min_max(ob->bb, min, max);
+ ob->derivedFinal->needsFree = 0;
+ ob->derivedDeform->needsFree = 0;
+ ob->lastDataMask = dataMask;
- ob->derivedFinal->needsFree = 0;
- ob->derivedDeform->needsFree = 0;
- ob->lastDataMask = dataMask;
- }
}
-static void editmesh_build_data(EditMesh *em, CustomDataMask dataMask)
+static void editmesh_build_data(Object *obedit, EditMesh *em, CustomDataMask dataMask)
{
float min[3], max[3];
- clear_mesh_caches(G.obedit);
+ clear_mesh_caches(obedit);
if (em->derivedFinal) {
if (em->derivedFinal!=em->derivedCage) {
@@ -2760,16 +2760,16 @@ static void editmesh_build_data(EditMesh *em, CustomDataMask dataMask)
em->derivedCage = NULL;
}
- editmesh_calc_modifiers(em, &em->derivedCage, &em->derivedFinal, dataMask);
+ editmesh_calc_modifiers(obedit, em, &em->derivedCage, &em->derivedFinal, dataMask);
em->lastDataMask = dataMask;
INIT_MINMAX(min, max);
em->derivedFinal->getMinMax(em->derivedFinal, min, max);
- if(!G.obedit->bb)
- G.obedit->bb= MEM_callocN(sizeof(BoundBox), "bb");
- boundbox_set_from_min_max(G.obedit->bb, min, max);
+ if(!obedit->bb)
+ obedit->bb= MEM_callocN(sizeof(BoundBox), "bb");
+ boundbox_set_from_min_max(obedit->bb, min, max);
em->derivedFinal->needsFree = 0;
em->derivedCage->needsFree = 0;
@@ -2778,7 +2778,7 @@ static void editmesh_build_data(EditMesh *em, CustomDataMask dataMask)
void makeDerivedMesh(Object *ob, EditMesh *em, CustomDataMask dataMask)
{
if (em) {
- editmesh_build_data(em, dataMask);
+ editmesh_build_data(ob, em, dataMask);
} else {
mesh_build_data(ob, dataMask);
}
@@ -2950,7 +2950,7 @@ DerivedMesh *mesh_create_derived_no_deform_render(Object *ob,
/***/
-DerivedMesh *editmesh_get_derived_cage_and_final(EditMesh *em, DerivedMesh **final_r,
+DerivedMesh *editmesh_get_derived_cage_and_final(Object *obedit, EditMesh *em, DerivedMesh **final_r,
CustomDataMask dataMask)
{
/* if there's no derived mesh or the last data mask used doesn't include
@@ -2958,27 +2958,27 @@ DerivedMesh *editmesh_get_derived_cage_and_final(EditMesh *em, DerivedMesh **fin
*/
if(!em->derivedCage ||
(em->lastDataMask & dataMask) != dataMask)
- editmesh_build_data(em, dataMask);
+ editmesh_build_data(obedit, em, dataMask);
*final_r = em->derivedFinal;
return em->derivedCage;
}
-DerivedMesh *editmesh_get_derived_cage(EditMesh *em, CustomDataMask dataMask)
+DerivedMesh *editmesh_get_derived_cage(Object *obedit, EditMesh *em, CustomDataMask dataMask)
{
/* if there's no derived mesh or the last data mask used doesn't include
* the data we need, rebuild the derived mesh
*/
if(!em->derivedCage ||
(em->lastDataMask & dataMask) != dataMask)
- editmesh_build_data(em, dataMask);
+ editmesh_build_data(obedit, em, dataMask);
return em->derivedCage;
}
-DerivedMesh *editmesh_get_derived_base(EditMesh *em)
+DerivedMesh *editmesh_get_derived_base(Object *obedit, EditMesh *em)
{
- return getEditMeshDerivedMesh(em, G.obedit, NULL);
+ return getEditMeshDerivedMesh(em, obedit, NULL);
}
@@ -3040,9 +3040,8 @@ float *mesh_get_mapped_verts_nors(Object *ob)
/* ********* crazyspace *************** */
-int editmesh_get_first_deform_matrices(EditMesh *em, float (**deformmats)[3][3], float (**deformcos)[3])
+int editmesh_get_first_deform_matrices(Object *ob, EditMesh *em, float (**deformmats)[3][3], float (**deformcos)[3])
{
- Object *ob = G.obedit;
ModifierData *md;
DerivedMesh *dm;
int i, a, numleft = 0, numVerts = 0;
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c
index 953222960f2..bf88ad16bdf 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -72,7 +72,7 @@
#include <config.h>
#endif
-static void object_duplilist_recursive(ID *id, Object *ob, ListBase *duplilist, float par_space_mat[][4], int level, int animated);
+static void object_duplilist_recursive(ID *id, Object *ob, Object *obedit, ListBase *duplilist, float par_space_mat[][4], int level, int animated);
void free_path(Path *path)
{
@@ -98,9 +98,10 @@ void calc_curvepath(Object *ob)
if(ob==NULL || ob->type != OB_CURVE) return;
cu= ob->data;
- //XXX if(ob==G.obedit) nu= editNurb.first;
- //XXX else
- nu= cu->nurb.first;
+ if(cu->editnurb)
+ nu= cu->editnurb->first;
+ else
+ nu= cu->nurb.first;
if(cu->path) free_path(cu->path);
cu->path= NULL;
@@ -298,7 +299,7 @@ static DupliObject *new_dupli_object(ListBase *lb, Object *ob, float mat[][4], i
return dob;
}
-static void group_duplilist(ListBase *lb, Object *ob, int level, int animated)
+static void group_duplilist(ListBase *lb, Object *ob, Object *obedit, int level, int animated)
{
DupliObject *dob;
Group *group;
@@ -334,7 +335,7 @@ static void group_duplilist(ListBase *lb, Object *ob, int level, int animated)
if(go->ob->transflag & OB_DUPLI) {
Mat4CpyMat4(dob->ob->obmat, dob->mat);
- object_duplilist_recursive((ID *)group, go->ob, lb, ob->obmat, level+1, animated);
+ object_duplilist_recursive((ID *)group, go->ob, obedit, lb, ob->obmat, level+1, animated);
Mat4CpyMat4(dob->ob->obmat, dob->omat);
}
}
@@ -386,7 +387,7 @@ struct vertexDupliData {
ListBase *lb;
float pmat[4][4];
float obmat[4][4]; /* Only used for dupliverts inside dupligroups, where the ob->obmat is modified */
- Object *ob, *par;
+ Object *ob, *par, *obedit;
float (*orco)[3];
};
@@ -426,12 +427,12 @@ static void vertex_dupli__mapFunc(void *userData, int index, float *co, float *n
float tmpmat[4][4];
Mat4CpyMat4(tmpmat, vdd->ob->obmat);
Mat4CpyMat4(vdd->ob->obmat, obmat); /* pretend we are really this mat */
- object_duplilist_recursive((ID *)vdd->id, vdd->ob, vdd->lb, obmat, vdd->level+1, vdd->animated);
+ object_duplilist_recursive((ID *)vdd->id, vdd->ob, vdd->obedit, vdd->lb, obmat, vdd->level+1, vdd->animated);
Mat4CpyMat4(vdd->ob->obmat, tmpmat);
}
}
-static void vertex_duplilist(ListBase *lb, ID *id, Object *par, float par_space_mat[][4], int level, int animated)
+static void vertex_duplilist(ListBase *lb, ID *id, Object *obedit, Object *par, float par_space_mat[][4], int level, int animated)
{
Object *ob, *ob_iter;
Mesh *me= par->data;
@@ -450,7 +451,7 @@ static void vertex_duplilist(ListBase *lb, ID *id, Object *par, float par_space_
if(level>MAX_DUPLI_RECUR) return;
if(me->edit_mesh)
- dm= editmesh_get_derived_cage(me->edit_mesh, CD_MASK_BAREMESH);
+ dm= editmesh_get_derived_cage(par, me->edit_mesh, CD_MASK_BAREMESH);
else
dm= mesh_get_derived_deform(par, CD_MASK_BAREMESH);
@@ -484,7 +485,7 @@ static void vertex_duplilist(ListBase *lb, ID *id, Object *par, float par_space_
oblay = ob_iter->lay;
}
- if (lay & oblay && G.obedit!=ob_iter) {
+ if (lay & oblay && obedit!=ob_iter) {
ob=ob_iter->parent;
while(ob) {
if(ob==par) {
@@ -505,13 +506,14 @@ static void vertex_duplilist(ListBase *lb, ID *id, Object *par, float par_space_
vdd.animated= animated;
vdd.lb= lb;
vdd.ob= ob;
+ vdd.obedit= obedit;
vdd.par= par;
Mat4CpyMat4(vdd.pmat, pmat);
/* mballs have a different dupli handling */
if(ob->type!=OB_MBALL) ob->flag |= OB_DONE; /* doesnt render */
- if(par==G.obedit) {
+ if(par==obedit) {
dm->foreachMappedVert(dm, vertex_dupli__mapFunc, (void*) &vdd);
}
else {
@@ -537,7 +539,7 @@ static void vertex_duplilist(ListBase *lb, ID *id, Object *par, float par_space_
dm->release(dm);
}
-static void face_duplilist(ListBase *lb, ID *id, Object *par, float par_space_mat[][4], int level, int animated)
+static void face_duplilist(ListBase *lb, ID *id, Object *obedit, Object *par, float par_space_mat[][4], int level, int animated)
{
Object *ob, *ob_iter;
Base *base = NULL;
@@ -562,7 +564,7 @@ static void face_duplilist(ListBase *lb, ID *id, Object *par, float par_space_ma
if(me->edit_mesh) {
int totvert;
- dm= editmesh_get_derived_cage(me->edit_mesh, CD_MASK_BAREMESH);
+ dm= editmesh_get_derived_cage(par, me->edit_mesh, CD_MASK_BAREMESH);
totface= dm->getNumFaces(dm);
mface= MEM_mallocN(sizeof(MFace)*totface, "mface temp");
@@ -611,7 +613,7 @@ static void face_duplilist(ListBase *lb, ID *id, Object *par, float par_space_ma
oblay = ob_iter->lay;
}
- if (lay & oblay && G.obedit!=ob_iter) {
+ if (lay & oblay && obedit!=ob_iter) {
ob=ob_iter->parent;
while(ob) {
if(ob==par) {
@@ -704,7 +706,7 @@ static void face_duplilist(ListBase *lb, ID *id, Object *par, float par_space_ma
float tmpmat[4][4];
Mat4CpyMat4(tmpmat, ob->obmat);
Mat4CpyMat4(ob->obmat, obmat); /* pretend we are really this mat */
- object_duplilist_recursive((ID *)id, ob, lb, ob->obmat, level+1, animated);
+ object_duplilist_recursive((ID *)id, ob, obedit, lb, ob->obmat, level+1, animated);
Mat4CpyMat4(ob->obmat, tmpmat);
}
}
@@ -718,7 +720,7 @@ static void face_duplilist(ListBase *lb, ID *id, Object *par, float par_space_ma
else go= go->next; /* group loop */
}
- if(par==G.obedit) {
+ if(par==obedit) {
MEM_freeN(mface);
MEM_freeN(mvert);
}
@@ -1020,7 +1022,7 @@ static void font_duplilist(ListBase *lb, Object *par, int level, int animated)
}
/* ***************************** */
-static void object_duplilist_recursive(ID *id, Object *ob, ListBase *duplilist, float par_space_mat[][4], int level, int animated)
+static void object_duplilist_recursive(ID *id, Object *ob, Object *obedit, ListBase *duplilist, float par_space_mat[][4], int level, int animated)
{
if((ob->transflag & OB_DUPLI)==0)
return;
@@ -1043,7 +1045,7 @@ static void object_duplilist_recursive(ID *id, Object *ob, ListBase *duplilist,
}
else if(ob->transflag & OB_DUPLIVERTS) {
if(ob->type==OB_MESH) {
- vertex_duplilist(duplilist, id, ob, par_space_mat, level+1, animated);
+ vertex_duplilist(duplilist, id, obedit, ob, par_space_mat, level+1, animated);
}
else if(ob->type==OB_FONT) {
if (GS(id->name)==ID_SCE) { /* TODO - support dupligroups */
@@ -1053,7 +1055,7 @@ static void object_duplilist_recursive(ID *id, Object *ob, ListBase *duplilist,
}
else if(ob->transflag & OB_DUPLIFACES) {
if(ob->type==OB_MESH)
- face_duplilist(duplilist, id, ob, par_space_mat, level+1, animated);
+ face_duplilist(duplilist, id, obedit, ob, par_space_mat, level+1, animated);
}
else if(ob->transflag & OB_DUPLIFRAMES) {
if (GS(id->name)==ID_SCE) { /* TODO - support dupligroups */
@@ -1062,7 +1064,7 @@ static void object_duplilist_recursive(ID *id, Object *ob, ListBase *duplilist,
} else if(ob->transflag & OB_DUPLIGROUP) {
DupliObject *dob;
- group_duplilist(duplilist, ob, level+1, animated); /* now recursive */
+ group_duplilist(duplilist, ob, obedit, level+1, animated); /* now recursive */
if (level==0) {
for(dob= duplilist->first; dob; dob= dob->next)
@@ -1078,7 +1080,7 @@ ListBase *object_duplilist(Scene *sce, Object *ob)
{
ListBase *duplilist= MEM_mallocN(sizeof(ListBase), "duplilist");
duplilist->first= duplilist->last= NULL;
- object_duplilist_recursive((ID *)sce, ob, duplilist, NULL, 0, 0);
+ object_duplilist_recursive((ID *)sce, ob, sce->obedit, duplilist, NULL, 0, 0);
return duplilist;
}
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index 0b5925a0b38..e7ae7997e9f 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -906,6 +906,7 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm,
int numVerts, int deformflag,
float (*prevCos)[3], const char *defgrp_name)
{
+ bArmature *arm= armOb->data;
bPoseChannel *pchan, **defnrToPC = NULL;
MDeformVert *dverts = NULL;
bDeformGroup *dg;
@@ -921,7 +922,7 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm,
int armature_def_nr = -1;
int totchan;
- if(armOb == G.obedit) return;
+ if(arm->edbo) return;
Mat4Invert(obinv, target->obmat);
Mat4CpyMat4(premat, target->obmat);
@@ -2280,8 +2281,8 @@ void where_is_pose (Object *ob)
if(ob->pose==NULL || (ob->pose->flag & POSE_RECALC))
armature_rebuild_pose(ob, arm);
- /* In restposition we read the data from the bones */
- if(ob==G.obedit || (arm->flag & ARM_RESTPOS)) {
+ /* In editmode or restposition we read the data from the bones */
+ if(arm->edbo || (arm->flag & ARM_RESTPOS)) {
for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
bone= pchan->bone;
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index 8adfe33dfe3..ef740038e57 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -222,17 +222,12 @@ static void clear_global(void)
fastshade_free_render(); /* lamps hang otherwise */
free_main(G.main); /* free all lib data */
- if (G.obedit) {
-// free_editText();
- }
// free_vertexpaint();
G.curscreen= NULL;
G.scene= NULL;
G.main= NULL;
- G.obedit= NULL;
-
G.f &= ~(G_WEIGHTPAINT + G_VERTEXPAINT + G_FACESELECT + G_PARTICLEEDIT);
}
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 7fa4f406c7b..0a58ae59386 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -1136,7 +1136,7 @@ void makebevelcurve(Object *ob, ListBase *disp)
disp->first = disp->last = NULL;
/* if a font object is being edited, then do nothing */
- if( ob == G.obedit && ob->type == OB_FONT ) return;
+// XXX if( ob == obedit && ob->type == OB_FONT ) return;
if(cu->bevobj && cu->bevobj!=ob) {
if(cu->bevobj->type==OB_CURVE) {
@@ -1529,7 +1529,7 @@ void makeBevelList(Object *ob)
/* STEP 1: MAKE POLYS */
BLI_freelistN(&(cu->bev));
- if(ob==G.obedit && ob->type!=OB_FONT) nu= editNurb.first;
+ if(cu->editnurb && ob->type!=OB_FONT) nu= cu->editnurb->first;
else nu= cu->nurb.first;
while(nu) {
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index f5deda9c3c9..e090a2e4cae 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -1764,7 +1764,7 @@ static void flush_update_node(DagNode *node, unsigned int layer, int curtime)
for(itA = node->child; itA; itA= itA->next) {
all_layer |= itA->lay;
/* the relationship is visible */
- if((itA->lay & layer) || (itA->node->ob == G.obedit)) {
+ if((itA->lay & layer)) { // XXX || (itA->node->ob == obedit)
if(itA->node->type==ID_OB) {
obc= itA->node->ob;
oldflag= obc->recalc;
@@ -1795,7 +1795,7 @@ static void flush_update_node(DagNode *node, unsigned int layer, int curtime)
}
}
/* even nicer, we can clear recalc flags... */
- if((all_layer & layer)==0 && (ob != G.obedit)) {
+ if((all_layer & layer)==0) { // XXX && (ob != obedit)) {
/* but existing displaylists or derivedmesh should be freed */
if(ob->recalc & OB_RECALC_DATA)
object_free_display(ob);
@@ -1809,7 +1809,7 @@ static void flush_update_node(DagNode *node, unsigned int layer, int curtime)
/* could merge this in with loop above...? (ton) */
for(itA = node->child; itA; itA= itA->next) {
/* the relationship is visible */
- if((itA->lay & layer) || (itA->node->ob == G.obedit)) {
+ if((itA->lay & layer)) { // XXX || (itA->node->ob == obedit)
if(itA->node->type==ID_OB) {
obc= itA->node->ob;
/* child moves */
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index 3a9e0eb8feb..52ec529b82a 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -662,7 +662,7 @@ void shadeDispList(Base *base)
init_fastshade_for_ob(re, ob, &need_orco, mat, imat);
- if ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT) {
+ if (ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT)) {
/* now we need the normals */
cu= ob->data;
@@ -985,7 +985,7 @@ void filldisplist(ListBase *dispbase, ListBase *to)
dl= dl->next;
}
- if(totvert && BLI_edgefill(0, (G.obedit && G.obedit->actcol)?(G.obedit->actcol-1):0)) {
+ if(totvert && BLI_edgefill(0, 0)) { // XXX (obedit && obedit->actcol)?(obedit->actcol-1):0)) {
/* count faces */
tot= 0;
@@ -1217,12 +1217,14 @@ static ModifierData *curve_get_tesselate_point(Object *ob, int forRender, int ed
return preTesselatePoint;
}
-void curve_calc_modifiers_pre(Object *ob, ListBase *nurb, int forRender, float (**originalVerts_r)[3], float (**deformedVerts_r)[3], int *numVerts_r)
+static void curve_calc_modifiers_pre(Object *ob, int forRender, float (**originalVerts_r)[3], float (**deformedVerts_r)[3], int *numVerts_r)
{
- int editmode = (!forRender && ob==G.obedit);
ModifierData *md = modifiers_getVirtualModifierList(ob);
- ModifierData *preTesselatePoint = curve_get_tesselate_point(ob, forRender, editmode);
+ ModifierData *preTesselatePoint;
+ Curve *cu= ob->data;
+ ListBase *nurb= cu->editnurb?cu->editnurb:&cu->nurb;
int numVerts = 0;
+ int editmode = (!forRender && cu->editnurb);
float (*originalVerts)[3] = NULL;
float (*deformedVerts)[3] = NULL;
int required_mode;
@@ -1230,9 +1232,11 @@ void curve_calc_modifiers_pre(Object *ob, ListBase *nurb, int forRender, float (
if(forRender) required_mode = eModifierMode_Render;
else required_mode = eModifierMode_Realtime;
+ preTesselatePoint = curve_get_tesselate_point(ob, forRender, editmode);
+
if(editmode) required_mode |= eModifierMode_Editmode;
- if(ob!=G.obedit && do_ob_key(ob)) {
+ if(cu->editnurb==NULL && do_ob_key(ob)) {
deformedVerts = curve_getVertexCos(ob->data, nurb, &numVerts);
originalVerts = MEM_dupallocN(deformedVerts);
}
@@ -1266,17 +1270,21 @@ void curve_calc_modifiers_pre(Object *ob, ListBase *nurb, int forRender, float (
*numVerts_r = numVerts;
}
-static void curve_calc_modifiers_post(Object *ob, ListBase *nurb, ListBase *dispbase, int forRender, float (*originalVerts)[3], float (*deformedVerts)[3])
+static void curve_calc_modifiers_post(Object *ob, ListBase *dispbase, int forRender, float (*originalVerts)[3], float (*deformedVerts)[3])
{
- int editmode = (!forRender && ob==G.obedit);
ModifierData *md = modifiers_getVirtualModifierList(ob);
- ModifierData *preTesselatePoint = curve_get_tesselate_point(ob, forRender, editmode);
+ ModifierData *preTesselatePoint;
+ Curve *cu= ob->data;
+ ListBase *nurb= cu->editnurb?cu->editnurb:&cu->nurb;
DispList *dl;
int required_mode;
+ int editmode = (!forRender && cu->editnurb);
if(forRender) required_mode = eModifierMode_Render;
else required_mode = eModifierMode_Realtime;
+ preTesselatePoint = curve_get_tesselate_point(ob, forRender, editmode);
+
if(editmode) required_mode |= eModifierMode_Editmode;
if (preTesselatePoint) {
@@ -1371,14 +1379,12 @@ void makeDispListSurf(Object *ob, ListBase *dispbase, int forRender)
float (*originalVerts)[3];
float (*deformedVerts)[3];
- if(!forRender && ob==G.obedit) {
- //XXX nubase= &editNurb;
- }
- else {
+ if(!forRender && cu->editnurb)
+ nubase= cu->editnurb;
+ else
nubase= &cu->nurb;
- }
- curve_calc_modifiers_pre(ob, nubase, forRender, &originalVerts, &deformedVerts, &numVerts);
+ curve_calc_modifiers_pre(ob, forRender, &originalVerts, &deformedVerts, &numVerts);
for (nu=nubase->first; nu; nu=nu->next) {
if(forRender || nu->hide==0) {
@@ -1432,7 +1438,7 @@ void makeDispListSurf(Object *ob, ListBase *dispbase, int forRender)
tex_space_curve(cu);
}
- curve_calc_modifiers_post(ob, nubase, dispbase, forRender, originalVerts, deformedVerts);
+ curve_calc_modifiers_post(ob, dispbase, forRender, originalVerts, deformedVerts);
}
void makeDispListCurveTypes(Object *ob, int forOrco)
@@ -1450,14 +1456,18 @@ void makeDispListCurveTypes(Object *ob, int forOrco)
if(ob->type==OB_SURF) {
makeDispListSurf(ob, dispbase, 0);
}
- else if ELEM(ob->type, OB_CURVE, OB_FONT) {
+ else if (ELEM(ob->type, OB_CURVE, OB_FONT)) {
ListBase dlbev;
+ ListBase *nubase;
float (*originalVerts)[3];
float (*deformedVerts)[3];
- //XXX int obedit= (G.obedit && G.obedit->data==ob->data && G.obedit->type==OB_CURVE);
- ListBase *nubase= &cu->nurb; //XXX ListBase *nubase = obedit?&editNurb:&cu->nurb;
int numVerts;
+ if(cu->editnurb)
+ nubase= cu->editnurb;
+ else
+ nubase= &cu->nurb;
+
BLI_freelistN(&(cu->bev));
if(cu->path) free_path(cu->path);
@@ -1465,7 +1475,7 @@ void makeDispListCurveTypes(Object *ob, int forOrco)
if(ob->type==OB_FONT) text_to_curve(ob, 0);
- if(!forOrco) curve_calc_modifiers_pre(ob, nubase, 0, &originalVerts, &deformedVerts, &numVerts);
+ if(!forOrco) curve_calc_modifiers_pre(ob, 0, &originalVerts, &deformedVerts, &numVerts);
makeBevelList(ob);
@@ -1593,7 +1603,7 @@ void makeDispListCurveTypes(Object *ob, int forOrco)
if(cu->flag & CU_PATH) calc_curvepath(ob);
- if(!forOrco) curve_calc_modifiers_post(ob, nubase, &cu->disp, 0, originalVerts, deformedVerts);
+ if(!forOrco) curve_calc_modifiers_post(ob, &cu->disp, 0, originalVerts, deformedVerts);
tex_space_curve(cu);
}
diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c
index 4fe862e5f52..911efda21bd 100644
--- a/source/blender/blenkernel/intern/exotic.c
+++ b/source/blender/blenkernel/intern/exotic.c
@@ -19,13 +19,14 @@
* 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):
* - Martin DeMello
* Added dxf_read_arc, dxf_read_ellipse and dxf_read_lwpolyline
* Copyright (C) 2004 by Etheract Software Labs
*
+ * - Blender Foundation
+ *
* ***** END GPL LICENSE BLOCK *****
*
* eigen videoscape formaat:
@@ -687,190 +688,6 @@ static void read_videoscape_mesh(char *str)
//XXX waitcursor(1);
}
-static void read_radiogour(char *str)
-{
- Object *ob;
- Mesh *me;
- MVert *mvert;
- MFace *mface;
- FILE *fp;
- float *vertdata, *vd, min[3], max[3], cent[3], ftemp;
- unsigned int *colv, *colf, *colvertdata;
- int itemp, a, b, verts, tottria=0, totquad=0, totedge=0, poly, nr0, nr, first;
- int end;
- char s[50];
-
- fp= fopen(str, "rb");
- if(fp==NULL) {
- //XXX error("Can't read file");
- return;
- }
-
- fscanf(fp, "%40s", s);
-
- fscanf(fp, "%d\n", &verts);
- if(verts<=0) {
- fclose(fp);
- //XXX error("Read error");
- return;
- }
-
- if(verts>MESH_MAX_VERTS) {
- //XXX error("too many vertices");
- fclose(fp);
- return;
- }
-
- INIT_MINMAX(min, max);
- vd= vertdata= MEM_mallocN(sizeof(float)*3*verts, "videoscapelezer");
- colv= colvertdata= MEM_mallocN(verts*sizeof(float), "coldata");
-
- for(a=0; a<verts; a++) {
- fscanf(fp, "%f %f %f %i", vd, vd+1, vd+2, colv);
- DO_MINMAX(vd, min, max);
- vd+=3;
- colv++;
- }
-
- /* count faces */
- end= 1;
- while(end>0) {
- end= fscanf(fp,"%d", &poly);
- if(end<=0) break;
-
- if(poly==3) tottria++;
- else if(poly==4) totquad++;
- else totedge+= poly;
-
- for(a=0;a<poly;a++) {
- end= fscanf(fp,"%d", &nr);
- if(end<=0) break;
- }
- if(end<=0) break;
-
- }
-
- if(totedge+tottria+totquad>MESH_MAX_VERTS) {
- printf(" var1: %d, var2: %d, var3: %d \n", totedge, tottria, totquad);
- //XXX error("too many faces");
- MEM_freeN(vertdata);
- MEM_freeN(colvertdata);
- fclose(fp);
- return;
- }
-
- /* new object */
- ob= add_object(OB_MESH);
- me= ob->data;
- me->totvert= verts;
- me->totface= totedge+tottria+totquad;
- me->flag= 0;
-
- me->mvert= CustomData_add_layer(&me->vdata, CD_MVERT, CD_CALLOC,
- NULL, me->totvert);
- me->mface= CustomData_add_layer(&me->fdata, CD_MFACE, CD_CALLOC,
- NULL, me->totface);
-
- /* verts */
-
- cent[0]= (min[0]+max[0])/2.0f;
- cent[1]= (min[1]+max[1])/2.0f;
- cent[2]= (min[2]+max[2])/2.0f;
- VECCOPY(ob->loc, cent);
-
- a= me->totvert;
- vd= vertdata;
- mvert= me->mvert;
- while(a--) {
- VecSubf(mvert->co, vd, cent);
- mvert++;
- vd+= 3;
- }
-
- /* faces */
- if(me->totface) {
- rewind(fp);
-
- fscanf(fp, "%40s", s);
- fscanf(fp, "%d\n", &verts);
- for(a=0;a<verts;a++) {
- fscanf(fp, "%f %f %f %i", &ftemp, &ftemp, &ftemp, &itemp);
- }
-
- a= me->totface;
- mface= me->mface;
- while(a--) {
- end= fscanf(fp,"%d", &poly);
- if(end<=0) break;
-
- if(poly==3 || poly==4) {
- fscanf(fp,"%d", &nr);
- mface->v1= MIN2(nr, me->totvert-1);
- fscanf(fp,"%d", &nr);
- mface->v2= MIN2(nr, me->totvert-1);
- fscanf(fp,"%d", &nr);
- mface->v3= MIN2(nr, me->totvert-1);
- if(poly==4) {
- if( fscanf(fp,"%d", &nr) <=0 ) break;
- mface->v4= MIN2(nr, me->totvert-1);
- }
-
- test_index_face(mface, NULL, 0, poly);
-
- mface++;
- }
- else {
- if( fscanf(fp,"%d", &nr0) <=0) break;
- first= nr0;
- for(b=1; b<poly; b++) {
- end= fscanf(fp,"%d", &nr);
- if(end<=0) break;
- nr= MIN2(nr, me->totvert-1);
- mface->v1= nr;
- mface->v2= nr0;
- nr0= nr;
- mface++;
- a--;
- }
- mface->v1= first;
- mface->v2= nr;
- mface->flag= ME_SMOOTH;
-
- mface++;
- if(end<=0) break;
- }
- }
-
- /* mcol is 4 colors per face */
- me->mcol= MEM_mallocN(4*sizeof(int)*me->totface, "mcol");
- colf= (unsigned int *)me->mcol;
-
- a= me->totface;
- mface= me->mface;
- while(a--) {
-
- colf[0]= colvertdata[mface->v1];
- colf[1]= colvertdata[mface->v2];
- colf[2]= colvertdata[mface->v3];
- colf[3]= colvertdata[mface->v4];
-
- colf+= 4;
- mface++;
- }
-
- MEM_freeN(colvertdata);
- }
-
- fclose(fp);
- MEM_freeN(vertdata);
-
- mesh_add_normals_flags(me);
- make_edges(me, 0);
-
- //XXX waitcursor(1);
-}
-
-
static void read_videoscape_lamp(char *str)
{
Object *ob;
@@ -2387,16 +2204,8 @@ int BKE_read_exotic(char *name)
//XXX waitcursor(1);
- if(*s0==GOUR) {
- if(G.obedit) {
- //XXX error("Unable to perform function in EditMode");
- } else {
- read_radiogour(name);
- retval = 1;
- }
- }
- else if ELEM4(*s0, DDG1, DDG2, DDG3, DDG4) {
- if(G.obedit) {
+ if(ELEM4(*s0, DDG1, DDG2, DDG3, DDG4)) {
+ if(0) { // XXX obedit) {
//XXX error("Unable to perform function in EditMode");
} else {
read_videoscape(name);
@@ -2618,7 +2427,7 @@ static void write_videoscape_mesh(Object *ob, char *str)
fprintf(fp,"3DG1\n");
- if(G.obedit) {
+ if(em) {
fprintf(fp, "%d\n", G.totvert);
diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index a8a97742c24..529d4cc5268 100644
--- a/source/blender/blenkernel/intern/font.c
+++ b/source/blender/blenkernel/intern/font.c
@@ -622,13 +622,11 @@ static void buildchar(Curve *cu, unsigned long character, CharInfo *info, float
}
}
-int getselection(int *start, int *end)
+int getselection(Object *ob, int *start, int *end)
{
- Curve *cu;
+ Curve *cu= ob->data;
- if (G.obedit==NULL || G.obedit->type != OB_FONT) return 0;
-
- cu= G.obedit->data;
+ if (cu->editstr==NULL || ob->type != OB_FONT) return 0;
if (cu->selstart == 0) return 0;
if (cu->selstart <= cu->selend) {
@@ -677,8 +675,8 @@ struct chartrans *text_to_curve(Object *ob, int mode)
cu= (Curve *) ob->data;
vfont= cu->vfont;
- if(cu->str == 0) return 0;
- if(vfont == 0) return 0;
+ if(cu->str == NULL) return 0;
+ if(vfont == NULL) return 0;
// Create unicode string
utf8len = utf8slen(cu->str);
@@ -731,7 +729,7 @@ struct chartrans *text_to_curve(Object *ob, int mode)
if (selboxes) MEM_freeN(selboxes);
selboxes = NULL;
- if (getselection(&selstart, &selend))
+ if (getselection(ob, &selstart, &selend))
selboxes = MEM_callocN((selend-selstart+1)*sizeof(SelBox), "font selboxes");
tb = &(cu->tb[0]);
@@ -1113,7 +1111,7 @@ struct chartrans *text_to_curve(Object *ob, int mode)
}
/* cursor first */
- if(ob==G.obedit) {
+ if(cu->editstr) {
ct= chartransdata+cu->pos;
si= (float)sin(ct->rot);
co= (float)cos(ct->rot);
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index 3f9143bb405..d397279e63e 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -297,14 +297,17 @@ void make_local_lattice(Lattice *lt)
void init_latt_deform(Object *oblatt, Object *ob)
{
/* we make an array with all differences */
- Lattice *lt = deformLatt = (oblatt==G.obedit)?editLatt:oblatt->data;
- BPoint *bp = lt->def;
+ Lattice *lt= oblatt->data;
+ BPoint *bp;
DispList *dl = find_displist(&oblatt->disp, DL_VERTS);
float *co = dl?dl->verts:NULL;
float *fp, imat[4][4];
float fu, fv, fw;
int u, v, w;
+ if(lt->editlatt) lt= lt->editlatt;
+ bp = lt->def;
+
fp= latticedata= MEM_mallocN(sizeof(float)*3*deformLatt->pntsu*deformLatt->pntsv*deformLatt->pntsw, "latticedata");
/* for example with a particle system: ob==0 */
@@ -868,10 +871,13 @@ void outside_lattice(Lattice *lt)
float (*lattice_getVertexCos(struct Object *ob, int *numVerts_r))[3]
{
- Lattice *lt = (G.obedit==ob)?editLatt:ob->data;
- int i, numVerts = *numVerts_r = lt->pntsu*lt->pntsv*lt->pntsw;
+ Lattice *lt = ob->data;
+ int i, numVerts;
float (*vertexCos)[3] = MEM_mallocN(sizeof(*vertexCos)*numVerts,"lt_vcos");
+ if(lt->editlatt) lt= lt->editlatt;
+ numVerts = *numVerts_r = lt->pntsu*lt->pntsv*lt->pntsw;
+
for (i=0; i<numVerts; i++) {
VECCOPY(vertexCos[i], lt->def[i].vec);
}
@@ -891,9 +897,10 @@ void lattice_applyVertexCos(struct Object *ob, float (*vertexCos)[3])
void lattice_calc_modifiers(Object *ob)
{
- float (*vertexCos)[3] = NULL;
+ Lattice *lt= ob->data;
ModifierData *md = modifiers_getVirtualModifierList(ob);
- int numVerts, editmode = G.obedit==ob;
+ float (*vertexCos)[3] = NULL;
+ int numVerts, editmode = (lt->editlatt!=NULL);
freedisplist(&ob->disp);
@@ -931,7 +938,8 @@ struct MDeformVert* lattice_get_deform_verts(struct Object *oblatt)
{
if(oblatt->type == OB_LATTICE)
{
- Lattice *lt = (oblatt==G.obedit)?editLatt:(Lattice*)oblatt->data;
+ Lattice *lt = (Lattice*)oblatt->data;
+ if(lt->editlatt) lt= lt->editlatt;
return lt->dvert;
}
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index d697ef2de4e..ccbc1cc17a1 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -858,12 +858,13 @@ void delete_material_index()
short *totcolp;
int a, actcol;
- if(G.obedit) {
+ // if(obedit) {
//XXX error("Unable to perform function in EditMode");
- return;
- }
+ // return;
+ // }
+
ob= ((G.scene->basact)? (G.scene->basact->object) : 0) ;
- if(ob==0 || ob->totcol==0) return;
+ if(ob==NULL || ob->totcol==0) return;
/* take a mesh/curve/mball as starting point, remove 1 index,
* AND with all objects that share the ob->data
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index d84ad0a5215..8914ebac4e0 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -287,7 +287,6 @@ int is_basis_mball(Object *ob)
*/
Object *find_basis_mball(Object *basis)
{
- extern ListBase editelems; /* editmball.c */
Base *base;
Object *ob,*bob= basis;
MetaElem *ml=NULL;
@@ -302,13 +301,13 @@ Object *find_basis_mball(Object *basis)
if (ob->type==OB_MBALL) {
if(ob==bob){
+ MetaBall *mb= ob->data;
+
/* if bob object is in edit mode, then dynamic list of all MetaElems
* is stored in editelems */
- if(ob==G.obedit) ml= editelems.first;
- /* keep track of linked data too! */
- else if(G.obedit && G.obedit->data==ob->data) ml= editelems.first;
+ if(mb->editelems) ml= mb->editelems->first;
/* if bob object is in object mode */
- else ml= ((MetaBall*)ob->data)->elems.first;
+ else ml= mb->elems.first;
}
else{
splitIDname(ob->id.name+2, obname, &obnr);
@@ -316,13 +315,13 @@ Object *find_basis_mball(Object *basis)
/* object ob has to be in same "group" ... it means, that it has to have
* same base of its name */
if(strcmp(obname, basisname)==0){
+ MetaBall *mb= ob->data;
+
/* if object is in edit mode, then dynamic list of all MetaElems
* is stored in editelems */
- if(ob==G.obedit) ml= editelems.first;
- /* keep track of linked data too! */
- else if(bob==G.obedit && bob->data==ob->data) ml= editelems.first;
- /* object is in object mode */
- else ml= ((MetaBall*)ob->data)->elems.first;
+ if(mb->editelems) ml= mb->editelems->first;
+ /* if bob object is in object mode */
+ else ml= mb->elems.first;
if(obnr<basisnr){
if(!(ob->flag & OB_FROMDUPLI)){
@@ -1454,7 +1453,6 @@ void polygonize(PROCESS *mbproc, MetaBall *mb)
float init_meta(Object *ob) /* return totsize */
{
- extern ListBase editelems; /* editmball.c */
Base *base;
Object *bob;
MetaBall *mb;
@@ -1483,8 +1481,7 @@ float init_meta(Object *ob) /* return totsize */
mat= imat= 0;
mb= ob->data;
- if(ob==G.obedit) ml= editelems.first;
- else if(G.obedit && G.obedit->type==OB_MBALL && G.obedit->data==mb) ml= editelems.first;
+ if(mb->editelems) ml= mb->editelems->first;
else ml= mb->elems.first;
}
else {
@@ -1494,8 +1491,8 @@ float init_meta(Object *ob) /* return totsize */
splitIDname(bob->id.name+2, name, &nr);
if( strcmp(obname, name)==0 ) {
mb= bob->data;
- if(G.obedit && G.obedit->type==OB_MBALL && G.obedit->data==mb)
- ml= editelems.first;
+
+ if(mb->editelems) ml= mb->editelems->first;
else ml= mb->elems.first;
}
}
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index 38e8b1b1abe..30f065a40a0 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -7567,7 +7567,7 @@ static void meshdeformModifier_do(
/* get cage derivedmesh */
if(me->edit_mesh) {
- tmpdm= editmesh_get_derived_cage_and_final(me->edit_mesh, &cagedm, 0);
+ tmpdm= editmesh_get_derived_cage_and_final(ob, me->edit_mesh, &cagedm, 0);
if(tmpdm)
tmpdm->release(tmpdm);
}
@@ -8718,8 +8718,9 @@ int modifiers_isDeformed(Object *ob)
ModifierData *md = modifiers_getVirtualModifierList(ob);
for (; md; md=md->next) {
- if(ob==G.obedit && (md->mode & eModifierMode_Editmode)==0);
- else if(modifier_isDeformer(md))
+ // XXX if(ob==obedit && (md->mode & eModifierMode_Editmode)==0);
+ // else
+ if(modifier_isDeformer(md))
return 1;
}
return 0;
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 99e4083f68d..a1566b1a0ed 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -1285,7 +1285,7 @@ void multires_set_level(Object *ob, Mesh *me, const int render)
/* Update the edge visibility flags to only show edges on or below the edgelvl */
void multires_edge_level_update(Object *ob, Mesh *me)
{
- if(!G.obedit) {
+ if(!me->edit_mesh) {
MultiresLevel *cr_lvl= BLI_findlink(&me->mr->levels,me->mr->current-1);
MultiresLevel *edge_lvl= BLI_findlink(&me->mr->levels,me->mr->edgelvl-1);
const int threshold= edge_lvl->totedge * pow(2, me->mr->current - me->mr->edgelvl);
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index e52a4a4f8e0..d9101feb204 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1706,7 +1706,7 @@ static void give_parvert(Object *par, int nr, float *vec)
}
}
}
- else if ELEM(par->type, OB_CURVE, OB_SURF) {
+ else if (ELEM(par->type, OB_CURVE, OB_SURF)) {
Nurb *nu;
Curve *cu;
BPoint *bp;
@@ -1714,8 +1714,10 @@ static void give_parvert(Object *par, int nr, float *vec)
int found= 0;
cu= par->data;
- nu= cu->nurb.first;
- //XXX if(par==G.obedit) nu= editNurb.first;
+ if(cu->editnurb)
+ nu= cu->editnurb->first;
+ else
+ nu= cu->nurb.first;
count= 0;
while(nu && !found) {
@@ -1755,7 +1757,7 @@ static void give_parvert(Object *par, int nr, float *vec)
DispList *dl = find_displist(&par->disp, DL_VERTS);
float *co = dl?dl->verts:NULL;
- if(par==G.obedit) latt= editLatt;
+ if(latt->editlatt) latt= latt->editlatt;
a= latt->pntsu*latt->pntsv*latt->pntsw;
count= 0;
@@ -1782,7 +1784,7 @@ static void ob_parvert3(Object *ob, Object *par, float mat[][4])
/* in local ob space */
Mat4One(mat);
- if ELEM4(par->type, OB_MESH, OB_SURF, OB_CURVE, OB_LATTICE) {
+ if (ELEM4(par->type, OB_MESH, OB_SURF, OB_CURVE, OB_LATTICE)) {
give_parvert(par, ob->par1, v1);
give_parvert(par, ob->par2, v2);
@@ -2163,7 +2165,7 @@ BoundBox *object_get_boundbox(Object *ob)
if(ob->type==OB_MESH) {
bb = mesh_get_bb(ob);
}
- else if ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT) {
+ else if (ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT)) {
bb= ( (Curve *)ob->data )->bb;
}
else if(ob->type==OB_MBALL) {
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 4f7f5402d0d..3ad17790f45 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -4334,8 +4334,8 @@ static void particles_fluid_step(Object *ob, ParticleSystem *psys, int cfra)
int readMask, activeParts = 0, fileParts = 0;
gzFile gzf;
- if(ob==G.obedit) // off...
- return;
+// XXX if(ob==G.obedit) // off...
+// return;
// ok, start loading
strcpy(filename, fss->surfdataPath);
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c
index 81788cd24a8..3b29409d75c 100644
--- a/source/blender/blenkernel/intern/shrinkwrap.c
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -98,7 +98,7 @@ DerivedMesh *object_get_derived_final(Object *ob, CustomDataMask dataMask)
if (me->edit_mesh)
{
DerivedMesh *final = NULL;
- editmesh_get_derived_cage_and_final(me->edit_mesh, &final, dataMask);
+ editmesh_get_derived_cage_and_final(ob, me->edit_mesh, &final, dataMask);
return final;
}
else
@@ -237,8 +237,9 @@ void shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *calc)
//Setup nearest
nearest.index = -1;
nearest.dist = FLT_MAX;
-
+#ifndef __APPLE__
#pragma omp parallel for default(none) private(i) firstprivate(nearest) shared(treeData,calc) schedule(static)
+#endif
for(i = 0; i<calc->numVerts; ++i)
{
float *co = calc->vertexCos[i];
@@ -443,7 +444,9 @@ do
//Now, everything is ready to project the vertexs!
+#ifndef __APPLE__
#pragma omp parallel for private(i,hit) schedule(static)
+#endif
for(i = 0; i<calc->numVerts; ++i)
{
float *co = calc->vertexCos[i];
@@ -547,7 +550,9 @@ void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc)
//Find the nearest vertex
+#ifndef __APPLE__
#pragma omp parallel for default(none) private(i) firstprivate(nearest) shared(calc,treeData) schedule(static)
+#endif
for(i = 0; i<calc->numVerts; ++i)
{
float *co = calc->vertexCos[i];
diff --git a/source/blender/blenlib/BLI_editVert.h b/source/blender/blenlib/BLI_editVert.h
index a4a4d5ffd84..fec89690090 100644
--- a/source/blender/blenlib/BLI_editVert.h
+++ b/source/blender/blenlib/BLI_editVert.h
@@ -174,6 +174,8 @@ typedef struct EditMesh
/* copy from scene */
short selectmode;
+ /* copy from object actcol */
+ short mat_nr;
struct DerivedMesh *derivedCage, *derivedFinal;
/* the custom data layer mask that was last used to calculate
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 41267738cf5..82923be09cf 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -809,7 +809,7 @@ static int read_file_dna(FileData *fd)
return 0;
}
-static int fd_read_from_file(FileData *filedata, void *buffer, int size)
+static int fd_read_from_file(FileData *filedata, void *buffer, unsigned int size)
{
int readsize = read(filedata->filedes, buffer, size);
@@ -822,7 +822,7 @@ static int fd_read_from_file(FileData *filedata, void *buffer, int size)
return (readsize);
}
-static int fd_read_gzip_from_file(FileData *filedata, void *buffer, int size)
+static int fd_read_gzip_from_file(FileData *filedata, void *buffer, unsigned int size)
{
int readsize = gzread(filedata->gzfiledes, buffer, size);
@@ -835,7 +835,7 @@ static int fd_read_gzip_from_file(FileData *filedata, void *buffer, int size)
return (readsize);
}
-static int fd_read_from_memory(FileData *filedata, void *buffer, int size)
+static int fd_read_from_memory(FileData *filedata, void *buffer, unsigned int size)
{
// don't read more bytes then there are available in the buffer
int readsize = MIN2(size, filedata->buffersize - filedata->seek);
@@ -1998,7 +1998,8 @@ static void direct_link_armature(FileData *fd, bArmature *arm)
Bone *bone;
link_list(fd, &arm->bonebase);
-
+ arm->edbo= NULL;
+
bone=arm->bonebase.first;
while (bone) {
direct_link_bones(fd, bone);
@@ -2182,9 +2183,9 @@ static void direct_link_mball(FileData *fd, MetaBall *mb)
link_list(fd, &(mb->elems));
- mb->disp.first= mb->disp.last= 0;
-
- mb->bb= 0;
+ mb->disp.first= mb->disp.last= NULL;
+ mb->editelems= NULL;
+ mb->bb= NULL;
}
/* ************ READ WORLD ***************** */
@@ -2481,9 +2482,10 @@ static void direct_link_curve(FileData *fd, Curve *cu)
cu->bev.first=cu->bev.last= NULL;
cu->disp.first=cu->disp.last= NULL;
- cu->editlist.first=cu->editlist.last= NULL;
+ cu->editnurb= NULL;
cu->path= NULL;
-
+ cu->editstr= NULL;
+
nu= cu->nurb.first;
while(nu) {
nu->bezt= newdataadr(fd, nu->bezt);
@@ -2925,6 +2927,8 @@ static void direct_link_latt(FileData *fd, Lattice *lt)
lt->dvert= newdataadr(fd, lt->dvert);
direct_link_dverts(fd, lt->pntsu*lt->pntsv*lt->pntsw, lt->dvert);
+
+ lt->editlatt= NULL;
}
diff --git a/source/blender/blenloader/intern/readfile.h b/source/blender/blenloader/intern/readfile.h
index b084e377d19..f0e00b75b67 100644
--- a/source/blender/blenloader/intern/readfile.h
+++ b/source/blender/blenloader/intern/readfile.h
@@ -44,7 +44,7 @@ typedef struct FileData {
int eof;
int buffersize;
int seek;
- int (*read)(struct FileData *filedata, void *buffer, int size);
+ int (*read)(struct FileData *filedata, void *buffer, unsigned int size);
// variables needed for reading from memory / stream
char *buffer;
diff --git a/source/blender/editors/mesh/editmesh.c b/source/blender/editors/mesh/editmesh.c
index 80e5d0f910a..ab9627df28d 100644
--- a/source/blender/editors/mesh/editmesh.c
+++ b/source/blender/editors/mesh/editmesh.c
@@ -389,8 +389,7 @@ EditFace *addfacelist(EditMesh *em, EditVert *v1, EditVert *v2, EditVert *v3, Ed
CustomData_em_copy_data(&em->fdata, &em->fdata, example->data, &efa->data);
}
else {
- if (G.obedit && G.obedit->actcol)
- efa->mat_nr= G.obedit->actcol-1;
+ efa->mat_nr= em->mat_nr;
CustomData_em_set_default(&em->fdata, &efa->data);
}
@@ -1431,7 +1430,7 @@ void remake_editMesh(Scene *scene, Object *ob)
-void separate_mesh(Scene *scene, Object *ob)
+void separate_mesh(Scene *scene, Object *obedit)
{
EditMesh *em, emcopy;
EditVert *eve, *v1;
@@ -1442,12 +1441,12 @@ void separate_mesh(Scene *scene, Object *ob)
Base *base, *oldbase;
ListBase edve, eded, edvl;
- TEST_EDITMESH
+ if(obedit==NULL) return;
if(multires_test()) return;
waitcursor(1);
- me= G.obedit->data;
+ me= obedit->data;
em= me->edit_mesh;
if(me->key) {
error("Can't separate with vertex keys");
@@ -1470,7 +1469,7 @@ void separate_mesh(Scene *scene, Object *ob)
base= FIRSTBASE;
while(base) {
// XXX if(base->lay & G.vd->lay) {
- if(base->object==G.obedit) base->flag |= SELECT;
+ if(base->object==obedit) base->flag |= SELECT;
else base->flag &= ~SELECT;
// }
base= base->next;
@@ -1521,19 +1520,19 @@ void separate_mesh(Scene *scene, Object *ob)
efa= vl1;
}
- oldob= G.obedit;
+ oldob= obedit;
oldbase= BASACT;
adduplicate(1, 0); /* notrans and a linked duplicate */
- G.obedit= BASACT->object; /* basact was set in adduplicate() */
+ obedit= BASACT->object; /* basact was set in adduplicate() */
men= copy_mesh(me);
- set_mesh(G.obedit, men);
+ set_mesh(obedit, men);
/* because new mesh is a copy: reduce user count */
men->id.us--;
- load_editMesh(scene, G.obedit);
+ load_editMesh(scene, obedit);
BASACT->flag &= ~SELECT;
@@ -1554,19 +1553,19 @@ void separate_mesh(Scene *scene, Object *ob)
/* hashedges are freed now, make new! */
editMesh_set_hash(em);
- DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
- G.obedit= oldob;
+ DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
+ obedit= oldob;
BASACT= oldbase;
BASACT->flag |= SELECT;
waitcursor(0);
// allqueue(REDRAWVIEW3D, 0);
- DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
+ DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
-void separate_material(Scene *scene, Object *ob)
+void separate_material(Scene *scene, Object *obedit)
{
Mesh *me;
EditMesh *em;
@@ -1574,33 +1573,33 @@ void separate_material(Scene *scene, Object *ob)
if(multires_test()) return;
- me= G.obedit->data;
+ me= obedit->data;
em= me->edit_mesh;
if(me->key) {
error("Can't separate with vertex keys");
return;
}
- if(G.obedit && em) {
- if(G.obedit->type == OB_MESH) {
- for (curr_mat = 1; curr_mat < G.obedit->totcol; ++curr_mat) {
+ if(obedit && em) {
+ if(obedit->type == OB_MESH) {
+ for (curr_mat = 1; curr_mat < obedit->totcol; ++curr_mat) {
/* clear selection, we're going to use that to select material group */
EM_clear_flag_all(em, SELECT);
/* select the material */
editmesh_select_by_material(em, curr_mat);
/* and now separate */
- separate_mesh(scene, ob);
+ separate_mesh(scene, obedit);
}
}
}
// allqueue(REDRAWVIEW3D, 0);
- DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
+ DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
-void separate_mesh_loose(Scene *scene, Object *ob)
+void separate_mesh_loose(Scene *scene, Object *obedit)
{
EditMesh *em, emcopy;
EditVert *eve, *v1;
@@ -1613,14 +1612,13 @@ void separate_mesh_loose(Scene *scene, Object *ob)
int vertsep=0;
short done=0, check=1;
- me= G.obedit->data;
+ me= obedit->data;
em= me->edit_mesh;
if(me->key) {
error("Can't separate a mesh with vertex keys");
return;
}
- TEST_EDITMESH
if(multires_test()) return;
waitcursor(1);
@@ -1639,7 +1637,7 @@ void separate_mesh_loose(Scene *scene, Object *ob)
base= FIRSTBASE;
while(base) {
// XXX if(base->lay & G.vd->lay) {
- if(base->object==G.obedit) base->flag |= SELECT;
+ if(base->object==obedit) base->flag |= SELECT;
else base->flag &= ~SELECT;
// }
base= base->next;
@@ -1718,19 +1716,19 @@ void separate_mesh_loose(Scene *scene, Object *ob)
efa= vl1;
}
- oldob= G.obedit;
+ oldob= obedit;
oldbase= BASACT;
adduplicate(1, 0); /* notrans and a linked duplicate*/
- G.obedit= BASACT->object; /* basact was set in adduplicate() */
+ obedit= BASACT->object; /* basact was set in adduplicate() */
men= copy_mesh(me);
- set_mesh(G.obedit, men);
+ set_mesh(obedit, men);
/* because new mesh is a copy: reduce user count */
men->id.us--;
- load_editMesh(scene, G.obedit);
+ load_editMesh(scene, obedit);
BASACT->flag &= ~SELECT;
@@ -1751,7 +1749,7 @@ void separate_mesh_loose(Scene *scene, Object *ob)
/* hashedges are freed now, make new! */
editMesh_set_hash(em);
- G.obedit= oldob;
+ obedit= oldob;
BASACT= oldbase;
BASACT->flag |= SELECT;
@@ -1763,12 +1761,12 @@ void separate_mesh_loose(Scene *scene, Object *ob)
waitcursor(0);
// allqueue(REDRAWVIEW3D, 0);
- DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
+ DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
-void separatemenu(Scene *scene, Object *ob)
+void separatemenu(Scene *scene, Object *obedit)
{
- Mesh *me= ob->data;
+ Mesh *me= obedit->data;
short event;
if(me->edit_mesh->verts.first==NULL) return;
@@ -1780,13 +1778,13 @@ void separatemenu(Scene *scene, Object *ob)
switch (event) {
case 1:
- separate_mesh(scene, ob);
+ separate_mesh(scene, obedit);
break;
case 2:
- separate_mesh_loose(scene, ob);
+ separate_mesh_loose(scene, obedit);
break;
case 3:
- separate_material(scene, ob);
+ separate_material(scene, obedit);
break;
}
waitcursor(0);
@@ -1975,8 +1973,9 @@ static void *editMesh_to_undoMesh(void *emv)
// um->retopo_mode= scene->toolsettings->retopo_mode;
{
- Multires *mr= get_mesh(G.obedit)->mr;
- UndoMesh *prev= undo_editmode_get_prev(G.obedit);
+ Mesh *me= NULL; // XXX
+ Multires *mr= me->mr;
+ UndoMesh *prev= NULL; // XXX undo_editmode_get_prev(obedit);
um->mru= NULL;
@@ -2103,7 +2102,7 @@ static void undoMesh_to_editMesh(void *umv, void *emv)
// }
{
- Mesh *me= get_mesh(G.obedit);
+ Mesh *me= NULL; // XXX;
multires_free(me->mr);
me->mr= NULL;
if(um->mru && um->mru->mr) me->mr= multires_copy(um->mru->mr);
@@ -2192,9 +2191,7 @@ EditFace *EM_get_face_for_index(int index)
int EM_texFaceCheck(EditMesh *em)
{
/* some of these checks could be a touch overkill */
- if ( (G.obedit) &&
- (G.obedit->type == OB_MESH) &&
- (em) &&
+ if ( (em) &&
(em->faces.first) &&
(CustomData_has_layer(&em->fdata, CD_MTFACE)))
return 1;
@@ -2205,9 +2202,7 @@ int EM_texFaceCheck(EditMesh *em)
int EM_vertColorCheck(EditMesh *em)
{
/* some of these checks could be a touch overkill */
- if ( (G.obedit) &&
- (G.obedit->type == OB_MESH) &&
- (em) &&
+ if ( (em) &&
(em->faces.first) &&
(CustomData_has_layer(&em->fdata, CD_MCOL)))
return 1;
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c
index 60d821b9801..1833682b19e 100644
--- a/source/blender/editors/mesh/editmesh_add.c
+++ b/source/blender/editors/mesh/editmesh_add.c
@@ -131,14 +131,13 @@ static void get_view_aligned_coordinate(float *fp, short mval[2])
// }
}
-void add_click_mesh(Scene *scene, EditMesh *em)
+void add_click_mesh(Scene *scene, Object *obedit, EditMesh *em)
{
View3D *v3d= NULL; // XXX
EditVert *eve, *v1;
float min[3], max[3];
int done= 0;
- TEST_EDITMESH
if(multires_test()) return;
INIT_MINMAX(min, max);
@@ -174,10 +173,10 @@ void add_click_mesh(Scene *scene, EditMesh *em)
VecMulf(cent, 0.5f);
VECCOPY(min, cent);
- Mat4MulVecfl(G.obedit->obmat, min); // view space
+ Mat4MulVecfl(obedit->obmat, min); // view space
get_view_aligned_coordinate(min, mval);
- Mat4Invert(G.obedit->imat, G.obedit->obmat);
- Mat4MulVecfl(G.obedit->imat, min); // back in object space
+ Mat4Invert(obedit->imat, obedit->obmat);
+ Mat4MulVecfl(obedit->imat, min); // back in object space
VecSubf(min, min, cent);
@@ -206,7 +205,7 @@ void add_click_mesh(Scene *scene, EditMesh *em)
}
}
- extrudeflag(em, SELECT, nor);
+ extrudeflag(obedit, em, SELECT, nor);
rotateflag(em, SELECT, cent, mat);
translateflag(em, SELECT, min);
@@ -218,11 +217,11 @@ void add_click_mesh(Scene *scene, EditMesh *em)
eve= addvertlist(em, 0, NULL);
- Mat3CpyMat4(mat, G.obedit->obmat);
+ Mat3CpyMat4(mat, obedit->obmat);
Mat3Inv(imat, mat);
VECCOPY(eve->co, curs);
- VecSubf(eve->co, eve->co, G.obedit->obmat[3]);
+ VecSubf(eve->co, eve->co, obedit->obmat[3]);
Mat3MulVecfl(imat, eve->co);
@@ -232,7 +231,7 @@ void add_click_mesh(Scene *scene, EditMesh *em)
retopo_do_all();
BIF_undo_push("Add vertex/edge/face");
-// XXX DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
+// XXX DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
while(0); // XXX get_mbut()&R_MOUSE);
@@ -258,7 +257,7 @@ static void make_fgon(EditMesh *em, int make)
}
}
EM_fgon_flags(em); // redo flags and indices for fgons
-// XXX DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
+// XXX DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Clear FGon");
return;
}
@@ -335,7 +334,7 @@ static void make_fgon(EditMesh *em, int make)
else {
EM_fgon_flags(em); // redo flags and indices for fgons
-// XXX DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Make FGon");
}
}
@@ -601,7 +600,7 @@ void addfaces_from_edgenet(EditMesh *em)
EM_select_flush(em);
BIF_undo_push("Add faces");
-// XXX DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
}
void addedgeface_mesh(EditMesh *em)
@@ -633,7 +632,7 @@ void addedgeface_mesh(EditMesh *em)
EM_select_edge(eed, 1);
BIF_undo_push("Add edge");
- // XXX DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+ // XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
return;
}
else if(amount > 4) {
@@ -735,14 +734,13 @@ void addedgeface_mesh(EditMesh *em)
BIF_undo_push("Add face");
}
-// XXX DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
}
-void adduplicate_mesh(EditMesh *em)
+void adduplicate_mesh(Object *obedit, EditMesh *em)
{
- TEST_EDITMESH
if(multires_test()) return;
waitcursor(1);
@@ -757,8 +755,8 @@ void adduplicate_mesh(EditMesh *em)
* This shouldn't be necessary, derived queries should be
* automatically building this data if invalid. Or something.
*/
-// XXX DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
- object_handle_update(G.obedit);
+// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+ object_handle_update(obedit);
// XXX BIF_TransformSetUndo("Add Duplicate");
// initTransform(TFM_TRANSLATION, CTX_NO_PET);
@@ -767,32 +765,32 @@ void adduplicate_mesh(EditMesh *em)
/* check whether an object to add mesh to exists, if not, create one
* returns 1 if new object created, else 0 */
-static int confirm_objectExists(Scene *scene, Mesh **me, float mat[][3] )
+static int confirm_objectExists(Scene *scene, Object *obedit, Mesh **me, float mat[][3] )
{
int newob = 0;
/* if no obedit: new object and enter editmode */
- if(G.obedit==NULL) {
+ if(obedit==NULL) {
/* add_object actually returns an object ! :-)
But it also stores the added object struct in
G.scene->basact->object (BASACT->object) */
// XXX add_object_draw(OB_MESH);
- G.obedit= BASACT->object;
+ obedit= BASACT->object;
- where_is_object(G.obedit);
+ where_is_object(obedit);
- make_editMesh(scene, G.obedit);
+ make_editMesh(scene, obedit);
newob= 1;
}
- *me = G.obedit->data;
+ *me = obedit->data;
/* deselectall */
EM_clear_flag_all((*me)->edit_mesh, SELECT);
/* imat and center and size */
- Mat3CpyMat4(mat, G.obedit->obmat);
+ Mat3CpyMat4(mat, obedit->obmat);
return newob;
}
@@ -943,7 +941,7 @@ signed char monkeyf[250][4]= {
// ------------------------------- end copied code
-void make_prim(EditMesh *em, int type, float imat[3][3], int tot, int seg,
+void make_prim(Object *obedit, EditMesh *em, int type, float imat[3][3], int tot, int seg,
int subdiv, float dia, float d, int ext, int fill,
float cent[3])
{
@@ -992,7 +990,7 @@ void make_prim(EditMesh *em, int type, float imat[3][3], int tot, int seg,
vec[1]= dia*phid;
Mat3MulVecfl(imat, vec);
for(a=0;a<seg-1;a++) {
- extrudeflag_vert(em, 2, nor); // nor unused
+ extrudeflag_vert(obedit, em, 2, nor); // nor unused
translateflag(em, 2, vec);
}
break;
@@ -1027,7 +1025,7 @@ void make_prim(EditMesh *em, int type, float imat[3][3], int tot, int seg,
QuatToMat3(q, cmat);
for(a=0; a<seg; a++) {
- extrudeflag_vert(em, 2, nor); // nor unused
+ extrudeflag_vert(obedit, em, 2, nor); // nor unused
rotateflag(em, 2, v1->co, cmat);
}
@@ -1074,7 +1072,7 @@ void make_prim(EditMesh *em, int type, float imat[3][3], int tot, int seg,
}
dia*=200;
- for(a=1; a<subdiv; a++) esubdivideflag(em, 2, dia, 0,1,0);
+ for(a=1; a<subdiv; a++) esubdivideflag(obedit, em, 2, dia, 0,1,0);
/* and now do imat */
eve= em->verts.first;
while(eve) {
@@ -1234,7 +1232,7 @@ void make_prim(EditMesh *em, int type, float imat[3][3], int tot, int seg,
righthandfaces(em, 1); /* otherwise monkey has eyes in wrong direction */
}
-void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type)
+void add_primitiveMesh(Scene *scene, View3D *v3d, Object *obedit, EditMesh *em, int type)
{
Mesh *me;
float *curs, d, dia, phi, phid, cent[3], imat[3][3], mat[3][3];
@@ -1252,7 +1250,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type)
/* this function also comes from an info window */
// XXX if ELEM(curarea->spacetype, SPACE_VIEW3D, SPACE_INFO); else return;
- if (G.obedit && G.obedit->type==OB_MESH && multires_test()) return;
+ if (obedit && obedit->type==OB_MESH && multires_test()) return;
/* if editmode exists for other type, it exits */
check_editmode(OB_MESH);
@@ -1272,7 +1270,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type)
tot= 4;
ext= 0;
fill= 1;
- newob = confirm_objectExists(scene, &me, mat );
+ newob = confirm_objectExists(scene, obedit, &me, mat );
if(newob) name = "Plane";
undostr="Add Plane";
break;
@@ -1280,7 +1278,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type)
tot= 4;
ext= 1;
fill= 1;
- newob = confirm_objectExists(scene, &me, mat );
+ newob = confirm_objectExists(scene, obedit, &me, mat );
if(newob) name = "Cube";
undostr="Add Cube";
break;
@@ -1291,7 +1289,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type)
if (!(do_clever_numbuts("Add Circle", 3, 0))) return;
ext= 0;
fill = fill_circle;
- newob = confirm_objectExists(scene, &me, mat );
+ newob = confirm_objectExists(scene, obedit, &me, mat );
if(newob) name = "Circle";
undostr="Add Circle";
break;
@@ -1305,7 +1303,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type)
ext= 1;
fill = fill_cylinder;
d/=2;
- newob = confirm_objectExists(scene, &me, mat );
+ newob = confirm_objectExists(scene, obedit, &me, mat );
if(newob) {
if (fill) name = "Cylinder";
else name = "Tube";
@@ -1322,7 +1320,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type)
d/=2;
ext= 0;
fill = fill_cone;
- newob = confirm_objectExists(scene, &me, mat );
+ newob = confirm_objectExists(scene, obedit, &me, mat );
if(newob) name = "Cone";
undostr="Add Cone";
break;
@@ -1330,7 +1328,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type)
add_numbut(0, NUM|INT, "X res:", 3, 1000, &tot, NULL);
add_numbut(1, NUM|INT, "Y res:", 3, 1000, &seg, NULL);
if (!(do_clever_numbuts("Add Grid", 2, 0))) return;
- newob = confirm_objectExists(scene, &me, mat );
+ newob = confirm_objectExists(scene, obedit, &me, mat );
if(newob) name = "Grid";
undostr="Add Grid";
break;
@@ -1341,7 +1339,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type)
if (!(do_clever_numbuts("Add UV Sphere", 3, 0))) return;
- newob = confirm_objectExists(scene, &me, mat );
+ newob = confirm_objectExists(scene, obedit, &me, mat );
if(newob) name = "Sphere";
undostr="Add UV Sphere";
break;
@@ -1350,31 +1348,31 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type)
add_numbut(1, NUM|FLO, "Radius:", 0.001*v3d->grid, 100*v3d->grid, &dia, NULL);
if (!(do_clever_numbuts("Add Ico Sphere", 2, 0))) return;
- newob = confirm_objectExists(scene, &me, mat );
+ newob = confirm_objectExists(scene, obedit, &me, mat );
if(newob) name = "Sphere";
undostr="Add Ico Sphere";
break;
case 13: /* Monkey */
- newob = confirm_objectExists(scene, &me, mat );
+ newob = confirm_objectExists(scene, obedit, &me, mat );
if(newob) name = "Suzanne";
undostr="Add Monkey";
break;
default:
- newob = confirm_objectExists(scene, &me, mat );
+ newob = confirm_objectExists(scene, obedit, &me, mat );
break;
}
if( name!=NULL ) {
- rename_id((ID *)G.obedit, name );
+ rename_id((ID *)obedit, name );
rename_id((ID *)me, name );
}
d = -d;
curs= give_cursor(scene, v3d);
VECCOPY(cent, curs);
- cent[0]-= G.obedit->obmat[3][0];
- cent[1]-= G.obedit->obmat[3][1];
- cent[2]-= G.obedit->obmat[3][2];
+ cent[0]-= obedit->obmat[3][0];
+ cent[1]-= obedit->obmat[3][1];
+ cent[2]-= obedit->obmat[3][2];
if ( !(newob) || U.flag & USER_ADD_VIEWALIGNED) Mat3CpyMat4(imat, v3d->viewmat);
else Mat3One(imat);
@@ -1389,7 +1387,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type)
phid= 2*M_PI/tot;
phi= .25*M_PI;
- make_prim(em, type, imat, tot, seg, subdiv, dia, d, ext, fill, cent);
+ make_prim(obedit, em, type, imat, tot, seg, subdiv, dia, d, ext, fill, cent);
if(type<2) tot = totoud;
@@ -1398,11 +1396,11 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type)
if(type!=0 && type!=13) righthandfaces(em, 1); /* otherwise monkey has eyes in wrong direction... */
-// XXX DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
/* if a new object was created, it stores it in Mesh, for reload original data and undo */
if ( !(newob) || U.flag & USER_ADD_EDITMODE) {
- if(newob) load_editMesh(scene, G.obedit);
+ if(newob) load_editMesh(scene, obedit);
} else {
exit_editmode(2);
}
diff --git a/source/blender/editors/mesh/editmesh_lib.c b/source/blender/editors/mesh/editmesh_lib.c
index 115207736c9..974528626d0 100644
--- a/source/blender/editors/mesh/editmesh_lib.c
+++ b/source/blender/editors/mesh/editmesh_lib.c
@@ -917,7 +917,7 @@ short extrudeflag_face_indiv(EditMesh *em, short flag, float *nor)
EditEdge *eed;
EditFace *efa, *nextfa;
- if(G.obedit==0 || get_mesh(G.obedit)==0) return 0;
+ if(em==NULL) return 0;
/* selected edges with 1 or more selected face become faces */
/* selected faces each makes new faces */
@@ -1091,7 +1091,7 @@ short extrudeflag_verts_indiv(EditMesh *em, short flag, float *nor)
/* this is actually a recode of extrudeflag(), using proper edge/face select */
/* hurms, doesnt use 'flag' yet, but its not called by primitive making stuff anyway */
-static short extrudeflag_edge(EditMesh *em, short flag, float *nor)
+static short extrudeflag_edge(Object *obedit, EditMesh *em, short flag, float *nor)
{
/* all select edges/faces: extrude */
/* old select is cleared, in new ones it is set */
@@ -1101,9 +1101,9 @@ static short extrudeflag_edge(EditMesh *em, short flag, float *nor)
short del_old= 0;
ModifierData *md;
- if(G.obedit==0 || get_mesh(G.obedit)==0) return 0;
+ if(em==NULL) return 0;
- md = G.obedit->modifiers.first;
+ md = obedit->modifiers.first;
/* selected edges with 0 or 1 selected face become faces */
/* selected faces generate new faces */
@@ -1166,7 +1166,7 @@ static short extrudeflag_edge(EditMesh *em, short flag, float *nor)
if (mmd->mirror_ob) {
float imtx[4][4];
Mat4Invert(imtx, mmd->mirror_ob->obmat);
- Mat4MulMat4(mtx, G.obedit->obmat, imtx);
+ Mat4MulMat4(mtx, obedit->obmat, imtx);
}
for (eed= em->edges.first; eed; eed= eed->next) {
@@ -1346,7 +1346,7 @@ static short extrudeflag_edge(EditMesh *em, short flag, float *nor)
return 'n'; // normal constraint
}
-short extrudeflag_vert(EditMesh *em, short flag, float *nor)
+short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor)
{
/* all verts/edges/faces with (f & 'flag'): extrude */
/* from old verts, 'flag' is cleared, in new ones it is set */
@@ -1356,9 +1356,9 @@ short extrudeflag_vert(EditMesh *em, short flag, float *nor)
short sel=0, del_old= 0, is_face_sel=0;
ModifierData *md;
- if(G.obedit==0 || get_mesh(G.obedit)==0) return 0;
+ if(em) return 0;
- md = G.obedit->modifiers.first;
+ md = obedit->modifiers.first;
/* clear vert flag f1, we use this to detect a loose selected vertice */
eve= em->verts.first;
@@ -1453,7 +1453,7 @@ short extrudeflag_vert(EditMesh *em, short flag, float *nor)
if (mmd->mirror_ob) {
float imtx[4][4];
Mat4Invert(imtx, mmd->mirror_ob->obmat);
- Mat4MulMat4(mtx, G.obedit->obmat, imtx);
+ Mat4MulMat4(mtx, obedit->obmat, imtx);
}
for (eed= em->edges.first; eed; eed= eed->next) {
@@ -1633,12 +1633,12 @@ short extrudeflag_vert(EditMesh *em, short flag, float *nor)
}
/* generic extrude */
-short extrudeflag(EditMesh *em, short flag, float *nor)
+short extrudeflag(Object *obedit, EditMesh *em, short flag, float *nor)
{
if(em->selectmode & SCE_SELECT_VERTEX)
- return extrudeflag_vert(em, flag, nor);
+ return extrudeflag_vert(obedit, em, flag, nor);
else
- return extrudeflag_edge(em, flag, nor);
+ return extrudeflag_edge(obedit, em, flag, nor);
}
diff --git a/source/blender/editors/mesh/editmesh_loop.c b/source/blender/editors/mesh/editmesh_loop.c
index d12c2845718..13cc90f3e2d 100644
--- a/source/blender/editors/mesh/editmesh_loop.c
+++ b/source/blender/editors/mesh/editmesh_loop.c
@@ -146,7 +146,7 @@ static void edgering_sel(EditMesh *em, EditEdge *startedge, int select, int prev
if(previewlines > 0 && select == 0){
// XXX persp(PERSP_VIEW);
// XXX glPushMatrix();
-// XXX mymultmatrix(G.obedit->obmat);
+// XXX mymultmatrix(obedit->obmat);
for(efa= em->faces.first; efa; efa= efa->next) {
if(efa->v4 == NULL) { continue; }
@@ -193,7 +193,7 @@ static void edgering_sel(EditMesh *em, EditEdge *startedge, int select, int prev
}
}
}
-void CutEdgeloop(EditMesh *em, int numcuts)
+void CutEdgeloop(Object *obedit, EditMesh *em, int numcuts)
{
ViewContext vc; // XXX
EditEdge *nearest=NULL, *eed;
@@ -363,9 +363,9 @@ void CutEdgeloop(EditMesh *em, int numcuts)
fac= 1.0f;
// XXX if(fbutton(&fac, 0.0f, 5.0f, 10, 10, "Smooth:")==0) return;
fac= 0.292f*fac;
- esubdivideflag(em, SELECT,fac,B_SMOOTH,numcuts,SUBDIV_SELECT_LOOPCUT);
+ esubdivideflag(obedit, em, SELECT,fac,B_SMOOTH,numcuts,SUBDIV_SELECT_LOOPCUT);
} else {
- esubdivideflag(em, SELECT,0,0,numcuts,SUBDIV_SELECT_LOOPCUT);
+ esubdivideflag(obedit, em, SELECT,0,0,numcuts,SUBDIV_SELECT_LOOPCUT);
}
/* if this was a single cut, enter edgeslide mode */
if(numcuts == 1 && hasHidden == 0){
@@ -383,7 +383,7 @@ void CutEdgeloop(EditMesh *em, int numcuts)
EM_selectmode_set(em);
}
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
return;
}
@@ -449,7 +449,7 @@ static CutCurve *get_mouse_trail(int *len, char mode, char cutmode, struct GHash
/* prototype */
static float seg_intersect(struct EditEdge * e, CutCurve *c, int len, char mode, struct GHash *gh);
-void KnifeSubdivide(EditMesh *em, char mode)
+void KnifeSubdivide(Object *obedit, EditMesh *em, char mode)
{
EditEdge *eed;
EditVert *eve;
@@ -461,7 +461,7 @@ void KnifeSubdivide(EditMesh *em, char mode)
short numcuts=1;
float *scr, co[4];
- if (G.obedit==0) return;
+ if (em==NULL) return;
if (EM_nvertices_selected(em) < 2) {
error("No edges are selected to operate on");
@@ -488,7 +488,7 @@ void KnifeSubdivide(EditMesh *em, char mode)
scr = MEM_mallocN(sizeof(float)*2, "Vertex Screen Coordinates");
VECCOPY(co, eve->co);
co[3]= 1.0;
- Mat4MulVec4fl(G.obedit->obmat, co);
+// Mat4MulVec4fl(obedit->obmat, co);
// XXX project_float(co,scr);
BLI_ghash_insert(gh, eve, scr);
eve->f1 = 0; /*store vertex intersection flag here*/
@@ -514,9 +514,9 @@ void KnifeSubdivide(EditMesh *em, char mode)
eed= eed->next;
}
- if(mode==KNIFE_EXACT) esubdivideflag(em, SELECT, 0, B_KNIFE|B_PERCENTSUBD,1,SUBDIV_SELECT_ORIG);
- else if (mode==KNIFE_MIDPOINT) esubdivideflag(em, SELECT, 0, B_KNIFE,1,SUBDIV_SELECT_ORIG);
- else if (mode==KNIFE_MULTICUT) esubdivideflag(em, SELECT, 0, B_KNIFE,numcuts,SUBDIV_SELECT_ORIG);
+ if(mode==KNIFE_EXACT) esubdivideflag(obedit, em, SELECT, 0, B_KNIFE|B_PERCENTSUBD,1,SUBDIV_SELECT_ORIG);
+ else if (mode==KNIFE_MIDPOINT) esubdivideflag(obedit, em, SELECT, 0, B_KNIFE,1,SUBDIV_SELECT_ORIG);
+ else if (mode==KNIFE_MULTICUT) esubdivideflag(obedit, em, SELECT, 0, B_KNIFE,numcuts,SUBDIV_SELECT_ORIG);
eed=em->edges.first;
while(eed){
@@ -687,7 +687,7 @@ static float seg_intersect(EditEdge *e, CutCurve *c, int len, char mode, struct
return(perc);
}
-void LoopMenu(EditMesh *em) /* Called by KKey */
+void LoopMenu(Object *obedit, EditMesh *em) /* Called by KKey */
{
short ret;
@@ -696,16 +696,16 @@ void LoopMenu(EditMesh *em) /* Called by KKey */
switch (ret){
case 2:
- CutEdgeloop(em, 1);
+ CutEdgeloop(obedit, em, 1);
break;
case 3:
- KnifeSubdivide(em, KNIFE_EXACT);
+ KnifeSubdivide(obedit, em, KNIFE_EXACT);
break;
case 4:
- KnifeSubdivide(em, KNIFE_MIDPOINT);
+ KnifeSubdivide(obedit, em, KNIFE_MIDPOINT);
break;
case 5:
- KnifeSubdivide(em, KNIFE_MULTICUT);
+ KnifeSubdivide(obedit, em, KNIFE_MULTICUT);
break;
}
diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c
index fb7bb46982a..018df499dcc 100644
--- a/source/blender/editors/mesh/editmesh_mods.c
+++ b/source/blender/editors/mesh/editmesh_mods.c
@@ -98,14 +98,14 @@ static int pupmenu() {return 0;}
/* ****************************** MIRROR **************** */
-void EM_select_mirrored(EditMesh *em)
+void EM_select_mirrored(Object *obedit, EditMesh *em)
{
if(em->selectmode & SCE_SELECT_VERTEX) {
EditVert *eve, *v1;
for(eve= em->verts.first; eve; eve= eve->next) {
if(eve->f & SELECT) {
- v1= editmesh_get_x_mirror_vert(G.obedit, em, eve->co);
+ v1= editmesh_get_x_mirror_vert(obedit, em, eve->co);
if(v1) {
eve->f &= ~SELECT;
v1->f |= SELECT;
@@ -120,14 +120,14 @@ void EM_automerge(int update)
// XXX int len;
// if ((G.scene->automerge) &&
-// (G.obedit && G.obedit->type==OB_MESH) &&
-// (((Mesh*)G.obedit->data)->mr==NULL)
+// (obedit && obedit->type==OB_MESH) &&
+// (((Mesh*)obedit->data)->mr==NULL)
// ) {
// len = removedoublesflag(1, 1, G.scene->toolsettings->doublimit);
// if (len) {
// G.totvert -= len; /* saves doing a countall */
// if (update) {
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
// }
// }
// }
@@ -194,7 +194,7 @@ int EM_init_backbuf_border(ViewContext *vc, short xmin, short ymin, short xmax,
unsigned int *dr;
int a;
- if(G.obedit==NULL || vc->v3d->drawtype<OB_SOLID || (vc->v3d->flag & V3D_ZBUF_SELECT)==0) return 0;
+ if(vc->obedit==NULL || vc->v3d->drawtype<OB_SOLID || (vc->v3d->flag & V3D_ZBUF_SELECT)==0) return 0;
buf= view3d_read_backbuf(vc, xmin, ymin, xmax, ymax);
if(buf==NULL) return 0;
@@ -242,7 +242,7 @@ int EM_mask_init_backbuf_border(ViewContext *vc, short mcords[][2], short tot, s
int a;
/* method in use for face selecting too */
- if(G.obedit==NULL) {
+ if(vc->obedit==NULL) {
if(FACESEL_PAINT_TEST);
else return 0;
}
@@ -304,7 +304,7 @@ int EM_init_backbuf_circle(ViewContext *vc, short xs, short ys, short rads)
int radsq;
/* method in use for face selecting too */
- if(G.obedit==NULL) {
+ if(vc->obedit==NULL) {
if(FACESEL_PAINT_TEST);
else return 0;
}
@@ -475,7 +475,7 @@ static void findnearestedge__doClosest(void *userData, EditEdge *eed, int x0, in
vec[0]= eed->v1->co[0] + labda*(eed->v2->co[0] - eed->v1->co[0]);
vec[1]= eed->v1->co[1] + labda*(eed->v2->co[1] - eed->v1->co[1]);
vec[2]= eed->v1->co[2] + labda*(eed->v2->co[2] - eed->v1->co[2]);
- Mat4MulVecfl(G.obedit->obmat, vec);
+ Mat4MulVecfl(data->vc.obedit->obmat, vec);
if(view3d_test_clipping(data->vc.v3d, vec)==0) {
data->dist = distance;
@@ -610,147 +610,6 @@ static EditFace *findnearestface(ViewContext *vc, int *dist)
}
}
-#if 0
-/* for interactivity, frontbuffer draw in current window */
-static void draw_dm_mapped_vert__mapFunc(void *theVert, int index, float *co, float *no_f, short *no_s)
-{
- if (EM_get_vert_for_index(index)==theVert) {
- bglVertex3fv(co);
- }
-}
-static void draw_dm_mapped_vert(EditMesh *em, DerivedMesh *dm, EditVert *eve)
-{
- EM_init_index_arrays(em, 1, 0, 0);
- bglBegin(GL_POINTS);
- dm->foreachMappedVert(dm, draw_dm_mapped_vert__mapFunc, eve);
- bglEnd();
- EM_free_index_arrays();
-}
-
-static int draw_dm_mapped_edge__setDrawOptions(void *theEdge, int index)
-{
- return EM_get_edge_for_index(index)==theEdge;
-}
-static void draw_dm_mapped_edge(EditMesh *em, DerivedMesh *dm, EditEdge *eed)
-{
- EM_init_index_arrays(em, 0, 1, 0);
- dm->drawMappedEdges(dm, draw_dm_mapped_edge__setDrawOptions, eed);
- EM_free_index_arrays();
-}
-
-static void draw_dm_mapped_face_center__mapFunc(void *theFace, int index, float *cent, float *no)
-{
- if (EM_get_face_for_index(index)==theFace) {
- bglVertex3fv(cent);
- }
-}
-static void draw_dm_mapped_face_center(EditMesh *em, DerivedMesh *dm, EditFace *efa)
-{
- EM_init_index_arrays(em, 0, 0, 1);
- bglBegin(GL_POINTS);
- dm->foreachMappedFaceCenter(dm, draw_dm_mapped_face_center__mapFunc, efa);
- bglEnd();
- EM_free_index_arrays();
-}
-
-#endif
-
-static void unified_select_draw(EditMesh *em, EditVert *eve, EditEdge *eed, EditFace *efa)
-{
-#if 0
- /* XXX depricated, no frontbuffer, later we can partial copy? */
-
- DerivedMesh *dm = editmesh_get_derived_cage(CD_MASK_BAREMESH);
-
- glDrawBuffer(GL_FRONT);
-
-// XXX persp(PERSP_VIEW);
-
- if(v3d->flag & V3D_CLIPPING)
- view3d_set_clipping(v3d);
-
- glPushMatrix();
- mymultmatrix(G.obedit->obmat);
-
- /* face selected */
- if(efa) {
- if(em->selectmode & SCE_SELECT_VERTEX) {
- glPointSize(BIF_GetThemeValuef(TH_VERTEX_SIZE));
-
- if(efa->f & SELECT) BIF_ThemeColor(TH_VERTEX_SELECT);
- else BIF_ThemeColor(TH_VERTEX);
-
- bglBegin(GL_POINTS);
- bglVertex3fv(efa->v1->co);
- bglVertex3fv(efa->v2->co);
- bglVertex3fv(efa->v3->co);
- if(efa->v4) bglVertex3fv(efa->v4->co);
- bglEnd();
- }
-
- if(em->selectmode & (SCE_SELECT_EDGE|SCE_SELECT_FACE)) {
- if(efa->fgonf==0) {
- BIF_ThemeColor((efa->f & SELECT)?TH_EDGE_SELECT:TH_WIRE);
-
- draw_dm_mapped_edge(em, dm, efa->e1);
- draw_dm_mapped_edge(em, dm, efa->e2);
- draw_dm_mapped_edge(em, dm, efa->e3);
- if (efa->e4) {
- draw_dm_mapped_edge(em, dm, efa->e4);
- }
- }
- }
-
- if( CHECK_OB_DRAWFACEDOT(G.scene, v3d, G.obedit->dt) ) {
- if(efa->fgonf==0) {
- glPointSize(BIF_GetThemeValuef(TH_FACEDOT_SIZE));
- BIF_ThemeColor((efa->f & SELECT)?TH_FACE_DOT:TH_WIRE);
-
- draw_dm_mapped_face_center(em, dm, efa);
- }
- }
- }
- /* edge selected */
- if(eed) {
- if(em->selectmode & (SCE_SELECT_EDGE|SCE_SELECT_FACE)) {
- BIF_ThemeColor((eed->f & SELECT)?TH_EDGE_SELECT:TH_WIRE);
-
- draw_dm_mapped_edge(em, dm, eed);
- }
- if(em->selectmode & SCE_SELECT_VERTEX) {
- glPointSize(BIF_GetThemeValuef(TH_VERTEX_SIZE));
-
- BIF_ThemeColor((eed->f & SELECT)?TH_VERTEX_SELECT:TH_VERTEX);
-
- draw_dm_mapped_vert(em, dm, eed->v1);
- draw_dm_mapped_vert(em, dm, eed->v2);
- }
- }
- if(eve) {
- if(em->selectmode & SCE_SELECT_VERTEX) {
- glPointSize(BIF_GetThemeValuef(TH_VERTEX_SIZE));
-
- BIF_ThemeColor((eve->f & SELECT)?TH_VERTEX_SELECT:TH_VERTEX);
-
- draw_dm_mapped_vert(em, dm, eve);
- }
- }
-
- glPointSize(1.0);
- glPopMatrix();
-
- bglFlush();
- glDrawBuffer(GL_BACK);
-
- if(v3d->flag & V3D_CLIPPING)
- view3d_clr_clipping();
-
-
- dm->release(dm);
-#endif
-}
-
-
/* best distance based on screen coords.
use em->selectmode to define how to use
selected vertices and edges get disadvantage
@@ -1484,7 +1343,7 @@ void EM_mesh_copy_edge(EditMesh *em, short type)
}
if (change) {
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Copy Edge Attribute");
}
@@ -1613,7 +1472,7 @@ void EM_mesh_copy_face(EditMesh *em, short type)
}
if (change) {
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
if (type==3) {
// XXX allqueue(REDRAWIMAGE, 0);
}
@@ -1747,7 +1606,7 @@ void EM_mesh_copy_face_layer(EditMesh *em, short type)
}
if (change) {
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Copy Face Layer");
}
@@ -2102,9 +1961,6 @@ static void mouse_mesh_loop(ViewContext *vc)
edgeloop_select(em, eed, select);
}
- /* frontbuffer draw of last selected only */
- unified_select_draw(em, NULL, eed, NULL);
-
EM_selectmode_flush(em);
// if (EM_texFaceCheck())
@@ -2165,9 +2021,7 @@ static void mouse_mesh_loop(ViewContext *vc)
break;
}
- unified_select_draw(em, NULL, eed, NULL);
-
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
}
}
@@ -2228,20 +2082,18 @@ void mouse_mesh(bContext *C, short mval[2], short extend)
}
}
- /* frontbuffer draw of last selected only */
- unified_select_draw(vc.em, eve, eed, efa);
-
EM_selectmode_flush(vc.em);
// if (EM_texFaceCheck()) {
- if (efa && efa->mat_nr != G.obedit->actcol-1) {
- G.obedit->actcol= efa->mat_nr+1;
+ if (efa && efa->mat_nr != vc.obedit->actcol-1) {
+ vc.obedit->actcol= efa->mat_nr+1;
+ vc.em->mat_nr= efa->mat_nr;
// BIF_preview_changed(ID_MA);
}
}
- WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, G.obedit);
+ WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, vc.obedit);
// rightmouse_transform();
}
@@ -2481,7 +2333,7 @@ void hide_mesh(EditMesh *em, int swap)
EditFace *efa;
int a;
- if(G.obedit==0) return;
+ if(em==NULL) return;
/* hide happens on least dominant select mode, and flushes up, not down! (helps preventing errors in subsurf) */
/* - vertex hidden, always means edge is hidden too
@@ -2573,7 +2425,7 @@ void hide_mesh(EditMesh *em, int swap)
G.totedgesel= G.totfacesel= G.totvertsel= 0;
// if(EM_texFaceCheck())
- // DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+ // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Hide");
}
@@ -2584,7 +2436,7 @@ void reveal_mesh(EditMesh *em)
EditEdge *eed;
EditFace *efa;
- if(G.obedit==0) return;
+ if(em==NULL) return;
for(eve= em->verts.first; eve; eve= eve->next) {
if(eve->h) {
@@ -2611,7 +2463,7 @@ void reveal_mesh(EditMesh *em)
EM_selectmode_flush(em);
// if (EM_texFaceCheck())
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Reveal");
}
@@ -3245,7 +3097,7 @@ static int toggle_select_all_exec(bContext *C, wmOperator *op)
// if (EM_texFaceCheck())
- WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, G.obedit);
+ WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
return OPERATOR_FINISHED;
}
@@ -3600,7 +3452,7 @@ void Vertex_Menu(EditMesh *em)
break;
}
/* some items crashed because this is in the original W menu but not here. should really manage this better */
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
}
@@ -3647,16 +3499,16 @@ void Edge_Menu(EditMesh *em)
case 11:
// editmesh_mark_sharp(em, 1);
BIF_undo_push("Mark Sharp");
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
break;
case 12:
// editmesh_mark_sharp(em, 0);
BIF_undo_push("Clear Sharp");
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
break;
}
/* some items crashed because this is in the original W menu but not here. should really manage this better */
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
}
void Face_Menu(EditMesh *em)
@@ -3673,7 +3525,7 @@ void Face_Menu(EditMesh *em)
{
case 1:
// flip_editnormals(em);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Flip Normals");
break;
case 2:
@@ -3688,7 +3540,7 @@ void Face_Menu(EditMesh *em)
case 5: /* Quads to Tris */
// convert_to_triface(em, 0);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
break;
case 6: /* Tris to Quads */
// join_triangles(em);
@@ -3718,7 +3570,7 @@ void Face_Menu(EditMesh *em)
break;
}
/* some items crashed because this is in the original W menu but not here. should really manage this better */
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
}
@@ -3929,7 +3781,7 @@ void righthandfaces(EditMesh *em, int select) /* makes faces righthand turning *
recalc_editnormals(em);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
waitcursor(0);
}
@@ -4008,19 +3860,19 @@ void faceselect_align_view_to_selected(View3D *v3d, Mesh *me, int axis)
}
/* helper for below, to survive non-uniform scaled objects */
-static void face_getnormal_obspace(EditFace *efa, float *fno)
+static void face_getnormal_obspace(Object *obedit, EditFace *efa, float *fno)
{
float vec[4][3];
VECCOPY(vec[0], efa->v1->co);
- Mat4Mul3Vecfl(G.obedit->obmat, vec[0]);
+ Mat4Mul3Vecfl(obedit->obmat, vec[0]);
VECCOPY(vec[1], efa->v2->co);
- Mat4Mul3Vecfl(G.obedit->obmat, vec[1]);
+ Mat4Mul3Vecfl(obedit->obmat, vec[1]);
VECCOPY(vec[2], efa->v3->co);
- Mat4Mul3Vecfl(G.obedit->obmat, vec[2]);
+ Mat4Mul3Vecfl(obedit->obmat, vec[2]);
if(efa->v4) {
VECCOPY(vec[3], efa->v4->co);
- Mat4Mul3Vecfl(G.obedit->obmat, vec[3]);
+ Mat4Mul3Vecfl(obedit->obmat, vec[3]);
CalcNormFloat4(vec[0], vec[1], vec[2], vec[3], fno);
}
@@ -4028,7 +3880,7 @@ static void face_getnormal_obspace(EditFace *efa, float *fno)
}
-void editmesh_align_view_to_selected(EditMesh *em, View3D *v3d, int axis)
+void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, View3D *v3d, int axis)
{
int nselverts= EM_nvertices_selected(em);
float norm[3]={0.0, 0.0, 0.0}; /* used for storing the mesh normal */
@@ -4042,7 +3894,7 @@ void editmesh_align_view_to_selected(EditMesh *em, View3D *v3d, int axis)
if (faceselectedAND(efa, SELECT)) {
float fno[3];
- face_getnormal_obspace(efa, fno);
+ face_getnormal_obspace(obedit, efa, fno);
norm[0]+= fno[0];
norm[1]+= fno[1];
norm[2]+= fno[2];
@@ -4073,7 +3925,7 @@ void editmesh_align_view_to_selected(EditMesh *em, View3D *v3d, int axis)
}
}
- Mat4Mul3Vecfl(G.obedit->obmat, norm);
+ Mat4Mul3Vecfl(obedit->obmat, norm);
view3d_align_axis_to_vector(v3d, axis, norm);
}
else if (nselverts==2) { /* Align view to edge (or 2 verts) */
@@ -4090,7 +3942,7 @@ void editmesh_align_view_to_selected(EditMesh *em, View3D *v3d, int axis)
leve= eve;
}
}
- Mat4Mul3Vecfl(G.obedit->obmat, norm);
+ Mat4Mul3Vecfl(obedit->obmat, norm);
view3d_align_axis_to_vector(v3d, axis, norm);
}
else if (nselverts==1) { /* Align view to vert normal */
@@ -4104,23 +3956,23 @@ void editmesh_align_view_to_selected(EditMesh *em, View3D *v3d, int axis)
break; /* we know this is the only selected vert, so no need to keep looking */
}
}
- Mat4Mul3Vecfl(G.obedit->obmat, norm);
+ Mat4Mul3Vecfl(obedit->obmat, norm);
view3d_align_axis_to_vector(v3d, axis, norm);
}
}
/* **************** VERTEX DEFORMS *************** */
-void vertexsmooth(EditMesh *em)
+void vertexsmooth(Object *obedit, EditMesh *em)
{
EditVert *eve, *eve_mir = NULL;
EditEdge *eed;
float *adror, *adr, fac;
float fvec[3];
int teller=0;
- ModifierData *md= G.obedit->modifiers.first;
+ ModifierData *md= obedit->modifiers.first;
- if(G.obedit==0) return;
+ if(em==NULL) return;
/* count */
eve= em->verts.first;
@@ -4198,7 +4050,7 @@ void vertexsmooth(EditMesh *em)
if(eve->f1) {
// XXX if (G.scene->toolsettings->editbutflag & B_MESH_X_MIRROR) {
-// eve_mir= editmesh_get_x_mirror_vert(G.obedit, em, eve->co);
+// eve_mir= editmesh_get_x_mirror_vert(obedit, em, eve->co);
// }
adr = eve->tmp.p;
@@ -4237,21 +4089,21 @@ void vertexsmooth(EditMesh *em)
recalc_editnormals(em);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Vertex Smooth");
}
-void vertexnoise(EditMesh *em)
+void vertexnoise(Object *obedit, EditMesh *em)
{
Material *ma;
Tex *tex;
EditVert *eve;
float b2, ofs, vec[3];
- if(G.obedit==0) return;
+ if(em==NULL) return;
- ma= give_current_material(G.obedit, G.obedit->actcol);
+ ma= give_current_material(obedit, obedit->actcol);
if(ma==0 || ma->mtex[0]==0 || ma->mtex[0]->tex==0) {
return;
}
@@ -4283,33 +4135,31 @@ void vertexnoise(EditMesh *em)
}
recalc_editnormals(em);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Vertex Noise");
}
-void vertices_to_sphere(Scene *scene, View3D *v3d, EditMesh *em)
+void vertices_to_sphere(Scene *scene, View3D *v3d, Object *obedit, EditMesh *em)
{
EditVert *eve;
float *curs, len, vec[3], cent[3], fac, facm, imat[3][3], bmat[3][3];
int tot;
short perc=100;
- TEST_EDITMESH
-
// XXX if(button(&perc, 1, 100, "Percentage:")==0) return;
fac= perc/100.0;
facm= 1.0-fac;
- Mat3CpyMat4(bmat, G.obedit->obmat);
+ Mat3CpyMat4(bmat, obedit->obmat);
Mat3Inv(imat, bmat);
/* center */
curs= give_cursor(scene, v3d);
- cent[0]= curs[0]-G.obedit->obmat[3][0];
- cent[1]= curs[1]-G.obedit->obmat[3][1];
- cent[2]= curs[2]-G.obedit->obmat[3][2];
+ cent[0]= curs[0]-obedit->obmat[3][0];
+ cent[1]= curs[1]-obedit->obmat[3][1];
+ cent[2]= curs[2]-obedit->obmat[3][2];
Mat3MulVecfl(imat, cent);
len= 0.0;
@@ -4344,7 +4194,7 @@ void vertices_to_sphere(Scene *scene, View3D *v3d, EditMesh *em)
}
recalc_editnormals(em);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("To Sphere");
}
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 663ed2ef2c1..1d5e2b24d17 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -594,12 +594,11 @@ void hashvert_flag(EditMesh *em, int flag)
}
/* generic extern called extruder */
-void extrude_mesh(EditMesh *em)
+void extrude_mesh(Object *obedit, EditMesh *em)
{
float nor[3]= {0.0, 0.0, 0.0};
short nr, transmode= 0;
- TEST_EDITMESH
if(multires_test()) return;
if(em->selectmode & SCE_SELECT_VERTEX) {
@@ -631,7 +630,7 @@ void extrude_mesh(EditMesh *em)
if(nr<1) return;
- if(nr==1) transmode= extrudeflag(em, SELECT, nor);
+ if(nr==1) transmode= extrudeflag(obedit, em, SELECT, nor);
else if(nr==4) transmode= extrudeflag_verts_indiv(em, SELECT, nor);
else if(nr==3) transmode= extrudeflag_edges_indiv(em, SELECT, nor);
else transmode= extrudeflag_face_indiv(em, SELECT, nor);
@@ -648,8 +647,8 @@ void extrude_mesh(EditMesh *em)
* This shouldn't be necessary, derived queries should be
* automatically building this data if invalid. Or something.
*/
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
- object_handle_update(G.obedit);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+ object_handle_update(obedit);
/* individual faces? */
// BIF_TransformSetUndo("Extrude");
@@ -660,8 +659,8 @@ void extrude_mesh(EditMesh *em)
else {
// initTransform(TFM_TRANSLATION, CTX_NO_PET|CTX_NO_MIRROR);
if(transmode=='n') {
- Mat4MulVecfl(G.obedit->obmat, nor);
- VecSubf(nor, nor, G.obedit->obmat[3]);
+ Mat4MulVecfl(obedit->obmat, nor);
+ VecSubf(nor, nor, obedit->obmat[3]);
// BIF_setSingleAxisConstraint(nor, "along normal");
}
// Transform();
@@ -673,7 +672,6 @@ void extrude_mesh(EditMesh *em)
void split_mesh(EditMesh *em)
{
- TEST_EDITMESH
if(multires_test()) return;
if(okee(" Split ")==0) return;
@@ -688,18 +686,17 @@ void split_mesh(EditMesh *em)
waitcursor(0);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Split");
}
-void extrude_repeat_mesh(View3D *v3d, EditMesh *em, int steps, float offs)
+void extrude_repeat_mesh(View3D *v3d, Object *obedit, EditMesh *em, int steps, float offs)
{
float dvec[3], tmat[3][3], bmat[3][3], nor[3]= {0.0, 0.0, 0.0};
short a;
- TEST_EDITMESH
if(multires_test()) return;
/* dvec */
@@ -712,12 +709,12 @@ void extrude_repeat_mesh(View3D *v3d, EditMesh *em, int steps, float offs)
dvec[2]*= offs;
/* base correction */
- Mat3CpyMat4(bmat, G.obedit->obmat);
+ Mat3CpyMat4(bmat, obedit->obmat);
Mat3Inv(tmat, bmat);
Mat3MulVecfl(tmat, dvec);
for(a=0; a<steps; a++) {
- extrudeflag(em, SELECT, nor);
+ extrudeflag(obedit, em, SELECT, nor);
translateflag(em, SELECT, dvec);
}
@@ -725,12 +722,12 @@ void extrude_repeat_mesh(View3D *v3d, EditMesh *em, int steps, float offs)
EM_fgon_flags(em);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Extrude Repeat");
}
-void spin_mesh(View3D *v3d, EditMesh *em, int steps, float degr, float *dvec, int mode)
+void spin_mesh(View3D *v3d, Object *obedit, EditMesh *em, int steps, float degr, float *dvec, int mode)
{
EditVert *eve,*nextve;
float nor[3]= {0.0, 0.0, 0.0};
@@ -739,18 +736,17 @@ void spin_mesh(View3D *v3d, EditMesh *em, int steps, float degr, float *dvec, in
float phi;
short a,ok;
- TEST_EDITMESH
if(multires_test()) return;
/* imat and center and size */
- Mat3CpyMat4(bmat, G.obedit->obmat);
+ Mat3CpyMat4(bmat, obedit->obmat);
Mat3Inv(imat,bmat);
curs= give_cursor(NULL, v3d);
VECCOPY(cent, curs);
- cent[0]-= G.obedit->obmat[3][0];
- cent[1]-= G.obedit->obmat[3][1];
- cent[2]-= G.obedit->obmat[3][2];
+ cent[0]-= obedit->obmat[3][0];
+ cent[1]-= obedit->obmat[3][1];
+ cent[2]-= obedit->obmat[3][2];
Mat3MulVecfl(imat, cent);
phi= degr*M_PI/360.0;
@@ -782,7 +778,7 @@ void spin_mesh(View3D *v3d, EditMesh *em, int steps, float degr, float *dvec, in
ok= 1;
for(a=0;a<steps;a++) {
- if(mode==0) ok= extrudeflag(em, SELECT, nor);
+ if(mode==0) ok= extrudeflag(obedit, em, SELECT, nor);
else adduplicateflag(em, SELECT);
if(ok==0) {
error("No valid vertices are selected");
@@ -811,20 +807,19 @@ void spin_mesh(View3D *v3d, EditMesh *em, int steps, float degr, float *dvec, in
EM_fgon_flags(em);
- // DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+ // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
if(dvec==NULL) BIF_undo_push("Spin");
}
-void screw_mesh(EditMesh *em, int steps, int turns)
+void screw_mesh(Object *obedit, EditMesh *em, int steps, int turns)
{
View3D *v3d= NULL; // XXX
EditVert *eve,*v1=0,*v2=0;
EditEdge *eed;
float dvec[3], nor[3];
- TEST_EDITMESH
if(multires_test()) return;
/* clear flags */
@@ -868,7 +863,7 @@ void screw_mesh(EditMesh *em, int steps, int turns)
dvec[1]= ( (v1->co[1]- v2->co[1]) )/(steps);
dvec[2]= ( (v1->co[2]- v2->co[2]) )/(steps);
- VECCOPY(nor, G.obedit->obmat[2]);
+ VECCOPY(nor, obedit->obmat[2]);
if(nor[0]*dvec[0]+nor[1]*dvec[1]+nor[2]*dvec[2]>0.000) {
dvec[0]= -dvec[0];
@@ -876,7 +871,7 @@ void screw_mesh(EditMesh *em, int steps, int turns)
dvec[2]= -dvec[2];
}
- spin_mesh(v3d, em, turns*steps, turns*360, dvec, 0);
+ spin_mesh(v3d, obedit, em, turns*steps, turns*360, dvec, 0);
BIF_undo_push("Spin");
}
@@ -928,7 +923,7 @@ static void erase_vertices(EditMesh *em, ListBase *l)
}
}
-void delete_mesh(EditMesh *em)
+void delete_mesh(Object *obedit, EditMesh *em)
{
EditFace *efa, *nextvl;
EditVert *eve,*nextve;
@@ -937,7 +932,6 @@ void delete_mesh(EditMesh *em)
int count;
char *str="Erase";
- TEST_EDITMESH
if(multires_test()) return;
event= pupmenu("Erase %t|Vertices%x10|Edges%x1|Faces%x2|All%x3|Edges & Faces%x4|Only Faces%x5|Edge Loop%x6");
@@ -1068,7 +1062,7 @@ void delete_mesh(EditMesh *em)
EM_fgon_flags(em); // redo flags and indices for fgons
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push(str);
}
@@ -1082,7 +1076,7 @@ void fill_mesh(EditMesh *em)
EditFace *efa,*nextvl, *efan;
short ok;
- if(G.obedit==0 || (G.obedit->type!=OB_MESH)) return;
+ if(em==NULL) return;
if(multires_test()) return;
waitcursor(1);
@@ -1136,7 +1130,7 @@ void fill_mesh(EditMesh *em)
}
}
- if(BLI_edgefill(0, (G.obedit && G.obedit->actcol)?(G.obedit->actcol-1):0)) {
+ if(BLI_edgefill(0, em->mat_nr)) {
efa= fillfacebase.first;
while(efa) {
/* normals default pointing up */
@@ -1151,7 +1145,7 @@ void fill_mesh(EditMesh *em)
waitcursor(0);
EM_select_flush(em);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Fill");
}
@@ -2366,7 +2360,7 @@ static EditVert *subdivideedgenum(EditMesh *em, EditEdge *edge, int curpoint, in
return ev;
}
-void esubdivideflag(EditMesh *em, int flag, float rad, int beauty, int numcuts, int seltype)
+void esubdivideflag(Object *obedit, EditMesh *em, int flag, float rad, int beauty, int numcuts, int seltype)
{
EditFace *ef;
EditEdge *eed, *cedge, *sort[4];
@@ -2374,7 +2368,7 @@ void esubdivideflag(EditMesh *em, int flag, float rad, int beauty, int numcuts,
struct GHash *gh;
float length[4], v1mat[3], v2mat[3], v3mat[3], v4mat[3];
int i, j, edgecount, touchcount, facetype,hold;
- ModifierData *md= G.obedit->modifiers.first;
+ ModifierData *md= obedit->modifiers.first;
int ctrl= 0; // XXX
if(multires_test()) return;
@@ -2438,10 +2432,10 @@ void esubdivideflag(EditMesh *em, int flag, float rad, int beauty, int numcuts,
VECCOPY(v2mat, ef->v2->co);
VECCOPY(v3mat, ef->v3->co);
VECCOPY(v4mat, ef->v4->co);
- Mat4Mul3Vecfl(G.obedit->obmat, v1mat);
- Mat4Mul3Vecfl(G.obedit->obmat, v2mat);
- Mat4Mul3Vecfl(G.obedit->obmat, v3mat);
- Mat4Mul3Vecfl(G.obedit->obmat, v4mat);
+ Mat4Mul3Vecfl(obedit->obmat, v1mat);
+ Mat4Mul3Vecfl(obedit->obmat, v2mat);
+ Mat4Mul3Vecfl(obedit->obmat, v3mat);
+ Mat4Mul3Vecfl(obedit->obmat, v4mat);
length[0] = VecLenf(v1mat, v2mat);
length[1] = VecLenf(v2mat, v3mat);
@@ -2532,7 +2526,7 @@ void esubdivideflag(EditMesh *em, int flag, float rad, int beauty, int numcuts,
}
}
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
// Now for each face in the mesh we need to figure out How many edges were cut
// and which filling method to use for that face
for(ef = em->faces.first;ef;ef = ef->next) {
@@ -2735,7 +2729,7 @@ void esubdivideflag(EditMesh *em, int flag, float rad, int beauty, int numcuts,
}
recalc_editnormals(em);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
}
static int count_selected_edges(EditEdge *ed)
@@ -3085,7 +3079,7 @@ void beauty_fill(EditMesh *em)
EM_select_flush(em);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Beauty Fill");
}
@@ -3390,7 +3384,7 @@ void join_triangles(EditMesh *em)
if(edsortblock) MEM_freeN(edsortblock);
EM_selectmode_flush(em);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Convert Triangles to Quads");
}
@@ -3488,7 +3482,7 @@ void edge_flip(EditMesh *em)
MEM_freeN(efaar);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Flip Triangle Edges");
@@ -3725,7 +3719,7 @@ void edge_rotate_selected(EditMesh *em, int dir)
/* flush selected vertices (again) to edges/faces */
EM_select_flush(em);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Rotate Edge");
}
@@ -3849,7 +3843,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc)
// initNumInput(&num);
-// view3d_get_object_project_mat(curarea, G.obedit, projectMat, viewMat);
+// view3d_get_object_project_mat(curarea, obedit, projectMat, viewMat);
mvalo[0] = -1; mvalo[1] = -1;
numsel =0;
@@ -4417,7 +4411,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc)
// scrarea_do_windraw(curarea);
// persp(PERSP_VIEW);
// glPushMatrix();
-// mymultmatrix(G.obedit->obmat);
+// mymultmatrix(obedit->obmat);
glColor3ub(0, 255, 0);
glBegin(GL_LINES);
@@ -4549,7 +4543,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc)
} else {
draw = 0;
}
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
}
@@ -4569,7 +4563,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc)
if(!immediate)
EM_automerge(0);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
// scrarea_queue_winredraw(curarea);
//BLI_ghash_free(edgesgh, freeGHash, NULL);
@@ -4618,7 +4612,7 @@ int EdgeLoopDelete(EditMesh *em)
EM_select_more(em);
removedoublesflag(em, 1,0, 0.001);
EM_select_flush(em);
- // DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+ // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
return 1;
}
@@ -4700,9 +4694,7 @@ void mesh_set_smooth_faces(EditMesh *em, short event)
{
EditFace *efa;
- if(G.obedit==0) return;
-
- if(G.obedit->type != OB_MESH) return;
+ if(em==NULL) return;
efa= em->faces.first;
while(efa) {
@@ -4713,7 +4705,7 @@ void mesh_set_smooth_faces(EditMesh *em, short event)
efa= efa->next;
}
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
if(event==1) BIF_undo_push("Set Smooth");
else if(event==0) BIF_undo_push("Set Solid");
@@ -4771,7 +4763,7 @@ void mesh_rip(EditMesh *em)
EM_selectmode_set(em);
// XXX getmouseco_areawin(mval);
-// view3d_get_object_project_mat(curarea, G.obedit, projectMat, viewMat);
+// view3d_get_object_project_mat(curarea, obedit, projectMat, viewMat);
/* find best face, exclude triangles and break on face select or faces with 2 edges select */
mindist= 1000000.0f;
@@ -4957,10 +4949,10 @@ void mesh_rip(EditMesh *em)
// XXX G.scene->proportional = prop;
}
-void shape_propagate(Scene *scene, EditMesh *em)
+void shape_propagate(Scene *scene, Object *obedit, EditMesh *em)
{
EditVert *ev = NULL;
- Mesh* me = (Mesh*)G.obedit->data;
+ Mesh* me = (Mesh*)obedit->data;
Key* ky = NULL;
KeyBlock* kb = NULL;
Base* base=NULL;
@@ -4996,7 +4988,7 @@ void shape_propagate(Scene *scene, EditMesh *em)
}
BIF_undo_push("Propagate Blendshape Verts");
- DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
+ DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
return;
}
@@ -5041,7 +5033,7 @@ void shape_copy_from_lerp(EditMesh *em, KeyBlock* thisBlock, KeyBlock* fromBlock
}
}
sprintf(str,"Blending at %d%c MMB to Copy at 100%c",(int)(perc*100),'%','%');
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
// headerprint(str);
// force_draw(0);
@@ -5083,11 +5075,11 @@ void shape_copy_from_lerp(EditMesh *em, KeyBlock* thisBlock, KeyBlock* fromBlock
-void shape_copy_select_from(EditMesh *em)
+void shape_copy_select_from(Object *obedit, EditMesh *em)
{
- Mesh* me = (Mesh*)G.obedit->data;
+ Mesh* me = (Mesh*)obedit->data;
EditVert *ev = NULL;
- int totverts = 0,curshape = G.obedit->shapenr;
+ int totverts = 0,curshape = obedit->shapenr;
Key* ky = NULL;
KeyBlock *kb = NULL,*thisBlock = NULL;
@@ -5641,7 +5633,7 @@ int collapseEdges(EditMesh *em)
freecollections(&allcollections);
removedoublesflag(em, 1, 0, MERGELIMIT);
/*get rid of this!*/
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
// if (EM_texFaceCheck())
@@ -5701,7 +5693,7 @@ int merge_target(EditMesh *em, int target, int uvmerge)
collapseuvs(em, NULL);
}
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
return removedoublesflag(em, 1, 0, MERGELIMIT);
@@ -5866,7 +5858,7 @@ void pathselect(EditMesh *em)
MEM_freeN(previous);
BLI_heap_free(heap, NULL);
EM_select_flush(em);
- // DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+ // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
// if (EM_texFaceCheck())
}
@@ -5903,7 +5895,7 @@ void region_to_loop(EditMesh *em)
em->selectmode = SCE_SELECT_EDGE;
EM_selectmode_set(em);
- // DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+ // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
// if (EM_texFaceCheck())
@@ -6062,7 +6054,7 @@ void loop_to_region(EditMesh *em)
}
freecollections(&allcollections);
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
// if (EM_texFaceCheck())
@@ -6134,7 +6126,7 @@ void mesh_rotate_uvs(EditMesh *em)
}
if (change) {
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Rotate UV face");
}
@@ -6217,7 +6209,7 @@ void mesh_mirror_uvs(EditMesh *em)
}
if (change) {
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Mirror UV face");
}
@@ -6267,7 +6259,7 @@ void mesh_rotate_colors(EditMesh *em)
}
if (change) {
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Rotate Color face");
}
@@ -6316,7 +6308,7 @@ void mesh_mirror_colors(EditMesh *em)
}
if (change) {
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Mirror Color face");
}
}
diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h
index a23e3e42012..8000d227885 100644
--- a/source/blender/editors/mesh/mesh_intern.h
+++ b/source/blender/editors/mesh/mesh_intern.h
@@ -35,8 +35,6 @@
struct bContext;
struct wmOperatorType;
-#define TEST_EDITMESH if(G.obedit==0) return; /* layer test XXX */
-
#define UVCOPY(t, s) memcpy(t, s, 2 * sizeof(float));
/* ******************** editface.c */
@@ -136,8 +134,8 @@ void recalc_editnormals(EditMesh *em);
extern short extrudeflag_face_indiv(EditMesh *em, short flag, float *nor);
extern short extrudeflag_verts_indiv(EditMesh *em, short flag, float *nor);
extern short extrudeflag_edges_indiv(EditMesh *em, short flag, float *nor);
-extern short extrudeflag_vert(EditMesh *em, short flag, float *nor);
-extern short extrudeflag(EditMesh *em, short flag, float *nor);
+extern short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor);
+extern short extrudeflag(Object *obedit, EditMesh *em, short flag, float *nor);
extern void adduplicateflag(EditMesh *em, int flag);
extern void delfaceflag(EditMesh *em, int flag);
@@ -193,7 +191,7 @@ extern EditVert *findnearestvert(ViewContext *vc, int *dist, short sel, short st
void join_triangles(EditMesh *em);
int removedoublesflag(EditMesh *em, short flag, short automerge, float limit); /* return amount */
-void esubdivideflag(EditMesh *em, int flag, float rad, int beauty, int numcuts, int seltype);
+void esubdivideflag(Object *obedit, EditMesh *em, int flag, float rad, int beauty, int numcuts, int seltype);
int EdgeSlide(EditMesh *em, short immediate, float imperc);
diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index 97ce1ec617a..94730be507c 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -118,7 +118,7 @@ int join_mesh(Scene *scene, View3D *v3d)
MDeformVert *dvert;
CustomData vdata, edata, fdata;
- if(G.obedit) return 0;
+ if(scene->obedit) return 0;
ob= OBACT;
if(!ob || ob->type!=OB_MESH) return 0;
@@ -445,7 +445,7 @@ void sort_faces(Scene *scene, View3D *v3d)
int ctrl= 0; // XXX
if(!ob) return;
- if(G.obedit) return;
+ if(scene->obedit) return;
if(ob->type!=OB_MESH) return;
if (!v3d) return;
@@ -709,7 +709,7 @@ intptr_t mesh_octree_table(Object *ob, EditMesh *em, float *co, char mode)
if(MeshOctree.table) {
Mesh *me= ob->data;
bt= MeshOctree.table + mesh_octree_get_base_offs(co, MeshOctree.offs, MeshOctree.div);
- if(ob==G.obedit)
+ if(me->edit_mesh)
return mesh_octree_find_index(bt, NULL, NULL, co);
else
return mesh_octree_find_index(bt, MeshOctree.orco, me->mvert, co);
@@ -724,7 +724,7 @@ intptr_t mesh_octree_table(Object *ob, EditMesh *em, float *co, char mode)
* we are using the undeformed coordinates*/
INIT_MINMAX(min, max);
- if(ob==G.obedit) {
+ if(me->edit_mesh==em) {
EditVert *eve;
for(eve= em->verts.first; eve; eve= eve->next)
@@ -765,7 +765,7 @@ intptr_t mesh_octree_table(Object *ob, EditMesh *em, float *co, char mode)
MeshOctree.table= MEM_callocN(MOC_RES*MOC_RES*MOC_RES*sizeof(void *), "sym table");
- if(ob==G.obedit) {
+ if(me->edit_mesh==em) {
EditVert *eve;
for(eve= em->verts.first; eve; eve= eve->next) {
@@ -1106,7 +1106,7 @@ void objects_bake_render(Scene *scene, short event, char **error_msg)
static void objects_bake_render_ui(Scene *scene, short event)
{
char *error_msg = NULL;
-// int is_editmode = (G.obedit!=NULL);
+// int is_editmode = (obedit!=NULL);
/* Deal with editmode, this is a bit clunky but since UV's are in editmode, users are likely to bake from their */
// XXX if (is_editmode) exit_editmode(0);
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 9d18d300e99..87f0d5ee80e 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -254,7 +254,7 @@ void add_object_draw(Scene *scene, View3D *v3d, int type) /* for toolbox or menu
exit_paint_modes();
-// XXX if (G.obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* freedata, and undo */
+// XXX if (obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* freedata, and undo */
ob= add_object(type);
// ED_base_object_activate(C, BASACT);
base_init_from_view3d(BASACT, v3d);
@@ -285,7 +285,7 @@ void add_objectLamp(Scene *scene, View3D *v3d, short type)
{
Lamp *la;
- if(G.obedit==0) {
+ if(scene->obedit==NULL) { // XXX get from context
add_object_draw(scene, v3d, OB_LAMP);
base_init_from_view3d(BASACT, v3d);
}
@@ -311,7 +311,7 @@ void delete_obj(Scene *scene, View3D *v3d, int ok)
Base *base, *nbase;
int islamp= 0;
- if(G.obedit) return;
+ if(scene->obedit) return; // XXX get from context
if(scene->id.lib) return;
for(base= FIRSTBASE; base; base= nbase) {
@@ -399,7 +399,7 @@ static int return_editmesh_indexar(EditMesh *em, int *tot, int **indexar, float
return totvert;
}
-static int return_editmesh_vgroup(EditMesh *em, char *name, float *cent)
+static int return_editmesh_vgroup(Object *obedit, EditMesh *em, char *name, float *cent)
{
MDeformVert *dvert;
EditVert *eve;
@@ -407,7 +407,7 @@ static int return_editmesh_vgroup(EditMesh *em, char *name, float *cent)
cent[0]= cent[1]= cent[2]= 0.0;
- if(G.obedit->actdef) {
+ if(obedit->actdef) {
/* find the vertices */
for(eve= em->verts.first; eve; eve= eve->next) {
@@ -415,7 +415,7 @@ static int return_editmesh_vgroup(EditMesh *em, char *name, float *cent)
if(dvert) {
for(i=0; i<dvert->totweight; i++){
- if(dvert->dw[i].def_nr == (G.obedit->actdef-1)) {
+ if(dvert->dw[i].def_nr == (obedit->actdef-1)) {
totvert++;
VecAddf(cent, cent, eve->co);
}
@@ -423,7 +423,7 @@ static int return_editmesh_vgroup(EditMesh *em, char *name, float *cent)
}
}
if(totvert) {
- bDeformGroup *defGroup = BLI_findlink(&G.obedit->defbase, G.obedit->actdef-1);
+ bDeformGroup *defGroup = BLI_findlink(&obedit->defbase, obedit->actdef-1);
strcpy(name, defGroup->name);
VecMulf(cent, 1.0f/(float)totvert);
return 1;
@@ -608,19 +608,19 @@ static void apply_obmat(Object *ob)
}
-int hook_getIndexArray(int *tot, int **indexar, char *name, float *cent_r)
+int hook_getIndexArray(Object *obedit, int *tot, int **indexar, char *name, float *cent_r)
{
*indexar= NULL;
*tot= 0;
name[0]= 0;
- switch(G.obedit->type) {
+ switch(obedit->type) {
case OB_MESH:
{
- Mesh *me= G.obedit->data;
+ Mesh *me= obedit->data;
/* check selected vertices first */
if( return_editmesh_indexar(me->edit_mesh, tot, indexar, cent_r)) return 1;
- else return return_editmesh_vgroup(me->edit_mesh, name, cent_r);
+ else return return_editmesh_vgroup(obedit, me->edit_mesh, name, cent_r);
}
case OB_CURVE:
case OB_SURF:
@@ -694,8 +694,9 @@ void add_hook(Scene *scene, View3D *v3d, int mode)
ModifierData *md = NULL;
HookModifierData *hmd = NULL;
Object *ob=NULL;
+ Object *obedit= scene->obedit; // XXX get from context
- if(G.obedit==NULL) return;
+ if(obedit==NULL) return;
/* preconditions */
if(mode==2) { /* selected object */
@@ -718,7 +719,7 @@ void add_hook(Scene *scene, View3D *v3d, int mode)
char *cp;
/* make pupmenu with hooks */
- for(md=G.obedit->modifiers.first; md; md= md->next) {
+ for(md=obedit->modifiers.first; md; md= md->next) {
if (md->type==eModifierType_Hook)
maxlen+=32;
}
@@ -734,7 +735,7 @@ void add_hook(Scene *scene, View3D *v3d, int mode)
else if(mode==5) strcpy(cp, "Select %t|");
else if(mode==6) strcpy(cp, "Clear Offset %t|");
- for(md=G.obedit->modifiers.first; md; md= md->next) {
+ for(md=obedit->modifiers.first; md; md= md->next) {
if (md->type==eModifierType_Hook) {
strcat(cp, md->name);
strcat(cp, " |");
@@ -747,7 +748,7 @@ void add_hook(Scene *scene, View3D *v3d, int mode)
if(nr<1) return;
a= 1;
- for(md=G.obedit->modifiers.first; md; md=md->next) {
+ for(md=obedit->modifiers.first; md; md=md->next) {
if (md->type==eModifierType_Hook) {
if(a==nr) break;
a++;
@@ -764,7 +765,7 @@ void add_hook(Scene *scene, View3D *v3d, int mode)
int tot, ok, *indexar;
char name[32];
- ok = hook_getIndexArray(&tot, &indexar, name, cent);
+ ok = hook_getIndexArray(obedit, &tot, &indexar, name, cent);
if(ok==0) {
error("Requires selected vertices or active Vertex Group");
@@ -781,7 +782,7 @@ void add_hook(Scene *scene, View3D *v3d, int mode)
ob->lay= newbase->lay;
/* transform cent to global coords for loc */
- VecMat4MulVecfl(ob->loc, G.obedit->obmat, cent);
+ VecMat4MulVecfl(ob->loc, obedit->obmat, cent);
/* restore, add_object sets active */
BASACT= base;
@@ -790,14 +791,14 @@ void add_hook(Scene *scene, View3D *v3d, int mode)
/* new hook */
if(mode==1 || mode==2) {
- ModifierData *md = G.obedit->modifiers.first;
+ ModifierData *md = obedit->modifiers.first;
while (md && modifierType_getInfo(md->type)->type==eModifierTypeType_OnlyDeform) {
md = md->next;
}
hmd = (HookModifierData*) modifier_new(eModifierType_Hook);
- BLI_insertlinkbefore(&G.obedit->modifiers, md, hmd);
+ BLI_insertlinkbefore(&obedit->modifiers, md, hmd);
sprintf(hmd->modifier.name, "Hook-%s", ob->id.name+2);
}
else if (hmd->indexar) MEM_freeN(hmd->indexar); /* reassign, hook was set */
@@ -817,24 +818,24 @@ void add_hook(Scene *scene, View3D *v3d, int mode)
Mat4Invert(ob->imat, ob->obmat);
/* apparently this call goes from right to left... */
- Mat4MulSerie(hmd->parentinv, ob->imat, G.obedit->obmat, NULL,
+ Mat4MulSerie(hmd->parentinv, ob->imat, obedit->obmat, NULL,
NULL, NULL, NULL, NULL, NULL);
}
}
}
else if(mode==3) { /* remove */
- BLI_remlink(&G.obedit->modifiers, md);
+ BLI_remlink(&obedit->modifiers, md);
modifier_free(md);
}
else if(mode==5) { /* select */
- obedit_hook_select(G.obedit, hmd);
+ obedit_hook_select(obedit, hmd);
}
else if(mode==6) { /* clear offset */
where_is_object(ob); /* ob is hook->parent */
Mat4Invert(ob->imat, ob->obmat);
/* this call goes from right to left... */
- Mat4MulSerie(hmd->parentinv, ob->imat, G.obedit->obmat, NULL,
+ Mat4MulSerie(hmd->parentinv, ob->imat, obedit->obmat, NULL,
NULL, NULL, NULL, NULL, NULL);
}
@@ -862,11 +863,12 @@ static void ignore_parent_tx( Object *ob )
void add_hook_menu(Scene *scene, View3D *v3d)
{
+ Object *obedit= scene->obedit; // XXX get from context
int mode;
- if(G.obedit==NULL) return;
+ if(obedit==NULL) return;
- if(modifiers_findByType(G.obedit, eModifierType_Hook))
+ if(modifiers_findByType(obedit, eModifierType_Hook))
mode= pupmenu("Hooks %t|Add, To New Empty %x1|Add, To Selected Object %x2|Remove... %x3|Reassign... %x4|Select... %x5|Clear Offset...%x6");
else
mode= pupmenu("Hooks %t|Add, New Empty %x1|Add, To Selected Object %x2");
@@ -888,9 +890,9 @@ void make_track(Scene *scene, View3D *v3d, short mode)
/*short mode=0;*/
if(scene->id.lib) return;
- if(G.obedit) {
- return;
- }
+// XXX if(obedit) {
+// return;
+// }
if(BASACT==0) return;
mode= pupmenu("Make Track %t|TrackTo Constraint %x1|LockTrack Constraint %x2|Old Track %x3");
@@ -1037,7 +1039,7 @@ static EnumPropertyItem prop_clear_track_types[] = {
/* note, poll should check for editable scene */
static int object_clear_track_exec(bContext *C, wmOperator *op)
{
- if(G.obedit) return OPERATOR_CANCELLED;
+ if(CTX_data_edit_object(C)) return OPERATOR_CANCELLED;
CTX_DATA_BEGIN(C, Object*, ob, selected_objects) {
/*if(TESTBASELIB(v3d, base)) {*/
@@ -1324,7 +1326,6 @@ static int object_clear_location_exec(bContext *C, wmOperator *op)
void OBJECT_OT_clear_location(wmOperatorType *ot)
{
- PropertyRNA *prop;
/* identifiers */
ot->name= "Clear Object Location";
@@ -1377,7 +1378,6 @@ static int object_clear_rotation_exec(bContext *C, wmOperator *op)
void OBJECT_OT_clear_rotation(wmOperatorType *ot)
{
- PropertyRNA *prop;
/* identifiers */
ot->name= "Clear Object Rotation";
@@ -1434,7 +1434,6 @@ static int object_clear_scale_exec(bContext *C, wmOperator *op)
void OBJECT_OT_clear_scale(wmOperatorType *ot)
{
- PropertyRNA *prop;
/* identifiers */
ot->name= "Clear Object Scale";
@@ -1535,7 +1534,7 @@ void set_slowparent(Scene *scene, View3D *v3d)
// XXX
#define BEZSELECTED_HIDDENHANDLES(bezt) ((G.f & G_HIDDENHANDLES) ? (bezt)->f2 & SELECT : BEZSELECTED(bezt))
/* only in edit mode */
-void make_vertex_parent(Scene *scene, View3D *v3d)
+void make_vertex_parent(Scene *scene, Object *obedit, View3D *v3d)
{
EditVert *eve;
Base *base;
@@ -1547,8 +1546,8 @@ void make_vertex_parent(Scene *scene, View3D *v3d)
/* we need 1 to 3 selected vertices */
- if(G.obedit->type==OB_MESH) {
- Mesh *me= G.obedit->data;
+ if(obedit->type==OB_MESH) {
+ Mesh *me= obedit->data;
eve= me->edit_mesh->verts.first;
while(eve) {
@@ -1563,7 +1562,7 @@ void make_vertex_parent(Scene *scene, View3D *v3d)
eve= eve->next;
}
}
- else if(ELEM(G.obedit->type, OB_SURF, OB_CURVE)) {
+ else if(ELEM(obedit->type, OB_SURF, OB_CURVE)) {
extern ListBase editNurb;
nu= editNurb.first;
while(nu) {
@@ -1600,7 +1599,7 @@ void make_vertex_parent(Scene *scene, View3D *v3d)
nu= nu->next;
}
}
- else if(G.obedit->type==OB_LATTICE) {
+ else if(obedit->type==OB_LATTICE) {
a= editLatt->pntsu*editLatt->pntsv*editLatt->pntsw;
bp= editLatt->def;
@@ -2091,14 +2090,14 @@ void ED_object_exit_editmode(bContext *C, int flag)
{
Scene *scene= CTX_data_scene(C);
Object *ob;
-// Object *obedit= CTX_data_edit_object(C);
+ Object *obedit= CTX_data_edit_object(C);
int freedata = flag & EM_FREEDATA;
- if(G.obedit==NULL) return;
+ if(obedit==NULL) return;
if(flag & EM_WAITCURSOR) waitcursor(1);
- if(G.obedit->type==OB_MESH) {
- Mesh *me= G.obedit->data;
+ if(obedit->type==OB_MESH) {
+ Mesh *me= obedit->data;
// if(EM_texFaceCheck())
@@ -2109,40 +2108,40 @@ void ED_object_exit_editmode(bContext *C, int flag)
error("Too many vertices");
return;
}
- load_editMesh(scene, G.obedit);
+ load_editMesh(scene, obedit);
if(freedata) free_editMesh(me->edit_mesh);
if(G.f & G_WEIGHTPAINT)
- mesh_octree_table(G.obedit, NULL, NULL, 'e');
+ mesh_octree_table(obedit, NULL, NULL, 'e');
}
- else if (G.obedit->type==OB_ARMATURE){
+ else if (obedit->type==OB_ARMATURE){
// load_editArmature();
// if (freedata) free_editArmature();
}
- else if(ELEM(G.obedit->type, OB_CURVE, OB_SURF)) {
+ else if(ELEM(obedit->type, OB_CURVE, OB_SURF)) {
// extern ListBase editNurb;
// load_editNurb();
// if(freedata) freeNurblist(&editNurb);
}
- else if(G.obedit->type==OB_FONT && freedata) {
+ else if(obedit->type==OB_FONT && freedata) {
// load_editText();
}
- else if(G.obedit->type==OB_LATTICE) {
+ else if(obedit->type==OB_LATTICE) {
// load_editLatt();
// if(freedata) free_editLatt();
}
- else if(G.obedit->type==OB_MBALL) {
+ else if(obedit->type==OB_MBALL) {
// extern ListBase editelems;
// load_editMball();
// if(freedata) BLI_freelistN(&editelems);
}
- ob= G.obedit;
+ ob= obedit;
/* for example; displist make is different in editmode */
- if(freedata) G.obedit= NULL;
- scene->obedit= G.obedit; // XXX
+ if(freedata) obedit= NULL;
+ scene->obedit= obedit; // XXX for context
if(ob->type==OB_MESH && get_mesh(ob)->mr)
multires_edge_level_update(ob, get_mesh(ob));
@@ -2150,7 +2149,7 @@ void ED_object_exit_editmode(bContext *C, int flag)
/* also flush ob recalc, doesn't take much overhead, but used for particles */
DAG_object_flush_update(scene, ob, OB_RECALC_OB|OB_RECALC_DATA);
- if(G.obedit==NULL) // XXX && (flag & EM_FREEUNDO))
+ if(obedit==NULL) // XXX && (flag & EM_FREEUNDO))
ED_undo_push(C, "Editmode");
if(flag & EM_WAITCURSOR) waitcursor(0);
@@ -2186,7 +2185,6 @@ void ED_object_enter_editmode(bContext *C, int flag)
if(me->pv) mesh_pmv_off(ob, me);
ok= 1;
- G.obedit= ob; // XXX
scene->obedit= ob; // context sees this
make_editMesh(scene, ob);
@@ -2208,40 +2206,40 @@ void ED_object_enter_editmode(bContext *C, int flag)
error_libdata();
return;
}
- ok=1;
- G.obedit=ob;
+// ok=1;
+ scene->obedit= ob;
// XXX make_editArmature();
/* to ensure all goes in restposition and without striding */
- DAG_object_flush_update(scene, G.obedit, OB_RECALC);
+ DAG_object_flush_update(scene, ob, OB_RECALC);
WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_EDITMODE_ARMATURE, ob);
}
else if(ob->type==OB_FONT) {
- G.obedit= ob;
- ok= 1;
+ scene->obedit= ob; // XXX for context
+// ok= 1;
// XXX make_editText();
}
else if(ob->type==OB_MBALL) {
- G.obedit= ob;
- ok= 1;
+ scene->obedit= ob; // XXX for context
+// ok= 1;
// XXX make_editMball();
}
else if(ob->type==OB_LATTICE) {
- G.obedit= ob;
- ok= 1;
+ scene->obedit= ob; // XXX for context
+// ok= 1;
// XXX make_editLatt();
}
else if(ob->type==OB_SURF || ob->type==OB_CURVE) {
- ok= 1;
- G.obedit= ob;
+// ok= 1;
+ scene->obedit= ob; // XXX for context
// XXX make_editNurb();
}
if(ok) {
- DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
+ DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
}
else {
- G.obedit= NULL;
+ scene->obedit= NULL; // XXX for context
WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, ob);
}
@@ -2278,8 +2276,9 @@ void OBJECT_OT_toggle_editmode(wmOperatorType *ot)
void check_editmode(int type)
{
+ Object *obedit= NULL; // XXX
- if (G.obedit==0 || G.obedit->type==type) return;
+ if (obedit==NULL || obedit->type==type) return;
// XXX ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* freedata, and undo */
}
@@ -2294,6 +2293,7 @@ void docenter(Scene *scene, View3D *v3d, int centermode)
Curve *cu;
/* BezTriple *bezt;
BPoint *bp; */
+ Object *obedit= NULL; // XXX
Nurb *nu, *nu1;
EditVert *eve;
float cent[3], centn[3], min[3], max[3], omat[3][3];
@@ -2307,12 +2307,12 @@ void docenter(Scene *scene, View3D *v3d, int centermode)
cent[0]= cent[1]= cent[2]= 0.0;
- if(G.obedit) {
+ if(obedit) {
INIT_MINMAX(min, max);
- if(G.obedit->type==OB_MESH) {
- Mesh *me= G.obedit->data;
+ if(obedit->type==OB_MESH) {
+ Mesh *me= obedit->data;
for(eve= me->edit_mesh->verts.first; eve; eve= eve->next) {
if(v3d->around==V3D_CENTROID) {
@@ -2339,7 +2339,7 @@ void docenter(Scene *scene, View3D *v3d, int centermode)
// XXX recalc_editnormals();
tot_change++;
- DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
+ DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
}
@@ -2361,7 +2361,7 @@ void docenter(Scene *scene, View3D *v3d, int centermode)
if(base->object->id.lib) {
tot_lib_error++;
}
- else if(G.obedit==0 && (me=get_mesh(base->object)) ) {
+ else if(obedit==0 && (me=get_mesh(base->object)) ) {
if (me->id.lib) {
tot_lib_error++;
} else {
@@ -2463,10 +2463,10 @@ void docenter(Scene *scene, View3D *v3d, int centermode)
else if (ELEM(base->object->type, OB_CURVE, OB_SURF)) {
/* totally weak code here... (ton) */
- if(G.obedit==base->object) {
+ if(obedit==base->object) {
extern ListBase editNurb;
nu1= editNurb.first;
- cu= G.obedit->data;
+ cu= obedit->data;
}
else {
cu= base->object->data;
@@ -2517,7 +2517,7 @@ void docenter(Scene *scene, View3D *v3d, int centermode)
nu= nu->next;
}
- if(centermode && G.obedit==0) {
+ if(centermode && obedit==0) {
Mat3CpyMat4(omat, base->object->obmat);
Mat3MulVecfl(omat, cent);
@@ -2530,9 +2530,9 @@ void docenter(Scene *scene, View3D *v3d, int centermode)
}
tot_change++;
- if(G.obedit) {
+ if(obedit) {
if (centermode==0) {
- DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
+ DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
break;
}
@@ -2578,7 +2578,7 @@ void docenter(Scene *scene, View3D *v3d, int centermode)
where_is_object(base->object);
ignore_parent_tx(base->object);
- if(G.obedit)
+ if(obedit)
break;
}
}
@@ -2610,7 +2610,7 @@ void docenter_new(Scene *scene, View3D *v3d)
{
if(scene->id.lib) return;
- if(G.obedit) {
+ if(scene->obedit) { // XXX get from context
error("Unable to center new in Edit Mode");
}
else {
@@ -2622,7 +2622,7 @@ void docenter_cursor(Scene *scene, View3D *v3d)
{
if(scene->id.lib) return;
- if(G.obedit) {
+ if(scene->obedit) { // XXX get from context
error("Unable to center cursor in Edit Mode");
}
else {
@@ -2819,13 +2819,14 @@ void special_editmenu(Scene *scene, View3D *v3d)
{
// XXX static short numcuts= 2;
Object *ob= OBACT;
+ Object *obedit= NULL; // XXX
float fac;
int nr,ret;
short randfac;
if(ob==NULL) return;
- if(G.obedit==NULL) {
+ if(obedit==NULL) {
if(ob->flag & OB_POSEMODE) {
// XXX pose_special_editmenu();
@@ -2938,7 +2939,7 @@ void special_editmenu(Scene *scene, View3D *v3d)
break;
}
- DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
+ DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
if(nr>0) waitcursor(0);
#endif
@@ -3017,7 +3018,7 @@ void special_editmenu(Scene *scene, View3D *v3d)
}
}
}
- else if(G.obedit->type==OB_MESH) {
+ else if(obedit->type==OB_MESH) {
/* This is all that is needed, since all other functionality is in Ctrl+ V/E/F but some users didnt like, so for now have the old/big menu */
/*
nr= pupmenu("Subdivide Mesh%t|Subdivide%x1|Subdivide Multi%x2|Subdivide Multi Fractal%x3|Subdivide Smooth%x4");
@@ -3137,12 +3138,12 @@ void special_editmenu(Scene *scene, View3D *v3d)
}
- DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
+ DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
if(nr>0) waitcursor(0);
}
- else if(ELEM(G.obedit->type, OB_CURVE, OB_SURF)) {
+ else if(ELEM(obedit->type, OB_CURVE, OB_SURF)) {
nr= pupmenu("Specials%t|Subdivide%x1|Switch Direction%x2|Set Goal Weight%x3|Set Radius%x4|Smooth%x5|Smooth Radius%x6");
@@ -3166,9 +3167,9 @@ void special_editmenu(Scene *scene, View3D *v3d)
// XXX smoothradiusNurb();
break;
}
- DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
+ DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
- else if(G.obedit->type==OB_ARMATURE) {
+ else if(obedit->type==OB_ARMATURE) {
nr= pupmenu("Specials%t|Subdivide %x1|Subdivide Multi%x2|Switch Direction%x7|Flip Left-Right Names%x3|%l|AutoName Left-Right%x4|AutoName Front-Back%x5|AutoName Top-Bottom%x6");
// if(nr==1)
// XXX subdivide_armature(1);
@@ -3185,7 +3186,7 @@ void special_editmenu(Scene *scene, View3D *v3d)
// else if(nr == 7)
// XXX switch_direction_armature();
}
- else if(G.obedit->type==OB_LATTICE) {
+ else if(obedit->type==OB_LATTICE) {
static float weight= 1.0f;
{ // XXX
// XXX if(fbutton(&weight, 0.0f, 1.0f, 10, 10, "Set Weight")) {
@@ -3227,6 +3228,7 @@ void convertmenu(Scene *scene, View3D *v3d)
{
Base *base, *basen=NULL, *basact, *basedel=NULL;
Object *obact, *ob, *ob1;
+ Object *obedit= NULL; // XXX
Curve *cu;
Nurb *nu;
MetaBall *mb;
@@ -3238,7 +3240,7 @@ void convertmenu(Scene *scene, View3D *v3d)
obact= OBACT;
if (obact == NULL) return;
if(!obact->flag & SELECT) return;
- if(G.obedit) return;
+ if(obedit) return;
basact= BASACT; /* will be restored */
@@ -3546,8 +3548,8 @@ void flip_subdivison(Scene *scene, View3D *v3d, int level)
mode= eModifierMode_Render|eModifierMode_Realtime;
if(level == -1) {
- if (G.obedit) {
- object_has_subdivision_particles(G.obedit, &havesubdiv, &havepart, 0);
+ if (scene->obedit) { // XXX get from context
+ object_has_subdivision_particles(scene->obedit, &havesubdiv, &havepart, 0);
} else {
for(base= scene->base.first; base; base= base->next) {
if(((level==-1) && (TESTBASE(v3d, base))) || (TESTBASELIB(v3d, base))) {
@@ -3569,8 +3571,8 @@ void flip_subdivison(Scene *scene, View3D *v3d, int level)
else if(havepart)
particles= 1;
- if (G.obedit) {
- object_flip_subdivison_particles(scene, G.obedit, &set, level, mode, particles, 0);
+ if (scene->obedit) { // XXX get from context
+ object_flip_subdivison_particles(scene, scene->obedit, &set, level, mode, particles, 0);
} else {
for(base= scene->base.first; base; base= base->next) {
if(((level==-1) && (TESTBASE(v3d, base))) || (TESTBASELIB(v3d, base))) {
@@ -3847,7 +3849,7 @@ void copy_attr(Scene *scene, View3D *v3d, short event)
if(!(ob=OBACT)) return;
- if(G.obedit) {
+ if(scene->obedit) { // XXX get from context
/* obedit_copymenu(); */
return;
}
@@ -4099,7 +4101,7 @@ void copy_attr_menu(Scene *scene, View3D *v3d)
if(!(ob=OBACT)) return;
- if (G.obedit) {
+ if (scene->obedit) { // XXX get from context
// if (ob->type == OB_MESH)
// XXX mesh_copy_menu();
return;
@@ -4761,7 +4763,7 @@ void apply_object(Scene *scene, View3D *v3d)
int shift= 0;
if(scene->id.lib) return;
- if(G.obedit) return;
+ if(scene->obedit) return; // XXX get from context
if(shift) {
ob= OBACT;
@@ -5791,7 +5793,7 @@ void image_aspect(Scene *scene, View3D *v3d)
float x, y, space;
int a, b, done;
- if(G.obedit) return;
+ if(scene->obedit) return; // XXX get from context
if(scene->id.lib) return;
for(base= FIRSTBASE; base; base= base->next) {
@@ -6044,7 +6046,7 @@ void texspace_edit(Scene *scene, View3D *v3d)
* texspacedraw is set:
*/
- if(G.obedit) return;
+ if(scene->obedit) return; // XXX get from context
for(base= FIRSTBASE; base; base= base->next) {
if(TESTBASELIB(v3d, base)) {
diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c
index 397f64dd000..c3c45466ac1 100644
--- a/source/blender/editors/space_outliner/outliner.c
+++ b/source/blender/editors/space_outliner/outliner.c
@@ -613,13 +613,14 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
outliner_add_element(soops, &te->subtree, ob->data, te, 0, 0);
if(ob->pose) {
+ bArmature *arm= ob->data;
bPoseChannel *pchan;
TreeElement *ten;
TreeElement *tenla= outliner_add_element(soops, &te->subtree, ob, te, TSE_POSE_BASE, 0);
tenla->name= "Pose";
- if(ob!=G.obedit && (ob->flag & OB_POSEMODE)) { // channels undefined in editmode, but we want the 'tenla' pose icon itself
+ if(arm->edbo==NULL && (ob->flag & OB_POSEMODE)) { // channels undefined in editmode, but we want the 'tenla' pose icon itself
int a= 0, const_index= 1000; /* ensure unique id for bone constraints */
for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next, a++) {
@@ -895,7 +896,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
bArmature *arm= (bArmature *)id;
int a= 0;
- if(G.obedit && G.obedit->data==arm) {
+ if(arm->edbo) {
EditBone *ebone;
TreeElement *ten;
@@ -1631,7 +1632,7 @@ static void tree_element_set_active_object(bContext *C, Scene *scene, SpaceOops
sce= (Scene *)outliner_search_back(soops, te, ID_SCE);
if(sce && scene != sce) {
-// XXX if(G.obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
+// XXX if(obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
set_scene(sce);
}
@@ -1659,7 +1660,7 @@ static void tree_element_set_active_object(bContext *C, Scene *scene, SpaceOops
ED_base_object_activate(C, base); /* adds notifier */
}
-// XXX if(ob!=G.obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
+// XXX if(ob!=obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
// else countall(); /* exit_editmode calls f() */
}
@@ -1811,7 +1812,7 @@ static int tree_element_active_world(Scene *scene, SpaceOops *soops, TreeElement
if(set) { // make new scene active
if(sce && scene != sce) {
-// XXX if(G.obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
+// XXX if(obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
set_scene(sce);
}
}
@@ -2094,7 +2095,7 @@ static int tree_element_active_pose(TreeElement *te, TreeStoreElem *tselem, int
Object *ob= (Object *)tselem->id;
if(set) {
-// XXX if(G.obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
+// XXX if(obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
// if(ob->flag & OB_POSEMODE) exit_posemode();
// else enter_posemode();
}
@@ -2248,12 +2249,12 @@ static int do_outliner_mouse_event(bContext *C, Scene *scene, ARegion *ar, Space
/* editmode? */
if(te->idcode==ID_SCE) {
if(scene!=(Scene *)tselem->id) {
-// XXX if(G.obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
+// XXX if(obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
set_scene((Scene *)tselem->id);
}
}
else if(ELEM5(te->idcode, ID_ME, ID_CU, ID_MB, ID_LT, ID_AR)) {
-// XXX if(G.obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
+// XXX if(obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
// else {
// enter_editmode(EM_WAITCURSOR);
// extern_set_butspace(F9KEY, 0);
@@ -2857,7 +2858,7 @@ static void object_delete_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem
if(base==NULL) base= object_in_scene((Object *)tselem->id, scene);
if(base) {
// check also library later
-// XXX if(G.obedit==base->object) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
+// XXX if(obedit==base->object) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);
if(base==BASACT) {
G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT+G_SCULPTMODE);
@@ -3448,7 +3449,7 @@ static void outliner_draw_iconrow(Scene *scene, SpaceOops *soops, ListBase *lb,
active= 0;
if(tselem->type==0) {
if(te->idcode==ID_OB) active= (OBACT==(Object *)tselem->id);
- else if(G.obedit && G.obedit->data==tselem->id) active= 1;
+ else if(scene->obedit && scene->obedit->data==tselem->id) active= 1; // XXX use context?
else active= tree_element_active(scene, soops, te, 0);
}
else active= tree_element_type_active(NULL, scene, soops, te, tselem, 0);
@@ -3514,10 +3515,10 @@ static void outliner_draw_tree_element(Scene *scene, ARegion *ar, SpaceOops *soo
}
}
- else if(G.obedit && G.obedit->data==tselem->id) {
- glColor4ub(255, 255, 255, 100);
- active= 2;
- }
+// XXX context? else if(obedit && obedit->data==tselem->id) {
+// glColor4ub(255, 255, 255, 100);
+// active= 2;
+// }
else {
if(tree_element_active(scene, soops, te, 0)) {
glColor4ub(220, 220, 255, 100);
@@ -3902,18 +3903,21 @@ static void namebutton_cb(bContext *C, void *tep, void *oldnamep)
test_idbutton(tselem->id->name+2);
break;
case TSE_EBONE:
- if(G.obedit && G.obedit->data==(ID *)tselem->id) {
+ {
+ bArmature *arm= (bArmature *)tselem->id;
+ if(arm->edbo) {
EditBone *ebone= te->directdata;
char newname[32];
/* restore bone name */
BLI_strncpy(newname, ebone->name, 32);
BLI_strncpy(ebone->name, oldnamep, 32);
-// XXX armature_bone_rename(G.obedit->data, oldnamep, newname);
+// XXX armature_bone_rename(obedit->data, oldnamep, newname);
}
allqueue(REDRAWOOPS, 0);
allqueue(REDRAWVIEW3D, 1);
allqueue(REDRAWBUTSEDIT, 0);
+ }
break;
case TSE_BONE:
diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c
index c9307f8e1fb..b1b1f504920 100644
--- a/source/blender/editors/space_view3d/drawarmature.c
+++ b/source/blender/editors/space_view3d/drawarmature.c
@@ -2516,8 +2516,8 @@ int draw_armature(Scene *scene, View3D *v3d, Base *base, int dt, int flag)
/* arm->flag is being used to detect mode... */
/* editmode? */
- if(ob==G.obedit || (G.obedit && ob->data==G.obedit->data)) {
- if(ob==G.obedit) arm->flag |= ARM_EDITMODE;
+ if(arm->edbo) {
+ arm->flag |= ARM_EDITMODE;
draw_ebones(v3d, ob, dt);
arm->flag &= ~ARM_EDITMODE;
}
diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c
index 53487ca79ff..ad62329f8fc 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -340,7 +340,8 @@ static void draw_textured_begin(Scene *scene, View3D *v3d, Object *ob)
unsigned char obcol[4];
int istex, solidtex= 0;
- if(v3d->drawtype==OB_SOLID || (ob==G.obedit && v3d->drawtype!=OB_TEXTURE)) {
+ // XXX scene->obedit warning
+ if(v3d->drawtype==OB_SOLID || (ob==scene->obedit && v3d->drawtype!=OB_TEXTURE)) {
/* draw with default lights in solid draw mode and edit mode */
solidtex= 1;
Gtexdraw.islit= -1;
@@ -470,7 +471,7 @@ void draw_mesh_text(Scene *scene, Object *ob, int glsl)
return;
/* don't draw when editing */
- if(ob==G.obedit)
+ if(me->edit_mesh)
return;
else if(ob==OBACT)
if(FACESEL_PAINT_TEST)
@@ -568,7 +569,7 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, Object *ob, DerivedMesh *dm,
draw_textured_end();
/* draw edges and selected faces over textured mesh */
- if(!G.obedit && faceselect)
+ if(!me->edit_mesh && faceselect)
draw_tfaces3D(v3d, ob, me, dm);
/* reset from negative scale correction */
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 70435e54e9d..963eaf15c48 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -144,7 +144,7 @@ int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, int dt)
(G.fileflags & G_FILE_GAME_MAT_GLSL) && (dt >= OB_SHADED));
}
-static int check_material_alpha(Base *base, Object *ob, int glsl)
+static int check_material_alpha(Base *base, Mesh *me, int glsl)
{
if(base->flag & OB_FROMDUPLI)
return 0;
@@ -152,10 +152,10 @@ static int check_material_alpha(Base *base, Object *ob, int glsl)
if(G.f & G_PICKSEL)
return 0;
- if(G.obedit && G.obedit->data==ob->data)
+ if(me->edit_mesh)
return 0;
- return (glsl || (ob->dtx & OB_DRAWTRANSP));
+ return (glsl || (base->object->dtx & OB_DRAWTRANSP));
}
/***/
@@ -1084,7 +1084,7 @@ static void lattice_draw_verts(Lattice *lt, DispList *dl, short sel)
void lattice_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, BPoint *bp, int x, int y), void *userData)
{
BPoint *bp = editLatt->def;
- DispList *dl = find_displist(&G.obedit->disp, DL_VERTS);
+ DispList *dl = find_displist(&vc->obedit->disp, DL_VERTS);
float *co = dl?dl->verts:NULL;
float pmat[4][4], vmat[4][4];
int i, N = editLatt->pntsu*editLatt->pntsv*editLatt->pntsw;
@@ -1125,19 +1125,17 @@ static void drawlattice__point(Lattice *lt, DispList *dl, int u, int v, int w, i
/* lattice color is hardcoded, now also shows weightgroup values in edit mode */
static void drawlattice(View3D *v3d, Object *ob)
{
- Lattice *lt;
+ Lattice *lt= ob->data;
DispList *dl;
int u, v, w;
int use_wcol= 0;
- lt= (ob==G.obedit)?editLatt:ob->data;
-
/* now we default make displist, this will modifiers work for non animated case */
if(ob->disp.first==NULL)
lattice_calc_modifiers(ob);
dl= find_displist(&ob->disp, DL_VERTS);
- if(ob==G.obedit) {
+ if(lt->editlatt) {
cpack(0x004000);
if(ob->defbase.first && lt->dvert) {
@@ -1146,6 +1144,8 @@ static void drawlattice(View3D *v3d, Object *ob)
}
}
+ if(lt->editlatt) lt= lt->editlatt;
+
glBegin(GL_LINES);
for(w=0; w<lt->pntsw; w++) {
int wxt = (w==0 || w==lt->pntsw-1);
@@ -1175,7 +1175,7 @@ static void drawlattice(View3D *v3d, Object *ob)
if(use_wcol)
glShadeModel(GL_FLAT);
- if(ob==G.obedit) {
+ if( ((Lattice *)ob->data)->editlatt ) {
if(v3d->zbuf) glDisable(GL_DEPTH_TEST);
lattice_draw_verts(lt, dl, 0);
@@ -1207,7 +1207,7 @@ static void mesh_foreachScreenVert__mapFunc(void *userData, int index, float *co
void mesh_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, EditVert *eve, int x, int y, int index), void *userData, int clipVerts)
{
struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index); void *userData; ViewContext vc; int clipVerts; float pmat[4][4], vmat[4][4]; } data;
- DerivedMesh *dm = editmesh_get_derived_cage(vc->em, CD_MASK_BAREMESH);
+ DerivedMesh *dm = editmesh_get_derived_cage(vc->obedit, vc->em, CD_MASK_BAREMESH);
data.vc= *vc;
data.func = func;
@@ -1251,7 +1251,7 @@ static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, float *v0
void mesh_foreachScreenEdge(ViewContext *vc, void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index), void *userData, int clipVerts)
{
struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index); void *userData; ViewContext vc; int clipVerts; float pmat[4][4], vmat[4][4]; } data;
- DerivedMesh *dm = editmesh_get_derived_cage(vc->em, CD_MASK_BAREMESH);
+ DerivedMesh *dm = editmesh_get_derived_cage(vc->obedit, vc->em, CD_MASK_BAREMESH);
data.vc= *vc;
data.func = func;
@@ -1283,7 +1283,7 @@ static void mesh_foreachScreenFace__mapFunc(void *userData, int index, float *ce
void mesh_foreachScreenFace(ViewContext *vc, void (*func)(void *userData, EditFace *efa, int x, int y, int index), void *userData)
{
struct { void (*func)(void *userData, EditFace *efa, int x, int y, int index); void *userData; ViewContext vc; float pmat[4][4], vmat[4][4]; } data;
- DerivedMesh *dm = editmesh_get_derived_cage(vc->em, CD_MASK_BAREMESH);
+ DerivedMesh *dm = editmesh_get_derived_cage(vc->obedit, vc->em, CD_MASK_BAREMESH);
data.vc= *vc;
data.func = func;
@@ -1648,7 +1648,7 @@ static void draw_dm_bweights(Scene *scene, DerivedMesh *dm)
/* EditMesh drawing routines*/
-static void draw_em_fancy_verts(Scene *scene, View3D *v3d, EditMesh *em, DerivedMesh *cageDM, EditVert *eve_act)
+static void draw_em_fancy_verts(Scene *scene, View3D *v3d, Object *obedit, EditMesh *em, DerivedMesh *cageDM, EditVert *eve_act)
{
int sel;
@@ -1687,7 +1687,7 @@ static void draw_em_fancy_verts(Scene *scene, View3D *v3d, EditMesh *em, Derived
draw_dm_verts(cageDM, sel, eve_act);
}
- if( CHECK_OB_DRAWFACEDOT(scene, v3d, G.obedit->dt) ) {
+ if( CHECK_OB_DRAWFACEDOT(scene, v3d, obedit->dt) ) {
glPointSize(fsize);
glColor4ubv((GLubyte *)fcol);
draw_dm_face_centers(cageDM, sel);
@@ -2083,10 +2083,10 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, Object *ob, EditMesh *em, D
draw_em_fancy_edges(scene, v3d, cageDM, 0, eed_act);
}
- if(ob==G.obedit) {
+ if(em) {
// XXX retopo_matrix_update(v3d);
- draw_em_fancy_verts(scene, v3d, em, cageDM, eve_act);
+ draw_em_fancy_verts(scene, v3d, ob, em, cageDM, eve_act);
if(G.f & G_DRAWNORMALS) {
UI_ThemeColor(TH_NORMAL);
@@ -2354,22 +2354,23 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, Base *base, int dt, int f
static int draw_mesh_object(Scene *scene, View3D *v3d, Base *base, int dt, int flag)
{
Object *ob= base->object;
+ Object *obedit= scene->obedit; // XXX hrumf, see below
Mesh *me= ob->data;
EditMesh *em= me->edit_mesh;
int do_alpha_pass= 0, drawlinked= 0, retval= 0, glsl, check_alpha;
- if(G.obedit && ob!=G.obedit && ob->data==G.obedit->data) {
+ if(obedit && ob!=obedit && ob->data==obedit->data) {
if(ob_get_key(ob));
else drawlinked= 1;
}
- if(ob==G.obedit || drawlinked) {
+ if(ob==obedit || drawlinked) {
DerivedMesh *finalDM, *cageDM;
- if (G.obedit!=ob)
- finalDM = cageDM = editmesh_get_derived_base(em);
+ if (obedit!=ob)
+ finalDM = cageDM = editmesh_get_derived_base(ob, em);
else
- cageDM = editmesh_get_derived_cage_and_final(em, &finalDM,
+ cageDM = editmesh_get_derived_cage_and_final(ob, em, &finalDM,
get_viewedit_datamask());
if(dt>OB_WIRE) {
@@ -2380,10 +2381,10 @@ static int draw_mesh_object(Scene *scene, View3D *v3d, Base *base, int dt, int f
draw_em_fancy(scene, v3d, ob, em, cageDM, finalDM, dt);
- if (G.obedit!=ob && finalDM)
+ if (obedit!=ob && finalDM)
finalDM->release(finalDM);
}
-// else if(!G.obedit && (G.f & G_SCULPTMODE) &&(scene->sculptdata.flags & SCULPT_DRAW_FAST) &&
+// else if(!em && (G.f & G_SCULPTMODE) &&(scene->sculptdata.flags & SCULPT_DRAW_FAST) &&
// OBACT==ob && !sculpt_modifiers_active(ob)) {
// XXX sculptmode_draw_mesh(0);
// }
@@ -2391,7 +2392,7 @@ static int draw_mesh_object(Scene *scene, View3D *v3d, Base *base, int dt, int f
/* don't create boundbox here with mesh_get_bb(), the derived system will make it, puts deformed bb's OK */
if(me->totface<=4 || boundbox_clip(v3d, ob->obmat, (ob->bb)? ob->bb: me->bb)) {
glsl = draw_glsl_material(scene, ob, v3d, dt);
- check_alpha = check_material_alpha(base, ob, glsl);
+ check_alpha = check_material_alpha(base, me, glsl);
if(dt==OB_SOLID || glsl) {
GPU_set_object_materials(v3d, scene, ob, glsl,
@@ -2721,7 +2722,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt)
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0);
drawDispListsolid(lb, ob, 0);
}
- if(ob==G.obedit && cu->bevobj==NULL && cu->taperobj==NULL && cu->ext1 == 0.0 && cu->ext2 == 0.0) {
+ if(cu->editnurb && cu->bevobj==NULL && cu->taperobj==NULL && cu->ext1 == 0.0 && cu->ext2 == 0.0) {
cpack(0);
draw_index_wire= 0;
drawDispListwire(lb);
@@ -2844,7 +2845,8 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part
if(pars==0) return;
- if(!G.obedit && psys_in_edit_mode(psys)
+ // XXX what logic is this?
+ if(!scene->obedit && psys_in_edit_mode(psys)
&& psys->flag & PSYS_HAIR_DONE && part->draw_as==PART_DRAW_PATH)
return;
@@ -4175,10 +4177,10 @@ static int drawmball(Scene *scene, View3D *v3d, Base *base, int dt)
mb= ob->data;
- if(ob==G.obedit) {
+ if(mb->editelems) {
UI_ThemeColor(TH_WIRE);
if((G.f & G_PICKSEL)==0 ) drawDispList(scene, v3d, base, dt);
- ml= editelems.first;
+ ml= mb->editelems->first;
}
else {
if((base->flag & OB_FROMDUPLI)==0)
@@ -4189,7 +4191,7 @@ static int drawmball(Scene *scene, View3D *v3d, Base *base, int dt)
if(ml==NULL) return 1;
/* in case solid draw, reset wire colors */
- if(ob!=G.obedit && (ob->flag & SELECT)) {
+ if(mb->editelems && (ob->flag & SELECT)) {
if(ob==OBACT) UI_ThemeColor(TH_ACTIVE);
else UI_ThemeColor(TH_SELECT);
}
@@ -4203,7 +4205,7 @@ static int drawmball(Scene *scene, View3D *v3d, Base *base, int dt)
while(ml) {
/* draw radius */
- if(ob==G.obedit) {
+ if(mb->editelems) {
if((ml->flag & SELECT) && (ml->flag & MB_SCALE_RAD)) cpack(0xA0A0F0);
else cpack(0x3030A0);
@@ -4215,7 +4217,7 @@ static int drawmball(Scene *scene, View3D *v3d, Base *base, int dt)
drawcircball(GL_LINE_LOOP, &(ml->x), ml->rad, imat);
/* draw stiffness */
- if(ob==G.obedit) {
+ if(mb->editelems) {
if((ml->flag & SELECT) && !(ml->flag & MB_SCALE_RAD)) cpack(0xA0F0A0);
else cpack(0x30A030);
@@ -4242,7 +4244,8 @@ static void draw_forcefield(Scene *scene, Object *ob)
if(G.f & G_RENDER_SHADOW)
return;
- if(ob!=G.obedit && (ob->flag & SELECT)) {
+ /* XXX why? */
+ if(ob!=scene->obedit && (ob->flag & SELECT)) {
if(ob==OBACT) curcol= TH_ACTIVE;
else curcol= TH_SELECT;
}
@@ -4575,7 +4578,8 @@ static void drawSolidSelect(Scene *scene, View3D *v3d, Base *base)
static void drawWireExtra(Scene *scene, View3D *v3d, Object *ob)
{
- if(ob!=G.obedit && (ob->flag & SELECT)) {
+ // XXX scene->obedit warning
+ if(ob!=scene->obedit && (ob->flag & SELECT)) {
if(ob==OBACT) {
if(ob->flag & OB_FROMGROUP) UI_ThemeColor(TH_GROUP_ACTIVE);
else UI_ThemeColor(TH_ACTIVE);
@@ -4705,7 +4709,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
ob= base->object;
- if (ob!=G.obedit) {
+ /* XXX ermfh... */
+ if (ob!=scene->obedit) {
if (ob->restrictflag & OB_RESTRICT_VIEW)
return;
}
@@ -4724,7 +4729,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
/* draw keys? */
if(base==(scene->basact) || (base->flag & (SELECT+BA_WAS_SEL))) {
- if(flag==0 && warning_recursive==0 && ob!=G.obedit) {
+ if(flag==0 && warning_recursive==0 && ob!=scene->obedit) {
if(ob->ipo && ob->ipo->showkey && (ob->ipoflag & OB_DRAWKEY)) {
ListBase elems;
CfraElem *ce;
@@ -4856,7 +4861,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
if(ob==OBACT && (G.f & (G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT))) {
if(ob->type==OB_MESH) {
- if(ob==G.obedit);
+ if(ob==scene->obedit);
else {
if(dt<OB_SOLID)
zbufoff= 1;
@@ -4878,7 +4883,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
if(dt>=OB_BOUNDBOX ) {
dtx= ob->dtx;
- if(G.obedit==ob) {
+ if(scene->obedit==ob) {
// the only 2 extra drawtypes alowed in editmode
dtx= dtx & (OB_DRAWWIRE|OB_TEXSPACE);
}
@@ -4890,7 +4895,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
/* draw outline for selected solid objects, mesh does itself */
if((v3d->flag & V3D_SELECT_OUTLINE) && ob->type!=OB_MESH) {
- if(dt>OB_WIRE && dt<OB_TEXTURE && ob!=G.obedit && (flag && DRAW_SCENESET)==0) {
+ if(dt>OB_WIRE && dt<OB_TEXTURE && ob!=scene->obedit && (flag && DRAW_SCENESET)==0) {
if (!(ob->dtx&OB_DRAWWIRE) && (ob->flag&SELECT) && !(flag&DRAW_PICKING)) {
drawSolidSelect(scene, v3d, base);
}
@@ -4908,7 +4913,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
case OB_FONT:
cu= ob->data;
if (cu->disp.first==NULL) makeDispListCurveTypes(ob, 0);
- if(ob==G.obedit) {
+ if(cu->editstr) {
tekentextcurs();
if (cu->flag & CU_FAST) {
@@ -4963,7 +4968,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
setlinestyle(0);
- if (getselection(&selstart, &selend) && selboxes) {
+ if (getselection(ob, &selstart, &selend) && selboxes) {
float selboxw;
cpack(0xffffff);
@@ -5002,8 +5007,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
/* still needed for curves hidden in other layers. depgraph doesnt handle that yet */
if (cu->disp.first==NULL) makeDispListCurveTypes(ob, 0);
- if(ob==G.obedit) {
- drawnurb(scene, v3d, base, editNurb.first, dt);
+ if(cu->editnurb) {
+ drawnurb(scene, v3d, base, cu->editnurb->first, dt);
}
else if(dt==OB_BOUNDBOX)
draw_bounding_volume(ob);
@@ -5015,13 +5020,17 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
}
break;
case OB_MBALL:
- if(ob==G.obedit)
+ {
+ MetaBall *mb= ob->data;
+
+ if(mb->editelems)
drawmball(scene, v3d, base, dt);
else if(dt==OB_BOUNDBOX)
draw_bounding_volume(ob);
else
empty_object= drawmball(scene, v3d, base, dt);
break;
+ }
case OB_EMPTY:
drawaxes(ob->empty_drawsize, flag, ob->empty_drawtype);
break;
@@ -5049,7 +5058,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
if( (warning_recursive==0) &&
(ob->particlesystem.first) &&
(flag & DRAW_PICKING)==0 &&
- (ob!=G.obedit)
+ (ob!=scene->obedit)
) {
ParticleSystem *psys;
if(col || (ob->flag & SELECT)) cpack(0xFFFFFF); /* for visibility, also while wpaint */
@@ -5060,7 +5069,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
if(G.f & G_PARTICLEEDIT && ob==OBACT) {
psys= NULL; // XXX PE_get_current(ob);
- if(psys && !G.obedit && psys_in_edit_mode(psys))
+ if(psys && !scene->obedit && psys_in_edit_mode(psys))
draw_particle_edit(scene, v3d, ob, psys, dt);
}
glDepthMask(GL_TRUE);
@@ -5156,10 +5165,10 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
ListBase *list;
/* draw hook center and offset line */
- if(ob!=G.obedit) draw_hooks(ob);
+ if(ob!=scene->obedit) draw_hooks(ob);
/* help lines and so */
- if(ob!=G.obedit && ob->parent && (ob->parent->lay & v3d->lay)) {
+ if(ob!=scene->obedit && ob->parent && (ob->parent->lay & v3d->lay)) {
setlinestyle(3);
glBegin(GL_LINES);
glVertex3fv(ob->obmat[3]);
@@ -5317,14 +5326,14 @@ static void bbs_mesh_solid__drawCenter(void *userData, int index, float *cent, f
}
/* two options, facecolors or black */
-static int bbs_mesh_solid_EM(Scene *scene, View3D *v3d, DerivedMesh *dm, int facecol)
+static int bbs_mesh_solid_EM(Scene *scene, View3D *v3d, Object *ob, DerivedMesh *dm, int facecol)
{
cpack(0);
if (facecol) {
dm->drawMappedFaces(dm, bbs_mesh_solid__setSolidDrawOptions, (void*)(intptr_t) 1, 0);
- if( CHECK_OB_DRAWFACEDOT(scene, v3d, G.obedit->dt) ) {
+ if( CHECK_OB_DRAWFACEDOT(scene, v3d, ob->dt) ) {
glPointSize(UI_GetThemeValuef(TH_FACEDOT_SIZE));
bglBegin(GL_POINTS);
@@ -5373,14 +5382,15 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, Object *ob)
switch( ob->type) {
case OB_MESH:
- if(ob==G.obedit) {
- Mesh *me= ob->data;
- EditMesh *em= me->edit_mesh;
- DerivedMesh *dm = editmesh_get_derived_cage(em, CD_MASK_BAREMESH);
+ {
+ Mesh *me= ob->data;
+ EditMesh *em= me->edit_mesh;
+ if(em) {
+ DerivedMesh *dm = editmesh_get_derived_cage(ob, em, CD_MASK_BAREMESH);
EM_init_index_arrays(em, 1, 1, 1);
- em_solidoffs= bbs_mesh_solid_EM(scene, v3d, dm, scene->selectmode & SCE_SELECT_FACE);
+ em_solidoffs= bbs_mesh_solid_EM(scene, v3d, ob, dm, scene->selectmode & SCE_SELECT_FACE);
bglPolygonOffset(v3d->dist, 1.0);
@@ -5399,7 +5409,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, Object *ob)
EM_free_index_arrays();
}
else bbs_mesh_solid(ob);
-
+ }
break;
case OB_CURVE:
case OB_SURF:
@@ -5421,7 +5431,7 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, Object *ob, int
int glsl;
if(me->edit_mesh)
- edm= editmesh_get_derived_base(me->edit_mesh);
+ edm= editmesh_get_derived_base(ob, me->edit_mesh);
else
dm = mesh_get_derived_final(ob, CD_MASK_BAREMESH);
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 232b9d9d974..a70a6ab8fd8 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -351,10 +351,6 @@ static int view3d_context(const bContext *C, const bContextDataMember *member, b
return 1;
}
- else if(member == CTX_data_edit_object) {
- CTX_data_pointer_set(result, G.obedit);
- return 1;
- }
return 0;
}
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index ad18f6675a3..90840533d55 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -370,7 +370,7 @@ static void drawgrid(ARegion *ar, View3D *v3d)
}
-static void drawfloor(View3D *v3d)
+static void drawfloor(Scene *scene, View3D *v3d)
{
float vert[3], grid;
int a, gridlines, emphasise;
@@ -381,7 +381,7 @@ static void drawfloor(View3D *v3d)
if(v3d->gridlines<3) return;
- if(v3d->zbuf && G.obedit) glDepthMask(0); // for zbuffer-select
+ if(v3d->zbuf && scene->obedit) glDepthMask(0); // for zbuffer-select
gridlines= v3d->gridlines/2;
grid= gridlines*v3d->grid;
@@ -489,7 +489,7 @@ static void drawfloor(View3D *v3d)
glEnd();
}
- if(v3d->zbuf && G.obedit) glDepthMask(1);
+ if(v3d->zbuf && scene->obedit) glDepthMask(1);
}
@@ -740,7 +740,7 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d)
char *name= NULL;
/* show name of active bone too (if possible) */
- if(ob==G.obedit) {
+ if(arm->edbo) {
// XXX EditBone *ebo;
// for (ebo=G.edbo.first; ebo; ebo=ebo->next){
// if ((ebo->flag & BONE_ACTIVE) && (ebo->layer & arm->layer)) {
@@ -1055,7 +1055,7 @@ void backdrawview3d(Scene *scene, ARegion *ar, View3D *v3d)
#endif
if(G.f & G_VERTEXPAINT || G.f & G_WEIGHTPAINT || G.f & G_TEXTUREPAINT);
- else if(G.obedit && v3d->drawtype>OB_WIRE && (v3d->flag & V3D_ZBUF_SELECT));
+ else if(scene->obedit && v3d->drawtype>OB_WIRE && (v3d->flag & V3D_ZBUF_SELECT));
else {
v3d->flag &= ~V3D_NEEDBACKBUFDRAW;
return;
@@ -1081,7 +1081,6 @@ void backdrawview3d(Scene *scene, ARegion *ar, View3D *v3d)
#endif
if(v3d->drawtype > OB_WIRE) v3d->zbuf= TRUE;
-// ar->win_swap &= ~WIN_BACK_OK;
glDisable(GL_DITHER);
@@ -1872,7 +1871,7 @@ void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d)
v3d->gridview= v3d->grid;
if(v3d->view==0 || v3d->persp!=0) {
- drawfloor(v3d);
+ drawfloor(scene, v3d);
if(v3d->persp==2) {
if(scene->world) {
if(scene->world->mode & WO_STARS) {
@@ -1927,21 +1926,21 @@ void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d)
draw_dupli_objects(scene, ar, v3d, base);
}
if((base->flag & SELECT)==0) {
- if(base->object!=G.obedit)
+ if(base->object!=scene->obedit)
draw_object(scene, ar, v3d, base, 0);
}
}
}
// retopo= retopo_mesh_check() || retopo_curve_check();
-// sculptparticle= (G.f & (G_SCULPTMODE|G_PARTICLEEDIT)) && !G.obedit;
+// sculptparticle= (G.f & (G_SCULPTMODE|G_PARTICLEEDIT)) && !obedit;
if(retopo)
view3d_update_depths(ar, v3d);
/* draw selected and editmode */
for(base= scene->base.first; base; base= base->next) {
if(v3d->lay & base->lay) {
- if (base->object==G.obedit || ( base->flag & SELECT) )
+ if (base->object==scene->obedit || ( base->flag & SELECT) )
draw_object(scene, ar, v3d, base, 0);
}
}
@@ -1954,7 +1953,7 @@ void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d)
if(G.moving) {
// BIF_drawConstraint();
-// if(G.obedit || (G.f & G_PARTICLEEDIT))
+// if(obedit || (G.f & G_PARTICLEEDIT))
// BIF_drawPropCircle(); // only editmode and particles have proportional edit
// BIF_drawSnap();
}
@@ -2025,7 +2024,7 @@ void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d)
// XXX addafterqueue(ar->win, BACKBUFDRAW, 1);
}
// test for backbuf select
- if(G.obedit && v3d->drawtype>OB_WIRE && (v3d->flag & V3D_ZBUF_SELECT)) {
+ if(scene->obedit && v3d->drawtype>OB_WIRE && (v3d->flag & V3D_ZBUF_SELECT)) {
v3d->flag |= V3D_NEEDBACKBUFDRAW;
// XXX if(afterqtest(ar->win, BACKBUFDRAW)==0) {
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index a5b9e483201..a5ea2a83b77 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -755,6 +755,7 @@ static int viewcenter_exec(bContext *C, wmOperator *op) /* like a localview with
View3D *v3d= sa->spacedata.first;
Scene *scene= CTX_data_scene(C);
Object *ob= OBACT;
+ Object *obedit= CTX_data_edit_object(C);
float size, min[3], max[3], afm[3];
int ok=0;
@@ -780,7 +781,7 @@ static int viewcenter_exec(bContext *C, wmOperator *op) /* like a localview with
}
- if(G.obedit) {
+ if(obedit) {
// XXX ok = minmax_verts(min, max); /* only selected */
}
else if(ob && (ob->flag & OB_POSEMODE)) {
@@ -1452,12 +1453,12 @@ static int set_3dcursor_invoke(bContext *C, wmOperator *op, wmEvent *event)
ARegion *ar= CTX_wm_region(C);
View3D *v3d= (View3D *)CTX_wm_space_data(C);
float dx, dy, fz, *fp = NULL, dvec[3], oldcurs[3];
- short mx, my, lr_click=0, mval[2];
- short ctrl= 0; // XXX
+ short mx, my, mval[2];
+// short ctrl= 0; // XXX
fp= give_cursor(scene, v3d);
- if(G.obedit && ctrl) lr_click= 1;
+// if(obedit && ctrl) lr_click= 1;
VECCOPY(oldcurs, fp);
mx= event->x - ar->winrct.xmin;
@@ -1484,12 +1485,12 @@ static int set_3dcursor_invoke(bContext *C, wmOperator *op, wmEvent *event)
fp[2]= (v3d->persinv[0][2]*dx + v3d->persinv[1][2]*dy+ v3d->persinv[2][2]*fz)-v3d->ofs[2];
}
- if(lr_click) {
- // XXX if(G.obedit->type==OB_MESH) add_click_mesh();
- // else if ELEM(G.obedit->type, OB_CURVE, OB_SURF) addvert_Nurb(0);
- // else if (G.obedit->type==OB_ARMATURE) addvert_armature();
- VECCOPY(fp, oldcurs);
- }
+// if(lr_click) {
+ // XXX if(obedit->type==OB_MESH) add_click_mesh();
+ // else if ELEM(obedit->type, OB_CURVE, OB_SURF) addvert_Nurb(0);
+ // else if (obedit->type==OB_ARMATURE) addvert_armature();
+// VECCOPY(fp, oldcurs);
+// }
// XXX notifier for scene */
ED_region_tag_redraw(ar);
@@ -1812,7 +1813,7 @@ void viewmoveNDOF(Scene *scene, View3D *v3d, int mode)
v3d->view = 0;
//printf("passing here \n");
//
- if (G.obedit==NULL && ob && !(ob->flag & OB_POSEMODE)) {
+ if (scene->obedit==NULL && ob && !(ob->flag & OB_POSEMODE)) {
use_sel = 1;
}
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index 06eb00d75c8..3de551a516a 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -73,6 +73,7 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "BIF_transform.h"
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
@@ -5445,7 +5446,7 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
em->selectmode= SCE_SELECT_VERTEX;
scene->selectmode= em->selectmode;
EM_selectmode_set(em);
- WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, G.obedit);
+ WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
ED_undo_push(C, "Selectmode Set: Vertex");
}
break;
@@ -5459,7 +5460,7 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
}
scene->selectmode= em->selectmode;
EM_selectmode_set(em);
- WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, G.obedit);
+ WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
ED_undo_push(C, "Selectmode Set: Edge");
}
break;
@@ -5473,7 +5474,7 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
}
scene->selectmode= em->selectmode;
EM_selectmode_set(em);
- WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, G.obedit);
+ WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
ED_undo_push(C, "Selectmode Set: Face");
}
break;
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index 33ac9a64968..8fa54c7c7ad 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -569,10 +569,10 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m
for (ebone=G.edbo.first; ebone; ebone=ebone->next) {
VECCOPY(vec, ebone->head);
- Mat4MulVecfl(G.obedit->obmat, vec);
+ Mat4MulVecfl(vc->obedit->obmat, vec);
project_short(vc->ar, vc->v3d, vec, sco1);
VECCOPY(vec, ebone->tail);
- Mat4MulVecfl(G.obedit->obmat, vec);
+ Mat4MulVecfl(vc->obedit->obmat, vec);
project_short(vc->ar, vc->v3d, vec, sco2);
didpoint= 0;
@@ -649,7 +649,7 @@ static void do_lasso_select_node(short mcords[][2], short moves, short select)
void view3d_lasso_select(ViewContext *vc, short mcords[][2], short moves, short select)
{
- if(G.obedit==NULL) {
+ if(vc->obedit==NULL) {
if(FACESEL_PAINT_TEST)
do_lasso_select_facemode(vc, mcords, moves, select);
else if(G.f & (G_VERTEXPAINT|G_TEXTUREPAINT|G_WEIGHTPAINT))
@@ -659,13 +659,13 @@ void view3d_lasso_select(ViewContext *vc, short mcords[][2], short moves, short
else
do_lasso_select_objects(vc, mcords, moves, select);
}
- else if(G.obedit->type==OB_MESH) {
+ else if(vc->obedit->type==OB_MESH) {
do_lasso_select_mesh(vc, mcords, moves, select);
- } else if(G.obedit->type==OB_CURVE || G.obedit->type==OB_SURF)
+ } else if(vc->obedit->type==OB_CURVE || vc->obedit->type==OB_SURF)
do_lasso_select_curve(vc, mcords, moves, select);
- else if(G.obedit->type==OB_LATTICE)
+ else if(vc->obedit->type==OB_LATTICE)
do_lasso_select_lattice(vc, mcords, moves, select);
- else if(G.obedit->type==OB_ARMATURE)
+ else if(vc->obedit->type==OB_ARMATURE)
do_lasso_select_armature(vc, mcords, moves, select);
BIF_undo_push("Lasso select");
@@ -934,7 +934,7 @@ static void mouse_select(bContext *C, short *mval, short extend, short obcenter)
/* This block uses the control key to make the object selected by its center point rather then its contents */
/* XXX later on, in editmode do not activate */
- if(G.obedit==NULL && obcenter) {
+ if(vc.obedit==NULL && obcenter) {
/* note; shift+alt goes to group-flush-selecting */
/* XXX solve */
@@ -1088,7 +1088,7 @@ static void mouse_select(bContext *C, short *mval, short extend, short obcenter)
/* so, do we have something selected? */
if(basact) {
- if(G.obedit) {
+ if(vc.obedit) {
/* only do select */
deselectall_except(scene, basact);
ED_base_object_select(basact, BA_SELECT);
@@ -1287,6 +1287,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
ScrArea *sa= CTX_wm_area(C);
View3D *v3d= sa->spacedata.first;
+ Object *obedit= CTX_data_edit_object(C);
rcti rect;
Base *base;
MetaElem *ml;
@@ -1305,29 +1306,29 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
rect.xmax= RNA_int_get(op->ptr, "xmax");
rect.ymax= RNA_int_get(op->ptr, "ymax");
- if(G.obedit==NULL && (FACESEL_PAINT_TEST)) {
+ if(obedit==NULL && (FACESEL_PAINT_TEST)) {
// XXX face_borderselect();
return OPERATOR_FINISHED;
}
- else if(G.obedit==NULL && (G.f & G_PARTICLEEDIT)) {
+ else if(obedit==NULL && (G.f & G_PARTICLEEDIT)) {
// XXX PE_borderselect();
return OPERATOR_FINISHED;
}
- if(G.obedit) {
- if(G.obedit->type==OB_MESH) {
- Mesh *me= G.obedit->data;
+ if(obedit) {
+ if(obedit->type==OB_MESH) {
+ Mesh *me= obedit->data;
vc.em= me->edit_mesh;
do_mesh_box_select(&vc, &rect, (val==LEFTMOUSE));
// if (EM_texFaceCheck())
- WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, G.obedit);
+ WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
}
- else if(ELEM(G.obedit->type, OB_CURVE, OB_SURF)) {
+ else if(ELEM(obedit->type, OB_CURVE, OB_SURF)) {
do_nurbs_box_select(&vc, &rect, val==LEFTMOUSE);
// allqueue(REDRAWVIEW3D, 0);
}
- else if(G.obedit->type==OB_MBALL) {
+ else if(obedit->type==OB_MBALL) {
hits= view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect);
ml= NULL; // XXX editelems.first;
@@ -1350,7 +1351,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
ml= ml->next;
}
}
- else if(G.obedit->type==OB_ARMATURE) {
+ else if(obedit->type==OB_ARMATURE) {
EditBone *ebone;
/* clear flag we use to detect point was affected */
@@ -1403,7 +1404,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
}
}
- else if(G.obedit->type==OB_LATTICE) {
+ else if(obedit->type==OB_LATTICE) {
do_lattice_box_select(&vc, &rect, val==LEFTMOUSE);
}
}
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 1949db88d28..1986203f839 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -1018,10 +1018,10 @@ short view3d_opengl_select(ViewContext *vc, unsigned int *buffer, unsigned int b
glPushName(-1);
code= 1;
- if(G.obedit && G.obedit->type==OB_MBALL) {
+ if(vc->obedit && vc->obedit->type==OB_MBALL) {
draw_object(scene, ar, v3d, BASACT, DRAW_PICKING|DRAW_CONSTCOLOR);
}
- else if ((G.obedit && G.obedit->type==OB_ARMATURE)) {
+ else if ((vc->obedit && vc->obedit->type==OB_ARMATURE)) {
draw_object(scene, ar, v3d, BASACT, DRAW_PICKING|DRAW_CONSTCOLOR);
}
else {
@@ -1139,13 +1139,13 @@ void initlocalview(Scene *scene, ARegion *ar, View3D *v3d)
ok= 0;
}
else {
- if(G.obedit) {
- minmax_object(G.obedit, min, max);
+ if(scene->obedit) {
+ minmax_object(scene->obedit, min, max);
ok= 1;
BASACT->lay |= locallay;
- G.obedit->lay= BASACT->lay;
+ scene->obedit->lay= BASACT->lay;
}
else {
base= FIRSTBASE;
@@ -1203,7 +1203,7 @@ void initlocalview(Scene *scene, ARegion *ar, View3D *v3d)
if( base->lay & locallay ) {
base->lay-= locallay;
if(base->lay==0) base->lay= v3d->layact;
- if(base->object != G.obedit) base->flag |= SELECT;
+ if(base->object != scene->obedit) base->flag |= SELECT;
base->object->lay= base->lay;
}
base= base->next;
@@ -1260,7 +1260,7 @@ void endlocalview(Scene *scene, ScrArea *sa)
if( base->lay & locallay ) {
base->lay-= locallay;
if(base->lay==0) base->lay= v3d->layact;
- if(base->object != G.obedit) {
+ if(base->object != scene->obedit) {
base->flag |= SELECT;
base->object->flag |= SELECT;
}
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index b7322e3142e..584e2e9c4c1 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -132,7 +132,7 @@ static void helpline(TransInfo *t, float *vec)
VECCOPY(vecrot, vec);
if(t->flag & T_EDIT) {
- Object *ob=G.obedit;
+ Object *ob= t->obedit;
if(ob) Mat4MulVecfl(ob->obmat, vecrot);
}
else if(t->flag & T_POSE) {
@@ -1126,8 +1126,8 @@ void initManipulator(int mode)
Trans.mode = mode;
/* automatic switch to scaling bone envelopes */
- if(mode==TFM_RESIZE && G.obedit && G.obedit->type==OB_ARMATURE) {
- bArmature *arm= G.obedit->data;
+ if(mode==TFM_RESIZE && t->obedit && t->obedit->type==OB_ARMATURE) {
+ bArmature *arm= t->obedit->data;
if(arm->drawtype==ARM_ENVELOPE)
mode= TFM_BONE_ENVELOPE;
}
@@ -1721,8 +1721,8 @@ int Warp(TransInfo *t, short mval[2])
VECCOPY(cursor, curs);
VECCOPY(gcursor, cursor);
if (t->flag & T_EDIT) {
- VecSubf(cursor, cursor, G.obedit->obmat[3]);
- VecSubf(gcursor, gcursor, G.obedit->obmat[3]);
+ VecSubf(cursor, cursor, t->obedit->obmat[3]);
+ VecSubf(gcursor, gcursor, t->obedit->obmat[3]);
Mat3MulVecfl(t->data->smtx, gcursor);
}
Mat4MulVecfl(t->viewmat, cursor);
@@ -1894,7 +1894,7 @@ int Shear(TransInfo *t, short mval[2])
if (td->flag & TD_SKIP)
continue;
- if (G.obedit) {
+ if (t->obedit) {
float mat3[3][3];
Mat3MulMat3(mat3, totmat, td->mtx);
Mat3MulMat3(tmat, td->smtx, mat3);
@@ -1937,7 +1937,7 @@ void initResize(TransInfo *t)
t->flag |= T_NULL_ONE;
t->num.flag |= NUM_NULL_ONE;
t->num.flag |= NUM_AFFECT_ALL;
- if (!G.obedit) {
+ if (!t->obedit) {
t->flag |= T_NO_ZERO;
t->num.flag |= NUM_NO_ZERO;
}
@@ -2916,7 +2916,7 @@ int Translation(TransInfo *t, short mval[2])
void initShrinkFatten(TransInfo *t)
{
// If not in mesh edit mode, fallback to Resize
- if (G.obedit==NULL || G.obedit->type != OB_MESH) {
+ if (t->obedit==NULL || t->obedit->type != OB_MESH) {
initResize(t);
}
else {
@@ -3834,7 +3834,7 @@ void initMirror(TransInfo *t)
initMouseInputMode(t, &t->mouse, INPUT_NONE);
t->flag |= T_NULL_ONE;
- if (!G.obedit) {
+ if (!t->obedit) {
t->flag |= T_NO_ZERO;
}
}
diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c
index 94c4ffa1497..cdde416ef9a 100644
--- a/source/blender/editors/transform/transform_constraints.c
+++ b/source/blender/editors/transform/transform_constraints.c
@@ -489,7 +489,7 @@ void setConstraint(TransInfo *t, float space[3][3], int mode, const char text[])
void setLocalConstraint(TransInfo *t, int mode, const char text[]) {
if (t->flag & T_EDIT) {
float obmat[3][3];
- Mat3CpyMat4(obmat, G.obedit->obmat);
+ Mat3CpyMat4(obmat, t->scene->obedit->obmat);
setConstraint(t, obmat, mode|CON_LOCAL, text);
}
else {
@@ -748,8 +748,8 @@ void BIF_drawPropCircle()
BIF_ThemeColor(TH_GRID);
/* if editmode we need to go into object space */
- if(G.obedit && t->spacetype == SPACE_VIEW3D)
- mymultmatrix(G.obedit->obmat);
+ if(t->scene->obedit && t->spacetype == SPACE_VIEW3D)
+ mymultmatrix(t->scene->obedit->obmat);
mygetmatrix(tmat);
Mat4Invert(imat, tmat);
@@ -759,7 +759,7 @@ void BIF_drawPropCircle()
set_inverted_drawing(0);
/* if editmode we restore */
- if(G.obedit && t->spacetype == SPACE_VIEW3D)
+ if(t->scene->obedit && t->spacetype == SPACE_VIEW3D)
myloadmatrix(G.vd->viewmat);
#endif
}
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index de368dcd1dc..020d5143911 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -1968,7 +1968,7 @@ static float *get_crazy_mapped_editverts(TransInfo *t)
}
/* now get the cage */
- dm= editmesh_get_derived_cage(me->edit_mesh, CD_MASK_BAREMESH);
+ dm= editmesh_get_derived_cage(t->obedit, me->edit_mesh, CD_MASK_BAREMESH);
vertexcos= MEM_mallocN(3*sizeof(float)*G.totvert, "vertexcos map");
dm->foreachMappedVert(dm, make_vertexcos__mapFunc, vertexcos);
@@ -2183,7 +2183,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t)
if(modifiers_isDeformed(t->obedit)) {
/* check if we can use deform matrices for modifier from the
start up to stack, they are more accurate than quats */
- totleft= editmesh_get_first_deform_matrices(em, &defmats, &defcos);
+ totleft= editmesh_get_first_deform_matrices(t->obedit, em, &defmats, &defcos);
/* if we still have more modifiers, also do crazyspace
correction with quats, relative to the coordinates after
@@ -3950,8 +3950,7 @@ static void recalc_all_ipos(void)
void special_aftertrans_update(TransInfo *t)
{
Object *ob;
- Base *base;
- short redrawipo=0, resetslowpar=1;
+// short redrawipo=0, resetslowpar=1;
int cancelled= (t->state == TRANS_CANCEL);
short duplicate= (t->undostr && strstr(t->undostr, "Duplicate")) ? 1 : 0;
@@ -4000,7 +3999,6 @@ void special_aftertrans_update(TransInfo *t)
for (ale= anim_data.first; ale; ale= ale->next) {
Object *nob= ANIM_nla_mapping_get(&ac, ale);
Ipo *ipo= ale->key_data;
- IpoCurve *icu;
if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 &&
((cancelled == 0) || (duplicate)) )
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 56aad813b50..5d96b16751c 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -241,7 +241,7 @@ static void clipMirrorModifier(TransInfo *t, Object *ob)
}
}
-/* assumes G.obedit set to mesh object */
+/* assumes obedit set to mesh object */
static void editmesh_apply_to_mirror(TransInfo *t)
{
TransData *td = t->data;
@@ -429,8 +429,8 @@ void recalcData(TransInfo *t)
}
}
}
- else if (G.obedit) {
- if (G.obedit->type == OB_MESH) {
+ else if (t->obedit) {
+ if (t->obedit->type == OB_MESH) {
if(t->spacetype==SPACE_IMAGE) {
flushTransUVs(t);
if (G.sima->flag & SI_LIVE_UNWRAP)
@@ -442,19 +442,19 @@ void recalcData(TransInfo *t)
/* Only retopo if not snapping, Note, this is the only case of G.qual being used, but we have no T_SHIFT_MOD - Campbell */
retopo_do_all();
}
- clipMirrorModifier(t, G.obedit);
+ clipMirrorModifier(t, t->obedit);
}
if((t->options & CTX_NO_MIRROR) == 0 && (G.scene->toolsettings->editbutflag & B_MESH_X_MIRROR))
editmesh_apply_to_mirror(t);
- DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); /* sets recalc flags */
+ DAG_object_flush_update(G.scene, t->obedit, OB_RECALC_DATA); /* sets recalc flags */
recalc_editnormals();
}
}
- else if ELEM(G.obedit->type, OB_CURVE, OB_SURF) {
+ else if ELEM(t->obedit->type, OB_CURVE, OB_SURF) {
Nurb *nu= editNurb.first;
- DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); /* sets recalc flags */
+ DAG_object_flush_update(G.scene, t->obedit, OB_RECALC_DATA); /* sets recalc flags */
if (t->state == TRANS_CANCEL) {
while(nu) {
@@ -471,8 +471,8 @@ void recalcData(TransInfo *t)
retopo_do_all();
}
}
- else if(G.obedit->type==OB_ARMATURE){ /* no recalc flag, does pose */
- bArmature *arm= G.obedit->data;
+ else if(t->obedit->type==OB_ARMATURE){ /* no recalc flag, does pose */
+ bArmature *arm= t->obedit->data;
EditBone *ebo;
TransData *td = t->data;
int i;
@@ -548,13 +548,13 @@ void recalcData(TransInfo *t)
transform_armature_mirror_update();
}
- else if(G.obedit->type==OB_LATTICE) {
- DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); /* sets recalc flags */
+ else if(t->obedit->type==OB_LATTICE) {
+ DAG_object_flush_update(G.scene, t->obedit, OB_RECALC_DATA); /* sets recalc flags */
if(editLatt->flag & LT_OUTSIDE) outside_lattice(editLatt);
}
else {
- DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); /* sets recalc flags */
+ DAG_object_flush_update(G.scene, t->obedit, OB_RECALC_DATA); /* sets recalc flags */
}
}
else if( (t->flag & T_POSE) && t->poseobj) {
@@ -630,7 +630,7 @@ void drawLine(float *center, float *dir, char axis, short options)
float v1[3], v2[3], v3[3];
char col[3], col2[3];
- //if(G.obedit) mymultmatrix(G.obedit->obmat); // sets opengl viewing
+ //if(t->obedit) mymultmatrix(t->obedit->obmat); // sets opengl viewing
VecCopyf(v3, dir);
VecMulf(v3, G.vd->far);
@@ -671,7 +671,7 @@ void initTransInfo (bContext *C, TransInfo *t, wmEvent *event)
/* moving: is shown in drawobject() (transform color) */
// TRANSFORM_FIX_ME
-// if(G.obedit || (t->flag & T_POSE) ) G.moving= G_TRANSFORM_EDIT;
+// if(obedit || (t->flag & T_POSE) ) G.moving= G_TRANSFORM_EDIT;
// else if(G.f & G_PARTICLEEDIT) G.moving= G_TRANSFORM_PARTICLE;
// else G.moving= G_TRANSFORM_OBJ;
@@ -914,7 +914,7 @@ void restoreTransObjects(TransInfo *t)
void calculateCenter2D(TransInfo *t)
{
if (t->flag & (T_EDIT|T_POSE)) {
- Object *ob= G.obedit?G.obedit:t->poseobj;
+ Object *ob= t->obedit?t->obedit:t->poseobj;
float vec[3];
VECCOPY(vec, t->center);
@@ -935,7 +935,7 @@ void calculateCenterCursor(TransInfo *t)
/* If edit or pose mode, move cursor in local space */
if (t->flag & (T_EDIT|T_POSE)) {
- Object *ob = G.obedit?G.obedit:t->poseobj;
+ Object *ob = t->obedit?t->obedit:t->poseobj;
float mat[3][3], imat[3][3];
VecSubf(t->center, t->center, ob->obmat[3]);
@@ -1047,7 +1047,7 @@ void calculateCenter(TransInfo *t)
/* EDIT MODE ACTIVE EDITMODE ELEMENT */
#if 0 // TRANSFORM_FIX_ME
- if (G.obedit && G.obedit->type == OB_MESH && EM_get_actSelection(&ese)) {
+ if (t->obedit && t->obedit->type == OB_MESH && EM_get_actSelection(&ese)) {
EM_editselection_center(t->center, &ese);
calculateCenter2D(t);
break;
@@ -1073,7 +1073,7 @@ void calculateCenter(TransInfo *t)
VECCOPY(t->con.center, t->center);
if(t->flag & (T_EDIT|T_POSE))
{
- Object *ob= G.obedit?G.obedit:t->poseobj;
+ Object *ob= t->obedit?t->obedit:t->poseobj;
Mat4MulVecfl(ob->obmat, t->con.center);
}
@@ -1113,7 +1113,7 @@ void calculateCenter(TransInfo *t)
{
/* initgrabz() defines a factor for perspective depth correction, used in window_to_3d() */
if(t->flag & (T_EDIT|T_POSE)) {
- Object *ob= G.obedit?G.obedit:t->poseobj;
+ Object *ob= t->obedit?t->obedit:t->poseobj;
float vec[3];
VECCOPY(vec, t->center);
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index 692c4a65bd7..6cf38bb1adb 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -231,11 +231,11 @@ int calc_manipulator_stats(ScrArea *sa)
G.scene->twcent[0]= G.scene->twcent[1]= G.scene->twcent[2]= 0.0f;
INIT_MINMAX(G.scene->twmin, G.scene->twmax);
- if(G.obedit) {
- ob= G.obedit;
+ if(t->obedit) {
+ ob= t->obedit;
if((ob->lay & G.vd->lay)==0) return 0;
- if(G.obedit->type==OB_MESH) {
+ if(t->obedit->type==OB_MESH) {
EditMesh *em = NULL; // TRANSFORM_FIX_ME
EditVert *eve;
EditSelection ese;
@@ -256,8 +256,8 @@ int calc_manipulator_stats(ScrArea *sa)
}
}
} /* end editmesh */
- else if (G.obedit->type==OB_ARMATURE){
- bArmature *arm= G.obedit->data;
+ else if (t->obedit->type==OB_ARMATURE){
+ bArmature *arm= t->obedit->data;
EditBone *ebo;
for (ebo=G.edbo.first;ebo;ebo=ebo->next){
if(ebo->layer & arm->layer) {
@@ -275,7 +275,7 @@ int calc_manipulator_stats(ScrArea *sa)
}
}
}
- else if ELEM3(G.obedit->type, OB_CURVE, OB_SURF, OB_FONT) {
+ else if ELEM3(t->obedit->type, OB_CURVE, OB_SURF, OB_FONT) {
Nurb *nu;
BezTriple *bezt;
BPoint *bp;
@@ -331,7 +331,7 @@ int calc_manipulator_stats(ScrArea *sa)
nu= nu->next;
}
}
- else if(G.obedit->type==OB_MBALL) {
+ else if(t->obedit->type==OB_MBALL) {
/* editmball.c */
extern ListBase editelems; /* go away ! */
MetaElem *ml, *ml_sel=NULL;
@@ -346,7 +346,7 @@ int calc_manipulator_stats(ScrArea *sa)
ml= ml->next;
}
}
- else if(G.obedit->type==OB_LATTICE) {
+ else if(t->obedit->type==OB_LATTICE) {
BPoint *bp;
bp= editLatt->def;
@@ -363,9 +363,9 @@ int calc_manipulator_stats(ScrArea *sa)
/* selection center */
if(totsel) {
VecMulf(G.scene->twcent, 1.0f/(float)totsel); // centroid!
- Mat4MulVecfl(G.obedit->obmat, G.scene->twcent);
- Mat4MulVecfl(G.obedit->obmat, G.scene->twmin);
- Mat4MulVecfl(G.obedit->obmat, G.scene->twmax);
+ Mat4MulVecfl(t->obedit->obmat, G.scene->twcent);
+ Mat4MulVecfl(t->obedit->obmat, G.scene->twmin);
+ Mat4MulVecfl(t->obedit->obmat, G.scene->twmax);
}
}
else if(ob && (ob->flag & OB_POSEMODE)) {
@@ -451,7 +451,7 @@ int calc_manipulator_stats(ScrArea *sa)
break;
case V3D_MANIP_NORMAL:
- if(G.obedit || ob->flag & OB_POSEMODE) {
+ if(t->obedit || ob->flag & OB_POSEMODE) {
float mat[3][3];
int type;
@@ -1435,7 +1435,7 @@ void BIF_draw_manipulator(ScrArea *sa)
v3d->twmat[3][0]= (G.scene->twmin[0] + G.scene->twmax[0])/2.0f;
v3d->twmat[3][1]= (G.scene->twmin[1] + G.scene->twmax[1])/2.0f;
v3d->twmat[3][2]= (G.scene->twmin[2] + G.scene->twmax[2])/2.0f;
- if(v3d->around==V3D_ACTIVE && G.obedit==NULL) {
+ if(v3d->around==V3D_ACTIVE && t->obedit==NULL) {
Object *ob= OBACT;
if(ob && !(ob->flag & OB_POSEMODE))
VECCOPY(v3d->twmat[3], ob->obmat[3]);
diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c
index 7082f1a7459..3ce3b1a8127 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -77,10 +77,10 @@ void BIF_manageTransformOrientation(int confirm, int set) {
Object *ob = OBACT;
int index = -1;
- if (G.obedit) {
- if (G.obedit->type == OB_MESH)
+ if (t->obedit) {
+ if (t->obedit->type == OB_MESH)
index = manageMeshSpace(confirm, set);
- else if (G.obedit->type == OB_ARMATURE)
+ else if (t->obedit->type == OB_ARMATURE)
index = manageBoneSpace(confirm, set);
}
else if (ob && (ob->flag & OB_POSEMODE)) {
@@ -431,6 +431,7 @@ int getTransformOrientation(bContext *C, float normal[3], float plane[3], int ac
Scene *scene = CTX_data_scene(C);
ScrArea *sa = CTX_wm_area(C);
View3D *v3d = sa->spacedata.first;
+ Object *obedit= CTX_data_edit_object(C);
Base *base;
Object *ob = OBACT;
int result = ORIENTATION_NONE;
@@ -438,7 +439,7 @@ int getTransformOrientation(bContext *C, float normal[3], float plane[3], int ac
normal[0] = normal[1] = normal[2] = 0;
plane[0] = plane[1] = plane[2] = 0;
- if(G.obedit)
+ if(obedit)
{
float imat[3][3], mat[3][3];
@@ -448,7 +449,7 @@ int getTransformOrientation(bContext *C, float normal[3], float plane[3], int ac
Mat3Inv(mat, imat);
Mat3Transp(mat);
- ob= G.obedit;
+ ob= obedit;
if(ob->type==OB_MESH)
{
@@ -598,7 +599,7 @@ int getTransformOrientation(bContext *C, float normal[3], float plane[3], int ac
}
}
} /* end editmesh */
- else if ELEM3(G.obedit->type, OB_CURVE, OB_SURF, OB_FONT)
+ else if ELEM3(obedit->type, OB_CURVE, OB_SURF, OB_FONT)
{
extern ListBase editNurb; /* BOOO! go away stupid extern */
Nurb *nu;
@@ -644,7 +645,7 @@ int getTransformOrientation(bContext *C, float normal[3], float plane[3], int ac
result = ORIENTATION_NORMAL;
}
}
- else if(G.obedit->type==OB_MBALL)
+ else if(obedit->type==OB_MBALL)
{
/* editmball.c */
extern ListBase editelems; /* go away ! */
@@ -681,9 +682,9 @@ int getTransformOrientation(bContext *C, float normal[3], float plane[3], int ac
result = ORIENTATION_NORMAL;
}
}
- else if (G.obedit->type == OB_ARMATURE)
+ else if (obedit->type == OB_ARMATURE)
{
- bArmature *arm = G.obedit->data;
+ bArmature *arm = obedit->data;
EditBone *ebone;
for (ebone = G.edbo.first; ebone; ebone=ebone->next) {
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 9375a776fed..f6207fd7ab0 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -1184,7 +1184,7 @@ int snapObjects(TransInfo *t, int *dist, float *loc, float *no, int mode) {
Object *ob = t->obedit;
EditMesh *em = ((Mesh *)t->obedit->data)->edit_mesh;
- dm = editmesh_get_derived_cage(em, CD_MASK_BAREMESH);
+ dm = editmesh_get_derived_cage(t->obedit, em, CD_MASK_BAREMESH);
retval = snapDerivedMesh(t, ob, dm, ob->obmat, ray_start, ray_normal, t->mval, loc, no, dist, &depth, 1);
diff --git a/source/blender/editors/util/editmode_undo.c b/source/blender/editors/util/editmode_undo.c
index 2237f403f01..84ecf8e2d38 100644
--- a/source/blender/editors/util/editmode_undo.c
+++ b/source/blender/editors/util/editmode_undo.c
@@ -122,6 +122,7 @@ void undo_editmode_push(bContext *C, char *name,
int (*validate_undo)(void *, void *))
{
UndoElem *uel;
+ Object *obedit= CTX_data_edit_object(C);
void *editdata;
int nr;
uintptr_t memused, totmem, maxmem;
@@ -168,9 +169,9 @@ void undo_editmode_push(bContext *C, char *name,
editdata= getdata(C);
curundo->undodata= curundo->from_editmode(editdata);
curundo->undosize= MEM_get_memory_in_use() - memused;
- curundo->ob= G.obedit;
- curundo->id= G.obedit->id;
- curundo->type= G.obedit->type;
+ curundo->ob= obedit;
+ curundo->id= obedit->id;
+ curundo->type= obedit->type;
if(U.undomemory != 0) {
/* limit to maximum memory (afterwards, we can't know in advance) */
@@ -201,6 +202,7 @@ void undo_editmode_push(bContext *C, char *name,
static void undo_clean_stack(bContext *C)
{
UndoElem *uel, *next;
+ Object *obedit= CTX_data_edit_object(C);
int mixed= 0;
/* global undo changes pointers, so we also allow identical names */
@@ -213,8 +215,8 @@ static void undo_clean_stack(bContext *C)
next= uel->next;
/* for when objects are converted, renamed, or global undo changes pointers... */
- if(uel->type==G.obedit->type) {
- if(strcmp(uel->id.name, G.obedit->id.name)==0) {
+ if(uel->type==obedit->type) {
+ if(strcmp(uel->id.name, obedit->id.name)==0) {
if(uel->validate_undo==NULL)
isvalid= 1;
else if(uel->validate_undo(uel->undodata, editdata))
@@ -222,7 +224,7 @@ static void undo_clean_stack(bContext *C)
}
}
if(isvalid)
- uel->ob= G.obedit;
+ uel->ob= obedit;
else {
mixed= 1;
uel->freedata(uel->undodata);
@@ -265,7 +267,7 @@ void undo_editmode_step(bContext *C, int step)
}
}
-// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
/* XXX notifiers */
}
@@ -324,8 +326,9 @@ void undo_editmode_menu(bContext *C)
static void do_editmode_undohistorymenu(bContext *C, void *arg, int event)
{
+ Object *obedit= CTX_data_edit_object(C);
- if(G.obedit==NULL || event<1) return;
+ if(obedit==NULL || event<1) return;
undo_number(C, event-1);
diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c
index b7923990101..138050d6b9c 100644
--- a/source/blender/editors/util/undo.c
+++ b/source/blender/editors/util/undo.c
@@ -82,20 +82,22 @@ static void sound_initialize_sounds() {}
void ED_undo_push(bContext *C, char *str)
{
- if(G.obedit) {
+ Object *obedit= CTX_data_edit_object(C);
+
+ if(obedit) {
if (U.undosteps == 0) return;
- if(G.obedit->type==OB_MESH)
+ if(obedit->type==OB_MESH)
undo_push_mesh(C, str);
- else if ELEM(G.obedit->type, OB_CURVE, OB_SURF)
+ else if ELEM(obedit->type, OB_CURVE, OB_SURF)
undo_push_curve(str);
- else if (G.obedit->type==OB_FONT)
+ else if (obedit->type==OB_FONT)
undo_push_font(str);
- else if (G.obedit->type==OB_MBALL)
+ else if (obedit->type==OB_MBALL)
undo_push_mball(str);
- else if (G.obedit->type==OB_LATTICE)
+ else if (obedit->type==OB_LATTICE)
undo_push_lattice(str);
- else if (G.obedit->type==OB_ARMATURE)
+ else if (obedit->type==OB_ARMATURE)
undo_push_armature(str);
}
else if(G.f & G_PARTICLEEDIT) {
@@ -111,10 +113,11 @@ void ED_undo_push(bContext *C, char *str)
static int ed_undo_step(bContext *C, wmOperator *op, int step)
{
+ Object *obedit= CTX_data_edit_object(C);
ScrArea *sa= CTX_wm_area(C);
- if(G.obedit) {
- if ELEM7(G.obedit->type, OB_MESH, OB_FONT, OB_CURVE, OB_SURF, OB_MBALL, OB_LATTICE, OB_ARMATURE)
+ if(obedit) {
+ if ELEM7(obedit->type, OB_MESH, OB_FONT, OB_CURVE, OB_SURF, OB_MBALL, OB_LATTICE, OB_ARMATURE)
undo_editmode_step(C, step);
}
else {
@@ -167,8 +170,10 @@ static int ed_redo_exec(bContext *C, wmOperator *op)
void ED_undo_menu(bContext *C)
{
- if(G.obedit) {
- //if ELEM7(G.obedit->type, OB_MESH, OB_FONT, OB_CURVE, OB_SURF, OB_MBALL, OB_LATTICE, OB_ARMATURE)
+ Object *obedit= CTX_data_edit_object(C);
+
+ if(obedit) {
+ //if ELEM7(obedit->type, OB_MESH, OB_FONT, OB_CURVE, OB_SURF, OB_MBALL, OB_LATTICE, OB_ARMATURE)
// undo_editmode_menu();
}
else {
diff --git a/source/blender/makesdna/DNA_armature_types.h b/source/blender/makesdna/DNA_armature_types.h
index 790b9835b68..69b5e9b0f92 100644
--- a/source/blender/makesdna/DNA_armature_types.h
+++ b/source/blender/makesdna/DNA_armature_types.h
@@ -71,6 +71,8 @@ typedef struct bArmature {
ID id;
ListBase bonebase;
ListBase chainbase;
+ ListBase *edbo; /* editbone listbase, we use pointer so we can check state */
+
int flag;
int drawtype;
short deformflag;
diff --git a/source/blender/makesdna/DNA_curve_types.h b/source/blender/makesdna/DNA_curve_types.h
index ebd060776e9..01cd5b1f591 100644
--- a/source/blender/makesdna/DNA_curve_types.h
+++ b/source/blender/makesdna/DNA_curve_types.h
@@ -139,9 +139,10 @@ typedef struct Curve {
struct BoundBox *bb;
ListBase nurb; /* actual data */
- ListBase editlist; /* edited data, not in file */
ListBase disp;
+ ListBase *editnurb; /* edited data, not in file, use pointer so we can check for it */
+
struct Object *bevobj, *taperobj, *textoncurve;
struct Ipo *ipo;
Path *path;
@@ -173,6 +174,7 @@ typedef struct Curve {
float linewidth;
char *str;
+ char *editstr;
char family[24];
struct VFont *vfont;
struct VFont *vfontb;
diff --git a/source/blender/makesdna/DNA_customdata_types.h b/source/blender/makesdna/DNA_customdata_types.h
index e6b18641d2a..7995ce44ec3 100644
--- a/source/blender/makesdna/DNA_customdata_types.h
+++ b/source/blender/makesdna/DNA_customdata_types.h
@@ -75,6 +75,8 @@ typedef struct CustomData {
#define CD_MLOOPCOL 17
#define CD_TANGENT 18
#define CD_NUMTYPES 19
+ /* fake type, derivedmesh wants CustomDataMask for weightpaint too, is not stored */
+#define CD_WEIGHTPAINT 30
/* Bits for CustomDataMask */
#define CD_MASK_MVERT (1 << CD_MVERT)
@@ -97,6 +99,8 @@ typedef struct CustomData {
#define CD_MASK_MLOOPCOL (1 << CD_MLOOPCOL)
#define CD_MASK_TANGENT (1 << CD_TANGENT)
+/* derivedmesh wants CustomDataMask for weightpaint too, is not customdata though */
+#define CD_MASK_WEIGHTPAINT (1 << CD_WEIGHTPAINT)
/* CustomData.flag */
diff --git a/source/blender/makesdna/DNA_lattice_types.h b/source/blender/makesdna/DNA_lattice_types.h
index e889e08b066..3f45a3c1fb0 100644
--- a/source/blender/makesdna/DNA_lattice_types.h
+++ b/source/blender/makesdna/DNA_lattice_types.h
@@ -52,6 +52,8 @@ typedef struct Lattice {
struct Key *key;
struct MDeformVert *dvert;
+
+ struct Lattice *editlatt;
} Lattice;
/* ***************** LATTICE ********************* */
diff --git a/source/blender/makesdna/DNA_meta_types.h b/source/blender/makesdna/DNA_meta_types.h
index d0ebd937740..862f3ca184b 100644
--- a/source/blender/makesdna/DNA_meta_types.h
+++ b/source/blender/makesdna/DNA_meta_types.h
@@ -65,6 +65,7 @@ typedef struct MetaBall {
ListBase elems;
ListBase disp;
+ ListBase *editelems; /* not saved in files, note we use pointer for editmode check */
struct Ipo *ipo;
/* material of the mother ball will define the material used of all others */
diff --git a/source/blender/radiosity/intern/source/radpreprocess.c b/source/blender/radiosity/intern/source/radpreprocess.c
index 30d2e000bb7..6416ab0f1e5 100644
--- a/source/blender/radiosity/intern/source/radpreprocess.c
+++ b/source/blender/radiosity/intern/source/radpreprocess.c
@@ -314,11 +314,6 @@ void rad_collect_meshes(View3D *v3d)
return;
}
- if(G.obedit) {
- if (!during_script()); //XXX error("Unable to perform function in EditMode");
- return;
- }
-
set_radglobal();
freeAllRad();
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index 8e377e266b1..8fd566da30f 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -5532,7 +5532,7 @@ void RE_make_sticky(Scene *scene, View3D *v3d)
printf("Need camera to make sticky\n");
return;
}
- if(G.obedit) {
+ if(scene->obedit) {
printf("Unable to make sticky in Edit Mode\n");
return;
}
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index c0fcc990ff7..d9e3a6daf99 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -865,9 +865,6 @@ void WM_write_file(bContext *C, char *target, ReportList *reports)
// XXX return;
}
- if(G.obedit) {
-// XXX exit_editmode(0); /* 0 = no free data */
- }
if (G.fileflags & G_AUTOPACK) {
packAll();
}