More properly coded version for adding edges... now only do_versions()
authorTon Roosendaal <ton@blender.org>
Thu, 22 Sep 2005 17:52:41 +0000 (17:52 +0000)
committerTon Roosendaal <ton@blender.org>
Thu, 22 Sep 2005 17:52:41 +0000 (17:52 +0000)
reads from the old mface->edcode flag to set edge drawing.

ALso; added a pointer check in draw_mesh_object(), here the derivedmesh
gives NULL on reading regression file lostride.blend. Zr needs to check!

source/blender/blenkernel/BKE_mesh.h
source/blender/blenkernel/intern/DerivedMesh.c
source/blender/blenkernel/intern/exotic.c
source/blender/blenkernel/intern/mesh.c
source/blender/blenloader/intern/readfile.c
source/blender/python/api2_2x/NMesh.c
source/blender/radiosity/intern/source/radpostprocess.c
source/blender/src/drawobject.c

index 998f3fda59de69bce6390ba656fc9fee10feae90..9f8ee3c6127ade3add41d9c8b123c06b30bd37d8 100644 (file)
@@ -79,7 +79,8 @@ void mesh_set_smooth_flag(struct Object *meshOb, int enableSmooth);
 struct BoundBox *mesh_get_bb(struct Mesh *me);
 void mesh_get_texspace(struct Mesh *me, float *loc_r, float *rot_r, float *size_r);
 
-void make_edges(struct Mesh *me);
+/* if old, it converts mface->edcode to edge drawflags */
+void make_edges(struct Mesh *me, int old);
 void mesh_strip_loose_faces(struct Mesh *me);
 
        /* Calculate vertex and face normals, face normals are returned in *faceNors_r if non-NULL
index 5d83bb42753999380ebe5445ca092cadd1d1d395..f09a906986fdb1cda9cf6198de4a4f7ad26c8b51 100644 (file)
@@ -2027,12 +2027,7 @@ DerivedMesh *getFluidsimDerivedMesh(Object *srcob, int useRenderParams, float *e
                return getMeshDerivedMesh(mesh , srcob, NULL);
        }
        if((mesh)&&(mesh->totvert>0)) {
-               make_edges(mesh);
-               for(i=0;i<mesh->totedge;i++) {
-                       // force all edge draw
-                       mesh->medge[i].flag |= ME_EDGEDRAW;
-                       //fprintf(stderr,"INI %d a%d f%d\n",fsdm->fsmesh->totedge,i, (fsdm->fsmesh->medge[i].flag & ME_EDGEDRAW) );
-               }
+               make_edges(mesh, 0);    // 0 = make all edges draw
        }
 
        // WARNING copied from getMeshDerivedMesh
index 063ee717df791cd727fb226bac06f453b813ad54..8da938f8a1f6e3e7543b4675c89ad87ebde32461 100644 (file)
@@ -302,8 +302,7 @@ static void read_stl_mesh_binary(char *str)
                        me->totvert = totvert;
 
                        mesh_add_normals_flags(me);
-                       make_edges(me);
-                       mesh_strip_loose_faces(me);
+                       make_edges(me, 0);
                }
                waitcursor(1);
        }
@@ -468,8 +467,7 @@ static void read_stl_mesh_ascii(char *str)
        free(vertdata);
 
        mesh_add_normals_flags(me);
-       make_edges(me);
-       mesh_strip_loose_faces(me);
+       make_edges(me, 0);
 
        waitcursor(1);
 }
@@ -679,8 +677,7 @@ static void read_videoscape_mesh(char *str)
        MEM_freeN(vertdata);
        
        mesh_add_normals_flags(me);
-       make_edges(me);
-       mesh_strip_loose_faces(me);
+       make_edges(me, 0);
 
        waitcursor(1);
 }
@@ -860,8 +857,7 @@ static void read_radiogour(char *str)
        MEM_freeN(vertdata);
        
        mesh_add_normals_flags(me);
-       make_edges(me);
-       mesh_strip_loose_faces(me);
+       make_edges(me, 0);
 
        waitcursor(1);
 }
@@ -2230,8 +2226,7 @@ static void displist_to_mesh(DispList *dlfirst)
        }
 
        mesh_add_normals_flags(me);
-       make_edges(me);
-       mesh_strip_loose_faces(me);
+       make_edges(me, 0);
 }
 
 static void displist_to_objects(ListBase *lbase)
@@ -4971,7 +4966,6 @@ static void dxf_read(char *filename)
        }
        for (; lastMe; lastMe=lastMe->id.next) {
                mesh_add_normals_flags(lastMe);
-               make_edges(lastMe);
-               mesh_strip_loose_faces(lastMe);
+               make_edges(lastMe, 0);
        }
 }
index e532930dee38f84d110d0ef8ea704332d01d1a09..ab213f78200ddf6340cb4aa07f3e66f1bda6324f 100644 (file)
@@ -607,7 +607,7 @@ static int vergedgesort(const void *v1, const void *v2)
 }
 
 
-void make_edges(Mesh *me)
+void make_edges(Mesh *me, int old)
 {
        MFace *mface;
        MEdge *medge;
@@ -661,7 +661,7 @@ void make_edges(Mesh *me)
                if(ed->v1 != (ed+1)->v1 || ed->v2 != (ed+1)->v2) {
                        medge->v1= ed->v1;
                        medge->v2= ed->v2;
-                       if(ed->is_draw) medge->flag= ME_EDGEDRAW|ME_EDGERENDER;
+                       if(old==0 || ed->is_draw) medge->flag= ME_EDGEDRAW|ME_EDGERENDER;
                        if(ed->is_loose) medge->flag|= ME_LOOSEEDGE;
                        medge++;
                }
@@ -933,7 +933,7 @@ void nurbs_to_mesh(Object *ob)
                dl= dl->next;
        }
 
-       make_edges(me);
+       make_edges(me, 0);      // all edges
        mesh_strip_loose_faces(me);
 
        if(ob->data) {
index d11bb9ed563d245f08eb6f2f1c744be80ba66a24..26adb6cf16907f94b2e787b7603973c8f15fff4c 100644 (file)
@@ -4934,7 +4934,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
 
                for(me=main->mesh.first; me; me= me->id.next) {
                        if (!me->medge) {
-                               make_edges(me);
+                               make_edges(me, 1);      /* 1 = use mface->edcode */
                        } else {
                                mesh_strip_loose_faces(me);
                        }
