[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18406] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Wed Jan 7 18:25:18 CET 2009


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. @@




More information about the Bf-blender-cvs mailing list