[ADD] Geruest: Teile-DWGs (data/geruest/<artnr>.dwg) als Geometrie im GR_-Block; TEILEFARBE als Liste parallel zu ARTINR (Flag farbig in geruest.json), Sivas-Merkmal 108 aus cfg [Sivas]; Menue-Befehle GERUEST_SAEULEN/_ROHRABHAENGER/_WANDBEFESTIGUNG

[FIX] Sivas-Export las nicht existierendes Attribut FARBE
This commit is contained in:
Simon Hensch
2026-09-29 12:07:00 +02:00
parent 66c4336b9e
commit 4e39c64ec1
21 changed files with 637 additions and 383 deletions
+1 -1
View File
@@ -276,7 +276,7 @@
;; Letztes Entity VOR dem Zeichnen merken, um danach per entnext
;; genau die neu erzeugten Objekte einzusammeln (wie
;; kreisel-make-label/draw-module in KreiselInsert.lsp).
(setq lastEnt (entlast))
(setq lastEnt (ssg-lastent-ohne-attribute))
;; Senkrechte Linien (konstantes X) + Spalten-Beschriftung unten.
(setq i 0)
+3 -3
View File
@@ -958,11 +958,11 @@
(if (not (= antwort "2"))
(progn
;; GF-Nummer und Entity-Grenze vor erster Einfuegung sichern.
;; vf-lastent-ohne-attribute ueberspringt Attribut-Entities/SEQEND
;; ssg-lastent-ohne-attribute ueberspringt Attribut-Entities/SEQEND
;; eines vorherigen GF_N/VF_N-Blocks, sonst rutschen sie in die
;; naechste Blockerstellung hinein.
(setq gf-nummer (gf-next-number))
(setq last-ent (vf-lastent-ohne-attribute))
(setq last-ent (ssg-lastent-ohne-attribute))
;; AUS-Element: KS_EIN so ausrichten, dass KS_AUS in Fahrtrichtung entry-hz zeigt.
;; Beweis: KS_AUS.xu = -yu(target-frame). Fuer KS_AUS||entry-hz gilt:
@@ -1332,7 +1332,7 @@
;; GF-Nummer und Entity-Grenze vor erster Einfuegung
(setq gf-nummer (gf-next-number))
(setq last-ent (vf-lastent-ohne-attribute))
(setq last-ent (ssg-lastent-ohne-attribute))
;; Fahrtrichtungsvektor (KS_AUS-Richtung, Basis fuer Staustrecke/Separator/ES)
(setq rad-hz (* (float hz) (/ pi 180.0)))
+126 -26
View File
@@ -22,6 +22,16 @@
;; die Dummy-DWG einen Tag nicht kennt (ssg-attrib-set-on schreibt nur Tags,
;; die als ATTDEF existieren).
;;
;; Zusaetzlich wird jede ausgewaehlte Artikelnummer (Basis, oben, unten, inkl.
;; aufgeloester Gruppen), fuer die data/geruest/<artnr>.dwg existiert, einmal
;; bei 0,0,0 mit in den Block eingefuegt (geruest-teile-dwgs) - reine
;; Geometrie als visuelle Rueckmeldung, die Attribute bleiben davon unberuehrt.
;; Teile ohne DWG werden still uebergangen.
;;
;; TEILEFARBE ist eine kommagetrennte Liste parallel zu ARTINR: jedes Teil mit
;; "farbig": true in geruest.json bekommt die im Dialog gewaehlte Farbe, alle
;; anderen einen leeren Eintrag (geruest-teile-paare/geruest-farbliste).
;;
;; Das GR_-Praefix ist nicht kosmetisch: SSG_BLOCKEDIT haelt jeden Block mit
;; TEILEART-Attribut fuer ein Omniflo-Element (SSG_LIB_Commands.lsp). Der
;; Doppelklick-Dispatcher erkennt Geruest-Bloecke an diesem Praefix.
@@ -179,22 +189,65 @@
erg
)
;; Alle Artikelnummern eines Eintrags, jede gemaess "menge" wiederholt.
;; Benannte Gruppen ("teile") werden rekursiv aufgeloest.
(defun geruest-artikelnummern (eintrag / erg teile)
;; Alle Teile eines Eintrags als ((artnr . farbig) ...), jedes gemaess
;; "menge" wiederholt. Benannte Gruppen ("teile") werden rekursiv aufgeloest.
;; farbig = darf das Teil die Baugruppenfarbe tragen ("farbig" im JSON). Eine
;; Gruppe mit "farbig": true vererbt das an ihre Teile (erbe); ein Teil kann
;; die Vererbung nicht per false aufheben - false und "fehlt" sind beide nil.
;; ARTINR und TEILEFARBE entstehen aus DIESEM einen Durchlauf, damit beide
;; Listen garantiert gleich lang und gleich sortiert sind.
(defun geruest-teile-paare (eintrag erbe / erg teile farbig)
(setq erg nil)
(setq farbig (if (or erbe (ssg-json-get eintrag "farbig")) T nil))
(setq teile (ssg-json-get eintrag "teile"))
(if teile
(foreach teil teile
(setq erg (append erg (geruest-artikelnummern teil)))
(setq erg (append erg (geruest-teile-paare teil farbig)))
)
(setq erg (geruest-wiederholen
(geruest-id-string (ssg-json-get eintrag "sivas_id"))
(geruest-menge eintrag)))
(setq erg (mapcar '(lambda (nr) (cons nr farbig))
(geruest-wiederholen
(geruest-id-string (ssg-json-get eintrag "sivas_id"))
(geruest-menge eintrag))))
)
erg
)
;; Alle Artikelnummern eines Eintrags, jede gemaess "menge" wiederholt.
(defun geruest-artikelnummern (eintrag)
(mapcar 'car (geruest-teile-paare eintrag nil))
)
;; TEILEFARBE-Liste zu Teile-Paaren: die Baugruppenfarbe fuer jedes farbige
;; Teil, "" fuer alle anderen.
(defun geruest-farbliste (paare farbe)
(mapcar '(lambda (p) (if (cdr p) farbe "")) paare)
)
;; Liste ohne Duplikate, Reihenfolge des ersten Auftretens bleibt erhalten.
(defun geruest-eindeutig (lst / erg)
(setq erg nil)
(foreach e lst
(if (not (member e erg)) (setq erg (cons e erg)))
)
(reverse erg)
)
;; Teile-DWGs zu einer Liste von Artikelnummern: data/geruest/<artnr>.dwg,
;; soweit vorhanden. Jede Nummer nur einmal - alle Teile sitzen bei 0,0,0,
;; eine Mehrfach-Stueckzahl waere visuell nicht unterscheidbar. Fehlende
;; DWGs werden still uebergangen.
(defun geruest-teile-dwgs (artnr-liste / erg pfad)
(setq erg nil)
(foreach nr (geruest-eindeutig artnr-liste)
(if (and nr
(setq pfad (geruest-dummy-pfad (strcat nr ".dwg")))
(findfile pfad))
(setq erg (cons pfad erg))
)
)
(reverse erg)
)
;; ============================================================
;; DIALOG
@@ -239,13 +292,14 @@
;; Einzelteil: die Sivas-ID anzahl-mal. Benannte Gruppe ("teile"): das
;; komplette Set anzahl-mal - die Mengen INNERHALB des Sets bleiben erhalten
;; (ein Schraubenset bleibt 1 Scheibe + 2 Muttern + 1 Schraube je Satz).
(defun geruest-artikelnummern-n (eintrag anzahl / teile einmal erg i)
(defun geruest-teile-paare-n (eintrag anzahl / teile einmal erg i farbig)
(setq teile (ssg-json-get eintrag "teile"))
(setq farbig (if (ssg-json-get eintrag "farbig") T nil))
(if teile
(progn
(setq einmal nil)
(foreach teil teile
(setq einmal (append einmal (geruest-artikelnummern teil)))
(setq einmal (append einmal (geruest-teile-paare teil farbig)))
)
(setq erg nil i 0)
(while (< i anzahl)
@@ -254,11 +308,16 @@
)
erg
)
(geruest-wiederholen
(geruest-id-string (ssg-json-get eintrag "sivas_id")) anzahl)
(mapcar '(lambda (nr) (cons nr farbig))
(geruest-wiederholen
(geruest-id-string (ssg-json-get eintrag "sivas_id")) anzahl))
)
)
(defun geruest-artikelnummern-n (eintrag anzahl)
(mapcar 'car (geruest-teile-paare-n eintrag anzahl))
)
;; Index eines Eintrags (Variante oder Anbauteil) ueber seinen Anzeigenamen.
(defun geruest-name-index (name liste / i idx)
(setq i 0 idx nil)
@@ -1073,8 +1132,10 @@
;; Dummy-Geometrie + eigene ATTDEFs zu einem Block zusammenfassen und am
;; gewaehlten Punkt einfuegen. werte = alist der berechneten Attributwerte,
;; variante = gewaehlte Geometrie-Variante (liefert ggf. eine eigene DWG).
;; teile-dwgs = Pfade der Teile-DWGs (geruest-teile-dwgs), die zusaetzlich
;; als reine Geometrie bei 0,0,0 mit in den Block wandern.
;; Rueckgabe: (blockname . entity) oder nil.
(defun geruest-block-bauen (bg variante werte pt / datei dummy lastEnt dummyEnt
(defun geruest-block-bauen (bg variante werte pt teile-dwgs / datei dummy lastEnt dummyEnt
e ss bname blockEnt dummy-attribs attribs)
;; Eine Variante darf eine eigene Dummy-DWG mitbringen; sonst gilt die der
;; Baugruppe.
@@ -1089,7 +1150,10 @@
(setvar "ATTREQ" 0)
(setvar "ATTDIA" 0)
(setvar "OSMODE" 0)
(setq lastEnt (entlast))
;; Nicht (entlast): ist das letzte Objekt ein Block mit Attributen (z.B.
;; eine per Strg+C/V eingefuegte GR_-Kopie), wuerden dessen ATTRIBs mit
;; eingesammelt und von _.-BLOCK entfernt.
(setq lastEnt (ssg-lastent-ohne-attribute))
;; Dummy bei (0,0,0) einfuegen - seine Attribute liefern u.a. die
;; LAYER-Vorgabe.
@@ -1097,6 +1161,14 @@
(setq dummyEnt (entlast))
(setq dummy-attribs (ssg-attrib-read dummyEnt))
;; Ausgewaehlte Teile mit eigener DWG als sichtbare Rueckmeldung
;; einfuegen - erst NACH dem Lesen des Dummys, damit dummyEnt auf den
;; Dummy zeigt. Nur Geometrie: die Sammelschleife unten nimmt die
;; INSERTs mit in den Block, das Attribut-Schema bleibt unberuehrt.
(foreach teil teile-dwgs
(command "_.INSERT" teil (list 0.0 0.0 0.0) 1 1 0)
)
;; Unser Schema gewinnt an Struktur, die Dummy-Werte an Inhalt:
;; ssg-attrib-merge legt alle Tags aus *geruest-attrib-defs* an und
;; uebernimmt zusaetzlich alle Tags der Dummy-DWG.
@@ -1150,12 +1222,13 @@
;; ABLAUF
;; ============================================================
;; Artikelnummern einer Befestigungsauswahl ((index . menge) ...).
(defun geruest-auswahl-artnr (auswahl anbauteile / erg)
;; Teile-Paare ((artnr . farbig) ...) einer Befestigungsauswahl
;; ((index . menge) ...).
(defun geruest-auswahl-paare (auswahl anbauteile / erg)
(setq erg nil)
(foreach paar auswahl
(setq erg (append erg
(geruest-artikelnummern-n (nth (car paar) anbauteile) (cdr paar))))
(geruest-teile-paare-n (nth (car paar) anbauteile) (cdr paar))))
)
erg
)
@@ -1176,7 +1249,7 @@
;; wahl = (variante-index oben unten laenge farbe) - die Dialog-Rueckgabe ohne
;; das fuehrende "OK".
(defun geruest-einfuegen (bg wahl / varianten anbauteile variante teileart
artnr bezeichnung teile-namen werte pt ergebnis)
paare artnr bezeichnung teile-namen werte pt ergebnis)
(setq varianten (ssg-json-get bg "geometrie_varianten"))
(setq anbauteile (ssg-json-get bg "anbaugruppen"))
(setq variante (nth (car wahl) varianten))
@@ -1186,10 +1259,12 @@
;; ARTINR: jede Sivas-ID so oft wie die gewaehlte Stueckzahl, erst die
;; Basis, dann Befestigung oben, dann unten. Dasselbe Teil an beiden
;; Positionen erscheint entsprechend mehrfach.
(setq artnr (geruest-artikelnummern variante))
(setq artnr (append artnr (geruest-auswahl-artnr (cadr wahl) anbauteile)))
(setq artnr (append artnr (geruest-auswahl-artnr (caddr wahl) anbauteile)))
;; Positionen erscheint entsprechend mehrfach. Die Paare tragen zusaetzlich
;; das farbig-Flag je Teil fuer die TEILEFARBE-Liste (gleiche Reihenfolge).
(setq paare (geruest-teile-paare variante nil))
(setq paare (append paare (geruest-auswahl-paare (cadr wahl) anbauteile)))
(setq paare (append paare (geruest-auswahl-paare (caddr wahl) anbauteile)))
(setq artnr (mapcar 'car paare))
;; BEZEICHNUNG: mit " + " verketten - die Artikelbezeichnungen enthalten
;; selbst Kommas ("ROHR R 1\" 33,7 x 2,6").
@@ -1207,15 +1282,19 @@
(cons "TEILEART" teileart)))
(if (/= (nth 3 wahl) "")
(setq werte (append werte (list (cons "LAENGE" (nth 3 wahl))))))
;; TEILEFARBE: je ARTINR-Eintrag die gewaehlte Farbe (farbiges Teil) oder
;; "" (z.B. ",,RAL7030,,RAL7030") - fuer den Sivas-Export je Artikelnummer.
(if (/= (nth 4 wahl) "")
(setq werte (append werte (list (cons "TEILEFARBE" (nth 4 wahl))))))
(setq werte (append werte (list (cons "TEILEFARBE"
(ssg-join (geruest-farbliste paare (nth 4 wahl)) ","))))))
(setq pt (getpoint (ssg-text "gr-prompt-einfuegepunkt")))
(if (null pt)
(princ (ssg-text "gr-abgebrochen"))
(progn
(ssg-start "Geruest" '(("OSMODE") ("ATTREQ") ("ATTDIA")))
(setq ergebnis (geruest-block-bauen bg variante werte pt))
(setq ergebnis (geruest-block-bauen bg variante werte pt
(geruest-teile-dwgs artnr)))
(ssg-end)
(if ergebnis
(princ (ssg-textf "gr-fertig" (list teileart (car ergebnis))))
@@ -1226,15 +1305,29 @@
)
;; Index eines Bereichs ueber das ASCII-Feld "id" (nil, wenn unbekannt).
(defun geruest-bereich-index (id bereiche / i idx)
(setq i 0 idx nil)
(foreach b bereiche
(if (and (null idx) (equal (car b) id)) (setq idx i))
(setq i (1+ i))
)
idx
)
;; Ein Dialog fuer alle Geruest-Bereiche. Der Bereichswechsel laeuft ueber
;; diese Schleife, weil der Dialog dafuer neu aufgebaut werden muss.
(defun c:GERUEST ( / bereiche idx bg erg weiter)
;; start-id = "id" des Bereichs, mit dem der Dialog oeffnet (nil oder
;; unbekannt -> erster Bereich). Der Wechsel per Dropdown bleibt moeglich.
(defun geruest-starten (start-id / bereiche idx bg erg weiter)
(setq *geruest-zustand* nil)
(setq bereiche (geruest-baugruppen-liste))
(if (null bereiche)
(princ (ssg-text "gr-fehler-keine-baugruppen"))
(progn
(setq idx 0 weiter T)
(setq idx (if start-id (geruest-bereich-index start-id bereiche)))
(if (null idx) (setq idx 0))
(setq weiter T)
(while weiter
(setq bg (cdr (nth idx bereiche)))
(cond
@@ -1262,5 +1355,12 @@
(princ)
)
(princ "\nGeruestInsert.lsp geladen. Befehl: GERUEST")
(defun c:GERUEST ( / ) (geruest-starten nil))
;; Menue-Einstiege je Bereich - oeffnen denselben Dialog im passenden Bereich.
(defun c:GERUEST_SAEULEN ( / ) (geruest-starten "Saeulen"))
(defun c:GERUEST_ROHRABHAENGER ( / ) (geruest-starten "Rohrabhaenger"))
(defun c:GERUEST_WANDBEFESTIGUNG ( / ) (geruest-starten "Wandbefestigung"))
(princ "\nGeruestInsert.lsp geladen. Befehle: GERUEST, GERUEST_SAEULEN, GERUEST_ROHRABHAENGER, GERUEST_WANDBEFESTIGUNG")
(princ)
+5 -38
View File
@@ -403,26 +403,8 @@
(if (not block-exists)
(progn
;; WICHTIG: Vor dem Zeichnen den aktuellen letzten Entity merken
;; Aber wenn die Zeichnung leer ist, setzen wir lastEnt auf nil
(if (setq lastEnt (entlast))
(progn
;; Falls lastEnt ein INSERT mit Attributen ist, muessen wir
;; bis zum SEQEND navigieren, da entnext sonst in die
;; ATTRIB-Sub-Entities hineinlaeuft
(if (and (= (cdr (assoc 0 (entget lastEnt))) "INSERT")
(= (cdr (assoc 66 (entget lastEnt))) 1))
(progn
(setq lastEnt (entnext lastEnt))
(while (and lastEnt
(/= (cdr (assoc 0 (entget lastEnt))) "SEQEND"))
(setq lastEnt (entnext lastEnt))
)
;; lastEnt ist jetzt SEQEND - entnext darauf gibt das naechste Top-Level-Entity
)
)
)
(setq lastEnt nil) ;; Zeichnung ist leer
)
;; (SEQEND-Schutz fuer INSERT mit Attributen, nil bei leerer Zeichnung)
(setq lastEnt (ssg-lastent-ohne-attribute))
;; AN8 Kreis (Antriebsstation) bei (radius, 0) - Dim-Suffix im Dateinamen
(command "_.INSERT" (strcat *block-path* "AN8_" *ki-dxfm-dim* ".dwg") (list radius 0.0 0.0) 1 1 0)
@@ -1220,24 +1202,9 @@
(progn
(dbgp "Erzeuge neue Blockdefinition...")
;; Letzten Entity merken (mit SEQEND-Schutz wie bei draw-module)
(if (setq lastEnt (entlast))
(progn
(dbgp (strcat "lastEnt Typ=" (cdr (assoc 0 (entget lastEnt)))))
(if (and (= (cdr (assoc 0 (entget lastEnt))) "INSERT")
(= (cdr (assoc 66 (entget lastEnt))) 1))
(progn
(dbgp "lastEnt ist INSERT mit Attributen -> navigiere zu SEQEND")
(setq lastEnt (entnext lastEnt))
(while (and lastEnt
(/= (cdr (assoc 0 (entget lastEnt))) "SEQEND"))
(setq lastEnt (entnext lastEnt))
)
(dbgp "SEQEND erreicht")
)
)
)
(setq lastEnt nil)
)
(setq lastEnt (ssg-lastent-ohne-attribute))
(if lastEnt
(dbgp (strcat "lastEnt Typ=" (cdr (assoc 0 (entget lastEnt))))))
;; AN8 Block einfuegen bei (0,0) - Eckrad ist ein einzelner Kreis (Dim-Suffix im Dateinamen)
(dbgp (strcat "INSERT Block: " *block-path* "AN8_" *ki-dxfm-dim* ".dwg"))
+22
View File
@@ -972,6 +972,28 @@
)
)
;; Ermittelt den "letzten Entity" VOR einer neuen Einfuegung als Startmarke
;; fuer eine anschliessende (entnext marke)-Sammlung. (entlast) liefert nur
;; das Hauptobjekt; ist das ein INSERT mit Attributen (Gruppencode 66 = 1),
;; liefert (entnext insert) aber zuerst dessen ATTRIB-Subentities und SEQEND.
;; Die wuerden dann mit eingesammelt und von _.-BLOCK aus dem vorherigen
;; Block entfernt (realer Bug: per Strg+C/V kopierter GR_-Block verlor beim
;; naechsten GERUEST alle Attribute). Deshalb bis zum SEQEND vorlaufen.
;; Muss von JEDEM "alles Neue seit Marke einsammeln"-Aufrufer anstelle eines
;; nackten (entlast) verwendet werden. Rueckgabe: Entity oder nil (leer).
(defun ssg-lastent-ohne-attribute ( / ent)
(setq ent (entlast))
(if (and ent (= (cdr (assoc 66 (entget ent))) 1))
(progn
(setq ent (entnext ent))
(while (and ent (/= (cdr (assoc 0 (entget ent))) "SEQEND"))
(setq ent (entnext ent))
)
)
)
ent
)
;; Alle Attribute eines INSERT-Entity als Assoziationsliste lesen.
;; ent = Entity-Name eines INSERT mit Attributen.
;; Rueckgabe: (("TAG1" . "Wert1") ("TAG2" . "Wert2") ...) oder nil
+2 -22
View File
@@ -852,26 +852,6 @@
))
)
;; Ermittelt den "letzten Entity" VOR einer neuen Einfuegung, so dass
;; nachfolgende Attribut-Entities/SEQEND eines vorherigen INSERT (z.B. eines
;; vorangegangenen VF_N-Blocks) nicht versehentlich in die naechste
;; vf-block-erstellen-Sammlung hineinfallen. Muss von JEDEM Aufrufer von
;; vf-block-erstellen anstelle eines nackten (entlast) verwendet werden.
(defun vf-lastent-ohne-attribute ( / ent)
(setq ent (entlast))
(if (and ent
(= (cdr (assoc 0 (entget ent))) "INSERT")
(= (cdr (assoc 66 (entget ent))) 1))
(progn
(setq ent (entnext ent))
(while (and ent (/= (cdr (assoc 0 (entget ent))) "SEQEND"))
(setq ent (entnext ent))
)
)
)
ent
)
;; --- Gemeinsamer VF_n-Wrapper-Rumpf (Standard/Etage UND Linienzug) ----------
;; Der frueher in vf-block-erstellen (vf_core) und vfl-block-erstellen
;; (vf_linienzug) wortgleiche Rumpf: unsichtbare ATTDEFs am Startpunkt nach dem
@@ -1057,7 +1037,7 @@
(cond ((= richtung "Auf") (+ hoehe-von deltaH))
((= richtung "Ab") (- hoehe-von deltaH))
(t hoehe-von)))
(setq lastEnt (vf-lastent-ohne-attribute))
(setq lastEnt (ssg-lastent-ohne-attribute))
(setq vf-endpunkt
(apply einfuege-fn
(list deltaL deltaH richtung best-winkel L_GF1 L_GF2 L_VF startpunkt seite hz)))
@@ -1523,7 +1503,7 @@
(t hoehe-von)))
;; lastEnt VOR der Einfuegung merken
(setq lastEnt (vf-lastent-ohne-attribute))
(setq lastEnt (ssg-lastent-ohne-attribute))
;; Typ-spezifische Einfuegung
(apply einfuege-fn
+9 -9
View File
@@ -2285,7 +2285,7 @@
;; Wird direkt nach dem Segment-Dispatch-cond in vf-linienzug-modus aufgerufen
;; (per vl-catch-all-apply abgesichert - ein Fehler hier darf den Hauptbau nie
;; abbrechen, rein additive Zusatz-XDATA). seg-lastEnt = Schnappschuss VOR
;; diesem Glied (vf-lastent-ohne-attribute, siehe Aufruf). wahl wird hier
;; diesem Glied (ssg-lastent-ohne-attribute, siehe Aufruf). wahl wird hier
;; nicht mehr gebraucht (das Label steckt schon im STEP-Eintrag des Journals
;; via vfl-journal-steplabel) - Parameter bleibt fuer eine spaetere dbgmsg-
;; Diagnose nuetzlich, daher weiterhin uebergeben.
@@ -4048,7 +4048,7 @@
;; (z.B. Anschluss an einen Kreisel), darum wird hier KS_EIN direkt
;; (xy-ref/z-ref="KS_EIN") auf den Klickpunkt gefluchtet - p0-real ist
;; dadurch einfach der Klickpunkt selbst, keine Nachmessung mehr noetig.
(setq checkpoint (vf-lastent-ohne-attribute))
(setq checkpoint (ssg-lastent-ohne-attribute))
(setq p0-real p-aktuell)
(setq p0x (car p0-real) p0y (cadr p0-real))
(setq theta-ref-rad (* (float theta-ref) (/ pi 180.0)))
@@ -4091,7 +4091,7 @@
;; GF_Bogen_L/R_xx- bzw. Separator-Attribute) - die Probe darf diese
;; Zaehler NICHT dauerhaft verfaelschen, darum sichern/zuruecksetzen.
(setq acc-gfbogen-save *vfl-acc-gfbogen* acc-sep-save *vfl-acc-separator*)
(setq probe-checkpoint (vf-lastent-ohne-attribute))
(setq probe-checkpoint (ssg-lastent-ohne-attribute))
(setq probe-frame (vfl-insert-gf-bogen-block frame bogen-winkel bogen-seite))
(setq hz2 (car (frame->hz-winkel probe-frame)))
(setq bg2x (- (car (car probe-frame)) (car (car frame))))
@@ -4357,7 +4357,7 @@
;; theta-ref) - NICHT theta-ref selbst (das ist E1's Fahrtrichtung).
(setq dref-x (cos (* (float eintritt-hz) (/ pi 180.0))))
(setq dref-y (sin (* (float eintritt-hz) (/ pi 180.0))))
(setq checkpoint (vf-lastent-ohne-attribute))
(setq checkpoint (ssg-lastent-ohne-attribute))
(setq p0-real p-aktuell)
(setq p0x (car p0-real) p0y (cadr p0-real))
(setq theta-ref-rad (* (float eintritt-hz) (/ pi 180.0)))
@@ -4446,7 +4446,7 @@
(setq rad-s (* (float s-winkel) (/ pi 180.0)))
(setq tan-s (/ (sin rad-s) (cos rad-s)))
(setq acc-gfbogen-save *vfl-acc-gfbogen* acc-sep-save *vfl-acc-separator*)
(setq probe-checkpoint (vf-lastent-ohne-attribute))
(setq probe-checkpoint (ssg-lastent-ohne-attribute))
(setq probe-frame-a (car (vfl-gf-bogen-uebergang frame (- (fix *vfk-gefaelle-winkel*)))))
(setq probe-frame-a (vfl-gf-bogen-erweitern probe-frame-a "auf" (- (fix *vfk-gefaelle-winkel*)) extra-grad))
(setq probe-frame-a (vfl-gf-bogen-erweitern probe-frame-a "ab" (- s-winkel) extra-grad))
@@ -6495,7 +6495,7 @@
;; dynamic scoping, gilt fuer die gesamte Laufzeit dieses Aufrufs, auch
;; tief verschachtelt z.B. in vfl-vf-einheit).
(setq vfl-nummer (vf-next-number))
(setq lastEnt (vf-lastent-ohne-attribute))
(setq lastEnt (ssg-lastent-ohne-attribute))
(setq anzahl-gf 0 anzahl-vf 0 frame nil)
(setq old-error *error*)
;; Scharfen Abbruch-Wickel-Handler installieren (gemeinsam fuer alle drei
@@ -6581,7 +6581,7 @@
;; (vfl-segment-xdata-sichern, siehe Ende der cond unten) - dieselbe
;; Hilfsfunktion wie beim Ketten-lastEnt (oben), damit ATTRIB/SEQEND-
;; Ketten eines vorherigen INSERTs konsistent uebersprungen werden.
(setq seg-lastEnt (vf-lastent-ohne-attribute))
(setq seg-lastEnt (ssg-lastent-ohne-attribute))
(vfl-journal-mark "?")
;; Erzwungener QC-Modus (Linienzug-Modus 4/5 im Typ-Dispatcher
;; c:VarioFoerderer, *vfl-forciere-qc-modus* = "4"/"5"): das Menue
@@ -9066,7 +9066,7 @@
(setq ent-fp (* (+ *vfl-gf-min-laenge* *vfk-separator-laenge* *vfk-stations-laenge*) (cos rad3)))
(setq run-typ nil)
(setq vfl-nummer (vf-next-number))
(setq lastEnt (vf-lastent-ohne-attribute))
(setq lastEnt (ssg-lastent-ohne-attribute))
(vfl-acc-reset)
(setq anzahl-gf 0 anzahl-vf 0 frame nil)
;; --- Abbruch-Sicherung ab hier scharf (analog Modus 1/2) ---
@@ -9856,7 +9856,7 @@
(setq aus (if as-vorhanden (if aus-dx aus-dx *vfk-as-es-fallback-dx*) 0.0)
ein (if es-vorhanden (if ein-dx ein-dx *vfk-as-es-fallback-dx*) 0.0))
(setq vfl-nummer (vf-next-number))
(setq lastEnt (vf-lastent-ohne-attribute))
(setq lastEnt (ssg-lastent-ohne-attribute))
(vfl-acc-reset)
;; *vfl-journal*-Reset steht jetzt GANZ AM ANFANG der Funktion (vor der
;; Pfadauswahl/Praeambel) - siehe Kommentar dort. Hier NICHT mehr noetig
+1 -1
View File
@@ -1178,7 +1178,7 @@
(setq *ssg-ils-dim* ziel-dim)
(setq *vf-motorseite* motorseite)
(entdel ent)
(setq lastEnt (vf-lastent-ohne-attribute))
(setq lastEnt (ssg-lastent-ohne-attribute))
(apply einfuege-fn
(list deltaL deltaH richtung best-winkel L_GF1 L_GF2 L_VF startpunkt seite hz))
(setq vf-nummer (vf-next-number))