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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/BKE_mesh.h1
-rw-r--r--source/blender/blenkernel/intern/displist.c17
-rw-r--r--source/blender/blenkernel/intern/exotic.c34
-rw-r--r--source/blender/blenkernel/intern/mesh.c60
-rw-r--r--source/blender/python/api2_2x/NMesh.c1
-rw-r--r--source/blender/radiosity/intern/source/radpostprocess.c1
-rw-r--r--source/blender/src/booleanops.c5
-rw-r--r--source/blender/src/booleanops_mesh.c3
-rw-r--r--source/blender/src/buttons_editing.c5
-rw-r--r--source/blender/src/drawobject.c56
-rw-r--r--source/blender/src/editmesh.c2
-rw-r--r--source/blender/src/editobject.c15
12 files changed, 80 insertions, 120 deletions
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 4e4ce341395..c20f0fd3e4e 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -79,6 +79,7 @@ void mesh_delete_material_index(struct Mesh *me, int index);
void mesh_set_smooth_flag(struct Object *meshOb, int enableSmooth);
struct BoundBox *mesh_get_bb(struct Mesh *me);
+void mesh_get_texspace(struct Mesh *me, float *loc_r, float *rot_r, float *size_r);
void make_edges(struct Mesh *me);
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index 55eaf43ab40..49f1736caf9 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -1608,6 +1608,7 @@ void mesh_changed(Object *meshOb)
{
Mesh *me = meshOb->data;
+ /* also serves as signal to remake texspace */
if (me->bb) {
MEM_freeN(me->bb);
me->bb = NULL;
@@ -1646,8 +1647,6 @@ void makeDispListMesh(Object *ob)
me->derived= NULL;
}
- tex_space_mesh(ob->data);
-
if (ob!=G.obedit) mesh_modifier(ob, 's');
if (mesh_uses_displist(me)) { /* subsurf */
@@ -2210,6 +2209,8 @@ void imagestodisplist(void)
}
if(tot) {
+ float size[3];
+
freedisplist(&(ob->disp));
dl= MEM_callocN(sizeof(DispList), "makeDispListimage");
@@ -2222,8 +2223,10 @@ void imagestodisplist(void)
xsi= 0.5*(tex->ima->ibuf->x);
ysi= 0.5*(tex->ima->ibuf->y);
- xfac= me->size[0]/xsi;
- yfac= me->size[1]/ysi;
+
+ mesh_get_texspace(me, NULL, NULL, size);
+ xfac= size[0]/xsi;
+ yfac= size[1]/ysi;
data= dl->verts;
seg = wireframe->first;
@@ -2258,14 +2261,10 @@ void boundbox_displist(Object *ob)
INIT_MINMAX(min, max);
if(ob->type==OB_MESH) {
- Mesh *me= ob->data;
-
+ bb= mesh_get_bb(ob->data);
dl= find_displist(&ob->disp, DL_VERTS);
if(!dl) return;
- if(me->bb==0) me->bb= MEM_callocN(sizeof(BoundBox), "boundbox");
- bb= me->bb;
-
vert= dl->verts;
for(a=0; a<dl->nr; a++, vert+=3) {
DO_MINMAX(vert, min, max);
diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c
index b49143ff48f..76b42aac37f 100644
--- a/source/blender/blenkernel/intern/exotic.c
+++ b/source/blender/blenkernel/intern/exotic.c
@@ -304,8 +304,6 @@ static void read_stl_mesh_binary(char *str)
me->totvert = totvert;
mesh_add_normals_flags(me);
-
- tex_space_mesh(me);
}
waitcursor(1);
}
@@ -471,7 +469,6 @@ static void read_stl_mesh_ascii(char *str)
mesh_add_normals_flags(me);
- tex_space_mesh(me);
waitcursor(1);
}
@@ -694,7 +691,7 @@ static void read_videoscape_mesh(char *str)
load_editMesh();
free_editMesh(G.editMesh);
G.obedit= 0;
- tex_space_mesh(me);
+
waitcursor(1);
}
@@ -880,7 +877,6 @@ static void read_radiogour(char *str)
free_editMesh(G.editMesh);
G.obedit= 0;
- tex_space_mesh(me);
waitcursor(1);
}
@@ -2260,8 +2256,6 @@ static void displist_to_mesh(DispList *dlfirst)
}
mesh_add_normals_flags(me);
- tex_space_mesh(me);
-
}
static void displist_to_objects(ListBase *lbase)
@@ -3771,7 +3765,6 @@ static void dxf_read_point(int noob) {
G.obedit= 0;
}
- tex_space_mesh(me);
hasbumped=1;
}
@@ -3795,7 +3788,6 @@ static void dxf_close_line(void)
waitcursor(1); /* patch yah... */
G.obedit= 0;
- tex_space_mesh(linehold->data);
linehold=NULL;
}
@@ -3908,19 +3900,18 @@ static short lwasp2d=0;
static void dxf_close_2dpoly(void)
{
- p2dmhold= NULL;
- if (p2dhold==NULL) return;
+ p2dmhold= NULL;
+ if (p2dhold==NULL) return;
- G.obedit= p2dhold;
- make_editMesh();
- load_editMesh();
- free_editMesh(G.editMesh);
- waitcursor(1); /* patch yah... */
-
- G.obedit= 0;
- tex_space_mesh(p2dhold->data);
+ G.obedit= p2dhold;
+ make_editMesh();
+ load_editMesh();
+ free_editMesh(G.editMesh);
+ waitcursor(1); /* patch yah... */
+
+ G.obedit= 0;
- p2dhold=NULL;
+ p2dhold=NULL;
}
static void dxf_read_ellipse(int noob)
@@ -4527,7 +4518,6 @@ static void dxf_read_polyline(int noob) {
waitcursor(1); /* patch yah... */
G.obedit= 0;
}
- tex_space_mesh(me);
}
}
@@ -4655,7 +4645,6 @@ static void dxf_close_3dface(void)
free_editMesh(G.editMesh);
waitcursor(1); /* patch yah... */
G.obedit= 0;
- tex_space_mesh(f3dhold->data);
f3dhold=NULL;
}
@@ -5048,7 +5037,6 @@ static void dxf_read(char *filename)
free_editMesh(G.editMesh);
waitcursor(1); /* patch yah... */
G.obedit= 0;
- tex_space_mesh(ob->data);
}
hasbumped=1;
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 3ab98b550a2..f9f1285a5be 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -406,23 +406,16 @@ void tex_space_mesh(Mesh *me)
}
}
+ for (a=0; a<3; a++) {
+ if(size[a]==0.0) size[a]= 1.0;
+ else if(size[a]>0.0 && size[a]<0.00001) size[a]= 0.00001;
+ else if(size[a]<0.0 && size[a]> -0.00001) size[a]= -0.00001;
+ }
+
VECCOPY(me->loc, loc);
VECCOPY(me->size, size);
me->rot[0]= me->rot[1]= me->rot[2]= 0.0;
-
- if(me->size[0]==0.0) me->size[0]= 1.0;
- else if(me->size[0]>0.0 && me->size[0]<0.00001) me->size[0]= 0.00001;
- else if(me->size[0]<0.0 && me->size[0]> -0.00001) me->size[0]= -0.00001;
-
- if(me->size[1]==0.0) me->size[1]= 1.0;
- else if(me->size[1]>0.0 && me->size[1]<0.00001) me->size[1]= 0.00001;
- else if(me->size[1]<0.0 && me->size[1]> -0.00001) me->size[1]= -0.00001;
-
- if(me->size[2]==0.0) me->size[2]= 1.0;
- else if(me->size[2]>0.0 && me->size[2]<0.00001) me->size[2]= 0.00001;
- else if(me->size[2]<0.0 && me->size[2]> -0.00001) me->size[2]= -0.00001;
}
-
}
BoundBox *mesh_get_bb(Mesh *me)
@@ -434,15 +427,25 @@ BoundBox *mesh_get_bb(Mesh *me)
return me->bb;
}
+void mesh_get_texspace(Mesh *me, float *loc_r, float *rot_r, float *size_r)
+{
+ if (!me->bb) {
+ tex_space_mesh(me);
+ }
+
+ if (loc_r) VECCOPY(loc_r, me->loc);
+ if (rot_r) VECCOPY(rot_r, me->rot);
+ if (size_r) VECCOPY(size_r, me->size);
+}
+
void make_orco_displist_mesh(Object *ob, int subdivlvl)
{
- Mesh *me;
+ Mesh *me= ob->data;
DerivedMesh *dm;
DispListMesh *dlm;
+ float loc[3], size[3];
int i;
- me= ob->data;
-
if (G.obedit && G.obedit->data==me) {
dm= subsurf_make_derived_from_editmesh(G.editMesh, subdivlvl, me->subsurftype, NULL);
dlm= dm->convertToDispListMesh(dm);
@@ -464,14 +467,13 @@ void make_orco_displist_mesh(Object *ob, int subdivlvl)
if (me->orco) MEM_freeN(me->orco);
me->orco= MEM_mallocN(dlm->totvert*3*sizeof(float), "mesh displist orco");
+ mesh_get_texspace(me, loc, NULL, size);
for(i=0; i<dlm->totvert; i++) {
float *fp= &me->orco[i*3];
- VECCOPY(fp, dlm->mvert[i].co);
-
- fp[0]= (fp[0]-me->loc[0])/me->size[0];
- fp[1]= (fp[1]-me->loc[1])/me->size[1];
- fp[2]= (fp[2]-me->loc[2])/me->size[2];
+ fp[0]= (dlm->mvert[i].co[0] - loc[0])/size[0];
+ fp[1]= (dlm->mvert[i].co[1] - loc[1])/size[1];
+ fp[2]= (dlm->mvert[i].co[2] - loc[2])/size[2];
}
displistmesh_free(dlm);
@@ -483,20 +485,22 @@ void make_orco_mesh(Mesh *me)
KeyBlock *kb;
float *orco, *fp;
int a, totvert;
+ float loc[3], size[3];
totvert= me->totvert;
if(totvert==0) return;
orco= me->orco= MEM_mallocN(sizeof(float)*3*totvert, "orco mesh");
+ mesh_get_texspace(me, loc, NULL, size);
if(me->key && me->texcomesh==0) {
kb= me->key->refkey;
if (kb) { /***** BUG *****/
fp= kb->data;
for(a=0; a<totvert; a++, orco+=3) {
- orco[0]= (fp[0]-me->loc[0])/me->size[0];
- orco[1]= (fp[1]-me->loc[1])/me->size[1];
- orco[2]= (fp[2]-me->loc[2])/me->size[2];
+ orco[0]= (fp[0]-loc[0])/size[0];
+ orco[1]= (fp[1]-loc[1])/size[1];
+ orco[2]= (fp[2]-loc[2])/size[2];
/* only increase mvert when totvert <= kb->totelem */
if(a<kb->totelem) fp+=3;
@@ -510,9 +514,9 @@ void make_orco_mesh(Mesh *me)
mvert= me->mvert;
for(a=0; a<totvert; a++, orco+=3) {
- orco[0]= (mvert->co[0]-me->loc[0])/me->size[0];
- orco[1]= (mvert->co[1]-me->loc[1])/me->size[1];
- orco[2]= (mvert->co[2]-me->loc[2])/me->size[2];
+ orco[0]= (mvert->co[0]-loc[0])/size[0];
+ orco[1]= (mvert->co[1]-loc[1])/size[1];
+ orco[2]= (mvert->co[2]-loc[2])/size[2];
/* only increase mvert when totvert <= me->totvert */
if(a<me->totvert) mvert++;
@@ -1152,8 +1156,6 @@ void nurbs_to_mesh(Object *ob)
ob->data= me;
ob->type= OB_MESH;
- tex_space_mesh(me);
-
/* other users */
ob1= G.main->object.first;
while(ob1) {
diff --git a/source/blender/python/api2_2x/NMesh.c b/source/blender/python/api2_2x/NMesh.c
index 2d2d9cc039c..d1f720e4148 100644
--- a/source/blender/python/api2_2x/NMesh.c
+++ b/source/blender/python/api2_2x/NMesh.c
@@ -305,7 +305,6 @@ vertex coordinatess.\n";
void mesh_update( Mesh * mesh )
{
edge_drawflags_mesh( mesh );
- tex_space_mesh( mesh );
}
/*****************************/
diff --git a/source/blender/radiosity/intern/source/radpostprocess.c b/source/blender/radiosity/intern/source/radpostprocess.c
index 74b72e3cab6..12a7408a399 100644
--- a/source/blender/radiosity/intern/source/radpostprocess.c
+++ b/source/blender/radiosity/intern/source/radpostprocess.c
@@ -1014,7 +1014,6 @@ void rad_addmesh(void)
}
VECCOPY(ob->loc, cent);
- tex_space_mesh(me);
/* restore colors */
face= RG.facebase[(startf-1)>>10]+((startf-1) & 1023);
diff --git a/source/blender/src/booleanops.c b/source/blender/src/booleanops.c
index 644813c0e01..bd706dd592b 100644
--- a/source/blender/src/booleanops.c
+++ b/source/blender/src/booleanops.c
@@ -544,9 +544,6 @@ NewBooleanMesh(
&vd_o,
inv_mat
);
-
- // initialize the object
- tex_space_mesh(me_new);
// free up the memory
@@ -785,7 +782,7 @@ ConvertCSGDescriptorsToMeshObject(
me->totface = face_it->num_elements;
mesh_calculate_vertex_normals(me);
-
+
// thats it!
if (user_face_vertex_data) {
MEM_freeN(user_face_vertex_data);
diff --git a/source/blender/src/booleanops_mesh.c b/source/blender/src/booleanops_mesh.c
index 152c1391d71..88f2cb98aac 100644
--- a/source/blender/src/booleanops_mesh.c
+++ b/source/blender/src/booleanops_mesh.c
@@ -187,9 +187,6 @@ CSG_AddMeshToBlender(
inv_mat
);
- // initialize the object
- tex_space_mesh(me_new);
-
return 1;
}
diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c
index 1458ab1b35b..d1db3b5de7e 100644
--- a/source/blender/src/buttons_editing.c
+++ b/source/blender/src/buttons_editing.c
@@ -381,7 +381,6 @@ static void decimate_apply(void)
load_editMesh();
free_editMesh(G.editMesh);
G.obedit= NULL;
- tex_space_mesh(me);
BIF_undo_push("Apply decimation");
}
@@ -560,9 +559,7 @@ void do_common_editbuts(unsigned short event) // old name, is a mix of object an
case B_AUTOTEX:
ob= OBACT;
if(ob && G.obedit==0) {
- if(ob->type==OB_MESH) tex_space_mesh(ob->data);
- else if(ob->type==OB_MBALL) ;
- else tex_space_curve(ob->data);
+ if(ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT)) tex_space_curve(ob->data);
}
break;
case B_DOCENTRE:
diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c
index 97a4a9d5f59..0b8c52863ac 100644
--- a/source/blender/src/drawobject.c
+++ b/source/blender/src/drawobject.c
@@ -3322,60 +3322,46 @@ static void draw_bounding_volume(Object *ob)
static void drawtexspace(Object *ob)
{
- Mesh *me;
- MetaBall *mb;
- Curve *cu;
- BoundBox bb;
- float *vec, *loc, *size;
+ float vec[8][3], loc[3], size[3];
if(ob->type==OB_MESH) {
- me= ob->data;
- size= me->size;
- loc= me->loc;
+ mesh_get_texspace(ob->data, loc, NULL, size);
}
else if ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT) {
- cu= ob->data;
- size= cu->size;
- loc= cu->loc;
+ Curve *cu= ob->data;
+ VECCOPY(size, cu->size);
+ VECCOPY(loc, cu->loc);
}
else if(ob->type==OB_MBALL) {
- mb= ob->data;
- size= mb->size;
- loc= mb->loc;
+ MetaBall *mb= ob->data;
+ VECCOPY(size, mb->size);
+ VECCOPY(loc, mb->loc);
}
else return;
- bb.vec[0][0]=bb.vec[1][0]=bb.vec[2][0]=bb.vec[3][0]= loc[0]-size[0];
- bb.vec[4][0]=bb.vec[5][0]=bb.vec[6][0]=bb.vec[7][0]= loc[0]+size[0];
+ vec[0][0]=vec[1][0]=vec[2][0]=vec[3][0]= loc[0]-size[0];
+ vec[4][0]=vec[5][0]=vec[6][0]=vec[7][0]= loc[0]+size[0];
- bb.vec[0][1]=bb.vec[1][1]=bb.vec[4][1]=bb.vec[5][1]= loc[1]-size[1];
- bb.vec[2][1]=bb.vec[3][1]=bb.vec[6][1]=bb.vec[7][1]= loc[1]+size[1];
+ vec[0][1]=vec[1][1]=vec[4][1]=vec[5][1]= loc[1]-size[1];
+ vec[2][1]=vec[3][1]=vec[6][1]=vec[7][1]= loc[1]+size[1];
- bb.vec[0][2]=bb.vec[3][2]=bb.vec[4][2]=bb.vec[7][2]= loc[2]-size[2];
- bb.vec[1][2]=bb.vec[2][2]=bb.vec[5][2]=bb.vec[6][2]= loc[2]+size[2];
+ vec[0][2]=vec[3][2]=vec[4][2]=vec[7][2]= loc[2]-size[2];
+ vec[1][2]=vec[2][2]=vec[5][2]=vec[6][2]= loc[2]+size[2];
setlinestyle(2);
-
- vec= bb.vec[0];
-
- glBegin(GL_LINE_STRIP);
- glVertex3fv(vec); glVertex3fv(vec+3);glVertex3fv(vec+6); glVertex3fv(vec+9);
- glVertex3fv(vec); glVertex3fv(vec+12);glVertex3fv(vec+15); glVertex3fv(vec+18);
- glVertex3fv(vec+21); glVertex3fv(vec+12);
- glEnd();
glBegin(GL_LINE_STRIP);
- glVertex3fv(vec+3); glVertex3fv(vec+15);
+ glVertex3fv(vec[0]); glVertex3fv(vec[1]);glVertex3fv(vec[2]); glVertex3fv(vec[3]);
+ glVertex3fv(vec[0]); glVertex3fv(vec[4]);glVertex3fv(vec[5]); glVertex3fv(vec[6]);
+ glVertex3fv(vec[7]); glVertex3fv(vec[4]);
glEnd();
- glBegin(GL_LINE_STRIP);
- glVertex3fv(vec+6); glVertex3fv(vec+18);
+ glBegin(GL_LINES);
+ glVertex3fv(vec[1]); glVertex3fv(vec[5]);
+ glVertex3fv(vec[2]); glVertex3fv(vec[6]);
+ glVertex3fv(vec[3]); glVertex3fv(vec[7]);
glEnd();
- glBegin(GL_LINE_STRIP);
- glVertex3fv(vec+9); glVertex3fv(vec+21);
- glEnd();
-
setlinestyle(0);
}
diff --git a/source/blender/src/editmesh.c b/source/blender/src/editmesh.c
index 9d942b62b44..f080baa88d6 100644
--- a/source/blender/src/editmesh.c
+++ b/source/blender/src/editmesh.c
@@ -1126,8 +1126,6 @@ void load_editMesh(void)
}
}
- tex_space_mesh(me);
-
/* tface block */
if( me->tface && me->totface ) {
TFace *tfn, *tf;
diff --git a/source/blender/src/editobject.c b/source/blender/src/editobject.c
index 5714764b694..e25350046ba 100644
--- a/source/blender/src/editobject.c
+++ b/source/blender/src/editobject.c
@@ -1703,8 +1703,6 @@ void docentre(int centremode)
ob= ob->id.next;
}
}
- /* DO: check all users... */
- tex_space_mesh(me);
}
else if ELEM(base->object->type, OB_CURVE, OB_SURF) {
@@ -2313,7 +2311,6 @@ void convertmenu(void)
}
mball_to_mesh(&ob->disp, ob1->data);
- tex_space_mesh(me);
}
}
}
@@ -2572,7 +2569,7 @@ void copy_attr(short event)
if(poin1) {
memcpy(poin1, poin2, 4+12+12+12);
- if(obt->type==OB_MESH) tex_space_mesh(obt->data);
+ if(obt->type==OB_MESH) ;
else if(obt->type==OB_MBALL) tex_space_mball(obt);
else tex_space_curve(obt->data);
}
@@ -4293,8 +4290,6 @@ void image_aspect(void)
Object *ob;
Material *ma;
Tex *tex;
- Mesh *me;
- Curve *cu;
float x, y, space;
int a, b, done;
@@ -4314,14 +4309,16 @@ void image_aspect(void)
if(ma->mtex[b] && ma->mtex[b]->tex) {
tex= ma->mtex[b]->tex;
if(tex->type==TEX_IMAGE && tex->ima && tex->ima->ibuf) {
+
/* texturespace */
space= 1.0;
if(ob->type==OB_MESH) {
- me= ob->data;
- space= me->size[0]/me->size[1];
+ float size[3];
+ mesh_get_texspace(ob->data, NULL, NULL, size);
+ space= size[0]/size[1];
}
else if ELEM3(ob->type, OB_CURVE, OB_FONT, OB_SURF) {
- cu= ob->data;
+ Curve *cu= ob->data;
space= cu->size[0]/cu->size[1];
}