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:
co-authored by
Claude Sonnet 5
parent
0d9ec93623
commit
1b49bd3c3b
+49
-1
@@ -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)))
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user