[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12508] branches/harmonic-skeleton/blender : Initial commit for Harmonic Skeleton generation.

Martin Poirier theeth at yahoo.com
Wed Nov 7 01:28:46 CET 2007


Revision: 12508
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12508
Author:   theeth
Date:     2007-11-07 01:28:45 +0100 (Wed, 07 Nov 2007)

Log Message:
-----------
Initial commit for Harmonic Skeleton generation.

This is very much a work in progress commit to allow me to work outside of home.

While it does somewhat work, I wouldn't recommend anyone to use it.

Modified Paths:
--------------
    branches/harmonic-skeleton/blender/source/blender/blenkernel/BKE_blender.h
    branches/harmonic-skeleton/blender/source/blender/blenlib/intern/util.c
    branches/harmonic-skeleton/blender/source/blender/blenloader/intern/readfile.c
    branches/harmonic-skeleton/blender/source/blender/include/BIF_editarmature.h
    branches/harmonic-skeleton/blender/source/blender/include/BSE_edit.h
    branches/harmonic-skeleton/blender/source/blender/include/butspace.h
    branches/harmonic-skeleton/blender/source/blender/makesdna/DNA_scene_types.h
    branches/harmonic-skeleton/blender/source/blender/src/buttons_editing.c
    branches/harmonic-skeleton/blender/source/blender/src/editarmature.c

Added Paths:
-----------
    branches/harmonic-skeleton/blender/release/scripts/reeb.py
    branches/harmonic-skeleton/blender/source/blender/include/reeb.h
    branches/harmonic-skeleton/blender/source/blender/src/reeb.c

