previous commit for retopo converted the strokes into a curve first, better to use...
authorCampbell Barton <ideasman42@gmail.com>
Mon, 30 Nov 2009 02:34:49 +0000 (02:34 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 30 Nov 2009 02:34:49 +0000 (02:34 +0000)
release/scripts/modules/retopo.py
source/blender/makesrna/intern/rna_gpencil.c

index 7d1c48a3f8f7be0eaa186e1acf582cecb50372ff..89d1066da5225905f5f214d1ce301c6cc75ab019 100644 (file)
@@ -156,20 +156,20 @@ class Spline:
             hub.links.append(hub_prev)
             hub_prev.links.append(hub)
             hub_prev = hub
-    
-
-
-def get_points(spline):
-    points = spline.points
 
-    if len(spline.bezier_points):
-        points = spline.bezier_points
+def get_points(stroke):
+    from Mathutils import Vector
+    # TODO - why isnt point.co a Vector?
+    return [Vector(tuple(point.co)) for point in stroke.points]
 
-    return [point.co.copy().resize3D() for point in points]
-
-
-def get_splines(data):
-    return [Spline(get_points(spline)) for spline in data.splines]
+def get_splines(gp):
+    for l in gp.layers:
+        if l.active: # XXX - should be layers.active
+            break
+    
+    frame = l.active_frame
+    
+    return [Spline(get_points(stroke)) for stroke in frame.strokes]
 
 def xsect_spline(sp_a, sp_b, _hubs):
     from Mathutils import LineIntersect
@@ -203,9 +203,8 @@ def xsect_spline(sp_a, sp_b, _hubs):
         pt_a_prev = pt_a
 
 
-def calculate(scene, obj):
-    data = obj.data
-    splines = get_splines(data)
+def calculate(gp):
+    splines = get_splines(gp)
     _hubs = {}
     
     for i, sp in enumerate(splines):
@@ -265,22 +264,21 @@ def calculate(scene, obj):
     
     
 def main():
-    # first convert gpencil
-    # *** evil!
     scene = bpy.context.scene
+    obj = bpy.context.object
     
-    bpy.ops.gpencil.convert(type='PATH')
-        
+    gp = None
     
-    scene = bpy.context.scene
-    obj = bpy.context.object
-    if not obj:
-        raise Exception("no active object")
+    if obj:
+        gp = obj.grease_pencil
     
-    obj_new = calculate(scene, obj)
+    if not gp:
+        gp = scene.grease_pencil
+
+    if not gp:
+        raise Exception("no active grease pencil")
     
-    # obj.selected = False
-    scene.objects.unlink(obj)
+    obj_new = calculate(gp)
     
     scene.objects.active = obj_new
     obj_new.selected = True
index 2a4ff112c3c79aa3cc08136eab6b0454987bd644..87900c943a98bc77c3ec2cff9de2127124a3b8a4 100644 (file)
@@ -77,7 +77,7 @@ static void rna_def_gpencil_stroke_point(BlenderRNA *brna)
        RNA_def_struct_sdna(srna, "bGPDspoint");
        RNA_def_struct_ui_text(srna, "Grease Pencil Stroke Point", "Data point for freehand stroke curve.");
        
-       prop= RNA_def_property(srna, "coordinates", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "co", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "x");
        RNA_def_property_array(prop, 3);
        RNA_def_property_ui_text(prop, "Coordinates", "");