merge with 2.5 at r18679
authorJoseph Eagar <joeedh@gmail.com>
Mon, 26 Jan 2009 13:19:52 +0000 (13:19 +0000)
committerJoseph Eagar <joeedh@gmail.com>
Mon, 26 Jan 2009 13:19:52 +0000 (13:19 +0000)
1  2 
config/win32-vc-config.py
projectfiles_vc9/blender/blender.sln
projectfiles_vc9/blender/blender.vcproj
source/blender/bmesh/intern/bmesh_mesh.c
source/blender/editors/mesh/mesh_intern.h
source/blender/editors/mesh/mesh_ops.c

Simple merge
index b758855f1c0cb3771c006488f37d694f13a48569,b758855f1c0cb3771c006488f37d694f13a48569..a807fa93afa3b3f143096950db7e2ef448b520e2
@@@ -1,5 -1,5 +1,5 @@@
  Microsoft Visual Studio Solution File, Format Version 10.00\r
--# Visual Studio 2008\r
++# Visual C++ Express 2008\r
  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blender", "blender.vcproj", "{F78B7FC9-DE32-465E-9F26-BB0B6B7A2EAF}"\r
        ProjectSection(ProjectDependencies) = postProject\r
                {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F} = {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}\r
@@@ -332,6 -332,6 +332,34 @@@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C
        EndProjectSection\r
  EndProject\r
  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ED_editors", "editors\ED_editors.vcproj", "{FB88301F-F725-401B-ACD7-D2ABBF333B71}"\r
++      ProjectSection(ProjectDependencies) = postProject\r
++              {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F} = {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25} = {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}\r
++              {F9850C15-FF0A-429E-9D47-89FB433C9BD8} = {F9850C15-FF0A-429E-9D47-89FB433C9BD8}\r
++              {884D8731-654C-4C7F-9A75-8F37A305BE1E} = {884D8731-654C-4C7F-9A75-8F37A305BE1E}\r
++              {7495FE37-933A-4AC1-BB2A-B3FDB4DE4284} = {7495FE37-933A-4AC1-BB2A-B3FDB4DE4284}\r
++              {FFD3C64A-30E2-4BC7-BC8F-51818C320400} = {FFD3C64A-30E2-4BC7-BC8F-51818C320400}\r
++              {31628053-825D-4C06-8A21-D13883489718} = {31628053-825D-4C06-8A21-D13883489718}\r
++              {EADC3C5A-6C51-4F03-8038-1553E7D7F740} = {EADC3C5A-6C51-4F03-8038-1553E7D7F740}\r
++              {DB6BE55D-B6D9-494D-856A-8764FF7BA91D} = {DB6BE55D-B6D9-494D-856A-8764FF7BA91D}\r
++              {3D310C60-6771-48E4-BCCA-D2718CDED898} = {3D310C60-6771-48E4-BCCA-D2718CDED898}\r
++              {E013786A-9575-4F34-81B2-33290357EE87} = {E013786A-9575-4F34-81B2-33290357EE87}\r
++              {138DD16C-CC78-4F6C-A898-C8DA68D89067} = {138DD16C-CC78-4F6C-A898-C8DA68D89067}\r
++              {415BFD6E-64CF-422B-AF88-C07F040A7292} = {415BFD6E-64CF-422B-AF88-C07F040A7292}\r
++              {106AE171-0083-41D6-A949-20DB0E8DC251} = {106AE171-0083-41D6-A949-20DB0E8DC251}\r
++              {4C3AB78A-52CA-4276-A041-39776E52D8C8} = {4C3AB78A-52CA-4276-A041-39776E52D8C8}\r
++              {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94} = {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}\r
++              {9C71A793-C177-4CAB-8EC5-923D500B39F8} = {9C71A793-C177-4CAB-8EC5-923D500B39F8}\r
++              {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23} = {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23}\r
++              {BAC615B0-F1AF-418B-8D23-A10FD8870D6A} = {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}\r
++              {9991A3C3-83FE-4AFE-9E18-9D01CB57E879} = {9991A3C3-83FE-4AFE-9E18-9D01CB57E879}\r
++              {0112CAD5-3584-412A-A2E5-1315A00437B4} = {0112CAD5-3584-412A-A2E5-1315A00437B4}\r
++              {2AE0D2D9-6A7A-44DE-9EFF-99C9E3257B49} = {2AE0D2D9-6A7A-44DE-9EFF-99C9E3257B49}\r
++              {5A2EA6DC-1A53-4E87-9166-52870CE3B4EA} = {5A2EA6DC-1A53-4E87-9166-52870CE3B4EA}\r
++              {9A307EE5-CD77-47BC-BD87-62508C7E19D8} = {9A307EE5-CD77-47BC-BD87-62508C7E19D8}\r
++              {B83C6BED-11EC-46C8-AFFA-121EEDE94373} = {B83C6BED-11EC-46C8-AFFA-121EEDE94373}\r
++              {524264F4-DF21-4B79-847F-E7CA643ECD0B} = {524264F4-DF21-4B79-847F-E7CA643ECD0B}\r
++      EndProjectSection\r
  EndProject\r
  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RNA_makesrna", "makesrna\RNA_makesrna.vcproj", "{8C2BCCF8-4D9E-46D3-BABF-C1545A332CE6}"\r
        ProjectSection(ProjectDependencies) = postProject\r
