cache der aus den Koordinaten K_AUS und K_EIN geladenen Punkte eingeführt

This commit is contained in:
2026-06-01 10:23:43 +02:00
parent c30d2c51b9
commit 676224b172
+61 -5
View File
@@ -46,6 +46,7 @@
(setq *lib-initialized* nil)
(setq *bogen-cache-loaded* nil)
(setq *modul-cache* nil)
(setq *ks-cache* nil) ;; KS-Daten Cache: (("blockname" ("KS_EIN" ...) ("KS_AUS" ...)) ...)
;; ============================================================
;; TEIL 3: HILFSFUNKTIONEN
@@ -72,6 +73,30 @@
(list (- (car p2) (car p1)) (- (cadr p2) (cadr p1)) (- (caddr p2) (caddr p1)))
)
;; KS-Daten relativ zu einem Basispunkt machen (fuer Cache)
(defun ks-relativize (ks-data base-pt)
(mapcar '(lambda (item)
(list (car item)
(mapcar '(lambda (pt)
(list (- (car pt) (car base-pt))
(- (cadr pt) (cadr base-pt))
(- (caddr pt) (caddr base-pt))))
(cadr item))))
ks-data)
)
;; Relative KS-Daten auf einen Basispunkt anwenden
(defun ks-absolutize (ks-rel base-pt)
(mapcar '(lambda (item)
(list (car item)
(mapcar '(lambda (pt)
(list (+ (car pt) (car base-pt))
(+ (cadr pt) (cadr base-pt))
(+ (caddr pt) (caddr base-pt))))
(cadr item))))
ks-rel)
)
;; ============================================================
;; TEIL 4: KS_EIN/KS_AUS EXTRAKTION (KERN-FUNKTION)
;; ============================================================
@@ -79,13 +104,14 @@
;; Grad-Zeichen für Blocknamen
(setq grad-zeichen (chr 176))
;; Extrahiert KS_EIN und KS_AUS aus einem Block
;; Extrahiert KS_EIN und KS_AUS aus einem Block (intern, ohne Cache)
;; Rückgabe: (("KS_EIN" (origin x-end y-end z-end))
;; ("KS_AUS" (origin x-end y-end z-end)))
(defun extract-ks-from-block (block-obj / sub-entities sub-obj ks-results
ks-ref inner-entities inner-obj origin x-end y-end z-end
line-start line-end axis line-len line-vec)
(dbgf "extract-ks-from-block")
(defun extract-ks-from-block-raw (block-obj / sub-entities sub-obj ks-results
ks-ref inner-entities inner-obj origin x-end y-end z-end
line-start line-end axis line-len line-vec)
(dbgf "extract-ks-from-block-raw")
(dbg block-obj)
(setq ks-results '())
;; Block explodieren
@@ -144,6 +170,35 @@
(dbgreturn ks-results)
)
;; Gecachte Version: prueft *ks-cache* anhand Blockname
;; Beim ersten Aufruf wird explodiert und das Ergebnis relativ
;; zum Einfuegepunkt im Cache gespeichert. Weitere Aufrufe
;; desselben Blocktyps liefern die Daten ohne Explode.
(defun extract-ks-from-block (block-obj / blockname insert-pt cached result ks-rel)
(dbgf "extract-ks-from-block")
(setq blockname (vla-get-Name block-obj))
(setq insert-pt (vlax-safearray->list
(vlax-variant-value (vla-get-InsertionPoint block-obj))))
(setq cached (assoc blockname *ks-cache*))
(if cached
(progn
(dbg (strcat " KS-Cache HIT: " blockname))
(dbgreturn (ks-absolutize (cdr cached) insert-pt))
)
(progn
(dbg (strcat " KS-Cache MISS: " blockname))
(setq result (extract-ks-from-block-raw block-obj))
(if result
(progn
(setq ks-rel (ks-relativize result insert-pt))
(setq *ks-cache* (cons (cons blockname ks-rel) *ks-cache*))
)
)
(dbgreturn result)
)
)
)
;; ============================================================
;; TEIL 5: PUNKTE-AUSWAHL MIT Z-HÖHE (HIER EINFÜGEN!)
;; ============================================================
@@ -197,6 +252,7 @@
(dbgreturn t)
)
(progn
(setq *ks-cache* nil)
(princ "\n Lade Blockdefinitionen aus Bibliothek...")
(if (findfile koordinaten-lib)