#
# inspect_beziers - examine bezier polygons
# Tamito KAJIYAMA <26 March 2000>
# Copyright (C) 2000 by Tamito KAJIYAMA
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library 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
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
from Sketch import Bezier,Line,ContAngle,ContSmooth,ContSymmetrical
from Tkinter import *
class Viewer(Toplevel):
type_names = {Line: "Line", Bezier: "Bezier"}
cont_names = {ContAngle: "ContAngle",
ContSmooth: "ContSmooth",
ContSymmetrical: "ContSymmetrical"}
def __init__(self, context):
Toplevel.__init__(self, context.application.root)
self.title("Inspect Beziers")
self.document = context.document
frame = Frame(self)
frame.pack(side=BOTTOM, fill=X)
button = Button(frame, text="Update", command=self.update)
button.pack(side=LEFT)
button = Button(frame, text="Dismiss", command=self.destroy)
button.pack(side=RIGHT)
sb = Scrollbar(self)
sb.pack(side=RIGHT, fill=Y)
self.text = Text(self, width=85, height=25, yscrollcommand=sb.set)
self.text.pack(side=LEFT, fill=BOTH, expand=1)
sb.config(command=self.text.yview)
self.update()
def update(self):
self.text.delete("1.0", END)
n = 0
for obj in self.document.SelectedObjects():
if not obj.is_Bezier:
continue
self.text.insert(END, "Bezier #%d\n" % (n + 1))
paths = obj.Paths()
for i in range(len(paths)):
self.text.insert(END, " path #%d\n" % (i + 1))
for j in range(paths[i].len):
s = apply(self.format_segment, paths[i].Segment(j))
self.text.insert(END, " #%d %s\n" % ((j + 1), s))
self.text.insert(END, "\n")
n = n + 1
if n == 0:
self.text.insert(END, "No bezier polygons selected.")
def format_segment(self, type, controls, point, cont):
if type == Line:
controls = ""
elif controls:
controls = " ((%.2f, %.2f), (%.2f, %.2f))" % \
(controls[0].x, controls[0].y,
controls[1].x, controls[1].y)
else:
controls = " ()"
point = " (%.2f, %.2f) " % (point.x, point.y)
type = self.type_names[type]
cont = self.cont_names[cont]
return type + controls + point + cont
import Sketch.Scripting
Sketch.Scripting.AddFunction('inspect_beziers', 'Inspect Beziers', Viewer,
script_type=Sketch.Scripting.AdvancedScript)
|