# # create_star.py - create star-like objects # 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 _, PolyBezier, CreatePath, Polar from Sketch.UI.sketchdlg import SKModal from Tkinter import * import math, unit class CreateStarDlg(SKModal): title = _("Create Star") def build_dlg(self): self.var_corners = IntVar(self.top) self.var_corners.set(10) label = Label(self.top, text=_("Corners")) label.grid(column=0, row=0, sticky=E) entry = Entry(self.top, width=15, textvariable=self.var_corners) entry.grid(column=1, row=0) self.var_outer_radius = StringVar(self.top) self.var_outer_radius.set("100pt") label = Label(self.top, text=_("Outer Radius")) label.grid(column=0, row=1, sticky=E) entry = Entry(self.top, width=15, textvariable=self.var_outer_radius) entry.grid(column=1, row=1) self.var_inner_radius = StringVar(self.top) self.var_inner_radius.set("75pt") label = Label(self.top, text=_("Inner Radius")) label.grid(column=0, row=2, sticky=E) entry = Entry(self.top, width=15, textvariable=self.var_inner_radius) entry.grid(column=1, row=2) button = Button(self.top, text=_("OK"), command=self.ok) button.grid(column=0, row=3, sticky=W) button = Button(self.top, text=_("Cancel"), command=self.cancel) button.grid(column=1, row=3, sticky=E) def ok(self): self.close_dlg((self.var_corners.get(), self.var_outer_radius.get(), self.var_inner_radius.get())) def create_star_outline(context): args = CreateStarDlg(context.application.root).RunDialog() if args is None: return path = apply(create_star_path, args) bezier = PolyBezier((path,)) context.main_window.PlaceObject(bezier) def create_star_path(corners, outer_radius, inner_radius): outer_radius = unit.convert(outer_radius) inner_radius = unit.convert(inner_radius) path = CreatePath() angle = math.pi * 2 / corners for i in range(corners): path.AppendLine(Polar(outer_radius, angle * i)) path.AppendLine(Polar(inner_radius, angle * i + angle / 2)) path.AppendLine(path.Node(0)) path.ClosePath() return path import Sketch.Scripting Sketch.Scripting.AddFunction('create_star_outline', _("Star Outline"), create_star_outline, menu = _("Create Objects"), script_type = Sketch.Scripting.AdvancedScript)