- added getNum{Verts,Faces} accessors to DerivedMesh with implementations

- updated edit.c to use DerivedMesh interface
This commit is contained in:
Daniel Dunbar
2005-03-27 21:27:12 +00:00
parent 05685e6ca7
commit 2a66e1d73f
3 changed files with 64 additions and 5 deletions

View File

@@ -38,6 +38,11 @@ struct DispListMesh;
typedef struct DerivedMesh DerivedMesh;
struct DerivedMesh {
/* Misc. Queries */
int (*getNumVerts)(DerivedMesh *dm);
int (*getNumFaces)(DerivedMesh *dm);
/* Drawing Operations */
/* Draw all vertices as bgl points (no options) */

View File

@@ -41,6 +41,7 @@
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "BLI_blenlib.h"
#include "BLI_editVert.h"
#include "BKE_DerivedMesh.h"
@@ -359,10 +360,28 @@ static void meshDM_drawFacesColored(DerivedMesh *dm, int useTwoSide, unsigned ch
glDisable(GL_CULL_FACE);
}
static int meshDM_getNumVerts(DerivedMesh *dm)
{
MeshDerivedMesh *mdm = (MeshDerivedMesh*) dm;
Mesh *me = mdm->ob->data;
return me->totvert;
}
static int meshDM_getNumFaces(DerivedMesh *dm)
{
MeshDerivedMesh *mdm = (MeshDerivedMesh*) dm;
Mesh *me = mdm->ob->data;
return me->totface;
}
static DerivedMesh *getMeshDerivedMesh(Object *ob, float *extverts, float *nors)
{
MeshDerivedMesh *mdm = MEM_mallocN(sizeof(*mdm), "dm");
mdm->dm.getNumVerts = meshDM_getNumVerts;
mdm->dm.getNumFaces = meshDM_getNumFaces;
mdm->dm.drawVerts = meshDM_drawVerts;
mdm->dm.drawMappedVertsEM = NULL;
@@ -467,10 +486,26 @@ static void emDM_drawFacesSolid(DerivedMesh *dm, void (*setMaterial)(int))
}
}
static int emDM_getNumVerts(DerivedMesh *dm)
{
EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) dm;
return BLI_countlist(&emdm->em->verts);
}
static int emDM_getNumFaces(DerivedMesh *dm)
{
EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) dm;
return BLI_countlist(&emdm->em->faces);
}
static DerivedMesh *getEditMeshDerivedMesh(EditMesh *em)
{
EditMeshDerivedMesh *emdm = MEM_mallocN(sizeof(*emdm), "dm");
emdm->dm.getNumVerts = emDM_getNumVerts;
emdm->dm.getNumFaces = emDM_getNumFaces;
emdm->dm.drawVerts = NULL;
emdm->dm.drawMappedVertsEM = emDM_drawMappedVertsEM;
@@ -738,10 +773,26 @@ static void ssDM_drawFacesEM(DerivedMesh *dm, int useColor, unsigned char *baseC
}
}
static int ssDM_getNumVerts(DerivedMesh *dm)
{
SSDerivedMesh *ssdm = (SSDerivedMesh*) dm;
return ssdm->dlm->totvert;
}
static int ssDM_getNumFaces(DerivedMesh *dm)
{
SSDerivedMesh *ssdm = (SSDerivedMesh*) dm;
return ssdm->dlm->totface;
}
static DerivedMesh *getSSDerivedMesh(EditMesh *em, DispListMesh *dlm, float *nors)
{
SSDerivedMesh *ssdm = MEM_mallocN(sizeof(*ssdm), "dm");
ssdm->dm.getNumVerts = ssDM_getNumVerts;
ssdm->dm.getNumFaces = ssDM_getNumFaces;
ssdm->dm.drawVerts = ssDM_drawVerts;
ssdm->dm.drawMappedVertsEM = ssDM_drawMappedVertsEM;

View File

@@ -66,6 +66,7 @@
#include "BKE_anim.h"
#include "BKE_object.h"
#include "BKE_displist.h"
#include "BKE_DerivedMesh.h"
#include "BKE_global.h"
#include "BKE_lattice.h"
#include "BKE_mesh.h"
@@ -488,12 +489,14 @@ void count_object(Object *ob, int sel)
G.totmesh++;
me= get_mesh(ob);
if(me) {
DerivedMesh *dm = mesh_get_derived(ob);
int totvert, totface;
/* hack, should be getting displistmesh from a central function */
if (mesh_uses_displist(me) && me->disp.first && ((DispList*)me->disp.first)->type==DL_MESH) {
DispListMesh *dlm= ((DispList*)me->disp.first)->mesh;
totvert= dlm->totvert;
totface= dlm->totface;
if (dm) {
totvert= dm->getNumVerts(dm);
totface= dm->getNumFaces(dm);
dm->release(dm);
} else {
totvert= me->totvert;
totface= me->totface;