CSV-Export: Nachbarschaftserkennung neu aufgebaut (ohne shapely), Fehlerspalte ergaenzt
Nachbarschaft wird jetzt in drei getrennten Gruppen geprueft statt global
ueber alle Elemente: Kreisel/Eckrad gegeneinander, Kreisel/Eckrad gegen
Gefaellestrecke/Foerderer/Strecke-Modul (diese drei nicht gegeneinander),
und Omniflo-Elemente gegeneinander (rasterbasiert vorgefiltert nach x/y-
Koordinate). Ersetzt die bisherige shapely-STRtree-Loesung durch reines
Python, da die shapely-Abhaengigkeit den regulaeren CSV-Export in der von
BricsCAD genutzten Python-Umgebung brechen konnte.
Neue Spalte "Fehler" markiert Elemente mit zu wenigen Partnern
("unverbunden"/"nur ein Partner") je nach TeileArt-Mindestanzahl.
Ausserdem: SSG_RUN_ALL_TESTS-Absturz nach TEST_KREISEL behoben (ssg-start/
ssg-end nutzten flache globale Variablen statt eines Stacks, wodurch
verschachtelte Aufrufe den *error*-Handler dauerhaft korrumpierten) und
FILEDIA=0 um den DXFOUT-Kommandozeilenaufruf ergaenzt.
This commit is contained in:
+85
-18
@@ -13,25 +13,39 @@
|
||||
;; (ssg-start "Titel" '(("OSMODE") ("ORTHOMODE")))
|
||||
;; ... Makrocode ...
|
||||
;; (ssg-end)
|
||||
;;
|
||||
;; Nestbar ueber *ssg-start-stack*: jedes ssg-start legt einen eigenen
|
||||
;; Frame (vorheriger *error*-Handler + Variablenwerte) oben auf den
|
||||
;; Stack, ssg-end nimmt genau diesen Frame wieder herunter. Noetig, weil
|
||||
;; z.B. ein Test-Wrapper (ssg-start "TEST_KREISEL" ...) selbst wieder
|
||||
;; Makros aufruft, die ihrerseits ssg-start/ssg-end nutzen - mit einer
|
||||
;; einzelnen globalen Variable statt eines Stacks wuerde der innere
|
||||
;; Aufruf den *error*-Handler und die CLAYER/CMDECHO/...-Werte des
|
||||
;; aeusseren Aufrufs ueberschreiben. Ergebnis waere ein *error* wird
|
||||
;; nach dem aeusseren ssg-end dauerhaft an ssg-errhan haengen bleiben
|
||||
;; (statt zum urspruenglichen Default-Handler zurueckzukehren) und bei
|
||||
;; jedem folgenden Fehler faelschlich veraltete CLAYER/CECOLOR-Werte
|
||||
;; ueber "_LAYER"/"_undo" auf die Kommandozeile schreiben.
|
||||
;; ------------------------------------------------------------
|
||||
|
||||
(defun ssg-start (titel zusatz-vars / xlen xpos xvar)
|
||||
(if (not (boundp '*ssg-start-stack*)) (setq *ssg-start-stack* nil))
|
||||
|
||||
(defun ssg-start (titel zusatz-vars / cavar xlen xpos xvar)
|
||||
;; titel - Anzeigename des Makros
|
||||
;; zusatz-vars - Liste zusaetzlicher Variablen z.B. '(("OSMODE")("ORTHOMODE"))
|
||||
;; Immer CLAYER und CMDECHO werden automatisch gesichert.
|
||||
(setq _ssg-olderr *error*
|
||||
*error* (function ssg-errhan)
|
||||
_ssg-cavar (append '(("CLAYER") ("CMDECHO")) zusatz-vars)
|
||||
xlen (length _ssg-cavar)
|
||||
xpos 0
|
||||
(setq cavar (append '(("CLAYER") ("CMDECHO")) zusatz-vars)
|
||||
xlen (length cavar)
|
||||
xpos 0
|
||||
)
|
||||
(repeat xlen
|
||||
(setq xvar (car (nth xpos _ssg-cavar))
|
||||
_ssg-cavar (subst (cons xvar (getvar xvar))
|
||||
(nth xpos _ssg-cavar) _ssg-cavar)
|
||||
xpos (1+ xpos)
|
||||
(setq xvar (car (nth xpos cavar))
|
||||
cavar (subst (cons xvar (getvar xvar)) (nth xpos cavar) cavar)
|
||||
xpos (1+ xpos)
|
||||
)
|
||||
)
|
||||
(setq *ssg-start-stack* (cons (cons *error* cavar) *ssg-start-stack*))
|
||||
(setq *error* (function ssg-errhan))
|
||||
(setvar "CMDECHO" 0)
|
||||
(command "_undo" "_G")
|
||||
(graphscr)
|
||||
@@ -39,26 +53,30 @@
|
||||
(princ)
|
||||
)
|
||||
|
||||
(defun ssg-end (/ xpos xlen xvar)
|
||||
(if _ssg-cavar
|
||||
(defun ssg-end (/ frame cavar xpos xlen xvar)
|
||||
(if *ssg-start-stack*
|
||||
(progn
|
||||
(setq frame (car *ssg-start-stack*)
|
||||
*ssg-start-stack* (cdr *ssg-start-stack*)
|
||||
cavar (cdr frame)
|
||||
)
|
||||
(command)
|
||||
(command "_undo" "_E")
|
||||
(setq xpos 1
|
||||
xlen (length _ssg-cavar)
|
||||
xlen (length cavar)
|
||||
)
|
||||
(if (/= (getvar "CLAYER") (caar _ssg-cavar))
|
||||
(command "_LAYER" "_SE" (cdar _ssg-cavar) "")
|
||||
(if (/= (getvar "CLAYER") (caar cavar))
|
||||
(command "_LAYER" "_SE" (cdar cavar) "")
|
||||
)
|
||||
(repeat (1- xlen)
|
||||
(setq xvar (nth xpos _ssg-cavar)
|
||||
(setq xvar (nth xpos cavar)
|
||||
xpos (1+ xpos)
|
||||
)
|
||||
(setvar (car xvar) (cdr xvar))
|
||||
)
|
||||
(setq *error* (car frame))
|
||||
)
|
||||
)
|
||||
(if _ssg-olderr (setq *error* _ssg-olderr))
|
||||
(princ)
|
||||
)
|
||||
|
||||
@@ -485,7 +503,56 @@
|
||||
;; (einsegmentige Gefaellestrecke: 1; Streckengruppe: gezaehlt).
|
||||
(setq *strecke-attr-hinten*
|
||||
'(("ANZAHL_SEPARATOR" "1")
|
||||
("ANZAHL_SCANNER" "0")))
|
||||
("ANZAHL_SCANNER" "0")
|
||||
("GERUEST_EINZELMODUL" "0")
|
||||
("GERUEST_TYP" "Schoenenberger Geruest")))
|
||||
|
||||
;; ============================================================
|
||||
;; GERUESTOPTION - gemeinsame Combobox-Werte fuer Kreisel, Eckrad,
|
||||
;; VarioFoerderer und Gefaellestrecke (Attribut GERUEST_TYP).
|
||||
;; Reihenfolge = Reihenfolge in der Dialog-Combobox. Index 2
|
||||
;; ("Schoenenberger Geruest") ist der Default.
|
||||
;; ============================================================
|
||||
(setq *ssg-geruest-optionen*
|
||||
'("IPE-Geruest abgestuft"
|
||||
"Obergeruest oben"
|
||||
"Schoenenberger Geruest"
|
||||
"nur Doppelrohrtraeger")
|
||||
)
|
||||
|
||||
;; Geruest-Typ (String) -> Combobox-Index. Unbekannter/leerer Wert -> Default (2).
|
||||
(defun ssg-geruest-typ-to-idx (typ / idx i gefunden)
|
||||
(setq idx 2 i 0 gefunden nil)
|
||||
(foreach opt *ssg-geruest-optionen*
|
||||
(if (and (not gefunden) (equal typ opt))
|
||||
(progn (setq idx i) (setq gefunden T))
|
||||
)
|
||||
(setq i (1+ i))
|
||||
)
|
||||
idx
|
||||
)
|
||||
|
||||
;; Combobox-Index -> Geruest-Typ (String).
|
||||
(defun ssg-geruest-idx-to-typ (idx)
|
||||
(nth idx *ssg-geruest-optionen*)
|
||||
)
|
||||
|
||||
;; Geruestoption per Kommandozeilen-Menue abfragen (fuer Module ohne DCL-Dialog,
|
||||
;; z.B. ILS_Eckrad). Rueckgabe: Geruest-Typ-String aus *ssg-geruest-optionen*.
|
||||
(defun ssg-ask-geruest-typ ( / i opt antwort idx)
|
||||
(princ (ssg-text "geruest-typ-header"))
|
||||
(setq i 1)
|
||||
(foreach opt *ssg-geruest-optionen*
|
||||
(princ (ssg-textf "geruest-typ-opt" (list i opt)))
|
||||
(setq i (1+ i))
|
||||
)
|
||||
(setq antwort (getint (ssg-textf "geruest-typ-prompt" (list (itoa (1+ (ssg-geruest-typ-to-idx nil)))))))
|
||||
(if (or (null antwort) (< antwort 1) (> antwort (length *ssg-geruest-optionen*)))
|
||||
(setq idx (ssg-geruest-typ-to-idx nil))
|
||||
(setq idx (1- antwort))
|
||||
)
|
||||
(ssg-geruest-idx-to-typ idx)
|
||||
)
|
||||
|
||||
;; Geordnete ATTDEF-Definitionsliste fuer einen Strecken-Block-Typ.
|
||||
;; typ "Gefaellestrecke" -> Vorderteil + Hinterteil (reduziert)
|
||||
|
||||
Reference in New Issue
Block a user