From ed78dcc96cde26c56207aeb1fbd91488ca3a7f12 Mon Sep 17 00:00:00 2001 From: Willian Padovani Germano Date: Sat, 17 May 2003 04:29:49 +0000 Subject: * Added submodule NMesh: Partially implemented. Most of it comes from opy_nmesh.c, plus needed changes to integrate in into exppython. * Added helper submodule vector, needed by NMesh. * Minor changes in other files. --- source/blender/python/api2_2x/NMesh.h | 204 ++++++++++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 source/blender/python/api2_2x/NMesh.h (limited to 'source/blender/python/api2_2x/NMesh.h') diff --git a/source/blender/python/api2_2x/NMesh.h b/source/blender/python/api2_2x/NMesh.h new file mode 100644 index 00000000000..2e82908165f --- /dev/null +++ b/source/blender/python/api2_2x/NMesh.h @@ -0,0 +1,204 @@ +/** + * + * + * ***** 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. + * + * This is a new part of Blender. + * + * Contributor(s): Willian P. Germano. + * + * ***** END GPL/BL DUAL LICENSE BLOCK ***** + */ + +/* Most of this file comes from opy_nmesh.[ch] in the old bpython dir */ + +#include "Python.h" + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "MEM_guardedalloc.h" +#include "BIF_editmesh.h" /* vertexnormals_mesh() */ +#include "BDR_editface.h" /* make_tfaces */ +#include "BKE_mesh.h" +#include "BKE_main.h" +#include "BKE_global.h" +#include "BKE_library.h" +#include "BKE_displist.h" +#include "BKE_screen.h" +#include "BKE_object.h" +#include "BLI_blenlib.h" +#include "BIF_space.h" +#include "DNA_mesh_types.h" +#include "DNA_object_types.h" +#include "DNA_material_types.h" +#include "mydevice.h" + +#include "gen_utils.h" +#include "vector.h" +#include "constant.h" + +/* EXPP PyType Objects */ + +PyTypeObject NMesh_Type; +PyTypeObject NMFace_Type; +PyTypeObject NMVert_Type; +PyTypeObject NMCol_Type; + +/* Globals */ + +static PyObject *g_nmeshmodule = NULL; + +/* Type checking for EXPP PyTypes */ + +#define C_NMesh_Check(v) ((v)->ob_type == &NMesh_Type) +#define C_NMFace_Check(v) ((v)->ob_type == &NMFace_Type) +#define C_NMVert_Check(v) ((v)->ob_type == &NMVert_Type) +#define C_NMCol_Check(v) ((v)->ob_type == &NMCol_Type) + +static char M_NMesh_Col_doc[]= +"([r, g, b, a]) - Get a new mesh color\n\n\ +[r=255, g=255, b=255, a=255] Specify the color components"; + +static char M_NMesh_Face_doc[] = +"(vertexlist = None) - Get a new face, and pass optional vertex list"; + +static char NMFace_append_doc[] = +"(vert) - appends Vertex 'vert' to face vertex list"; + +static char M_NMesh_Vert_doc[] = +"([x, y, z]) - Get a new vertice\n\n\ +[x, y, z] Specify new coordinates"; + +static char NMesh_getSelectedFaces_doc[] = +"(flag = None) - returns list of selected Faces\n\ +If flag = 1, return indices instead"; + +static char NMesh_getActiveFace_doc[] = +"returns the index of the active face "; + +static char NMesh_hasVertexUV_doc[] = +"(flag = None) - returns 1 if Mesh has per vertex UVs ('Sticky')\n\ +The optional argument sets the Sticky flag"; + +static char NMesh_hasFaceUV_doc[] = +"(flag = None) - returns 1 if Mesh has textured faces\n\ +The optional argument sets the textured faces flag"; + +static char NMesh_hasVertexColours_doc[] = +"(flag = None) - returns 1 if Mesh has vertex colours.\n\ +The optional argument sets the vertex colour flag"; + +static char NMesh_update_doc[] = "updates the Mesh"; +/* +static char NMesh_asMesh_doc[] = "returns free Mesh datablock object from NMesh"; + +static char NMesh_link_doc[] = "(object) - Links NMesh data with Object 'object'"; +*/ +static char M_NMesh_New_doc[] = +"() - returns a new, empty NMesh mesh object\n"; + +static char M_NMesh_GetRaw_doc[] = +"([name]) - Get a raw mesh from Blender\n\n\ +[name] Name of the mesh to be returned\n\n\ +If name is not specified a new empty mesh is\n\ +returned, otherwise Blender returns an existing\n\ +mesh."; + +static char M_NMesh_GetRawFromObject_doc[] = +"(name) - Get the raw mesh used by a Blender object\n\n\ +(name) Name of the object to get the mesh from\n\n\ +This returns the mesh as used by the object, which\n\ +means it contains all deformations and modifications."; + +static char M_NMesh_PutRaw_doc[] = +"(mesh, [name, renormal]) - Return a raw mesh to Blender\n\n\ +(mesh) The NMesh object to store\n\ +[name] The mesh to replace\n\ +[renormal=1] Flag to control vertex normal recalculation\n\n\ +If the name of a mesh to replace is not given a new\n\ +object is created and returned."; + +/* the color, vertex, face and mesh types below have their own variables + * because they don't need to be linked to real Blender data -- e.g.: they + * can be created with .New() methods */ + +/* Typedefs for the new types */ + +typedef struct { + PyObject_HEAD + unsigned char r, g, b, a; + +} C_NMCol; /* an NMesh color: [r,g,b,a] */ + +typedef struct { + PyObject_VAR_HEAD + float co[3]; + float no[3]; + float uvco[3]; + int index; + +} C_NMVert; /* an NMesh vertex */ + +typedef struct { + PyObject_HEAD + PyObject *v; + PyObject *uv; + PyObject *col; + short mode; + short flag; + unsigned char transp; + PyObject *image; /* Image; was DataBlock *tpage */ + char mat_nr, smooth; + +} C_NMFace; /* an NMesh face */ + +typedef struct { + PyObject_HEAD + Mesh *mesh; + PyObject *name; + PyObject *materials; + PyObject *verts; + PyObject *faces; + int sel_face; /*@ XXX remove */ + char flags; + +#define NMESH_HASMCOL 1<<0 +#define NMESH_HASVERTUV 1<<1 +#define NMESH_HASFACEUV 1<<2 + +} C_NMesh; + +/* PROTOS */ +extern void test_object_materials(ID *id); /* declared in BKE_material.h */ +static int unlink_existingMeshData(Mesh *mesh); +static int convert_NMeshToMesh(Mesh *mesh, C_NMesh *nmesh); +void mesh_update(Mesh *mesh); +PyObject *new_NMesh(Mesh *oldmesh); +Mesh *Mesh_fromNMesh(C_NMesh *nmesh); +// XXX change NMesh *ob below to Object, void to Material +PyObject *NMesh_assignMaterials_toObject(C_NMesh *nmesh, Object *ob); +Material **nmesh_updateMaterials(C_NMesh *nmesh); +Material **newMaterialList_fromPyList (PyObject *list); +void mesh_update(Mesh *mesh); -- cgit v1.2.3