Contextmenü für die Rechte Maustaste eingeführt um Elemente zu bearbeiten

This commit is contained in:
2026-06-15 14:30:55 +02:00
parent b829b7e961
commit c915a4031f
3 changed files with 90 additions and 16 deletions
+74
View File
@@ -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)
+12 -15
View File
@@ -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/<sivasnr>.dxf speichern.
4. Ergebnis in results/omniflo/<sivasnr>.dxf speichern.
Hinweis zur Blockstruktur:
Die Geometrie und ATTDEFs verbleiben direkt im Modelspace (flache Struktur).
BricsCAD erstellt beim Einfuegen via LISP (_.INSERT <sivasnr>.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
+4 -1
View File
@@ -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