T-Junction Phase 2 mit 3D Brep Union + Material-Prio-Carve
Asymmetric L-merge fuer Schichtdurchdringung: - Backbone (= hoechste Material-Prio in beiden Waenden) bildet T-form - Non-backbone Layer werden gecarved mit backbone-Column + through-Bands hoeherer Prio - ext=0 fuer T-Stem-Axis (= column endet am snap, kein "drueber") - 3D Brep Union via Brep.CreateBooleanUnion mit cross-junction safety (= aktueller through-Brep statt von Meta neu zu bauen) - Cleanup: MergeCoplanarFaces Plus: - Innenwand Beton 20cm Style (Putz + Beton + Putz, ref-mid) - curve_vertex_dots.py: gruene Vertex-Punkte fuer Polylinen/Curves - Cluster-Volume Select Handler: Shift-Modifier fuer Multi-Select - startup.py: Top-View maximieren on Doc-Open Known limitation: Putz-Schicht kann in bestimmten Konfigurationen visuell suedlich des Daemm-Band-Top weiter sichtbar sein (= edge case fuer asymmetric layers). Naechster Schritt: manuelle 2D-Polygon-Konstruktion statt 3D Boolean.
This commit is contained in:
@@ -151,6 +151,45 @@ def _assign_default_display_modes(doc):
|
||||
print("[STARTUP] view-modes: {} Viewport(s) gesetzt".format(n_set))
|
||||
|
||||
|
||||
_DOC_FLAG_VIEW_MAXIMIZED = "dossier_top_view_maximized"
|
||||
|
||||
|
||||
def _maximize_top_view(doc):
|
||||
"""Maximiert den Top-Viewport (= einzige aktive View statt 4-Viewport-
|
||||
Default). Persistiert Flag in doc.Strings → laeuft nur EINMAL pro Doc.
|
||||
User-Overrides (manuelles Wechseln zu 4-View etc) bleiben erhalten."""
|
||||
if doc is None: return
|
||||
try:
|
||||
if doc.Strings.GetValue(_DOC_FLAG_VIEW_MAXIMIZED) == "1":
|
||||
return # schon initialisiert
|
||||
except Exception: pass
|
||||
try:
|
||||
top_view = None
|
||||
for view in doc.Views:
|
||||
try:
|
||||
vp = view.ActiveViewport
|
||||
if vp is None: continue
|
||||
if vp.Name == "Top":
|
||||
top_view = view
|
||||
break
|
||||
except Exception: pass
|
||||
if top_view is None:
|
||||
print("[STARTUP] view-max: kein Top-Viewport gefunden")
|
||||
return
|
||||
try:
|
||||
top_view.Maximized = True
|
||||
doc.Views.ActiveView = top_view
|
||||
doc.Views.Redraw()
|
||||
print("[STARTUP] view-max: Top-Viewport maximiert")
|
||||
except Exception as ex:
|
||||
print("[STARTUP] view-max set:", ex); return
|
||||
try:
|
||||
doc.Strings.SetString(_DOC_FLAG_VIEW_MAXIMIZED, "1")
|
||||
except Exception: pass
|
||||
except Exception as ex:
|
||||
print("[STARTUP] view-max:", ex)
|
||||
|
||||
|
||||
_DOC_FLAG_UNIT_CHECKED = "dossier_unit_checked"
|
||||
|
||||
|
||||
@@ -227,6 +266,7 @@ def _on_doc_opened(sender, e):
|
||||
import panel_base
|
||||
panel_base.migrate_to_dossier(doc)
|
||||
_assign_default_display_modes(doc)
|
||||
_maximize_top_view(doc)
|
||||
_check_doc_unit(doc)
|
||||
except Exception as ex:
|
||||
print("[STARTUP] _on_doc_opened:", ex)
|
||||
@@ -301,6 +341,11 @@ def _load_all(sender, e):
|
||||
_pb._t_mark("post_init", "view_modes", _t_vm)
|
||||
except Exception as ex:
|
||||
print("[STARTUP] view-modes assign:", ex)
|
||||
# Top-View maximieren (= einzige aktive View statt 4-View Default)
|
||||
try:
|
||||
_maximize_top_view(Rhino.RhinoDoc.ActiveDoc)
|
||||
except Exception as ex:
|
||||
print("[STARTUP] view-max:", ex)
|
||||
# Unit-Check fuer das beim Start aktive Doc — fragt einmal pro Doc
|
||||
# wenn doc.ModelUnitSystem != Project-Setting
|
||||
_t_uc = _t.time()
|
||||
|
||||
Reference in New Issue
Block a user