[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20416] branches/bmesh/blender/source/ blender: mesh DNA modficiations; two new structures added for storing ngons , MPoly and MLoop.
Joseph Eagar
joeedh at gmail.com
Tue May 26 06:17:48 CEST 2009
Revision: 20416
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20416
Author: joeedh
Date: 2009-05-26 06:17:47 +0200 (Tue, 26 May 2009)
Log Message:
-----------
mesh DNA modficiations; two new structures added for storing ngons, MPoly and MLoop.
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
branches/bmesh/blender/source/blender/blenkernel/BKE_tessmesh.h
branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
branches/bmesh/blender/source/blender/blenloader/intern/readfile.c
branches/bmesh/blender/source/blender/blenloader/intern/writefile.c
branches/bmesh/blender/source/blender/bmesh/bmesh_iterators.h
branches/bmesh/blender/source/blender/bmesh/bmesh_operator_api.h
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_eulers.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h
branches/bmesh/blender/source/blender/bmesh/intern/editmesh_to_bmesh.c
branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
branches/bmesh/blender/source/blender/editors/mesh/mesh_intern.h
branches/bmesh/blender/source/blender/makesdna/DNA_customdata_types.h
branches/bmesh/blender/source/blender/makesdna/DNA_mesh_types.h
branches/bmesh/blender/source/blender/makesdna/DNA_meshdata_types.h
Added Paths:
-----------
branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h 2009-05-26 02:49:46 UTC (rev 20415)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h 2009-05-26 04:17:47 UTC (rev 20416)
@@ -43,6 +43,7 @@
struct MEdge;
struct MVert;
struct MCol;
+struct BMesh;
struct Object;
struct MTFace;
struct VecNor;
@@ -54,6 +55,7 @@
struct EditMesh *BKE_mesh_get_editmesh(struct Mesh *me);
void BKE_mesh_end_editmesh(struct Mesh *me, struct EditMesh *em);
+struct BMesh *BKE_mesh_to_bmesh(struct Mesh *me);
void unlink_mesh(struct Mesh *me);
void free_mesh(struct Mesh *me);
@@ -135,11 +137,6 @@
void mesh_layers_menu_concat(struct CustomData *data, int type, char *str);
int mesh_layers_menu(struct CustomData *data, int type);
-/*accessor functions for editmesh, all access to editmesh must
- go through them!*/
-struct EditMesh *EM_GetEditMesh(struct Mesh *me);
-void EM_EndEditMesh(struct Mesh *me, struct EditMesh *em);
-
#ifdef __cplusplus
}
#endif
Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_tessmesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_tessmesh.h 2009-05-26 02:49:46 UTC (rev 20415)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_tessmesh.h 2009-05-26 04:17:47 UTC (rev 20416)
@@ -5,6 +5,12 @@
struct DerivedMesh;
struct BMFace;
+/*
+ok: the EDBM module is for editmode bmesh stuff. in contrast, the
+ BMEdit module is for code shared with blenkernel that concerns
+ the BMEditMesh structure.
+*/
+
typedef struct BMEditSelection
{
struct BMEditSelection *next, *prev;
@@ -54,7 +60,7 @@
int mat_nr;
} BMEditMesh;
-void TM_RecalcTesselation(BMEditMesh *tm);
-BMEditMesh *TM_Create(BMesh *bm);
-BMEditMesh *TM_Copy(BMEditMesh *tm);
-void TM_Free(BMEditMesh *em);
+void BMEdit_RecalcTesselation(BMEditMesh *tm);
+BMEditMesh *BMEdit_Create(BMesh *bm);
+BMEditMesh *BMEdit_Copy(BMEditMesh *tm);
+void BMEdit_Free(BMEditMesh *em);
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c 2009-05-26 02:49:46 UTC (rev 20415)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c 2009-05-26 04:17:47 UTC (rev 20416)
@@ -711,6 +711,8 @@
layerFree_mdisps, layerInterp_mdisps, layerSwap_mdisps, NULL},
{sizeof(MCol)*4, "MCol", 4, "WeightCol", NULL, NULL, layerInterp_mcol,
layerSwap_mcol, layerDefault_mcol},
+ {sizeof(MPoly), "MPoly", 1, "NGon Face", NULL, NULL, NULL, NULL, NULL},
+ {sizeof(MLoop), "MLoop", 1, "NGon Face-Vertex", NULL, NULL, NULL, NULL, NULL},
};
const char *LAYERTYPENAMES[CD_NUMTYPES] = {
@@ -720,17 +722,20 @@
"CDMloopCol", "CDTangent", "CDMDisps", "CDWeightMCol"};
const CustomDataMask CD_MASK_BAREMESH =
- CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MFACE;
+ CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MFACE | CD_MASK_MPOLY;
const CustomDataMask CD_MASK_MESH =
CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MFACE |
CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE | CD_MASK_MCOL |
- CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS;
+ CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS |
+ CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MPOLY | CD_MASK_MLOOP;
const CustomDataMask CD_MASK_EDITMESH =
- CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE |
+ CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE | CD_MASK_MLOOPUV |
+ CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY |
CD_MASK_MCOL|CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS;
const CustomDataMask CD_MASK_DERIVEDMESH =
CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE |
CD_MASK_MCOL | CD_MASK_ORIGINDEX | CD_MASK_PROP_FLT | CD_MASK_PROP_INT |
+ CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY |
CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORCO | CD_MASK_TANGENT | CD_MASK_WEIGHT_MCOL;
const CustomDataMask CD_MASK_BMESH =
CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR;
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c 2009-05-26 02:49:46 UTC (rev 20415)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c 2009-05-26 04:17:47 UTC (rev 20416)
@@ -90,18 +90,18 @@
#include "bmesh.h"
-BMEditMesh *TM_Create(BMesh *bm)
+BMEditMesh *BMEdit_Create(BMesh *bm)
{
BMEditMesh *tm = MEM_callocN(sizeof(BMEditMesh), "tm");
tm->bm = bm;
- TM_RecalcTesselation(tm);
+ BMEdit_RecalcTesselation(tm);
return tm;
}
-BMEditMesh *TM_Copy(BMEditMesh *tm)
+BMEditMesh *BMEdit_Copy(BMEditMesh *tm)
{
BMEditMesh *tm2 = MEM_callocN(sizeof(BMEditMesh), "tm2");
*tm2 = *tm;
@@ -111,7 +111,7 @@
tm2->looptris = NULL;
tm2->bm = BM_Copy_Mesh(tm->bm);
- TM_RecalcTesselation(tm2);
+ BMEdit_RecalcTesselation(tm2);
tm2->vert_index = NULL;
tm2->edge_index = NULL;
@@ -120,7 +120,7 @@
return tm2;
}
-void TM_RecalcTesselation(BMEditMesh *tm)
+void BMEdit_RecalcTesselation(BMEditMesh *tm)
{
BMesh *bm = tm->bm;
BMLoop **looptris = NULL;
@@ -198,7 +198,7 @@
}
/*does not free the BMEditMesh struct itself*/
-void TM_Free(BMEditMesh *em)
+void BMEdit_Free(BMEditMesh *em)
{
if(em->derivedFinal) {
if (em->derivedFinal!=em->derivedCage) {
@@ -221,6 +221,8 @@
if (em->vert_index) MEM_freeN(em->vert_index);
if (em->edge_index) MEM_freeN(em->edge_index);
if (em->face_index) MEM_freeN(em->face_index);
+
+ BM_Free_Mesh(em->bm);
}
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c 2009-05-26 02:49:46 UTC (rev 20415)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c 2009-05-26 04:17:47 UTC (rev 20416)
@@ -72,6 +72,8 @@
#include "BLI_editVert.h"
#include "BLI_arithb.h"
+#include "bmesh.h"
+
EditMesh *BKE_mesh_get_editmesh(Mesh *me)
{
return bmesh_to_editmesh(me->edit_btmesh->bm);
@@ -79,10 +81,8 @@
void BKE_mesh_end_editmesh(Mesh *me, EditMesh *em)
{
- BM_Free_Mesh(me->edit_btmesh->bm);
-
me->edit_btmesh->bm = editmesh_to_bmesh(em);
- TM_RecalcTesselation(me->edit_btmesh);
+ BMEdit_RecalcTesselation(me->edit_btmesh);
}
@@ -97,6 +97,14 @@
me->mface = CustomData_get_layer(&me->fdata, CD_MFACE);
me->mcol = CustomData_get_layer(&me->fdata, CD_MCOL);
me->mtface = CustomData_get_layer(&me->fdata, CD_MTFACE);
+
+ me->mpoly = CustomData_get_layer(&me->pdata, CD_MPOLY);
+ me->mloop = CustomData_get_layer(&me->ldata, CD_MLOOP);
+
+ me->mtpoly = CustomData_get_layer(&me->pdata, CD_MTEXPOLY);
+
+ me->mloopcol = CustomData_get_layer(&me->ldata, CD_MLOOPCOL);
+ me->mloopuv = CustomData_get_layer(&me->ldata, CD_MLOOPUV);
}
/* Note: unlinking is called when me->id.us is 0, question remains how
@@ -145,6 +153,8 @@
CustomData_free(&me->vdata, me->totvert);
CustomData_free(&me->edata, me->totedge);
CustomData_free(&me->fdata, me->totface);
+ CustomData_free(&me->ldata, me->totloop);
+ CustomData_free(&me->pdata, me->totpoly);
if(me->mat) MEM_freeN(me->mat);
@@ -209,6 +219,7 @@
{
Mesh *men;
MTFace *tface;
+ MTexPoly *txface;
int a, i;
men= copy_libblock(me);
@@ -222,6 +233,8 @@
CustomData_copy(&me->vdata, &men->vdata, CD_MASK_MESH, CD_DUPLICATE, men->totvert);
CustomData_copy(&me->edata, &men->edata, CD_MASK_MESH, CD_DUPLICATE, men->totedge);
CustomData_copy(&me->fdata, &men->fdata, CD_MASK_MESH, CD_DUPLICATE, men->totface);
+ CustomData_copy(&me->ldata, &men->ldata, CD_MASK_MESH, CD_DUPLICATE, men->totloop);
+ CustomData_copy(&me->pdata, &men->pdata, CD_MASK_MESH, CD_DUPLICATE, men->totpoly);
mesh_update_customdata_pointers(men);
/* ensure indirect linked data becomes lib-extern */
@@ -234,7 +247,17 @@
id_lib_extern((ID*)tface->tpage);
}
}
-
+
+ for(i=0; i<me->pdata.totlayer; i++) {
+ if(me->pdata.layers[i].type == CD_MTEXPOLY) {
+ txface= (MTexPoly*)me->pdata.layers[i].data;
+
+ for(a=0; a<me->totpoly; a++, txface++)
+ if(txface->tpage)
+ id_lib_extern((ID*)txface->tpage);
+ }
+ }
+
men->mselect= NULL;
men->bb= MEM_dupallocN(men->bb);
@@ -245,12 +268,43 @@
return men;
}
+BMesh *BKE_mesh_to_bmesh(Mesh *me)
+{
+ BMesh *bm;
+ int allocsize[4] = {512,512,2048,512};
+
+ bm = BM_Make_Mesh(allocsize);
+
+ BMO_CallOpf(bm, "mesh_to_bmesh mesh=%p", me);
+
+ return bm;
+}
+
void make_local_tface(Mesh *me)
{
MTFace *tface;
+ MTexPoly *txface;
Image *ima;
int a, i;
+ for(i=0; i<me->pdata.totlayer; i++) {
+ if(me->pdata.layers[i].type == CD_MTEXPOLY) {
+ txface= (MTexPoly*)me->fdata.layers[i].data;
+
+ for(a=0; a<me->totpoly; a++, txface++) {
+ /* special case: ima always local immediately */
+ if(txface->tpage) {
+ ima= txface->tpage;
+ if(ima->id.lib) {
+ ima->id.lib= 0;
+ ima->id.flag= LIB_LOCAL;
+ new_id(0, (ID *)ima, 0);
+ }
+ }
+ }
+ }
+ }
+
for(i=0; i<me->fdata.totlayer; i++) {
if(me->fdata.layers[i].type == CD_MTFACE) {
tface= (MTFace*)me->fdata.layers[i].data;
@@ -268,6 +322,7 @@
}
}
}
+
}
void make_local_mesh(Mesh *me)
Modified: branches/bmesh/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/bmesh/blender/source/blender/blenloader/intern/readfile.c 2009-05-26 02:49:46 UTC (rev 20415)
+++ branches/bmesh/blender/source/blender/blenloader/intern/readfile.c 2009-05-26 04:17:47 UTC (rev 20416)
@@ -3004,6 +3004,26 @@
}
+static void lib_link_customdata_mtpoly(FileData *fd, Mesh *me, CustomData *pdata, int totface)
+{
+ int i;
+
+ for(i=0; i<pdata->totlayer; i++) {
+ CustomDataLayer *layer = &pdata->layers[i];
+
+ if(layer->type == CD_MTEXPOLY) {
+ MTexPoly *tf= layer->data;
+ int i;
+
+ for (i=0; i<totface; i++, tf++) {
+ tf->tpage= newlibadr(fd, me->id.lib, tf->tpage);
+ if(tf->tpage && tf->tpage->id.us==0)
+ tf->tpage->id.us= 1;
+ }
+ }
+ }
+}
+
static void lib_link_mesh(FileData *fd, Main *main)
{
Mesh *me;
@@ -3030,6 +3050,7 @@
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list