Рубрики
Без рубрики

Spotify Keyring Generator

Учебное пособие по использованию блендера и Python для процедурного генерирования STL для 3D -печати Этот миг … Tagged с Python, Music.

Это также может помочь, если вы изо всех сил пытаетесь использовать Python с Blender.

Самый простой способ понять команды Python Blender – это открыть графический интерфейс в рабочее пространство сценариев. Здесь любая модификация, внесенная в пользовательский интерфейс Blender, отображается в консоли.

Например, при удалении куба по умолчанию это вывод на консоли:

Очистка рабочей области

Первое, что вы захотите сделать, это удалить все в рабочем пространстве по умолчанию. Это гарантирует, что мы начинаем с чистого сланца без кабины. Обратите внимание, что мы должны импортировать модуль Python Blender, чтобы иметь возможность взаимодействовать с Blender.

import bpy
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()
bpy.ops.object.select_all(action='DESELECT')

Создание базы

Говоря о кубиках, первое, что нужно сделать, это добавить куб для базы. Как объяснялось ранее, чтобы найти эти команды, я добавлю куб и масштабируйте его в размер, который выглядит хорошо, а затем скопирую журнал из консоли.

bpy.ops.mesh.primitive_cube_add(enter_editmode=False, align='WORLD', location=(0, 0, 0))
bpy.context.object.scale = (0.005, 0.03, 0.001)

Руть керинг

Чтобы сделать отверстие для ключи, я добавлю цилиндр, а затем вычтя его из основания с помощью логического модификатора. При создании куба я скопировал всю команду из терминала, однако, чтобы упростить код, большинство из этих аргументов фактически являются знаниями по умолчанию.

Я также могу объединить перевод и масштабирование объекта в функцию добавления. Если в каких -либо сомнениях консоль выведет фактические аргументы, которые были проанализированы при запуска сценария.

bpy.ops.mesh.primitive_cylinder_add(radius=0.003, depth=0.005, location=(.04, -0.024, 0))

Эта линия фактически была запускана так:

Для следующего шага будет полезно отслеживать куб и цилиндр. Вы не можете назначать объекты переменным при их создании, однако, поскольку они являются единственными объектами в сцене, мы можем ссылаться на них так:

cube = bpy.data.objects['Cube']
cylinder = bpy.data.objects['Cylinder']

Затем мы можем создать и применить логический модификатор:

bool = cube.modifiers.new(type="BOOLEAN", name="bool")
bool.object = cylinder
bool.operation = 'DIFFERENCE'
bpy.context.view_layer.objects.active = cube
bpy.ops.object.modifier_apply(modifier="bool")

После применения модификатора цилиндр можно удалить, чтобы мы не случайно экспортировали его с помощью STL:

bpy.ops.object.select_all(action='DESELECT')
cylinder.select_set(True)
bpy.ops.object.delete()

Получение кода Spotify

Spotify не имеет API для его кодов, однако их веб -сайт, Коды Spotify выполняет запрос на этот URL:

https://scannables.scdn.co/uri/plain/{format}/{background-color}/{bar-color}/{resolution}/{URI}

Для этой цели мы хотим SVG, чтобы его можно было использовать в Blender, поэтому наш базовый URL будет выглядеть так:

https://scannables.scdn.co/uri/plain/svg/ffffff/black/640/

Тогда все, что нам нужно сделать, это добавить песню или плейлист URI до конца.

Blender может открыть SVG только из файла, поэтому мы должны кэшировать его в файл, как это:

import requests

URI = input("Enter a song URI")

r = requests.get("https://scannables.scdn.co/uri/plain/svg/ffffff/black/640/" + URI, stream=True)

with open("SpotifyCodeDownload.svg", 'wb') as f:
    for chunk in r.iter_content(1024): 
        f.write(chunk)

Тогда мы можем импортировать его в блендер:

bpy.ops.import_curve.svg(filepath="SpotifyCodeDownload.svg", filter_glob="*.svg")

Обработка SVG

Эйк! SVG импортируется как сотни отдельных кривых, и обойти это никакого пути.

Прежде всего, кривая, называемая «кривой», представляет собой прямоугольник, окружающий код, поэтому мы можем удалить это. Не забудьте отменить все выбранные из них, прежде чем начать выбирать.

bpy.ops.object.select_all(action='DESELECT')
bpy.data.objects['Curve'].select_set(True)
bpy.ops.object.delete()

Затем мы можем объединить остальные кривые в одну сетку, это можно сделать, выбрав все кривые в коллекции, названной в честь файла SVG.

Чтобы выполнить большинство операций в блендере, вам необходимо иметь активный объект, поэтому после выбора коллекции мы сделаем кривую. 001 Активный объект.

for obj in bpy.data.collections['SpotifyCodeDownload.svg'].all_objects:
        obj.select_set(True)


bpy.context.view_layer.objects.active = bpy.data.objects["Curve.001"]

bpy.ops.object.join()

bpy.ops.object.convert(target='MESH')

bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY', center='MEDIAN')

Сцена в настоящее время выглядит так:

Таким образом, последнее, что нам нужно сделать, это переместить SVG в просмотре и скопировать вывод. Первые две линии этого экстракта показывают абсолютное вращение на оси Z.

curve = bpy.data.objects["Curve.001"]

curve.rotation_euler[2] = 1.5708

bpy.ops.transform.resize(value=(0.277968, 0.277968, 0.277968))


bpy.ops.transform.translate(value=(-0.0734364, -0.0216113, 0.0009043))

А затем выдавливать:

bpy.ops.object.mode_set(mode='EDIT')

bpy.ops.mesh.select_all(action='SELECT')

bpy.ops.mesh.extrude_region_move(MESH_OT_extrude_region= TRANSFORM_OT_translate={"value":(0, 0, 0.000875622), "orient_type":'NORMAL'})

bpy.ops.object.mode_set(mode='OBJECT')

Экспорт

Наконец, мы можем экспортировать все как STL, так что это может быть 3D -напечатано:

bpy.ops.object.select_all(action='SELECT')
bpy.ops.export_mesh.stl(filepath="out.stl", use_selection=True, global_scale=1000)

И вот и все, программа может быть запущена с этой командой:

blender -b --python BlenderStl.py

Полный код

Вы можете найти весь код здесь:

https://github.com/artomweb/Spotify-Code-to-Stl

Оригинал: “https://dev.to/artomweb/spotify-keyring-generator-491p”