Wand-Hilfslinien: Outline + Centerline auf allen Waenden, Petrol-Farbe, Pairing-Verfeinerung
Outline + Centerline - Outline-Curves (geschlossenes Viereck) jetzt fuer ALLE Waende (auch Cluster/Chain-Member) — in_cluster-Flag suppressed Outline nicht mehr - Mode = Normal (statt Locked) damit ObjectColor (Petrol #5fa896) durchschlaegt und doc.Objects.Replace bei Pure-Transform funktioniert - Trade-off: User kann Hilfslinien greifen, aber jeder Axis-Regen schreibt sie neu (selbst-korrigierend) Pure-Transform Sync - wand_centerline + wand_outline werden im Pure-Transform-Pfad explizit mit-transformed (vorher nur SOURCE_TYPES + VOLUME_TYPES → Linien blieben in alter Position haengen) Selection Pairing - wand_axis zurueck in _PAIRED_SOURCE_TYPES → Achsen-Klick selektiert Outline + Centerline mit (alle "Referenzlinien" leuchten zusammen auf) - _collect_partners special-case fuer wand_axis: NUR Hilfslinien als Partner, NICHT das Volume (sonst wuerde das ganze Brep mit-aufleuchten) - wand_volume Pairing wie bisher: Volume-Klick → Achsen + Centerlines + Outlines aller Cluster-Members
This commit is contained in:
+48
-20
@@ -3212,12 +3212,12 @@ def _make_wall_outline(axis_curve, dicke, referenz):
|
||||
|
||||
def _regen_wall_lines(doc, wall_id, in_cluster=False):
|
||||
"""Stale wand_centerline + wand_outline-Objekte loeschen + neue addieren.
|
||||
Beide als LOCKED Curves auf der Referenzen-Sublayer.
|
||||
Beide als Normal Curves auf der Referenzen-Sublayer, in Petrol-Gruen
|
||||
(#5fa896). Outline IMMER (auch bei Cluster/Chain) — jede Wand zeigt ihr
|
||||
eigenes Viereck als visuelles Feedback. Centerline nur bei ref != 'mid'.
|
||||
|
||||
- Centerline (dashed): nur wenn ref != 'mid' (Achse = Centerline sonst)
|
||||
- Outline (solid): nur fuer SOLO Waende — Cluster/Chain-Member werden
|
||||
ueber den merged Brep dargestellt; eigene Outlines wuerden visuell
|
||||
ueberlappen und verwirren."""
|
||||
`in_cluster`-Flag wird aktuell nicht mehr unterschieden — Outlines
|
||||
erscheinen pro Wand unabhaengig vom Cluster-Status."""
|
||||
for obj in list(doc.Objects):
|
||||
try:
|
||||
t = obj.Attributes.GetUserString(_KEY_TYPE) or ""
|
||||
@@ -3241,7 +3241,17 @@ def _regen_wall_lines(doc, wall_id, in_cluster=False):
|
||||
def _build_attrs(type_str, dashed=False):
|
||||
attrs = Rhino.DocObjects.ObjectAttributes()
|
||||
attrs.LayerIndex = layer_idx
|
||||
attrs.Mode = Rhino.DocObjects.ObjectMode.Locked
|
||||
# NICHT Locked — sonst zeigt Rhino sie in Grau statt Petrol-Gruen,
|
||||
# und Pure-Transform-Replace scheitert. Stattdessen: User kann sie
|
||||
# theoretisch greifen, aber bei jedem Axis-Regen werden sie neu
|
||||
# erstellt → ungewollte Edits korrigieren sich selbst.
|
||||
# Petrol-Gruen #5fa896 — passt zum DOSSIER Design-System
|
||||
try:
|
||||
import System.Drawing as SD
|
||||
attrs.ColorSource = (
|
||||
Rhino.DocObjects.ObjectColorSource.ColorFromObject)
|
||||
attrs.ObjectColor = SD.Color.FromArgb(255, 95, 168, 150)
|
||||
except Exception: pass
|
||||
if dashed:
|
||||
try:
|
||||
lt_idx = doc.Linetypes.Find("Dashed", True)
|
||||
@@ -3266,13 +3276,12 @@ def _regen_wall_lines(doc, wall_id, in_cluster=False):
|
||||
except Exception as ex:
|
||||
print("[ELEMENTE] AddCurve centerline:", ex)
|
||||
|
||||
if not in_cluster:
|
||||
outline = _make_wall_outline(axis_curve, dicke, referenz)
|
||||
if outline is not None:
|
||||
try: doc.Objects.AddCurve(outline, _build_attrs("wand_outline",
|
||||
dashed=False))
|
||||
except Exception as ex:
|
||||
print("[ELEMENTE] AddCurve outline:", ex)
|
||||
outline = _make_wall_outline(axis_curve, dicke, referenz)
|
||||
if outline is not None:
|
||||
try: doc.Objects.AddCurve(outline, _build_attrs("wand_outline",
|
||||
dashed=False))
|
||||
except Exception as ex:
|
||||
print("[ELEMENTE] AddCurve outline:", ex)
|
||||
|
||||
|
||||
# Alias fuer Backwards-Compat — alte Callsites benutzen den alten Namen.
|
||||
@@ -15316,13 +15325,11 @@ _PAIRED_VOLUME_TYPES = (
|
||||
"raum_fill",
|
||||
)
|
||||
_PAIRED_SOURCE_TYPES = (
|
||||
"wand_axis", # → Centerline + Outline mitselektieren (NICHT Volume)
|
||||
"decke_outline", "dach_outline",
|
||||
"oeffnung_point", "treppe_axis",
|
||||
"stuetze_point", "traeger_axis",
|
||||
"raum_outline",
|
||||
# wand_axis ABSICHTLICH NICHT hier: Klick auf Wand-Linie soll NUR die
|
||||
# Linie selektieren (nicht das ganze Volume). Umgekehrt aber schon: Klick
|
||||
# auf wand_volume sammelt Achsen+Centerlines+Outlines (siehe _collect_partners).
|
||||
)
|
||||
|
||||
|
||||
@@ -15395,10 +15402,24 @@ def _collect_partners(doc, rhino_objects):
|
||||
_add_partner(lo)
|
||||
except Exception: pass
|
||||
elif t in _PAIRED_SOURCE_TYPES:
|
||||
# Klick auf Source → ALLE Volumen (alle Schichten) mitsammeln.
|
||||
for v in _find_all_volumes(doc, meta["id"]):
|
||||
_add_partner(v)
|
||||
_add_source(obj)
|
||||
if t == "wand_axis":
|
||||
# Wand-spezifisch: Achsen-Click sammelt NUR Hilfslinien
|
||||
# (Outline + Centerline), NICHT das Volume — sonst leuchtet
|
||||
# das ganze Brep mit auf.
|
||||
for lo in doc.Objects:
|
||||
try:
|
||||
lt = lo.Attributes.GetUserString(_KEY_TYPE) or ""
|
||||
lwid = lo.Attributes.GetUserString(_KEY_ID) or ""
|
||||
if (lt in ("wand_centerline", "wand_outline")
|
||||
and lwid == meta["id"]):
|
||||
_add_partner(lo)
|
||||
except Exception: pass
|
||||
_add_source(obj)
|
||||
else:
|
||||
# Default: Klick auf Source → ALLE Volumen mitsammeln.
|
||||
for v in _find_all_volumes(doc, meta["id"]):
|
||||
_add_partner(v)
|
||||
_add_source(obj)
|
||||
return partners, sources
|
||||
|
||||
|
||||
@@ -17017,6 +17038,13 @@ def _on_command_end(sender, e):
|
||||
if not m: continue
|
||||
t = m.get("type")
|
||||
if not _should_follow(m, str(obj.Id)): continue
|
||||
# Wand-Hilfslinien (Outline + Centerline) folgen via Pure-
|
||||
# Transform — sonst bleiben sie in alter Position haengen.
|
||||
if t in ("wand_centerline", "wand_outline"):
|
||||
new_geom = obj.Geometry.Duplicate()
|
||||
new_geom.Transform(pure_transform)
|
||||
doc.Objects.Replace(obj.Id, new_geom)
|
||||
continue
|
||||
# Sources die nicht bewegt wurden (= identity transform)
|
||||
# transformen — nur via _should_follow erlaubt (Cascade).
|
||||
if t in SOURCE_TYPES:
|
||||
|
||||
Reference in New Issue
Block a user