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.json3├── __init__.py4└── MyPlugin.pyplugin.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 Extension2from UM.Application import Application3from UM.Logger import Logger45class MyPlugin(Extension):6def __init__(self):7super().__init__()8Application.getInstance().getOutputDeviceManager().outputDevicesChanged.connect(9self._onOutputDevicesChanged10)11Application.getInstance().getMachineManager().globalContainerChanged.connect(12self._onGlobalSettingsChanged13)1415def _onOutputDevicesChanged(self):16Logger.log("i", "Output device changed")1718def _onGlobalSettingsChanged(self):19Logger.log("i", "Settings updated")__init__.py
1from. import MyPlugin23def getMetaData():4return {}56def 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 Application2from cura.Machines.MachineManager import MachineManager34class GCodeModifier(Extension):5def __init__(self):6super().__init__()7self.app = Application.getInstance()8self.app.getBackend().scene.sceneChanged.connect(self._onSceneChanged)910def _onSceneChanged(self, source):11# G-code üretilmeden önce tetiklenir12Logger.log("i", "Scene changed, G-code will regenerate")1314def _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ştur2mkdir -p ~/.local/share/cura/plugins/MyPlugin34# 2. Dosyaları kopyala5cp plugin.json MyPlugin.py __init__.py ~/.local/share/cura/plugins/MyPlugin/67# 3. Cura'yı yeniden başlat8# Eklenti "Extensions" menüsünde görünürSı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.
0 yorum