[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12838] trunk/blender: Merge from Harmonic Skeleton branch

Martin Poirier theeth at yahoo.com
Mon Dec 10 22:14:19 CET 2007


Revision: 12838
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12838
Author:   theeth
Date:     2007-12-10 22:14:19 +0100 (Mon, 10 Dec 2007)

Log Message:
-----------
Merge from Harmonic Skeleton branch

This code adds a basic and simple skeleton generator.

Examples and links are in the wiki, docs will come eventually: http://wiki.blender.org/index.php/User:Theeth/skeletor

In a nutshell, select a vertex at the top of the head and press "Generate Skeleton". UI Panel is in the Editing buttons in Edit Mode, tooltips and semi-useful.

Modified Paths:
--------------
    trunk/blender/projectfiles_vc7/blender/blender.sln
    trunk/blender/projectfiles_vc7/blender/src/BL_src.vcproj
    trunk/blender/source/blender/blenlib/BLI_arithb.h
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/include/BIF_editarmature.h
    trunk/blender/source/blender/include/butspace.h
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/src/buttons_editing.c
    trunk/blender/source/blender/src/editarmature.c

Added Paths:
-----------
    trunk/blender/source/blender/include/reeb.h
    trunk/blender/source/blender/src/reeb.c

Modified: trunk/blender/projectfiles_vc7/blender/blender.sln
===================================================================
--- trunk/blender/projectfiles_vc7/blender/blender.sln	2007-12-10 21:04:48 UTC (rev 12837)
+++ trunk/blender/projectfiles_vc7/blender/blender.sln	2007-12-10 21:14:19 UTC (rev 12838)
@@ -248,8 +248,6 @@
 		Debug = Debug
 		Release = Release
 	EndGlobalSection
-	GlobalSection(ProjectDependencies) = postSolution
-	EndGlobalSection
 	GlobalSection(ProjectConfiguration) = postSolution
 		{F78B7FC9-DE32-465E-9F26-BB0B6B7A2EAF}.3D Plugin Debug.ActiveCfg = Blender Debug|Win32
 		{F78B7FC9-DE32-465E-9F26-BB0B6B7A2EAF}.3D Plugin Release.ActiveCfg = Blender Release|Win32

Modified: trunk/blender/projectfiles_vc7/blender/src/BL_src.vcproj
===================================================================
--- trunk/blender/projectfiles_vc7/blender/src/BL_src.vcproj	2007-12-10 21:04:48 UTC (rev 12837)
+++ trunk/blender/projectfiles_vc7/blender/src/BL_src.vcproj	2007-12-10 21:14:19 UTC (rev 12838)
@@ -476,6 +476,9 @@
 				RelativePath="..\..\..\source\blender\src\prvicons.c">
 			</File>
 			<File
+				RelativePath="..\..\..\source\blender\src\reeb.c">
+			</File>
+			<File
 				RelativePath="..\..\..\source\blender\src\renderwin.c">
 			</File>
 			<File
@@ -888,6 +891,9 @@
 				RelativePath="..\..\..\source\blender\include\playanim_ext.h">
 			</File>
 			<File
+				RelativePath="..\..\..\source\blender\include\reeb.h">
+			</File>
+			<File
 				RelativePath="..\..\..\source\blender\include\transform.h">
 			</File>
 			<File

Modified: trunk/blender/source/blender/blenlib/BLI_arithb.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_arithb.h	2007-12-10 21:04:48 UTC (rev 12837)
+++ trunk/blender/source/blender/blenlib/BLI_arithb.h	2007-12-10 21:14:19 UTC (rev 12838)
@@ -54,6 +54,10 @@
 #define M_SQRT1_2	0.70710678118654752440
 #endif
 
+#ifdef WIN32
+    #define isnan(n) _isnan(n)
+#endif
+
 #define MAT4_UNITY {{ 1.0, 0.0, 0.0, 0.0},\
 					{ 0.0, 1.0, 0.0, 0.0},\
 					{ 0.0, 0.0, 1.0, 0.0},\

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2007-12-10 21:04:48 UTC (rev 12837)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2007-12-10 21:14:19 UTC (rev 12838)
@@ -6652,7 +6652,7 @@
 				else
 					wrld->ao_samp_method = WO_AOSAMP_HAMMERSLEY;
 				