Added: branches/harmonic-skeleton/blender/release/scripts/reeb.py
===================================================================
--- branches/harmonic-skeleton/blender/release/scripts/reeb.py	                        (rev 0)
+++ branches/harmonic-skeleton/blender/release/scripts/reeb.py	2007-11-07 00:28:45 UTC (rev 12508)
@@ -0,0 +1,168 @@
+#!BPY
+ 
+"""
+Name: 'Reeb graph import'
+Blender: 245
+Group: 'Import'
+Tooltip: 'Imports a reeb graph saved after skeleton generation'
+"""
+import Blender
+
+def name(count):
+	if count == -1:
+		return ""
+	else:
+		return "%05" % count
+
+def importGraph(count):
+	me = Blender.Mesh.New("graph%s" % name(count))
+	
+	f = open("test%s.txt" % name(count), "r")
+	
+	verts = []
+	edges = []
+	faces = []
+	
+	i = 0
+	first = False
+	
+	SIZE = 0.3
+	WITH_NODE = False
+	
+	def addNode(v, s, verts, faces):
+		if WITH_NODE:
+			v1 = [v[0], v[1], v[2] + s]
+			i1 = len(verts)
+			verts.append(v1)
+			v2 = [v[0], v[1] + 0.959 * s, v[2] - 0.283 * s]
+			i2 = len(verts)
+			verts.append(v2)
+			v3 = [v[0] - 0.830 * s, v[1] - 0.479 * s, v[2] - 0.283 * s]
+			i3 = len(verts)
+			verts.append(v3)
+			v4 = [v[0] + 0.830 * s, v[1] - 0.479 * s, v[2] - 0.283 * s]
+			i4 = len(verts)
+			verts.append(v4)
+			
+			faces.append([i1,i2,i3])
+			faces.append([i1,i3,i4])
+			faces.append([i2,i3,i4])
+			faces.append([i1,i2,i4])
+			
+			return 4
+		else:
+			return 0
+		
+	for line in f:
+		data = line.strip().split(" ")
+		if data[0] == "v1":
+			v = [float(x) for x in data[-3:]]
+			i += addNode(v, SIZE, verts, faces)
+			verts.append(v)
+			i += 1
+		elif data[0] == "v2":
+			pass
+			v = [float(x) for x in data[-3:]]
+			verts.append(v)
+			edges.append((i-1, i))
+			i += 1
+			i += addNode(v, SIZE, verts, faces)
+		elif data[0] == "b":
+			verts.append([float(x) for x in data[-3:]])
+			edges.append((i-1, i))
+			i += 1
+		
+	
+	me.verts.extend(verts)
+	me.edges.extend(edges)
+	me.faces.extend(faces)
+	
+	scn = Blender.Scene.GetCurrent()
+	
+	ob = scn.objects.new(me, "graph%s" % name(count))
+	
+
+#for i in range(16):
+#	importGraph(i)
+
+importGraph(-1)
+import Blender
+
+def name(count):
+	if count == -1:
+		return ""
+	else:
+		return "%05" % count
+
+def importGraph(count):
+	me = Blender.Mesh.New("graph%s" % name(count))
+	
+	f = open("test%s.txt" % name(count), "r")
+	
+	verts = []
+	edges = []
+	faces = []
+	
+	i = 0
+	first = False
+	
+	SIZE = 0.3
+	WITH_NODE = False
+	
+	def addNode(v, s, verts, faces):
+		if WITH_NODE:
+			v1 = [v[0], v[1], v[2] + s]
+			i1 = len(verts)
+			verts.append(v1)
+			v2 = [v[0], v[1] + 0.959 * s, v[2] - 0.283 * s]
+			i2 = len(verts)
+			verts.append(v2)
+			v3 = [v[0] - 0.830 * s, v[1] - 0.479 * s, v[2] - 0.283 * s]
+			i3 = len(verts)
+			verts.append(v3)
+			v4 = [v[0] + 0.830 * s, v[1] - 0.479 * s, v[2] - 0.283 * s]
+			i4 = len(verts)
+			verts.append(v4)
+			
+			faces.append([i1,i2,i3])
+			faces.append([i1,i3,i4])
+			faces.append([i2,i3,i4])
+			faces.append([i1,i2,i4])
+			
+			return 4
+		else:
+			return 0
+		
+	for line in f:
+		data = line.strip().split(" ")
+		if data[0] == "v1":
+			v = [float(x) for x in data[-3:]]
+			i += addNode(v, SIZE, verts, faces)
+			verts.append(v)
+			i += 1
+		elif data[0] == "v2":
+			pass
+			v = [float(x) for x in data[-3:]]
+			verts.append(v)
+			edges.append((i-1, i))
+			i += 1
+			i += addNode(v, SIZE, verts, faces)
+		elif data[0] == "b":
+			verts.append([float(x) for x in data[-3:]])
+			edges.append((i-1, i))
+			i += 1
+		
+	
+	me.verts.extend(verts)
+	me.edges.extend(edges)
+	me.faces.extend(faces)
+	
+	scn = Blender.Scene.GetCurrent()
+	
+	ob = scn.objects.new(me, "graph%s" % name(count))
+	
+
+#for i in range(16):
+#	importGraph(i)
+
+importGraph(-1)
\ No newline at end of file

Modified: branches/harmonic-skeleton/blender/source/blender/blenkernel/BKE_blender.h
===================================================================
--- branches/harmonic-skeleton/blender/source/blender/blenkernel/BKE_blender.h	2007-11-06 22:29:20 UTC (rev 12507)
+++ branches/harmonic-skeleton/blender/source/blender/blenkernel/BKE_blender.h	2007-11-07 00:28:45 UTC (rev 12508)
@@ -44,7 +44,7 @@
 struct MemFile;
 
 #define BLENDER_VERSION			245
-#define BLENDER_SUBVERSION		7
+#define BLENDER_SUBVERSION		8
 
 #define BLENDER_MINVERSION		240
 #define BLENDER_MINSUBVERSION	0

Modified: branches/harmonic-skeleton/blender/source/blender/blenlib/intern/util.c
===================================================================
--- branches/harmonic-skeleton/blender/source/blender/blenlib/intern/util.c	2007-11-06 22:29:20 UTC (rev 12507)
+++ branches/harmonic-skeleton/blender/source/blender/blenlib/intern/util.c	2007-11-07 00:28:45 UTC (rev 12508)
@@ -324,9 +324,10 @@
 
 	if (listbase->first != listbase->last)
 	{
-		for( previous = listbase->first, current = previous->next; current; previous = current, current = next )
+		for( previous = listbase->first, current = previous->next; current; current = next )
 		{
 			next = current->next;
+			previous = current->prev;
 			
 			BLI_remlink(listbase, current);
 			
@@ -335,14 +336,7 @@
 				previous = previous->prev;
 			}
 			
-			if (previous == NULL)
-			{
-				BLI_addhead(listbase, current);
-			}
-			else
-			{
-				BLI_insertlinkafter(listbase, previous, current);
-			}
+			BLI_insertlinkafter(listbase, previous, current);
 		}
 	}
 }

