Sıfırdan Slicer Eklentisi: Cura veya PrusaSlicer'ı Genişletme

3D yazıcı slicerları (Cura, PrusaSlicer) kendi eklentileriyle genişletilebilir. Burada Cura için basit bir eklenti yazacağız; PrusaSlicer'ın Lua tabanlı sistemi benzer mantıkla çalışır.

Cura eklentisi özü: bir Python paketi, belirli klasör yapısında, manifest dosyası ve hook'larla yazıcı kontrolünü etkileyebilir. Örneğin G-code'a otomatik satır eklemek, baskı parametrelerini değiştirmek veya UI'a buton eklemek mümkün.

Klasör Yapısı

Cura eklentileri ~/.local/share/cura/plugins/ (Linux) veya %APPDATA%/cura/plugins/ (Windows) altında yer alır. Temel yapı:

1MyPlugin/
2├── plugin.json
3├── __init__.py
4└── MyPlugin.py

plugin.json (Manifest)

1{
2"name": "My Custom Plugin",
3"author": "Your Name",
4"version": "1.0.0",
5"description": "Adds custom header to G-code",
6"api": "7.0",
7"type": "extension",
8"supported_sdk_versions": ["8.0.0"],
9"entry_point": "MyPlugin"
10}

MyPlugin.py (Ana Kod)

1from UM.Extension import Extension
2from UM.Application import Application
3from UM.Logger import Logger
4
5class MyPlugin(Extension):
6def __init__(self):
7super().__init__()
8Application.getInstance().getOutputDeviceManager().outputDevicesChanged.connect(
9self._onOutputDevicesChanged
10)
11Application.getInstance().getMachineManager().globalContainerChanged.connect(
12self._onGlobalSettingsChanged
13)
14
15def _onOutputDevicesChanged(self):
16Logger.log("i", "Output device changed")
17
18def _onGlobalSettingsChanged(self):
19Logger.log("i", "Settings updated")

__init__.py

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1from. import MyPlugin
2
3def getMetaData():
4return {}
5
6def register(app):
7return MyPlugin.MyPlugin()

G-code Modifikasyonu (Gerçek Örnek)

Baskı başında özel yorum eklemek için SceneNode listener'ı kullanırız:

1from UM.Application import Application
2from cura.Machines.MachineManager import MachineManager
3
4class GCodeModifier(Extension):
5def __init__(self):
6super().__init__()
7self.app = Application.getInstance()
8self.app.getBackend().scene.sceneChanged.connect(self._onSceneChanged)
9
10def _onSceneChanged(self, source):
11# G-code üretilmeden önce tetiklenir
12Logger.log("i", "Scene changed, G-code will regenerate")
13
14def _modifyGCode(self, gcode_data):
15lines = gcode_data.split("\n")
16lines.insert(1, "; Custom header added by plugin")
17return "\n".join(lines)

Kurulum ve Test

1# 1. Eklenti klasörünü oluştur
2mkdir -p ~/.local/share/cura/plugins/MyPlugin
3
4# 2. Dosyaları kopyala
5cp plugin.json MyPlugin.py __init__.py ~/.local/share/cura/plugins/MyPlugin/
6
7# 3. Cura'yı yeniden başlat
8# Eklenti "Extensions" menüsünde görünür

Sık Yapılan Hata

Cura sürümü ve SDK versiyonu uyumsuzsa eklenti yüklenmez. plugin.json'daki api ve supported_sdk_versions her zaman kurulu Cura sürümüyle eşleşmeli. Cura Help About'tan SDK sürümünü kontrol et.

bknz: 3D Baskı Teknolojisinde Yazılım ve Kontrol Sistemleri

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz