- added getNum{Verts,Faces} accessors to DerivedMesh with implementations
- updated edit.c to use DerivedMesh interface
This commit is contained in:
@@ -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) */
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user