Bugfix, email report.

Copying texture space from Mesh to Curve crashed. Bad code. cleaned up.
This commit is contained in:
2007-02-14 13:52:30 +00:00
parent e215937509
commit 58d6e51cb5
4 changed files with 46 additions and 23 deletions

View File

@@ -2985,14 +2985,54 @@ static void copymenu_modifiers(Object *ob)
BIF_undo_push("Copy modifiers");
}
/* both pointers should exist */
static void copy_texture_space(Object *to, Object *ob)
{
float *poin1= NULL, *poin2= NULL;
int texflag= 0;
if(ob->type==OB_MESH) {
texflag= ((Mesh *)ob->data)->texflag;
poin2= ((Mesh *)ob->data)->loc;
}
else if (ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT)) {
texflag= ((Curve *)ob->data)->texflag;
poin2= ((Curve *)ob->data)->loc;
}
else if(ob->type==OB_MBALL) {
texflag= ((MetaBall *)ob->data)->texflag;
poin2= ((MetaBall *)ob->data)->loc;
}
else
return;
if(to->type==OB_MESH) {
((Mesh *)ob->data)->texflag= texflag;
poin2= ((Mesh *)to->data)->loc;
}
else if (ELEM3(to->type, OB_CURVE, OB_SURF, OB_FONT)) {
((Curve *)ob->data)->texflag= texflag;
poin2= ((Curve *)to->data)->loc;
}
else if(to->type==OB_MBALL) {
((MetaBall *)ob->data)->texflag= texflag;
poin2= ((MetaBall *)to->data)->loc;
}
memcpy(poin1, poin2, 9*sizeof(float)); /* this was noted in DNA_mesh, curve, mball */
if(to->type==OB_MESH) ;
else if(to->type==OB_MBALL) tex_space_mball(to);
else tex_space_curve(to->data);
}
void copy_attr(short event)
{
Object *ob, *obt;
Object *ob;
Base *base;
Curve *cu, *cu1;
Nurb *nu;
void *poin1, *poin2=0;
int do_scene_sort= 0;
if(G.scene->id.lib) return;
@@ -3003,13 +3043,6 @@ void copy_attr(short event)
/* obedit_copymenu(); */
return;
}
if ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL) {
if(ob->type==OB_MESH) poin2= &(((Mesh *)ob->data)->texflag);
else if ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT) poin2= &(((Curve *)ob->data)->texflag);
else if(ob->type==OB_MBALL) poin2= &(((MetaBall *)ob->data)->texflag);
}
if(event==9) {
copymenu_properties(ob);
return;
@@ -3073,19 +3106,7 @@ void copy_attr(short event)
base->object->rdamping= ob->rdamping;
}
else if(event==17) { /* tex space */
obt= base->object;
poin1= 0;
if(obt->type==OB_MESH) poin1= &(((Mesh *)obt->data)->texflag);
else if ELEM3(obt->type, OB_CURVE, OB_SURF, OB_FONT) poin1= &(((Curve *)obt->data)->texflag);
else if(obt->type==OB_MBALL) poin1= &(((MetaBall *)obt->data)->texflag);
if(poin1) {
memcpy(poin1, poin2, 4+12+12+12);
if(obt->type==OB_MESH) ;
else if(obt->type==OB_MBALL) tex_space_mball(obt);
else tex_space_curve(obt->data);
}
copy_texture_space(base->object, ob);
}
else if(event==18) { /* font settings */