Fix remaining German log messages: Panel registered, Listener active, sync all files to PROJECTS
- Fix sed $-anchor issue: 'Panel registriert' now replaced globally - Translate: Listener aktiv, Select-Handler, Closing-Hook, Doppelklick-Handler - Translate SPLASH messages: gesetzt/angewendet - Translate ALIAS-LOADER, WELCOME, ELEMENTE migration messages - Full rsync of all rhino/*.py to PROJECTS (previously partial sync missed schnitte.py, wand_grips.py, treppe_grips.py, text_editor.py, welcome.py etc.)
This commit is contained in:
+41
-41
@@ -280,7 +280,7 @@ _KEY_TREPPE_SOLL = "dossier_treppe_soll" # JSON {s:[lo,hi,on], a:[lo
|
||||
_KEY_TREPPE_2D_SHOW = "dossier_treppe_2d_show" # doc-Setting "1"/"0" — Plansymbol an/aus
|
||||
|
||||
# Per-Treppe Sichtbarkeits-Flags fuer 2D-Plansymbol-Bestandteile
|
||||
# (UserString auf treppe_axis-Objekt). Default "1" wenn nicht gesetzt.
|
||||
# (UserString auf treppe_axis-Objekt). Default "1" wenn nicht set.
|
||||
_KEY_TREPPE_SHOW_TRITTE = "dossier_treppe_show_tritte"
|
||||
_KEY_TREPPE_SHOW_LAUFLINIE = "dossier_treppe_show_lauflinie"
|
||||
_KEY_TREPPE_SHOW_AUSSEN = "dossier_treppe_show_aussen"
|
||||
@@ -350,7 +350,7 @@ _RAUM_LAYOUT_DEFAULT = [["nummer", "name"], ["funktion"], ["area"]]
|
||||
|
||||
# Per-Document Storage-Key fuer Raumstempel-Stile (Presets).
|
||||
_KEY_RAUM_STILE = "dossier_raum_stempel_stile"
|
||||
# Auf der Raum-Outline: id des zuletzt angewendeten Stils. Damit das UI
|
||||
# Auf der Raum-Outline: id des zuletzt applieden Stils. Damit das UI
|
||||
# anzeigen kann welcher Stil aktiv ist.
|
||||
_KEY_RAUM_STIL_ID = "dossier_raum_stil_id"
|
||||
|
||||
@@ -414,8 +414,8 @@ _RAUM_RUNDUNGEN = ("exakt", "0.01", "0.1", "0.5", "1")
|
||||
|
||||
def _resolve_raum_rundung(meta, doc=None):
|
||||
"""Loest die Raum-Rundung auf. Wenn am Raum eine explizite UserString-
|
||||
Rundung gesetzt ist (raum_rundung != ""), gewinnt die. Sonst Default aus
|
||||
dem aktiven Mass-Style. Doc-Default fallback "0.1" wenn nichts gesetzt."""
|
||||
Rundung set ist (raum_rundung != ""), gewinnt die. Sonst Default aus
|
||||
dem aktiven Mass-Style. Doc-Default fallback "0.1" wenn nichts set."""
|
||||
explicit = (meta or {}).get("raum_rundung") or ""
|
||||
if explicit in _RAUM_RUNDUNGEN: return explicit
|
||||
if doc is None: doc = Rhino.RhinoDoc.ActiveDoc
|
||||
@@ -658,7 +658,7 @@ def _geschoss_by_id(doc, gid):
|
||||
|
||||
def _active_geschoss_id(doc):
|
||||
"""Liefert die ID des aktuell aktiven Geschosses (= im Ebenen-Manager
|
||||
blau hervorgehoben). Falls keins gesetzt oder das aktive keine
|
||||
blau hervorgehoben). Falls keins set oder das aktive keine
|
||||
Geschoss-Ebene ist (z.B. Schnitt/Ansicht), wird das erste echte
|
||||
Geschoss zurueckgegeben."""
|
||||
try:
|
||||
@@ -701,9 +701,9 @@ def _resolve_decke_z(doc, gid, dicke, uk_over, ok_over):
|
||||
der natuerliche Fixpunkt: aendert sich die Dicke, wandert UK mit.
|
||||
|
||||
Override-Logik:
|
||||
- Nur OK_override gesetzt → OK = override, UK = OK - dicke
|
||||
- Nur UK_override gesetzt → UK = override, OK = UK + dicke
|
||||
- Beide gesetzt → beide literal"""
|
||||
- Nur OK_override set → OK = override, UK = OK - dicke
|
||||
- Nur UK_override set → UK = override, OK = UK + dicke
|
||||
- Beide set → beide literal"""
|
||||
g = _geschoss_by_id(doc, gid)
|
||||
okff = float(g.get("okff", 0.0)) if g else 0.0
|
||||
auto_ok = okff
|
||||
@@ -1425,7 +1425,7 @@ def _collect_circle(doc, center):
|
||||
|
||||
|
||||
def _make_decke_preview_handler(committed_points):
|
||||
"""Live-Preview waehrend Decken-Outline gezeichnet wird: gesetzte Segmente
|
||||
"""Live-Preview waehrend Decken-Outline gezeichnet wird: sete Segmente
|
||||
+ Rubberband + gestrichelte Schliessungs-Linie zurueck zum Startpunkt."""
|
||||
import System.Drawing as SD
|
||||
color_line = SD.Color.FromArgb(255, 95, 200, 180)
|
||||
@@ -1665,7 +1665,7 @@ def _make_treppe_wendel_preview(center, start, breite, referenz, n_stufen,
|
||||
def _make_treppe_l_corner_preview(p0, breite, referenz, total_n, total_h,
|
||||
max_length=None):
|
||||
"""Preview fuer den 2. Klick einer L-Treppe (Podest-Eck). Zeigt:
|
||||
- Lauflinie + Aussenkanten (geclamped auf max_length wenn gesetzt)
|
||||
- Lauflinie + Aussenkanten (geclamped auf max_length wenn set)
|
||||
- Step-Lines an A_opt-Abstaenden
|
||||
- Live-Label mit N1 / N2
|
||||
"""
|
||||
@@ -2016,7 +2016,7 @@ def _t_snap_to_wand_axis(doc, pt, tol=0.15):
|
||||
|
||||
|
||||
def _make_preview_handler(committed_points, dicke, referenz):
|
||||
"""Preview fuer Polylinie-Wand: gesetzte Punkte + Rubberband + Wand-Kanten."""
|
||||
"""Preview fuer Polylinie-Wand: sete Punkte + Rubberband + Wand-Kanten."""
|
||||
import System.Drawing as SD
|
||||
color_axis = SD.Color.FromArgb(255, 95, 200, 180)
|
||||
color_edge = SD.Color.FromArgb(180, 140, 215, 200)
|
||||
@@ -2963,7 +2963,7 @@ def install_cluster_select_handler():
|
||||
h = _ClusterVolumeSelectHandler()
|
||||
h.Enabled = True
|
||||
sc.sticky[_STICKY_CLUSTER_SELECT] = h
|
||||
print("[ELEMENTE] Cluster-Volume Select-Handler aktiv")
|
||||
print("[ELEMENTE] Cluster-Volume Select-Handler active")
|
||||
except Exception as ex:
|
||||
print("[ELEMENTE] cluster-select install:", ex)
|
||||
|
||||
@@ -3916,7 +3916,7 @@ def _set_layer_section_hatch(doc, layer_idx, hatch_name, scale=1.0,
|
||||
def _ensure_material_sublayer(doc, geschoss_name, material_name):
|
||||
"""Stellt sicher dass `<geschoss>::20_WAENDE::<material>` existiert,
|
||||
mit Material-Farbe konfiguriert. Liefert Layer-Index.
|
||||
Section-Hatch (2D-Schnitt) wird NICHT mehr aus dem Material gesetzt —
|
||||
Section-Hatch (2D-Schnitt) wird NICHT mehr aus dem Material set —
|
||||
der kommt vom Parent-Layer (= Ebenen-Settings). Sub-Layer haben default
|
||||
keine eigene Section-Hatch, sie inherit'en Rhino-typisch ihre Optik
|
||||
fuer den Schnitt vom Parent.
|
||||
@@ -4004,7 +4004,7 @@ def _ensure_pbr_material(doc, mat_dict):
|
||||
- PhysicallyBased.Roughness, Opacity (= 1-transparency), OpacityIor
|
||||
- PhysicallyBased.Metallic = reflection (Naeherung)
|
||||
- SetBitmapTexture / SetBumpTexture / SetTransparencyTexture wenn
|
||||
Pfade gesetzt
|
||||
Pfade set
|
||||
- Texture.Repeat = (1/uvScaleM, 1/uvScaleM)"""
|
||||
if not isinstance(mat_dict, dict): return -1
|
||||
color = mat_dict.get("color") or "#888888"
|
||||
@@ -4085,7 +4085,7 @@ def _ensure_pbr_material(doc, mat_dict):
|
||||
if setter is None: return
|
||||
ok = setter(p)
|
||||
if not ok: return
|
||||
# Repeat auf den frisch gesetzten Texture-Slot — alle
|
||||
# Repeat auf den frisch seten Texture-Slot — alle
|
||||
# Slot-Indices durchgehen und matchen.
|
||||
try:
|
||||
import Rhino.Geometry as rgg
|
||||
@@ -4604,7 +4604,7 @@ def _read_meta(obj):
|
||||
otrah = a.GetUserString(_KEY_OEFF_TUER_RAHMEN) or "zarge"
|
||||
if otrah not in _OEFF_TUER_RAHMEN: otrah = "zarge"
|
||||
# Rahmen-Offset (m, von Wand-Innenseite). Default 5cm. Wenn Legacy-
|
||||
# Wert (rahmen_pos) gesetzt aber kein offset, benutzt build-Logik
|
||||
# Wert (rahmen_pos) set aber kein offset, benutzt build-Logik
|
||||
# weiterhin den Preset.
|
||||
try: oro = float(a.GetUserString(_KEY_OEFF_RAHMEN_OFFSET) or "0.05")
|
||||
except Exception: oro = 0.05
|
||||
@@ -4638,7 +4638,7 @@ def _read_meta(obj):
|
||||
if tart not in _TREPPE_ARTEN: tart = "gerade"
|
||||
thov = a.GetUserString(_KEY_TREPPE_H_OVER) or ""
|
||||
tukov = a.GetUserString(_KEY_TREPPE_UK_OVER) or ""
|
||||
# 2D-Plansymbol-Flags — default True wenn nicht gesetzt
|
||||
# 2D-Plansymbol-Flags — default True wenn nicht set
|
||||
def _flag_on(key):
|
||||
v = a.GetUserString(key)
|
||||
return v != "0" # None, "", "1" → True
|
||||
@@ -4657,7 +4657,7 @@ def _read_meta(obj):
|
||||
except Exception: t_target_a = 0.0
|
||||
try: t_podest_min = float(a.GetUserString(_KEY_TREPPE_PODEST_MIN) or "0")
|
||||
except Exception: t_podest_min = 0.0
|
||||
# Soll-Werte JSON, mit Defaults wenn nicht gesetzt
|
||||
# Soll-Werte JSON, mit Defaults wenn nicht set
|
||||
import json
|
||||
tsoll = dict(_TREPPE_SOLL_DEFAULT)
|
||||
soll_raw = a.GetUserString(_KEY_TREPPE_SOLL)
|
||||
@@ -6739,7 +6739,7 @@ def _make_raum_stamp_text(centroid, name, nummer, funktion, area, rundung,
|
||||
return tag if (tag and tag != "—") else None
|
||||
return None
|
||||
|
||||
# Layout resolven: explizit gesetzt > show_*-Flags > GF/AGF-Default
|
||||
# Layout resolven: explizit set > show_*-Flags > GF/AGF-Default
|
||||
# Sonderfall GF/AGF: das sind reine Flaechen-Outlines (Geschoss-
|
||||
# flaeche / Aussengeschossflaeche) — kein Raum-Inhalt. Stempel
|
||||
# zeigt nur 'GF 234.5 m²' bzw. 'AGF 18.0 m²' — keine Nummer/
|
||||
@@ -6806,7 +6806,7 @@ def _make_raum_stamp_text(centroid, name, nummer, funktion, area, rundung,
|
||||
except Exception as ex:
|
||||
print("[ELEMENTE] Raum Stamp Font:", ex)
|
||||
elif doc is not None and (bold or italic):
|
||||
# Kein expliziter Font, aber Stil gesetzt — auf Default-Font
|
||||
# Kein expliziter Font, aber Stil set — auf Default-Font
|
||||
# bold/italic anwenden
|
||||
try:
|
||||
cur_idx = te.FontIndex
|
||||
@@ -8542,7 +8542,7 @@ def _regenerate_element(doc, element_id):
|
||||
geom, geschoss_name)
|
||||
finally:
|
||||
sc.sticky[_REGEN_BUSY] = _was_busy
|
||||
# Wenn ein raum_outline-Regen einen Stempel-Dirty-Marker gesetzt hat
|
||||
# Wenn ein raum_outline-Regen einen Stempel-Dirty-Marker set hat
|
||||
# (oder generell raeumlich-Aenderungen), Stempel im selben Geschoss
|
||||
# (+ Total) neu rechnen. Lauft AUSSERHALB des REGEN_BUSY-Blocks damit
|
||||
# die Stempel selber regen koennen.
|
||||
@@ -9326,7 +9326,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name
|
||||
sw_attrs.SetUserString("dossier_oeff_piece", "schwung")
|
||||
doc.Objects.AddCurve(crv, sw_attrs)
|
||||
# Sturzlinien (Lintel-Projektion) — nur bei 1:100 Tueren mit
|
||||
# explizit gesetztem oeff_sturz. Bei standard/detail uebernimmt
|
||||
# explizit setem oeff_sturz. Bei standard/detail uebernimmt
|
||||
# der Rahmen-Brep die Sturz-Darstellung visuell.
|
||||
old_st = list(_find_objects_by_wall_id(doc, op_meta["id"],
|
||||
"oeffnung_sturz"))
|
||||
@@ -9452,7 +9452,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name
|
||||
layers_json = (_json.dumps(layers_def, ensure_ascii=False)
|
||||
if is_layered else "")
|
||||
# Per-Schicht Material-Lookup: wenn ein Material-Name aus der
|
||||
# Library gesetzt ist, nimm dessen Farbe/Hatch + leg den Brep auf
|
||||
# Library set ist, nimm dessen Farbe/Hatch + leg den Brep auf
|
||||
# die Material-Sub-Ebene (Section-Hatch greift dann bei Clipping
|
||||
# Planes). Sonst Fallback auf inline color + Standard-Wand-Layer.
|
||||
for idx, (lbrep, color, lname) in enumerate(layer_breps):
|
||||
@@ -9790,7 +9790,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name
|
||||
# Override). Der ModifyAttributes-Aufruf oben loest KEIN
|
||||
# ReplaceRhinoObject-Event aus, also wuerde der Override-Listener
|
||||
# die neue Hatch sonst nicht erreichen. Bei force_solid haben wir
|
||||
# die Farbe schon direkt gesetzt — das hier wirkt idempotent.
|
||||
# die Farbe schon direkt set — das hier wirkt idempotent.
|
||||
try:
|
||||
import overrides as _ov
|
||||
cfg = _ov.load_config(doc)
|
||||
@@ -11541,7 +11541,7 @@ class ElementeBridge(panel_base.BaseBridge):
|
||||
referenz_def = _last("oeff_referenz", "mid")
|
||||
darst_def = "auto"
|
||||
tuer_rahmen_def = "zarge"
|
||||
# Pending-Style-ID aus sticky (von Stil-Picker gesetzt). Falls noch
|
||||
# Pending-Style-ID aus sticky (von Stil-Picker set). Falls noch
|
||||
# kein Style gepickt, nutzen wir den zuletzt-aktiven fuer diesen typ
|
||||
# als Default-Source.
|
||||
active_sid = get_active_oeff_style_id(doc, typ)
|
||||
@@ -11819,7 +11819,7 @@ class ElementeBridge(panel_base.BaseBridge):
|
||||
l_podest_mode = _last("treppe_l_podest_mode", "kompakt")
|
||||
if l_podest_mode not in ("kompakt", "explizit"): l_podest_mode = "kompakt"
|
||||
# Soll-Werte (Editable in der Treppe-Property-Card) aus sticky laden.
|
||||
# Default falls noch nichts gesetzt: 0.15-0.20 / 0.21-0.35 / 0.60-0.65.
|
||||
# Default falls noch nichts set: 0.15-0.20 / 0.21-0.35 / 0.60-0.65.
|
||||
soll_last = _last("treppe_soll", None)
|
||||
soll = dict(_TREPPE_SOLL_DEFAULT)
|
||||
if soll_last:
|
||||
@@ -12998,7 +12998,7 @@ class ElementeBridge(panel_base.BaseBridge):
|
||||
except Exception as ex:
|
||||
print("[ELEMENTE] apply stil {} -> {}: {}".format(sid, eid, ex))
|
||||
if n_applied > 0:
|
||||
print("[ELEMENTE] Stempel-Stil '{}' auf {} Raum/Raeume angewendet".format(
|
||||
print("[ELEMENTE] Stempel-Stil '{}' auf {} Raum/Raeume applied".format(
|
||||
stil.get("name"), n_applied))
|
||||
self._send_state()
|
||||
|
||||
@@ -13093,7 +13093,7 @@ class ElementeBridge(panel_base.BaseBridge):
|
||||
print("[ELEMENTE] apply stempel-stil {} -> {}: {}".format(
|
||||
sid, eid, ex))
|
||||
if n > 0:
|
||||
print("[ELEMENTE] Stempel-Stil '{}' auf {} Stempel angewendet".format(
|
||||
print("[ELEMENTE] Stempel-Stil '{}' auf {} Stempel applied".format(
|
||||
stil.get("name"), n))
|
||||
self._send_state()
|
||||
|
||||
@@ -13288,7 +13288,7 @@ class ElementeBridge(panel_base.BaseBridge):
|
||||
print("[ELEMENTE] Swisstopo-Import: {} neue Objekte".format(len(new_objs)))
|
||||
if not new_objs: return
|
||||
|
||||
# Target-Layer finden + Objekte verschieben (nur wenn sub_name gesetzt)
|
||||
# Target-Layer finden + Objekte verschieben (nur wenn sub_name set)
|
||||
if sub_name:
|
||||
z_id = doc.Strings.GetValue("dossier_active_id")
|
||||
if not z_id:
|
||||
@@ -13433,7 +13433,7 @@ class ElementeBridge(panel_base.BaseBridge):
|
||||
self._push_log("Achtung: kein aktives Geschoss — Objekte bleiben auf Default-Layer")
|
||||
|
||||
# Bestehende swisstopo-Objekte loeschen wenn gewuenscht.
|
||||
# Tag wird beim Import gesetzt (UserString dossier_swisstopo_kind).
|
||||
# Tag wird beim Import set (UserString dossier_swisstopo_kind).
|
||||
if replace_existing:
|
||||
self._push_log("Loesche bestehende swisstopo-Objekte (alte Imports)...")
|
||||
removed = 0
|
||||
@@ -14974,7 +14974,7 @@ class ElementeBridge(panel_base.BaseBridge):
|
||||
tobe_dsh = _flag("obereDashed", "treppe_obere_dashed", False)
|
||||
# Schrittmass-Lock: wenn aktiv, recompute n_stufen damit S
|
||||
# konstant bleibt. Beim Aktivieren via Patch wird targetS auf
|
||||
# aktuelles S gesetzt (sofern Patch keinen Wert mitgibt).
|
||||
# aktuelles S set (sofern Patch keinen Wert mitgibt).
|
||||
tlock_s = _flag("lockS", "treppe_lock_s", False)
|
||||
old_target_s = float(old_meta.get("treppe_target_s", 0.0) or 0.0)
|
||||
old_target_a = float(old_meta.get("treppe_target_a", 0.0) or 0.0)
|
||||
@@ -15480,7 +15480,7 @@ def _apply_wand_z_drag_constraint(new_obj, meta):
|
||||
|
||||
Delta-Logik: max-magnitude der zwei Endpunkt-Z's gewinnt — entspricht
|
||||
'letzter Drag gewinnt' wenn nur ein End-Grip gezogen wurde.
|
||||
Geometry-Z wird auf 0 zurueckgesetzt.
|
||||
Geometry-Z wird auf 0 zurueckset.
|
||||
"""
|
||||
geom = new_obj.Geometry
|
||||
# Sticky reset — bei JEDEM Replace, damit kein alter Delta haengt
|
||||
@@ -15615,7 +15615,7 @@ def _apply_oeffnung_constraint(new_obj, meta, old_obj=None):
|
||||
target_x, target_y = pt_new.X, pt_new.Y
|
||||
# Wenn die Wand gerade migrate'd wurde (Rotation/Reshape/XY-Move) →
|
||||
# XY-Projektion HIER UEBERSPRINGEN. Migrate hat den Punkt schon per
|
||||
# Bogenlaengen-Mapping auf die neue Achse gesetzt. Eine zweite XY-
|
||||
# Bogenlaengen-Mapping auf die neue Achse set. Eine zweite XY-
|
||||
# Projektion mit ClosestPoint(pt_old) auf der NEUEN Achse wuerde die
|
||||
# Position wieder verschieben (Rotation: pt_old liegt nicht mehr auf
|
||||
# der neuen Achse → ClosestPoint+Tangent stimmen nicht zusammen).
|
||||
@@ -16005,7 +16005,7 @@ def _migrate_openings_to_new_axis(wall_id, old_geom, new_geom, old_positions=Non
|
||||
new_len = new_geom.GetLength()
|
||||
except Exception: return
|
||||
if old_len < 1e-9 or new_len < 1e-9: return
|
||||
# Wand-UK aufloesen damit Oeffnungs-Punkte auf UK+Brueestung gesetzt
|
||||
# Wand-UK aufloesen damit Oeffnungs-Punkte auf UK+Brueestung set
|
||||
# werden (= visuell auf Unterkante Oeffnung). Sonst landen sie auf
|
||||
# reiner Brueest-Hoehe und der nachfolgende Constraint interpretiert
|
||||
# die Diskrepanz als User-Z-Drag → Brueest dropt.
|
||||
@@ -16022,7 +16022,7 @@ def _migrate_openings_to_new_axis(wall_id, old_geom, new_geom, old_positions=Non
|
||||
wall_uk = 0.0
|
||||
# Migrierten Wand registrieren — der Constraint soll fuer Oeffnungen
|
||||
# dieser Wand die XY-Projektion ueberspringen (migrate hat XY bereits
|
||||
# via Bogenlaengen-Mapping korrekt gesetzt).
|
||||
# via Bogenlaengen-Mapping korrekt set).
|
||||
migrated = sc.sticky.get("_dossier_migrated_walls")
|
||||
if not isinstance(migrated, set):
|
||||
migrated = set()
|
||||
@@ -16498,7 +16498,7 @@ def _on_select_objects(sender, e):
|
||||
|
||||
So bewegen sich beide synchron bei Move/Gumball, und die Endpunkte
|
||||
der Lauflinie sind als Grips zum Drag verfuegbar.
|
||||
Partner-Selection wird AUCH bei hidden Layern angewendet — damit der
|
||||
Partner-Selection wird AUCH bei hidden Layern applied — damit der
|
||||
Pure-Transform-Pfad (CommandEnd) die ganze Treppe als zusammenhaengendes
|
||||
Element behandelt und das 3D-Volume mitbewegt selbst wenn nur das 2D-
|
||||
Symbol sichtbar ist. GripsOn aber NUR auf sichtbaren Sources (Grips auf
|
||||
@@ -16867,8 +16867,8 @@ def _migrate_referenz_layer_once(doc):
|
||||
if doc.Objects.ModifyAttributes(obj, a, True):
|
||||
n_moved += 1
|
||||
except Exception: pass
|
||||
print("[ELEMENTE] Referenz-Migration (v3): {} Geschoss(e) registriert, "
|
||||
"{} Objekte bewegt, {} eingeblendet".format(
|
||||
print("[ELEMENTE] Reference migration (v3): {} floor(s) registered, "
|
||||
"{} objects moved, {} shown".format(
|
||||
n_geschosse, n_moved, n_shown))
|
||||
# Finaler Broadcast — falls _find_ebene_sublayer_name den Eintrag
|
||||
# nicht neu angelegt hat (z.B. weil er schon existiert) wird das
|
||||
@@ -17649,7 +17649,7 @@ def _on_command_end(sender, e):
|
||||
return
|
||||
name = sc.sticky.get(_UT_ACTIVE_KEY)
|
||||
if not name: return
|
||||
# _UT_ACTIVE_KEY bleibt gesetzt bis am Ende der Funktion — sonst feuern
|
||||
# _UT_ACTIVE_KEY bleibt set bis am Ende der Funktion — sonst feuern
|
||||
# gestaltungs Listener auf die Replace-Events die wir hier selber
|
||||
# erzeugen (Pure-Translate translates Volumen via Replace; Regen-Pfad
|
||||
# ersetzt Sub-Volumen). Cleanup im finally-Block am Ende.
|
||||
@@ -17677,7 +17677,7 @@ def _on_command_end(sender, e):
|
||||
print("[ELEMENTE] stamp-sync:", ex)
|
||||
|
||||
# RedrawEnabled wurde idR schon beim ersten Object-Event nach dem
|
||||
# User-Klick auf False gesetzt (`_suppress_redraw_until_cmd_end`). Den
|
||||
# User-Klick auf False set (`_suppress_redraw_until_cmd_end`). Den
|
||||
# gemerkten prev-Wert lesen. Falls kein Event gefeuert hat (z.B. Move
|
||||
# ohne tatsaechliche Aenderung), suppressen wir jetzt selber.
|
||||
if sc.sticky.get("_dossier_cmd_redraw_suppressed"):
|
||||
@@ -18211,7 +18211,7 @@ def _on_command_end(sender, e):
|
||||
# Regen ausloesen → mehrere Regens pro Wand. Wir machen am Schluss EINEN
|
||||
# Regen pro affected_wall — viel schneller bei mehreren Oeffnungen.
|
||||
sc.sticky["_dossier_skip_sync_regen"] = True
|
||||
# RedrawEnabled wurde schon in _on_command_begin auf False gesetzt —
|
||||
# RedrawEnabled wurde schon in _on_command_begin auf False set —
|
||||
# damit unterdruecken wir auch Rhinos automatischen Post-Move-Redraw
|
||||
# (sonst kurzer Mismatch-Frame: Oeffnung an neuer Pos, Wand-Loch noch
|
||||
# an alter Pos).
|
||||
|
||||
Reference in New Issue
Block a user