Commit Graph

62 Commits

Author SHA1 Message Date
m.stangl 258608b77f Export: Gefällestrecke-Höhe, Gerüst-Defaults, Omniflo-Komponenten-Split
- Entfernt "Hoehe oben"/"Hoehe unten" aus Gefällestrecke JSON-Export
- "Hoehe in m" kommt jetzt konsistent aus MONTAGEHOEHE_m bei Kreisel/Variofoerderer/Gefällestrecke
- Setzt "Geruest fuer Einzelmodul" auf Default True (statt False) bei Kreisel, Eckrad, Variofoerderer, Gefällestrecke
  - Eckrad-Abfrage: Default = Yes, Logik korrigiert (war invertiert)
- JSON-Key-Reihenfolge optimiert:
  - Variofoerderer/ILS 2.0 Strecke: "Hoehe in m" zuerst
  - Gefällestrecke/ILS 2.0 Gefällestrecke: "Hoehe in m" und "Typ" zuerst
  - Kreisel: "Hoehe in m" zuerst
- Omniflo-Komponenten-Split: Teile mit "0_B"-Präfix werden als separate CSV-Zeilen ausgegeben
  - Multi-Komponenten-Sivasnr (z.B. "834372002+0_BG090090") splitten
  - IDs werden mit .t1, .t2, etc. ergänzt
  - 0_B-Komponenten als "TEF Bogen"/"TEF Weiche" klassifiziert

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-23 15:26:51 +02:00
m.stangl 52264f1531 Export: Insertpoint (24-Zeichen KOS) und K1-K4 (12-Zeichen Position) je Block
csv:block-to-json ergaenzt fuer jeden Block einen Insertpoint-String
(Position+Rotation als Z-Quaternion, csv:kos-encode) sowie K1-K4 als
reine Positions-Strings (csv:trans-encode, 0.1 mm). KS_EIN/KS_AUS werden
auf K1/K2 gemappt, falls keine echten K1/K2 vorhanden sind. Neue CSV-
Spalten Insertpoint;K1;K2;K3;K4 in export_csv.py.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 14:38:08 +02:00
m.stangl 5ffe81b370 Sivas-Export: Geruestoption fuer Einzelmodul in allen ILS-Elementen ergaenzt
Kreisel, Eckrad, Gefaellestrecke und VarioFoerderer schreiben jetzt neben
"Geruest fuer Einzelmodul" auch die gewaehlte Geruestoption (GERUEST_TYP)
in die Merkmale. Eckrad bekommt dafuer erstmals eine eigene Gruppierung
nach Geruest-Signatur (bisher immer eine gemeinsame Zeile ohne Details);
Kreisel/Gefaellestrecke gruppieren nun ebenfalls nach Geruestoption, damit
unterschiedliche Optionen nicht mehr in einer Zeile verschwinden.
2026-07-23 13:05:01 +02:00
m.stangl 9516fd63af set_koords.py: manuelle Abstandsformeln durch math.dist ersetzt
Die wiederholten (dx**2 + dy**2 [+ dz**2]) ** 0.5-Formeln fuer den
euklidischen Abstand zweier Punkte (K1-K4-Positionsbestimmung fuer
Boegen/Weichen/Weichenkoerper) sind jetzt math.dist(p1, p2) - gleiches
Ergebnis, aber weniger Code und keine Gefahr, beim manuellen Quadrieren
ein Vorzeichen/Exponenten zu vertippen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 12:55:50 +02:00
m.stangl b6b71c5997 safe_float/safe_int Hilfsfunktionen: doppelten try/except-Code konsolidiert
export_csv.py und export_sivas.py enthielten je ca. 10 nahezu identische
try/except (ValueError, TypeError)-Bloecke fuer "String zu float/int mit
Fallback". Neue gemeinsame Helfer safe_float()/safe_int()
(export_blockpatterns.py) ersetzen diese Bloecke; dabei auch zwei bislang
ungeschuetzte int()/float()-Aufrufe in export_sivas.py (Kreisel-Zaehler)
abgesichert, die bei fehlerhaften Attributwerten sonst abgestuerzt waeren.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 12:55:50 +02:00
m.stangl 2842e1f1c9 CSV-Escaping-Bug behoben, export.cfg-Mehrfachparsing beseitigt
format_csv_line() in export_csv.py/export_sivas.py hat Feldwerte per
f-String direkt in doppelte Anfuehrungszeichen gesetzt, ohne ein
eingebettetes '"' zu escapen (z.B. eine Bezeichnung mit Anfuehrungszeichen
haette die Spaltengrenze der Zeile kaputt gemacht). Neuer gemeinsamer
Helper csv_quote() (export_blockpatterns.py) verdoppelt eingebettete
Anfuehrungszeichen nach RFC 4180.

