Crash in Vertex-duplicator when there's an empty Mesh. Simply added check
for dm pointer. :)
This commit is contained in:
Ton Roosendaal 2005-07-17 09:49:02 +00:00
parent ef73b6f140
commit 3ab974ca58

@ -342,48 +342,49 @@ void vertex_duplilist(Scene *sce, Object *par)
lay= G.scene->lay; lay= G.scene->lay;
dm = mesh_get_derived_deform(par, &dmNeedsFree); dm = mesh_get_derived_deform(par, &dmNeedsFree);
totvert = dm->getNumVerts(dm); if(dm) {
totvert = dm->getNumVerts(dm);
base= sce->base.first; base= sce->base.first;
while(base) { while(base) {
if(base->object->type>0 && (lay & base->lay) && G.obedit!=base->object) { if(base->object->type>0 && (lay & base->lay) && G.obedit!=base->object) {
ob= base->object->parent; ob= base->object->parent;
while(ob) { while(ob) {
if(ob==par) { if(ob==par) {
ob= base->object; ob= base->object;
/* mballs have a different dupli handling */ /* mballs have a different dupli handling */
if(ob->type!=OB_MBALL) ob->flag |= OB_DONE; /* doesnt render */ if(ob->type!=OB_MBALL) ob->flag |= OB_DONE; /* doesnt render */
for(a=0; a<totvert; a++) { for(a=0; a<totvert; a++) {
dm->getVertCo(dm, a, vec); dm->getVertCo(dm, a, vec);
Mat4MulVecfl(pmat, vec); Mat4MulVecfl(pmat, vec);
VecSubf(vec, vec, pmat[3]); VecSubf(vec, vec, pmat[3]);
VecAddf(vec, vec, ob->obmat[3]); VecAddf(vec, vec, ob->obmat[3]);
newob= new_dupli_object(&duplilist, ob, par);
VECCOPY(newob->obmat[3], vec);
if(par->transflag & OB_DUPLIROT) {
dm->getVertNo(dm, a, vec);
vec[0]= -vec[0]; vec[1]= -vec[1]; vec[2]= -vec[2];
q2= vectoquat(vec, ob->trackflag, ob->upflag); newob= new_dupli_object(&duplilist, ob, par);
VECCOPY(newob->obmat[3], vec);
QuatToMat3(q2, mat);
Mat4CpyMat4(tmat, newob->obmat); if(par->transflag & OB_DUPLIROT) {
Mat4MulMat43(newob->obmat, tmat, mat); dm->getVertNo(dm, a, vec);
vec[0]= -vec[0]; vec[1]= -vec[1]; vec[2]= -vec[2];
q2= vectoquat(vec, ob->trackflag, ob->upflag);
QuatToMat3(q2, mat);
Mat4CpyMat4(tmat, newob->obmat);
Mat4MulMat43(newob->obmat, tmat, mat);
}
} }
break;
} }
break; ob= ob->parent;
} }
ob= ob->parent;
} }
base= base->next;
} }
base= base->next;
} }
if (dmNeedsFree) if (dmNeedsFree)
dm->release(dm); dm->release(dm);
} }