index b073bb949dae8f212cf382cd18ff5871f067c3d1..53a3271aa5f164b280416a7c357322ee4fbf8d56 100644 (file)
@@ -2818,7 +2818,7 @@ static void fill_medge_from_nmesh(Mesh * mesh, BPy_NMesh * nmesh)
   valid_nmedges=MEM_callocN(nmeshtotedges*sizeof(BPy_NMEdge *), "make BPy_NMEdge");
 
   /* First compute the list of edges that exists because faces exists */
-  make_edges(mesh);
+  make_edges(mesh, 0); /* 0 = draw all edges */
 
   faces_edges=mesh->medge;
   tot_faces_edges=mesh->totedge;
index 22b091a67a59616a7def9fb6fd55c04061dae3f1..ff1f57b602144c845b08ef12b29dbb2ea3b414e8 100644 (file)
@@ -1029,7 +1029,7 @@ void rad_addmesh(void)
                        }
                }
                /* by default, meshes need edge list */
-               make_edges(me); 
+               make_edges(me, 0);      
        }
                
        MEM_freeN(coldata);
index b50d156278a915a15b8466f27458e7f8c0f9c90f..80a9bcbbe0331c17272ea3b5e0a603923e7f76d6 100644 (file)
@@ -1790,7 +1790,7 @@ static void draw_mesh_object(Base *base, int dt)
                        DerivedMesh *realDM = mesh_get_derived_final(ob, &realDMneedsFree);
 
                        if(dt==OB_SOLID) has_alpha= init_gl_materials(ob);
-                       draw_mesh_fancy(ob, baseDM, realDM, dt);
+                       if(baseDM && realDM) draw_mesh_fancy(ob, baseDM, realDM, dt);
 
                        if (baseDMneedsFree) baseDM->release(baseDM);
                        if (realDMneedsFree) realDM->release(realDM);