Doppelklick-Hook auf DOSSIER-Texte + Size-Mapping in RTF
User: Doppelklick auf DOSSIER-Text oeffnet weiterhin Rhinos Editor. Verschiedene Groessen im Editor erscheinen nicht in Rhino. Doppelklick-Hook (rhino/text_editor.py): - _DossierTextDoubleClickHook subklassiert Rhino.UI.MouseCallback. OnMouseDoubleClick prueft selektierte TextEntities auf UserString "dossier_text"="1" und cancelled das Event (= blockt Rhinos Standard-TextEdit-Dialog), setzt sticky["dossier_pending_text_edit"] mit der Obj-ID - _on_idle_check_pending_edit (RhinoApp.Idle event): nimmt sticky-ID auf naechstem Idle-Tick und ruft open_for_edit(obj) — defer noetig weil Eto-Form aus MouseCallback heraus oeffnen Re-Entrancy macht - _ensure_double_click_hook() installiert Hook + Idle-Handler einmalig pro Rhino-Session (idempotent) - startup.py ruft das jetzt direkt nach Modul-Load auf Edit-Mode (open_for_edit): - Liest aus bestehendem TextEntity die Settings (Font, Size, Bold, Italic, Underline, Align) + PlainText - Frame fuer Dialog-Positionierung aus BBox abgeleitet - TextEditorBridge mit edit_obj_id + initial_text gestartet - INIT-Payload um initialText + editMode erweitert - COMMIT: bei edit_obj_id gesetzt → doc.Objects.Replace statt AddText. Plane wird vom Original uebernommen wenn keine explizite Rotation, damit der Text an seinem Platz bleibt Frontend (TextEditorApp.jsx): - Bei INIT mit initialText: editor.innerText wird damit befuellt - htmlToRuns extrahiert font-size in Pixel pro Run (inline style oder computed style != base) - baseCtx _basePx aus computed style des Editor-divs Size-Mapping (rhino/text_editor.py _runs_to_rtf): - fontSizePx in Runs triggert non-trivial (RTF wird generiert) - Pro Run: \fs in Halb-Punkten = 20 * (run_px / 14_base_px) round - 14px = \fs20 (1.0× TextEntity.TextHeight) - 21px = \fs30 (1.5×) - 28px = \fs40 (2.0×) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -906,6 +906,7 @@ def create_text():
|
||||
|
||||
try:
|
||||
import text_editor
|
||||
text_editor._ensure_double_click_hook()
|
||||
text_editor.open_with_frame(p1, p2, origin, width, height)
|
||||
except Exception as ex:
|
||||
print("[TEXT] open editor:", ex)
|
||||
|
||||
Reference in New Issue
Block a user