Ausserdem: export.cfg wurde bisher von vier unabhaengigen load_*-Funktionen
(load_patterns, load_neighbor_tolerance_mm, load_omniflo_cell_size_mm,
load_planquadrat_config) separat von der Platte gelesen und geparst. Neuer
gemeinsamer, gecachter load_export_cfg() in export_blockpatterns.py sorgt
dafuer, dass export.cfg pro Exportlauf nur noch einmal gelesen wird.

Dabei auch die in export_csv.py bereits genutzte, aber in export_planquadrat.py
fehlende resolve_origins()-Funktion (automatische Planquadrat-Ursprungs-
Ermittlung) ergaenzt - ohne sie war der Import von export_csv.py gebrochen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 12:55:50 +02:00
m.stangl ad287b683d 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.
2026-07-23 10:35:42 +02:00
m.stangl 6ab698286f CSV-Export: Nachbarschaftserkennung ueber Bounding-Box-Ueberschneidung (STRtree/shapely)
Neue Spalte "Nachbarn" (kommaseparierte TeileId-Liste) in export_csv.py:
zwei Elemente gelten als benachbart, wenn ihre Bounding-Boxes (x/y-Ebene)
sich ueberschneiden. Toleranz konfigurierbar in mm ueber cfg/export.cfg
[Nachbarschaft] -> toleranz_mm, siehe lib/export_neighbors.py.
Nur EXPORTCSV betroffen, EXPORTSIVAS bleibt unveraendert.

shapely als neue Abhaengigkeit in requirements.txt ergaenzt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-22 15:26:30 +02:00
m.stangl 57badf0556 Sivas-Export: Spalte Hoehe[m] entfernt
Die Hoehe-Angabe steht bereits pro Element in der details-JSON-Spalte
(z.B. "Hoehe in m" aus dem MONTAGEHOEHE_m-Attribut bei VarioFoerderer/
Linienzug), die separate Top-Level-Spalte war redundant.
2026-07-22 13:01:24 +02:00
m.stangl 193b0dea04 CSV-Export: Bounding-Box (Position/Boundingbox) und Planquadrat-Spalte ergaenzt
Nur EXPORTCSV betroffen, EXPORTSIVAS bleibt unveraendert:
- Position/Boundingbox: Bounding-Box je Block per vla-getboundingbox
  (Lisp/export.lsp, csv:get-bbox), Mittelpunkt und Ausdehnung x/y/z.
- Planquadrat: aus x/y-Koordinate berechnet nach cfg/export.cfg
  [Planquadrate] (Schrittweite, numerisch/alphabetisch je Achse,
  alphabetische Zaehlung mit Excel-Spalten-Umlauf Z->AA), siehe
  lib/export_planquadrat.py.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-22 12:52:33 +02:00
