Stempelstile-Tab in ProjectSettings (Manager analog Raumstile)
Beide Stempel-Familien (Raum-Stempel + Bilanz-Stempel) sind jetzt konsistent verwaltbar in den Project-Settings. Backend: - elemente.py: DUPLICATE_STEMPEL_STIL + REORDER_STEMPEL_STILE handlers - rhinopanel.py ProjectSettings-Bridge: - stempel_stile in params (initial) - 4 neue dispatch-Handler (SAVE/DELETE/DUPLICATE/REORDER_STEMPEL_STIL) - direkter Dispatch zu elemente.load/save_stempel_stile (kein Roundtrip) - STEMPEL_STILE_UPDATED-Message nach jeder Op Frontend: - rhinoBridge.js: reorderStempelStile + duplicateStempelStil exports - ProjectSettingsDialog: - Neuer Tab "Stempelstile" parallel zu "Raumstile" - Drag-Reorder via HTML5 native, Inline-Rename, Duplicate, Delete - Mini-Preview: Header + Anzahl aktiver Show-Flags - Name wird mit Font/Bold/Italic des Stils gerendert als Vorschau
This commit is contained in:
@@ -6917,6 +6917,10 @@ class ElementeBridge(panel_base.BaseBridge):
|
||||
self._cmd_delete_stempel_stil(p)
|
||||
elif t == "APPLY_STEMPEL_STIL":
|
||||
self._cmd_apply_stempel_stil(p)
|
||||
elif t == "DUPLICATE_STEMPEL_STIL":
|
||||
self._cmd_duplicate_stempel_stil(p)
|
||||
elif t == "REORDER_STEMPEL_STILE":
|
||||
self._cmd_reorder_stempel_stile(p)
|
||||
elif t == "OPEN_ELEMENTE_UEBERSICHT":
|
||||
try:
|
||||
import elemente_uebersicht
|
||||
@@ -9339,6 +9343,46 @@ class ElementeBridge(panel_base.BaseBridge):
|
||||
stil.get("name"), n))
|
||||
self._send_state()
|
||||
|
||||
def _cmd_duplicate_stempel_stil(self, p):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
if doc is None: return
|
||||
sid = (p.get("id") or "").strip()
|
||||
if not sid: return
|
||||
stile = load_stempel_stile(doc)
|
||||
src = next((s for s in stile if s.get("id") == sid), None)
|
||||
if src is None: return
|
||||
new_name = (p.get("newName") or "").strip() or (
|
||||
"{} (Kopie)".format(src.get("name", "Stil")))
|
||||
new_stil = dict(src)
|
||||
new_stil["id"] = "stestil_" + uuid.uuid4().hex[:8]
|
||||
new_stil["name"] = new_name
|
||||
try:
|
||||
i = next(j for j, s in enumerate(stile) if s.get("id") == sid)
|
||||
stile.insert(i + 1, new_stil)
|
||||
except StopIteration:
|
||||
stile.append(new_stil)
|
||||
save_stempel_stile(doc, stile)
|
||||
print("[ELEMENTE] Stempel-Stil '{}' dupliziert -> '{}'".format(
|
||||
src.get("name"), new_name))
|
||||
self._send_state()
|
||||
|
||||
def _cmd_reorder_stempel_stile(self, p):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
if doc is None: return
|
||||
new_order = p.get("ids") or []
|
||||
if not isinstance(new_order, list) or not new_order: return
|
||||
stile = load_stempel_stile(doc)
|
||||
by_id = {s.get("id"): s for s in stile if s.get("id")}
|
||||
ordered = []; seen = set()
|
||||
for i in new_order:
|
||||
if i in by_id and i not in seen:
|
||||
ordered.append(by_id[i]); seen.add(i)
|
||||
for s in stile:
|
||||
if s.get("id") and s["id"] not in seen:
|
||||
ordered.append(s); seen.add(s["id"])
|
||||
save_stempel_stile(doc, ordered)
|
||||
self._send_state()
|
||||
|
||||
def _cmd_create_symbol(self, p):
|
||||
"""Platziert ein Library-Item (symbol/object) im Doc. Interactive
|
||||
GetPoint im aktiven Viewport — User klickt Position.
|
||||
|
||||
Reference in New Issue
Block a user