From 57fa312673a9b9caa5b68b28f4b57b6291dfaa94 Mon Sep 17 00:00:00 2001 From: yorikvanhavre Date: Sat, 10 Dec 2011 18:31:32 +0000 Subject: [PATCH] added RFE 533 - Draft Array tool git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5256 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d --- src/Mod/Draft/Draft.py | 113 +++++ src/Mod/Draft/Draft_rc.py | 402 +++++++++++++++++- src/Mod/Draft/InitGui.py | 2 +- src/Mod/Draft/Resources/Draft.qrc | 1 + src/Mod/Draft/Resources/icons/Draft_Array.svg | 131 ++++++ src/Mod/Draft/draftTools.py | 20 + 6 files changed, 652 insertions(+), 17 deletions(-) create mode 100644 src/Mod/Draft/Resources/icons/Draft_Array.svg diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 8c5487c1a..8f02c77fd 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -544,6 +544,34 @@ def makeBlock(objectslist): select(obj) return obj +def makeArray(baseobject,arg1=Vector(0,0,0),arg2=360,arg3=4,arg4=None): + '''makeArray(object,xvector,yvector,xnum,ynum) for rectangular array, or + makeArray(object,center,totalangle,totalnum) for polar array: Creates an array + of the given object + with, in case of rectangular array, xnum of iterations in the x direction + at xvector distance between iterations, and same for y direction with yvector + and ynum. In case of polar array, center is a vector, totalangle is the angle + to cover (in degrees) and totalnum is the number of objects, including the original. + The result is a parametric Draft Array.''' + obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Array") + _Array(obj) + _ViewProviderArray(obj.ViewObject) + obj.Base = baseobject + if arg4: + org.ArrayType = "ortho" + obj.IntervalX = arg1 + obj.IntervalY = arg2 + obj.NumberX = arg3 + obj.NumberY = arg4 + else: + obj.ArrayType = "polar" + obj.Center = arg1 + obj.Angle = arg2 + obj.NumberPolar = arg3 + baseobject.ViewObject.hide() + select(obj) + return obj + def extrude(obj,vector): '''makeExtrusion(object,vector): extrudes the given object in the direction given by the vector. The original object @@ -2181,3 +2209,88 @@ class _Shape2DView: obj.Shape = visibleG0 if not fcgeo.isNull(pl): obj.Placement = pl + +class _Array: + "The Draft Array object" + + def __init__(self,obj): + obj.addProperty("App::PropertyLink","Base","Base", + "The base object that must be duplicated") + obj.addProperty("App::PropertyEnumeration","ArrayType","Base", + "The type of array to create") + obj.addProperty("App::PropertyInteger","NumberX","Base", + "Number of copies in X direction (ortho arrays)") + obj.addProperty("App::PropertyInteger","NumberY","Base", + "Number of copies in Y direction (ortho arrays)") + obj.addProperty("App::PropertyInteger","NumberPolar","Base", + "Number of copies (polar arrays)") + obj.addProperty("App::PropertyVector","IntervalX","Base", + "Distance and orientation of intervals in X direction (ortho arrays)") + obj.addProperty("App::PropertyVector","IntervalY","Base", + "Distance and orientation of intervals in Y direction (ortho arrays)") + obj.addProperty("App::PropertyVector","Center","Base", + "Center point (polar arrays)") + obj.addProperty("App::PropertyAngle","Angle","Base", + "Angle to cover with copies (polar arrays)") + obj.Proxy = self + self.Type = "Array" + obj.ArrayType = ['ortho','polar'] + obj.NumberX = 1 + obj.NumberY = 1 + obj.NumberPolar = 1 + obj.IntervalX = Vector(1,0,0) + obj.IntervalY = Vector(0,1,0) + + def execute(self,obj): + self.createGeometry(obj) + + def onChanged(self,obj,prop): + if prop in ["ArrayType","NumberX","NumberY","NumberPolar","IntervalX","IntervalY","Angle","Center"]: + self.createGeometry(obj) + + def createGeometry(self,obj): + if obj.Base: + pl = obj.Placement + if obj.ArrayType == "ortho": + sh = self.rectArray(obj.Base.Shape,obj.IntervalX,obj.IntervalY,obj.NumberX,obj.NumberY) + else: + sh = self.polarArray(obj.Base.Shape,obj.Center,obj.Angle,obj.NumberPolar) + obj.Shape = sh + if not fcgeo.isNull(pl): + obj.Placement = pl + + def rectArray(self,shape,xvector,yvector,xnum,ynum): + base = [shape.copy()] + for xcount in range(xnum): + currentxvector=fcvec.scale(xvector,xcount) + if not xcount==0: + nshape = shape.copy() + nshape.translate(currentxvector) + base.append(nshape) + for ycount in range(ynum): + currentxvector=FreeCAD.Vector(currentxvector) + currentyvector=currentxvector.add(fcvec.scale(yvector,ycount)) + if not ycount==0: + nshape = shape.copy() + nshape.translate(currentyvector) + base.append(nshape) + return Part.makeCompound(base) + + def polarArray(self,shape,center,angle,num): + fraction = angle/num + base = [shape.copy()] + for i in range(num): + currangle = fraction + (i*fraction) + nshape = shape.copy() + nshape.rotate(fcvec.tup(center), (0,0,1), currangle) + base.append(nshape) + return Part.makeCompound(base) + +class _ViewProviderArray(_ViewProviderDraft): + "A view provider for Array objects" + + def __init__(self,obj): + _ViewProviderDraft.__init__(self,obj) + + def claimChildren(self): + return [self.Object.Base] diff --git a/src/Mod/Draft/Draft_rc.py b/src/Mod/Draft/Draft_rc.py index 9918f8612..3a16cdea4 100644 --- a/src/Mod/Draft/Draft_rc.py +++ b/src/Mod/Draft/Draft_rc.py @@ -2,7 +2,7 @@ # Resource object code # -# Created: Thu Dec 8 11:44:05 2011 +# Created: Sat Dec 10 14:06:42 2011 # by: The Resource Compiler for PyQt (Qt v4.7.3) # # WARNING! All changes made in this file will be lost! @@ -28329,6 +28329,371 @@ qt_resource_data = "\ \xe4\xb6\xce\x1c\x7a\x83\x62\xc0\x9d\x1d\x2b\xfd\xa2\xae\x9a\x4e\ \x16\xfb\x84\x01\x5f\x53\x93\xe0\x1e\xee\xfe\x0f\xea\x16\x2b\x89\ \ +\x00\x00\x16\xaf\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ +\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\ +\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\ +\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\ +\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\ +\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\ +\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\ +\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\ +\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\ +\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\ +\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\ +\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\ +\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\ +\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\ +\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\ +\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\ +\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\ +\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\ +\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\ +\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\ +\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x0a\x20\x20\x20\x78\x6d\ +\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\ +\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\ +\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\ +\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\ +\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\x61\x6d\ +\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x34\x70\x78\ +\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\x70\ +\x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x35\x38\x32\ +\x31\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x76\ +\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x33\x32\x22\x0a\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\ +\x6e\x3d\x22\x30\x2e\x34\x38\x2e\x31\x20\x72\x39\x37\x36\x30\x22\ +\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x64\x6f\x63\ +\x6e\x61\x6d\x65\x3d\x22\x44\x72\x61\x66\x74\x5f\x44\x72\x61\x66\ +\x74\x32\x53\x6b\x65\x74\x63\x68\x2e\x73\x76\x67\x22\x0a\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6f\x75\x74\x70\x75\x74\ +\x5f\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x3d\x22\x6f\x72\x67\x2e\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x75\x74\x70\x75\x74\x2e\ +\x73\x76\x67\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x22\x0a\x20\x20\ +\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x65\x78\x70\x6f\x72\ +\x74\x2d\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x2f\x6d\x65\x64\ +\x69\x61\x2f\x64\x61\x74\x61\x2f\x59\x6f\x72\x69\x6b\x2f\x46\x72\ +\x65\x65\x43\x41\x44\x2f\x69\x63\x6f\x6e\x73\x2f\x53\x6b\x65\x74\ +\x63\x68\x65\x72\x2e\x70\x6e\x67\x22\x0a\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x65\x78\x70\x6f\x72\x74\x2d\x78\x64\x70\ +\x69\x3d\x22\x34\x35\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x65\x78\x70\x6f\x72\x74\x2d\x79\x64\x70\x69\x3d\x22\ +\x34\x35\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x0a\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\x35\x38\x32\x33\x22\x3e\ +\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\ +\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x36\ +\x33\x34\x39\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\ +\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\ +\x30\x30\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x36\x33\x35\x31\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\ +\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x30\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\ +\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x36\x33\x35\x33\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\ +\x6f\x72\x3a\x23\x30\x30\x31\x39\x61\x33\x3b\x73\x74\x6f\x70\x2d\ +\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\ +\x70\x33\x33\x37\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ +\x3a\x23\x30\x30\x36\x39\x66\x66\x3b\x73\x74\x6f\x70\x2d\x6f\x70\ +\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\ +\x33\x38\x31\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\ +\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\ +\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\ +\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x33\x33\x38\x33\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x78\x31\x3d\x22\x39\x30\x31\x2e\x31\x38\x37\x35\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x31\x31\x39\x30\x2e\x38\ +\x37\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x31\ +\x32\x36\x37\x2e\x39\x30\x36\x32\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x79\x32\x3d\x22\x31\x31\x39\x30\x2e\x38\x37\x35\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\ +\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\ +\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\ +\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\ +\x61\x74\x72\x69\x78\x28\x2d\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x32\ +\x31\x39\x39\x2e\x33\x35\x36\x2c\x30\x29\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\ +\x73\x70\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x76\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\x33\x32\x20\x3a\x20\ +\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\ +\x30\x20\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x36\x34\x20\ +\x3a\x20\x33\x32\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\ +\x64\x2d\x6f\x72\x69\x67\x69\x6e\x3d\x22\x33\x32\x20\x3a\x20\x32\ +\x31\x2e\x33\x33\x33\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\ +\x74\x69\x76\x65\x35\x38\x32\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\ +\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x36\x33\x34\x39\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x36\x33\x35\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x63\x78\x3d\x22\x31\x31\x30\x33\x2e\x36\x33\x39\x39\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x31\x34\x32\x34\x2e\x34\ +\x34\x36\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\ +\x31\x31\x30\x33\x2e\x36\x33\x39\x39\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x66\x79\x3d\x22\x31\x34\x32\x34\x2e\x34\x34\x36\x35\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x31\x39\x34\x2e\x34\ +\x30\x36\x31\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\ +\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\ +\x6d\x61\x74\x72\x69\x78\x28\x2d\x31\x2e\x34\x33\x30\x37\x34\x39\ +\x39\x2c\x2d\x31\x2e\x33\x36\x30\x35\x31\x35\x36\x65\x2d\x37\x2c\ +\x2d\x31\x2e\x32\x30\x32\x37\x31\x33\x65\x2d\x38\x2c\x30\x2e\x31\ +\x32\x36\x34\x38\x30\x31\x2c\x32\x36\x37\x34\x2e\x37\x34\x38\x38\ +\x2c\x31\x32\x34\x34\x2e\x32\x38\x32\x36\x29\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\ +\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\ +\x65\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ +\x20\x20\x3c\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\ +\x64\x76\x69\x65\x77\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x62\ +\x61\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x70\x61\x67\x65\x63\x6f\ +\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\x66\x66\x22\x0a\x20\x20\ +\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x63\x6f\x6c\x6f\x72\x3d\x22\ +\x23\x36\x36\x36\x36\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\ +\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x31\x2e\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x70\x61\x67\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x2e\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x70\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0a\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\ +\x6d\x3d\x22\x33\x2e\x38\x38\x39\x30\x38\x37\x33\x22\x0a\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\ +\x32\x38\x2e\x33\x33\x36\x32\x39\x39\x22\x0a\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x32\x30\x2e\ +\x37\x35\x33\x33\x37\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x63\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\ +\x65\x72\x3d\x22\x67\x33\x33\x36\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x74\x72\x75\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\ +\x63\x75\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\ +\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x67\x72\x69\x64\x2d\x62\x62\x6f\x78\x3d\x22\x74\x72\x75\x65\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\ +\x69\x6e\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x32\x38\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\ +\x37\x35\x38\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\ +\x6e\x64\x6f\x77\x2d\x79\x3d\x22\x31\x39\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\ +\x2d\x6d\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x31\x22\x20\x2f\ +\x3e\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0a\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x35\ +\x38\x32\x36\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\ +\x44\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\ +\x72\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\ +\x61\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\ +\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\ +\x6f\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x64\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\ +\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\ +\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\x69\ +\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x3c\x2f\ +\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\x20\x3c\ +\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\ +\x74\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x67\x0a\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\ +\x6c\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\ +\x6f\x64\x65\x3d\x22\x6c\x61\x79\x65\x72\x22\x3e\x0a\x20\x20\x20\ +\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\ +\x33\x33\x36\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x65\x78\x70\x6f\x72\x74\x2d\x66\x69\x6c\ +\x65\x6e\x61\x6d\x65\x3d\x22\x2f\x68\x6f\x6d\x65\x2f\x79\x6f\x72\ +\x69\x6b\x2f\x44\x6f\x63\x75\x6d\x65\x6e\x74\x73\x2f\x4c\x61\x62\ +\x2f\x44\x72\x61\x66\x74\x2f\x69\x63\x6f\x6e\x73\x2f\x64\x72\x61\ +\x66\x74\x2e\x70\x6e\x67\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x65\x78\x70\x6f\x72\x74\x2d\x78\ +\x64\x70\x69\x3d\x22\x33\x2e\x32\x34\x37\x38\x31\x35\x36\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x65\x78\x70\x6f\x72\x74\x2d\x79\x64\x70\x69\x3d\x22\x33\x2e\x32\ +\x34\x37\x38\x31\x35\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x74\ +\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\ +\x28\x30\x2e\x31\x33\x36\x37\x38\x36\x33\x2c\x30\x2c\x30\x2c\x30\ +\x2e\x31\x33\x36\x37\x38\x36\x33\x2c\x2d\x31\x31\x39\x2e\x31\x35\ +\x35\x31\x39\x2c\x2d\x31\x33\x34\x2e\x38\x36\x39\x36\x32\x29\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\ +\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x30\x2e\x34\x37\x33\x34\x35\x31\x33\x32\x3b\x63\x6f\x6c\x6f\x72\ +\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x30\ +\x30\x30\x30\x30\x30\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\ +\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\ +\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\ +\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\ +\x31\x31\x2e\x39\x30\x35\x31\x37\x35\x32\x31\x3b\x6d\x61\x72\x6b\ +\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\ +\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\ +\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\ +\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\ +\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\ +\x75\x6d\x75\x6c\x61\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x64\x3d\x22\x6d\x20\x31\x30\x39\x35\x2e\x33\x35\x33\x33\ +\x2c\x31\x30\x33\x34\x2e\x34\x31\x38\x39\x20\x30\x2c\x31\x31\x36\ +\x2e\x35\x31\x33\x38\x20\x35\x38\x2e\x39\x34\x32\x33\x2c\x30\x20\ +\x30\x2c\x2d\x31\x31\x36\x2e\x35\x31\x33\x38\x20\x2d\x35\x38\x2e\ +\x39\x34\x32\x33\x2c\x30\x20\x7a\x20\x6d\x20\x2d\x39\x30\x2e\x36\ +\x39\x38\x31\x2c\x33\x38\x2e\x38\x33\x37\x39\x20\x2d\x34\x31\x2e\ +\x38\x30\x37\x38\x39\x2c\x34\x31\x2e\x35\x37\x39\x35\x20\x38\x32\ +\x2e\x34\x37\x33\x35\x39\x2c\x38\x32\x2e\x32\x34\x35\x31\x20\x34\ +\x31\x2e\x35\x37\x39\x34\x2c\x2d\x34\x31\x2e\x35\x37\x39\x35\x20\ +\x2d\x38\x32\x2e\x32\x34\x35\x31\x2c\x2d\x38\x32\x2e\x32\x34\x35\ +\x31\x20\x7a\x20\x6d\x20\x32\x34\x37\x2e\x34\x32\x30\x37\x2c\x33\ +\x2e\x38\x38\x33\x38\x20\x2d\x38\x32\x2e\x32\x34\x35\x31\x2c\x38\ +\x32\x2e\x32\x34\x35\x31\x20\x34\x31\x2e\x35\x37\x39\x34\x2c\x34\ +\x31\x2e\x35\x37\x39\x34\x20\x38\x32\x2e\x34\x37\x33\x36\x2c\x2d\ +\x38\x32\x2e\x32\x34\x35\x20\x2d\x34\x31\x2e\x38\x30\x37\x39\x2c\ +\x2d\x34\x31\x2e\x35\x37\x39\x35\x20\x7a\x20\x6d\x20\x2d\x33\x33\ +\x34\x2e\x32\x33\x34\x39\x32\x2c\x31\x33\x36\x2e\x33\x38\x39\x38\ +\x20\x30\x2c\x35\x38\x2e\x39\x34\x32\x33\x20\x31\x31\x36\x2e\x32\ +\x38\x35\x34\x32\x2c\x30\x20\x30\x2c\x2d\x35\x38\x2e\x39\x34\x32\ +\x33\x20\x2d\x31\x31\x36\x2e\x32\x38\x35\x34\x32\x2c\x30\x20\x7a\ +\x20\x6d\x20\x32\x39\x34\x2e\x30\x32\x36\x31\x32\x2c\x30\x20\x30\ +\x2c\x35\x38\x2e\x39\x34\x32\x33\x20\x31\x31\x36\x2e\x32\x38\x35\ +\x35\x2c\x30\x20\x30\x2c\x2d\x35\x38\x2e\x39\x34\x32\x33\x20\x2d\ +\x31\x31\x36\x2e\x32\x38\x35\x35\x2c\x30\x20\x7a\x20\x6d\x20\x30\ +\x2e\x36\x38\x35\x34\x2c\x36\x37\x2e\x33\x39\x35\x32\x20\x2d\x34\ +\x31\x2e\x35\x37\x39\x34\x2c\x34\x31\x2e\x38\x30\x38\x20\x38\x32\ +\x2e\x32\x34\x35\x2c\x38\x32\x2e\x32\x34\x35\x20\x34\x31\x2e\x35\ +\x37\x39\x35\x2c\x2d\x34\x31\x2e\x35\x37\x39\x34\x20\x2d\x38\x32\ +\x2e\x32\x34\x35\x31\x2c\x2d\x38\x32\x2e\x34\x37\x33\x36\x20\x7a\ +\x20\x6d\x20\x2d\x31\x36\x38\x2e\x31\x34\x35\x35\x2c\x34\x2e\x31\ +\x31\x32\x33\x20\x2d\x38\x32\x2e\x34\x37\x33\x35\x32\x2c\x38\x32\ +\x2e\x32\x34\x35\x31\x20\x34\x31\x2e\x38\x30\x37\x39\x32\x2c\x34\ +\x31\x2e\x38\x30\x37\x39\x20\x38\x32\x2e\x32\x34\x35\x31\x2c\x2d\ +\x38\x32\x2e\x34\x37\x33\x35\x20\x2d\x34\x31\x2e\x35\x37\x39\x35\ +\x2c\x2d\x34\x31\x2e\x35\x37\x39\x35\x20\x7a\x20\x6d\x20\x35\x31\ +\x2e\x31\x37\x34\x37\x2c\x34\x33\x2e\x34\x30\x37\x31\x20\x30\x2c\ +\x31\x31\x36\x2e\x32\x38\x35\x34\x20\x35\x38\x2e\x39\x34\x32\x34\ +\x2c\x30\x20\x30\x2c\x2d\x31\x31\x36\x2e\x32\x38\x35\x34\x20\x2d\ +\x35\x38\x2e\x39\x34\x32\x34\x2c\x30\x20\x7a\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x65\x63\x74\x33\x30\ +\x30\x35\x2d\x37\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\ +\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\ +\x30\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x32\x65\x37\x36\x66\x66\x3b\ +\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\ +\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\ +\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x33\x34\x33\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\x2e\x36\ +\x32\x38\x34\x36\x34\x38\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\ +\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\ +\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\ +\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\ +\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\ +\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\ +\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\ +\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\ +\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\ +\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x32\x38\x2e\x31\ +\x32\x35\x20\x33\x2e\x34\x33\x37\x35\x20\x4c\x20\x32\x38\x2e\x31\ +\x32\x35\x20\x31\x39\x2e\x33\x37\x35\x20\x4c\x20\x33\x36\x2e\x31\ +\x38\x37\x35\x20\x31\x39\x2e\x33\x37\x35\x20\x4c\x20\x33\x36\x2e\ +\x31\x38\x37\x35\x20\x33\x2e\x34\x33\x37\x35\x20\x4c\x20\x32\x38\ +\x2e\x31\x32\x35\x20\x33\x2e\x34\x33\x37\x35\x20\x7a\x20\x4d\x20\ +\x31\x35\x2e\x37\x31\x38\x37\x35\x20\x38\x2e\x37\x35\x20\x4c\x20\ +\x31\x30\x20\x31\x34\x2e\x34\x33\x37\x35\x20\x4c\x20\x32\x31\x2e\ +\x32\x38\x31\x32\x35\x20\x32\x35\x2e\x36\x38\x37\x35\x20\x4c\x20\ +\x32\x36\x2e\x39\x36\x38\x37\x35\x20\x32\x30\x20\x4c\x20\x31\x35\ +\x2e\x37\x31\x38\x37\x35\x20\x38\x2e\x37\x35\x20\x7a\x20\x4d\x20\ +\x34\x39\x2e\x35\x36\x32\x35\x20\x39\x2e\x32\x38\x31\x32\x35\x20\ +\x4c\x20\x33\x38\x2e\x33\x31\x32\x35\x20\x32\x30\x2e\x35\x33\x31\ +\x32\x35\x20\x4c\x20\x34\x34\x20\x32\x36\x2e\x32\x31\x38\x37\x35\ +\x20\x4c\x20\x35\x35\x2e\x32\x38\x31\x32\x35\x20\x31\x34\x2e\x39\ +\x36\x38\x37\x35\x20\x4c\x20\x34\x39\x2e\x35\x36\x32\x35\x20\x39\ +\x2e\x32\x38\x31\x32\x35\x20\x7a\x20\x4d\x20\x33\x2e\x38\x34\x33\ +\x37\x35\x20\x32\x37\x2e\x39\x33\x37\x35\x20\x4c\x20\x33\x2e\x38\ +\x34\x33\x37\x35\x20\x33\x36\x20\x4c\x20\x31\x39\x2e\x37\x35\x20\ +\x33\x36\x20\x4c\x20\x31\x39\x2e\x37\x35\x20\x32\x37\x2e\x39\x33\ +\x37\x35\x20\x4c\x20\x33\x2e\x38\x34\x33\x37\x35\x20\x32\x37\x2e\ +\x39\x33\x37\x35\x20\x7a\x20\x4d\x20\x34\x34\x2e\x30\x36\x32\x35\ +\x20\x32\x37\x2e\x39\x33\x37\x35\x20\x4c\x20\x34\x34\x2e\x30\x36\ +\x32\x35\x20\x33\x36\x20\x4c\x20\x35\x39\x2e\x39\x36\x38\x37\x35\ +\x20\x33\x36\x20\x4c\x20\x35\x39\x2e\x39\x36\x38\x37\x35\x20\x32\ +\x37\x2e\x39\x33\x37\x35\x20\x4c\x20\x34\x34\x2e\x30\x36\x32\x35\ +\x20\x32\x37\x2e\x39\x33\x37\x35\x20\x7a\x20\x4d\x20\x34\x34\x2e\ +\x31\x35\x36\x32\x35\x20\x33\x37\x2e\x31\x35\x36\x32\x35\x20\x4c\ +\x20\x33\x38\x2e\x34\x36\x38\x37\x35\x20\x34\x32\x2e\x38\x37\x35\ +\x20\x4c\x20\x34\x39\x2e\x37\x31\x38\x37\x35\x20\x35\x34\x2e\x31\ +\x32\x35\x20\x4c\x20\x35\x35\x2e\x34\x30\x36\x32\x35\x20\x34\x38\ +\x2e\x34\x33\x37\x35\x20\x4c\x20\x34\x34\x2e\x31\x35\x36\x32\x35\ +\x20\x33\x37\x2e\x31\x35\x36\x32\x35\x20\x7a\x20\x4d\x20\x32\x31\ +\x2e\x31\x35\x36\x32\x35\x20\x33\x37\x2e\x37\x31\x38\x37\x35\x20\ +\x4c\x20\x39\x2e\x38\x37\x35\x20\x34\x38\x2e\x39\x36\x38\x37\x35\ +\x20\x4c\x20\x31\x35\x2e\x35\x39\x33\x37\x35\x20\x35\x34\x2e\x36\ +\x38\x37\x35\x20\x4c\x20\x32\x36\x2e\x38\x34\x33\x37\x35\x20\x34\ +\x33\x2e\x34\x30\x36\x32\x35\x20\x4c\x20\x32\x31\x2e\x31\x35\x36\ +\x32\x35\x20\x33\x37\x2e\x37\x31\x38\x37\x35\x20\x7a\x20\x4d\x20\ +\x32\x38\x2e\x31\x35\x36\x32\x35\x20\x34\x33\x2e\x36\x35\x36\x32\ +\x35\x20\x4c\x20\x32\x38\x2e\x31\x35\x36\x32\x35\x20\x35\x39\x2e\ +\x35\x36\x32\x35\x20\x4c\x20\x33\x36\x2e\x32\x31\x38\x37\x35\x20\ +\x35\x39\x2e\x35\x36\x32\x35\x20\x4c\x20\x33\x36\x2e\x32\x31\x38\ +\x37\x35\x20\x34\x33\x2e\x36\x35\x36\x32\x35\x20\x4c\x20\x32\x38\ +\x2e\x31\x35\x36\x32\x35\x20\x34\x33\x2e\x36\x35\x36\x32\x35\x20\ +\x7a\x20\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x74\x72\x61\ +\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x37\ +\x2e\x33\x31\x30\x36\x37\x33\x37\x2c\x30\x2c\x30\x2c\x37\x2e\x33\ +\x31\x30\x36\x37\x33\x37\x2c\x38\x37\x31\x2e\x31\x30\x34\x37\x31\ +\x2c\x39\x38\x35\x2e\x39\x38\x37\x37\x38\x29\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x65\x63\x74\x33\x30\ +\x30\x35\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\ +\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ \x00\x00\x0a\xb0\ \x00\ \x00\x39\x7d\x78\x9c\xed\x5a\xdb\x8e\xdb\x46\x12\x7d\xf7\x57\x70\ @@ -31170,6 +31535,10 @@ qt_resource_name = "\ \x00\x44\ \x00\x72\x00\x61\x00\x66\x00\x74\x00\x5f\x00\x53\x00\x77\x00\x69\x00\x74\x00\x63\x00\x68\x00\x4d\x00\x6f\x00\x64\x00\x65\x00\x2e\ \x00\x73\x00\x76\x00\x67\ +\x00\x0f\ +\x07\x41\x05\xe7\ +\x00\x44\ +\x00\x72\x00\x61\x00\x66\x00\x74\x00\x5f\x00\x41\x00\x72\x00\x72\x00\x61\x00\x79\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0e\ \x00\x7f\x01\x67\ \x00\x44\ @@ -31231,8 +31600,8 @@ qt_resource_name = "\ qt_resource_struct = "\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x01\ -\x00\x00\x00\x10\x00\x02\x00\x00\x00\x02\x00\x00\x00\x3d\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x23\x00\x00\x00\x1a\ +\x00\x00\x00\x10\x00\x02\x00\x00\x00\x02\x00\x00\x00\x3e\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x24\x00\x00\x00\x1a\ \x00\x00\x00\x38\x00\x02\x00\x00\x00\x05\x00\x00\x00\x15\ \x00\x00\x00\x1a\x00\x02\x00\x00\x00\x10\x00\x00\x00\x05\ \x00\x00\x02\x72\x00\x01\x00\x00\x00\x01\x00\x05\x98\x94\ @@ -31256,41 +31625,42 @@ qt_resource_struct = "\ \x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x01\x64\ \x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x04\xc4\ \x00\x00\x00\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x03\x12\ -\x00\x00\x06\x74\x00\x01\x00\x00\x00\x01\x00\x06\xe3\xa8\ +\x00\x00\x06\x98\x00\x01\x00\x00\x00\x01\x00\x06\xfa\x5b\ \x00\x00\x05\xa6\x00\x00\x00\x00\x00\x01\x00\x06\xa0\xce\ -\x00\x00\x06\xe2\x00\x01\x00\x00\x00\x01\x00\x07\x08\xda\ +\x00\x00\x07\x06\x00\x01\x00\x00\x00\x01\x00\x07\x1f\x8d\ \x00\x00\x03\x66\x00\x01\x00\x00\x00\x01\x00\x06\x03\x81\ \x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x06\x23\xea\ \x00\x00\x04\x60\x00\x01\x00\x00\x00\x01\x00\x06\x4c\xaf\ \x00\x00\x05\x26\x00\x01\x00\x00\x00\x01\x00\x06\x78\xfc\ \x00\x00\x05\xc8\x00\x00\x00\x00\x00\x01\x00\x06\xaf\x84\ -\x00\x00\x06\xb6\x00\x01\x00\x00\x00\x01\x00\x06\xf7\xd0\ +\x00\x00\x06\xda\x00\x01\x00\x00\x00\x01\x00\x07\x0e\x83\ \x00\x00\x05\x02\x00\x01\x00\x00\x00\x01\x00\x06\x6e\x90\ \x00\x00\x04\x86\x00\x01\x00\x00\x00\x01\x00\x06\x52\x73\ \x00\x00\x03\xbc\x00\x01\x00\x00\x00\x01\x00\x06\x17\xf9\ -\x00\x00\x07\x54\x00\x01\x00\x00\x00\x01\x00\x07\x28\x2e\ +\x00\x00\x07\x78\x00\x01\x00\x00\x00\x01\x00\x07\x3e\xe1\ \x00\x00\x04\xdc\x00\x01\x00\x00\x00\x01\x00\x06\x64\xfc\ \x00\x00\x02\xe2\x00\x00\x00\x00\x00\x01\x00\x05\xe1\x20\ \x00\x00\x03\x34\x00\x01\x00\x00\x00\x01\x00\x05\xfb\xc8\ +\x00\x00\x06\x74\x00\x00\x00\x00\x00\x01\x00\x06\xe3\xa8\ \x00\x00\x06\x46\x00\x01\x00\x00\x00\x01\x00\x06\xdb\xc3\ \x00\x00\x04\x18\x00\x00\x00\x00\x00\x01\x00\x06\x33\x3b\ \x00\x00\x05\x56\x00\x00\x00\x00\x00\x01\x00\x06\x84\xd5\ \x00\x00\x04\x3c\x00\x01\x00\x00\x00\x01\x00\x06\x46\x12\ \x00\x00\x03\x04\x00\x01\x00\x00\x00\x01\x00\x05\xf3\x39\ -\x00\x00\x07\x04\x00\x01\x00\x00\x00\x01\x00\x07\x11\x83\ -\x00\x00\x08\x14\x00\x00\x00\x00\x00\x01\x00\x07\x73\x35\ -\x00\x00\x07\xf2\x00\x01\x00\x00\x00\x01\x00\x07\x65\xd6\ -\x00\x00\x07\x76\x00\x01\x00\x00\x00\x01\x00\x07\x32\x90\ -\x00\x00\x07\x9e\x00\x00\x00\x00\x00\x01\x00\x07\x3c\x41\ +\x00\x00\x07\x28\x00\x01\x00\x00\x00\x01\x00\x07\x28\x36\ +\x00\x00\x08\x38\x00\x00\x00\x00\x00\x01\x00\x07\x89\xe8\ +\x00\x00\x08\x16\x00\x01\x00\x00\x00\x01\x00\x07\x7c\x89\ +\x00\x00\x07\x9a\x00\x01\x00\x00\x00\x01\x00\x07\x49\x43\ +\x00\x00\x07\xc2\x00\x00\x00\x00\x00\x01\x00\x07\x52\xf4\ \x00\x00\x05\x7c\x00\x01\x00\x00\x00\x01\x00\x06\x96\x8d\ \x00\x00\x06\x16\x00\x01\x00\x00\x00\x01\x00\x06\xd1\xf0\ \x00\x00\x03\x94\x00\x01\x00\x00\x00\x01\x00\x06\x0c\x87\ \x00\x00\x05\xee\x00\x01\x00\x00\x00\x01\x00\x06\xc2\x1a\ \x00\x00\x04\xb2\x00\x01\x00\x00\x00\x01\x00\x06\x5a\x7a\ -\x00\x00\x08\x3a\x00\x01\x00\x00\x00\x01\x00\x07\x7d\xe0\ -\x00\x00\x07\x28\x00\x00\x00\x00\x00\x01\x00\x07\x18\xd4\ -\x00\x00\x06\x96\x00\x01\x00\x00\x00\x01\x00\x06\xee\x5c\ -\x00\x00\x07\xc0\x00\x00\x00\x00\x00\x01\x00\x07\x50\xd2\ +\x00\x00\x08\x5e\x00\x01\x00\x00\x00\x01\x00\x07\x94\x93\ +\x00\x00\x07\x4c\x00\x00\x00\x00\x00\x01\x00\x07\x2f\x87\ +\x00\x00\x06\xba\x00\x01\x00\x00\x00\x01\x00\x07\x05\x0f\ +\x00\x00\x07\xe4\x00\x00\x00\x00\x00\x01\x00\x07\x67\x85\ \x00\x00\x02\x8e\x00\x01\x00\x00\x00\x01\x00\x05\xcc\x17\ \x00\x00\x02\xba\x00\x01\x00\x00\x00\x01\x00\x05\xd3\xa8\ " diff --git a/src/Mod/Draft/InitGui.py b/src/Mod/Draft/InitGui.py index 952222bc2..269933485 100644 --- a/src/Mod/Draft/InitGui.py +++ b/src/Mod/Draft/InitGui.py @@ -191,7 +191,7 @@ class DraftWorkbench (Workbench): self.modList = ["Draft_Move","Draft_Rotate","Draft_Offset", "Draft_Trimex", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale", "Draft_Drawing","Draft_Edit","Draft_WireToBSpline","Draft_AddPoint", - "Draft_DelPoint","Draft_Shape2DView","Draft_Draft2Sketch"] + "Draft_DelPoint","Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array"] self.treecmdList = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup","Draft_SelectGroup"] self.lineList = ["Draft_UndoLine","Draft_FinishLine","Draft_CloseLine"] self.appendToolbar(str(draftTools.translate("draft","Draft tools")),self.cmdList+self.modList) diff --git a/src/Mod/Draft/Resources/Draft.qrc b/src/Mod/Draft/Resources/Draft.qrc index 51d1ff1f8..e8b9a2b12 100644 --- a/src/Mod/Draft/Resources/Draft.qrc +++ b/src/Mod/Draft/Resources/Draft.qrc @@ -35,6 +35,7 @@ icons/Draft_2DShapeView.svg icons/Draft_Wipe.svg icons/Draft_Draft2Sketch.svg + icons/Draft_Array.svg patterns/concrete.svg patterns/cross.svg patterns/line.svg diff --git a/src/Mod/Draft/Resources/icons/Draft_Array.svg b/src/Mod/Draft/Resources/icons/Draft_Array.svg new file mode 100644 index 000000000..3180ad668 --- /dev/null +++ b/src/Mod/Draft/Resources/icons/Draft_Array.svg @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/Mod/Draft/draftTools.py b/src/Mod/Draft/draftTools.py index 1149dca73..76180c649 100755 --- a/src/Mod/Draft/draftTools.py +++ b/src/Mod/Draft/draftTools.py @@ -4474,6 +4474,25 @@ class Draft2Sketch(): Draft.draftify(sel,makeblock=True) FreeCAD.ActiveDocument.commitTransaction() + +class Array(): + "The Shape2DView FreeCAD command definition" + def GetResources(self): + return {'Pixmap' : 'Draft_Array', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Array", "Array"), + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Array", "Creates a polar or rectangular array from a selected object")} + + def IsActive(self): + if len(Draft.getSelection()) == 1: + return True + else: + return False + + def Activated(self): + obj = Draft.getSelection()[0] + FreeCAD.ActiveDocument.openTransaction("Array") + Draft.makeArray(obj) + FreeCAD.ActiveDocument.commitTransaction() #--------------------------------------------------------------------------- # Adds the icons & commands to the FreeCAD command manager, and sets defaults @@ -4505,6 +4524,7 @@ FreeCADGui.addCommand('Draft_AddPoint',AddPoint()) FreeCADGui.addCommand('Draft_DelPoint',DelPoint()) FreeCADGui.addCommand('Draft_WireToBSpline',WireToBSpline()) FreeCADGui.addCommand('Draft_Draft2Sketch',Draft2Sketch()) +FreeCADGui.addCommand('Draft_Array',Array()) # context commands FreeCADGui.addCommand('Draft_FinishLine',FinishLine())