m.stangl 4159132ce1 Bezeichner war im json Export noch drin, obwohl es eigene Spalte ist 2026-07-22 12:09:42 +02:00
m.stangl 048bf61ac4 Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros
# Conflicts:
#	Lisp/KreiselInsert.lsp
#	lib/export_sivas.py
2026-07-22 11:28:30 +02:00
m.stangl 3f916a6fed Kreisel: Attribut Geruest_Einzelmodul hinzugefuegt (Erzeugung, Edit-Dialog, Export)
Jeder Kreisel bekommt bei der Erzeugung das neue Attribut GERUEST_EINZELMODUL
(Default false), im KreiselEdit-Dialog per Checkbox "Geruest fuer Einzelmodul"
umschaltbar. Fliesst als echter JSON-Bool ins details-Feld von EXPORTSIVAS/
EXPORTCSV und wird bei der Sivas-Gruppierung gleichartiger Kreisel beruecksichtigt.
2026-07-22 11:25:09 +02:00
y.wang 9a92bede21 Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros 2026-07-21 14:11:56 +02:00
m.stangl 12fc783eb7 Strings Beladung und Entladung geändet 2026-07-21 14:04:43 +02:00
y.wang d99bdb10d5 Kreisel-Attributreihenfolge neu (ID/Bezeichnung/Artinr. zuerst), Artinr.=6200 ergaenzt, N_RAMPEN->ANZAHL_RAMPEN (inkl. Export-Fallback) 2026-07-21 13:55:51 +02:00
m.stangl 903e086e7f Bezeichnung statt Name bei ILS KReisel und Eckrad verwendet. Eigene Spalte für Bezeichnung im Sivas Export dazu gebaut 2026-07-20 16:46:16 +02:00
y.wang 6e8f4c75fe Merge origin/master: i18n-System (de/en) + 30-Grad-AS/ES-Elemente zusammenfuehren
Lokaler Stand (Modus-3 Randwert-Solver, 30/90-AS/ES, Kreisel-Attribute)
mit dem Remote-Stand (Internationalisierung ssg-text, neue Bloecke,
Sivas-Export) vereint.

Konfliktaufloesung:
- vf_linienzug.lsp: Nicht-interaktive -block-Kerne (fuer Pfad-Modi) behalten,
  interaktive Abfragen (GF-Bogen, Vario-Kurve, ES-Seite) auf ssg-text
  umgestellt. Kein doppelter defun mehr.
- Gefaellestrecke.lsp: 30/90-Winkelabfrage mit den i18n-Seiten-Prompts
  kombiniert; gefaellestrecke-einfuegen-Aufruf mit as-/es-winkel.
- vf_core.lsp: vf-frage-element-winkel nimmt jetzt einen i18n-Header-Key
  (vf-winkel-aus-header / vf-winkel-ein-header) statt festem Text.
- lang/de_DE.json + en_GB.json: neue Keys vf-winkel-aus/ein-header,
  vf-winkel-90/30; gf-seite-Header ohne irrefuehrendes "_90_".
- export_sivas.py: ANZAHL_SEPARATOR/ANZAHL_SCANNER mit N_*-Fallback plus
  Remote-Umsortierung; doppelte "Kreiselart"-Zeile entfernt.
- AS_Element_30_links/rechts.dwg + Separator_SP.dwg (3D): Remote-Version
  (Attribut-Stand) uebernommen. Die KS_AUS-Geometrie-Korrektur der 30-Grad-
  AS-Elemente wird danach in BricsCAD nachgezogen.

Offen (Folge-Commit): die Modus-Treiber in vf_linienzug.lsp
(vf-linienzug-modus / -modus2 / -modus3) sind noch nicht i18n
(ca. 110 Strings).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 14:08:13 +02:00
y.wang 57a9f09898 Attribut-Tags umbenannt: N_SEPARATOREN → ANZAHL_SEPARATOR, N_SCANNER → ANZAHL_SCANNER 2026-07-20 13:04:47 +02:00
m.stangl 7941a792e0 Reihenfolge des Sivas CSV Exports geändert 2026-07-20 09:45:11 +02:00
m.stangl db75a25ae1 Sivas-Export: Gefaellestrecke und VarioFoerderer mit Detail-Zeilen statt Sammelzeile
Gefaellestrecke (GF_N): je Zeile eine Gruppe gleichartiger Bloecke (gleiche
Hoehe/Laenge/Winkel/Separatoren/Scanner/Typ), IDs und Bezeichnung als Array
statt einer einzigen Sammelzeile mit reiner Anzahl.

