feat: ILS-Bloecke ueber eindeutige 2D/3D-Namen laden + Auto-Layer

Zentrale Namensaufloesung (ssg-ils-datei-und-name, dual-schema: neu data/ils/<name>_<dim>.dwg mit eindeutigem In-Zeichnungs-Namen, alt Unterordner als Fallback). ensure-block-loaded liefert den aufgeloesten Namen; die insert-Helfer weisen blockname neu zu und setzen die INSERT-Referenz automatisch auf die eigene Ebene des Blocks (ssg-ils-block-auf-ebene, legt sie bei Bedarf an).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-24 13:31:03 +02:00
parent 60c20519a0
commit d21f0acb4e
3 changed files with 126 additions and 83 deletions
+14 -14
View File
@@ -115,13 +115,13 @@
;; --- Block als einzelne DWG-Datei aus block-pfad laden --- ;; --- Block als einzelne DWG-Datei aus block-pfad laden ---
(if (null (car (atoms-family 1 '("ENSURE-BLOCK-LOADED")))) (if (null (car (atoms-family 1 '("ENSURE-BLOCK-LOADED"))))
(defun ensure-block-loaded (blockname / ) (defun ensure-block-loaded (blockname / real)
;; Zentraler Loader (aktuelle Dimension + 3D-Fallback, Neudefinition bei ;; Zentraler Loader; liefert den IN-ZEICHNUNGS-NAMEN zurueck (2D/3D
;; Dimensionswechsel). Meldung nur bei Fehlschlag. ;; eindeutig) oder nil bei Fehlschlag.
(if (not (ssg-ils-block-laden blockname)) (setq real (ssg-ils-block-laden blockname))
(progn (if (null real)
(princ (ssg-textf "gf-fehler-blockdatei-fehlt" (list blockname))) (progn (princ (ssg-textf "gf-fehler-blockdatei-fehlt" (list blockname))) nil)
) real
) )
) )
) )
@@ -239,7 +239,7 @@
block-obj temp-obj ks-data ks-ein ks-aus block-obj temp-obj ks-data ks-ein ks-aus
rad-h chv shv ein-x ein-y ein-z dx-loc dy-loc dz-loc rad-h chv shv ein-x ein-y ein-z dx-loc dy-loc dz-loc
offset ausgang) offset ausgang)
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(if (not (tblsearch "BLOCK" blockname)) (if (not (tblsearch "BLOCK" blockname))
(progn (progn
(princ (ssg-textf "gf-fehler-block-fehlt" (list blockname))) (princ (ssg-textf "gf-fehler-block-fehlt" (list blockname)))
@@ -302,7 +302,7 @@
(if (<= laenge 0.1) (if (<= laenge 0.1)
(progn (princ (ssg-text "gf-laenge-null-uebersprungen")) startpunkt) (progn (princ (ssg-text "gf-laenge-null-uebersprungen")) startpunkt)
(progn (progn
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(setq scale (/ (float laenge) 1000.0)) (setq scale (/ (float laenge) 1000.0))
(setq rad-v (* (float winkel) (/ pi 180.0))) (setq rad-v (* (float winkel) (/ pi 180.0)))
(setq rad-h (* (float hz) (/ pi 180.0))) (setq rad-h (* (float hz) (/ pi 180.0)))
@@ -343,7 +343,7 @@
ks-ein-raw ks-aus-raw ks-ein-raw ks-aus-raw
ein-x ein-y ein-z aus-x aus-y aus-z ein-x ein-y ein-z aus-x aus-y aus-z
dx dz ins-pt) dx dz ins-pt)
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(setq rad-v (* (float winkel) (/ pi 180.0))) (setq rad-v (* (float winkel) (/ pi 180.0)))
(setq rad-h (* (float hz) (/ pi 180.0))) (setq rad-h (* (float hz) (/ pi 180.0)))
(setq chv (cos rad-h) shv (sin rad-h) cvv (cos rad-v) svv (sin rad-v)) (setq chv (cos rad-h) shv (sin rad-h) cvv (cos rad-v) svv (sin rad-v))
@@ -517,7 +517,7 @@
(if (<= laenge 0.1) (if (<= laenge 0.1)
(progn (princ (ssg-text "gf-laenge-null-uebersprungen")) pt) (progn (princ (ssg-text "gf-laenge-null-uebersprungen")) pt)
(progn (progn
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(setq scale (/ (float laenge) 1000.0)) (setq scale (/ (float laenge) 1000.0))
(setq chz (cos (* (float hz-grad) (/ pi 180.0)))) (setq chz (cos (* (float hz-grad) (/ pi 180.0))))
(setq shz (sin (* (float hz-grad) (/ pi 180.0)))) (setq shz (sin (* (float hz-grad) (/ pi 180.0))))
@@ -549,7 +549,7 @@
;; dz: vertikaler Offset im Block (mm, 0 fuer gerade Bloecke) ;; dz: vertikaler Offset im Block (mm, 0 fuer gerade Bloecke)
(defun gf-insert-hz-with-ks (blockname pt hz-grad vert-grad dx dz / (defun gf-insert-hz-with-ks (blockname pt hz-grad vert-grad dx dz /
chz shz cv sv block-obj endpunkt) chz shz cv sv block-obj endpunkt)
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(setq chz (cos (* (float hz-grad) (/ pi 180.0)))) (setq chz (cos (* (float hz-grad) (/ pi 180.0))))
(setq shz (sin (* (float hz-grad) (/ pi 180.0)))) (setq shz (sin (* (float hz-grad) (/ pi 180.0))))
(setq cv (cos (* (float vert-grad) (/ pi 180.0)))) (setq cv (cos (* (float vert-grad) (/ pi 180.0))))
@@ -581,7 +581,7 @@
temp-obj block-obj ks-data ks-ein ks-aus temp-obj block-obj ks-data ks-ein ks-aus
p-ein p-aus p-ein-rot p-aus-rot p-ein p-aus p-ein-rot p-aus-rot
offset ausgang) offset ausgang)
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(if (not (tblsearch "BLOCK" blockname)) (if (not (tblsearch "BLOCK" blockname))
(progn (progn
(princ (ssg-textf "gf-fehler-block-fehlt-ausruf" (list blockname))) (princ (ssg-textf "gf-fehler-block-fehlt-ausruf" (list blockname)))
@@ -672,7 +672,7 @@
blockname temp-obj ks-data blockname temp-obj ks-data
ks-ein-pos ks-aus-pos dx dz) ks-ein-pos ks-aus-pos dx dz)
(setq blockname (gf-bogen-blockname bwinkel bseite)) (setq blockname (gf-bogen-blockname bwinkel bseite))
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(if (not (tblsearch "BLOCK" blockname)) (if (not (tblsearch "BLOCK" blockname))
(progn (progn
(princ (ssg-textf "gf-warnung-block-fehlt-nullwerte" (list blockname))) (princ (ssg-textf "gf-warnung-block-fehlt-nullwerte" (list blockname)))
+83 -47
View File
@@ -329,71 +329,107 @@
"/data/ils/")) "/data/ils/"))
(t nil))) (t nil)))
;; Liefert den vollstaendigen .dwg-Pfad zu einem ILS-Block anhand der ;; Liefert (datei . realname): vollstaendiger .dwg-Pfad UND der Name, unter dem
;; aktuellen Dimension (siehe ssg-ils-dim-aktuell). Faellt automatisch auf die ;; der Block in der Zeichnung erscheint. Zwei Schemata (uebergangsweise beide):
;; 3D-Variante zurueck, wenn der Block in der aktuellen Dimension (noch) nicht ;; NEU (flach, eindeutig): data/ils/<base>_<dim>.dwg -> realname <base>_<dim>
;; existiert - so nutzen z.B. Vario_Motorstation/-Umlenkstation im 2D-Modus ;; (Fallback <base>_3D, falls die aktuelle Dim-Datei fehlt)
;; vorlaeufig die 3D-Datei. ;; ALT (Unterordner): data/ils/<dim>/<base>.dwg -> realname <base>
;; Rueckgabe: Pfad-String oder nil (Block weder in Dim noch in 3D gefunden). ;; (Fallback data/ils/3D/<base>.dwg)
(defun ssg-ils-block-datei (blockname / basis dim datei datei3d) ;; Rueckgabe nil, wenn nichts gefunden.
(defun ssg-ils-datei-und-name (base / basis dim f)
(setq basis (ssg-ils-basis)) (setq basis (ssg-ils-basis))
(if (null basis) (if (null basis)
nil nil
(progn (progn
(setq dim (ssg-ils-dim-aktuell)) (setq dim (ssg-ils-dim-aktuell))
(setq datei (strcat basis dim "/" blockname ".dwg"))
(setq datei3d (strcat basis "3D/" blockname ".dwg"))
(cond (cond
((findfile datei) datei) ; aktuelle Dimension ((findfile (setq f (strcat basis base "_" dim ".dwg"))) (cons f (strcat base "_" dim)))
((findfile datei3d) datei3d) ; Fallback: 3D-Variante ((findfile (setq f (strcat basis base "_3D.dwg"))) (cons f (strcat base "_3D")))
(t nil)) ((findfile (setq f (strcat basis dim "/" base ".dwg"))) (cons f base))
) ((findfile (setq f (strcat basis "3D/" base ".dwg"))) (cons f base))
) (t nil)))))
)
;; Merker: welche Dimension ("2D"/"3D") aktuell je Blockname geladen ist. ;; Nur der Dateipfad (fuer Aufrufer, die per Pfad einfuegen, z.B. Sensoren).
;; (blockname . dim). Verhindert unnoetiges Neu-Definieren bei gleicher Dim. (defun ssg-ils-block-datei (base / dn)
(setq dn (ssg-ils-datei-und-name base))
(if dn (car dn) nil))
;; Merker: welche Dimension je (ALT-Schema) Blockname geladen ist.
(if (not (boundp '*ssg-ils-dim-geladen*)) (setq *ssg-ils-dim-geladen* '())) (if (not (boundp '*ssg-ils-dim-geladen*)) (setq *ssg-ils-dim-geladen* '()))
;; Stellt sicher, dass die Block-DEFINITION 'blockname' in der AKTUELLEN ;; Stellt sicher, dass der Block geladen ist, und liefert den IN-ZEICHNUNGS-
;; Dimension geladen ist. Weil 2D- und 3D-Datei denselben Blocknamen tragen, ;; NAMEN zurueck, unter dem einzufuegen ist (bzw. nil bei Fehler).
;; muss bei einem Dimensionswechsel aus der Zieldatei NEU definiert werden - ;; NEU-Schema: eindeutiger Name (<base>_<dim>) -> einmal laden, kein Redefine.
;; sonst bliebe die alte Definition (z.B. 3D) erhalten. ;; ALT-Schema: Name = <base> (2D/3D teilen den Namen) -> bei Dimwechsel aus
;; Rueckgabe: T (geladen/vorhanden) oder nil (Datei nicht gefunden). ;; der Datei neu definieren (Redefine).
(defun ssg-ils-block-laden (blockname / dim exists datei temp-obj osm areq adia) (defun ssg-ils-block-laden (base / dn datei realname dim temp-obj osm areq adia)
(setq dim (ssg-ils-dim-aktuell)) (setq dn (ssg-ils-datei-und-name base))
(setq exists (tblsearch "BLOCK" blockname)) (if (null dn)
(cond
;; Schon in der gewuenschten Dimension geladen -> nichts tun.
((and exists (equal (cdr (assoc blockname *ssg-ils-dim-geladen*)) dim)) T)
(t
(setq datei (ssg-ils-block-datei blockname))
(if (null datei)
nil nil
(progn (progn
(if exists (setq datei (car dn) realname (cdr dn))
;; Existiert (evtl. andere Dimension) -> aus Datei NEU definieren. (if (/= realname base)
;; "_Y" beantwortet die Redefine-Abfrage; danach wird die eigentliche ;; ---- NEU-Schema (eindeutiger Name) ----
;; Einfuegung abgebrochen (die Neudefinition ist bereits wirksam).
(progn (progn
(setq areq (getvar "ATTREQ") adia (getvar "ATTDIA") osm (getvar "OSMODE")) (if (not (tblsearch "BLOCK" realname))
(setvar "ATTREQ" 0)(setvar "ATTDIA" 0)(setvar "OSMODE" 0)
(command "_.-INSERT" (strcat blockname "=" datei) "_Y")
;; laufende Einfuegung abbrechen (Neudefinition ist bereits wirksam)
(if (> (getvar "CMDACTIVE") 0) (command))
(if (> (getvar "CMDACTIVE") 0) (command))
(setvar "OSMODE" osm)(setvar "ATTREQ" areq)(setvar "ATTDIA" adia))
;; Neu -> bewaehrter COM-Weg (kein Redefine-Prompt).
(progn (progn
(setq temp-obj (vla-InsertBlock modelspace (setq temp-obj (vla-InsertBlock modelspace
(vlax-3D-point '(0 0 0)) datei 1.0 1.0 1.0 0)) (vlax-3D-point '(0 0 0)) datei 1.0 1.0 1.0 0))
(vla-Delete temp-obj))) (vla-Delete temp-obj)))
;; Merker aktualisieren (alten Dim-Eintrag dieses Blocks ersetzen). realname)
;; ---- ALT-Schema (gemeinsamer Name, Uebergang) ----
(progn
(setq dim (ssg-ils-dim-aktuell))
(if (not (and (tblsearch "BLOCK" base)
(equal (cdr (assoc base *ssg-ils-dim-geladen*)) dim)))
(if (tblsearch "BLOCK" base)
(progn
(setq areq (getvar "ATTREQ") adia (getvar "ATTDIA") osm (getvar "OSMODE"))
(setvar "ATTREQ" 0)(setvar "ATTDIA" 0)(setvar "OSMODE" 0)
(command "_.-INSERT" (strcat base "=" datei) "_Y")
(if (> (getvar "CMDACTIVE") 0) (command))
(if (> (getvar "CMDACTIVE") 0) (command))
(setvar "OSMODE" osm)(setvar "ATTREQ" areq)(setvar "ATTDIA" adia))
(progn
(setq temp-obj (vla-InsertBlock modelspace
(vlax-3D-point '(0 0 0)) datei 1.0 1.0 1.0 0))
(vla-Delete temp-obj))))
(setq *ssg-ils-dim-geladen* (setq *ssg-ils-dim-geladen*
(cons (cons blockname dim) (cons (cons base dim)
(vl-remove-if (function (lambda (p) (equal (car p) blockname))) (vl-remove-if (function (lambda (p) (equal (car p) base)))
*ssg-ils-dim-geladen*))) *ssg-ils-dim-geladen*)))
T))))) base)))))
;; Ermittelt die "eigene" Ebene eines geladenen Blocks: haeufigste Ebene (ausser
;; "0") seiner Definition-Entities; nil, wenn nur "0".
(defun ssg-ils-block-ebene (realname / blocks blk e lay pair counts best best-n c)
(if (and realname (tblsearch "BLOCK" realname))
(progn
(setq blocks (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))))
(setq blk (vla-item blocks realname))
(setq counts '())
(vlax-for e blk
(setq lay (vla-get-Layer e))
(if (and lay (/= lay "0"))
(progn
(setq pair (assoc lay counts))
(if pair
(setq counts (subst (cons lay (1+ (cdr pair))) pair counts))
(setq counts (cons (cons lay 1) counts))))))
(setq best nil best-n 0)
(foreach c counts (if (> (cdr c) best-n) (setq best (car c) best-n (cdr c))))
best)
nil))
;; Setzt die INSERT-Referenz (VLA-Objekt) auf die eigene Ebene ihres Blocks
;; (legt die Ebene an, falls noetig). No-op, wenn keine eigene Ebene ermittelbar.
(defun ssg-ils-block-auf-ebene (obj realname / eb)
(setq eb (ssg-ils-block-ebene realname))
(if (and eb obj)
(progn
(if (not (tblsearch "LAYER" eb)) (ssg-make-layer eb 7 nil))
(vl-catch-all-apply (function (lambda () (vla-put-Layer obj eb))))))
obj)
;; ------------------------------------------------------------ ;; ------------------------------------------------------------
;; DIMENSIONS-XDATA (2D/3D) je Block - App "SSG_DIM" ;; DIMENSIONS-XDATA (2D/3D) je Block - App "SSG_DIM"
+20 -13
View File
@@ -258,11 +258,13 @@
;; ============================================================ ;; ============================================================
;; TEIL 5: KS_EIN/KS_AUS EXTRAKTION ;; TEIL 5: KS_EIN/KS_AUS EXTRAKTION
;; ============================================================ ;; ============================================================
(defun ensure-block-loaded (blockname / ) (defun ensure-block-loaded (blockname / real)
;; Zentraler Loader (aktuelle Dimension + 3D-Fallback, Neudefinition bei ;; Zentraler Loader; liefert den IN-ZEICHNUNGS-NAMEN zurueck, unter dem der
;; Dimensionswechsel). Meldung nur bei Fehlschlag. ;; Block einzufuegen ist (2D/3D eindeutig), oder nil bei Fehlschlag.
(if (not (ssg-ils-block-laden blockname)) (setq real (ssg-ils-block-laden blockname))
(princ (ssg-textf "vfc-fehler-block-datei-fehlt" (list blockname))) (if (null real)
(progn (princ (ssg-textf "vfc-fehler-block-datei-fehlt" (list blockname))) nil)
real
) )
) )
@@ -450,7 +452,7 @@
(exit) (exit)
) )
) )
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(if (not (tblsearch "BLOCK" blockname)) (if (not (tblsearch "BLOCK" blockname))
(progn (progn
(princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek-abgebrochen" (list blockname))) (princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek-abgebrochen" (list blockname)))
@@ -475,6 +477,7 @@
(setq block-obj (vla-InsertBlock modelspace (setq block-obj (vla-InsertBlock modelspace
(vlax-3D-point '(0 0 0)) (vlax-3D-point '(0 0 0))
blockname 1.0 1.0 1.0 0)) blockname 1.0 1.0 1.0 0))
(ssg-ils-block-auf-ebene block-obj blockname)
(if (> (abs hz) 0.0001) (if (> (abs hz) 0.0001)
(vla-TransformBy block-obj (vlax-tmatrix (vla-TransformBy block-obj (vlax-tmatrix
(list (list chv (- shv) 0 0) (list (list chv (- shv) 0 0)
@@ -522,7 +525,7 @@
P-ein xe ye ze P-aus xu-aus yu-aus zu-aus P-ein xe ye ze P-aus xu-aus yu-aus zu-aus
R R-Pein R-Paus tx ty tz T4 R R-Pein R-Paus tx ty tz T4
P-out xu-out yu-out zu-out) P-out xu-out yu-out zu-out)
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(if (not (tblsearch "BLOCK" blockname)) (if (not (tblsearch "BLOCK" blockname))
(progn (progn
(princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek" (list blockname))) (princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek" (list blockname)))
@@ -552,6 +555,7 @@
(setq block-obj (vla-InsertBlock modelspace (setq block-obj (vla-InsertBlock modelspace
(vlax-3D-point '(0 0 0)) (vlax-3D-point '(0 0 0))
blockname 1.0 1.0 1.0 0)) blockname 1.0 1.0 1.0 0))
(ssg-ils-block-auf-ebene block-obj blockname)
;; Normierte Rahmen (P xu yu zu) aus rohen KS-Daten berechnen ;; Normierte Rahmen (P xu yu zu) aus rohen KS-Daten berechnen
(setq f-ein (ks-frame-extract ks-ein-raw) (setq f-ein (ks-frame-extract ks-ein-raw)
f-aus (ks-frame-extract ks-aus-raw)) f-aus (ks-frame-extract ks-aus-raw))
@@ -610,7 +614,7 @@
xe ye ze P-ein P-aus xu-aus yu-aus zu-aus xe ye ze P-ein P-aus xu-aus yu-aus zu-aus
R P-xyref P-zref R-xyref R-zref tx ty tz T4 R P-xyref P-zref R-xyref R-zref tx ty tz T4
R-Paus P-out xu-out yu-out zu-out) R-Paus P-out xu-out yu-out zu-out)
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(if (not (tblsearch "BLOCK" blockname)) (if (not (tblsearch "BLOCK" blockname))
(progn (progn
(princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek" (list blockname))) (princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek" (list blockname)))
@@ -640,6 +644,7 @@
(setq block-obj (vla-InsertBlock modelspace (setq block-obj (vla-InsertBlock modelspace
(vlax-3D-point '(0 0 0)) (vlax-3D-point '(0 0 0))
blockname 1.0 1.0 1.0 0)) blockname 1.0 1.0 1.0 0))
(ssg-ils-block-auf-ebene block-obj blockname)
;; Normierte Rahmen (P xu yu zu) aus rohen KS-Daten berechnen ;; Normierte Rahmen (P xu yu zu) aus rohen KS-Daten berechnen
(setq f-ein (ks-frame-extract ks-ein-raw) (setq f-ein (ks-frame-extract ks-ein-raw)
f-aus (ks-frame-extract ks-aus-raw)) f-aus (ks-frame-extract ks-aus-raw))
@@ -693,7 +698,7 @@
;; ============================================================ ;; ============================================================
;; Masse (KS_EIN->KS_AUS als (dx dy dz)) eines Elements aus dem Block ziehen. ;; 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) (defun vf-element-masse (blockname / temp-obj ks-data ke ka)
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(if (not (tblsearch "BLOCK" blockname)) (if (not (tblsearch "BLOCK" blockname))
nil nil
(progn (progn
@@ -713,7 +718,7 @@
;; oder gerade). Wird genutzt, um KS_EIN so zu drehen, dass KS_AUS entlang hz ;; 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). ;; 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) (defun vf-element-plan-turn (blockname / temp-obj ks-data fe fa)
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(if (not (tblsearch "BLOCK" blockname)) (if (not (tblsearch "BLOCK" blockname))
90.0 90.0
(progn (progn
@@ -734,7 +739,7 @@
;; vx / vy : KS_AUS.origin - KS_EIN.origin (Block-XY) ;; vx / vy : KS_AUS.origin - KS_EIN.origin (Block-XY)
;; Damit laesst sich die KS_AUS-Lage + Achsrichtung analytisch vorausberechnen. ;; Damit laesst sich die KS_AUS-Lage + Achsrichtung analytisch vorausberechnen.
(defun vf-element-ks-info (blockname / temp-obj ks-data fe fa) (defun vf-element-ks-info (blockname / temp-obj ks-data fe fa)
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(if (not (tblsearch "BLOCK" blockname)) (if (not (tblsearch "BLOCK" blockname))
nil nil
(progn (progn
@@ -780,7 +785,7 @@
startpunkt startpunkt
) )
(progn (progn
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(if (not (tblsearch "BLOCK" blockname)) (if (not (tblsearch "BLOCK" blockname))
(progn (progn
(princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek-abgebrochen" (list blockname))) (princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek-abgebrochen" (list blockname)))
@@ -796,6 +801,7 @@
(setq block-obj (vla-InsertBlock modelspace (setq block-obj (vla-InsertBlock modelspace
(vlax-3D-point '(0 0 0)) (vlax-3D-point '(0 0 0))
blockname scale 1.0 1.0 0)) blockname scale 1.0 1.0 0))
(ssg-ils-block-auf-ebene block-obj blockname)
(setq matrix (list (setq matrix (list
(list (* chv cvv) (- shv) (* chv svv) 0) (list (* chv cvv) (- shv) (* chv svv) 0)
(list (* shv cvv) chv (* shv svv) 0) (list (* shv cvv) chv (* shv svv) 0)
@@ -843,7 +849,7 @@
startpunkt startpunkt
) )
(progn (progn
(ensure-block-loaded blockname) (setq blockname (ensure-block-loaded blockname))
(if (not (tblsearch "BLOCK" blockname)) (if (not (tblsearch "BLOCK" blockname))
(progn (progn
(princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek-abgebrochen" (list blockname))) (princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek-abgebrochen" (list blockname)))
@@ -887,6 +893,7 @@
(setq block-obj (vla-InsertBlock modelspace (setq block-obj (vla-InsertBlock modelspace
(vlax-3D-point '(0 0 0)) (vlax-3D-point '(0 0 0))
blockname 1.0 1.0 1.0 0)) blockname 1.0 1.0 1.0 0))
(ssg-ils-block-auf-ebene block-obj blockname)
(setq matrix (list (setq matrix (list
(list (* chv cvv) (- shv) (* chv svv) 0) (list (* chv cvv) (- shv) (* chv svv) 0)
(list (* shv cvv) chv (* shv svv) 0) (list (* shv cvv) chv (* shv svv) 0)