A méretek mm-ben vannak most is: Szerintem most is gyorsan meglesz, úgyhogy hajrá! Update: két nanoszekundum alatt meglett a megfejtés, granulálok a versenyzőknek. Tibb kért belőle egy háromszög alakú verziót, az ilyen lett: Update #20180921: elkészült a print, szerintem a 90 mm-es átmérő az ideál (=körbejártam a lakást és mindent megmértem, ami csak kicsit is üveg formájú volt). A modellt viheted a youmagine.com-ról (feltettem 80-120 mm-ig 5 mm-es lépésközzel verziókat, vagy csinálhatsz magadnak spécit, ha birizgálod a Fusion 360 design d_bottle paraméterét). Ilyen lett a végtermék: ]]>
Monthly Archives: September 2018
Songwhip
songwhip.com oldalt: megkeresi neked a tracket minden streaming music service-ben és kiteszi a linkjeiket egy listába. Ordít róla, hogy ebből Alfred workflowt kell csinálni (Ottó régóta kérte már ezt tőlem, plusz tök jó érzés pont pénteken kipipálni egy pet projektet). Csak egy kis Python kell hozzá XPath-tal és már ki is túrtuk a lényeget:
#!/usr/bin/python import sys, os, json, requests from lxml import html # get url from clipboard url = os.getenv('cb') query = 'https://songwhip.com/' + url page = requests.get(query) url = page.url tree = html.fromstring(page.content) data = { "items": [] } mods = { "cmd": { "subtitle": "Copy link to clipboard" }, "alt": { "subtitle": url } } song = tree.xpath('/html/head/title/text()')[0] data["items"].append({"valid": True, "uid": "00songwhip", "title": "SongWhip", "subtitle": song, "arg": url, "icon": {"path": "icon.png"}, "mods": mods}) items = tree.xpath('//a[@role="button"]') i = 0 for item in items: i = i + 1 title = item.text url = item.get("href") file_icon = "icons/icon.png" if os.path.isfile("icons/" + title + ".png"): file_icon = "icons/" + title + ".png" mods = { "cmd": { "subtitle": "Copy link to clipboard" }, "alt": { "subtitle": url } } data["items"].append({"uid": str(i).rjust(2,"0") + title, "title": title, "subtitle": song, "arg": url, "icon": {"path": file_icon}, "mods": mods}) sys.stdout.write(json.dumps(data))
3D nyomtatás: boxgyár
Kinyomtattam egyet, aztán rájöttem, hogy ez a fültisztító pálcikáknak is jó lenne… meg más méretben még egy csomó mindennek, úgyhogy a parametrikus Fusion 360 designnak hála, gyorsan csináltam is két másikat: Innentől nincs messze a megalomán állat fázis, amikor csillió méretű dobozt akarsz azonnal. Persze minden codervérű lélekben azonnal behúz az utálkozás trigger, amint egynél többször kell neki a “beállítom a magasság paramétert + elindítom az STL exportálást” workflowt végrehajtania. Szerencsére a Fusion 360-hoz van cuki API, onnan meg már csak egyetlen lépés, hogy egy script exportálja helyettünk a csitrillió méretű dobozt STL-be. A design hierarchia egyszerű, mint egy faék: egy komponensben lakik két body, az egyik a doboz, a másik a kupak: Erre simán lehet lőni mondjuk Pythonnal:
import adsk.core, adsk.fusion, adsk.cam, traceback def dumpSTL(design, body, filename): exportMgr = design.exportManager stlExportOptions = exportMgr.createSTLExportOptions(body, filename) stlExportOptions.meshRefinement = adsk.fusion.MeshRefinementSettings.MeshRefinementHigh stlExportOptions.sendToPrintUtility = False exportMgr.execute(stlExportOptions) def run(context): ui = None try: app = adsk.core.Application.get() ui = app.userInterface design = adsk.fusion.Design.cast(app.activeProduct) folder = '/Users/fns/Desktop/' parentCompName = 'stick box' # get parameters h_box = design.userParameters.itemByName('h_box') w_box = design.userParameters.itemByName('w_box') # locate our component allComp = design.allComponents for comp in allComp: if comp.name == parentCompName: bodies = comp.bRepBodies for body in bodies: if body.name == "box": body_box = body else: body_cap = body # dump cap filename = folder + body_cap.parentComponent.name + " - " + body_cap.name + " " + w_box.expression + '.stl' dumpSTL(design, body_cap, filename) # dump all boxes for h in range(10, 100, 10): h_box.expression = str(h) adsk.doEvents() filename = folder + body_box.parentComponent.name + " - " + body_box.name + " " + w_box.expression + ' - ' + h_box.expression + '.stl' dumpSTL(design, body_box, filename) ui.messageBox('Finished.', 'exportBoxes') except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()), 'exportBoxes')