Revision: 18406
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18406
Author:   ton
Date:     2009-01-07 18:25:17 +0100 (Wed, 07 Jan 2009)

Log Message:
-----------
2.5

More files back in the 2.5 repo:
(Note, boolean stuff moved to blenkernel)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_booleanops.h
    branches/blender2.5/blender/source/blender/blenkernel/SConscript
    branches/blender2.5/blender/source/blender/blenkernel/intern/Makefile

Added Paths:
-----------
    branches/blender2.5/blender/source/blender/blenkernel/intern/booleanops.c
    
branches/blender2.5/blender/source/blender/blenkernel/intern/booleanops_mesh.c
    branches/blender2.5/blender/source/blender/editors/interface/keyval.c
    branches/blender2.5/blender/source/blender/editors/screen/screendump.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_booleanops.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_booleanops.h      
2009-01-07 16:52:18 UTC (rev 18405)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_booleanops.h      
2009-01-07 17:25:17 UTC (rev 18406)
@@ -17,7 +17,7 @@
  * 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) 2001-2002 by NaN Holding BV.
+ * The Original Code is Copyright (C) Blender Foundation.
  * All rights reserved.
  *
  * The Original Code is: all of this file.
@@ -29,6 +29,7 @@
 #ifndef BKE_BOOLEANOPS_H
 #define BKE_BOOLEANOPS_H
 
+struct Scene;
 struct Object;
 struct Base;
 struct DerivedMesh;
@@ -36,7 +37,7 @@
 /* Performs a boolean between two mesh objects, it is assumed that both objects
    are in fact a mesh object. On success returns 1 and creates a new mesh 
object
    into blender data structures. On failure returns 0 and reports an error. */