VarioFoerderer (VF_N): je Compound-Block eine eigene Zeile mit vollstaendigen
Gefaelle-/Angetrieben-Teilgruppen (Laengen, Winkel, Kurven, Foerderrichtung),
da VF_N immer TYP "Streckengruppe" ist. Lose Strecke-Elemente ausserhalb
eines VF_N-Blocks bleiben weiterhin in einer gruppierten IDs-Zeile.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-17 14:09:26 +02:00
m.stangl bf517475bb ILS Elementtypen für den Export hinzugefügt. 2026-07-14 16:25:21 +02:00
m.stangl 554e9bee99 Format der SivasNummer ohne + 2026-07-10 13:34:10 +02:00
m.stangl 0b89ed6c5e Dispogruppe-Header korrigiert, Container-Referenzen und --type 2D/3D fuer set_attributs.py
Sivasnr-Werte mit 0_BGxxxxxx-Mustern werden jetzt ueber die neue
[container]-Config-Sektion in kommaseparierte Listen aufgeloest.
set_attributs.py kann nun explizit zwischen data/omniflo/2D und /3D
als Quellverzeichnis waehlen.
2026-07-09 16:03:22 +02:00
m.stangl 2abcd0964c Test für alle Elemente ist jetzt interativ. Man kann jeden Test in einem Reiter offen lassen und ansehen (csv Export aller Files ist dann manuell zu machen), oder auch automatisch schliessen, dafür ist aber der csv Export anschliessend auch mit automatisch. 2026-07-02 16:35:16 +02:00
m.stangl ca8543cca3 omniflo SumZeile jetzt nur über Python erzeugt. 2026-07-02 14:02:06 +02:00
m.stangl 05a7000d33 Gefällestrecke in Sivas und csv Exports eingebaut 2026-07-02 13:19:30 +02:00
m.stangl bf3996435a Weitere TOS Nummern für Zusatzmodul, Weichen Strecke und Automation in den Code für Export eingepflegt 2026-06-30 10:00:17 +02:00
m.stangl 4863df7bac Sivas Export Format geändert 2026-06-29 17:08:37 +02:00
m.stangl 1f7aeb420d Ids werden jetzt in Bricscad von einer Lisp Funktion in Form einer aufsteigenden Nummer erzeugt 2026-06-23 10:11:47 +02:00
s.hensch ec55944721 Orderstruktur der Library in 2d und 3d unterteilt, Dateien entsprechend verschoben, Pfade in Variablen im gesamten Verzeichnis entsprechend korrigiert; Vario Vertikalbögen für 2d und 3d erzeugt; 2026-06-18 07:55:01 +02:00
m.stangl c650ea9b7c doc ergänzt 2026-06-16 17:42:14 +02:00
y.wang c196602e50 Merge 2026-06-16 12:53:50 +02:00
m.stangl c915a4031f Contextmenü für die Rechte Maustaste eingeführt um Elemente zu bearbeiten 2026-06-15 14:30:55 +02:00
m.stangl 2ceea62262 set_attributes.py baut jetzt einen Block der bei Klick alle seine Attribute anzeigt. 2026-06-12 17:57:48 +02:00
m.stangl 2f583a96cb Lisp/README.md als Doku der LispFunktionen erneuert. set_attr.py baut jetzt einen einzigen Block der alle Geometrie und die Attribute enthält. 2026-06-12 17:25:22 +02:00
m.stangl 1f2ebe5c86 export_csv.py und omniflo_utils.py bereinigt und korrigiert
lib/export_csv.py:
  - CSV-Header vereinfacht: NachbarIds, Planquadrat und rotation-Spalten
    entfernt (nicht im Sivas-Format benoetigt). Anzahl-Spalte auf festen
    Wert 1 gesetzt.
  - format_planquadrat() entfernt (war unused nach Header-Aenderung).
  - process_blocks(): elem_nr startet bei 0 statt -1 (erster Block war
    mit Nummer -1 ausgegeben worden).
  - build_bogen_merkmale(), build_weiche_merkmale(): KurvenWinkel und
    Radius werden jetzt explizit als float() gecastet, um sicherzustellen
    dass JSON-Werte aus dem Katalog als Zahl und nicht als String landen.
  - Felder nachbarids, planquadrat, rotation aus den item-Dicts entfernt.

