Two fixes;
authorTon Roosendaal <ton@blender.org>
Fri, 26 Nov 2004 12:20:35 +0000 (12:20 +0000)
committerTon Roosendaal <ton@blender.org>
Fri, 26 Nov 2004 12:20:35 +0000 (12:20 +0000)
- Bug #1890. While render subsurf in editmode, orco coordinates were
  incorrect (subsurf vertices in editmode have different ordering)
  Bug was oldie.
- IRC reported by Stefano; oops (not outliner) didnt show lamp textures
  nor material ipos correctly.
  Found error in oops curved lines too (the ones starting at right side)

source/blender/renderconverter/intern/convertBlenderScene.c
source/blender/src/drawoops.c
source/blender/src/oops.c

index ca78e319e84bad9d77794fdfafa0f55ab8d4eb3d..ab882cd301561904dcfde1f9d08fc9898b2c288e 100644 (file)
@@ -1329,8 +1329,9 @@ static void init_render_mesh(Object *ob)
                dl= me->disp.first;
 
                /* Force a displist rebuild if this is a subsurf and we have a different subdiv level */
-
-               if((dl==NULL) || ((me->subdiv != me->subdivr))) {
+               /* also when object is in editmode, displist ordering for editmode is different, giving orco probs */
+               
+               if((dl==NULL) || ((me->subdiv != me->subdivr)) || (ob==G.obedit)) {
                        /* prevent subsurf called again for duplicate use of mesh, tface pointers change */
                        if(dl==NULL || (me->subdivdone-1)!=me->subdivr) {
                                DispList *dlVerts;
@@ -2685,7 +2686,7 @@ void RE_freeRotateBlenderScene(void)
                a++;
        }
 
-       /* free orco. check all obejcts because of duplis and sets */
+       /* free orco. check all objects because of duplis and sets */
        ob= G.main->object.first;
        while(ob) {
 
@@ -2702,7 +2703,7 @@ void RE_freeRotateBlenderScene(void)
                                MEM_freeN(me->orco);
                                me->orco= 0;
                        }
-                       if (mesh_uses_displist(me) && ((me->subdiv!=me->subdivr) || (ob->effect.first != NULL) ) ) { 
+                       if (mesh_uses_displist(me) && ((me->subdiv!=me->subdivr) || (ob->effect.first != NULL) || ob==G.obedit) ) { 
                            /* Need to recalc for effects since they are time dependant */
                                makeDispList(ob);  /* XXX this should be replaced with proper caching */
                                me->subdivdone= 0;      /* needed to prevent multiple used meshes being recalculated */
index e2792737e76b04ae00a940f5995bf768ce680eb7..4cfae91c6652e76474511b28d4647244d2304b43 100644 (file)
@@ -157,16 +157,21 @@ void draw_oopslink(Oops *oops)
                        give_oopslink_line(oops, ol, vec[0], vec[3]);
                        
                        dist= 0.5*VecLenf(vec[0], vec[3]);
-                       
+
                        /* check ol->xof and yof for direction */
-                       if(ol->xof <= 0.0) {
+                       if(ol->xof == 0.0) {
                                vec[1][0]= vec[0][0]-dist;
                                vec[1][1]= vec[0][1];
                        }
+                       else if(ol->xof==OOPSX) {
+                               vec[1][0]= vec[0][0]+dist;
+                               vec[1][1]= vec[0][1];
+                       }
                        else {
                                vec[1][0]= vec[0][0];
                                vec[1][1]= vec[0][1]+dist;
                        }
+                       
                        /* v3 is always pointing down */
                        vec[2][0]= vec[3][0];
                        vec[2][1]= vec[3][1] - dist;
index 95fdbc1bff1d13e55aa924986755c8855287908b..8b2bee49a9f5dc4cdf0f2a103513c7947e32fb9f 100644 (file)
@@ -750,6 +750,20 @@ void add_mball_oopslinks(MetaBall *mb, Oops *oops, short flag)
        }
 }
 
+void add_lamp_oopslinks(Lamp *la, Oops *oops, short flag)
+{
+       int a;
+       
+       if(flag & OOPS_TE) {
+               for(a=0; a<6; a++) {
+                       if(la->mtex[a]) {
+                               add_oopslink("tex", oops, ID_TE, &(la->mtex[a]->tex), 0.0, (float)(0.5*OOPSY));
+                       }
+               }
+       }
+}
+
+
 Oops *add_test_oops(void *id)  /* incl links */
 {
        Oops *oops;
@@ -793,8 +807,8 @@ Oops *add_test_oops(void *id)       /* incl links */
                add_mball_oopslinks((MetaBall *)id, oops, G.soops->visiflag);
                break;
        case ID_LA:
-               /* still do textures */
                la= (Lamp *)id;
+               add_lamp_oopslinks(la, oops, G.soops->visiflag);
                if(la->ipo) if(G.soops->visiflag & OOPS_IP) add_oopslink("ipo", oops, ID_IP, &la->ipo, OOPSX, (float)(0.3*OOPSY));
                break;   
        case ID_IP:
@@ -969,6 +983,7 @@ void build_oops()
                                                if(ob->mat[a]) {
                                                        oops= add_test_oops(ob->mat[a]);
                                                        if(G.soops->visiflag & OOPS_TE) add_texture_oops(ob->mat[a]);
+                                                       if(G.soops->visiflag & OOPS_IP) add_test_oops(ob->mat[a]->ipo);
                                                }
                                        }
                                }
@@ -987,6 +1002,7 @@ void build_oops()
                                                                if(me->mat[a]) {
                                                                        oops= add_test_oops(me->mat[a]);
                                                                        if(G.soops->visiflag & OOPS_TE) add_texture_oops(me->mat[a]);
+                                                                       if(G.soops->visiflag & OOPS_IP) add_test_oops(me->mat[a]->ipo);
                                                                }
                                                        }
                                                }
@@ -1003,6 +1019,7 @@ void build_oops()
                                                                if(cu->mat[a]) {
                                                                        oops= add_test_oops(cu->mat[a]);
                                                                        if(G.soops->visiflag & OOPS_TE) add_texture_oops(cu->mat[a]);
+                                                                       if(G.soops->visiflag & OOPS_IP) add_test_oops(cu->mat[a]->ipo);
                                                                }
                                                        }
                                                }
@@ -1020,12 +1037,20 @@ void build_oops()
                                                                if(mb->mat[a]) {
                                                                        oops= add_test_oops(mb->mat[a]);
                                                                        if(G.soops->visiflag & OOPS_TE) add_texture_oops(mb->mat[a]);
+                                                                       if(G.soops->visiflag & OOPS_IP) add_test_oops(mb->mat[a]->ipo);
                                                                }
                                                        }
                                                }
                                        }
                                        else if(type==ID_LA && G.soops->visiflag & OOPS_LA) {
+                                               Lamp *la= ob->data;
                                                oops= add_test_oops(ob->data);
+                                               if(G.soops->visiflag & OOPS_IP) add_test_oops(la->ipo);
+                                               if(G.soops->visiflag & OOPS_TE) {
+                                                       for(a=0; a<6; a++) {
+                                                               if(la->mtex[a]) add_test_oops(la->mtex[a]->tex);
+                                                       }
+                                               }
                                        }
                                }
                        }