Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros
This commit is contained in:
commit
3c729ea604
16 files changed
+736
-159
No files matched your search
@@ -0,0 +1,76 @@
|
||||
;; ============================================================
|
||||
;; HwPlanung.lsp - Hardware-Planung (Menue "HW Planung")
|
||||
;;
|
||||
;; HW_MATERIALFLUSS ("Materialfluss erzeugen"):
|
||||
;; 1. exportiert das aktuelle Hardware-Layout per EXPORTCSV
|
||||
;; (csv:run-export, export.lsp) nach DXFM_RESULTS/<dwg>_export.csv
|
||||
;; 2. ruft lib/hw_materialfluss.py auf, das daraus die Materialfluss-
|
||||
;; Skizze (Kreisel-Rechtecke in Drehrichtung, Strecken-Polylinien
|
||||
;; AS -> Separatoren -> ES, Weichen, Be-/Entladungen) zeichnet
|
||||
;; 3. Ergebnis: DXFM_RESULTS/<dwg>_HW.dxf (neue Datei, die offene
|
||||
;; Zeichnung bleibt unveraendert)
|
||||
;;
|
||||
;; HW_SYMBOLE ("Symbole erzeugen"): noch Platzhalter, zeigt nur einen Hinweis.
|
||||
;;
|
||||
;; Setzt export.lsp voraus (laedt die MNL vor).
|
||||
;; ============================================================
|
||||
|
||||
(setq *hw-skript* "hw_materialfluss.py")
|
||||
|
||||
;; Name der Ausgabedatei aus dem Zeichnungsnamen (reiner Kern, getestet):
|
||||
;; "Mubea.dwg" -> "Mubea_HW.dxf"
|
||||
(defun hw-dxf-name (dwgname)
|
||||
(strcat (vl-filename-base dwgname) "_HW.dxf")
|
||||
)
|
||||
|
||||
(defun c:HW_MATERIALFLUSS ( / label out-dir csv-pfad dxf-pfad py-skript
|
||||
py-exe log-pfad rc)
|
||||
(setq label "HW_MATERIALFLUSS")
|
||||
(if (null (getenv "DXFM_LIB"))
|
||||
(princ (ssg-textf "exp-dxfm-lib-missing" (list label)))
|
||||
(progn
|
||||
(setq out-dir (if *export-test-override*
|
||||
*export-test-override*
|
||||
(getenv "DXFM_RESULTS")))
|
||||
(setq csv-pfad (strcat out-dir "/" (export:dwg-praefix)
|
||||
(export:filename "csv_csv")))
|
||||
(setq dxf-pfad (strcat out-dir "/" (hw-dxf-name (getvar "DWGNAME"))))
|
||||
;; Alte CSV entfernen - sonst wuerde nach einem gescheiterten Export
|
||||
;; still die Skizze aus dem vorigen Stand gezeichnet.
|
||||
(if (findfile csv-pfad) (vl-file-delete csv-pfad))
|
||||
|
||||
(c:EXPORTCSV)
|
||||
|
||||
(if (not (findfile csv-pfad))
|
||||
(princ (ssg-textf "hw-csv-fehlt" (list csv-pfad)))
|
||||
(progn
|
||||
(setq py-skript (strcat (getenv "DXFM_LIB") "/" *hw-skript*))
|
||||
(setq py-exe (export:python-exe))
|
||||
(setq log-pfad (strcat (cond ((getenv "DXFM_LOG")) (out-dir))
|
||||
"/hw_materialfluss.log"))
|
||||
(setq rc (export:run-python py-exe py-skript
|
||||
(list csv-pfad dxf-pfad) log-pfad))
|
||||
(cond
|
||||
((null rc)
|
||||
(princ (ssg-textf "exp-python-call-failed" (list label))))
|
||||
((/= rc 0)
|
||||
(princ (ssg-textf "exp-python-error" (list label rc log-pfad)))
|
||||
(export:log-ausgeben log-pfad 12))
|
||||
(t
|
||||
(export:log-ausgeben log-pfad 12)
|
||||
(princ (ssg-textf "hw-fertig" (list dxf-pfad))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
|
||||
(defun c:HW_SYMBOLE ()
|
||||
(alert (ssg-text "hw-symbole-offen"))
|
||||
(princ)
|
||||
)
|
||||
|
||||
(princ "\n>>> HwPlanung.lsp geladen")
|
||||
(princ)
|
||||
+32
-9
@@ -208,19 +208,40 @@
|
||||
;; draw-module verwendet eine vorhandene Definition KREISEL_n_TYP_ABSTAND
|
||||
;; wieder (Edit/Redraw) - ein geaenderter Name kaeme sonst nie in die
|
||||
;; Beschriftung. Wirkt auf alle Referenzen dieser Definition.
|
||||
(defun kreisel-label-aktualisieren (bname textStr / e ed)
|
||||
(defun kreisel-label-aktualisieren (bname textStr winkel / e ed)
|
||||
(setq e (tblobjname "BLOCK" bname))
|
||||
(while (setq e (entnext e))
|
||||
(setq ed (entget e))
|
||||
(if (and (= (cdr (assoc 0 ed)) "TEXT")
|
||||
(/= (cdr (assoc 1 ed)) textStr))
|
||||
(entmod (subst (cons 1 textStr) (assoc 1 ed) ed))
|
||||
(or (/= (cdr (assoc 1 ed)) textStr)
|
||||
(not (equal (cdr (assoc 50 ed)) (kreisel-grad->rad winkel) 1e-6))))
|
||||
(progn
|
||||
(setq ed (subst (cons 1 textStr) (assoc 1 ed) ed))
|
||||
(setq ed (subst (cons 50 (kreisel-grad->rad winkel)) (assoc 50 ed) ed))
|
||||
(entmod ed)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defun kreisel-grad->rad (grad)
|
||||
(* grad (/ pi 180.0))
|
||||
)
|
||||
|
||||
;; Textwinkel INNERHALB der Blockdefinition (Grad, reiner Kern, getestet).
|
||||
;; Der Block wird mit `rotation` eingefuegt; die Schrift soll in der Welt von
|
||||
;; unten oder von links lesbar sein, also Weltwinkel in [270,360) und [0,90).
|
||||
;; Liegt der Block im Bereich [90,270) (z.B. horizontal SM / vertikal MS),
|
||||
;; wird die Schrift um 180 Grad um ihren Mittelpunkt gedreht (Text ist
|
||||
;; mittig ausgerichtet, die Mitte bleibt daher stehen).
|
||||
(defun kreisel-label-winkel (rotation / w)
|
||||
(setq w (- rotation (* 360.0 (fix (/ rotation 360.0)))))
|
||||
(if (< w 0.0) (setq w (+ w 360.0)))
|
||||
(if (and (>= w 89.999 ) (< w 269.999)) 180.0 0.0)
|
||||
)
|
||||
|
||||
;; Beschriftungstext erzeugen
|
||||
(defun kreisel-make-label (nummer abstand kreiselart name / textStr insertPoint radius mitteX mitteY textHoehe lay)
|
||||
(defun kreisel-make-label (nummer abstand kreiselart name winkel / textStr insertPoint radius mitteX mitteY textHoehe lay)
|
||||
(setq textStr (kreisel-label-text nummer name kreiselart abstand))
|
||||
|
||||
;; Geometrie berechnen
|
||||
@@ -258,8 +279,8 @@
|
||||
(cons 10 insertPoint)
|
||||
(cons 40 textHoehe)
|
||||
(cons 1 textStr)
|
||||
(cons 50 0.0)
|
||||
(cons 7 "Kreisel_Arial") ;; Arial Textstil
|
||||
(cons 50 (kreisel-grad->rad winkel))
|
||||
(cons 7 "Kreisel_Arial") ;; Arial Textstil
|
||||
(cons 62 *kreisel-beschriftung-farbe*)
|
||||
'(72 . 1) ;; Horizontale Ausrichtung: Mitte
|
||||
'(73 . 2) ;; Vertikale Ausrichtung: Mitte
|
||||
@@ -561,8 +582,9 @@
|
||||
|
||||
;; BESCHRIFTUNG einfügen (vor Block-Erzeugung, damit sie im Block ist)
|
||||
(kreisel-make-label kreisel-nummer abstand (if is-pin "PIN" "STANDARD")
|
||||
(cdr (assoc "Bezeichnung" attribs)))
|
||||
|
||||
(cdr (assoc "Bezeichnung" attribs))
|
||||
(kreisel-label-winkel rotation))
|
||||
|
||||
;; Unsichtbare Attribut-Definitionen erzeugen
|
||||
(ssg-attrib-make-defs *kreisel-attrib-defs* 50.0)
|
||||
|
||||
@@ -593,7 +615,8 @@
|
||||
;; Beschriftung der wiederverwendeten Definition an den Namen anpassen
|
||||
(kreisel-label-aktualisieren bname
|
||||
(kreisel-label-text kreisel-nummer (cdr (assoc "Bezeichnung" attribs))
|
||||
(if is-pin "PIN" "STANDARD") abstand))
|
||||
(if is-pin "PIN" "STANDARD") abstand)
|
||||
(kreisel-label-winkel rotation))
|
||||
;; ebenso die Spiegelung der Drehrichtungspfeile
|
||||
(kreisel-pfeil-aktualisieren bname (cdr (assoc "DREHRICHTUNG" attribs)))
|
||||
)
|
||||
|
||||
+7
-6
@@ -229,14 +229,15 @@ Beispiel:
|
||||
(dbgclose)
|
||||
```
|
||||
|
||||
#### Zentrale Debug-Schalter (default je nach Schalter)
|
||||
#### Zentrale Debug-Schalter (Standard: alle aus)
|
||||
|
||||
Damit `dbg*`-Aufrufe dauerhaft im Code stehen bleiben können, ohne im
|
||||
Normalbetrieb ungeplant `.dbg`-Dateien zu erzeugen, gibt es eine zentrale
|
||||
Schalter-Sammlung (`*dbg-schalter*`, Symbol → 0/1). Eine Routine öffnet ihre
|
||||
Debug-Datei nur, wenn ihr Schalter eingeschaltet ist. Unbekannte/neue Schalter
|
||||
gelten implizit als 0/aus; die VF-Linienzug-Schalter unten sind bewusst mit
|
||||
Default 1/an vorregistriert (siehe Tabelle).
|
||||
gelten implizit als 0/aus. Seit 2026-11-02 stehen auch alle vorregistrierten
|
||||
Schalter auf 0 und `*dbg-active*` auf `nil` - standardmaessig entsteht keine
|
||||
`.dbg`-Datei; zum Debuggen `(dbgon)` bzw. `(dbg-schalter-on "name")`.
|
||||
|
||||
| Funktion | Beschreibung |
|
||||
| --- | --- |
|
||||
@@ -250,9 +251,9 @@ Bekannte Schalter:
|
||||
|
||||
| Schalter | Default | Modul | Loggt nach |
|
||||
| --- | --- | --- | --- |
|
||||
| `"vfl-modus1"` | **AN (1)** | Linienzug Modus 1 (manuelle Eingabe, `vf-linienzug-modus`) | `DXFM_LOG/vfl_modus1.dbg` |
|
||||
| `"vfl-modus2"` | **AN (1)** | Linienzug Modus 2 (3D-Objekte + Ziel-Höhe, `vf-linienzug-modus2`) | `DXFM_LOG/vfl_modus2.dbg` |
|
||||
| `"vfl-modus3"` | **AN (1)** | Linienzug Modus 3 (Vorwärts-Nachbau, `vf-linienzug-modus3`) | `DXFM_LOG/vfl_modus3.dbg` |
|
||||
| `"vfl-modus1"` | aus (0) | Linienzug Modus 1 (manuelle Eingabe, `vf-linienzug-modus`) | `DXFM_LOG/vfl_modus1.dbg` |
|
||||
| `"vfl-modus2"` | aus (0) | Linienzug Modus 2 (3D-Objekte + Ziel-Höhe, `vf-linienzug-modus2`) | `DXFM_LOG/vfl_modus2.dbg` |
|
||||
| `"vfl-modus3"` | aus (0) | Linienzug Modus 3 (Vorwärts-Nachbau, `vf-linienzug-modus3`) | `DXFM_LOG/vfl_modus3.dbg` |
|
||||
|
||||
Alle drei Modi loggen automatisch **jede** interaktive Eingabe, weil sie
|
||||
durchgehend über die gemeinsamen Wrapper `vfl-in-point`/`-string`/`-real`/
|
||||
|
||||
+14
-14
@@ -31,7 +31,8 @@
|
||||
;; Globale Variablen
|
||||
(setq *dbg-path* nil) ; Voller Dateipfad (String)
|
||||
(setq *dbg-indent* 0) ; Aktuelle Einruecktiefe
|
||||
(setq *dbg-active* T) ; Debug-Ausgabe aktiv (Standard: ein)
|
||||
(setq *dbg-active* nil) ; Debug-Ausgabe aktiv (Standard: AUS - keine .dbg-Dateien;
|
||||
; einschalten mit (dbgon) bzw. einem Schalter unten)
|
||||
(setq *dbg-buffer* nil) ; Zeilenpuffer (Liste von Strings)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
@@ -41,8 +42,8 @@
|
||||
;; Neue/unbekannte Schalter (die NICHT unten vorregistriert sind) gelten
|
||||
;; implizit als AUS (0) - so bleiben (dbg-schalter-open "name" ...)-Aufrufe
|
||||
;; im Code stehen, ohne dass beim normalen Arbeiten ungeplant .dbg-Dateien
|
||||
;; entstehen. Die VF-Linienzug-Schalter unten sind bewusst mit Default 1
|
||||
;; (EIN) vorregistriert, siehe Kommentar dort.
|
||||
;; entstehen. Seit 2026-11-02 stehen ALLE vorregistrierten Schalter auf 0
|
||||
;; und *dbg-active* auf nil: standardmaessig wird keine .dbg-Datei geschrieben.
|
||||
;;
|
||||
;; (dbg-schalter-on "vfl-modus3") ; Schalter einschalten (1)
|
||||
;; (dbg-schalter-off "vfl-modus3") ; Schalter ausschalten (0)
|
||||
@@ -54,13 +55,11 @@
|
||||
;; ------------------------------------------------------------
|
||||
(if (not (boundp '*dbg-schalter*)) (setq *dbg-schalter* nil))
|
||||
|
||||
;; VF-Linienzug (Modus 1/2/3) Debug-Schalter, Default 1 (EIN): der Nutzer
|
||||
;; will die Session + alle Eingaben durchgehend geloggt haben, ohne den
|
||||
;; Schalter vor jedem Aufruf manuell einzuschalten. Bei Bedarf einzeln
|
||||
;; abschaltbar: (dbg-schalter-off "vfl-modus1") usw.
|
||||
;; VF-Linienzug (Modus 1/2/3) Debug-Schalter, Default 0 (AUS). Bei Bedarf
|
||||
;; einzeln einschalten: (dbg-schalter-on "vfl-modus1") usw.
|
||||
(foreach nm '("vfl-modus1" "vfl-modus2" "vfl-modus3")
|
||||
(if (not (assoc nm *dbg-schalter*))
|
||||
(setq *dbg-schalter* (cons (cons nm 1) *dbg-schalter*))))
|
||||
(setq *dbg-schalter* (cons (cons nm 0) *dbg-schalter*))))
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; TEMPORAER - Diagnose "gespiegelte Sepliste-Koordinate" (lfdnr=2)
|
||||
@@ -98,8 +97,10 @@
|
||||
;; Zeilen je Test, siehe testrun:log in
|
||||
;; tests/test_run_all.lsp.
|
||||
;; ------------------------------------------------------------
|
||||
(foreach nm '(("vf-sepliste" . 1) ("csv_leave_proxies" . 0) ("kf-zeit" . 0)
|
||||
("testlauf" . 1))
|
||||
;; Alle .dbg-Schalter Standard 0 (2026-11-02). csv_leave_proxies ist kein
|
||||
;; .dbg-Schalter, sondern steuert die Export-Hilfskopien.
|
||||
(foreach nm '(("vf-sepliste" . 0) ("csv_leave_proxies" . 0) ("kf-zeit" . 0)
|
||||
("testlauf" . 0))
|
||||
(if (not (assoc (car nm) *dbg-schalter*))
|
||||
(setq *dbg-schalter* (cons nm *dbg-schalter*))))
|
||||
|
||||
@@ -204,11 +205,10 @@
|
||||
;; Wenn nil oder nicht gesetzt, wird "." verwendet.
|
||||
;; ------------------------------------------------------------
|
||||
(defun dbgopen (filename envvar / dir fullpath fh ts)
|
||||
;; Ohne Meldung: bei Standard "aus" wuerde jeder dbgopen-Aufruf sonst
|
||||
;; die Kommandozeile zuschreiben.
|
||||
(if (not *dbg-active*)
|
||||
(progn
|
||||
(prompt "\n[DBG] Debug deaktiviert - keine Datei angelegt.")
|
||||
(princ)
|
||||
)
|
||||
(princ)
|
||||
(progn
|
||||
;; Verzeichnis bestimmen
|
||||
(setq dir nil)
|
||||
|
||||
Reference in new issue
Block a user