-int NewBooleanMesh(struct Base *base, struct Base *base_select, int op);
+int NewBooleanMesh(struct Scene *scene, struct Base *base, struct Base 
*base_select, int op);
 
 
 /* Performs a boolean between two mesh objects, it is assumed that both objects

Modified: branches/blender2.5/blender/source/blender/blenkernel/SConscript
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/SConscript    
2009-01-07 16:52:18 UTC (rev 18405)
+++ branches/blender2.5/blender/source/blender/blenkernel/SConscript    
2009-01-07 17:25:17 UTC (rev 18406)
@@ -9,7 +9,7 @@
 incs += ' #/intern/iksolver/extern ../blenloader'
 incs += ' #/extern/bullet2/src'
 incs += ' #/intern/bmfont'
-incs += ' #/intern/opennl/extern'
+incs += ' #/intern/opennl/extern #/intern/bsp/extern'
 incs += ' ../gpu #/extern/glew/include'
 
 incs += ' ' + env['BF_OPENGL_INC']

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/Makefile
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/Makefile       
2009-01-07 16:52:18 UTC (rev 18405)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/Makefile       
2009-01-07 17:25:17 UTC (rev 18406)
@@ -69,6 +69,7 @@
 CPPFLAGS += -I$(NAN_DECIMATION)/include
 CPPFLAGS += -I$(NAN_ELBEEM)/include
 CPPFLAGS += -I$(NAN_OPENNL)/include
+CPPFLAGS += -I$(NAN_BSP)/include
 
 # path to zlib
 CPPFLAGS += -I$(NAN_ZLIB)/include

Copied: 
branches/blender2.5/blender/source/blender/blenkernel/intern/booleanops.c (from 
rev 18405, trunk/blender/source/blender/src/booleanops.c)
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/booleanops.c   
                        (rev 0)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/booleanops.c   
2009-01-07 17:25:17 UTC (rev 18406)
@@ -0,0 +1,567 @@
+/**
+ * $Id$
+ *
+ * ***** 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.
+ *
+ * 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) Blender Foundation
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ * CSG operations. 
+ */
+
+#include <string.h>
+#include <math.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_arithb.h"
+#include "BLI_blenlib.h"
+#include "BLI_ghash.h"
+
+#include "DNA_material_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+
+#include "CSG_BooleanOps.h"
+
+#include "BKE_booleanops.h"
+#include "BKE_cdderivedmesh.h"
+#include "BKE_customdata.h"
+#include "BKE_depsgraph.h"
+#include "BKE_DerivedMesh.h"
+#include "BKE_global.h"
+#include "BKE_library.h"
+#include "BKE_material.h"
+#include "BKE_mesh.h"
+#include "BKE_object.h"
+#include "BKE_utildefines.h"
+
+
+
+/**
+ * Here's the vertex iterator structure used to walk through
+ * the blender vertex structure.
+ */
+
+typedef struct {
+       Mesh *mesh;
+       Object *ob;
+       int pos;
+} VertexIt;
+
+/**
+ * Implementations of local vertex iterator functions.
+ * These describe a blender mesh to the CSG module.
+ */
+
+static void VertexIt_Destruct(CSG_VertexIteratorDescriptor * iterator)
+{
+       if (iterator->it) {
+               // deallocate memory for iterator
+               MEM_freeN(iterator->it);
+               iterator->it = 0;
+       }
+       iterator->Done = NULL;
+       iterator->Fill = NULL;
+       iterator->Reset = NULL;
+       iterator->Step = NULL;
+       iterator->num_elements = 0;
+
+}              
+
+static int VertexIt_Done(CSG_IteratorPtr it)
+{
+       VertexIt * iterator = (VertexIt *)it;
+       return(iterator->pos >= iterator->mesh->totvert);
+}
+
+static void VertexIt_Fill(CSG_IteratorPtr it, CSG_IVertex *vert)
+{
+       VertexIt * iterator = (VertexIt *)it;
+       MVert *verts = iterator->mesh->mvert;
+
+       float global_pos[3];
+
+       /* boolean happens in global space, transform both with obmat */
+       VecMat4MulVecfl(
+               global_pos,
+               iterator->ob->obmat, 
+               verts[iterator->pos].co
+       );
+
+       vert->position[0] = global_pos[0];
+       vert->position[1] = global_pos[1];
+       vert->position[2] = global_pos[2];
+}
+
+static void VertexIt_Step(CSG_IteratorPtr it)
+{
+       VertexIt * iterator = (VertexIt *)it;
+       iterator->pos ++;
+} 
+ 
+static void VertexIt_Reset(CSG_IteratorPtr it)
+{
+       VertexIt * iterator = (VertexIt *)it;
+       iterator->pos = 0;
+}
+
+static void VertexIt_Construct(CSG_VertexIteratorDescriptor *output, Object 
*ob)
+{
+
+       VertexIt *it;
+       if (output == 0) return;
+
+       // allocate some memory for blender iterator
+       it = (VertexIt *)(MEM_mallocN(sizeof(VertexIt),"Boolean_VIt"));
+       if (it == 0) {
+               return;
+       }
+       // assign blender specific variables
+       it->ob = ob;
+       it->mesh = ob->data;
+       
+       it->pos = 0;
+
+       // assign iterator function pointers.
+       output->Step = VertexIt_Step;
+       output->Fill = VertexIt_Fill;
+       output->Done = VertexIt_Done;
+       output->Reset = VertexIt_Reset;
+       output->num_elements = it->mesh->totvert;
+       output->it = it;
+}
+
+/**
+ * Blender Face iterator
+ */
+
+typedef struct {
+       Mesh *mesh;
+       int pos;
+       int offset;
+} FaceIt;
+
+static void FaceIt_Destruct(CSG_FaceIteratorDescriptor * iterator)
+{
+       MEM_freeN(iterator->it);
+       iterator->Done = NULL;
+       iterator->Fill = NULL;
+       iterator->Reset = NULL;
+       iterator->Step = NULL;
+       iterator->num_elements = 0;
+}
+
+static int FaceIt_Done(CSG_IteratorPtr it)
+{
+       // assume CSG_IteratorPtr is of the correct type.
+       FaceIt * iterator = (FaceIt *)it;
+       return(iterator->pos >= iterator->mesh->totface);
+}
+
+static void FaceIt_Fill(CSG_IteratorPtr it, CSG_IFace *face)
+{
+       // assume CSG_IteratorPtr is of the correct type.
+       FaceIt *face_it = (FaceIt *)it;
+       MFace *mfaces = face_it->mesh->mface;
+       MFace *mface = &mfaces[face_it->pos];
+
+       face->vertex_index[0] = mface->v1;
+       face->vertex_index[1] = mface->v2;
+       face->vertex_index[2] = mface->v3;
+       if (mface->v4) {
+               face->vertex_index[3] = mface->v4;
+               face->vertex_number = 4;
+       } else {
+               face->vertex_number = 3;
+       }
+
+       face->orig_face = face_it->offset + face_it->pos;
+}
+
+static void FaceIt_Step(CSG_IteratorPtr it)
+{
+       FaceIt * face_it = (FaceIt *)it;                
+       face_it->pos ++;
+}
+
+static void FaceIt_Reset(CSG_IteratorPtr it)
+{
+       FaceIt * face_it = (FaceIt *)it;                
+       face_it->pos = 0;
+}      
+
+static void FaceIt_Construct(
+       CSG_FaceIteratorDescriptor *output, Object *ob, int offset)
+{
+       FaceIt *it;
+       if (output == 0) return;
+
+       // allocate some memory for blender iterator
+       it = (FaceIt *)(MEM_mallocN(sizeof(FaceIt),"Boolean_FIt"));
+       if (it == 0) {
+               return ;
+       }
+       // assign blender specific variables
+       it->mesh = ob->data;
+       it->offset = offset;
+       it->pos = 0;
+
+       // assign iterator function pointers.
+       output->Step = FaceIt_Step;
+       output->Fill = FaceIt_Fill;
+       output->Done = FaceIt_Done;
+       output->Reset = FaceIt_Reset;
+       output->num_elements = it->mesh->totface;
+       output->it = it;
+}
+
+static Object *AddNewBlenderMesh(Scene *scene, Base *base)
+{
+       // This little function adds a new mesh object to the blender object 
list
+       // It uses ob to duplicate data as this seems to be easier than creating
+       // a new one. This new oject contains no faces nor vertices.
+       Mesh *old_me;
+       Base *basen;
+       Object *ob_new;
+
+       // now create a new blender object.
+       // duplicating all the settings from the previous object
+       // to the new one.
+       ob_new= copy_object(base->object);
+
+       // Ok we don't want to use the actual data from the
+       // last object, the above function incremented the 
+       // number of users, so decrement it here.
+       old_me= ob_new->data;
+       old_me->id.us--;
+
+       // Now create a new base to add into the linked list of 
+       // vase objects.
+       
+       basen= MEM_mallocN(sizeof(Base), "duplibase");
+       *basen= *base;
+       BLI_addhead(&scene->base, basen);       /* addhead: anders oneindige 
lus */
+       basen->object= ob_new;
+       basen->flag &= ~SELECT;
+                               
+       // Initialize the mesh data associated with this object.                
                                
+       ob_new->data= add_mesh("Mesh");
+       G.totmesh++;
+
+       // Finally assign the object type.
+       ob_new->type= OB_MESH;
+
+       return ob_new;
+}
+
+static void InterpCSGFace(
+       DerivedMesh *dm, Mesh *orig_me, int index, int orig_index, int nr,
+       float mapmat[][4])
+{
+       float obco[3], *co[4], *orig_co[4], w[4][4];
+       MFace *mface, *orig_mface;
+       int j;
+
+       mface = CDDM_get_face(dm, index);
+       orig_mface = orig_me->mface + orig_index;
+
+       // get the vertex coordinates from the original mesh
+       orig_co[0] = (orig_me->mvert + orig_mface->v1)->co;
+       orig_co[1] = (orig_me->mvert + orig_mface->v2)->co;
+       orig_co[2] = (orig_me->mvert + orig_mface->v3)->co;
+       orig_co[3] = (orig_mface->v4)? (orig_me->mvert + orig_mface->v4)->co: 
NULL;
+
+       // get the vertex coordinates from the new derivedmesh
+       co[0] = CDDM_get_vert(dm, mface->v1)->co;

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to