[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