Display-Modes: 3D-Template + Auto-Assign + Material/Raytracing-Slots
- Neues Template rhino/templates/dossier_3d.ini fuer perspektivische Views - Registry-Loop in oberleiste.py generalisiert (Plan + 3D + Material + Raytracing) — Material/Raytracing skippen wenn kein Template vorhanden, um Cycles-Pipeline-Clone-Crash zu vermeiden - Guid-Replace praezisiert: nur Section-Header-Guid, nie PipelineId - Plan-spezifische ini-Patches auf target_name=="Dossier Plan" gegated - Auto-Assign in startup.py: Parallel-Viewports -> Plan, Perspective -> 3D, einmal-pro-Doc via doc.Strings-Flag (User-Overrides bleiben) - schnitte.activate_schnitt setzt Dossier Plan explizit (Hatches auch in Schnittperspektive sichtbar) - GestaltungApp Section-Block neu strukturiert: PenBlock fuer 3D als 'Fill' innerhalb der Section, Solid-Fill-Toggle entfernt (war Duplikat)
This commit is contained in:
+79
-35
@@ -185,9 +185,23 @@ def _import_display_modes(paths):
|
|||||||
return count
|
return count
|
||||||
|
|
||||||
|
|
||||||
# Fest-Guid fuer 'Dossier Plan' damit Re-Imports denselben Slot
|
# Fest-Guids fuer die Dossier-Display-Modes damit Re-Imports denselben Slot
|
||||||
# wiederverwenden statt Duplikate zu erzeugen.
|
# wiederverwenden statt Duplikate zu erzeugen.
|
||||||
_DOSSIER_PLAN_GUID = "d0551e72-7e72-4170-b1a4-d0551e72d055"
|
_DOSSIER_PLAN_GUID = "d0551e72-7e72-4170-b1a4-d0551e72d055"
|
||||||
|
_DOSSIER_3D_GUID = "d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d"
|
||||||
|
_DOSSIER_MATERIAL_GUID = "d0551e72-7e72-4170-b1a4-555555555555"
|
||||||
|
_DOSSIER_RAYTRACING_GUID = "d0551e72-7e72-4170-b1a4-666666666666"
|
||||||
|
|
||||||
|
# Registrierte Dossier-Display-Modes: (name, guid, template_basename, default_pipeline_fallback)
|
||||||
|
# Material + Raytracing haben (noch) kein Template — werden vom Fallback-Base
|
||||||
|
# (Rendered / Raytraced) geklont. User kann sie in Rhino anpassen und spaeter
|
||||||
|
# als Template exportieren.
|
||||||
|
_DOSSIER_DISPLAY_MODES = (
|
||||||
|
("Dossier Plan", _DOSSIER_PLAN_GUID, "dossier_plan.ini", "Technical"),
|
||||||
|
("Dossier 3D", _DOSSIER_3D_GUID, "dossier_3d.ini", "Shaded"),
|
||||||
|
("Dossier Material", _DOSSIER_MATERIAL_GUID, "dossier_material.ini", "Rendered"),
|
||||||
|
("Dossier Raytracing", _DOSSIER_RAYTRACING_GUID, "dossier_raytracing.ini", "Raytraced"),
|
||||||
|
)
|
||||||
|
|
||||||
def _apply_dossier_plan_attrs(dmd):
|
def _apply_dossier_plan_attrs(dmd):
|
||||||
"""Wendet die Dossier-Plan-Visual-Settings auf einen DisplayMode an.
|
"""Wendet die Dossier-Plan-Visual-Settings auf einen DisplayMode an.
|
||||||
@@ -303,38 +317,54 @@ def _apply_dossier_plan_attrs(dmd):
|
|||||||
print("[OBERLEISTE] Plan-Mode update:", ex)
|
print("[OBERLEISTE] Plan-Mode update:", ex)
|
||||||
|
|
||||||
|
|
||||||
_TEMPLATE_INI_PATH = os.path.join(_HERE, "templates", "dossier_plan.ini")
|
_TEMPLATES_DIR = os.path.join(_HERE, "templates")
|
||||||
|
|
||||||
|
|
||||||
def _ensure_dossier_plan_display_mode():
|
def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
|
||||||
"""Stellt sicher dass der 'Dossier Plan' Display-Mode existiert.
|
fallback_base_name):
|
||||||
|
"""Stellt sicher dass ein Dossier-Display-Mode existiert.
|
||||||
|
|
||||||
Strategie: wenn eine Template-ini im Repo existiert
|
Strategie: wenn eine Template-ini im Repo existiert
|
||||||
(rhino/templates/dossier_plan.ini), laden wir die. Sonst Fallback auf
|
(rhino/templates/<template_basename>), laden wir die. Sonst Fallback auf
|
||||||
Clone-Technical + ini-Patch. Template ist die bevorzugte Methode weil
|
Clone-eines-Built-in-Mode + ini-Patch. Template ist die bevorzugte
|
||||||
sich Mac-Rhino-Display-Mode-Properties via Python-API unzuverlaessig
|
Methode weil sich Mac-Rhino-Display-Mode-Properties via Python-API
|
||||||
setzen lassen — der User baut den Mode einmal manuell perfekt zusammen
|
unzuverlaessig setzen lassen.
|
||||||
und exportiert ihn dort hin.
|
|
||||||
|
Args:
|
||||||
|
target_name: 'Dossier Plan' / 'Dossier 3D' / ...
|
||||||
|
target_guid: Fix-Guid die wir fuer Re-Imports wiederverwenden
|
||||||
|
template_basename: 'dossier_plan.ini' / 'dossier_3d.ini'
|
||||||
|
fallback_base_name: 'Technical' / 'Shaded' — Mode zum Klonen
|
||||||
"""
|
"""
|
||||||
print("[OBERLEISTE] Plan-Mode: check...")
|
print("[OBERLEISTE] {}: check...".format(target_name))
|
||||||
try:
|
try:
|
||||||
from Rhino.Display import DisplayModeDescription
|
from Rhino.Display import DisplayModeDescription
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print("[OBERLEISTE] Plan-Mode: DMD nicht verfuegbar:", ex)
|
print("[OBERLEISTE] {}: DMD nicht verfuegbar: {}".format(target_name, ex))
|
||||||
return False
|
return False
|
||||||
import re # fuer ini-checks unten
|
import re
|
||||||
target_name = "Dossier Plan"
|
template_ini_path = os.path.join(_TEMPLATES_DIR, template_basename)
|
||||||
try:
|
try:
|
||||||
import System
|
import System
|
||||||
target_guid_obj = System.Guid(_DOSSIER_PLAN_GUID)
|
target_guid_obj = System.Guid(target_guid)
|
||||||
except Exception:
|
except Exception:
|
||||||
target_guid_obj = None
|
target_guid_obj = None
|
||||||
# Template-Datei vorhanden? Wenn ja, Hash davon als "version key"
|
# Template-Datei vorhanden? Wenn ja, Hash davon als "version key"
|
||||||
# benutzen — wir nur neu importieren wenn sich die Template-Datei
|
# benutzen — wir nur neu importieren wenn sich die Template-Datei
|
||||||
# geaendert hat.
|
# geaendert hat.
|
||||||
template_exists = os.path.isfile(_TEMPLATE_INI_PATH)
|
template_exists = os.path.isfile(template_ini_path)
|
||||||
print("[OBERLEISTE] Plan-Mode template: {}".format(
|
print("[OBERLEISTE] {} template: {}".format(target_name,
|
||||||
"found at " + _TEMPLATE_INI_PATH if template_exists else "missing → fallback"))
|
"found at " + template_ini_path if template_exists else "missing"))
|
||||||
|
# Fallback-Clone nur fuer "Dossier Plan" erlauben. Bei anderen Modes
|
||||||
|
# ohne Template skippen — sonst klonen wir z.B. den Raytraced-Mode mit
|
||||||
|
# Cycles-PipelineId, was Rhinos Display-Mode-State auf Mac korrumpieren
|
||||||
|
# und ALLE Modes nach Restart verschwinden lassen kann. User soll den
|
||||||
|
# Mode in Rhino bauen + per "Save As" -> templates/<basename> exportieren.
|
||||||
|
if not template_exists and target_name != "Dossier Plan":
|
||||||
|
print("[OBERLEISTE] {}: kein Template → skip (in Rhino bauen, "
|
||||||
|
"Display-Mode -> Save As -> {})".format(
|
||||||
|
target_name, template_ini_path))
|
||||||
|
return False
|
||||||
# Schon registriert?
|
# Schon registriert?
|
||||||
try:
|
try:
|
||||||
existing = None
|
existing = None
|
||||||
@@ -385,23 +415,24 @@ def _ensure_dossier_plan_display_mode():
|
|||||||
# exportiert) — sonst Fallback auf Technical-Clone.
|
# exportiert) — sonst Fallback auf Technical-Clone.
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
import tempfile
|
import tempfile
|
||||||
tmp_path = os.path.join(tempfile.gettempdir(), "dossier_plan.ini")
|
tmp_path = os.path.join(tempfile.gettempdir(), template_basename)
|
||||||
base = None
|
base = None
|
||||||
if template_exists:
|
if template_exists:
|
||||||
# Template-ini lesen + ueberschreiben den tmp_path
|
# Template-ini lesen + ueberschreiben den tmp_path
|
||||||
try:
|
try:
|
||||||
with open(_TEMPLATE_INI_PATH, "r", encoding="utf-8", errors="ignore") as f:
|
with open(template_ini_path, "r", encoding="utf-8", errors="ignore") as f:
|
||||||
content = f.read()
|
content = f.read()
|
||||||
print("[OBERLEISTE] Plan-Mode: Template geladen ({} bytes)".format(len(content)))
|
print("[OBERLEISTE] {}: Template geladen ({} bytes)".format(
|
||||||
|
target_name, len(content)))
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print("[OBERLEISTE] Plan-Mode Template read:", ex)
|
print("[OBERLEISTE] {} Template read: {}".format(target_name, ex))
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
# Fallback: Technical exportieren + patchen
|
# Fallback: einen Base-Mode exportieren + patchen
|
||||||
try:
|
try:
|
||||||
all_modes = list(DisplayModeDescription.GetDisplayModes())
|
all_modes = list(DisplayModeDescription.GetDisplayModes())
|
||||||
except Exception: all_modes = []
|
except Exception: all_modes = []
|
||||||
for prefer in ("Technical", "Pen", "Shaded"):
|
for prefer in (fallback_base_name, "Technical", "Pen", "Shaded"):
|
||||||
for dm in all_modes:
|
for dm in all_modes:
|
||||||
try:
|
try:
|
||||||
if dm.EnglishName == prefer:
|
if dm.EnglishName == prefer:
|
||||||
@@ -434,18 +465,24 @@ def _ensure_dossier_plan_display_mode():
|
|||||||
r'(?i)^(\s*Name\s*=\s*)(.*)$',
|
r'(?i)^(\s*Name\s*=\s*)(.*)$',
|
||||||
r'\1' + target_name, content, count=1, flags=re.MULTILINE)
|
r'\1' + target_name, content, count=1, flags=re.MULTILINE)
|
||||||
except Exception: pass
|
except Exception: pass
|
||||||
# Guid (im ini meist als [<guid>] Section-Header oder als "id="-Feld)
|
# Mode-Guid PRAEZISE per Section-Header finden — nicht irgendeine
|
||||||
|
# Guid im ini erwischen (PipelineId etc. sind eigene Guids die wir
|
||||||
|
# NICHT anfassen duerfen, sonst geht die Pipeline-Referenz kaputt
|
||||||
|
# und Rhino verliert den Mode bzw. crasht beim Klick).
|
||||||
try:
|
try:
|
||||||
# Bestehende Guid aus dem File extrahieren + ueberall ersetzen
|
|
||||||
old_guid_match = re.search(
|
old_guid_match = re.search(
|
||||||
r'([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})',
|
r'\[DisplayMode\\([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})',
|
||||||
content)
|
content)
|
||||||
if old_guid_match:
|
if old_guid_match:
|
||||||
old_guid = old_guid_match.group(1)
|
old_guid = old_guid_match.group(1)
|
||||||
content = content.replace(old_guid, _DOSSIER_PLAN_GUID)
|
content = content.replace(old_guid, target_guid)
|
||||||
content = content.replace(old_guid.upper(),
|
content = content.replace(old_guid.upper(),
|
||||||
_DOSSIER_PLAN_GUID.upper())
|
target_guid.upper())
|
||||||
except Exception: pass
|
else:
|
||||||
|
print("[OBERLEISTE] {}: kein DisplayMode-Section-Header "
|
||||||
|
"gefunden — Mode-Guid nicht ersetzt".format(target_name))
|
||||||
|
except Exception as ex:
|
||||||
|
print("[OBERLEISTE] {} Guid-Replace: {}".format(target_name, ex))
|
||||||
# Plan-Mode-Settings in der ini patchen — Rhino-DisplayMode-ini hat
|
# Plan-Mode-Settings in der ini patchen — Rhino-DisplayMode-ini hat
|
||||||
# nested Sections wie [DisplayMode\<guid>\Objects\Surfaces]. Wir
|
# nested Sections wie [DisplayMode\<guid>\Objects\Surfaces]. Wir
|
||||||
# patchen nur EXISTIERENDE Keys (Rhino's Parser stripped unbekannte
|
# patchen nur EXISTIERENDE Keys (Rhino's Parser stripped unbekannte
|
||||||
@@ -460,8 +497,12 @@ def _ensure_dossier_plan_display_mode():
|
|||||||
|
|
||||||
# Bei Template-Pfad: NUR Name+Guid normalisieren, KEINE inhaltlichen
|
# Bei Template-Pfad: NUR Name+Guid normalisieren, KEINE inhaltlichen
|
||||||
# Patches (User hat das Template bewusst so konfiguriert).
|
# Patches (User hat das Template bewusst so konfiguriert).
|
||||||
# Bei Fallback-Pfad (Technical-Clone): die bekannten Settings forcen.
|
# Bei Fallback-Pfad fuer Dossier Plan (Technical-Clone): die Plan-
|
||||||
if not template_exists:
|
# spezifischen Settings forcen. Andere Modes (Material/Raytracing)
|
||||||
|
# uebernehmen den Fallback-Base 1:1 — sonst wuerden Plan-Settings
|
||||||
|
# wie TechnicalMask in eine Rendered/Raytraced-ini gequetscht und
|
||||||
|
# alles zerschiessen.
|
||||||
|
if not template_exists and target_name == "Dossier Plan":
|
||||||
for key, val in (
|
for key, val in (
|
||||||
("ClipSectionUsage", "1"),
|
("ClipSectionUsage", "1"),
|
||||||
("TechnicalMask", "15"),
|
("TechnicalMask", "15"),
|
||||||
@@ -2092,9 +2133,12 @@ def _bridge_factory():
|
|||||||
# Custom Display-Mode 'Dossier Plan' beim Modul-Load registrieren — laeuft
|
# Custom Display-Mode 'Dossier Plan' beim Modul-Load registrieren — laeuft
|
||||||
# bei jedem startup.py oder _reset_panels.py, unabhaengig davon ob das
|
# bei jedem startup.py oder _reset_panels.py, unabhaengig davon ob das
|
||||||
# Panel jemals geoeffnet wird. Funktion ist idempotent.
|
# Panel jemals geoeffnet wird. Funktion ist idempotent.
|
||||||
try: _ensure_dossier_plan_display_mode()
|
# Alle Dossier-Display-Modes registrieren (Plan, 3D, ...)
|
||||||
except Exception as ex:
|
for _name, _guid, _tmpl, _fallback in _DOSSIER_DISPLAY_MODES:
|
||||||
print("[OBERLEISTE] ensure_dossier_plan_display_mode:", ex)
|
try:
|
||||||
|
_ensure_dossier_display_mode(_name, _guid, _tmpl, _fallback)
|
||||||
|
except Exception as _ex:
|
||||||
|
print("[OBERLEISTE] ensure {}: {}".format(_name, _ex))
|
||||||
|
|
||||||
|
|
||||||
panel_base.register_and_open("oberleiste", "Oberleiste", PANEL_GUID_STR, _bridge_factory,
|
panel_base.register_and_open("oberleiste", "Oberleiste", PANEL_GUID_STR, _bridge_factory,
|
||||||
|
|||||||
@@ -293,6 +293,17 @@ def activate_schnitt(doc, z, skip_view=False):
|
|||||||
vp.ChangeToParallelProjection(True)
|
vp.ChangeToParallelProjection(True)
|
||||||
vp.SetCameraLocations(target, cam_pos)
|
vp.SetCameraLocations(target, cam_pos)
|
||||||
vp.CameraUp = rg.Vector3d(0, 0, 1)
|
vp.CameraUp = rg.Vector3d(0, 0, 1)
|
||||||
|
# Display-Mode auf 'Dossier Plan' — auch bei Perspektive, damit
|
||||||
|
# die Section-Hatches sichtbar sind. User kann manuell wechseln.
|
||||||
|
try:
|
||||||
|
from Rhino.Display import DisplayModeDescription
|
||||||
|
for dm in DisplayModeDescription.GetDisplayModes():
|
||||||
|
try:
|
||||||
|
if dm.EnglishName == "Dossier Plan":
|
||||||
|
vp.DisplayMode = dm
|
||||||
|
break
|
||||||
|
except Exception: pass
|
||||||
|
except Exception: pass
|
||||||
# Zoom auf Schnitt-BoundingBox + etwas Rand. Bei Perspektive
|
# Zoom auf Schnitt-BoundingBox + etwas Rand. Bei Perspektive
|
||||||
# macht ZoomBoundingBox auch Sinn — Rhino passt das FOV-Frame
|
# macht ZoomBoundingBox auch Sinn — Rhino passt das FOV-Frame
|
||||||
# entsprechend an.
|
# entsprechend an.
|
||||||
|
|||||||
@@ -76,6 +76,71 @@ def _migrate_active_doc(*_):
|
|||||||
print("[STARTUP] Migration:", ex)
|
print("[STARTUP] Migration:", ex)
|
||||||
|
|
||||||
|
|
||||||
|
_DOC_FLAG_VIEW_MODES = "dossier_view_modes_initialized"
|
||||||
|
|
||||||
|
|
||||||
|
def _assign_default_display_modes(doc):
|
||||||
|
"""Setzt einmalig pro Doc die Display-Modes auf die Dossier-Defaults:
|
||||||
|
- Parallel-Projektionen (Top/Front/Right/Schnitt-parallel) -> 'Dossier Plan'
|
||||||
|
- Perspektive (Perspective/Schnittperspektive) -> 'Dossier 3D'
|
||||||
|
Persistiert einen Flag in doc.Strings → laeuft nur EINMAL pro Doc.
|
||||||
|
User-Overrides (manuelles Wechseln) bleiben damit erhalten.
|
||||||
|
"""
|
||||||
|
if doc is None: return
|
||||||
|
try:
|
||||||
|
if doc.Strings.GetValue(_DOC_FLAG_VIEW_MODES) == "1":
|
||||||
|
return # schon initialisiert
|
||||||
|
except Exception: pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
from Rhino.Display import DisplayModeDescription
|
||||||
|
except Exception as ex:
|
||||||
|
print("[STARTUP] view-modes: DMD nicht verfuegbar:", ex); return
|
||||||
|
|
||||||
|
# Mode-Lookup per Name
|
||||||
|
mode_plan = mode_3d = None
|
||||||
|
try:
|
||||||
|
for dm in DisplayModeDescription.GetDisplayModes():
|
||||||
|
try:
|
||||||
|
n = dm.EnglishName
|
||||||
|
if n == "Dossier Plan": mode_plan = dm
|
||||||
|
elif n == "Dossier 3D": mode_3d = dm
|
||||||
|
except Exception: pass
|
||||||
|
except Exception as ex:
|
||||||
|
print("[STARTUP] view-modes: Mode-List:", ex); return
|
||||||
|
|
||||||
|
if mode_plan is None and mode_3d is None:
|
||||||
|
print("[STARTUP] view-modes: keine Dossier-Modes registriert — skip")
|
||||||
|
return
|
||||||
|
|
||||||
|
n_set = 0
|
||||||
|
try:
|
||||||
|
for view in doc.Views:
|
||||||
|
try:
|
||||||
|
vp = view.ActiveViewport
|
||||||
|
if vp is None: continue
|
||||||
|
is_par = bool(vp.IsParallelProjection)
|
||||||
|
target = mode_plan if is_par else mode_3d
|
||||||
|
if target is None: continue
|
||||||
|
try:
|
||||||
|
vp.DisplayMode = target
|
||||||
|
n_set += 1
|
||||||
|
except Exception as ex:
|
||||||
|
print("[STARTUP] view-modes set ({}): {}".format(
|
||||||
|
vp.Name, ex))
|
||||||
|
except Exception: pass
|
||||||
|
try:
|
||||||
|
doc.Views.Redraw()
|
||||||
|
except Exception: pass
|
||||||
|
except Exception as ex:
|
||||||
|
print("[STARTUP] view-modes iterate:", ex)
|
||||||
|
|
||||||
|
try:
|
||||||
|
doc.Strings.SetString(_DOC_FLAG_VIEW_MODES, "1")
|
||||||
|
except Exception: pass
|
||||||
|
print("[STARTUP] view-modes: {} Viewport(s) gesetzt".format(n_set))
|
||||||
|
|
||||||
|
|
||||||
def _on_doc_opened(sender, e):
|
def _on_doc_opened(sender, e):
|
||||||
"""Greift bei jedem geoeffneten Doc nach Rhino-Start. Migration ist
|
"""Greift bei jedem geoeffneten Doc nach Rhino-Start. Migration ist
|
||||||
idempotent (Flag in doc.Strings)."""
|
idempotent (Flag in doc.Strings)."""
|
||||||
@@ -83,6 +148,7 @@ def _on_doc_opened(sender, e):
|
|||||||
doc = e.Document if hasattr(e, "Document") else Rhino.RhinoDoc.ActiveDoc
|
doc = e.Document if hasattr(e, "Document") else Rhino.RhinoDoc.ActiveDoc
|
||||||
import panel_base
|
import panel_base
|
||||||
panel_base.migrate_to_dossier(doc)
|
panel_base.migrate_to_dossier(doc)
|
||||||
|
_assign_default_display_modes(doc)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print("[STARTUP] _on_doc_opened:", ex)
|
print("[STARTUP] _on_doc_opened:", ex)
|
||||||
|
|
||||||
@@ -141,6 +207,11 @@ def _load_all(sender, e):
|
|||||||
text_editor._ensure_double_click_hook()
|
text_editor._ensure_double_click_hook()
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print("[STARTUP] text_editor hook:", ex)
|
print("[STARTUP] text_editor hook:", ex)
|
||||||
|
# Display-Modes auf Default fuer aktives Doc setzen (einmalig)
|
||||||
|
try:
|
||||||
|
_assign_default_display_modes(Rhino.RhinoDoc.ActiveDoc)
|
||||||
|
except Exception as ex:
|
||||||
|
print("[STARTUP] view-modes assign:", ex)
|
||||||
# DOSSIERUI Window-Layout — Hinweis fuer manuelles Laden
|
# DOSSIERUI Window-Layout — Hinweis fuer manuelles Laden
|
||||||
_hint_dossier_ui()
|
_hint_dossier_ui()
|
||||||
# Startup-Timing-Summary 3 Sekunden spaeter (nachdem alle async Idle-
|
# Startup-Timing-Summary 3 Sekunden spaeter (nachdem alle async Idle-
|
||||||
|
|||||||
@@ -0,0 +1,323 @@
|
|||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d]
|
||||||
|
PipelineId=e1eb7363-87f2-4a2b-a861-256e77835369
|
||||||
|
SupportsShading=y
|
||||||
|
SupportsStereo=y
|
||||||
|
AddToMenu=y
|
||||||
|
AllowObjectAssignment=y
|
||||||
|
ShadedPipelineRequired=y
|
||||||
|
WireframePipelineRequired=y
|
||||||
|
PipelineLocked=y
|
||||||
|
Order=-5
|
||||||
|
DerivedFrom=00000000-0000-0000-0000-000000000000
|
||||||
|
Name=Dossier 3D
|
||||||
|
XrayAllObjects=n
|
||||||
|
IgnoreHighlights=n
|
||||||
|
DisableConduits=n
|
||||||
|
DisableTransparency=n
|
||||||
|
BBoxMode=0
|
||||||
|
RealtimeDisplayId=00000000-0000-0000-0000-000000000000
|
||||||
|
SupportsShadeCmd=y
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Lighting]
|
||||||
|
ShadowIntensity=40
|
||||||
|
ShadowClippingRadius=0
|
||||||
|
ShadowClippingUsage=0
|
||||||
|
PerPixelLighting=n
|
||||||
|
TransparencyTolerance=40
|
||||||
|
ShadowBlur=0
|
||||||
|
ShadowBias=10,12,0
|
||||||
|
ShowLights=n
|
||||||
|
UseHiddenLights=n
|
||||||
|
UseLightColor=n
|
||||||
|
LightingScheme=2
|
||||||
|
Luminosity=0
|
||||||
|
AmbientColor=0,0,0
|
||||||
|
LightCount=0
|
||||||
|
CastShadows=y
|
||||||
|
ShadowMapSize=2048
|
||||||
|
SkylightShadowQuality=4
|
||||||
|
NumSamples=4
|
||||||
|
ShadowMapType=2
|
||||||
|
ShadowBitDepth=32
|
||||||
|
ShadowColor=0,0,0
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Objects]
|
||||||
|
CPHidePoints=n
|
||||||
|
CPHighlight=y
|
||||||
|
CPHidden=n
|
||||||
|
nCPWireThickness=1
|
||||||
|
LockedUsage=2
|
||||||
|
LockedTrans=50
|
||||||
|
GhostLockedObjects=n
|
||||||
|
ClipSectionUsage=0
|
||||||
|
CPColor=0,0,0
|
||||||
|
eCVStyle=102
|
||||||
|
nCVSize=3
|
||||||
|
LayersFollowLockUsage=n
|
||||||
|
LockedObjectsBehind=n
|
||||||
|
LockedColor=100,100,100
|
||||||
|
CPSolidLines=n
|
||||||
|
CPSingleColor=n
|
||||||
|
CPHideSurface=n
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Objects\Annotations]
|
||||||
|
DotBorderColor=-1
|
||||||
|
ShowText=y
|
||||||
|
ShowAnnotations=y
|
||||||
|
DotTextColor=-1
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Objects\Curves]
|
||||||
|
ShowCurves=y
|
||||||
|
CurveThicknessUsage=0
|
||||||
|
LineJoinStyle=0
|
||||||
|
LineEndCapStyle=0
|
||||||
|
CurvePattern=-1
|
||||||
|
CurveTrans=0
|
||||||
|
CurveThickness=1
|
||||||
|
CurveColor=0,0,0
|
||||||
|
SingleCurveColor=n
|
||||||
|
ShowCurvatureHair=n
|
||||||
|
CurveThicknessScale=1
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Objects\Meshes]
|
||||||
|
ShowMeshNakedEdges=n
|
||||||
|
MeshNonmanifoldEdgeColor=0,0,0
|
||||||
|
MeshNakedEdgeColor=0,0,0
|
||||||
|
MeshEdgeColor=0,0,0
|
||||||
|
MeshNonmanifoldEdgeColorReduction=0
|
||||||
|
MeshNakedEdgeColorReduction=0
|
||||||
|
MeshEdgeColorReduction=0
|
||||||
|
MeshNonmanifoldEdgeThickness=0
|
||||||
|
MeshNakedEdgeThickness=2
|
||||||
|
MeshEdgeThickness=2
|
||||||
|
ShowMeshNonmanifoldEdges=n
|
||||||
|
ShowMeshEdges=n
|
||||||
|
MeshVertexSize=0
|
||||||
|
ShowMeshVertices=n
|
||||||
|
ShowMeshWires=n
|
||||||
|
MeshWirePattern=-1
|
||||||
|
MeshWireThickness=1
|
||||||
|
MeshWireColor=0,0,0
|
||||||
|
SingleMeshWireColor=n
|
||||||
|
HighlightMeshes=n
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Objects\Points]
|
||||||
|
PCSize=2
|
||||||
|
ShowPoints=y
|
||||||
|
PointStyle=51
|
||||||
|
PointSize=3
|
||||||
|
PCGripStyle=102
|
||||||
|
PCGripSize=2
|
||||||
|
PCStyle=50
|
||||||
|
ShowPointClouds=y
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Objects\SubD]
|
||||||
|
CreaseVisible=n
|
||||||
|
CreaseUsage=0
|
||||||
|
CreaseColor=255,255,255
|
||||||
|
CreaseColorReduction=0
|
||||||
|
CreaseThickness=2
|
||||||
|
CreaseThicknessScale=1
|
||||||
|
CreaseApplyPattern=y
|
||||||
|
NonmanifoldVisible=n
|
||||||
|
NonmanifoldUsage=0
|
||||||
|
NonmanifoldColor=255,255,255
|
||||||
|
NonmanifoldColorReduction=0
|
||||||
|
NonmanifoldThickness=1
|
||||||
|
NonmanifoldThicknessScale=1
|
||||||
|
NonmanifoldApplyPattern=y
|
||||||
|
BoundaryVisible=n
|
||||||
|
BoundaryUsage=0
|
||||||
|
BoundaryColor=255,255,255
|
||||||
|
SmoothColorReduction=0
|
||||||
|
SmoothColor=255,255,255
|
||||||
|
ShowSymmetryAxis=y
|
||||||
|
SmoothVisible=n
|
||||||
|
SubDThicknessUsage=0
|
||||||
|
BoundaryColorReduction=0
|
||||||
|
BoundaryThickness=2
|
||||||
|
SmoothThickness=1
|
||||||
|
BoundaryThicknessScale=2
|
||||||
|
BoundaryApplyPattern=y
|
||||||
|
ShowReflectedPlane=y
|
||||||
|
SmoothUsage=0
|
||||||
|
PlaneColorUsage=2
|
||||||
|
SymmetryAxisThickness=0.02500000037252903
|
||||||
|
ReflectedColor=64,64,64
|
||||||
|
ColorPercentage=30
|
||||||
|
AxisColor=255,0,0
|
||||||
|
SmoothThicknessScale=1
|
||||||
|
SmoothApplyPattern=y
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Objects\Surfaces]
|
||||||
|
EdgeColorReduction=0
|
||||||
|
SurfaceKappaHair=n
|
||||||
|
HighlightSurfaces=n
|
||||||
|
ShowIsocurves=n
|
||||||
|
IsoThicknessUsed=n
|
||||||
|
IsocurveThickness=1
|
||||||
|
IsoUThickness=1
|
||||||
|
IsoVThickness=1
|
||||||
|
IsoWThickness=1
|
||||||
|
SingleIsoColor=n
|
||||||
|
IsoColor=0,0,0
|
||||||
|
IsoColorsUsed=n
|
||||||
|
IsoUColor=0,0,0
|
||||||
|
IsoVColor=0,0,0
|
||||||
|
IsoWColor=0,0,0
|
||||||
|
IsoPatternUsed=n
|
||||||
|
IsocurvePattern=-1
|
||||||
|
IsoUPattern=-1
|
||||||
|
IsoVPattern=-1
|
||||||
|
IsoWPattern=-1
|
||||||
|
ShowEdges=y
|
||||||
|
ShowNakedEdges=n
|
||||||
|
ShowTangentEdges=n
|
||||||
|
ShowTangentSeams=n
|
||||||
|
ShowNonmanifoldEdges=n
|
||||||
|
ShowEdgeEndpoints=n
|
||||||
|
EdgeThickness=1
|
||||||
|
EdgeColorUsage=0
|
||||||
|
NakedEdgeThickness=2
|
||||||
|
NakedEdgeColorUsage=0
|
||||||
|
NakedEdgeColorReduction=0
|
||||||
|
EdgeColor=0,0,0
|
||||||
|
NakedEdgeColor=0,0,0
|
||||||
|
NonmanifoldEdgeColor=0,0,0
|
||||||
|
EdgePattern=-1
|
||||||
|
NakedEdgePattern=-1
|
||||||
|
NonmanifoldEdgePattern=-1
|
||||||
|
SurfaceThicknessUsage=0
|
||||||
|
SurfaceEdgeThicknessScale=2
|
||||||
|
SurfaceEdgeApplyPattern=y
|
||||||
|
SurfaceNakedEdgeUseNormalEdgeThickness=y
|
||||||
|
SurfaceNakedEdgeThicknessScale=2
|
||||||
|
SurfaceNakedEdgeApplyPattern=y
|
||||||
|
SurfaceIsoUThicknessScale=1
|
||||||
|
SurfaceIsoVThicknessScale=1
|
||||||
|
SurfaceIsoWThicknessScale=1
|
||||||
|
SurfaceIsoUApplyPattern=y
|
||||||
|
SurfaceIsoVApplyPattern=y
|
||||||
|
SurfaceIsoWApplyPattern=y
|
||||||
|
ShowFlatSurfaceIsos=n
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Objects\Technical]
|
||||||
|
TEThickness=1
|
||||||
|
TCThickness=1
|
||||||
|
TSThickness=1
|
||||||
|
TIThickness=1
|
||||||
|
THColor=0,0,0
|
||||||
|
TEColor=0,0,0
|
||||||
|
TSiColor=0,0,0
|
||||||
|
TCColor=0,0,0
|
||||||
|
TSColor=0,0,0
|
||||||
|
TIColor=0,0,0
|
||||||
|
TechnicalMask=14
|
||||||
|
TechnicalUsageMask=0
|
||||||
|
THThickness=1
|
||||||
|
TSiThickness=1
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Shading]
|
||||||
|
ParallelLineRotation=0
|
||||||
|
CullBackfaces=n
|
||||||
|
ShadeVertexColors=n
|
||||||
|
SingleWireColor=n
|
||||||
|
WireColor=0,0,0
|
||||||
|
ShadeSurface=y
|
||||||
|
UseObjectMaterial=n
|
||||||
|
UseObjectBFMaterial=n
|
||||||
|
BakeTextures=y
|
||||||
|
ShowDecals=y
|
||||||
|
SurfaceColorWriting=y
|
||||||
|
ShadingEffect=0
|
||||||
|
ParallelLineWidth=2
|
||||||
|
ParallelLineSeparation=3
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Shading\Material]
|
||||||
|
BackIsCustom=y
|
||||||
|
FrontIsCustom=n
|
||||||
|
UseBackMaterial=y
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Shading\Material\Back Material]
|
||||||
|
ShineIntensity=100
|
||||||
|
Luminosity=0
|
||||||
|
Reflectivity=0
|
||||||
|
Transparency=0
|
||||||
|
Specular=255,255,255
|
||||||
|
Shine=0
|
||||||
|
Diffuse=126,126,126
|
||||||
|
OverrideObjectReflectivity=y
|
||||||
|
OverrideObjectTransparency=y
|
||||||
|
OverrideObjectColor=n
|
||||||
|
FlatShaded=n
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Shading\Material\Back Material\BitmapTexture]
|
||||||
|
=
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Shading\Material\Back Material\EmapTexture]
|
||||||
|
=
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Shading\Material\Back Material\TransparencyTexture]
|
||||||
|
=
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Shading\Material\Front Material]
|
||||||
|
Diffuse=126,126,126
|
||||||
|
Specular=255,255,255
|
||||||
|
Shine=128
|
||||||
|
ShineIntensity=100
|
||||||
|
Reflectivity=0
|
||||||
|
Transparency=0
|
||||||
|
FlatShaded=y
|
||||||
|
OverrideObjectColor=n
|
||||||
|
OverrideObjectTransparency=y
|
||||||
|
OverrideObjectReflectivity=y
|
||||||
|
Luminosity=0
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Shading\Material\Front Material\BitmapTexture]
|
||||||
|
=
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Shading\Material\Front Material\EmapTexture]
|
||||||
|
=
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\Shading\Material\Front Material\TransparencyTexture]
|
||||||
|
=
|
||||||
|
[DisplayMode\d0551e72-7e72-4170-b1a4-3d3d3d3d3d3d\View settings]
|
||||||
|
ShowClippingPlanes=n
|
||||||
|
FlipGlasses=n
|
||||||
|
AGViewingMode=0
|
||||||
|
AGColorMode=0
|
||||||
|
StereoParallax=1
|
||||||
|
StereoSeparation=1
|
||||||
|
StereoModeEnabled=0
|
||||||
|
BackgroundBitmap=
|
||||||
|
GradBotRight=210,210,210
|
||||||
|
WzColor=0,0,150
|
||||||
|
GridTrans=60
|
||||||
|
WyColor=75,150,75
|
||||||
|
WxColor=150,75,75
|
||||||
|
WorldAxesColor=0
|
||||||
|
GridPlaneColor=0,0,0
|
||||||
|
PlaneUsesGridColor=n
|
||||||
|
AxesPercentage=100
|
||||||
|
PlaneVisibility=0
|
||||||
|
GridPlaneTrans=90
|
||||||
|
DrawTransGridPlane=n
|
||||||
|
GradTopRight=240,240,240
|
||||||
|
GradBotLeft=210,210,210
|
||||||
|
GradTopLeft=240,240,240
|
||||||
|
SolidColor=250,250,250
|
||||||
|
FillMode=2
|
||||||
|
CustomLinearWorkflowPostProcessGamma=2.200000047683716
|
||||||
|
CustomLinearWorkflowPreProcessGamma=2.200000047683716
|
||||||
|
CustomLinearWorkflowPostProcessFrameBuffer=n
|
||||||
|
CustomLinearWorkflowPreProcessTextures=y
|
||||||
|
CustomLinearWorkflowPreProcessColors=y
|
||||||
|
LinearWorkflowUsage=0
|
||||||
|
CustomGroundPlaneShadowOnly=y
|
||||||
|
CustomGroundPlaneAutomaticAltitude=y
|
||||||
|
CustomGroundPlaneAltitude=0
|
||||||
|
CustomGroundPlaneShow=y
|
||||||
|
GroundPlaneUsage=1
|
||||||
|
UseDocumentGrid=n
|
||||||
|
DrawGrid=n
|
||||||
|
DrawAxes=n
|
||||||
|
DrawZAxis=n
|
||||||
|
DrawWorldAxes=n
|
||||||
|
ShowGridOnTop=n
|
||||||
|
ShowTransGrid=n
|
||||||
|
BlendGrid=n
|
||||||
|
VertScale=1
|
||||||
|
HorzScale=1
|
||||||
|
ClippingCPColor=255,255,255
|
||||||
|
ClippingEdgeColor=0,0,0
|
||||||
|
ClippingSurfaceColor=128,128,128
|
||||||
|
ClippingEdgeThickness=3
|
||||||
|
ClippingCPTrans=95
|
||||||
|
ClippingCPUsage=0
|
||||||
|
ClippingEdgesUsage=2
|
||||||
|
ClippingSurfaceUsage=0
|
||||||
|
ClippingShowCP=n
|
||||||
|
ClippingClipSelected=y
|
||||||
|
ClippingShowXEdges=y
|
||||||
|
ClippingShowXSurface=y
|
||||||
+13
-24
@@ -485,28 +485,10 @@ function SectionBlock({ sel }) {
|
|||||||
setter={setSectionStyle}
|
setter={setSectionStyle}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{/* Hintergrund (Solid-Fill hinter dem Hatch-Pattern) */}
|
{/* Fill — Objekt-Pen (Color/LW/Linetype) als 'Fill' weil dessen
|
||||||
{!isLayerSource && enabled && (
|
Color in Plan-Mode visuell die Schnittflaeche fuellt. */}
|
||||||
<>
|
<SectionHead title="Fill" />
|
||||||
<SectionHead title="Solid-Fill" />
|
<PenBlock sel={sel} />
|
||||||
<div style={{ padding: '0 14px 12px', display: 'flex', flexDirection: 'column', gap: 6 }}>
|
|
||||||
<div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>
|
|
||||||
<BarToggle label={backgroundColor ? 'Solid' : 'Transparent'}
|
|
||||||
icon={backgroundColor ? 'format_color_fill' : 'check_box_outline_blank'}
|
|
||||||
active={!!backgroundColor}
|
|
||||||
onClick={() => callSetter({
|
|
||||||
backgroundColor: backgroundColor ? null : '#ffffff'
|
|
||||||
})} />
|
|
||||||
</div>
|
|
||||||
{backgroundColor && (
|
|
||||||
<ColorBar
|
|
||||||
color={backgroundColor}
|
|
||||||
onChange={(c) => callSetter({ backgroundColor: c })}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -565,8 +547,15 @@ export default function GestaltungApp() {
|
|||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<SectionHead title={penLabel} />
|
{/* PenBlock fuer 2D/Curves oben, fuer 3D innerhalb der
|
||||||
<PenBlock sel={sel} />
|
SectionBlock als 'Fill' weiter unten (User-Erfahrung:
|
||||||
|
ObjektFarbe fuehlt sich wie Section-Fill an). */}
|
||||||
|
{kind !== '3d' && (
|
||||||
|
<>
|
||||||
|
<SectionHead title={penLabel} />
|
||||||
|
<PenBlock sel={sel} />
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
{showSection && (
|
{showSection && (
|
||||||
<SectionBlock sel={sel} />
|
<SectionBlock sel={sel} />
|
||||||
|
|||||||
Reference in New Issue
Block a user