# dblclick.py # SSG_BLOCKEDIT - Dispatcher fuer Rechtsklick-Bearbeitung von SSG-Bloecken # Prueft den selektierten Block und oeffnet den passenden Dialog. # ============================================ import PyRx as Rx import PyDb as Db import PyEd as Ed from elemente.kreisel import kreisel_edit_entity from elemente.eckrad import eckrad_edit_entity @Rx.command("SSG_BLOCKEDIT") def ssg_blockedit(): """Dispatcher: prueft selektierten Block und oeffnet passenden Dialog. Wird aus dem Rechtsklick-Kontextmenue aufgerufen. Erkennt KREISEL_* und ECKRAD_* Bloecke und oeffnet den jeweiligen wxPython-Bearbeitungsdialog. Bei anderen Bloecken wird BEDIT gestartet. """ ed = Ed.Editor() db = Db.HostApplicationServices().workingDatabase() # Implied Selection nutzen (bereits selektiertes Objekt) res = ed.selectImplied() if res[0] != Ed.PromptStatus.eOk: return ss = res[1] if ss.length() == 0: return ent_id = ss.getObjectIds()[0] ent = Db.Entity(ent_id, Db.OpenMode.kForRead) if not ent.isKindOf(Db.BlockReference.desc()): return bref = Db.BlockReference(ent_id, Db.OpenMode.kForRead) btr = Db.BlockTableRecord(bref.blockTableRecord(), Db.OpenMode.kForRead) bname = btr.getName().upper() if bname.startswith("KREISEL_"): kreisel_edit_entity(db, ent_id) elif bname.startswith("ECKRAD_"): eckrad_edit_entity(db, ent_id) else: # Anderer Block -> normaler Block-Editor ed.runCommand("_.BEDIT\n")