Revision: 18164 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18164 Author: joeedh Date: 2008-12-30 05:15:58 +0100 (Tue, 30 Dec 2008)
Log Message: ----------- commit of new bmesh api code. Added Paths: ----------- branches/bmesh/bmesh/SConscript branches/bmesh/bmesh/bmesh.h branches/bmesh/bmesh/bmesh_filters.h branches/bmesh/bmesh/bmesh_iterators.h branches/bmesh/bmesh/bmesh_marking.h branches/bmesh/bmesh/bmesh_operators.h branches/bmesh/bmesh/bmesh_queries.h branches/bmesh/bmesh/bmesh_walkers.h branches/bmesh/bmesh/intern/ branches/bmesh/bmesh/intern/bmesh_construct.c branches/bmesh/bmesh/intern/bmesh_eulers.c branches/bmesh/bmesh/intern/bmesh_filters.c branches/bmesh/bmesh/intern/bmesh_interp.c branches/bmesh/bmesh/intern/bmesh_iterators.c branches/bmesh/bmesh/intern/bmesh_marking.c branches/bmesh/bmesh/intern/bmesh_mesh.c branches/bmesh/bmesh/intern/bmesh_mods.c branches/bmesh/bmesh/intern/bmesh_operators.c branches/bmesh/bmesh/intern/bmesh_operators_private.h branches/bmesh/bmesh/intern/bmesh_polygon.c branches/bmesh/bmesh/intern/bmesh_private.h branches/bmesh/bmesh/intern/bmesh_queries.c branches/bmesh/bmesh/intern/bmesh_structure.c branches/bmesh/bmesh/intern/bmesh_structure.h branches/bmesh/bmesh/intern/bmesh_walkers.c branches/bmesh/bmesh/intern/in-progress/ branches/bmesh/bmesh/intern/in-progress/BME_conversions.c branches/bmesh/bmesh/tools/ branches/bmesh/bmesh/tools/BME_bevel.c branches/bmesh/bmesh/tools/BME_dupe_ops.c branches/bmesh/bmesh/tools/BME_duplicate.c branches/bmesh/bmesh/tools/BME_extrude.c branches/bmesh/bmesh/tools/BME_weld.c Added: branches/bmesh/bmesh/SConscript =================================================================== --- branches/bmesh/bmesh/SConscript (rev 0) +++ branches/bmesh/bmesh/SConscript 2008-12-30 04:15:58 UTC (rev 18164) @@ -0,0 +1,34 @@ +#!/usr/bin/python +Import ('env') + +cflags='' +""" +sources = ['intern/bmesh_eulers.c'] +sources.append('intern/bmesh_mesh.c') +sources.append('intern/bmesh_polygon.c') +sources.append('intern/bmesh_structure.c') +sources.append('intern/bmesh_marking.c') + +sources.append('intern/bmesh_construct.c') +sources.append('intern/bmesh_interp.c') +sources.append('intern/bmesh_filters.c') +sources.append('intern/bmesh_iterators.c') +sources.append('intern/bmesh_mods.c') +sources.append('intern/bmesh_queries.c') +sources.append('intern/bmesh_operators.c') +""" +#sources.append('api/BME_walkers.c') + + +sources = env.Glob('intern/*.c') +#sources += env.Glob('tools/*.c') + +incs = ['#/intern/guardedalloc'] +incs.append('../blenlib') +incs.append('../makesdna') +incs.append('../blenkernel') +incs.append('./') +incs.append('./intern') + +defs = [] +env.BlenderLib ( libname = 'bf_bmesh', sources = sources, includes = Split(incs), libtype = 'core', defines=defs, priority=100, compileflags=cflags ) Added: branches/bmesh/bmesh/bmesh.h =================================================================== --- branches/bmesh/bmesh/bmesh.h (rev 0) +++ branches/bmesh/bmesh/bmesh.h 2008-12-30 04:15:58 UTC (rev 18164) @@ -0,0 +1,216 @@ +/** + * bmesh.h jan 2007 + * + * BM API. + * + * $Id: BKE_bmesh.h,v 1.00 2007/01/17 17:42:01 Briggs Exp $ + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. The Blender + * Foundation also sells licenses for use in proprietary software under + * the Blender License. See http://www.blender.org/BL/ for information + * about this. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2004 Blender Foundation. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Geoffrey Bantle, Levi Schooley. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef BMESH_H +#define BMESH_H + +#include "DNA_listBase.h" +#include "DNA_customdata_types.h" +#include "BLI_mempool.h" +#include "BKE_customdata.h" + +/*forward declarations*/ +struct BMVert; +struct BMEdge; +struct BMFace; +struct BMLoop; +/* + all mesh elements should share this beginning layout + we can pack this a little tighter now... + + BMHeader *next, *prev; + int EID; + int eflag1, eflag2; + short systemflag, type; + struct BMFlagLayer *flags; +*/ + +/*Defines for BMHeader->type*/ +#define BMESH_VERT 1 +#define BMESH_EDGE 2 +#define BMESH_FACE 4 +#define BMESH_LOOP 8 +#define BMESH_ALL BMESH_VERT | BMESH_EDGE | BMESH_FACE | BMESH_LOOP + +/*Masks for BMHeader->flag + Note: Its entirely possible that any temporal flags should be moved + into the dynamically allocated flag layers and only reserve BMHeader->flag + for things like select, hide, ect +*/ +#define BMESH_SELECT 1 +#define BMESH_HIDDEN 2 +#define BMESH_DIRTY 4 /*Not used yet*/ +#define BMESH_NEW 8 +#define BMESH_OVERLAP 16 /*used by bmesh_verts_in_face*/ +#define BMESH_EDGEVERT 32 /*used by bmesh_make_ngon*/ +#define BMESH_DELETE 64 +#define BMESH_AUX1 128 /*different for edges/verts/faces/ect*/ +#define BMESH_AUX2 256 /*different for edges/verts/faces/ect*/ +#define BMESH_AUX3 512 /*different for edges/verts/faces/ect*/ + +#define BMESH_SHARP BMESH_AUX1 /*for edges*/ +#define BMESH_SEAM BMESH_AUX2 /*for edges*/ +#define BMESH_FGON BMESH_AUX3 /*for edges, to be depreceated*/ + +#define BMESH_SMOOTH BMESH_AUX1 /*for faces*/ +#define BMESH_TEMP_FLAGS BMESH_DIRTY|BMESH_NEW|BMESH_OVERLAP|BMESH_EDGEVERT|BMESH_DELETE + +/*All Mesh elements start with this structure*/ +typedef struct BMHeader +{ + struct BMHeader *next, *prev; + int EID; + int flag; /*mesh flags, never to be (ab)used by the api itself!*/ + int eflag1, eflag2; /*Flags used by eulers. Try and get rid of/minimize some of these*/ + short type, pad1, pad2, pad3; /*Type of element this is head to*/ + struct BMFlagLayer *flags; /*Dynamically allocated block of flag layers for operators to use*/ +} BMHeader; + + +/*Used for circular linked list functions*/ +typedef struct BMNode{ + struct BMNode *next, *prev; + void *data; +}BMNode; + +/*Used by operator API to give each operator private flag space + -Perhaps want to change this to have a union for storing float/long/pointer/ect + -pflag should be used for system/API stuff +*/ + +typedef struct BMFlagLayer{ + int f1; + short mask, pflag; +}BMFlagLayer; + +typedef struct BMesh +{ + ListBase verts, edges, polys; + struct BLI_mempool *vpool; + struct BLI_mempool *epool; + struct BLI_mempool *lpool; + struct BLI_mempool *ppool; + struct BMVert **vtar; + struct BMEdge **edar; + struct BMLoop **lpar; + struct BMFace **plar; + int vtarlen, edarlen, lparlen, plarlen; + int totvert, totedge, totface, totloop; + int nextv, nexte, nextp, nextl; + struct CustomData vdata, edata, pdata, ldata; + int selectmode; + struct BLI_mempool *flagpool; /*memory pool for dynamically allocated flag layers*/ + int stackdepth; /*current depth of operator stack*/ + int totflags; /*total number of tool flag layers*/ +}BMesh; + +typedef struct BMVert +{ + struct BMHeader head; + float co[3]; + float no[3]; + struct BMEdge *edge; + void *data; + void *tmp; /*what?*/ + float bweight; /*please, someone just get rid of me...*/ +} BMVert; + +typedef struct BMEdge +{ + struct BMHeader head; + struct BMVert *v1, *v2; + struct BMNode d1, d2; + struct BMLoop *loop; + void *data; + float crease, bweight; /*make these custom data.... no really, please....*/ +}BMEdge; + +typedef struct BMLoop +{ + struct BMHeader head; + struct BMNode radial; + struct BMVert *v; + struct BMEdge *e; + struct BMFace *f; + void *data; +}BMLoop; + +typedef struct BMFace +{ + struct BMHeader head; + struct BMLoop *loopbase; + unsigned int len; + void *data; + float no[3]; + unsigned short mat_nr; /*custom data again, and get rid of the unsigned short nonsense...*/ +}BMFace; + +/*stub*/ +void bmesh_error(void); + +/*Mesh Level Ops */ +struct BMesh *BM_Make_Mesh(int allocsize[4]); +void BM_Free_Mesh(struct BMesh *bm); +void BM_Compute_Normals(struct BMesh *bm); + +/*Construction*/ +struct BMVert *BM_Make_Vert(struct BMesh *bm, float co[3], struct BMVert *example); +struct BMEdge *BM_Make_Edge(struct BMesh *bm, struct BMVert *v1, struct BMVert *v2, struct BMEdge *example, int nodouble); +struct BMFace *BM_Make_Quadtriangle(struct BMesh *bm, struct BMVert **verts, BMEdge **edges, int len, struct BMFace *example, int nodouble); +struct BMFace *BM_Make_Ngon(struct BMesh *bm, struct BMVert *v1, struct BMVert *v2, struct BMEdge **edges, int len, int nodouble); +void BM_Delete_Face(struct BMesh *bm, struct BMFace *f); +void BM_Delete_Edge(struct BMesh *bm, struct BMVert *v); +void BM_Delete_Vert(struct BMesh *bm, struct BMVert *v); + +/*Modification*/ +struct BMFace *BM_Join_Faces(struct BMesh *bm, struct BMFace *f1, struct BMFace *f2, struct BMEdge *e, int calcnorm, int weldUVs); +struct BMFace *BM_Split_Face(struct BMesh *bm, struct BMFace *f, struct BMVert *v1, struct BMVert *v2, struct BMLoop **nl, struct BMEdge *example, int calcnorm); +void BM_Collapse_Vert(struct BMesh *bm, struct BMEdge *ke, struct BMVert *kv, float fac, int calcnorm); +struct BMVert *BM_Split_Edge(struct BMesh *bm, struct BMVert *v, struct BMEdge *e, struct BMEdge **ne, float percent, int calcnorm); +struct BMVert *BM_Split_Edge_Multi(struct BMesh *bm, struct BMEdge *e, int numcuts); + +/*Interpolation*/ +void BM_Data_Interp_From_Verts(struct BMesh *bm, struct BMVert *v1, struct BMVert *v2, struct BMVert *v, float fac); +void BM_Data_Facevert_Edgeinterp(struct BMesh *bm, struct BMVert *v1, struct BMVert *v2, struct BMVert *v, struct BMEdge *e1, float fac); +//void bmesh_data_interp_from_face(struct BMesh *bm, struct BMFace *source, struct BMFace *target); + +/*include the rest of the API*/ +#include "bmesh_filters.h" +#include "bmesh_iterators.h" +#include "bmesh_marking.h" +#include "bmesh_operators.h" +#include "bmesh_queries.h" +#endif Added: branches/bmesh/bmesh/bmesh_filters.h =================================================================== --- branches/bmesh/bmesh/bmesh_filters.h (rev 0) +++ branches/bmesh/bmesh/bmesh_filters.h 2008-12-30 04:15:58 UTC (rev 18164) @@ -0,0 +1,4 @@ +#ifndef BMESH_FILTER_H +#define BMESH_FILTER_H + +#endif Added: branches/bmesh/bmesh/bmesh_iterators.h =================================================================== --- branches/bmesh/bmesh/bmesh_iterators.h (rev 0) +++ branches/bmesh/bmesh/bmesh_iterators.h 2008-12-30 04:15:58 UTC (rev 18164) @@ -0,0 +1,50 @@ +/* + * BMESH ITERATORS + * + * The functions and structures in this file + * provide a unified method for iterating over + * the elements of a mesh and answering simple + * adjacency queries. Tool authors should use + * the iterators provided in this file instead + * of inspecting the structure directly. + * +*/ + +#ifndef BMESH_ITERATORS_H +#define BMESH_ITERATORS_H + +/*Defines for passing to BMIter_New*/ +#define BM_VERTS 1 +#define BM_EDGES 2 +#define BM_FACES 3 +#define BM_EDGES_OF_VERT 4 +#define BM_FACES_OF_VERT 5 +#define BM_VERTS_OF_EDGE 6 +#define BM_FACES_OF_EDGE 7 +#define BM_VERTS_OF_FACE 8 +#define BM_FACEVERTS_OF_FACE 9 +#define BM_EDGES_OF_FACE 10 +#define BM_LOOPS_OF_FACE 11 + +/*Iterator Structure*/ +typedef struct BMIter{ + struct BMVert *firstvert, *nextvert, *vdata; @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs