VF-Linienzug Modus 2 (Ziel-Hoehe) fertig , AS/ES 30/90 Grad bei GF und VF waehlbar.
This commit is contained in:
+89
-1
@@ -688,6 +688,84 @@
|
||||
" Z=" (rtos (caddr P-out) 2 2)))
|
||||
(list P-out xu-out yu-out zu-out))
|
||||
|
||||
;; ============================================================
|
||||
;; AS-/ES-Element: Winkel-Variante (30 / 90 Grad)
|
||||
;; ============================================================
|
||||
;; Masse (KS_EIN->KS_AUS als (dx dy dz)) eines Elements aus dem Block ziehen.
|
||||
(defun vf-element-masse (blockname / temp-obj ks-data ke ka)
|
||||
(ensure-block-loaded blockname)
|
||||
(if (not (tblsearch "BLOCK" blockname))
|
||||
nil
|
||||
(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 ke (cadr (assoc "KS_EIN" ks-data)) ka (cadr (assoc "KS_AUS" ks-data)))
|
||||
(if (and ke ka)
|
||||
(list (- (caar ka) (caar ke))
|
||||
(- (cadr (car ka)) (cadr (car ke)))
|
||||
(- (caddr (car ka)) (caddr (car ke))))
|
||||
nil))))
|
||||
|
||||
;; Ebenen-Schwenk (Grad) eines Elements: Winkel von KS_EIN.xu nach KS_AUS.xu in
|
||||
;; der XY-Ebene, direkt aus dem Block gemessen (unabhaengig davon, ob 30/90-Turn
|
||||
;; oder gerade). Wird genutzt, um KS_EIN so zu drehen, dass KS_AUS entlang hz
|
||||
;; zeigt: ein-hz = hz - plan-turn. Fallback 90 (Vorgabe fuer 90-Grad-Element).
|
||||
(defun vf-element-plan-turn (blockname / temp-obj ks-data fe fa)
|
||||
(ensure-block-loaded blockname)
|
||||
(if (not (tblsearch "BLOCK" blockname))
|
||||
90.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)
|
||||
(- (* (atan (cadr (cadr fa)) (car (cadr fa))) (/ 180.0 pi))
|
||||
(* (atan (cadr (cadr fe)) (car (cadr fe))) (/ 180.0 pi)))
|
||||
90.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
|
||||
;; vx / vy : KS_AUS.origin - KS_EIN.origin (Block-XY)
|
||||
;; Damit laesst sich die KS_AUS-Lage + Achsrichtung analytisch vorausberechnen.
|
||||
(defun vf-element-ks-info (blockname / temp-obj ks-data fe fa)
|
||||
(ensure-block-loaded blockname)
|
||||
(if (not (tblsearch "BLOCK" blockname))
|
||||
nil
|
||||
(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)
|
||||
(list (* (atan (cadr (cadr fe)) (car (cadr fe))) (/ 180.0 pi))
|
||||
(* (atan (cadr (cadr fa)) (car (cadr fa))) (/ 180.0 pi))
|
||||
(- (car (car fa)) (car (car fe)))
|
||||
(- (cadr (car fa)) (cadr (car fe))))
|
||||
nil))))
|
||||
|
||||
;; 30/90-Wahl fuer ein AS/ES-Element. Rueckgabe: "30" oder "90" (Vorgabe 90).
|
||||
(defun vf-frage-element-winkel (label)
|
||||
(princ (strcat "\n\n" label " - Winkel: 1 - 90 Grad 2 - 30 Grad"))
|
||||
(if (= (getstring "\nIhre Wahl (1/2) [1]: ") "2") "30" "90"))
|
||||
|
||||
;; AS-/ES-Masse-Globals (aus-dx/dy/dz bzw. ein-dx/dy/dz) fuer die gewaehlte
|
||||
;; Winkel-/Seiten-Variante neu setzen (fuer berechne-alle-winkel, GF-Winkel,
|
||||
;; Trimmungen). Ohne gueltigen Block bleiben die Werte unveraendert.
|
||||
(defun vf-set-as-masse (winkel seite / m)
|
||||
(setq m (vf-element-masse (strcat "AS_Element_" winkel "_" seite)))
|
||||
(if m (setq aus-dx (car m) aus-dy (cadr m) aus-dz (caddr m))))
|
||||
(defun vf-set-es-masse (winkel seite / m)
|
||||
(setq m (vf-element-masse (strcat "ES_Element_" winkel "_" seite)))
|
||||
(if m (setq ein-dx (car m) ein-dy (cadr m) ein-dz (caddr m))))
|
||||
|
||||
;; hz: horizontale Fahrtrichtung in Grad (0=Ost/+X, 90=Nord/+Y, ...),
|
||||
;; winkel: vertikale Neigung in Grad. Rotation = Rz(hz)*Ry(winkel).
|
||||
(defun insert-inclined-scaled-block (blockname startpunkt laenge winkel hz /
|
||||
@@ -1172,7 +1250,17 @@
|
||||
;; vf_linienzug.lsp. Dispatcht hier direkt und beendet den Standard-Ablauf.
|
||||
(if (= anlage-typ "linienzug")
|
||||
(progn
|
||||
(vf-linienzug-modus)
|
||||
(princ "\n\nLinienzug-Modus waehlen:")
|
||||
(princ "\n 1 - Manuelle Eingabe (Punkte klicken)")
|
||||
(princ "\n 2 - 3D-Objekte + Ziel-Hoehe (Randwert-Solver, fertig)")
|
||||
(princ "\n 3 - 3D-Objekte stueckweise (Vorwaerts-Nachbau, in Arbeit)")
|
||||
(setq wahl (getint "\nIhre Wahl (1/2/3) [1]: "))
|
||||
;; Konsolen-Nummer -> interne Funktion:
|
||||
;; 2 = fertiger Ziel-Hoehe-Modus (intern vf-linienzug-modus3)
|
||||
;; 3 = alter Vorwaerts-Nachbau (intern vf-linienzug-modus2, wird umgebaut)
|
||||
(cond ((= wahl 2) (vf-linienzug-modus3))
|
||||
((= wahl 3) (vf-linienzug-modus2))
|
||||
(t (vf-linienzug-modus)))
|
||||
(exit)
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user