Library: Format-Konvertierung beim Import (.dwg/.obj/.fbx/.dae/.stl/...)

User kann jetzt im Symbole-Tab Dateien in vielen Formaten waehlen — Rhino
konvertiert automatisch nach .3dm via _-Import + File3dm.Write.

library.py — convert_to_3dm_via_import():
- Snapshot der existierenden Object-IDs im aktiven Doc
- User-Selection sichern
- _-Import scripted ausfuehren → neue Objekte in Doc
- Diff -> neue Objekte sammeln
- BoundingBox.Min als Origin → in File3dm packen
- f3.Write nach library/assets/<name>.3dm
- Neue Objekte aus Doc wieder loeschen + User-Selection restoren
- sticky 'dossier_library_import_busy' + 'dossier_swisstopo_busy' damit
  unsere Listener nichts cascaden waehrend Doc kurzzeitig die Importe haelt

rhinopanel.py — _add_library_file():
- .3dm: copy_to_assets (wie bisher)
- .dwg/.dxf/.obj/.fbx/.dae/.stl/.3ds/.skp/.iges/.step/.ply: konvertieren
- Sonst LIBRARY_ERROR

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-25 18:45:58 +02:00
parent 68b9d14453
commit 827bd8d4d7
2 changed files with 150 additions and 14 deletions
+19 -14
View File
@@ -1224,20 +1224,28 @@ class EbenenBridge(panel_base.BaseBridge):
path = dlg.FileName or ""
if not path: return
ext = (path.split(".")[-1] if "." in path else "").lower()
if ext != "3dm":
# TODO: konvertieren via temporaerer RhinoDoc-Import
# Phase 1: nur .3dm direkt unterstuetzt
print("[PROJECT-SETTINGS] Format '.{}' wird in dieser "
"Version noch nicht konvertiert — bitte in Rhino "
"oeffnen + als .3dm speichern".format(ext))
import os
base = os.path.basename(path)
stem = os.path.splitext(base)[0]
rel = None
if ext == "3dm":
# Direkt kopieren
rel = library.copy_to_assets(path)
elif ext in ("dwg", "dxf", "obj", "fbx", "dae",
"stl", "3ds", "skp", "iges", "igs",
"step", "stp", "ply"):
# Konvertieren via Rhino-Import
rel = library.convert_to_3dm_via_import(
path, stem + "_" + variant)
else:
self.send("LIBRARY_ERROR", {
"msg": "Format .{} noch nicht unterstuetzt. "
"Konvertiere in Rhino zu .3dm.".format(ext),
"msg": "Format .{} wird nicht unterstuetzt.".format(ext),
})
return
rel = library.copy_to_assets(path)
if not rel:
print("[PROJECT-SETTINGS] copy_to_assets failed")
print("[PROJECT-SETTINGS] add file failed")
self.send("LIBRARY_ERROR", {
"msg": "Konnte Datei nicht importieren — siehe Log."})
return
if target_id:
# Bestehendes Item updaten
@@ -1250,10 +1258,7 @@ class EbenenBridge(panel_base.BaseBridge):
break
library.save_manifest(m)
else:
# Neues Item
import os
base = os.path.basename(path)
stem = os.path.splitext(base)[0]
# Neues Item — stem aus dem Pfad oben bereits berechnet
import uuid as _uuid
new_id = "obj-" + _uuid.uuid4().hex[:10]
item = {