@@@ -348,6 -348,6 +376,14 @@@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C
                {E013786A-9575-4F34-81B2-33290357EE87} = {E013786A-9575-4F34-81B2-33290357EE87}\r
        EndProjectSection\r
  EndProject\r
++Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BL_bmesh", "..\BL_bmesh\BL_bmesh.vcproj", "{6A51010A-9393-4D77-84B4-5BBCDA6E7C25}"\r
++      ProjectSection(ProjectDependencies) = postProject\r
++              {7495FE37-933A-4AC1-BB2A-B3FDB4DE4284} = {7495FE37-933A-4AC1-BB2A-B3FDB4DE4284}\r
++              {31628053-825D-4C06-8A21-D13883489718} = {31628053-825D-4C06-8A21-D13883489718}\r
++              {E013786A-9575-4F34-81B2-33290357EE87} = {E013786A-9575-4F34-81B2-33290357EE87}\r
++              {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94} = {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}\r
++      EndProjectSection\r
++EndProject\r
  Global\r
        GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
                3D Plugin Debug|Win32 = 3D Plugin Debug|Win32\r
                {7495FE37-933A-4AC1-BB2A-B3FDB4DE4284}.Debug|Win32.Build.0 = Blender Debug|Win32\r
                {7495FE37-933A-4AC1-BB2A-B3FDB4DE4284}.Release|Win32.ActiveCfg = Blender Release|Win32\r
                {7495FE37-933A-4AC1-BB2A-B3FDB4DE4284}.Release|Win32.Build.0 = Blender Release|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.3D Plugin Debug|Win32.ActiveCfg = Debug|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.3D Plugin Debug|Win32.Build.0 = Debug|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.3D Plugin Release|Win32.ActiveCfg = Release|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.3D Plugin Release|Win32.Build.0 = Release|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.Blender Debug|Win32.ActiveCfg = Debug|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.Blender Debug|Win32.Build.0 = Debug|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.Blender Release|Win32.ActiveCfg = Release|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.Blender Release|Win32.Build.0 = Release|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.BlenderPlayer Debug|Win32.ActiveCfg = Debug|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.BlenderPlayer Debug|Win32.Build.0 = Debug|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.BlenderPlayer Release|Win32.ActiveCfg = Release|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.BlenderPlayer Release|Win32.Build.0 = Release|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.Debug|Win32.ActiveCfg = Debug|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.Debug|Win32.Build.0 = Debug|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.Release|Win32.ActiveCfg = Release|Win32\r
