fix: Z-Versatz bei GF/VF behoben (OSMODE=0 im Wrap ssg-block-wrap-welt); gepickte Hoehe als Einfuegehoehe im GF-Dialog
This commit is contained in:
@@ -73,6 +73,52 @@
|
||||
)
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; BLOCK-WRAP MIT GARANTIERT WELTPARALLELEM BKS
|
||||
;; ------------------------------------------------------------
|
||||
;; Fasst die Entities in ss zu einem Block bname zusammen und fuegt ihn am
|
||||
;; Welt-Punkt basispkt-welt wieder ein. Setzt das BKS dazu temporaer hart
|
||||
;; auf Welt und stellt es danach wieder her.
|
||||
;;
|
||||
;; Hintergrund (31.95mm-Z-Versatz-Bug): (command "_.-BLOCK"/"_.INSERT" ...)
|
||||
;; rechnet Punktargumente im AKTUELLEN BKS. Bei einem vom Welt-KS
|
||||
;; abweichenden BKS ging der korrekt via (trans ...) umgerechnete Z-Wert
|
||||
;; beim _.-BLOCK -> _.INSERT-Rundlauf verloren, sodass der fertige Block
|
||||
;; um die BKS-Hoehe (z.B. 31.95mm) in Z verschoben wurde - obwohl die
|
||||
;; ELEVATION-Systemvariable 0 war. Bei BKS=Welt liegen Objekte, Basispunkt
|
||||
;; und Einfuegepunkt alle bei WCS-Z ohne jede Umrechnungs-Mehrdeutigkeit;
|
||||
;; ein bei WCS-Z=0 platziertes Element bleibt garantiert bei Z=0.
|
||||
;;
|
||||
;; Rueckgabe: das eingefuegte INSERT-Objekt (entlast).
|
||||
(defun ssg-block-wrap-welt (bname basispkt-welt ss / alt-attreq alt-attdia alt-elev alt-osmode)
|
||||
(setq alt-attreq (getvar "ATTREQ")
|
||||
alt-attdia (getvar "ATTDIA")
|
||||
alt-elev (getvar "ELEVATION")
|
||||
alt-osmode (getvar "OSMODE"))
|
||||
(setvar "ATTREQ" 0)
|
||||
(setvar "ATTDIA" 0)
|
||||
;; OSMODE=0: laufenden Objektfang abschalten. Sonst kann _.INSERT den
|
||||
;; explizit uebergebenen Einfuegepunkt (X,Y,0) auf ein an derselben X/Y-Stelle
|
||||
;; liegendes Objekt umfangen - z.B. den gefangenen Basispunkt bei Z=12000 ->
|
||||
;; der Block landet auf 12000 statt 0 (12000er-Bug).
|
||||
(setvar "OSMODE" 0)
|
||||
;; ELEVATION=0: sonst kann _.INSERT die Z-Hoehe aus der aktuellen Elevation
|
||||
;; statt aus dem uebergebenen Punkt ziehen.
|
||||
(setvar "ELEVATION" 0.0)
|
||||
;; BKS temporaer auf Welt; _Previous stellt danach das vorige BKS wieder her.
|
||||
(command "_.UCS" "_World")
|
||||
;; basispkt-welt ist ein Welt-Punkt; bei BKS=Welt ist er zugleich BKS-Punkt.
|
||||
(command "_.-BLOCK" bname basispkt-welt ss "")
|
||||
(command "_.INSERT" bname basispkt-welt 1.0 1.0 0.0)
|
||||
(command "_.UCS" "_Previous")
|
||||
(setvar "OSMODE" alt-osmode)
|
||||
(setvar "ELEVATION" alt-elev)
|
||||
(setvar "ATTREQ" alt-attreq)
|
||||
(setvar "ATTDIA" alt-attdia)
|
||||
(entlast)
|
||||
)
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; BENUTZER-ABFRAGEN
|
||||
;; ------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user