From 9b0a3ee9ce7c2edf93d84457420a46703eb9c82f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 30 Nov 2009 02:34:49 +0000 Subject: [PATCH] previous commit for retopo converted the strokes into a curve first, better to use the grease pencil data directly. renamed coordinates --> co, matching mesh verts --- release/scripts/modules/retopo.py | 54 ++++++++++---------- source/blender/makesrna/intern/rna_gpencil.c | 2 +- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/release/scripts/modules/retopo.py b/release/scripts/modules/retopo.py index 7d1c48a3f8f..89d1066da52 100644 --- a/release/scripts/modules/retopo.py +++ b/release/scripts/modules/retopo.py @@ -156,20 +156,20 @@ class Spline: hub.links.append(hub_prev) hub_prev.links.append(hub) hub_prev = hub + +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] + +def get_splines(gp): + for l in gp.layers: + if l.active: # XXX - should be layers.active + break - - -def get_points(spline): - points = spline.points - - if len(spline.bezier_points): - points = spline.bezier_points - - return [point.co.copy().resize3D() for point in points] - - -def get_splines(data): - return [Spline(get_points(spline)) for spline in data.splines] + 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 - - bpy.ops.gpencil.convert(type='PATH') - - scene = bpy.context.scene obj = bpy.context.object - if not obj: - raise Exception("no active object") - obj_new = calculate(scene, obj) + gp = None - # obj.selected = False - scene.objects.unlink(obj) + if obj: + gp = obj.grease_pencil + + if not gp: + gp = scene.grease_pencil + + if not gp: + raise Exception("no active grease pencil") + + obj_new = calculate(gp) scene.objects.active = obj_new obj_new.selected = True diff --git a/source/blender/makesrna/intern/rna_gpencil.c b/source/blender/makesrna/intern/rna_gpencil.c index 2a4ff112c3c..87900c943a9 100644 --- a/source/blender/makesrna/intern/rna_gpencil.c +++ b/source/blender/makesrna/intern/rna_gpencil.c @@ -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", "");