++              {6A51010A-9393-4D77-84B4-5BBCDA6E7C25}.Release|Win32.Build.0 = Release|Win32\r
        EndGlobalSection\r
        GlobalSection(SolutionProperties) = preSolution\r
                HideSolutionNode = FALSE\r
index b79a8a5f4ab0909d41dcafbe76c810a0c94f0264,0000000000000000000000000000000000000000..e8066aa52f938c8319d8491c2478e36d581f43b9
mode 100644,000000..100644
--- /dev/null
@@@ -1,270 -1,0 +1,310 @@@
 +/**
 + * BME_mesh.c    jan 2007
 + *
 + *    BM mesh level functions.
 + *
 + * $Id: BME_eulers.c,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.
 + * 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) 2007 Blender Foundation.
 + * All rights reserved.
 + *
 + * The Original Code is: all of this file.
 + *
 + * Contributor(s): Geoffrey Bantle.
 + *
 + * ***** END GPL LICENSE BLOCK *****
 + */
 +
 +#include "MEM_guardedalloc.h"
 +#include "DNA_listBase.h"
 +#include "BLI_blenlib.h"
 +#include "BLI_arithb.h"
 +#include "BKE_utildefines.h"
 +
 +#include "bmesh.h"
 +#include "bmesh_private.h"
 +
 +void BME_error(void);
 +
 +/*bmesh_error stub*/
 +void bmesh_error(void)
 +{
 +      printf("BM modelling error!");
 +}
 +
