[ADD] JAM_EDIT: Dialog fuer Staubereiche (JAM_AREA) aus sps_skel
Neuer Befehl JAM_EDIT (Lisp/Jam_Edit.lsp, dcl/jam_edit.dcl): aendert Foerderer und laufende Nummer eines Staubereichs Jam<NNNN>_<k>, den sps_skel (lib/tro_annotate.py --anlage) als Block JAM_AREA einzeichnet; Knopf zurueck auf den abgeleiteten Wert, Warnung bei doppeltem Namen. SSG_BLOCKEDIT leitet JAM_* per Doppelklick dorthin; ssg_load.lsp laedt das Modul; Texte in de_DE/en_GB. In die SCL kommt die Aenderung mit tro_annotate --read-jams. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,183 @@
|
||||
;; ============================================================
|
||||
;; JAM_EDIT.LSP - Staubereich (JAM_AREA) bearbeiten
|
||||
;;
|
||||
;; Die Staubereiche zeichnet sps_skel (lib/tro_annotate.py --anlage) als
|
||||
;; Block JAM_AREA: ein Rechteck, darin der Name Jam<NNNN>_<k>. Attribute
|
||||
;; NAME sichtbar - Jam0054_3
|
||||
;; CONVEYOR, NUMBER unsichtbar - Foerderer NNNN und laufende Nummer k
|
||||
;; TRO, ENTRY unsichtbar - TRO und Eingang, in den er fuehrt
|
||||
;; (stabiler Schluessel, nicht aendern)
|
||||
;; AREA unsichtbar - Kennung der TRO-JSON (J0039)
|
||||
;; AUTO unsichtbar - von sps_skel abgeleitete Nummer NNNN_k
|
||||
;;
|
||||
;; Aufruf JAM_EDIT:
|
||||
;; - Doppelklick auf den Staubereich -> ***DOUBLECLICK [INSERT] -> SSG_BLOCKEDIT
|
||||
;; - EATTEDIT -> c:EATTEDIT -> SSG_BLOCKEDIT
|
||||
;; - direkt: JAM_EDIT
|
||||
;; Der Dispatcher SSG_BLOCKEDIT (SSG_LIB_Commands.lsp) leitet Blocknamen
|
||||
;; "JAM_*" hierher.
|
||||
;;
|
||||
;; Der Dialog aendert nur die Zeichnung. In die SCL kommt die Aenderung mit
|
||||
;; tro_annotate.bat --file <csv> --read-jams (-> cfg/<csv>_jam_names.ini)
|
||||
;; scl_skeleton.bat --json <csv>_anlage.json --templates
|
||||
;;
|
||||
;; Setzt ssg_core.lsp (ssg-start/ssg-end, ssg-attrib-*) und ssg_lang.lsp voraus.
|
||||
;; ============================================================
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; Nur Ziffern, nicht leer
|
||||
;; ------------------------------------------------------------
|
||||
(defun jam-ziffern-p (s)
|
||||
(and s (/= s "") (not (wcmatch s "*[~0-9]*")))
|
||||
)
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; Name aus Foerderer und Nummer: "0054" "3" -> "Jam0054_3"
|
||||
;; ------------------------------------------------------------
|
||||
(defun jam-name (foerderer nummer)
|
||||
(strcat "Jam" foerderer "_" nummer)
|
||||
)
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; Gibt es den Namen schon an einem anderen Staubereich?
|
||||
;; Liefert die Kennung (AREA) des anderen Blocks oder nil.
|
||||
;; ------------------------------------------------------------
|
||||
(defun jam-name-belegt (name eigener / ss i ent attribs treffer)
|
||||
(setq treffer nil)
|
||||
(if (setq ss (ssget "_X" (list '(0 . "INSERT") '(2 . "JAM_*"))))
|
||||
(progn
|
||||
(setq i 0)
|
||||
(while (and (null treffer) (setq ent (ssname ss i)))
|
||||
(if (not (eq ent eigener))
|
||||
(progn
|
||||
(setq attribs (ssg-attrib-read ent))
|
||||
(if (= (strcase (cond ((cdr (assoc "NAME" attribs))) (""))) (strcase name))
|
||||
(setq treffer (cond ((cdr (assoc "AREA" attribs))) ("?")))
|
||||
)
|
||||
)
|
||||
)
|
||||
(setq i (1+ i))
|
||||
)
|
||||
)
|
||||
)
|
||||
treffer
|
||||
)
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; C:JAM_EDIT - Dialog fuer einen Staubereich
|
||||
;; ------------------------------------------------------------
|
||||
(defun c:JAM_EDIT ( / ss ent ed bname attribs
|
||||
alt-conv alt-nr auto tro entry area
|
||||
neu-conv neu-nr auto-conv auto-nr pos
|
||||
dcl-pfad dat ergebnis name andere)
|
||||
|
||||
;; Implied Selection VOR ssg-start pruefen (ssg-start hebt Selektion auf)
|
||||
(setq ss (ssget "I"))
|
||||
(if (and ss (= (sslength ss) 1)
|
||||
(= (cdr (assoc 0 (entget (ssname ss 0)))) "INSERT"))
|
||||
(setq ent (ssname ss 0))
|
||||
)
|
||||
|
||||
(ssg-start "JAM_EDIT" nil)
|
||||
|
||||
(if (null ent)
|
||||
(progn
|
||||
(princ (ssg-text "cmd-block-auswaehlen"))
|
||||
(setq ss (ssget ":S" '((0 . "INSERT"))))
|
||||
(if ss (setq ent (ssname ss 0)))
|
||||
)
|
||||
)
|
||||
(if (null ent)
|
||||
(progn (princ (ssg-text "cmd-kein-block-ausgewaehlt")) (ssg-end) (exit))
|
||||
)
|
||||
|
||||
(setq ed (entget ent)
|
||||
bname (cdr (assoc 2 ed)))
|
||||
(if (not (wcmatch bname "JAM_*"))
|
||||
(progn
|
||||
(alert (ssg-textf "jam-edit-kein-jam" (list bname)))
|
||||
(ssg-end)
|
||||
(exit)
|
||||
)
|
||||
)
|
||||
|
||||
;; --- aktuelle Attribute lesen ----------------------------------------
|
||||
(setq attribs (ssg-attrib-read ent)
|
||||
alt-conv (cond ((cdr (assoc "CONVEYOR" attribs))) (""))
|
||||
alt-nr (cond ((cdr (assoc "NUMBER" attribs))) (""))
|
||||
auto (cond ((cdr (assoc "AUTO" attribs))) (""))
|
||||
tro (cond ((cdr (assoc "TRO" attribs))) ("?"))
|
||||
entry (cond ((cdr (assoc "ENTRY" attribs))) ("?"))
|
||||
area (cond ((cdr (assoc "AREA" attribs))) ("?")))
|
||||
|
||||
;; AUTO "0054_3" -> Foerderer "0054", Nummer "3"
|
||||
(setq auto-conv "" auto-nr "")
|
||||
(if (setq pos (vl-string-search "_" auto))
|
||||
(setq auto-conv (substr auto 1 pos)
|
||||
auto-nr (substr auto (+ pos 2)))
|
||||
)
|
||||
|
||||
;; --- Dialog -----------------------------------------------------------
|
||||
(setq dcl-pfad (strcat (getenv "DXFM_DCL") "/jam_edit.dcl"))
|
||||
(setq dat (load_dialog dcl-pfad))
|
||||
(if (not (new_dialog "jam_edit" dat))
|
||||
(progn
|
||||
(alert (ssg-textf "jam-edit-dialog-fehlt" (list dcl-pfad)))
|
||||
(ssg-end)
|
||||
(exit)
|
||||
)
|
||||
)
|
||||
|
||||
(set_tile "bereich" (ssg-textf "jam-edit-bereich" (list area tro entry)))
|
||||
(set_tile "auto" (ssg-textf "jam-edit-auto"
|
||||
(list (if (= auto "") "-" (jam-name auto-conv auto-nr)))))
|
||||
(set_tile "hinweis" (ssg-text "jam-edit-hinweis"))
|
||||
(set_tile "conveyor" alt-conv)
|
||||
(set_tile "number" alt-nr)
|
||||
(if (= auto "") (mode_tile "reset" 1))
|
||||
|
||||
(setq neu-conv alt-conv neu-nr alt-nr)
|
||||
(action_tile "reset"
|
||||
"(set_tile \"conveyor\" auto-conv) (set_tile \"number\" auto-nr)")
|
||||
(action_tile "accept"
|
||||
(strcat "(setq neu-conv (vl-string-trim \" \" (get_tile \"conveyor\"))"
|
||||
" neu-nr (vl-string-trim \" \" (get_tile \"number\")))"
|
||||
"(done_dialog 1)"))
|
||||
(action_tile "cancel" "(done_dialog 0)")
|
||||
|
||||
(setq ergebnis (start_dialog))
|
||||
(unload_dialog dat)
|
||||
|
||||
;; --- pruefen und zurueckschreiben -------------------------------------
|
||||
(if (= ergebnis 1)
|
||||
(cond
|
||||
((not (and (jam-ziffern-p neu-conv) (= (strlen neu-conv) 4)))
|
||||
(alert (ssg-text "jam-edit-foerderer-ungueltig")))
|
||||
((not (and (jam-ziffern-p neu-nr) (> (atoi neu-nr) 0)))
|
||||
(alert (ssg-text "jam-edit-nummer-ungueltig")))
|
||||
(t
|
||||
(setq neu-nr (itoa (atoi neu-nr))
|
||||
name (jam-name neu-conv neu-nr))
|
||||
(ssg-attrib-set-on ent (list (cons "CONVEYOR" neu-conv)
|
||||
(cons "NUMBER" neu-nr)
|
||||
(cons "NAME" name)))
|
||||
(entupd ent)
|
||||
(princ (ssg-textf "jam-edit-gespeichert" (list name area)))
|
||||
(if (setq andere (jam-name-belegt name ent))
|
||||
(princ (ssg-textf "jam-edit-doppelt" (list name andere)))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(ssg-end)
|
||||
(princ)
|
||||
)
|
||||
|
||||
|
||||
(prompt "\nJam_Edit.lsp geladen - Befehl: JAM_EDIT")
|
||||
(princ)
|
||||
@@ -382,6 +382,23 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; Staubereiche (JAM_AREA) -> JAM_EDIT (DCL-Dialog)
|
||||
;; Ebenfalls aus der Beschriftung von sps_skel (tro_annotate.py --anlage);
|
||||
;; Foerderer und laufende Nummer des Staubereichs Jam<NNNN>_<k>.
|
||||
((wcmatch bname "JAM_*")
|
||||
(princ (ssg-textf "cmd-jam-bearbeiten" (list bname)))
|
||||
(if (and (null *ssg-Jam_Edit-loaded*) (atoms-family 1 '("SSG-ENSURE")))
|
||||
(ssg-ensure "Jam_Edit")
|
||||
)
|
||||
(if (atoms-family 1 '("C:JAM_EDIT"))
|
||||
(c:JAM_EDIT)
|
||||
(progn
|
||||
(princ (ssg-textf "tro-edit-modul-fehlt" (list "Jam_Edit.lsp")))
|
||||
(command "_.EATTEDIT")
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; TRO-Marker (TRO_SYM_<Typ>) -> TRO_EDIT (DCL-Dialog)
|
||||
;; Die Marker kommen aus sps_skel (lib/tro_annotate.py) und tragen die
|
||||
;; Attribute ID und TYPE. Modul bei Bedarf nachladen, damit der Doppelklick
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
(load (strcat base-path "OmniModulInsert.lsp") "OmniModulInsert.lsp nicht gefunden")
|
||||
(load (strcat base-path "Tro_Edit.lsp") "Tro_Edit.lsp nicht gefunden")
|
||||
(load (strcat base-path "Connection_Edit.lsp") "Connection_Edit.lsp nicht gefunden")
|
||||
(load (strcat base-path "Jam_Edit.lsp") "Jam_Edit.lsp nicht gefunden")
|
||||
(load (strcat base-path "SSG_LIB_Commands.lsp") "SSG_LIB_Commands.lsp nicht gefunden")
|
||||
;; Werkzeuge: ssg_texttools nutzt ssg_blocktools, beide nutzen ssg_input
|
||||
(load (strcat base-path "ssg_blocktools.lsp") "ssg_blocktools.lsp nicht gefunden")
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
// ============================================================
|
||||
// jam_edit.dcl - Staubereich bearbeiten
|
||||
// Aendert Foerderer und laufende Nummer eines JAM_AREA-Blocks, den die
|
||||
// Beschriftung aus sps_skel (lib/tro_annotate.py --anlage) eingefuegt hat.
|
||||
// Aufruf ueber c:JAM_EDIT (Lisp/Jam_Edit.lsp).
|
||||
// ============================================================
|
||||
|
||||
jam_edit : dialog {
|
||||
label = "Staubereich bearbeiten";
|
||||
|
||||
: column {
|
||||
|
||||
: text {
|
||||
key = "bereich";
|
||||
label = "";
|
||||
width = 50;
|
||||
}
|
||||
|
||||
: edit_box {
|
||||
key = "conveyor";
|
||||
label = "Foerderer (NNNN):";
|
||||
edit_width = 8;
|
||||
}
|
||||
|
||||
: edit_box {
|
||||
key = "number";
|
||||
label = "Laufende Nummer:";
|
||||
edit_width = 8;
|
||||
}
|
||||
|
||||
: row {
|
||||
: text {
|
||||
key = "auto";
|
||||
label = "";
|
||||
width = 30;
|
||||
}
|
||||
: button {
|
||||
key = "reset";
|
||||
label = "Abgeleitet uebernehmen";
|
||||
}
|
||||
}
|
||||
|
||||
: text {
|
||||
key = "hinweis";
|
||||
label = "";
|
||||
width = 50;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ok_cancel;
|
||||
}
|
||||
@@ -940,6 +940,16 @@
|
||||
"tro-insert-kein-block": "Kein Symbol fuer diesen Typ in der Zeichnung (%1) - bitte tro_annotate.py mit diesem Typ laufen lassen.",
|
||||
"tro-insert-prompt-punkt": "\nEinfuegepunkt: ",
|
||||
"tro-insert-eingefuegt": "\nTRO eingefuegt: ID = %1, TYP = %2",
|
||||
"cmd-jam-bearbeiten": "\nStaubereich bearbeiten: %1",
|
||||
"jam-edit-kein-jam": "Block %1 ist kein Staubereich (erwartet JAM_*).",
|
||||
"jam-edit-dialog-fehlt": "Dialogdatei nicht gefunden:\n%1\nDXFM_DCL pruefen (setenv.bat).",
|
||||
"jam-edit-bereich": "Staubereich %1 vor %2 (Eingang %3)",
|
||||
"jam-edit-auto": "Abgeleitet: %1",
|
||||
"jam-edit-hinweis": "In die SCL: tro_annotate --read-jams, danach scl_skeleton.",
|
||||
"jam-edit-foerderer-ungueltig": "Der Foerderer muss vierstellig sein (z. B. 0054) - nichts geaendert.",
|
||||
"jam-edit-nummer-ungueltig": "Die laufende Nummer muss eine ganze Zahl ab 1 sein - nichts geaendert.",
|
||||
"jam-edit-gespeichert": "\nStaubereich gespeichert: %1 (%2)",
|
||||
"jam-edit-doppelt": "\nACHTUNG: %1 gibt es schon in dieser Zeichnung (%2).",
|
||||
"vfl-abbruch-gesichert": "\n>>> Linienzug abgebrochen: %1 Objekt(e) als Block gesichert (per Doppelklick editierbar/fortsetzbar).",
|
||||
"vfl-zurueck-glied-verworfen": "\n>>> Zurueck: letztes Kettenglied wird verworfen - bitte neu beantworten.",
|
||||
"vfl-abbruch-nichts-gebaut": "\n>>> Abgebrochen - es wurde noch keine Geometrie erzeugt.",
|
||||
|
||||
@@ -940,6 +940,16 @@
|
||||
"tro-insert-kein-block": "No symbol for this type in the drawing (%1) - run tro_annotate.py with this type first.",
|
||||
"tro-insert-prompt-punkt": "\nInsertion point: ",
|
||||
"tro-insert-eingefuegt": "\nTRO inserted: ID = %1, TYPE = %2",
|
||||
"cmd-jam-bearbeiten": "\nEdit jam area: %1",
|
||||
"jam-edit-kein-jam": "Block %1 is not a jam area (expected JAM_*).",
|
||||
"jam-edit-dialog-fehlt": "Dialog file not found:\n%1\nCheck DXFM_DCL (setenv.bat).",
|
||||
"jam-edit-bereich": "Jam area %1 in front of %2 (entry %3)",
|
||||
"jam-edit-auto": "Derived: %1",
|
||||
"jam-edit-hinweis": "Into the SCL: tro_annotate --read-jams, then scl_skeleton.",
|
||||
"jam-edit-foerderer-ungueltig": "The conveyor must have four digits (e.g. 0054) - nothing changed.",
|
||||
"jam-edit-nummer-ungueltig": "The running number must be a whole number from 1 - nothing changed.",
|
||||
"jam-edit-gespeichert": "\nJam area saved: %1 (%2)",
|
||||
"jam-edit-doppelt": "\nWARNING: %1 already exists in this drawing (%2).",
|
||||
"vfl-abbruch-gesichert": "\n>>> Chain cancelled: %1 object(s) saved as a block (editable/resumable via double-click).",
|
||||
"vfl-zurueck-glied-verworfen": "\n>>> Back: discarding the last chain element - please answer it again.",
|
||||
"vfl-abbruch-nichts-gebaut": "\n>>> Cancelled - no geometry was created yet.",
|
||||
|
||||
Reference in New Issue
Block a user