lib/omniflo_utils.py:
  - import_element_as_block(): prueft jetzt zuerst ob eine Block-
    definition mit dem Zielnamen in der Quelldatei existiert (erzeugt
    durch set_attributs.py). Falls ja, wird diese direkt importiert
    statt des gesamten Modelspace. Das verhindert doppelte Entities wenn
    set_attributs.py die Geometrie bereits in einen Block gefasst hat.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 11:26:41 +02:00
m.stangl fd58ef612f attradd.py und add_attr.bat in set_attributs.py/.bat umbenannt
lib/attradd.py -> lib/set_attributs.py: Name besser passend zum
Skript-Zweck (setzt Attribute, analog set_einfuegepkt / set_koords).
bin/add_attr.bat -> bin/set_attributs.bat entsprechend angepasst.

cfg/attradd.cfg: Kommentar auf neuen Skriptnamen aktualisiert.
HOEHE/DREHUNG-Eintraege aus [bogen] und [weiche] entfernt, da diese
Attribute jetzt dynamisch via ssg-cfg-or aus component_defaults.json
bezogen werden (nicht mehr als statische ATTDEF-Defaults noetig).
Ebenso RADIUS aus [weiche] entfernt (war redundant zu KurvenWinkel).

doc/tools.md und CLAUDE.md: Alle Verweise auf attradd.py auf
set_attributs.py aktualisiert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 11:25:28 +02:00
m.stangl 9fe08411df Update der Attribute Höhe und Drehung vor Aufruf der Exports durchgeführt 2026-06-11 12:08:40 +02:00
m.stangl e4564be24c Omniflo Einträge von Verbindern und Bögen für Weichen Ergänzt 2026-06-11 11:15:13 +02:00
m.stangl a2d6571ab9 Omniflo csv Export erste Fassung. Höhe und Winkel in die Attribute ergänzt. Dcl Dialoge ermöglichen Eingabe von Höhe und Drehung. Neuer Menü-eintrag bearbeiten in Omniflo dazu. 2026-06-10 17:47:26 +02:00
m.stangl 22a358554d Pyrx Startup skripte und python Element entfernt, da Schwierigkeiten mit Kompabilitäten 2026-06-10 16:58:12 +02:00
m.stangl b8842957fc aktuellsten Stand eingepflegt. Probleme mit dem PYLOAD noch nicht bereinigt 2026-06-03 09:16:49 +02:00
y.wang d2ab6ff4e2 Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros 2026-06-02 10:00:42 +02:00
y.wang c014ef2f12 die Fehler in VarioFoerderer.lsp korrigiert. alle in ILS-LSP verwendete Block Dateien in data/ils/ konsolidiert. 2026-06-02 10:00:36 +02:00
m.stangl b2dbd8c1c3 vereinfachte Möglichkeit BRX Plugin zu laden über den .venv Pfad. 2026-06-01 19:24:15 +02:00
m.stangl d0373d09f3 Omniflo Boegen und Weichen auch durch .py erzeugen und ändern. 2026-06-01 11:08:19 +02:00
m.stangl 732daedadd lib/utils.py in lib/omniflo_utils.py umbenannt. elemente/kreisel.py verwendet jetzt auch die elemente/utils.py routinen 2026-06-01 10:27:38 +02:00
m.stangl c30d2c51b9 Python Routinen mit PyRx als Ersatz für die .lsp Routinen verwendet. 2026-06-01 10:22:24 +02:00
m.stangl 4eb5fc92fc Merge gemacht. Versuch eines Tests der lisp Routinen erstellt 2026-05-20 16:31:51 +02:00