Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2006-11-08 23:14:04 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2006-11-08 23:14:04 +0300
commit011f531359102a624126841b7ddf7beb94af1f7e (patch)
treebfb2b4c611f374bf3f2926629952e257ee4886ed /intern/boolop
parentcea2b6752bc1f68b829cd24f7611263a98edc897 (diff)
Modified the way booleans preserve face data, and cleaned up some
duplicate code. Also removed redundant files from the bsp module, that where replaced by boolop last year, no sense in updating them for these changes. On the user level things should still work the same, this is only preparation work. Not counting the removed files, -1501 lines of code, not too bad :)
Diffstat (limited to 'intern/boolop')
-rw-r--r--intern/boolop/extern/BOP_Interface.h9
-rw-r--r--intern/boolop/intern/BOP_Interface.cpp142
-rw-r--r--intern/boolop/intern/BOP_Material.cpp176
-rw-r--r--intern/boolop/intern/BOP_Material.h80
-rw-r--r--intern/boolop/intern/BOP_MaterialContainer.cpp244
-rw-r--r--intern/boolop/intern/BOP_MaterialContainer.h72
-rw-r--r--intern/boolop/intern/BOP_Mesh.h2
7 files changed, 21 insertions, 704 deletions
diff --git a/intern/boolop/extern/BOP_Interface.h b/intern/boolop/extern/BOP_Interface.h
index 446dd1b79f7..7fe7ae226fd 100644
--- a/intern/boolop/extern/BOP_Interface.h
+++ b/intern/boolop/extern/BOP_Interface.h
@@ -36,18 +36,11 @@
typedef enum EnumBoolOpState {BOP_OK, BOP_NO_SOLID, BOP_ERROR} BoolOpState;
typedef enum EnumBoolOpType {BOP_INTERSECTION=e_csg_intersection, BOP_UNION=e_csg_union, BOP_DIFFERENCE=e_csg_difference} BoolOpType;
-// extern interpolator.
-typedef int (*CSG_InterpolateUserFaceVertexDataFunc)(void *d1, void * d2, void *dnew, float epsilon);
-
BoolOpState BOP_performBooleanOperation(BoolOpType opType,
- CSG_MeshPropertyDescriptor outputProps,
BSP_CSGMesh** outputMesh,
- CSG_MeshPropertyDescriptor obAProps,
CSG_FaceIteratorDescriptor obAFaces,
CSG_VertexIteratorDescriptor obAVertices,
- CSG_MeshPropertyDescriptor obBProps,
CSG_FaceIteratorDescriptor obBFaces,
- CSG_VertexIteratorDescriptor obBVertices,
- CSG_InterpolateUserFaceVertexDataFunc interpFunc);
+ CSG_VertexIteratorDescriptor obBVertices);
#endif
diff --git a/intern/boolop/intern/BOP_Interface.cpp b/intern/boolop/intern/BOP_Interface.cpp
index d069c9d4664..6d1ae56da2d 100644
--- a/intern/boolop/intern/BOP_Interface.cpp
+++ b/intern/boolop/intern/BOP_Interface.cpp
@@ -36,7 +36,6 @@
#include "BOP_Mesh.h"
#include "BOP_Face2Face.h"
#include "BOP_Merge.h"
-#include "BOP_MaterialContainer.h"
#include "BOP_Chrono.h"
//#define DEBUG
@@ -50,18 +49,14 @@ BOP_Face3* BOP_createFace(BOP_Mesh* mesh,
BOP_Index vertex1,
BOP_Index vertex2,
BOP_Index vertex3,
- BOP_Index idxFace);
+ BOP_Index origFace);
void BOP_addMesh(BOP_Mesh* mesh,
BOP_Faces* meshFacesId,
- BOP_MaterialContainer* materials,
- CSG_MeshPropertyDescriptor props,
CSG_FaceIteratorDescriptor& face_it,
CSG_VertexIteratorDescriptor& vertex_it,
bool invert);
-BSP_CSGMesh* BOP_newEmptyMesh(CSG_MeshPropertyDescriptor props);
+BSP_CSGMesh* BOP_newEmptyMesh();
BSP_CSGMesh* BOP_exportMesh(BOP_Mesh* inputMesh,
- BOP_MaterialContainer* materials,
- CSG_MeshPropertyDescriptor props,
bool invert);
void BOP_meshFilter(BOP_Mesh* meshC, BOP_Faces* faces, BOP_BSPTree* bsp);
void BOP_simplifiedMeshFilter(BOP_Mesh* meshC, BOP_Faces* faces, BOP_BSPTree* bsp, bool inverted);
@@ -70,27 +65,20 @@ void BOP_meshClassify(BOP_Mesh* meshC, BOP_Faces* faces, BOP_BSPTree* bsp);
/**
* Performs a generic booleam operation, the entry point for external modules.
* @param opType Boolean operation type BOP_INTERSECTION, BOP_UNION, BOP_DIFFERENCE
- * @param outputProps Output mesh properties
* @param outputMesh Output mesh, the final result (the object C)
- * @param obAProps Object A properties
* @param obAFaces Object A faces list
* @param obAVertices Object A vertices list
- * @param obBProps Object B properties
* @param obBFaces Object B faces list
* @param obBVertices Object B vertices list
* @param interpFunc Interpolating function
* @return operation state: BOP_OK, BOP_NO_SOLID, BOP_ERROR
*/
BoolOpState BOP_performBooleanOperation(BoolOpType opType,
- CSG_MeshPropertyDescriptor outputProps,
BSP_CSGMesh** outputMesh,
- CSG_MeshPropertyDescriptor obAProps,
CSG_FaceIteratorDescriptor obAFaces,
CSG_VertexIteratorDescriptor obAVertices,
- CSG_MeshPropertyDescriptor obBProps,
CSG_FaceIteratorDescriptor obBFaces,
- CSG_VertexIteratorDescriptor obBVertices,
- CSG_InterpolateUserFaceVertexDataFunc interpFunc)
+ CSG_VertexIteratorDescriptor obBVertices)
{
#ifdef DEBUG
cout << "BEGIN BOP_performBooleanOperation" << endl;
@@ -111,15 +99,11 @@ BoolOpState BOP_performBooleanOperation(BoolOpType opType,
// Build C-mesh, the output mesh
BOP_Mesh meshC;
- // Prepare the material container
- BOP_MaterialContainer materials;
- materials.setInterpFunc(interpFunc);
-
// Add A-mesh into C-mesh
- BOP_addMesh(&meshC, &meshAFacesId, &materials, obAProps, obAFaces, obAVertices, invertMeshA);
+ BOP_addMesh(&meshC, &meshAFacesId, obAFaces, obAVertices, invertMeshA);
// Add B-mesh into C-mesh
- BOP_addMesh(&meshC, &meshBFacesId, &materials, obBProps, obBFaces, obBVertices, invertMeshB);
+ BOP_addMesh(&meshC, &meshBFacesId, obBFaces, obBVertices, invertMeshB);
// for now, allow operations on non-manifold (non-solid) meshes
#if 0
@@ -132,7 +116,7 @@ BoolOpState BOP_performBooleanOperation(BoolOpType opType,
invertMeshA, invertMeshB);
// Invert the output mesh if is required
- *outputMesh = BOP_exportMesh(&meshC, &materials, outputProps, invertMeshC);
+ *outputMesh = BOP_exportMesh(&meshC, invertMeshC);
#ifdef DEBUG
cout << "END BOP_performBooleanOperation" << endl;
@@ -324,37 +308,33 @@ void BOP_meshClassify(BOP_Mesh* meshC, BOP_Faces* faces, BOP_BSPTree* bsp)
* @param vertex1 first vertex of the new face
* @param vertex2 second vertex of the new face
* @param vertex3 third vertex of the new face
- * @param idxFace identifier of the new face
+ * @param origFace identifier of the new face
* @return new the new face
*/
BOP_Face3 *BOP_createFace3(BOP_Mesh* mesh,
BOP_Index vertex1,
BOP_Index vertex2,
BOP_Index vertex3,
- BOP_Index idxFace)
+ BOP_Index origFace)
{
MT_Point3 p1 = mesh->getVertex(vertex1)->getPoint();
MT_Point3 p2 = mesh->getVertex(vertex2)->getPoint();
MT_Point3 p3 = mesh->getVertex(vertex3)->getPoint();
MT_Plane3 plane(p1,p2,p3);
- return new BOP_Face3(vertex1, vertex2, vertex3, plane, idxFace);
+ return new BOP_Face3(vertex1, vertex2, vertex3, plane, origFace);
}
/**
* Adds mesh information into destination mesh.
* @param mesh input/output mesh, destination for the new mesh data
* @param meshFacesId output mesh faces, contains an added faces list
- * @param materials used to store material data
- * @param props Properties of the input mesh data
* @param face_it faces iterator
* @param vertex_it vertices iterator
* @param inverted if TRUE adding inverted faces, non-inverted otherwise
*/
void BOP_addMesh(BOP_Mesh* mesh,
BOP_Faces* meshFacesId,
- BOP_MaterialContainer* materials,
- CSG_MeshPropertyDescriptor props,
CSG_FaceIteratorDescriptor& face_it,
CSG_VertexIteratorDescriptor& vertex_it,
bool invert)
@@ -374,46 +354,12 @@ void BOP_addMesh(BOP_Mesh* mesh,
// now for the polygons.
// we may need to decalare some memory for user defined face properties.
- unsigned int sizeFace = props.user_data_size;
- if (sizeFace) {
- face.user_face_data = new char[sizeFace];
- }
- else {
- face.user_face_data = NULL;
- }
-
- unsigned int sizeVertex = props.user_face_vertex_data_size;
- if (sizeVertex) {
- char * fv_data2 = NULL;
- fv_data2 = new char[4 * sizeVertex];
-
- face.user_face_vertex_data[0] = fv_data2;
- face.user_face_vertex_data[1] = fv_data2 + sizeVertex;
- face.user_face_vertex_data[2] = fv_data2 + 2*sizeVertex;
- face.user_face_vertex_data[3] = fv_data2 + 3*sizeVertex;
- }
- else {
- face.user_face_vertex_data[0] = NULL;
- face.user_face_vertex_data[1] = NULL;
- face.user_face_vertex_data[2] = NULL;
- face.user_face_vertex_data[3] = NULL;
- }
- unsigned int idFaceMaterial;
- BOP_Material faceMaterial(sizeFace,sizeVertex);
- BOP_Material* materialHandler;
BOP_Face3 *newface;
while (!face_it.Done(face_it.it)) {
face_it.Fill(face_it.it,&face);
- faceMaterial.setFaceMaterial((char *)face.user_face_data);
- faceMaterial.setFaceVertexMaterial((char *)face.user_face_vertex_data[0]);
- faceMaterial.setOriginalFace(mesh->getNumFaces());
- faceMaterial.setIsQuad(face.vertex_number == 4);
- idFaceMaterial = materials->addMaterial(faceMaterial);
- materialHandler = materials->getMaterial(idFaceMaterial);
-
// Let's not rely on quads being coplanar - especially if they
// are coming out of that soup of code from blender...
if (face.vertex_number == 4){
@@ -423,40 +369,32 @@ void BOP_addMesh(BOP_Mesh* mesh,
face.vertex_index[2] + vtxIndexOffset,
face.vertex_index[0] + vtxIndexOffset,
face.vertex_index[3] + vtxIndexOffset,
- idFaceMaterial);
+ face.orig_face);
meshFacesId->push_back(newface);
mesh->addFace(newface);
- materialHandler->setOriginalFaceVertex(newface->getVertex(0),2);
- materialHandler->setOriginalFaceVertex(newface->getVertex(1),0);
- materialHandler->setOriginalFaceVertex(newface->getVertex(2),3);
newface = BOP_createFace3(mesh,
face.vertex_index[2] + vtxIndexOffset,
face.vertex_index[1] + vtxIndexOffset,
face.vertex_index[0] + vtxIndexOffset,
- idFaceMaterial);
+ face.orig_face);
meshFacesId->push_back(newface);
mesh->addFace(newface);
- materialHandler->setOriginalFaceVertex(newface->getVertex(1),1);
}
else {
newface = BOP_createFace3(mesh,
face.vertex_index[0] + vtxIndexOffset,
face.vertex_index[2] + vtxIndexOffset,
face.vertex_index[3] + vtxIndexOffset,
- idFaceMaterial);
+ face.orig_face);
meshFacesId->push_back(newface);
mesh->addFace(newface);
- materialHandler->setOriginalFaceVertex(newface->getVertex(0),0);
- materialHandler->setOriginalFaceVertex(newface->getVertex(1),2);
- materialHandler->setOriginalFaceVertex(newface->getVertex(2),3);
newface = BOP_createFace3(mesh,
face.vertex_index[0] + vtxIndexOffset,
face.vertex_index[1] + vtxIndexOffset,
face.vertex_index[2] + vtxIndexOffset,
- idFaceMaterial);
+ face.orig_face);
meshFacesId->push_back(newface);
mesh->addFace(newface);
- materialHandler->setOriginalFaceVertex(newface->getVertex(1),1);
}
}
else {
@@ -466,54 +404,37 @@ void BOP_addMesh(BOP_Mesh* mesh,
face.vertex_index[2] + vtxIndexOffset,
face.vertex_index[1] + vtxIndexOffset,
face.vertex_index[0] + vtxIndexOffset,
- idFaceMaterial);
+ face.orig_face);
meshFacesId->push_back(newface);
mesh->addFace(newface);
- materialHandler->setOriginalFaceVertex(newface->getVertex(0),2);
- materialHandler->setOriginalFaceVertex(newface->getVertex(1),1);
- materialHandler->setOriginalFaceVertex(newface->getVertex(2),0);
}
else {
newface = BOP_createFace3(mesh,
face.vertex_index[0] + vtxIndexOffset,
face.vertex_index[1] + vtxIndexOffset,
face.vertex_index[2] + vtxIndexOffset,
- idFaceMaterial);
+ face.orig_face);
meshFacesId->push_back(newface);
mesh->addFace(newface);
- materialHandler->setOriginalFaceVertex(newface->getVertex(0),0);
- materialHandler->setOriginalFaceVertex(newface->getVertex(1),1);
- materialHandler->setOriginalFaceVertex(newface->getVertex(2),2);
}
}
face_it.Step(face_it.it);
}
-
- // delete temporal material data
- if (face.user_face_data)
- delete[] static_cast<char *>(face.user_face_data);
- if (face.user_face_vertex_data)
- delete[] static_cast<char *>(face.user_face_vertex_data[0]);
}
/**
* Returns an empty mesh with the specified properties.
- * @param props Output mesh properties
* @return a new empty mesh
*/
-BSP_CSGMesh* BOP_newEmptyMesh(CSG_MeshPropertyDescriptor props)
+BSP_CSGMesh* BOP_newEmptyMesh()
{
BSP_CSGMesh* mesh = BSP_CSGMesh::New();
if (mesh == NULL) return mesh;
vector<BSP_MVertex>* vertices = new vector<BSP_MVertex>;
- BSP_CSGUserData* faceData = new BSP_CSGUserData(props.user_data_size);
- BSP_CSGUserData* faceVtxData = new BSP_CSGUserData(props.user_face_vertex_data_size);
mesh->SetVertices(vertices);
- mesh->SetFaceData(faceData);
- mesh->SetFaceVertexData(faceVtxData);
return mesh;
}
@@ -521,24 +442,16 @@ BSP_CSGMesh* BOP_newEmptyMesh(CSG_MeshPropertyDescriptor props)
/**
* Exports a BOP_Mesh to a BSP_CSGMesh.
* @param mesh Input mesh
- * @param materials used to reconstruct original faces materials
- * @param props Properties of output mesh
* @param invert if TRUE export with inverted faces, no inverted otherwise
* @return the corresponding new BSP_CSGMesh
*/
BSP_CSGMesh* BOP_exportMesh(BOP_Mesh* mesh,
- BOP_MaterialContainer* materials,
- CSG_MeshPropertyDescriptor props,
bool invert)
{
- BSP_CSGMesh* outputMesh = BOP_newEmptyMesh(props);
+ BSP_CSGMesh* outputMesh = BOP_newEmptyMesh();
if (outputMesh == NULL) return NULL;
- // User data handlers
- BSP_CSGUserData* outputFaceVtxData = &(outputMesh->FaceVertexData());
- BSP_CSGUserData* outputFaceData = &(outputMesh->FaceData());
-
// vtx index dictionary, to translate indeces from input to output.
map<int,unsigned int> dic;
map<int,unsigned int>::iterator itDic;
@@ -549,9 +462,6 @@ BSP_CSGMesh* BOP_exportMesh(BOP_Mesh* mesh,
BOP_Faces faces = mesh->getFaces();
BOP_Vertexs vertexs = mesh->getVertexs();
- // Reserve temporal memory
- char* tmpFaceVtxData = new char[props.user_face_vertex_data_size];
-
for (BOP_IT_Faces face = faces.begin(); face != faces.end(); face++) {
if ((*face)->getTAG()!=BROKEN){
// Add output face
@@ -560,11 +470,8 @@ BSP_CSGMesh* BOP_exportMesh(BOP_Mesh* mesh,
// Copy face
outFace.m_verts.clear();
- outFace.m_fv_data.clear();
outFace.m_plane = (*face)->getPlane();
-
- // Copy face user data from input mesh
- outputFaceData->Duplicate(materials->getFaceMaterial((*face)->getOriginalFace()));
+ outFace.m_orig_face = (*face)->getOriginalFace();
// invert face if is required
if (invert) (*face)->invert();
@@ -587,22 +494,11 @@ BSP_CSGMesh* BOP_exportMesh(BOP_Mesh* mesh,
// The vertex is added
outVtxId = BSP_VertexInd(itDic->second);
}
-
- // Add vertex to output face
- outFace.m_verts.push_back(outVtxId);
- // Add face vertex user data
- char* faceVtxData = materials->getFaceVertexMaterial(mesh,
- (*face)->getOriginalFace(),
- (mesh->getVertex(idVertex))->getPoint(),
- tmpFaceVtxData);
- BSP_UserFVInd userFVInd(outputFaceVtxData->Duplicate((void*) faceVtxData));
- outFace.m_fv_data.push_back(userFVInd);
+ outFace.m_verts.push_back(outVtxId);
}
}
}
- // free temporal memory
- delete[] tmpFaceVtxData;
// Build the mesh edges using topological informtion
outputMesh->BuildEdges();
diff --git a/intern/boolop/intern/BOP_Material.cpp b/intern/boolop/intern/BOP_Material.cpp
deleted file mode 100644
index 01892d2accc..00000000000
--- a/intern/boolop/intern/BOP_Material.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * ***** BEGIN GPL/BL DUAL 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) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
- */
-
-#include "BOP_Material.h"
-#include <iostream>
-using namespace std;
-
-/**
- * Constructs a new material.
- * @param faceWidth face material size in bytes.
- * @param faceVertexWidth verex face material size in bytes.
- */
-BOP_Material::BOP_Material(int faceWidth, int faceVertexWidth)
-{
- m_faceWidth = faceWidth;
- m_faceVertexWidth = faceVertexWidth;
-
- m_faceMaterial = new char[m_faceWidth];
- m_faceVertexMaterial = new char[N_FACE_VERTEX*m_faceVertexWidth];
-}
-
-/**
- * Constructs a new material duplicating the other object data.
- * @param other the other object to copy the data.
- */
-BOP_Material::BOP_Material(const BOP_Material& other)
-{
- m_faceWidth = other.getFaceWidth();
- m_faceVertexWidth = other.getFaceVertexWidth();
-
- m_faceMaterial = new char[m_faceWidth];
- m_faceVertexMaterial = new char[N_FACE_VERTEX*m_faceVertexWidth];
-
- duplicate(other);
-}
-
-/**
- * Destroys a material.
- */
-BOP_Material::~BOP_Material()
-{
- delete[] m_faceMaterial;
- delete[] m_faceVertexMaterial;
-}
-
-/**
- * Duplicates the face material passed by argument.
- * @param faceMaterial pointer to face material data.
- */
-void BOP_Material::setFaceMaterial(char* faceMaterial)
-{
- memcpy(m_faceMaterial, faceMaterial, m_faceWidth);
-}
-
-/**
- * Duplicates the all face vertex materials passed by argument. It's supossed
- * that all face vertex materials positions are consecutive.
- * @param faceVertexMaterial pointer to firts vertex face material.
- */
-void BOP_Material::setFaceVertexMaterial(char* faceVertexMaterial)
-{
- memcpy(m_faceVertexMaterial, faceVertexMaterial, N_FACE_VERTEX*m_faceVertexWidth);
-}
-
-/**
- * Duplicates on i-position the face vertex material passed by argument.
- * @param faceMaterial pointer to face vertex material.
- * @param i destination position of new face vertex material (0<=i<4)
- */
-void BOP_Material::setFaceVertexMaterial(char* faceVertexMaterial, int i)
-{
- if (i>=0&&i<N_FACE_VERTEX)
- memcpy(m_faceVertexMaterial+i*m_faceVertexWidth, faceVertexMaterial, m_faceVertexWidth);
-}
-
-/**
- * Duplicates the other material object data.
- * @param other the other material object.
- */
-void BOP_Material::duplicate(const BOP_Material& other)
-{
- setOriginalFace(other.getOriginalFace());
- setIsQuad(other.isQuad());
- for (int i=0;i<N_FACE_VERTEX;++i)
- setOriginalFaceVertex(other.getOriginalFaceVertex(i),i);
- setFaceMaterial(other.getFaceMaterial());
- setFaceVertexMaterial(other.getFaceVertexMaterial(0));
-}
-
-/**
- * Implements operator =
- */
-BOP_Material& BOP_Material::operator = (const BOP_Material& other)
-{
- if (other.getFaceWidth() == m_faceWidth && other.getFaceVertexWidth() == m_faceVertexWidth)
- duplicate(other);
- return (*this);
-}
-
-/**
- * Returns the original face vertex material using a input vtx id. The input vtx IDs
- * are mapped to output ids, this one is used to obtain the original face vertex
- * material.
- * @param originalFaceVertex input vertex id (0..3)
- * @return pointer to original face vertex material if it exist, NULL otherwise.
- */
-char* BOP_Material::getOriginalFaceVertexMaterial(int originalFaceVertex)
-{
- int N = isQuad() ? 4 : 3;
- int i = 0;
- bool b = false;
- while (i<N&&!b){
- if (m_originalFaceVertices[i]==originalFaceVertex) b = true;
- else i++;
- }
- return b ? getFaceVertexMaterial(i) : m_faceVertexMaterial; /* ton: NULL return crashes... */
-}
-
-/**
- * Returns the face material pointer.
- * @return pointer to face material.
- */
-char* BOP_Material::getFaceMaterial() const
-{
- return m_faceMaterial;
-}
-
-/**
- * Returns the face vertex material at i position.
- * @param i index of face vertex material.
- * @return pointer to face vertex material.
- */
-inline char* BOP_Material::getFaceVertexMaterial(int i) const
-{
- return i>=0&&i<N_FACE_VERTEX ? m_faceVertexMaterial + i*m_faceVertexWidth : NULL;
-}
-
-/**
- * Implements operator <<
- */
-ostream &operator<<(ostream &stream, BOP_Material *m)
-{
- cout << "(" << m->getOriginalFace() << ") < ";
- int N = m->isQuad() ? 4 : 3;
- for (int i=0;i<N;++i) cout << m->getOriginalFaceVertex(i) << " ";
- cout << ">" << endl;
-
- return stream;
-}
diff --git a/intern/boolop/intern/BOP_Material.h b/intern/boolop/intern/BOP_Material.h
deleted file mode 100644
index 079cc614410..00000000000
--- a/intern/boolop/intern/BOP_Material.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * ***** BEGIN GPL/BL DUAL 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) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
- */
-
-#ifndef BOP_MATERIAL_H
-#define BOP_MATERIAL_H
-
-#include <iostream>
-using namespace std;
-
-#define N_FACE_VERTEX 4
-
-class BOP_Material
-{
-private:
- char* m_faceMaterial;
- char* m_faceVertexMaterial;
- int m_faceWidth;
- int m_faceVertexWidth;
- int m_originalFace;
- int m_originalFaceVertices[N_FACE_VERTEX];
- bool m_isQuad;
-
-public:
- BOP_Material(int faceWidth, int faceVertexWidth);
- BOP_Material(const BOP_Material& other);
- ~BOP_Material();
- void setFaceMaterial(char* faceMaterial);
- void setFaceVertexMaterial(char* faceVertexMaterial);
- void setFaceVertexMaterial(char* faceVertexMaterial, int i);
- void duplicate(const BOP_Material& other);
- BOP_Material& operator = (const BOP_Material& other);
- char* getFaceMaterial() const;
- char* getFaceVertexMaterial(int i) const;
- int getFaceWidth() const { return m_faceWidth; };
- int getFaceVertexWidth() const { return m_faceVertexWidth; };
-
- void setOriginalFace(int originalFace) {m_originalFace = originalFace;};
- int getOriginalFace() const {return m_originalFace;};
- void setOriginalFaceVertex(int originalFaceVertex, int i) {
- if (0<=i&&i<N_FACE_VERTEX) m_originalFaceVertices[i] = originalFaceVertex;
- };
- int getOriginalFaceVertex(int i) const {
- if (0<=i&&i<N_FACE_VERTEX) return m_originalFaceVertices[i];
- else return -1;
- };
- char* getOriginalFaceVertexMaterial(int originalFaceVertex);
- void setIsQuad(bool quad) {m_isQuad = quad;};
- bool isQuad() const {return m_isQuad;};
-
- friend ostream &operator<<(ostream &stream, BOP_Material *m);
-};
-
-#endif
diff --git a/intern/boolop/intern/BOP_MaterialContainer.cpp b/intern/boolop/intern/BOP_MaterialContainer.cpp
deleted file mode 100644
index 6ade5b0649f..00000000000
--- a/intern/boolop/intern/BOP_MaterialContainer.cpp
+++ /dev/null
@@ -1,244 +0,0 @@
-/**
- * ***** BEGIN GPL/BL DUAL 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) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
- */
-
-#include <iostream>
-#include "BOP_MaterialContainer.h"
-#include "BOP_MathUtils.h"
-#include "MEM_SmartPtr.h"
-
-/**
- * Constructs a new material container.
- */
-BOP_MaterialContainer::BOP_MaterialContainer()
-{
- m_interpFunc = NULL;
-}
-
-/**
- * Destroys a material container.
- */
-BOP_MaterialContainer::~BOP_MaterialContainer()
-{
-}
-
-/**
- * Adds a new material to this container.
- * @param m material material object to add.
- * @return the new material index.
- */
-BOP_Index BOP_MaterialContainer::addMaterial(BOP_Material m)
-{
- m_materialList.push_back(m);
- return m_materialList.size()-1;
-}
-
-/**
- * Updates the interpolation function of this container.
- * @param interpFunc the interpolation function.
- */
-void BOP_MaterialContainer::setInterpFunc(CSG_InterpolateUserFaceVertexDataFunc interpFunc)
-{
- m_interpFunc = interpFunc;
-}
-
-/**
- * Returns the material list.
- * @return
- */
-BOP_Materials& BOP_MaterialContainer::getMaterialList()
-{
- return m_materialList;
-}
-
-/**
- * Returns the material with the specified index.
- * @param index material index.
- * @return material with the specified index.
- */
-BOP_Material* BOP_MaterialContainer::getMaterial(BOP_Index index)
-{
- return index < m_materialList.size() ? &(m_materialList[index]) : NULL;
-}
-
-/**
- * Returns the pointer to face material specified by index.
- * @param index material index.
- * @return pointer to face material.
- */
-char* BOP_MaterialContainer::getFaceMaterial(BOP_Index index)
-{
- if (index < m_materialList.size())
- return m_materialList[index].getFaceMaterial();
- else return NULL;
-}
-
-/**
- * Returns a pointer to face vertex material, if is the material not exist, then
- * returns an interpoled material.
- * @param mesh original mesh data.
- * @param originalFaceIndex index to the original mesh face.
- * @param point point who needs a material.
- * @param faceVertexMaterial pointer to mem region where the material will be
- * saved.
- * @return pointer to the face vertex material.
- */
-char* BOP_MaterialContainer::getFaceVertexMaterial(BOP_Mesh *mesh,
- BOP_Index originalFaceIndex,
- MT_Point3 point,
- char* faceVertexMaterial)
-{
- unsigned int i;
-
- if (originalFaceIndex>=m_materialList.size()) return NULL;
-
- BOP_Material& material = m_materialList[originalFaceIndex];
-
- if (material.isQuad()) {
-
- BOP_Face *face1 = mesh->getFace(material.getOriginalFace());
- BOP_Face *face2 = mesh->getFace(material.getOriginalFace()+1);
-
- if (!face1 || !face2) return NULL;
-
- // Search original point
- for (i=0;i<face1->size();i++) {
- if (point == mesh->getVertex(face1->getVertex(i))->getPoint()) {
- return material.getOriginalFaceVertexMaterial(face1->getVertex(i));
- }
- }
- for (i=0;i<face2->size();i++) {
- if (point == mesh->getVertex(face2->getVertex(i))->getPoint()) {
- return material.getOriginalFaceVertexMaterial(face2->getVertex(i));
- }
- }
- // wich is the half quad where the point is?
- MT_Vector3 N = face1->getPlane().Normal();
- MT_Point3 p0 = mesh->getVertex(face1->getVertex(0))->getPoint();
- MT_Point3 q(p0.x()+N.x(),p0.y()+N.y(),p0.z()+N.z());
- MT_Point3 p2 = mesh->getVertex(face1->getVertex(1))->getPoint();
- MT_Plane3 plane(p0,p2,q);
-
- if (BOP_sign(plane.signedDistance(point))==-1) {
- // first half quad
- faceVertexMaterial = interpolateMaterial(mesh, face1, material, point, faceVertexMaterial);
- }
- else {
- // second half quad
- faceVertexMaterial = interpolateMaterial(mesh, face2, material, point, faceVertexMaterial);
- }
- }
- else {
- BOP_Face *face1 = mesh->getFace(material.getOriginalFace());
-
- if (!face1) return NULL;
-
- // Search original point
- for (i=0;i<face1->size();i++) {
- if (point == mesh->getVertex(face1->getVertex(i))->getPoint())
- return material.getOriginalFaceVertexMaterial(face1->getVertex(i));
- }
-
- faceVertexMaterial = interpolateMaterial(mesh, face1, material, point, faceVertexMaterial);
- }
-
- return faceVertexMaterial;
-}
-
-/**
- * Performs vertex data interpolation.
- * @param mesh original mesh data.
- * @param face face used to interpolate an interior face point material
- * @param material face material, input data for implementation.
- * @param point interpolated point.
- * @param faceVertexMaterial pointer to memory region.
- * @return pointer to face vertex material.
- */
-char* BOP_MaterialContainer::interpolateMaterial(BOP_Mesh* mesh,
- BOP_Face* face,
- BOP_Material& material,
- MT_Point3 point,
- char* faceVertexMaterial)
-{
- // (p1)-----(I)------(p2)
- // \ | /
- // \ | /
- // \ | /
- // \ (point) /
- // \ | /
- // \ | /
- // \ | /
- // (p3)
-
- MT_Point3 p1 = mesh->getVertex(face->getVertex(0))->getPoint();
- MT_Point3 p2 = mesh->getVertex(face->getVertex(1))->getPoint();
- MT_Point3 p3 = mesh->getVertex(face->getVertex(2))->getPoint();
- MT_Point3 I = BOP_4PointIntersect(p1, p2, p3, point);
- MT_Scalar epsilon0 = 1.0-BOP_EpsilonDistance(p1, p2, I);
- MT_Scalar epsilon1 = 1.0-BOP_EpsilonDistance(I, p3, point);
-
- // Interpolate data
- if (m_interpFunc) {
- // temporal data
- char* faceVertexMaterialTemp = new char[material.getFaceVertexWidth()];
-
- (*m_interpFunc)(material.getOriginalFaceVertexMaterial(face->getVertex(0)),
- material.getOriginalFaceVertexMaterial(face->getVertex(1)),
- faceVertexMaterialTemp,
- epsilon0);
-
- (*m_interpFunc)(faceVertexMaterialTemp,
- material.getOriginalFaceVertexMaterial(face->getVertex(2)),
- faceVertexMaterial,
- epsilon1);
-
- // free temporal data
- delete[] faceVertexMaterialTemp;
-
- }
- else faceVertexMaterial = NULL;
-
- // return the result
- return (char*) faceVertexMaterial;
-}
-
-/**
- * Implements operator <<
- */
-ostream &operator<<(ostream &stream, BOP_MaterialContainer *mc)
-{
- stream << "***[ Material List ]***********************************************" << endl;
- BOP_IT_Materials it;
- for (it=mc->getMaterialList().begin();it!=mc->getMaterialList().end();++it) {
- stream << "[" << it - mc->getMaterialList().begin() << "] ";
- stream << &(*it);
- }
- stream << "*******************************************************************" << endl;
- return stream;
-}
diff --git a/intern/boolop/intern/BOP_MaterialContainer.h b/intern/boolop/intern/BOP_MaterialContainer.h
deleted file mode 100644
index c6de4cd96e5..00000000000
--- a/intern/boolop/intern/BOP_MaterialContainer.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * ***** BEGIN GPL/BL DUAL 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) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
- */
-
-#ifndef BOP_MATERIALCONTAINER_H
-#define BOP_MATERIALCONTAINER_H
-
-#include "BOP_Mesh.h"
-#include "BOP_Material.h"
-#include "BOP_Interface.h"
-#include <vector>
-using namespace std;
-
-typedef vector<BOP_Material> BOP_Materials;
-typedef vector<BOP_Material>::iterator BOP_IT_Materials;
-
-class BOP_MaterialContainer
-{
-private:
- BOP_Materials m_materialList;
- CSG_InterpolateUserFaceVertexDataFunc m_interpFunc;
-
-public:
- BOP_MaterialContainer();
- ~BOP_MaterialContainer();
- BOP_Index addMaterial(BOP_Material m);
- void setInterpFunc(CSG_InterpolateUserFaceVertexDataFunc interpFunc);
- BOP_Materials& getMaterialList();
- BOP_Material* getMaterial(BOP_Index index);
- char* getFaceMaterial(BOP_Index index);
- char* getFaceVertexMaterial(BOP_Mesh *mesh,
- BOP_Index originalFaceIndex,
- MT_Point3 point,
- char* faceVertexMaterial);
-
- friend ostream &operator<<(ostream &stream, BOP_MaterialContainer *mc);
-
-private:
- char* interpolateMaterial(BOP_Mesh* mesh,
- BOP_Face* face,
- BOP_Material& material,
- MT_Point3 point,
- char* faceVertexMaterial);
-};
-
-#endif
diff --git a/intern/boolop/intern/BOP_Mesh.h b/intern/boolop/intern/BOP_Mesh.h
index 557939441fc..f671b9a96c9 100644
--- a/intern/boolop/intern/BOP_Mesh.h
+++ b/intern/boolop/intern/BOP_Mesh.h
@@ -78,7 +78,7 @@ private:
bool testFace(BOP_Face *face);
public:
- BOP_Mesh ();
+ BOP_Mesh();
~BOP_Mesh();
BOP_Index addVertex(MT_Point3 point);