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:
+39
-11
@@ -3212,12 +3212,12 @@ def _make_wall_outline(axis_curve, dicke, referenz):
|
|||||||
|
|
||||||
def _regen_wall_lines(doc, wall_id, in_cluster=False):
|
def _regen_wall_lines(doc, wall_id, in_cluster=False):
|
||||||
"""Stale wand_centerline + wand_outline-Objekte loeschen + neue addieren.
|
"""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)
|
`in_cluster`-Flag wird aktuell nicht mehr unterschieden — Outlines
|
||||||
- Outline (solid): nur fuer SOLO Waende — Cluster/Chain-Member werden
|
erscheinen pro Wand unabhaengig vom Cluster-Status."""
|
||||||
ueber den merged Brep dargestellt; eigene Outlines wuerden visuell
|
|
||||||
ueberlappen und verwirren."""
|
|
||||||
for obj in list(doc.Objects):
|
for obj in list(doc.Objects):
|
||||||
try:
|
try:
|
||||||
t = obj.Attributes.GetUserString(_KEY_TYPE) or ""
|
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):
|
def _build_attrs(type_str, dashed=False):
|
||||||
attrs = Rhino.DocObjects.ObjectAttributes()
|
attrs = Rhino.DocObjects.ObjectAttributes()
|
||||||
attrs.LayerIndex = layer_idx
|
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:
|
if dashed:
|
||||||
try:
|
try:
|
||||||
lt_idx = doc.Linetypes.Find("Dashed", True)
|
lt_idx = doc.Linetypes.Find("Dashed", True)
|
||||||
@@ -3266,7 +3276,6 @@ def _regen_wall_lines(doc, wall_id, in_cluster=False):
|
|||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print("[ELEMENTE] AddCurve centerline:", ex)
|
print("[ELEMENTE] AddCurve centerline:", ex)
|
||||||
|
|
||||||
if not in_cluster:
|
|
||||||
outline = _make_wall_outline(axis_curve, dicke, referenz)
|
outline = _make_wall_outline(axis_curve, dicke, referenz)
|
||||||
if outline is not None:
|
if outline is not None:
|
||||||
try: doc.Objects.AddCurve(outline, _build_attrs("wand_outline",
|
try: doc.Objects.AddCurve(outline, _build_attrs("wand_outline",
|
||||||
@@ -15316,13 +15325,11 @@ _PAIRED_VOLUME_TYPES = (
|
|||||||
"raum_fill",
|
"raum_fill",
|
||||||
)
|
)
|
||||||
_PAIRED_SOURCE_TYPES = (
|
_PAIRED_SOURCE_TYPES = (
|
||||||
|
"wand_axis", # → Centerline + Outline mitselektieren (NICHT Volume)
|
||||||
"decke_outline", "dach_outline",
|
"decke_outline", "dach_outline",
|
||||||
"oeffnung_point", "treppe_axis",
|
"oeffnung_point", "treppe_axis",
|
||||||
"stuetze_point", "traeger_axis",
|
"stuetze_point", "traeger_axis",
|
||||||
"raum_outline",
|
"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,7 +15402,21 @@ def _collect_partners(doc, rhino_objects):
|
|||||||
_add_partner(lo)
|
_add_partner(lo)
|
||||||
except Exception: pass
|
except Exception: pass
|
||||||
elif t in _PAIRED_SOURCE_TYPES:
|
elif t in _PAIRED_SOURCE_TYPES:
|
||||||
# Klick auf Source → ALLE Volumen (alle Schichten) mitsammeln.
|
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"]):
|
for v in _find_all_volumes(doc, meta["id"]):
|
||||||
_add_partner(v)
|
_add_partner(v)
|
||||||
_add_source(obj)
|
_add_source(obj)
|
||||||
@@ -17017,6 +17038,13 @@ def _on_command_end(sender, e):
|
|||||||
if not m: continue
|
if not m: continue
|
||||||
t = m.get("type")
|
t = m.get("type")
|
||||||
if not _should_follow(m, str(obj.Id)): continue
|
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)
|
# Sources die nicht bewegt wurden (= identity transform)
|
||||||
# transformen — nur via _should_follow erlaubt (Cascade).
|
# transformen — nur via _should_follow erlaubt (Cascade).
|
||||||
if t in SOURCE_TYPES:
|
if t in SOURCE_TYPES:
|
||||||
|
|||||||
Reference in New Issue
Block a user