diff --git a/Lisp/SSG_LIB_Commands.lsp b/Lisp/SSG_LIB_Commands.lsp index 66c263b..127bf4b 100644 --- a/Lisp/SSG_LIB_Commands.lsp +++ b/Lisp/SSG_LIB_Commands.lsp @@ -126,5 +126,79 @@ (princ) ) +;; ============================================================ +;; SSG_BLOCKEDIT - Kontextmenue-Dispatcher +;; Erkennt den selektierten Blocktyp und ruft den passenden +;; Bearbeitungsbefehl auf (Rechtsklick-Kontextmenue). +;; ============================================================ + +(defun c:SSG_BLOCKEDIT ( / ss ent ed bname attribs teileart) + ;; Implied Selection pruefen (Block muss vorselektiert sein) + (setq ss (ssget "I")) + (if (null ss) + (progn + (princ "\nBitte zuerst einen Block auswaehlen.") + (princ) + (exit) + ) + ) + (if (/= (sslength ss) 1) + (progn + (princ "\nBitte genau einen Block auswaehlen.") + (princ) + (exit) + ) + ) + + (setq ent (ssname ss 0)) + (setq ed (entget ent)) + + (if (/= (cdr (assoc 0 ed)) "INSERT") + (progn + (princ "\nKein Block ausgewaehlt.") + (princ) + (exit) + ) + ) + + (setq bname (cdr (assoc 2 ed))) + + (cond + ;; Kreisel-Bloecke -> KreiselEdit + ((wcmatch bname "KREISEL_*") + (princ (strcat "\nKreisel bearbeiten: " bname)) + (c:KreiselEdit) + ) + + ;; Eckrad-Bloecke -> BEDIT (kein eigener Edit-Dialog in LISP) + ((wcmatch bname "ECKRAD_*") + (princ (strcat "\nEckrad bearbeiten: " bname)) + (command "_.BEDIT" bname) + ) + + ;; Omniflo-Bloecke -> OMNI_EDIT + ;; Erkennung: TEILEART-Attribut vorhanden, AP110-Blockname oder rein numerisch + ((progn + (setq attribs (ssg-attrib-read ent)) + (setq teileart (cdr (assoc "TEILEART" attribs))) + (or + teileart + (wcmatch (strcase bname) "AP110*,AP_110*,APG110*") + (wcmatch bname "#*") + ) + ) + (princ (strcat "\nOmniflo Element bearbeiten: " bname)) + (c:OMNI_EDIT) + ) + + ;; Unbekannter Blocktyp -> Standard BEDIT + (t + (princ (strcat "\nBlock bearbeiten (BEDIT): " bname)) + (command "_.BEDIT" bname) + ) + ) + (princ) +) + (princ "\nSSG_LIB_Commands.lsp geladen - Dummy-Befehle registriert.") (princ) diff --git a/lib/set_attributs.py b/lib/set_attributs.py index d51dd2a..2f5010d 100644 --- a/lib/set_attributs.py +++ b/lib/set_attributs.py @@ -11,14 +11,14 @@ Vorgehen pro DXF-Datei: 3. Neue ATTDEFs gemaess cfg/attradd.cfg und JSON-Daten einfuegen. Attributwerte werden aus omniflo_boegen.json / omniflo_weichen.json aufgeloest; der Layer-Name kommt aus dem [layer]-Abschnitt der Config. - 4. Alle Entities (Geometrie + ATTDEFs) in eine Blockdefinition verschieben. - Der Blockname entspricht der Sivasnummer (= Dateiname ohne .dxf). - Als Basispunkt der Blockdefinition wird $INSBASE aus dem DXF-Header - verwendet (gesetzt von set_einfuegepkt.py). - 5. Im Modelspace einen INSERT auf den neuen Block einfuegen, mit - ATTRIB-Entities befuellt aus den ATTDEF-Standardwerten. Dadurch zeigt - BricsCAD beim Klick auf den Block alle Attributwerte an. - 6. Ergebnis in results/omniflo/.dxf speichern. + 4. Ergebnis in results/omniflo/.dxf speichern. + +Hinweis zur Blockstruktur: + Die Geometrie und ATTDEFs verbleiben direkt im Modelspace (flache Struktur). + BricsCAD erstellt beim Einfuegen via LISP (_.INSERT .dxf) automatisch + einen Block mit dem Dateinamen (= Sivasnr) und befuellt die ATTDEFs mit den + Standardwerten als ATTRIBs. Jedes eingefuegte Element wird als eigenstaendiger + Block im Ziel-DWG referenziert. Voraussetzung: Die Quelldateien in data/omniflo/ sollten bereits durch set_einfuegepkt.py @@ -219,6 +219,7 @@ def wrap_entities_in_block(doc, block_name): dxfattribs={ "layer": attdef.dxf.layer, "height": attdef.dxf.height, + "flags": attdef.dxf.flags, }, ) @@ -226,9 +227,8 @@ def wrap_entities_in_block(doc, block_name): def add_attdefs_to_dxf(dxf_path, output_path, attr_defs, json_entry, sivasnr, layer_value=""): """ - Oeffnet eine DXF-Datei, fuegt ATTDEF-Entities in den Modelspace ein, - fasst alle Entities anschliessend in einen Block mit dem Namen sivasnr - zusammen und speichert das Ergebnis. + Oeffnet eine DXF-Datei, fuegt ATTDEF-Entities in den Modelspace ein + und speichert das Ergebnis. attr_defs: Liste von (TAG, source_expression) aus der Config json_entry: Dict mit den JSON-Daten fuer dieses Element @@ -266,15 +266,12 @@ def add_attdefs_to_dxf(dxf_path, output_path, attr_defs, json_entry, sivasnr, "height": ATTDEF_HEIGHT, "insert": (0, y_pos), "prompt": prompt, - "flags": 0, # sichtbar + "flags": 3, # unsichtbar (1) + konstant (2) }, ) y_pos += ATTDEF_SPACING count += 1 - # Alle Entities (Geometrie + ATTDEFs) in Block mit Sivasnr-Namen fassen - wrap_entities_in_block(doc, sivasnr) - doc.saveas(output_path) return count diff --git a/menu/SSG_LIB.mnu b/menu/SSG_LIB.mnu index 399a72d..ebbf811 100644 --- a/menu/SSG_LIB.mnu +++ b/menu/SSG_LIB.mnu @@ -118,4 +118,7 @@ ***POP501 [SSG_LIB Edit Context] -[SSG Bearbeiten]^C^CSSG_BLOCKEDIT +[Kreisel bearbeiten]^C^CKreiselEdit +[Omniflo Element bearbeiten]^C^COMNI_EDIT +[--] +[SSG Bearbeiten (Auto)]^C^CSSG_BLOCKEDIT