[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13001] trunk/blender/source/blender: == Multires ==
Nicholas Bishop
nicholasbishop at gmail.com
Wed Dec 26 10:39:16 CET 2007
Revision: 13001
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13001
Author: nicholasbishop
Date: 2007-12-26 10:39:15 +0100 (Wed, 26 Dec 2007)
Log Message:
-----------
== Multires ==
Cleaned up bad level calls for multires; moved most of multires functions to blenkern, where they should have been in the first place. Functionality of the tool is unchanged.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_bad_level_calls.h
trunk/blender/source/blender/blenkernel/bad_level_call_stubs/stubs.c
trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
trunk/blender/source/blender/blenkernel/intern/mesh.c
trunk/blender/source/blender/blenloader/intern/readfile.c
trunk/blender/source/blender/include/multires.h
trunk/blender/source/blender/python/api2_2x/Mesh.c
trunk/blender/source/blender/src/buttons_editing.c
trunk/blender/source/blender/src/editface.c
trunk/blender/source/blender/src/editmesh.c
trunk/blender/source/blender/src/editobject.c
trunk/blender/source/blender/src/multires.c
trunk/blender/source/blender/src/space.c
trunk/blender/source/blender/src/vpaint.c
Added Paths:
-----------
trunk/blender/source/blender/blenkernel/BKE_multires.h
trunk/blender/source/blender/blenkernel/intern/multires-firstlevel.c
trunk/blender/source/blender/blenkernel/intern/multires.c
Removed Paths:
-------------
trunk/blender/source/blender/src/multires-firstlevel.c
Modified: trunk/blender/source/blender/blenkernel/BKE_bad_level_calls.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_bad_level_calls.h 2007-12-26 03:06:59 UTC (rev 13000)
+++ trunk/blender/source/blender/blenkernel/BKE_bad_level_calls.h 2007-12-26 09:39:15 UTC (rev 13001)
@@ -207,15 +207,6 @@
void post_layer_destroy(struct VLayer *vlayer);
void post_server_add(void);
-/* multires.c */
-struct Multires;
-struct MultiresLevel;
-struct MultiresLevel *multires_level_n(struct Multires *mr, int n);
-void multires_free(struct Multires *mr);
-void multires_set_level(struct Object *ob, struct Mesh *me, const int render);
-void multires_update_levels(struct Mesh *me, const int render);
-void multires_calc_level_maps(struct MultiresLevel *lvl);
-struct Multires *multires_copy(struct Multires *orig);
/* sculptmode.c */
struct SculptData;
void sculpt_reset_curve(struct SculptData *sd);
Added: trunk/blender/source/blender/blenkernel/BKE_multires.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_multires.h (rev 0)
+++ trunk/blender/source/blender/blenkernel/BKE_multires.h 2007-12-26 09:39:15 UTC (rev 13001)
@@ -0,0 +1,67 @@
+/*
+ * $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) 2007 by Nicholas Bishop
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+struct CustomData;
+struct EditMesh;
+struct Multires;
+struct MultiresLevel;
+struct Mesh;
+struct Object;
+
+/* Level access */
+struct MultiresLevel *current_level(struct Multires *mr);
+struct MultiresLevel *multires_level_n(struct Multires *mr, int n);
+
+/* Level control */
+void multires_add_level(struct Object *ob, struct Mesh *me, const char subdiv_type);
+void multires_set_level(struct Object *ob, struct Mesh *me, const int render);
+void multires_free_level(struct MultiresLevel *lvl);
+
+void multires_edge_level_update(struct Object *ob, struct Mesh *me);
+
+void multires_free(struct Multires *mr);
+struct Multires *multires_copy(struct Multires *orig);
+void multires_create(struct Mesh *me);
+
+/* CustomData */
+void multires_delete_layer(struct Mesh *me, struct CustomData *cd, const int type, int n);
+void multires_add_layer(struct Mesh *me, struct CustomData *cd, const int type, const int n);
+void multires_del_lower_customdata(struct Multires *mr, struct MultiresLevel *cr_lvl);
+/* After adding or removing vcolor layers, run this */
+void multires_load_cols(struct Mesh *me);
+
+/* Private (used in multires-firstlevel.c) */
+void multires_level_to_mesh(struct Object *ob, struct Mesh *me, const int render);
+void multires_update_levels(struct Mesh *me, const int render);
+void multires_update_first_level(struct Mesh *me, struct EditMesh *em);
+void multires_update_customdata(struct MultiresLevel *lvl1, struct CustomData *src,
+ struct CustomData *dst, const int type);
+void multires_customdata_to_mesh(struct Mesh *me, struct EditMesh *em,
+ struct MultiresLevel *lvl, struct CustomData *src,
+ struct CustomData *dst, const int type);
Modified: trunk/blender/source/blender/blenkernel/bad_level_call_stubs/stubs.c
===================================================================
--- trunk/blender/source/blender/blenkernel/bad_level_call_stubs/stubs.c 2007-12-26 03:06:59 UTC (rev 13000)
+++ trunk/blender/source/blender/blenkernel/bad_level_call_stubs/stubs.c 2007-12-26 09:39:15 UTC (rev 13001)
@@ -310,13 +310,7 @@
void post_layer_create(struct VLayer *vlayer) {}
void post_layer_destroy(struct VLayer *vlayer) {}
void post_server_add(void) {}
- /* Multires/sculpt stubs */
-struct MultiresLevel *multires_level_n(struct Multires *mr, int n) {return NULL;}
-void multires_free(struct Multires *mr) {}
-void multires_set_level(struct Object *ob, struct Mesh *me, const int render) {}
-void multires_update_levels(struct Mesh *me, const int render) {}
-void multires_calc_level_maps(struct MultiresLevel *lvl) {}
-struct Multires *multires_copy(struct Multires *orig) {return NULL;}
+ /* sculpt stubs */
void sculpt_reset_curve(struct SculptData *sd) {}
void sculptmode_init(struct Scene *sce) {}
void sculptmode_free_all(struct Scene *sce) {}
Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c 2007-12-26 03:06:59 UTC (rev 13000)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c 2007-12-26 09:39:15 UTC (rev 13001)
@@ -74,6 +74,7 @@
#include "BKE_material.h"
#include "BKE_modifier.h"
#include "BKE_mesh.h"
+#include "BKE_multires.h"
#include "BKE_object.h"
#include "BKE_subsurf.h"
#include "BKE_texture.h"
@@ -87,8 +88,6 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
-#include "multires.h"
-
// headers for fluidsim bobj meshes
#include <stdlib.h>
#include "LBM_fluidsim.h"
Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c 2007-12-26 03:06:59 UTC (rev 13000)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c 2007-12-26 09:39:15 UTC (rev 13001)
@@ -63,6 +63,7 @@
#include "BKE_DerivedMesh.h"
#include "BKE_global.h"
#include "BKE_mesh.h"
+#include "BKE_multires.h"
#include "BKE_subsurf.h"
#include "BKE_displist.h"
#include "BKE_library.h"
@@ -83,8 +84,6 @@
#include "BLI_editVert.h"
#include "BLI_arithb.h"
-#include "multires.h"
-
int update_realtime_texture(MTFace *tface, double time)
{
Image *ima;
Copied: trunk/blender/source/blender/blenkernel/intern/multires-firstlevel.c (from rev 12999, trunk/blender/source/blender/src/multires-firstlevel.c)
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/multires-firstlevel.c (rev 0)
+++ trunk/blender/source/blender/blenkernel/intern/multires-firstlevel.c 2007-12-26 09:39:15 UTC (rev 13001)
@@ -0,0 +1,409 @@
+/*
+ * $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) 2006 by Nicholas Bishop
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ *
+ * Deals with the first-level data in multires (edge flags, weights, and UVs)
+ *
+ * multires.h
+ *
+ */
+
+#include "DNA_customdata_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+
+#include "BIF_editmesh.h"
+
+#include "BKE_customdata.h"
+#include "BKE_global.h"
+#include "BKE_mesh.h"
+#include "BKE_multires.h"
+
+#include "BLI_editVert.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "blendef.h"
+
+#include <string.h>
+
+MDeformVert *subdivide_dverts(MDeformVert *src, MultiresLevel *lvl);
+MTFace *subdivide_mtfaces(MTFace *src, MultiresLevel *lvl);
+void multires_update_edge_flags(Mesh *me, EditMesh *em);
+void eed_to_medge_flag(EditEdge *eed, short *flag, char *crease);
+
+/*********** Generic ***********/
+
+CustomDataMask cdmask(const int type)
+{
+ if(type == CD_MDEFORMVERT)
+ return CD_MASK_MDEFORMVERT;
+ else if(type == CD_MTFACE)
+ return CD_MASK_MTFACE;
+ return -1;
+}
+
+char type_ok(const int type)
+{
+ return (type == CD_MDEFORMVERT) || (type == CD_MTFACE);
+}
+
+/* Copy vdata or fdata from Mesh or EditMesh to Multires. */
+void multires_update_customdata(MultiresLevel *lvl1, CustomData *src, CustomData *dst, const int type)
+{
+ if(src && dst && type_ok(type)) {
+ const int tot= (type == CD_MDEFORMVERT ? lvl1->totvert : lvl1->totface);
+ int i;
+
+ CustomData_free(dst, tot);
+
+ if(CustomData_has_layer(src, type)) {
+ if(G.obedit) {
+ EditVert *eve= G.editMesh->verts.first;
+ EditFace *efa= G.editMesh->faces.first;
+ CustomData_copy(src, dst, cdmask(type), CD_CALLOC, tot);
+ for(i=0; i<tot; ++i) {
+ if(type == CD_MDEFORMVERT) {
+ CustomData_from_em_block(&G.editMesh->vdata, dst, eve->data, i);
+ eve= eve->next;
+ }
+ else if(type == CD_MTFACE) {
+ CustomData_from_em_block(&G.editMesh->fdata, dst, efa->data, i);
+ efa= efa->next;
+ }
+ }
+ }
+ else
+ CustomData_copy(src, dst, cdmask(type), CD_DUPLICATE, tot);
+ }
+ }
+}
+
+/* Uses subdivide_dverts or subdivide_mtfaces to subdivide src to match lvl_end. Does not free src. */
+void *subdivide_customdata_to_level(void *src, MultiresLevel *lvl_start,
+ MultiresLevel *lvl_end, const int type)
+{
+ if(src && lvl_start && lvl_end && type_ok(type)) {
+ MultiresLevel *lvl;
+ void *cr_data= NULL, *pr_data= NULL;
+
+ pr_data= src;
+ for(lvl= lvl_start; lvl && lvl != lvl_end; lvl= lvl->next) {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list