cache der aus den Koordinaten K_AUS und K_EIN geladenen Punkte eingeführt
This commit is contained in:
+61
-5
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user