forked from bartvdbraak/blender
Bugfix #2836
Crash in Vertex-duplicator when there's an empty Mesh. Simply added check for dm pointer. :)
This commit is contained in:
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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user