++/*error system*/
++typedef struct bmop_error {
++       struct bmop_error *next, *prev;
++       int errorcode;
++       char *msg;
++} bmop_error;
++
++void BMOP_RaiseError(BMesh *bm, int errcode, char *msg)
++{
++       bmop_error *err = MEM_callocN(sizeof(bmop_error), "bmop_error");
++       err->errorcode = errcode;
++       err->msg = msg;
++       BLI_addhead(&bm->errorstack, err);
++}
++
++/*returns error code or 0 if no error*/
++int BMOP_GetError(BMesh *bm, char **msg)
++{
++       bmop_error *err = bm->errorstack.first;
++       if (!err) return 0;
++
++       if (msg) *msg = err->msg;
++
++       return err->errorcode;
++}
++
++int BMOP_CheckError(BMesh *bm)
++{
++       return bm->errorstack.first != NULL;
++}
++
++int BMOP_PopError(BMesh *bm, char **msg)
++{
++       int errorcode = BMOP_GetError(bm, msg);
++       if (errorcode)
++               BLI_remlink(&bm->errorstack, &bm->errorstack.first);
++
++       return errorcode;
++}
++
 +/*
 + * BMESH SET SYSFLAG
 + *
 + * Sets a bitflag for a given element.
 + *
 +*/
 +
 +void bmesh_set_sysflag(BMHeader *head, int flag)
 +{
 +      head->flag |= flag;
 +}
 +
 +/*
 + * BMESH CLEAR SYSFLAG
 + * 
 + * Clears a bitflag for a given element.
 + *
 +*/
 +
 +void bmesh_clear_sysflag(BMHeader *head, int flag)
 +{
 +      head->flag &= ~flag;
 +}
 +
 +
 +/*
 + * BMESH TEST SYSFLAG
 + *
 + * Tests whether a bitflag is set for a given element.
 + *
 +*/
 +
 +int bmesh_test_sysflag(BMHeader *head, int flag)
 +{
 +      if(head->flag & flag)
 +              return 1;
 +      return 0;
 +}
 +
 +/*    
 + *    BMESH MAKE MESH
 + *
 + *  Allocates a new BMesh structure.
 + *  Returns -
 + *  Pointer to a BM
 + *
 +*/
 +
 +BMesh *BM_Make_Mesh(int allocsize[4])
 +{
 +      /*allocate the structure*/
 +      BMesh *bm = MEM_callocN(sizeof(BMesh),"BM");
 +      /*allocate the memory pools for the mesh elements*/
 +      bm->vpool = BLI_mempool_create(sizeof(BMVert), allocsize[0], allocsize[0]);
 +      bm->epool = BLI_mempool_create(sizeof(BMEdge), allocsize[1], allocsize[1]);
 +      bm->lpool = BLI_mempool_create(sizeof(BMLoop), allocsize[2], allocsize[2]);
 +      bm->ppool = BLI_mempool_create(sizeof(BMFace), allocsize[3], allocsize[3]);
 +
 +      /*allocate one flag pool that we dont get rid of.*/
 +      bm->flagpool = BLI_mempool_create(sizeof(BMFlagLayer), 512, 512);
 +      bm->totflags = 1;
 +
 +      return bm;
 +}
 +/*    
 + *    BMESH FREE MESH
 + *
 + *    Frees a BMesh structure.
 +*/
 +
 +void BM_Free_Mesh(BMesh *bm)
 +{
 +      BMVert *v;
 +      BMEdge *e;
 +      BMLoop *l;
 +      BMFace *f;
 +      
 +
 +      BMIter verts;
 +      BMIter edges;
 +      BMIter faces;
 +      BMIter loops;
 +      
 +      for(v = BMIter_New(&verts, bm, BM_VERTS, bm ); v; v = BMIter_Step(&verts)) CustomData_bmesh_free_block( &(bm->vdata), &(v->data) );
 +      for(e = BMIter_New(&edges, bm, BM_EDGES, bm ); e; e = BMIter_Step(&edges)) CustomData_bmesh_free_block( &(bm->edata), &(e->data) );
 +      for(f = BMIter_New(&faces, bm, BM_FACES, bm ); f; f = BMIter_Step(&faces)){
 +              CustomData_bmesh_free_block( &(bm->pdata), &(f->data) );
 +              for(l = BMIter_New(&loops, bm, BM_LOOPS_OF_FACE, f ); l; l = BMIter_Step(&loops)) CustomData_bmesh_free_block( &(bm->ldata), &(l->data) );
 +      }
 +
 +      /*Free custom data pools, This should probably go in CustomData_free?*/
 +      if(bm->vdata.totlayer) BLI_mempool_destroy(bm->vdata.pool);
 +      if(bm->edata.totlayer) BLI_mempool_destroy(bm->edata.pool);
 +      if(bm->ldata.totlayer) BLI_mempool_destroy(bm->ldata.pool);
 +      if(bm->pdata.totlayer) BLI_mempool_destroy(bm->pdata.pool);
 +
 +      /*free custom data*/
 +      CustomData_free(&bm->vdata,0);
 +      CustomData_free(&bm->edata,0);
 +      CustomData_free(&bm->ldata,0);
 +      CustomData_free(&bm->pdata,0);
 +
 +      /*destroy element pools*/
 +      BLI_mempool_destroy(bm->vpool);
 +      BLI_mempool_destroy(bm->epool);
 +      BLI_mempool_destroy(bm->ppool);
 +      BLI_mempool_destroy(bm->lpool);
 +
 +      /*destroy flag pool*/
 +      BLI_mempool_destroy(bm->flagpool);
 +      
 +      MEM_freeN(bm);  
 +}
 +
 +/*
 + *  BMESH COMPUTE NORMALS
 + *
 + *  Updates the normals of a mesh.
 + *  Note that this can only be called  
 + *
 +*/
 +
 +void BM_Compute_Normals(BMesh *bm)
 +{
 +      BMVert *v;
 +      BMFace *f;
 +      BMLoop *l;
 +      
 +      BMIter verts;
 +      BMIter faces;
 +      BMIter loops;
 +      
 +      unsigned int maxlength = 0;
 +      float (*projectverts)[3];
 +      
 +      /*first, find out the largest face in mesh*/
 +      for(f = BMIter_New(&faces, bm, BM_FACES, bm ); f; f = BMIter_Step(&faces)){
 +              if(f->len > maxlength) maxlength = f->len;
 +      }
 +      
 +      /*make sure we actually have something to do*/
 +      if(maxlength < 3) return; 
 +      
 +      /*allocate projectverts array*/
 +      projectverts = MEM_callocN(sizeof(float) * maxlength * 3, "BM normal computation array");
 +      
 +      /*calculate all face normals*/
 +      for(f = BMIter_New(&faces, bm, BM_FACES, bm ); f; f = BMIter_Step(&faces)){
 +              bmesh_update_face_normal(bm, f, projectverts);          
 +      }
 +      
 +      /*Zero out vertex normals*/
 +      for(v = BMIter_New(&verts, bm, BM_VERTS, bm ); v; v = BMIter_Step(&verts)) v->no[0] = v->no[1] = v->no[2] = 0.0;
 +
 +      /*add face normals to vertices*/
 +      for(f = BMIter_New(&faces, bm, BM_FACES, bm ); f; f = BMIter_Step(&faces)){
 +              for(l = BMIter_New(&loops, bm, BM_LOOPS_OF_FACE, f ); l; l = BMIter_Step(&loops)) VecAddf(l->v->no, l->v->no, f->no);
 +      }
 +      
 +      /*average the vertex normals*/
 +      for(v = BMIter_New(&verts, bm, BM_VERTS, bm ); v; v= BMIter_Step(&verts)){
 +              if (Normalize(v->no)==0.0) {
 +                      VECCOPY(v->no, v->co);
 +                      Normalize(v->no);
 +              }
 +      }
 +      
 +      MEM_freeN(projectverts);
 +}
 +
 +/*    
 + *    BMESH BEGIN/END EDIT
 + *
 + *    Functions for setting up a mesh for editing and cleaning up after 
 + *  the editing operations are done. These are called by the tools/operator 
 + *  API for each time a tool is executed.
 + *
 + *  Returns -
 + *  Nothing
 + *
 +*/
 +
 +void bmesh_begin_edit(BMesh *bm){
 +
 +      /*Initialize some scratch pointer arrays used by eulers*/
 +      bm->vtar = MEM_callocN(sizeof(BMVert *) * 1024, "BM scratch vert array");
 +      bm->edar = MEM_callocN(sizeof(BMEdge *) * 1024, "BM scratch edge array");
 +      bm->lpar = MEM_callocN(sizeof(BMLoop *) * 1024, "BM scratch loop array");
 +      bm->plar = MEM_callocN(sizeof(BMFace *) * 1024, "BM scratch poly array");
 +
 +      bm->vtarlen = bm->edarlen = bm->lparlen = bm->plarlen = 1024;
 +}
 +
 +void bmesh_end_edit(BMesh *bm, int flag){
 +      int totvert, totedge, totface;
 +      /*verify element counts*/
 +      totvert = BLI_countlist(&(bm->verts));
 +      totedge = BLI_countlist(&(bm->edges));
 +      totface = BLI_countlist(&(bm->polys));
 +
 +      if(bm->totvert!=totvert || bm->totedge!=totedge || bm->totface!=totface) BME_error();
 +
 +      /*free temp storage*/
 +      if(bm->vtar) MEM_freeN(bm->vtar);
 +      if(bm->edar) MEM_freeN(bm->edar);
 +      if(bm->lpar) MEM_freeN(bm->lpar);
 +      if(bm->plar) MEM_freeN(bm->plar);
 +
 +      /*zero out pointers*/
 +      bm->vtar = NULL;
 +      bm->edar = NULL;
 +      bm->lpar = NULL;
 +      bm->plar = NULL;
 +      bm->vtarlen = bm->edarlen = bm->lparlen = bm->plarlen = 0;
 +
 +      /*compute normals, clear temp flags and flush selections*/
 +      BM_Compute_Normals(bm);
 +      bmesh_selectmode_flush(bm);
 +}