-				wrld->ao_adapt_thresh = 0.005;
+				wrld->ao_adapt_thresh = 0.005f;
 			}
 			
 			for(la=main->lamp.first; la; la= la->id.next) {
@@ -6666,6 +6666,7 @@
 		}
 	}
 	if(main->versionfile <= 245) {
+		Scene *sce;
 		bScreen *sc;
 		Object *ob;
 		Image *ima;
@@ -6838,6 +6839,27 @@
 		for(part=main->particle.first; part; part=part->id.next)
 			if(part->ren_child_nbr==0)
 				part->ren_child_nbr= part->child_nbr;
+		if (main->versionfile < 245 || main->subversionfile < 11)
+		{
+			/* initialize skeleton generation toolsettings */
+			for(sce=main->scene.first; sce; sce = sce->id.next)
+			{
+				sce->toolsettings->skgen_resolution = 50;
+				sce->toolsettings->skgen_threshold_internal 	= 0.01f;
+				sce->toolsettings->skgen_threshold_external 	= 0.01f;
+				sce->toolsettings->skgen_angle_limit	 		= 45.0f;
+				sce->toolsettings->skgen_length_ratio			= 1.3f;
+				sce->toolsettings->skgen_length_limit			= 1.5f;
+				sce->toolsettings->skgen_correlation_limit		= 0.98f;
+				sce->toolsettings->skgen_symmetry_limit			= 0.1f;
+				sce->toolsettings->skgen_postpro = SKGEN_SMOOTH;
+				sce->toolsettings->skgen_postpro_passes = 1;
+				sce->toolsettings->skgen_options = SKGEN_FILTER_INTERNAL|SKGEN_FILTER_EXTERNAL|SKGEN_SUB_CORRELATION;
+				sce->toolsettings->skgen_subdivisions[0] = SKGEN_SUB_CORRELATION;
+				sce->toolsettings->skgen_subdivisions[1] = SKGEN_SUB_LENGTH;
+				sce->toolsettings->skgen_subdivisions[2] = SKGEN_SUB_ANGLE;
+			}
+		}
 	}
 
 	if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 2)) {

Modified: trunk/blender/source/blender/include/BIF_editarmature.h
===================================================================
--- trunk/blender/source/blender/include/BIF_editarmature.h	2007-12-10 21:04:48 UTC (rev 12837)
+++ trunk/blender/source/blender/include/BIF_editarmature.h	2007-12-10 21:14:19 UTC (rev 12838)
@@ -101,6 +101,8 @@
 
 int		do_pose_selectbuffer(struct Base *base, unsigned int *buffer, short hits);
 
+void generateSkeleton(void);
+
 void	mouse_armature(void);
 void	remake_editArmature(void);
 void	selectconnected_armature(void);
@@ -117,8 +119,8 @@
 void	hide_unselected_pose_bones(void);
 void	show_all_pose_bones(void);
 
-int		bone_looper(Object *ob, struct Bone *bone, void *data,
-				int (*bone_func)(Object *, struct Bone *, void *));
+int		bone_looper(struct Object *ob, struct Bone *bone, void *data,
+				int (*bone_func)(struct Object *, struct Bone *, void *));
 
 void	undo_push_armature(char *name);
 void	armature_bone_rename(struct bArmature *arm, char *oldname, char *newname);

Modified: trunk/blender/source/blender/include/butspace.h
===================================================================
--- trunk/blender/source/blender/include/butspace.h	2007-12-10 21:04:48 UTC (rev 12837)
+++ trunk/blender/source/blender/include/butspace.h	2007-12-10 21:14:19 UTC (rev 12838)
@@ -420,6 +420,8 @@
 #define B_SETTFACE_RND		2082
 #define B_SETMCOL_RND		2083
 
+#define B_GEN_SKELETON		2090
+
 /* *********************** */
 #define B_VGROUPBUTS		2100
 

Copied: trunk/blender/source/blender/include/reeb.h (from rev 12836, branches/harmonic-skeleton/blender/source/blender/include/reeb.h)
===================================================================
--- trunk/blender/source/blender/include/reeb.h	                        (rev 0)
+++ trunk/blender/source/blender/include/reeb.h	2007-12-10 21:14:19 UTC (rev 12838)
@@ -0,0 +1,127 @@
+/**
+ * $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. 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.
+ *
+ * Contributor(s): Martin Poirier
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+ 
+#ifndef REEB_H_
+#define REEB_H_
+
+#include "DNA_listBase.h"
+
+struct EdgeHash;
+struct ReebArc;
+struct ReebEdge;
+struct ReebNode;
+
+typedef struct ReebGraph {
+	ListBase arcs;
+	ListBase nodes;
+	int totnodes;
+	struct EdgeHash *emap;
+} ReebGraph;
+
+typedef struct EmbedBucket {
+	float val;
+	int	  nv;
+	float p[3];
+} EmbedBucket;
+
+typedef struct ReebNode {
+	struct ReebNode *next, *prev;
+	struct ReebArc **arcs;
+	int index;
+	int degree;
+	float weight;
+	float p[3];
+	int flags;
+} ReebNode;
+
+typedef struct ReebEdge {
+	struct ReebEdge *next, *prev;
+	struct ReebArc  *arc;
+	struct ReebNode *v1, *v2;
+	struct ReebEdge *nextEdge;
+} ReebEdge;
+
+typedef struct ReebArc {
+	struct ReebArc *next, *prev;
+	ListBase edges;
+	struct ReebNode *v1, *v2;
+	struct EmbedBucket *buckets;
+	int	bcount;
+	int flags;
+} ReebArc;
+
+typedef struct ReebArcIterator {
+	struct ReebArc	*arc;
+	int index;
+	int start;
+	int end;
+	int stride;
+} ReebArcIterator;
+
+struct EditMesh;
+
+int weightToHarmonic(struct EditMesh *em);
+int weightFromDistance(struct EditMesh *em);
+int weightFromLoc(struct EditMesh *me, int axis);
+void weightToVCol(struct EditMesh *em);
+void renormalizeWeight(struct EditMesh *em, float newmax);
+
+ReebGraph * generateReebGraph(struct EditMesh *me, int subdivisions);
+void freeGraph(ReebGraph *rg);
+void exportGraph(ReebGraph *rg, int count);
+
+#define OTHER_NODE(arc, node) ((arc->v1 == node) ? arc->v2 : arc->v1)
+
+void initArcIterator(struct ReebArcIterator *iter, struct ReebArc *arc, struct ReebNode *head);
+void initArcIterator2(struct ReebArcIterator *iter, struct ReebArc *arc, int start, int end);
+struct EmbedBucket * nextBucket(struct ReebArcIterator *iter);
+
+/* Filtering */
+void filterNullReebGraph(ReebGraph *rg);
+int filterExternalReebGraph(ReebGraph *rg, float threshold);
+int filterInternalReebGraph(ReebGraph *rg, float threshold);
+
+/* Post-Build processing */
+void repositionNodes(ReebGraph *rg);
+void postprocessGraph(ReebGraph *rg, char mode);
+void removeNormalNodes(ReebGraph *rg);
+
+/* Graph processing */
+void buildAdjacencyList(ReebGraph *rg);
+
+void sortNodes(ReebGraph *rg);
+void sortArcs(ReebGraph *rg);
+
+int subtreeDepth(ReebNode *node, ReebArc *rootArc);
+int countConnectedArcs(ReebGraph *rg, ReebNode *node);
+int hasAdjacencyList(ReebGraph *rg); 
+int	isGraphCyclic(ReebGraph *rg);
+
+/* Sanity check */
+void verifyBuckets(ReebGraph *rg);
+
+#endif /*REEB_H_*/

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h	2007-12-10 21:04:48 UTC (rev 12837)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h	2007-12-10 21:14:19 UTC (rev 12838)
@@ -364,7 +364,7 @@
 	short uvcalc_flag;
 
 	short pad2;
-	
+
 	/* Image Paint (8 byte aligned please!) */
 	struct ImagePaintSettings imapaint;
 
@@ -385,7 +385,21 @@
 	/* Multires */
 	char multires_subdiv_type;
 	
-	char  pad4[2];
+	/* Skeleton generation */
+	short skgen_resolution;
+	float skgen_threshold_internal;
+	float skgen_threshold_external;
+	float skgen_length_ratio;
+	float skgen_length_limit;
+	float skgen_angle_limit;
+	float skgen_correlation_limit;
+	float skgen_symmetry_limit;
+	short skgen_options;
+	char  skgen_postpro;
+	char  skgen_postpro_passes;
+	char  skgen_subdivisions[3];
+	
+	char pad3[5];
 } ToolSettings;
 
 /* Used by all brushes to store their properties, which can be directly set

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list