From 76cd107b36a9dcd6defa921455f9ee187c43ca1b Mon Sep 17 00:00:00 2001 From: cem Date: Sun, 28 Feb 2021 05:17:16 +0300 Subject: [PATCH] Add planetary gearset mode --- HelicalGearPlus.py | 303 +++++++++++++++---------- resources/planetary/16x16-disabled.png | Bin 0 -> 2727 bytes resources/planetary/16x16.png | Bin 0 -> 2727 bytes resources/planetary/32x32.png | Bin 0 -> 5761 bytes resources/planetary/32x32@2x.png | Bin 0 -> 15942 bytes 5 files changed, 185 insertions(+), 118 deletions(-) create mode 100644 resources/planetary/16x16-disabled.png create mode 100644 resources/planetary/16x16.png create mode 100644 resources/planetary/32x32.png create mode 100644 resources/planetary/32x32@2x.png diff --git a/HelicalGearPlus.py b/HelicalGearPlus.py index 3aee759..ced5eee 100755 --- a/HelicalGearPlus.py +++ b/HelicalGearPlus.py @@ -16,7 +16,7 @@ _handlers = [] # Caches last gear for -lastGear = None +lastGears = [] lastInput = "" COMMANDID = "helicalGearPlus" @@ -32,6 +32,10 @@ 'VIPressureAngle': 0.3490658503988659, 'VIModule': 0.3, 'ISTeeth': 16, + 'ISPlanets': 4, + 'ISSunTeeth': 8, + 'ISPlanetTeeth': 12, + 'ISRingTeeth': 32, 'VIBacklash': 0.0, 'VIWidth': 1.0, 'VIHeight': 0.8, @@ -354,6 +358,9 @@ def createInNormalSystem(toothCount, normalModule, normalPressureAngle, helixAng gear.rootDiameter = gear.outsideDiameter - 2 * gear.wholeDepth gear.circularPitch = gear.module * math.pi + gear.modelRotation = 0 + gear.modelOffsetXY = [0, 0] + return gear @staticmethod @@ -390,11 +397,14 @@ def createInRadialSystem(toothCount, radialModule, radialPressureAngle, helixAng gear.rootDiameter = gear.outsideDiameter - 2 * gear.wholeDepth gear.circularPitch = gear.module * math.pi + gear.modelRotation = 0 + gear.modelOffsetXY = [0, 0] + return gear - def modelGear(self, parentComponent, sameAsLast=False): + def modelGear(self, parentComponent, cachedBody=None): # Storres a copy of the last gear generated to speed up regeneation of the same gear - global lastGear + global lastGears # The temporaryBRep manager is a tool for creating 3d geometry without the use of features # The word temporary referrs to the geometry being created being virtual, but It can easily be converted to actual geometry @@ -415,7 +425,7 @@ def modelGear(self, parentComponent, sameAsLast=False): else: baseFeature = None - if (not (sameAsLast and lastGear)): + if (not cachedBody): # Creates sketch and draws tooth profile involute = Involute(self) @@ -510,15 +520,11 @@ def modelGear(self, parentComponent, sameAsLast=False): # Delete tooth sketch for performance sketch.deleteMe() - - # Storres a copy of the newly generated gear - - lastGear = tbm.copy(gearBody) else: if (baseFeature): - component.bRepBodies.add(lastGear, baseFeature) + component.bRepBodies.add(cachedBody, baseFeature) else: - component.bRepBodies.add(lastGear) + component.bRepBodies.add(cachedbody) # Draws pitch diameter pitchDiameterSketch = component.sketches.add(component.xYConstructionPlane) @@ -561,6 +567,9 @@ def createInNormalSystem(normalModule, normalPressureAngle, helixAngle, herringb gear.module = gear.normalModule / cosHelixAngle gear.pressureAngle = math.atan2(math.tan(gear.normalPressureAngle), cosHelixAngle) + gear.modelRotation = 0 + gear.modelOffsetXY = [0, 0] + return gear @staticmethod @@ -584,6 +593,9 @@ def createInRadialSystem(radialModule, radialPressureAngle, helixAngle, herringb gear.normalModule = gear.module * cosHelixAngle gear.normalPressureAngle = math.atan(math.tan(radialPressureAngle) * math.cos(gear.helixAngle)) + gear.modelRotation = 0 + gear.modelOffsetXY = [0, 0] + return gear def __str__(self): @@ -683,9 +695,9 @@ def rackLines(self, x, y, z, m, n, height, pAngle, hAngle, backlash, addendum, d ) return lines - def modelGear(self, parentComponent, sameAsLast=False): + def modelGear(self, parentComponent, cachedBody=None): # Storres a copy of the last gear generated to speed up regeneation of the same gear - global lastGear + global lastGears # Create new component occurrence = parentComponent.occurrences.addNewComponent(adsk.core.Matrix3D.create()) @@ -701,7 +713,7 @@ def modelGear(self, parentComponent, sameAsLast=False): else: baseFeature = None - if (not (sameAsLast and lastGear)): + if (not cachedBody): teeth = math.ceil( (self.length + 2 * math.tan(abs(self.helixAngle)) * self.width) / (self.normalModule * math.pi)) @@ -790,14 +802,11 @@ def modelGear(self, parentComponent, sameAsLast=False): # Deletes tooling bodies for b in tools: b.deleteMe() - - # Storres a copy of the newly generated gear - lastGear = tbm.copy(gearBody) else: if (baseFeature): - component.bRepBodies.add(lastGear, baseFeature) + component.bRepBodies.add(cachedBody, baseFeature) else: - component.bRepBodies.add(lastGear) + component.bRepBodies.add(cachedbody) # Adds "pitch diameter" line pitchDiameterSketch = component.sketches.add(component.xYConstructionPlane) @@ -809,7 +818,6 @@ def modelGear(self, parentComponent, sameAsLast=False): pitchDiameterLine.isFixed = True pitchDiameterLine.isConstruction = True - if (baseFeature): baseFeature.finishEdit() @@ -867,6 +875,7 @@ def notify(self, args): ddType.listItems.add("External Gear", pers['DDType'] == "External Gear", "resources/external") ddType.listItems.add("Internal Gear", pers['DDType'] == "Internal Gear", "resources/internal") ddType.listItems.add("Rack Gear", pers['DDType'] == "Rack Gear", "resources/rack") + ddType.listItems.add("Planetary Gearset", pers['DDType'] == "Planetary Gearset", "resources/planetary") viModule = tabSettings.children.addValueInput("VIModule", "Module", "mm", adsk.core.ValueInput.createByReal(pers['VIModule'])) @@ -879,12 +888,41 @@ def notify(self, args): viHelixAngle.tooltipDescription = "Angle of tooth twist.\n0 degrees produces a standard spur gear.\nHigh angles produce worm gears\nNegative angles produce left handed gears" viHelixAngle.toolClipFilename = 'resources/captions/HelixAngle.png' + # Number of gear teeth. isTeeth = tabSettings.children.addIntegerSpinnerCommandInput("ISTeeth", "Teeth", 1, 99999, 1, pers['ISTeeth']) - isTeeth.isVisible = pers['DDType'] != "Rack Gear" + isTeeth.isVisible = pers['DDType'] != "Rack Gear" and pers['DDType'] != "Planetary Gearset" isTeeth.tooltip = "Number of Teeth" isTeeth.tooltipDescription = "The number of teeth a gear has.\nGears with higher helix angle can have less teeth.\nFor example mots worm gears have only one." + # Number of planets. + isNumPlanets = tabSettings.children.addIntegerSpinnerCommandInput("ISPlanets", "Number of Planets", 1, 99999, 1, + pers['ISPlanets']) + isNumPlanets.isVisible = pers['DDType'] == "Planetary Gearset" + isNumPlanets.tooltip = "Number of Planets" + isNumPlanets.tooltipDescription = "The number of teeth a gear has.\nGears with higher helix angle can have less teeth.\nFor example mots worm gears have only one." + + # Number of gear teeth of the sun. + isSunTeeth = tabSettings.children.addIntegerSpinnerCommandInput("ISSunTeeth", "Sun Teeth", 1, 99999, 1, + pers['ISSunTeeth']) + isSunTeeth.isVisible = pers['DDType'] == "Planetary Gearset" + isSunTeeth.tooltip = "Number of Teeth" + isSunTeeth.tooltipDescription = "The number of teeth a gear has.\nGears with higher helix angle can have less teeth.\nFor example mots worm gears have only one." + + # Number of gear teeth of the planets. + isPlanetTeeth = tabSettings.children.addIntegerSpinnerCommandInput("ISPlanetTeeth", "Planet Teeth", 1, 99999, 1, + pers['ISPlanetTeeth']) + isPlanetTeeth.isVisible = pers['DDType'] == "Planetary Gearset" + isPlanetTeeth.tooltip = "Number of Teeth" + isPlanetTeeth.tooltipDescription = "The number of teeth a gear has.\nGears with higher helix angle can have less teeth.\nFor example mots worm gears have only one." + + # Number of gear teeth of the ring. + isRingTeeth = tabSettings.children.addIntegerSpinnerCommandInput("ISRingTeeth", "Ring Teeth", 1, 99999, 1, + pers['ISRingTeeth']) + isRingTeeth.isVisible = pers['DDType'] == "Planetary Gearset" + isRingTeeth.tooltip = "Number of Teeth" + isRingTeeth.tooltipDescription = "The number of teeth a gear has.\nGears with higher helix angle can have less teeth.\nFor example mots worm gears have only one." + viWidth = tabSettings.children.addValueInput("VIWidth", "Gear Width", "mm", adsk.core.ValueInput.createByReal(pers['VIWidth'])) viWidth.tooltip = "Gear Width" @@ -904,7 +942,7 @@ def notify(self, args): viDiameter = tabSettings.children.addValueInput("VIDiameter", "Outside Diameter", "mm", adsk.core.ValueInput.createByReal(pers['VIDiameter'])) viDiameter.tooltip = "Internal Gear Outside Diameter" - viDiameter.isVisible = pers['DDType'] == "Internal Gear" + viDiameter.isVisible = pers['DDType'] == "Internal Gear" or pers['DDType'] == "Planetary Gearset" bvHerringbone = tabSettings.children.addBoolValueInput("BVHerringbone", "Herringbone", True, "", pers['BVHerringbone']) @@ -1036,10 +1074,14 @@ def notify(self, args): # Saves inputs to dict for persistence preserveInputs(args.command.commandInputs, pers) - gear = generateGear(args.command.commandInputs).modelGear( - adsk.core.Application.get().activeProduct.rootComponent) - - moveGear(gear, args.command.commandInputs) + gears = generateGears(args.command.commandInputs) + for gear in gears: + model = gear.modelGear( + adsk.core.Application.get().activeProduct.rootComponent) + moveGear(model, args.command.commandInputs, gear.modelRotation, gear.modelOffsetXY) + # Applies the movement in parametric design mode + if (adsk.core.Application.get().activeDocument.design.designType): + adsk.core.Application.get().activeDocument.design.snapshots.add() except: print(traceback.format_exc()) @@ -1058,15 +1100,29 @@ def notify(self, args): preserveInputs(args.command.commandInputs, pers) global lastInput + global lastGears - reuseGear = lastInput in ["APITabBar", "SIPlane", "SIOrigin", "SIDirection", "DDDirection", - "AVRotation", "BVFlipped", "DVOffsetX", "DVOffsetY", "DVOffsetZ"] - - gear = generateGear(args.command.commandInputs).modelGear( - adsk.core.Application.get().activeProduct.rootComponent, reuseGear) + tbm = adsk.fusion.TemporaryBRepManager.get() - moveGear(gear, args.command.commandInputs) + reuseGear = len(lastGears) > 0 and lastInput in ["APITabBar", "SIPlane", "SIOrigin", "SIDirection", "DDDirection", + "AVRotation", "BVFlipped", "DVOffsetX", "DVOffsetY", "DVOffsetZ"] + gears = generateGears(args.command.commandInputs) + + if (not reuseGear): + lastGears = [] + for i in range(len(gears)): + gear = gears[i] + model = gear.modelGear( + adsk.core.Application.get().activeProduct.rootComponent, lastGears[i] if reuseGear else None) + model.transform = adsk.core.Matrix3D.create() + if (not reuseGear): + lastGears.append(tbm.copy(model.bRepBodies[0])) + moveGear(model, args.command.commandInputs, gear.modelRotation, gear.modelOffsetXY) + # Applies the movement in parametric design mode + if (not reuseGear and adsk.core.Application.get().activeDocument.design.designType): + adsk.core.Application.get().activeDocument.design.snapshots.add() + args.isValidResult = True else: args.isValidResult = False @@ -1083,8 +1139,10 @@ def __init__(self): def notify(self, args): try: - isInvalid = generateGear(args.inputs).isInvalid - args.areInputsValid = not isInvalid + args.areInputsValid = True + for gear in generateGears(args.inputs): + if gear.isInvalid: + args.areInputsValid = False except: print(traceback.format_exc()) @@ -1102,19 +1160,26 @@ def notify(self, args): # Handles input visibillity based on gear type if (args.input.id == "DDType"): gearType = args.input.selectedItem.name - args.inputs.itemById("ISTeeth").isVisible = gearType != "Rack Gear" + args.inputs.itemById("ISTeeth").isVisible = gearType != "Rack Gear" and gearType != "Planetary Gearset" + args.inputs.itemById("ISPlanets").isVisible = gearType == "Planetary Gearset" + args.inputs.itemById("ISSunTeeth").isVisible = gearType == "Planetary Gearset" + args.inputs.itemById("ISPlanetTeeth").isVisible = gearType == "Planetary Gearset" + args.inputs.itemById("ISRingTeeth").isVisible = gearType == "Planetary Gearset" args.inputs.itemById("VIHeight").isVisible = gearType == "Rack Gear" args.inputs.itemById("VILength").isVisible = gearType == "Rack Gear" - args.inputs.itemById("VIDiameter").isVisible = gearType == "Internal Gear" + args.inputs.itemById("VIDiameter").isVisible = gearType == "Internal Gear" or gearType == "Planetary Gearset" # Updates Information if (args.inputs.itemById("TabProperties") and args.inputs.itemById("TabProperties").isActive): - gear = generateGear(args.inputs) + gear = generateGears(args.inputs)[0] tbProperties = args.inputs.itemById("TBProperties") tbProperties.numRows = len(str(gear).split('\n')) tbProperties.text = str(gear) # Updates Warning Message if (not args.input.id[:2] == "TB"): - isInvalid = generateGear(args.input.parentCommand.commandInputs).isInvalid + isInvalid = False + for gear in generateGears(args.input.parentCommand.commandInputs): + if gear.isInvalid: + isInvalid = True if (isInvalid): args.input.parentCommand.commandInputs.itemById( "TBWarning1").formattedText = '

Error: {0}

'.format( @@ -1248,6 +1313,10 @@ def preserveInputs(commandInputs, pers): pers['VIPressureAngle'] = commandInputs.itemById("VIPressureAngle").value pers['VIModule'] = commandInputs.itemById("VIModule").value pers['ISTeeth'] = commandInputs.itemById("ISTeeth").value + pers['ISPlanets'] = commandInputs.itemById("ISPlanets").value + pers['ISSunTeeth'] = commandInputs.itemById("ISSunTeeth").value + pers['ISPlanetTeeth'] = commandInputs.itemById("ISPlanetTeeth").value + pers['ISRingTeeth'] = commandInputs.itemById("ISRingTeeth").value pers['VIBacklash'] = commandInputs.itemById("VIBacklash").value pers['VIWidth'] = commandInputs.itemById("VIWidth").value pers['VIHeight'] = commandInputs.itemById("VIHeight").value @@ -1258,101 +1327,99 @@ def preserveInputs(commandInputs, pers): pers['VIDedendum'] = commandInputs.itemById("VIDedendum").value -def generateGear(commandInputs): +def generateGears(commandInputs): gearType = commandInputs.itemById("DDType").selectedItem.name standard = commandInputs.itemById("DDStandard").selectedItem.name + rackParams = [ + commandInputs.itemById("VIModule").value, + commandInputs.itemById("VIPressureAngle").value, + commandInputs.itemById("VIHelixAngle").value, + commandInputs.itemById("BVHerringbone").value, + commandInputs.itemById("VILength").value, + commandInputs.itemById("VIWidth").value, + commandInputs.itemById("VIHeight").value, + commandInputs.itemById("VIBacklash").value, + commandInputs.itemById("VIAddendum").value, + commandInputs.itemById("VIDedendum").value + ] + externalGearParams = [ + commandInputs.itemById("ISTeeth").value, + commandInputs.itemById("VIModule").value, + commandInputs.itemById("VIPressureAngle").value, + commandInputs.itemById("VIHelixAngle").value, + commandInputs.itemById("VIBacklash").value, + commandInputs.itemById("VIAddendum").value, + commandInputs.itemById("VIDedendum").value, + commandInputs.itemById("VIWidth").value, + commandInputs.itemById("BVHerringbone").value + ] + internalGearParams = [ + commandInputs.itemById("ISTeeth").value, + commandInputs.itemById("VIModule").value, + commandInputs.itemById("VIPressureAngle").value, + commandInputs.itemById("VIHelixAngle").value, + -commandInputs.itemById("VIBacklash").value, + commandInputs.itemById("VIDedendum").value, + commandInputs.itemById("VIAddendum").value, + commandInputs.itemById("VIWidth").value, + commandInputs.itemById("BVHerringbone").value, + commandInputs.itemById("VIDiameter").value + ] + if (gearType == "Rack Gear"): if (standard == "Normal"): - gear = RackGear.createInNormalSystem( - commandInputs.itemById("VIModule").value, - commandInputs.itemById("VIPressureAngle").value, - commandInputs.itemById("VIHelixAngle").value, - commandInputs.itemById("BVHerringbone").value, - commandInputs.itemById("VILength").value, - commandInputs.itemById("VIWidth").value, - commandInputs.itemById("VIHeight").value, - commandInputs.itemById("VIBacklash").value, - commandInputs.itemById("VIAddendum").value, - commandInputs.itemById("VIDedendum").value - ) + return [RackGear.createInNormalSystem(*rackParams)] else: - gear = RackGear.createInRadialSystem( - commandInputs.itemById("VIModule").value, - commandInputs.itemById("VIPressureAngle").value, - commandInputs.itemById("VIHelixAngle").value, - commandInputs.itemById("BVHerringbone").value, - commandInputs.itemById("VILength").value, - commandInputs.itemById("VIWidth").value, - commandInputs.itemById("VIHeight").value, - commandInputs.itemById("VIBacklash").value, - commandInputs.itemById("VIAddendum").value, - commandInputs.itemById("VIDedendum").value - ) + return [RackGear.createInRadialSystem(*rackParams)] else: if (gearType == "External Gear"): if (standard == "Normal"): - gear = HelicalGear.createInNormalSystem( - commandInputs.itemById("ISTeeth").value, - commandInputs.itemById("VIModule").value, - commandInputs.itemById("VIPressureAngle").value, - commandInputs.itemById("VIHelixAngle").value, - commandInputs.itemById("VIBacklash").value, - commandInputs.itemById("VIAddendum").value, - commandInputs.itemById("VIDedendum").value, - commandInputs.itemById("VIWidth").value, - commandInputs.itemById("BVHerringbone").value - ) + return [HelicalGear.createInNormalSystem(*externalGearParams)] else: - gear = HelicalGear.createInRadialSystem( - commandInputs.itemById("ISTeeth").value, - commandInputs.itemById("VIModule").value, - commandInputs.itemById("VIPressureAngle").value, - commandInputs.itemById("VIHelixAngle").value, - commandInputs.itemById("VIBacklash").value, - commandInputs.itemById("VIAddendum").value, - commandInputs.itemById("VIDedendum").value, - commandInputs.itemById("VIWidth").value, - commandInputs.itemById("BVHerringbone").value - ) - else: + return [HelicalGear.createInRadialSystem(*externalGearParams)] + elif (gearType == "Internal Gear"): if (standard == "Normal"): - gear = HelicalGear.createInNormalSystem( - commandInputs.itemById("ISTeeth").value, - commandInputs.itemById("VIModule").value, - commandInputs.itemById("VIPressureAngle").value, - commandInputs.itemById("VIHelixAngle").value, - -commandInputs.itemById("VIBacklash").value, - commandInputs.itemById("VIDedendum").value, - commandInputs.itemById("VIAddendum").value, - commandInputs.itemById("VIWidth").value, - commandInputs.itemById("BVHerringbone").value, - commandInputs.itemById("VIDiameter").value - ) + return [HelicalGear.createInNormalSystem(*internalGearParams)] else: - gear = HelicalGear.createInRadialSystem( - commandInputs.itemById("ISTeeth").value, - commandInputs.itemById("VIModule").value, - commandInputs.itemById("VIPressureAngle").value, - commandInputs.itemById("VIHelixAngle").value, - -commandInputs.itemById("VIBacklash").value, - commandInputs.itemById("VIDedendum").value, - commandInputs.itemById("VIAddendum").value, - commandInputs.itemById("VIWidth").value, - commandInputs.itemById("BVHerringbone").value, - commandInputs.itemById("VIDiameter").value - ) - return gear - - -def moveGear(gear, commandInputs): + return [HelicalGear.createInRadialSystem(*internalGearParams)] + else: # gearType == "Planetary Gearset" + gears = [] + + params = externalGearParams.copy() + params[0] = commandInputs.itemById("ISSunTeeth").value + params[3] = -params[3] # Reverse the helix angle of the sun gear + sun = HelicalGear.createInNormalSystem(*params) + if ((commandInputs.itemById("ISPlanetTeeth").value) % 2 == 0): + sun.modelRotation = math.pi / commandInputs.itemById("ISSunTeeth").value + gears.append(sun) + + params = externalGearParams.copy() + params[0] = commandInputs.itemById("ISPlanetTeeth").value + planetAngle = 2 * math.pi / commandInputs.itemById("ISPlanets").value + for i in range(commandInputs.itemById("ISPlanets").value): + planet = HelicalGear.createInNormalSystem(*params) + planet.modelRotation = i * planetAngle + planet.modelOffsetXY = [(planet.pitchDiameter + sun.pitchDiameter) / 2.0, 0] + gears.append(planet) + + params = internalGearParams.copy() + params[0] = commandInputs.itemById("ISRingTeeth").value + gears.append(HelicalGear.createInNormalSystem(*params)) + return gears + + +def moveGear(gear, commandInputs, modelRotation = 0, modelOffsetXY = [0, 0]): + moveMatrix = adsk.core.Matrix3D.create() + moveMatrix.translation = adsk.core.Vector3D.create(modelOffsetXY[0], modelOffsetXY[1], 0) + rotateMatrix = adsk.core.Matrix3D.create() + rotateMatrix.setToRotation(modelRotation, adsk.core.Vector3D.create(0, 0, 1), adsk.core.Point3D.create(0, 0, 0)) + moveMatrix.transformBy(rotateMatrix) if (commandInputs.itemById("DDType").selectedItem.name != "Rack Gear"): - gear.transform = regularMoveMatrix(commandInputs) + moveMatrix.transformBy(regularMoveMatrix(commandInputs)) else: - gear.transform = rackMoveMatrix(commandInputs) - # Applies the movement in parametric design mode - if (adsk.core.Application.get().activeDocument.design.designType): - adsk.core.Application.get().activeDocument.design.snapshots.add() + moveMatrix.transformBy(rackMoveMatrix(commandInputs)) + gear.transform = moveMatrix def regularMoveMatrix(commandInputs): diff --git a/resources/planetary/16x16-disabled.png b/resources/planetary/16x16-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..1a85e2c7befdfca88f63dd5ed159419625db4451 GIT binary patch literal 2727 zcmV;Y3Rv}tP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b<(kmwn{Ld+J1SIz3uvX;;IewaT7W;d7uPUDM zAOi!UyCsc9{par{{=$bzNuiDNHdrh1(Lo1}Fua_fFzzJvxUU~_8;^c*1{hrmt(rew zT=OIP&Go?EgVM8K_%*_QEwoo&3#z^|!zgzr(a*D=^jav?Y1rW1-POdi&1>RtWqoay z0}5J;_ut~)p&d{v1{*2nssQ1*>*;~&Us7?j5ns={M=LAP7-g3y0OWDJ1E9PE^Z?fTPwb`I!_n11)_E-N{Wq6 ze+Cm1AXnoti_76_V7qYzTwX?*L3xo`CR~{UbzwI_nhHf~R7aaB!$r-N9a`oLT6&*X zjss^f1{V88jhzarC=cc`SD_TT`S?O(-!S&e=w$$KRVV*%dLx_Yc zYXLxny$zfp1qP%gWyq3r%#H{+dJq)hIV;Tx43IHg;3R9MEDOg78SIT`9F4hb*mCbi zZUPYqAmzYKP!VKlZJ-~gJv0=JGTInpjWb@DV4_u4TVt(twkNshl+(^Q>zwm0xagJF z-gxVs_dfU-I4I;m6Krt7hY(_95wTIkS`qUjdJ-pV&Y_iQR`y6sC zTvS1tD7LubODM6DsK^vmS5s|u)z?sCgVvgAx|wF1YrcgR4{M9nkLwRuqs1Bzrusa0 zSVOOHZZAPSotVxU7-LOf+;s*ZXzrXzPg-+lu5%^>BPa~RNz=Izg*s!PP*-Bp=x}#2 z_glOP<9~}c{x9Z4r|$n?PJp^k-oCI_dY#LIu^ELOQ>hSr7_UAG_OTbW__b|-Z5B=iYM6+T}J!ZPfjN{ouP5-v+1wpl%wE0#(PF zq5C&Hg;cg-mO*JOWP0J9t=_(Y--nZsXf9^DR;}IhulBW&0~y0aK911U^3c?E#m##p+OfcBgwYHc`bw@G?y=9ip)M$wWd)EAvEA+9Qj-oPKX##rv#}qw0A4 zTx$*Q!kc5<#6zOwC+jHFWp029zqylJ&d1G=a9dviiCtk4a)T z0eXC<=vz@p|llRbuhW~3z{?}DK3tJYr(;f#j1mgv#t)Vf*|+-;^yY0=prTlFDbN$@!+^0 z@9sVB-T^|R!c?PeENX27fHn%GFyh1<-gBV3rVy2!*FJ|C5zV6}U>s^Frd7t}p z^ecIj0X~spDa7Z*69!$7_>t?f%Ws^E4huXpXk=3J#6e=Q z*uioKvy!0_PZNg~Rik_%>$1Xmi?dp(vDQ8L3j=v=CCzo3A;htS1dga5(rZq33})J+P+fbJLD{ul##c7bNyw!e>U zyLkfmpMfi_?XNa~*-z5zZ7qBR3~U1z*KJMS11@)f;U`@(BuDbo6bc34{fxdT2MpZ; zeQR!St$mz602%6P`35*R1jdV$z3%bu-p=0sJ=5y%2gLSr$XOl9o&W#<24YJ`L;wH) z0002_L%V+f000SaNLh0L02UqXw`KT#-DS}_xrm<>XvPqjRYkMqmVHg*&l;;i>;_$_C^RIyeoE{NfdgU zbIIHq1TN>zSTFW6h>DgD+tm3gge3_5hnj4t+sekmtM~ry@Ao~Y7b)E8d37Fm4t(I@ zA^b-}{rmjdwW~XrI7>vE0YFWEGqtHd{`~9fy*-0TZJuk*XmOyU;m$SZymMcsY5Egj zb*g&B%wq4|__~Jr$CrVqec2 zjz)`zUVx#S2oEtcgt;-Oexs^CSCe#%iJF{qTbbwy7Jf`sSJcd_>W>6Ez|5Rw=4MqJ z1F&EK(ll65T_?1GopUPvdI!a|0SmrRy)U@MdAT zmdQkek@tIqB_^U(aa`>N5UJ`pRec9$cQXvBsm;S^A+E&jU3>b*%h$^<6R;kJ0Dw$w zxmry+=PoUcRLb#ofG!c}0f592aG8a7MHxSt>nh9ufcI`8uEt}|xeFR}g_v$9*yTg- z9Z>*t$A;g{5aD4no8S<_sSv_vFm38T@TLQR&hGu+M?TsLv&Ti`B?A5W+V0-(0ATRo z+mUnbX;u3+s7~?1($$k9(iVAttZvP!IsiC4R9JtbQa&3+QLA(A{t&{o4-fY}2mp~6 zVWyod+`9Pt@@WEqkB;#&k=)h25@cLt~bivqZEBFf+r&pgOg< hw0x%b;QMK9{%;h&e?(TtIphEU002ovPDHLkV1ktMBPaj> literal 0 HcmV?d00001 diff --git a/resources/planetary/16x16.png b/resources/planetary/16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..1a85e2c7befdfca88f63dd5ed159419625db4451 GIT binary patch literal 2727 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 literal 0 HcmV?d00001 diff --git a/resources/planetary/32x32.png b/resources/planetary/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..22f8a8118bf54689ed711f1610bfdf9958aa6e09 GIT binary patch literal 5761 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 literal 0 HcmV?d00001 diff --git a/resources/planetary/32x32@2x.png b/resources/planetary/32x32@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8c84bd25db2d9dbd08e28166af768cf6710d67cc GIT binary patch literal 15942 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 literal 0 HcmV?d00001