feat: Option 5 "QC Linie mit GF und U-Form" implementiert (Fa/S dynamisch, Kolinearitaet exakt)

Linienzug-Modus 5: AS(90 Grad) -> Richtung+E1 in einem Klick -> 90-Grad-
GF-U-Turn (Gegenseite von AS) -> Fa(fallend, unbekannt)+Sep -> Bogen-auf-6
-> S(steigend, dynamisch 3/6/9/...Grad, flachster passender Winkel wird
automatisch gewaehlt) -> Bogen-ab-6 -> ES, mit exakter Kolinearitaets-
Rueckkehr zur AS-Eintrittsachse (2x2-Gleichungssystem Hoehe+Lage, analog
zu Option 4's E2-Loesung). E1 nutzt AS's real gemessene KS_AUS-Neigung
(neue vf-element-plan-neigung) statt der angenommenen 3 Grad - das macht
Fa/S ueberhaupt erst ueber E1 steuerbar. Bei "nicht baubar" wird eine
exakte Mindest-E1-Laenge vorgeschlagen (wie Option 4's Mindest-
Gesamtlaenge). Zusaetzlich: Bogen-Seite = Gegenseite der AS-Seite (Option 4
und 5), Fehler in vf-element-plan-neigung-Vorzeichen behoben, fehlender
Separator-Fussabdruck in der Hoehen-/Lage-Bilanz ergaenzt.

Neue GF-eigene Vertikalbogen-Bloecke (Vario_Bogen_auf/ab_3/6_rechts, 2D+3D)
fuer die Uebergaenge.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Yuelin Wang
2026-09-14 08:36:17 +02:00
co-authored by Claude Sonnet 5
parent 0d9ec93623
commit 1b49bd3c3b
15 changed files with 1410 additions and 111 deletions
+49 -1
View File
@@ -546,6 +546,43 @@
(* (atan (cadr (cadr fe)) (car (cadr fe))) (/ 180.0 pi)))
90.0))))
;; Neigungs-Aenderung (Grad) eines Elements: Winkel von KS_EIN.xu nach
;; KS_AUS.xu ausserhalb der XY-Ebene (Steigung/Gefaelle), direkt aus dem Block
;; gemessen - Gegenstueck zu vf-element-plan-turn (das nur die XY-Ebene
;; misst). Genutzt fuer Faelle, in denen ein Element NICHT mit der
;; angenommenen *vfk-gefaelle-winkel*-Neigung weitergebaut werden soll,
;; sondern mit der REALEN, am Block gemessenen Neigung (Nutzer-Vorgabe
;; 2026-09-13, NUR fuer vfl-qc-linie-mit-gf-uform - siehe dortiger
;; Kommentar; alle anderen Aufrufer bleiben bei der angenommenen Neigung).
;; WICHTIG: dieselbe Vorzeichen-Konvention wie frame->hz-winkel (vf_core.lsp)
;; - "winkel" = atan(-xu.z, horiz), NICHT atan(xu.z, horiz) - positiv heisst
;; FALLEND (xu zeigt nach unten, negatives Welt-Z), damit der Rueckgabewert
;; direkt (ohne weiteres Vorzeichen-Umdenken) als winkel-Parameter fuer
;; vfl-insert-gf-segment/vfl-acc-gf-seg verwendet werden kann - ohne die
;; Negation kam beim BricsCAD-Test ein KLETTERNDES statt fallendes E1 heraus
;; (Nutzer-Befund 2026-09-13: reale Neigung maass -3 Grad, ergab ohne
;; Vorzeichen-Fix ein steigendes statt fallendes Element).
;; Fallback 0.0 (keine Neigungsaenderung), falls der Block fehlt.
(defun vf-element-plan-neigung (blockname / temp-obj ks-data fe fa xu-e xu-a horiz-e horiz-a)
(setq blockname (ensure-block-loaded blockname))
(if (not (tblsearch "BLOCK" blockname))
0.0
(progn
(setq temp-obj (vla-InsertBlock modelspace
(vlax-3D-point '(0 0 0)) blockname 1.0 1.0 1.0 0))
(setq ks-data (extract-ks-from-block temp-obj))
(if (not (vlax-erased-p temp-obj)) (vla-Delete temp-obj))
(setq fe (ks-frame-extract (cadr (assoc "KS_EIN" ks-data))))
(setq fa (ks-frame-extract (cadr (assoc "KS_AUS" ks-data))))
(if (and fe fa)
(progn
(setq xu-e (cadr fe) xu-a (cadr fa))
(setq horiz-e (sqrt (+ (* (car xu-e) (car xu-e)) (* (cadr xu-e) (cadr xu-e)))))
(setq horiz-a (sqrt (+ (* (car xu-a) (car xu-a)) (* (cadr xu-a) (cadr xu-a)))))
(- (* (atan (- (caddr xu-a)) horiz-a) (/ 180.0 pi))
(* (atan (- (caddr xu-e)) horiz-e) (/ 180.0 pi))))
0.0))))
;; KS-Info eines Elements (im Block, Einbau-Rotation 0):
;; Rueckgabe (ein-ang aus-ang vx vy)
;; ein-ang / aus-ang : Ebenen-Winkel (Grad) von KS_EIN.xu bzw. KS_AUS.xu
@@ -1148,6 +1185,8 @@
(action_tile "accept"
"(setq gmodus (cond ((= (get_tile \"modus_2\") \"1\") 2)
((= (get_tile \"modus_3\") \"1\") 3)
((= (get_tile \"modus_4\") \"1\") 4)
((= (get_tile \"modus_5\") \"1\") 5)
(t 1)))
(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")
@@ -1169,6 +1208,12 @@
;; ============================================================
;; TEIL 12: DISPATCHER c:VarioFoerderer
;; ============================================================
;; Erzwungener QC-Modus (Linienzug-Modus 4/5, vfc-dialog-linienzug-modus-
;; waehlen/Konsolen-Fallback unten): "4"/"5" waehrend des naechsten
;; vf-linienzug-modus-Laufs, sonst nil. Von vf-linienzug-modus (vf_linienzug.
;; lsp, spaeter geladen) gelesen/geleert - globale Vorab-Deklaration hier,
;; damit sie unabhaengig von der Lade-Reihenfolge existiert.
(if (not (boundp '*vfl-forciere-qc-modus*)) (setq *vfl-forciere-qc-modus* nil))
(defun c:VarioFoerderer ( / typ-eintr anlage-typ berechne-fn einfuege-fn
eingabe deltaL deltaH richtung startpunkt seite hz
eingabe-modus ergebnis ergebnis-liste gueltige-winkel
@@ -1248,7 +1293,9 @@
(princ (ssg-text "vfc-linienzug-modus-1"))
(princ (ssg-text "vfc-linienzug-modus-2"))
(princ (ssg-text "vfc-linienzug-modus-3"))
(setq wahl (getint (ssg-text "prompt-wahl-1-2-3")))
(princ (ssg-text "vfc-linienzug-modus-4"))
(princ (ssg-text "vfc-linienzug-modus-5"))
(setq wahl (getint (ssg-text "prompt-wahl-1-5")))
)
)
(if (not zurueck-zu-typ)
@@ -1267,6 +1314,7 @@
;; Hochziehen ein reiner Bugfix. Setzt zugleich *vfl-seg-glied-letzte*
;; zurueck, das sonst vom Vorlauf stehenbleibt.
(vfl-journal-reset)
(setq *vfl-forciere-qc-modus* (cond ((= wahl 4) "4") ((= wahl 5) "5") (t nil)))
(cond ((= wahl 2) (vf-linienzug-modus2))
((= wahl 3) (vf-linienzug-modus3))
(t (vf-linienzug-modus)))
+8
View File
@@ -144,6 +144,14 @@
;; traegt den Wert weiterhin zusaetzlich im String - dort unangetastet).
(if (null *vfk-separator-laenge*) (setq *vfk-separator-laenge* 300.0))
;; "QC Linie mit GF" / "QC Linie mit GF und U-Form" (Lisp/vf_linienzug.lsp,
;; vfl-qc-linie-mit-gf/-uform): reine Vorschlagswerte fuer die Ein-/Auslauf-
;; Geradenstuecke bzw. die feste U-Form-Zwischenstrecke - alle drei bleiben
;; Nutzereingaben (getreal mit diesem Default), keine harten Konstanten.
(if (null *vfk-qc-einlauf-laenge*) (setq *vfk-qc-einlauf-laenge* 1000.0))
(if (null *vfk-qc-u-fest-laenge*) (setq *vfk-qc-u-fest-laenge* 400.0))
(if (null *vfk-qc-fallend-anteil-default*) (setq *vfk-qc-fallend-anteil-default* 0.5))
;; Mindestlaenge (mm) fuer eine VF-Einheit (Umlenk+Motor = 2x
;; *vfk-stations-laenge*). Aktiv referenziert in vf_linienzug.lsp
;; (vfl-vf-entscheidung, vfl-vf-machbar-p, vfl-segment-entscheidung,
+1236 -106
View File
File diff suppressed because it is too large Load Diff