From de353e7d04bcf128af643148a684e92a479ac43a Mon Sep 17 00:00:00 2001 From: Nicolas Predella Date: Wed, 20 May 2026 16:17:07 +0300 Subject: [PATCH] bgcode support linux --- core/nodeslicer/nodes.py | 70 +++++++++++++++++++++++++----- doc/NODES.md | 1 + gcode_snippets/mk3s_header.bgcode | Bin 0 -> 90 bytes infra/bin/bgcode | Bin 0 -> 196248 bytes infra/networking/bgcode.py | 41 +++++++++++++++++ test.bgcode | 0 test.gcode | 4 ++ 7 files changed, 106 insertions(+), 10 deletions(-) create mode 100644 gcode_snippets/mk3s_header.bgcode create mode 100755 infra/bin/bgcode create mode 100644 infra/networking/bgcode.py create mode 100644 test.bgcode create mode 100644 test.gcode diff --git a/core/nodeslicer/nodes.py b/core/nodeslicer/nodes.py index 979fcd5..638fd20 100644 --- a/core/nodeslicer/nodes.py +++ b/core/nodeslicer/nodes.py @@ -1,6 +1,7 @@ from __future__ import annotations import os import subprocess +from subprocess import CompletedProcess import tempfile import shlex import shutil @@ -11,6 +12,7 @@ import bpy import numpy as np from mathutils import Euler + from .bpy_ns_types import NfIntProperty, NfStringProperty, NfEnumProperty, NfBoolProperty, notify_tree_changed from ...registry import register_class @@ -19,6 +21,7 @@ from ..slice import Pather, slice_at_range, SlicePaths from ...infra.blender.blender_mesh_capture import SlicingCollection, SlicingObject, capture_mesh_edges, SlicingGroup from ...infra.blender.blender_bridge import get_all_children from ...infra.blender.blender_slice_nodes_generic import SliceNode, resolve_input +from ...infra.prusaslicer_profiles import ConfigWriter from ...infra.prusaslicer_profiles.cache import LocalCache from ...infra.prusaslicer_profiles.models import Profile from ...infra.networking.airtable_backend import AirtableRecord @@ -968,7 +971,6 @@ class SLICENODE_PrinterList(SliceNode): @register_class class SLICENODE_GcodeToFile(ExecSliceNode): bl_label = "Gcode To File" - button_label = "Generate File" def init(self, context): @@ -976,17 +978,49 @@ class SLICENODE_GcodeToFile(ExecSliceNode): self.add_input("SLICESOCK_Gcode") self.add_input("SLICESOCK_FilePath", "Filename") + def draw_buttons(self, context, layout): + super().draw_buttons(context, layout) + def evaluate(self, operator=None): + from ...infra.networking.bgcode import convert_to_bgcode + from pathlib import Path + gcode: str = resolve_input(self.inputs.get("Gcode")) filename: str = resolve_input(self.inputs.get("Filename")) + if not gcode: + if operator: operator.report({'ERROR'}, "No Gcode to save") + return 'error' + if not filename: + if operator: operator.report({'ERROR'}, "No Filename provided") + return 'error' - filepath = bpy.path.abspath(filename) - os.makedirs(os.path.dirname(filepath) or ".", exist_ok=True) + # User's requested logic: .split('.')[0] + filepath_abs = bpy.path.abspath(filename) + dirname = os.path.dirname(filepath_abs) + basename = os.path.basename(filepath_abs) + name_part = basename.split('.')[0] + os.makedirs(dirname, exist_ok=True) - with open(filepath, "w", encoding="utf-8", newline="\n") as f: - f.write(gcode) + # Detect binary trigger in gcode comments + # Looking for "; binary_gcode = 1" + is_binary = "; binary_gcode = 1" in gcode - return 'ok' + try: + if is_binary: + filepath = os.path.join(dirname, name_part + ".bgcode") + content = convert_to_bgcode(gcode, name_part, True) + with open(filepath, "wb") as f: + f.write(content) + if operator: operator.report({'INFO'}, f"Binary G-code generated at {filepath}") + else: + filepath = os.path.join(dirname, name_part + ".gcode") + with open(filepath, "w", encoding="utf-8", newline="\n") as f: + f.write(gcode) + if operator: operator.report({'INFO'}, f"G-code saved to {filepath}") + return 'ok' + except Exception as e: + if operator: operator.report({'ERROR'}, str(e)) + return 'error' @register_class class SLICENODE_GcodeToTextBlock(ExecSliceNode): @@ -1147,12 +1181,19 @@ class ExecSliceNode_DatabaseSubmit(ExecSliceNode): return gcode, filename, fields def evaluate(self, operator=None): + from ...infra.networking.bgcode import convert_to_bgcode import tempfile import os from pathlib import Path gcode, filename, fields = self._prepare_submission(operator) if not gcode: return 'error' + + # Detect binary trigger in gcode comments + is_binary = "; binary_gcode = 1" in gcode + + name_part = filename.split('.')[0] + filename = name_part + ".bgcode" if is_binary else ".gcode" token_path = getattr(self, self._token_prop_name, "") token = "" @@ -1172,10 +1213,16 @@ class ExecSliceNode_DatabaseSubmit(ExecSliceNode): temp_dir = tempfile.TemporaryDirectory() temp_path = Path(temp_dir.name) / filename - with open(temp_path, 'w', encoding='utf-8') as f: - f.write(gcode) try: + if is_binary: + content = convert_to_bgcode(gcode, name_part, True) + with open(temp_path, "wb") as f: + f.write(content) + else: + with open(temp_path, 'w', encoding='utf-8') as f: + f.write(gcode) + record_id = self._submit_to_db(token, fields, temp_path) if operator: operator.report({'INFO'}, f"Submitted to {self._db_name} (Record: {record_id})") return 'ok' @@ -1340,16 +1387,18 @@ class SLICENODE_PrusaslicerSlice(ExecSliceNode): # Prepare overrides for generate_conf_writer # The format expected by generate_conf_writer is overrides={'key': {'value': 'val'}} writer_overrides = {k: {'value': v} for k, v in overrides.items()} - writer_overrides['binary_gcode'] = {'value': '0'} # Generate the ConfigWriter - conf_writer = cache.generate_conf_writer( + conf_writer: ConfigWriter = cache.generate_conf_writer( printer_id, filament_ids, print_id, overrides=writer_overrides ) + binary_gcode_value = conf_writer.config_dict['binary_gcode'] + conf_writer.config_dict['binary_gcode'] = '0' + # Prepare 3mf path temp_dir = Path(tempfile.gettempdir()) output_path = temp_dir / f"tmp.3mf" @@ -1397,6 +1446,7 @@ class SLICENODE_PrusaslicerSlice(ExecSliceNode): if gcode_path.exists(): with open(gcode_path, 'r', encoding='utf-8') as f: self.gcode_result = f.read() + self.gcode_result += f"\n; binary_gcode = {binary_gcode_value}\n" output_path.unlink() diff --git a/doc/NODES.md b/doc/NODES.md index c77fcc6..9eab4a3 100644 --- a/doc/NODES.md +++ b/doc/NODES.md @@ -74,6 +74,7 @@ All nodes are found in the **Add (Shift+A)** menu under the **SliceNodes** categ - **Header**: Toggles the generation of standard NodeSlicer G-code headers and units setup. - **Load Gcode**: Reads a G-code file from disk. - **Gcode to File**: Writes G-code string to a file on disk. + - **Automatic Binary Conversion**: If the G-code contains the comment `; binary_gcode = 1`, the node automatically converts the output to Prusa's binary G-code format (`.bgcode`) using MeatPack encoding and Heatshrink compression. - **Baserow Submit**: Sends G-code and metadata to a Baserow database. - **Host**: Baserow host URL. - **Token File**: Path to a file containing the Baserow API token. diff --git a/gcode_snippets/mk3s_header.bgcode b/gcode_snippets/mk3s_header.bgcode new file mode 100644 index 0000000000000000000000000000000000000000..d4aeec0fdd93e44a0461184f850d5fccb0c9ecc1 GIT binary patch literal 90 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
8jhSYw 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 literal 0 HcmV?d00001 diff --git a/infra/networking/bgcode.py b/infra/networking/bgcode.py new file mode 100644 index 0000000..463e1bd --- /dev/null +++ b/infra/networking/bgcode.py @@ -0,0 +1,41 @@ +import os +import subprocess +import tempfile +import shutil +from pathlib import Path + +def convert_to_bgcode(gcode: str, name_part: str, compress: bool = True) -> bytes: + """ + Converts a G-code string to binary BGCode using the internal bgcode tool. + Returns the binary content of the converted file. + """ + addon_dir = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) + bgcode_bin = os.path.join(addon_dir, "infra", "bin", "bgcode") + + if not os.path.exists(bgcode_bin): + raise FileNotFoundError(f"bgcode binary not found at {bgcode_bin}") + + with tempfile.TemporaryDirectory() as tmpdir: + tmp_gcode = Path(tmpdir) / (name_part + ".gcode") + tmp_gcode.write_text(gcode, encoding="utf-8") + + # Run conversion: bgcode + cmd = [bgcode_bin, str(tmp_gcode)] + if compress: + # Recommended settings for true binary bgcode + cmd.extend([ + "--slicer_metadata_compression=1", + "--gcode_compression=3", + "--gcode_encoding=2" + ]) + + res = subprocess.run(cmd, capture_output=True, text=True) + if res.returncode != 0: + err_msg = res.stderr.strip() or res.stdout.strip() or "Unknown error" + raise RuntimeError(f"bgcode conversion failed: {err_msg}") + + tmp_bgcode = tmp_gcode.with_suffix(".bgcode") + if tmp_bgcode.exists(): + return tmp_bgcode.read_bytes() + else: + raise FileNotFoundError("Failed to find generated .bgcode file") diff --git a/test.bgcode b/test.bgcode new file mode 100644 index 0000000..e69de29 diff --git a/test.gcode b/test.gcode new file mode 100644 index 0000000..a58dc90 --- /dev/null +++ b/test.gcode @@ -0,0 +1,4 @@ +; printer_model = MK3S +; printer_notes = +; total filament used [g] = 0 +G1 X10