Modified: branches/harmonic-skeleton/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/harmonic-skeleton/blender/source/blender/blenloader/intern/readfile.c	2007-11-06 22:29:20 UTC (rev 12507)
+++ branches/harmonic-skeleton/blender/source/blender/blenloader/intern/readfile.c	2007-11-07 00:28:45 UTC (rev 12508)
@@ -6599,6 +6599,7 @@
 		}
 	}
 	if(main->versionfile <= 245) {
+		Scene *sce;
 		bScreen *sc;
 		Object *ob;
 		Image *ima;
@@ -6767,6 +6768,19 @@
 			}
 		}
 		
+		if (main->versionfile < 245 || main->subversionfile < 8)
+		{
+			/* 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_threshold_angle 		= 45.0f;
+				sce->toolsettings->skgen_threshold_length		= 1.3f;
+				sce->toolsettings->skgen_options = SKGEN_FILTER_INTERNAL|SKGEN_FILTER_EXTERNAL|SKGEN_REPOSITION|SKGEN_CUT_LENGTH|SKGEN_CUT_ANGLE;
+			}
+		}
 	}
 
 	if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 2)) {

Modified: branches/harmonic-skeleton/blender/source/blender/include/BIF_editarmature.h
===================================================================
--- branches/harmonic-skeleton/blender/source/blender/include/BIF_editarmature.h	2007-11-06 22:29:20 UTC (rev 12507)
+++ branches/harmonic-skeleton/blender/source/blender/include/BIF_editarmature.h	2007-11-07 00:28:45 UTC (rev 12508)
@@ -37,6 +37,7 @@
 struct Bone;
 struct bArmature;
 struct ListBase;
+struct ReebGraph;
 
 typedef struct EditBone
 {
@@ -78,6 +79,8 @@
 void	apply_rot_armature (struct Object *ob, float mat[3][3]);
 void 	docenter_armature (struct Object *ob, int centermode);
 
+void generateSkeletonFromReebGraph(struct ReebGraph *rg);
+
 void	clear_armature(struct Object *ob, char mode);
 
 void	delete_armature(void);
@@ -117,8 +120,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);
@@ -140,3 +143,4 @@
 #endif
 
 
+

Modified: branches/harmonic-skeleton/blender/source/blender/include/BSE_edit.h
===================================================================
--- branches/harmonic-skeleton/blender/source/blender/include/BSE_edit.h	2007-11-06 22:29:20 UTC (rev 12507)
+++ branches/harmonic-skeleton/blender/source/blender/include/BSE_edit.h	2007-11-07 00:28:45 UTC (rev 12508)
@@ -51,5 +51,8 @@
 void snap_curs_to_sel(void);
 void snap_to_center(void);
 
+void generateSkeleton(void);
+
 #endif /*  BSE_EDIT_H */
 
+

Modified: branches/harmonic-skeleton/blender/source/blender/include/butspace.h
===================================================================
--- branches/harmonic-skeleton/blender/source/blender/include/butspace.h	2007-11-06 22:29:20 UTC (rev 12507)
+++ branches/harmonic-skeleton/blender/source/blender/include/butspace.h	2007-11-07 00:28:45 UTC (rev 12508)
@@ -413,6 +413,8 @@
 #define B_SETTFACE_RND		2082
 #define B_SETMCOL_RND		2083
 
+#define B_GEN_SKELETON		2090
+
 /* *********************** */
 #define B_VGROUPBUTS		2100
 
@@ -721,3 +723,4 @@
 
 #endif
 
+

Added: branches/harmonic-skeleton/blender/source/blender/include/reeb.h
===================================================================
--- branches/harmonic-skeleton/blender/source/blender/include/reeb.h	                        (rev 0)
+++ branches/harmonic-skeleton/blender/source/blender/include/reeb.h	2007-11-07 00:28:45 UTC (rev 12508)
@@ -0,0 +1,84 @@
+/**
+ * $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 {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list