323
321
Mat4MulMat4(mat, go->ob->obmat, ob->obmat);
324
322
dob= new_dupli_object(lb, go->ob, mat, ob->lay, 0);
325
323
dob->no_draw= (dob->origlay & group->layer)==0;
326
if(go->ob->dup_group) {
325
if(go->ob->dup_group && (go->ob->transflag & OB_DUPLIGROUP)) {
327
326
Mat4CpyMat4(dob->ob->obmat, dob->mat);
328
327
group_duplilist(lb, go->ob, level+1);
329
328
Mat4CpyMat4(dob->ob->obmat, dob->omat);
764
763
/* note; group dupli's already set transform matrix. see note in group_duplilist() */
765
764
ListBase *object_duplilist(Scene *sce, Object *ob)
767
static ListBase duplilist={NULL, NULL};
769
if(duplilist.first) {
770
printf("wrong call to object_duplilist\n");
773
duplilist.first= duplilist.last= NULL;
766
ListBase *duplilist= MEM_mallocN(sizeof(ListBase), "duplilist");
767
duplilist->first= duplilist->last= NULL;
775
769
if(ob->transflag & OB_DUPLI) {
776
770
if(ob->transflag & OB_DUPLIVERTS) {
777
771
if(ob->type==OB_MESH) {
779
773
if( (paf=give_parteff(ob)) )
780
particle_duplilist(&duplilist, sce, ob, paf);
774
particle_duplilist(duplilist, sce, ob, paf);
782
vertex_duplilist(&duplilist, sce, ob);
776
vertex_duplilist(duplilist, sce, ob);
784
778
else if(ob->type==OB_FONT) {
785
font_duplilist(&duplilist, ob);
779
font_duplilist(duplilist, ob);
788
782
else if(ob->transflag & OB_DUPLIFACES) {
789
783
if(ob->type==OB_MESH)
790
face_duplilist(&duplilist, sce, ob);
784
face_duplilist(duplilist, sce, ob);
792
786
else if(ob->transflag & OB_DUPLIFRAMES)
793
frames_duplilist(&duplilist, ob);
787
frames_duplilist(duplilist, ob);
794
788
else if(ob->transflag & OB_DUPLIGROUP) {
795
789
DupliObject *dob;
797
group_duplilist(&duplilist, ob, 0); /* now recursive */
791
group_duplilist(duplilist, ob, 0); /* now recursive */
799
793
/* make copy already, because in group dupli's deform displists can be makde, requiring parent matrices */
800
for(dob= duplilist.first; dob; dob= dob->next)
794
for(dob= duplilist->first; dob; dob= dob->next)
801
795
Mat4CpyMat4(dob->ob->obmat, dob->mat);
809
803
void free_object_duplilist(ListBase *lb)