[ADD] Layerdefinitionen und Farben durch layer.cfg für zusammengesetzte Blöcke wie Gefällestrecke oder Varioförderer werden beim Zusammenbau der Baugruppen in den Skripten verwendet; Ebenfalls als Fallback für Blöcke möglich, die kein Attribut LAYER besitzen.
This commit is contained in:
@@ -249,6 +249,9 @@
|
||||
(setq block-obj
|
||||
(vla-InsertBlock modelspace (vlax-3D-point '(0 0 0))
|
||||
blockname scale 1.0 1.0 0))
|
||||
;; Einzelteil auf die eigene Ebene der Blockdefinition legen - wie in den
|
||||
;; Zwillingen in ssg_ks_insert.lsp; hier fehlte der Aufruf bisher.
|
||||
(ssg-ils-block-auf-ebene block-obj blockname)
|
||||
(vla-TransformBy block-obj (vlax-tmatrix (ssg-rot-matrix-zy chz shz cv sv)))
|
||||
(vla-Move block-obj (vlax-3D-point '(0 0 0)) (vlax-3D-point pt))
|
||||
(setq endpunkt
|
||||
@@ -276,6 +279,9 @@
|
||||
(setq block-obj
|
||||
(vla-InsertBlock modelspace (vlax-3D-point '(0 0 0))
|
||||
blockname 1.0 1.0 1.0 0))
|
||||
;; Einzelteil auf die eigene Ebene der Blockdefinition legen - wie in den
|
||||
;; Zwillingen in ssg_ks_insert.lsp; hier fehlte der Aufruf bisher.
|
||||
(ssg-ils-block-auf-ebene block-obj blockname)
|
||||
(vla-TransformBy block-obj (vlax-tmatrix (ssg-rot-matrix-zy chz shz cv sv)))
|
||||
(vla-Move block-obj (vlax-3D-point '(0 0 0)) (vlax-3D-point pt))
|
||||
(setq endpunkt
|
||||
@@ -317,6 +323,9 @@
|
||||
(setq block-obj
|
||||
(vla-InsertBlock modelspace (vlax-3D-point '(0 0 0))
|
||||
blockname 1.0 1.0 1.0 0))
|
||||
;; Einzelteil auf die eigene Ebene der Blockdefinition legen - wie in den
|
||||
;; Zwillingen in ssg_ks_insert.lsp; hier fehlte der Aufruf bisher.
|
||||
(ssg-ils-block-auf-ebene block-obj blockname)
|
||||
(vla-TransformBy block-obj (vlax-tmatrix
|
||||
(list (list chz (- shz) 0 0)
|
||||
(list shz chz 0 0)
|
||||
@@ -1098,7 +1107,7 @@
|
||||
;; Beschriftung: Mitte der ersten Geraden, 400mm senkrecht rechts versetzt.
|
||||
(defun gf-make-label (gf-nummer hoehe-von hoehe-bis deltaH deltaL
|
||||
L-gf-str winkel nach-aus-pt entry-hz L-first-seg /
|
||||
label-txt label-pt chz-l shz-l halb basis-winkel)
|
||||
label-txt label-pt chz-l shz-l halb basis-winkel lay)
|
||||
(setq chz-l (cos (* entry-hz (/ pi 180.0))))
|
||||
(setq shz-l (sin (* entry-hz (/ pi 180.0))))
|
||||
(setq halb (/ (float L-first-seg) 2.0))
|
||||
@@ -1121,6 +1130,16 @@
|
||||
(while (>= basis-winkel 360.0) (setq basis-winkel (- basis-winkel 360.0)))
|
||||
(if (>= basis-winkel 180.0) (setq basis-winkel (- basis-winkel 180.0)))
|
||||
(setq basis-winkel (if (or (< basis-winkel 45.0) (>= basis-winkel 135.0)) 0.0 90.0))
|
||||
;; Beschriftungs-Layer aus cfg/layer.cfg (Baugruppe "gf_beschriftung"), sonst
|
||||
;; der bisherige Hartwert. Der Layer wird hier ANGELEGT - bisher schrieb das
|
||||
;; entmake unten auf einen Layer, den niemand erzeugt hat.
|
||||
(setq lay (ssg-layer-anlegen "gf_beschriftung" nil))
|
||||
(if (null lay)
|
||||
(progn
|
||||
(setq lay "GF_Beschriftung")
|
||||
(ssg-make-layer lay "7" nil)
|
||||
)
|
||||
)
|
||||
(entmake
|
||||
(list '(0 . "TEXT")
|
||||
(cons 10 label-pt)
|
||||
@@ -1128,7 +1147,7 @@
|
||||
'(40 . 100.0)
|
||||
(cons 1 label-txt)
|
||||
'(7 . "Standard")
|
||||
'(8 . "GF_Beschriftung")
|
||||
(cons 8 lay)
|
||||
(cons 50 (* basis-winkel (/ pi 180.0)))
|
||||
'(72 . 1)
|
||||
'(73 . 2)))
|
||||
@@ -1196,6 +1215,9 @@
|
||||
;; Attribute auf das eingefuegte INSERT-Objekt setzen (volle Werteliste;
|
||||
;; nicht vorhandene Tags ignoriert ssg-attrib-set-on -> reduzierter Satz ok).
|
||||
(setq gf-insert (entlast))
|
||||
;; Ziel-Layer der Baugruppe aus cfg/layer.cfg (ohne Eintrag bleibt die
|
||||
;; Referenz auf dem aktuellen Layer, wie vor der Umstellung).
|
||||
(ssg-layer-setzen gf-insert "gefaellestrecke")
|
||||
;; Kette wurde bei Z=0 gebaut; der OSMODE=0-Wrap loest den OCS-Skew der
|
||||
;; gekippten Elemente sauber zur logischen Position (Z=0) auf. Den fertigen
|
||||
;; GF_n-Block daher nur noch senkrecht auf die Zielhoehe heben (OSMODE=0,
|
||||
|
||||
+31
-8
@@ -194,7 +194,7 @@
|
||||
)
|
||||
|
||||
;; Beschriftungstext erzeugen
|
||||
(defun kreisel-make-label (nummer abstand kreiselart / textStr insertPoint radius mitteX mitteY textHoehe)
|
||||
(defun kreisel-make-label (nummer abstand kreiselart / textStr insertPoint radius mitteX mitteY textHoehe lay)
|
||||
;; Text: "KREISEL 1: PIN_4000"
|
||||
(setq textStr (strcat "KREISEL " (itoa nummer) ": " kreiselart "_" (rtos abstand 2 0)))
|
||||
|
||||
@@ -216,13 +216,20 @@
|
||||
;; Schriftart Arial einstellen
|
||||
(kreisel-setup-textstyle)
|
||||
|
||||
;; Layer erstellen
|
||||
(ssg-make-layer *kreisel-beschriftung-layer* (itoa *kreisel-beschriftung-farbe*) T)
|
||||
|
||||
;; Layer erstellen: bevorzugt aus cfg/layer.cfg (Baugruppe
|
||||
;; "kreisel_beschriftung"), sonst der bisherige Hartwert.
|
||||
(setq lay (ssg-layer-anlegen "kreisel_beschriftung" T))
|
||||
(if (null lay)
|
||||
(progn
|
||||
(setq lay *kreisel-beschriftung-layer*)
|
||||
(ssg-make-layer lay (itoa *kreisel-beschriftung-farbe*) T)
|
||||
)
|
||||
)
|
||||
|
||||
;; Text mit entmake erstellen (zentriert)
|
||||
(entmake (list
|
||||
'(0 . "TEXT")
|
||||
(cons 8 *kreisel-beschriftung-layer*)
|
||||
(cons 8 lay)
|
||||
(cons 10 insertPoint)
|
||||
(cons 40 textHoehe)
|
||||
(cons 1 textStr)
|
||||
@@ -423,8 +430,11 @@
|
||||
;; SP8 Kreis (Spannstation) bei (radius+abstand, 0) - Dim-Suffix im Dateinamen
|
||||
(command "_.INSERT" (strcat *block-path* "SP8_" *ki-dxfm-dim* ".dwg") (list (+ radius abstand) 0.0 0.0) 1 1 0)
|
||||
|
||||
;; Tangenten auf Layer S_LP
|
||||
(ssg-make-layer "S_LP" "7" T)
|
||||
;; Tangenten-Layer: bevorzugt aus cfg/layer.cfg (Baugruppe
|
||||
;; "kreisel_tangente"), sonst der bisherige Hartwert S_LP.
|
||||
(if (null (ssg-layer-anlegen "kreisel_tangente" T))
|
||||
(ssg-make-layer "S_LP" "7" T)
|
||||
)
|
||||
(if is-pin
|
||||
(setvar "CECOLOR" (itoa (ssg-cfg-or "kreisel" "color_linie_1" 5)))
|
||||
(setvar "CECOLOR" (itoa (ssg-cfg-or "kreisel" "color_linie_2" 1)))
|
||||
@@ -438,7 +448,11 @@
|
||||
;; PIN-Linien
|
||||
(if is-pin
|
||||
(progn
|
||||
(ssg-make-layer "pinbereich" (itoa (ssg-cfg-or "kreisel" "color_pin" 3)) T)
|
||||
;; PIN-Layer: bevorzugt aus cfg/layer.cfg (Baugruppe
|
||||
;; "kreisel_pinbereich"), sonst der bisherige Hartwert pinbereich.
|
||||
(if (null (ssg-layer-anlegen "kreisel_pinbereich" T))
|
||||
(ssg-make-layer "pinbereich" (itoa (ssg-cfg-or "kreisel" "color_pin" 3)) T)
|
||||
)
|
||||
(setvar "CECOLOR" (itoa (ssg-cfg-or "kreisel" "color_pin" 3)))
|
||||
|
||||
;; Obere PIN-Linie
|
||||
@@ -489,6 +503,12 @@
|
||||
|
||||
;; --- Attribut-Werte durch direkte Datenbankänderung setzen ---
|
||||
(setq block-ent (entlast))
|
||||
;; Ziel-Layer der Baugruppe aus cfg/layer.cfg. Wichtig: der Wrapper hing
|
||||
;; bisher am CLAYER-Seiteneffekt von ssg-make-layer (S_LP bzw. pinbereich)
|
||||
;; und landete bei bereits vorhandener Blockdefinition auf dem aktiven Layer -
|
||||
;; jetzt ist er in beiden Faellen gleich. Ohne cfg-Eintrag bleibt es beim
|
||||
;; bisherigen Verhalten.
|
||||
(ssg-layer-setzen block-ent (if is-pin "kreisel_pin" "kreisel"))
|
||||
(setq att-entity (entnext block-ent))
|
||||
|
||||
(while att-entity
|
||||
@@ -1269,6 +1289,9 @@
|
||||
|
||||
;; Attribut-Werte durch direkte Datenbankaenderung setzen
|
||||
(setq block-ent (entlast))
|
||||
;; Ziel-Layer der Baugruppe aus cfg/layer.cfg (der Eckrad-Zweig setzte bisher
|
||||
;; gar keinen Layer, das ECKRAD_n landete also immer auf Layer "0").
|
||||
(ssg-layer-setzen block-ent "eckrad")
|
||||
(setq att-entity (entnext block-ent))
|
||||
(dbgp "Setze Attribut-Werte:")
|
||||
(while att-entity
|
||||
|
||||
@@ -618,6 +618,11 @@
|
||||
)
|
||||
(ssg-attrib-set-on blockEnt attribs)
|
||||
|
||||
;; Layer aus dem LAYER-Attribut setzen - dieselbe Vorgabe-Konvention wie in
|
||||
;; omni:insert-dxf und c:OMNI_EDIT. Die Quell-Attribute (srcAttribs) tragen
|
||||
;; den Layer bereits, er wurde hier bisher nur nicht angewendet.
|
||||
(ssg-block-layer-vorgabe blockEnt bname attribs)
|
||||
|
||||
;; 4. Text oberhalb der Linie positionieren, um Linienwinkel drehen,
|
||||
;; Inhalt mit Laenge ergaenzen
|
||||
(setq perpX (* (- (sin angle)) textGap)
|
||||
@@ -1020,16 +1025,9 @@
|
||||
(list (cons "HOEHE" (if hoehe hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000")))
|
||||
(cons "DREHUNG" drehung-anzeige)))
|
||||
|
||||
;; Layer aus LAYER-Attribut lesen und Block verschieben
|
||||
;; Layer aus der Block-Vorgabe (LAYER-Attribut) setzen
|
||||
(setq attribs (ssg-attrib-read blockEnt))
|
||||
(setq layer-name (cdr (assoc "LAYER" attribs)))
|
||||
(if (and layer-name (> (strlen layer-name) 0))
|
||||
(progn
|
||||
(ssg-make-layer layer-name 7 nil)
|
||||
(entmod (subst (cons 8 layer-name) (assoc 8 (entget blockEnt)) (entget blockEnt)))
|
||||
(entupd blockEnt)
|
||||
)
|
||||
)
|
||||
(setq layer-name (ssg-block-layer-vorgabe blockEnt sivasnr-str attribs))
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1378,16 +1376,9 @@
|
||||
(list (cons "HOEHE" (if new-hoehe new-hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000")))
|
||||
(cons "DREHUNG" (if new-drehung new-drehung (ssg-cfg-or "omniflo" "default_drehung" "0")))))
|
||||
|
||||
;; Layer aus LAYER-Attribut lesen und Block verschieben (wie omni:insert-dxf)
|
||||
;; Layer aus der Block-Vorgabe (LAYER-Attribut) setzen (wie omni:insert-dxf)
|
||||
(setq attribs (ssg-attrib-read blockEnt))
|
||||
(setq layer-name (cdr (assoc "LAYER" attribs)))
|
||||
(if (and layer-name (> (strlen layer-name) 0))
|
||||
(progn
|
||||
(ssg-make-layer layer-name 7 nil)
|
||||
(entmod (subst (cons 8 layer-name) (assoc 8 (entget blockEnt)) (entget blockEnt)))
|
||||
(entupd blockEnt)
|
||||
)
|
||||
)
|
||||
(setq layer-name (ssg-block-layer-vorgabe blockEnt sivasnr-str attribs))
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -80,6 +80,34 @@ Grundfunktionen für Umgebungssicherung, Benutzerinteraktion, Layer, Blöcke, At
|
||||
| `ssg-ss-redraw ss modus` | Auswahlsatz hervorheben (3), invertieren (4) oder normal (0) |
|
||||
| `ssg-ss-add src dest` | Auswahlsatz `src` zu `dest` hinzufügen (in-place, mit Highlight) |
|
||||
|
||||
**Ziel-Layer je Baugruppe (`cfg/layer.cfg`):**
|
||||
|
||||
Für Baugruppen, die ein Makro aus Einzelteilen **zusammenbaut** (`KREISEL_n`,
|
||||
`ECKRAD_n`, `VF_n`, `GF_n`) und für die selbst gezeichnete Hilfsgeometrie
|
||||
(Kreisel-Tangenten, PIN-Linien, Beschriftungstexte) gibt es keine Blockdatei in
|
||||
`data/` und damit kein `LAYER`-Attribut – ihr Ziel-Layer und die Layerfarbe
|
||||
kommen aus `cfg/layer.cfg`. Nur **eingefügte** Blöcke nehmen dagegen ihr
|
||||
`LAYER`-Attribut als Vorgabe. Alle Funktionen liefern `nil`, wenn nichts
|
||||
konfiguriert ist; der Layer bleibt dann unangetastet (kein Fehler bei fehlender
|
||||
`cfg/layer.cfg`).
|
||||
|
||||
| Funktion | Beschreibung |
|
||||
| --- | --- |
|
||||
| `ssg-layer-cfg-load` | `cfg/layer.cfg` einmalig (lazy) einlesen, Rückgabe ini-Alist oder `nil` |
|
||||
| `ssg-layer-cfg-reset` | Ladezustand verwerfen (cfg in laufender Sitzung neu einlesen, Tests) |
|
||||
| `ssg-layer-cfg-eintrag ini sektion key` | Reine Aufl./Zerlegung `"Layername, Farbe"` → `(layer . farbe)`; Farbe fehlt → `"7"` |
|
||||
| `ssg-layer-eintrag key` | Ziel-Layer einer Baugruppe: `[ils_<Dimension>]` → `[allgemein]` → `nil` |
|
||||
| `ssg-layer-anlegen key aktiv` | Layer der Baugruppe mit cfg-Farbe anlegen, optional aktivieren; Rückgabe Layername |
|
||||
| `ssg-layer-setzen ent key` | Blockreferenz auf den Ziel-Layer ihrer Baugruppe legen (Layer wird angelegt) |
|
||||
| `ssg-layer-farbe-fuer-name name` | Farbe zu einem **Layernamen** (Abschnitt `[farben]`, sonst passender Baugruppen-Wert, sonst `"7"`) |
|
||||
| `ssg-block-layer-vorgabe ent blockname attribs` | Layer einer nur eingefügten Referenz aus der Block-Vorgabe: `LAYER`-Attribut → `ssg-ils-block-ebene` → nichts |
|
||||
|
||||
Die **Farbe** greift nur bei der Neuanlage eines Layers – `ssg-make-layer` lässt
|
||||
bestehende Layer unverändert. Layer, die eine Blockdatei aus `data/ils` selbst
|
||||
mitbringt (z. B. `ILS_SP`), legt BricsCAD bereits beim Einfügen des Blocks mit
|
||||
der Farbe *aus der DWG* an; dort wirkt die cfg-Farbe nicht, der Layername des
|
||||
Wrappers aber schon.
|
||||
|
||||
**Block-Operationen:**
|
||||
|
||||
| Funktion | Beschreibung |
|
||||
|
||||
+22
-20
@@ -17,25 +17,14 @@
|
||||
(if (null *ils-btmt-beladung-block*) (setq *ils-btmt-beladung-block* "BTMT-Beladung"))
|
||||
(if (null *ils-btmt-entladung-block*) (setq *ils-btmt-entladung-block* "SC_Entladung"))
|
||||
|
||||
;; Layer einer frisch eingefuegten Blockreferenz setzen: bevorzugt aus dem
|
||||
;; LAYER-Attribut des Blocks (gleiche Konvention wie omni:insert-dxf in
|
||||
;; OmniModulInsert.lsp und tefl-insert-element in TEFInsert.lsp), sonst aus der
|
||||
;; "eigenen" Ebene der Blockdefinition (ssg-ils-block-ebene). Liefert der Block
|
||||
;; beides nicht, bleibt die Referenz auf dem aktuellen Layer.
|
||||
;; Layer einer frisch eingefuegten Blockreferenz aus der Block-Vorgabe setzen.
|
||||
;; Die Logik liegt zentral als ssg-block-layer-vorgabe in ssg_core.lsp (dieselbe
|
||||
;; Konvention nutzen omni:insert-dxf in OmniModulInsert.lsp und
|
||||
;; tefl-insert-element in TEFInsert.lsp); hier bleibt nur der bisherige Name als
|
||||
;; duenner Wrapper stehen.
|
||||
;; Rueckgabe: gesetzter Layername oder nil.
|
||||
(defun ils-block-layer-setzen (ent realname attribs / lay)
|
||||
(setq lay (cdr (assoc "LAYER" attribs)))
|
||||
(if (or (null lay) (= lay ""))
|
||||
(setq lay (ssg-ils-block-ebene realname))
|
||||
)
|
||||
(if (and lay (/= lay ""))
|
||||
(progn
|
||||
(ssg-make-layer lay 7 nil)
|
||||
(entmod (subst (cons 8 lay) (assoc 8 (entget ent)) (entget ent)))
|
||||
(entupd ent)
|
||||
lay
|
||||
)
|
||||
)
|
||||
(defun ils-block-layer-setzen (ent realname attribs)
|
||||
(ssg-block-layer-vorgabe ent realname attribs)
|
||||
)
|
||||
|
||||
;; Fuegt eine ILS-Station (BTMT-Beladung/SC_Entladung) wiederholt ein, bis der
|
||||
@@ -125,7 +114,7 @@
|
||||
|
||||
;; Fuegt einen Sensor-Block wiederholt ein, bis der Benutzer mit
|
||||
;; ENTER oder ESC abbricht. Rotation je Einfuegung interaktiv.
|
||||
(defun ils-insert-sensor (fname / pfad pt oldattreq n res)
|
||||
(defun ils-insert-sensor (fname / pfad pt oldattreq n res ent realname)
|
||||
(setq pfad (ils-sensor-pfad fname))
|
||||
(if (null pfad)
|
||||
(princ (strcat "\n>>> FEHLER: Blockdatei '" fname ".dwg' nicht gefunden."
|
||||
@@ -145,6 +134,19 @@
|
||||
)
|
||||
(setq pt res)
|
||||
(command "_.INSERT" pfad pt "" "" pause)
|
||||
(setq ent (entlast))
|
||||
;; Layer aus der Block-Vorgabe setzen (LAYER-Attribut, sonst eigene
|
||||
;; Ebene der Blockdefinition) - wie bei ils-insert-station. Scanner und
|
||||
;; Separator_SP fuehren das LAYER-Attribut (ZZ_Scanner bzw. ILS_SEP-SP),
|
||||
;; es wurde hier bisher nur nicht ausgewertet.
|
||||
;; Blockname aus der Referenz selbst lesen: eingefuegt wird ueber den
|
||||
;; Dateipfad, der effektive Blockname haengt am 2D/3D-Fallback.
|
||||
(if (and ent (= (cdr (assoc 0 (entget ent))) "INSERT"))
|
||||
(progn
|
||||
(setq realname (cdr (assoc 2 (entget ent))))
|
||||
(ssg-block-layer-vorgabe ent realname nil)
|
||||
)
|
||||
)
|
||||
;; Sofort beim Einfuegen eine eindeutige ID vergeben - wie bei allen
|
||||
;; anderen Bau-Routinen (Kreisel/GF/VF/Omniflo, siehe ssg-id-generate-
|
||||
;; Aufrufe dort). Separator/Scanner waren bisher die einzige Ausnahme
|
||||
@@ -153,7 +155,7 @@
|
||||
;; das ist der Fall, den ssg-id-check-all als Sicherheitsnetz
|
||||
;; eigentlich nur fuer Kopier-/Array-/Spiegel-Faelle abfangen soll.
|
||||
(if (atoms-family 1 '("ssg-id-generate"))
|
||||
(ssg-id-generate (entlast)))
|
||||
(ssg-id-generate ent))
|
||||
(setq n (1+ n))
|
||||
)
|
||||
(setvar "ATTREQ" oldattreq)
|
||||
|
||||
+2
-9
@@ -98,17 +98,10 @@
|
||||
(vla-TransformBy block-obj (vlax-tmatrix matrix))
|
||||
(vla-Move block-obj (vlax-3D-point '(0.0 0.0 0.0)) (vlax-3D-point pt))
|
||||
|
||||
;; LAYER-Attribut auslesen und Block auf diesen Layer verschieben
|
||||
;; Layer aus der Block-Vorgabe (LAYER-Attribut) setzen
|
||||
(setq blockEnt (vlax-vla-object->ename block-obj))
|
||||
(setq attribs (ssg-attrib-read blockEnt))
|
||||
(setq layer-name (cdr (assoc "LAYER" attribs)))
|
||||
(if (and layer-name (> (strlen layer-name) 0))
|
||||
(progn
|
||||
(ssg-make-layer layer-name 7 nil)
|
||||
(entmod (subst (cons 8 layer-name) (assoc 8 (entget blockEnt)) (entget blockEnt)))
|
||||
(entupd blockEnt)
|
||||
)
|
||||
)
|
||||
(setq layer-name (ssg-block-layer-vorgabe blockEnt *tefl-blockname* attribs))
|
||||
|
||||
;; Eindeutige ID zuweisen, falls das Block-Schema ein ID-Attribut fuehrt
|
||||
;; (bei 0_B10030 aktuell nicht der Fall - dann folgenlos, wie in
|
||||
|
||||
+197
-1
@@ -268,6 +268,200 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; ZIEL-LAYER JE BAUGRUPPE (cfg/layer.cfg)
|
||||
;; ------------------------------------------------------------
|
||||
;; Fuer die Baugruppen, die die Makros aus Einzelteilen ZUSAMMENBAUEN
|
||||
;; (KREISEL_n, ECKRAD_n, VF_n, GF_n) und fuer die selbst gezeichnete
|
||||
;; Hilfsgeometrie (Tangenten, PIN-Linien, Beschriftungstexte) gibt es keine
|
||||
;; Blockdatei in data/ und damit auch kein LAYER-Attribut - ihr Ziel-Layer
|
||||
;; kommt aus cfg/layer.cfg. Bloecke, die nur EINGEFUEGT werden, nehmen
|
||||
;; weiterhin ihr LAYER-Attribut (siehe ssg-block-layer-vorgabe unten).
|
||||
;;
|
||||
;; Bewusst hier in ssg_core.lsp und nicht in ssg_layer.lsp: jedes
|
||||
;; Feature-Modul bootstrappt ssg_core selbst (KreiselInsert, Gefaellestrecke,
|
||||
;; vf_core), ssg_layer aber nicht - dort waeren die Funktionen beim isolierten
|
||||
;; Laden eines einzelnen Moduls nicht verfuegbar. ssg-make-layer und
|
||||
;; ssg-insert-block liegen aus demselben Grund schon in dieser Datei.
|
||||
;;
|
||||
;; Alle Funktionen sind gutmuetig: fehlt die Datei, der Abschnitt, der Key oder
|
||||
;; ist der Wert leer, liefern sie nil und der Aufrufer laesst den Layer
|
||||
;; unangetastet - genau das Verhalten von vor der Umstellung.
|
||||
|
||||
(if (not (boundp '*ssg-layer-cfg*)) (setq *ssg-layer-cfg* nil))
|
||||
(if (not (boundp '*ssg-layer-cfg-versucht*)) (setq *ssg-layer-cfg-versucht* nil))
|
||||
|
||||
;; cfg/layer.cfg einmalig laden (lazy, beim ersten Zugriff).
|
||||
;; Ein fehlgeschlagener Ladeversuch wird gemerkt, damit nicht bei jeder
|
||||
;; Einfuegung erneut auf die Platte zugegriffen wird.
|
||||
;; Rueckgabe: ini-Alist oder nil.
|
||||
(defun ssg-layer-cfg-load ( / cfg-dir pfad)
|
||||
(if (not *ssg-layer-cfg-versucht*)
|
||||
(progn
|
||||
(setq *ssg-layer-cfg-versucht* T)
|
||||
(setq cfg-dir (getenv "DXFM_CFG"))
|
||||
(if cfg-dir
|
||||
(progn
|
||||
(setq pfad (strcat (vl-string-right-trim "/\\"
|
||||
(vl-string-translate "\\" "/" cfg-dir))
|
||||
"/layer.cfg"))
|
||||
(setq *ssg-layer-cfg* (ssg-load-ini pfad))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
*ssg-layer-cfg*
|
||||
)
|
||||
|
||||
;; Ladezustand zuruecksetzen (erzwingt Neu-Einlesen beim naechsten Zugriff).
|
||||
;; Fuer Tests und fuer das Bearbeiten der cfg in laufender BricsCAD-Sitzung.
|
||||
(defun ssg-layer-cfg-reset ( / )
|
||||
(setq *ssg-layer-cfg* nil
|
||||
*ssg-layer-cfg-versucht* nil)
|
||||
(princ)
|
||||
)
|
||||
|
||||
;; Einen Eintrag "Layername, Farbe" aus den ini-Daten aufloesen.
|
||||
;; Reine Funktion (ini-Daten als Parameter) - damit ohne Datei-IO testbar.
|
||||
;; Rueckgabe: (layername . farbe-als-string) oder nil, wenn Key/Wert fehlt.
|
||||
;; Der Layername endet am ERSTEN Komma (Layernamen enthalten kein Komma);
|
||||
;; fehlt die Farbangabe, wird "7" verwendet.
|
||||
(defun ssg-layer-cfg-eintrag (ini-data sektion schluessel / roh pos lay farbe)
|
||||
(setq roh (ssg-ini-get ini-data sektion schluessel nil))
|
||||
(if (and roh (= (type roh) 'STR))
|
||||
(progn
|
||||
(setq pos (vl-string-search "," roh))
|
||||
(if pos
|
||||
(setq lay (vl-string-trim " \t" (substr roh 1 pos))
|
||||
farbe (vl-string-trim " \t" (substr roh (+ pos 2)))
|
||||
)
|
||||
(setq lay (vl-string-trim " \t" roh)
|
||||
farbe ""
|
||||
)
|
||||
)
|
||||
(if (> (strlen lay) 0)
|
||||
(cons lay (if (> (strlen farbe) 0) farbe "7"))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; Ziel-Layer einer Baugruppe ermitteln.
|
||||
;; schluessel = Baugruppen-Key aus cfg/layer.cfg, z.B. "variofoerderer"
|
||||
;; Suchreihenfolge: [ils_<aktuelle Dimension>] -> [allgemein]
|
||||
;; Rueckgabe: (layername . farbe) oder nil.
|
||||
(defun ssg-layer-eintrag (schluessel / ini dim)
|
||||
(setq ini (ssg-layer-cfg-load))
|
||||
(if ini
|
||||
(progn
|
||||
(setq dim (strcase (ssg-ils-dim-aktuell) T)) ; "2d"/"3d"
|
||||
(cond
|
||||
((ssg-layer-cfg-eintrag ini (strcat "ils_" dim) schluessel))
|
||||
((ssg-layer-cfg-eintrag ini "allgemein" schluessel))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; Konfigurierte Farbe zu einem LAYERNAMEN (nicht zu einer Baugruppe) suchen.
|
||||
;; Gebraucht fuer Layer, die aus dem LAYER-Attribut eines Blocks bzw. aus der
|
||||
;; Blockdefinition kommen und daher keinen Baugruppen-Key haben: sie werden oft
|
||||
;; VOR dem Wrapper angelegt, und ssg-make-layer setzt die Farbe nur bei der
|
||||
;; Neuanlage - ohne diese Suche wuerde die Farbe aus cfg/layer.cfg nie greifen.
|
||||
;; Suchreihenfolge:
|
||||
;; 1. Abschnitt [farben]: Key = Layername, Wert = Farbe
|
||||
;; 2. alle uebrigen Abschnitte: Eintrag, dessen LAYERNAME passt
|
||||
;; (Layernamen sind in AutoCAD/BricsCAD case-insensitiv)
|
||||
;; 3. "7" als Grund-Default (bisheriges Verhalten)
|
||||
;; Rueckgabe: Farbnummer als String, nie nil.
|
||||
(defun ssg-layer-farbe-fuer-name (layname / ini treffer gesucht sek eintrag)
|
||||
(setq ini (ssg-layer-cfg-load))
|
||||
(if (or (null ini) (null layname) (= layname ""))
|
||||
"7"
|
||||
(progn
|
||||
(setq treffer (ssg-ini-get ini "farben" layname nil))
|
||||
(if (and treffer (> (strlen treffer) 0))
|
||||
(vl-string-trim " \t" treffer)
|
||||
(progn
|
||||
(setq gesucht (strcase layname))
|
||||
(foreach sek ini
|
||||
(if (and (null treffer) (/= (car sek) "farben"))
|
||||
(foreach eintrag (cdr sek)
|
||||
(if (null treffer)
|
||||
(progn
|
||||
;; Wert des Eintrags wieder in (layer . farbe) zerlegen
|
||||
(setq eintrag (ssg-layer-cfg-eintrag
|
||||
ini (car sek) (car eintrag)))
|
||||
(if (and eintrag (= (strcase (car eintrag)) gesucht))
|
||||
(setq treffer (cdr eintrag))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(if treffer treffer "7")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; Ziel-Layer einer Baugruppe anlegen (Farbe aus der cfg) und optional
|
||||
;; aktivieren. aktiv = T setzt CLAYER auf den Layer.
|
||||
;; Rueckgabe: Layername oder nil, wenn die Baugruppe nicht konfiguriert ist.
|
||||
(defun ssg-layer-anlegen (schluessel aktiv / eintrag)
|
||||
(if (setq eintrag (ssg-layer-eintrag schluessel))
|
||||
(progn
|
||||
(ssg-make-layer (car eintrag) (cdr eintrag) aktiv)
|
||||
(car eintrag)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; Objekt (in der Regel eine frisch eingefuegte Blockreferenz) auf den
|
||||
;; Ziel-Layer seiner Baugruppe legen; der Layer wird bei Bedarf angelegt.
|
||||
;; Rueckgabe: Layername oder nil, wenn die Baugruppe nicht konfiguriert ist
|
||||
;; (dann bleibt das Objekt unveraendert auf seinem bisherigen Layer).
|
||||
(defun ssg-layer-setzen (ent schluessel / lay ed)
|
||||
(if (and ent (setq lay (ssg-layer-anlegen schluessel nil)))
|
||||
(progn
|
||||
(setq ed (entget ent))
|
||||
(entmod (subst (cons 8 lay) (assoc 8 ed) ed))
|
||||
(entupd ent)
|
||||
lay
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; Layer einer nur EINGEFUEGTEN Blockreferenz aus der Block-Vorgabe setzen:
|
||||
;; bevorzugt aus dem LAYER-Attribut des Blocks, sonst aus der "eigenen" Ebene
|
||||
;; der Blockdefinition (ssg-ils-block-ebene). Traegt der Block beides nicht,
|
||||
;; bleibt die Referenz auf ihrem bisherigen Layer.
|
||||
;; ent = Blockreferenz
|
||||
;; realname = effektiver Blockname (fuer die Ebenen-Ermittlung)
|
||||
;; attribs = Attribut-Alist (ssg-attrib-read), nil = wird selbst gelesen
|
||||
;; Rueckgabe: gesetzter Layername oder nil.
|
||||
(defun ssg-block-layer-vorgabe (ent realname attribs / lay ed)
|
||||
(if (and ent (null attribs))
|
||||
(setq attribs (ssg-attrib-read ent))
|
||||
)
|
||||
(setq lay (cdr (assoc "LAYER" attribs)))
|
||||
(if (or (null lay) (= lay ""))
|
||||
(setq lay (ssg-ils-block-ebene realname))
|
||||
)
|
||||
(if (and ent lay (/= lay ""))
|
||||
(progn
|
||||
;; Farbe aus cfg/layer.cfg, falls der Layername dort vorkommt (sonst "7").
|
||||
(ssg-make-layer lay (ssg-layer-farbe-fuer-name lay) nil)
|
||||
(setq ed (entget ent))
|
||||
(entmod (subst (cons 8 lay) (assoc 8 ed) ed))
|
||||
(entupd ent)
|
||||
lay
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; Auswahlsatz-Iteration: Funktion fuer jedes Element aufrufen
|
||||
;; ss = Auswahlsatz; func = Funktion mit einem Parameter (entity-name)
|
||||
(defun ssg-ss-foreach (ss func / i ename)
|
||||
@@ -567,7 +761,9 @@
|
||||
(setq eb (ssg-ils-block-ebene realname))
|
||||
(if (and eb obj)
|
||||
(progn
|
||||
(if (not (tblsearch "LAYER" eb)) (ssg-make-layer eb 7 nil))
|
||||
;; Farbe aus cfg/layer.cfg, falls der Layername dort vorkommt (sonst "7").
|
||||
(if (not (tblsearch "LAYER" eb))
|
||||
(ssg-make-layer eb (ssg-layer-farbe-fuer-name eb) nil))
|
||||
(vl-catch-all-apply (function (lambda () (vla-put-Layer obj eb))))))
|
||||
obj)
|
||||
|
||||
|
||||
+15
-2
@@ -770,7 +770,7 @@
|
||||
(defun vf-make-label (vf-nummer hoehe-von hoehe-bis deltaH deltaL L_VF L_GF1 L_GF2
|
||||
richtung best-winkel n-separator n-scanner startpunkt hz /
|
||||
label-txt label-pt L_VF_str L_GF_str delta-sym
|
||||
chz-l shz-l halb basis-winkel)
|
||||
chz-l shz-l halb basis-winkel lay)
|
||||
(setq delta-sym (chr 916))
|
||||
(setq L_VF_str (vl-string-subst "," "." (rtos (/ L_VF 1000.0) 2 3)))
|
||||
(setq L_GF_str (strcat (rtos (/ L_GF1 1000.0) 2 3) "," (rtos (/ L_GF2 1000.0) 2 3)))
|
||||
@@ -795,9 +795,19 @@
|
||||
(while (>= basis-winkel 360.0) (setq basis-winkel (- basis-winkel 360.0)))
|
||||
(if (>= basis-winkel 180.0) (setq basis-winkel (- basis-winkel 180.0)))
|
||||
(setq basis-winkel (if (or (< basis-winkel 45.0) (>= basis-winkel 135.0)) 0.0 90.0))
|
||||
;; Beschriftungs-Layer aus cfg/layer.cfg (Baugruppe "vf_beschriftung"), sonst
|
||||
;; der bisherige Hartwert. Der Layer wird hier ANGELEGT - bisher schrieb das
|
||||
;; entmake unten auf einen Layer, den niemand erzeugt hat.
|
||||
(setq lay (ssg-layer-anlegen "vf_beschriftung" nil))
|
||||
(if (null lay)
|
||||
(progn
|
||||
(setq lay "VF_Beschriftung")
|
||||
(ssg-make-layer lay "7" nil)
|
||||
)
|
||||
)
|
||||
(entmake (list
|
||||
'(0 . "TEXT")
|
||||
(cons 8 "VF_Beschriftung")
|
||||
(cons 8 lay)
|
||||
'(67 . 0)
|
||||
(cons 10 label-pt)
|
||||
(cons 40 *vfk-label-texthoehe*)
|
||||
@@ -881,6 +891,9 @@
|
||||
;; temporaer auf Welt (verhindert den 31.95mm-Z-Versatz bei
|
||||
;; abweichendem BKS) und stellt es danach wieder her.
|
||||
(setq vf-insert (ssg-block-wrap-welt vf-bname startpunkt vf-ss))
|
||||
;; Ziel-Layer der Baugruppe aus cfg/layer.cfg (ohne Eintrag bleibt die
|
||||
;; Referenz auf dem aktuellen Layer, wie vor der Umstellung).
|
||||
(ssg-layer-setzen vf-insert "variofoerderer")
|
||||
(setq montagehoehe-m (/ (+ hoehe-von hoehe-bis) 2000.0))
|
||||
;; L_GF_m: kommagetrennte Segmentlaengen in Metern (vorne,hinten),
|
||||
;; analog L_GF_m in Gefaellestrecke.lsp.
|
||||
|
||||
@@ -155,6 +155,9 @@
|
||||
)
|
||||
(setq block-obj (vla-InsertBlock modelspace
|
||||
(vlax-3D-point '(0 0 0)) blockname scale 1.0 1.0 0))
|
||||
;; Einzelteil auf die eigene Ebene der Blockdefinition legen - wie in den
|
||||
;; Zwillingen in ssg_ks_insert.lsp; hier fehlte der Aufruf bisher.
|
||||
(ssg-ils-block-auf-ebene block-obj blockname)
|
||||
(setq matrix (vf-rot-matrix chz shz cv sv))
|
||||
(vla-TransformBy block-obj (vlax-tmatrix matrix))
|
||||
(vla-Move block-obj (vlax-3D-point '(0 0 0)) (vlax-3D-point startpunkt))
|
||||
@@ -186,6 +189,9 @@
|
||||
)
|
||||
(setq block-obj (vla-InsertBlock modelspace
|
||||
(vlax-3D-point '(0 0 0)) blockname 1.0 1.0 1.0 0))
|
||||
;; Einzelteil auf die eigene Ebene der Blockdefinition legen - wie in den
|
||||
;; Zwillingen in ssg_ks_insert.lsp; hier fehlte der Aufruf bisher.
|
||||
(ssg-ils-block-auf-ebene block-obj blockname)
|
||||
(setq matrix (vf-rot-matrix chz shz cv sv))
|
||||
(vla-TransformBy block-obj (vlax-tmatrix matrix))
|
||||
(vla-Move block-obj (vlax-3D-point '(0 0 0)) (vlax-3D-point startpunkt))
|
||||
@@ -225,6 +231,9 @@
|
||||
(setq ks-aus (cadr (assoc "KS_AUS" ks-data)))
|
||||
;; Block einfuegen und rotieren
|
||||
(setq block-obj (vla-InsertBlock modelspace (vlax-3D-point '(0 0 0)) blockname 1.0 1.0 1.0 0))
|
||||
;; Einzelteil auf die eigene Ebene der Blockdefinition legen - wie in den
|
||||
;; Zwillingen in ssg_ks_insert.lsp; hier fehlte der Aufruf bisher.
|
||||
(ssg-ils-block-auf-ebene block-obj blockname)
|
||||
(vla-TransformBy block-obj (vlax-tmatrix (vf-rot-matrix chz shz cv sv)))
|
||||
(if (and ks-ein ks-aus)
|
||||
(progn
|
||||
@@ -287,6 +296,9 @@
|
||||
(setq ks-aus (cadr (assoc "KS_AUS" ks-data)))
|
||||
;; Block mit XScale einfuegen und rotieren
|
||||
(setq block-obj (vla-InsertBlock modelspace (vlax-3D-point '(0 0 0)) blockname scale 1.0 1.0 0))
|
||||
;; Einzelteil auf die eigene Ebene der Blockdefinition legen - wie in den
|
||||
;; Zwillingen in ssg_ks_insert.lsp; hier fehlte der Aufruf bisher.
|
||||
(ssg-ils-block-auf-ebene block-obj blockname)
|
||||
(vla-TransformBy block-obj (vlax-tmatrix (vf-rot-matrix chz shz cv sv)))
|
||||
(if (and ks-ein ks-aus)
|
||||
(progn
|
||||
|
||||
@@ -3269,6 +3269,9 @@
|
||||
;; temporaer auf Welt (verhindert den 31.95mm-Z-Versatz bei abweichendem
|
||||
;; BKS, siehe Kommentar dort) und stellt es danach wieder her.
|
||||
(setq vfl-insert (ssg-block-wrap-welt vfl-bname startpunkt vfl-ss))
|
||||
;; Ziel-Layer der Baugruppe aus cfg/layer.cfg (ohne Eintrag bleibt die
|
||||
;; Referenz auf dem aktuellen Layer, wie vor der Umstellung).
|
||||
(ssg-layer-setzen vfl-insert "variofoerderer")
|
||||
;; Werte (volle Liste; nicht vorhandene Tags ignoriert ssg-attrib-set-on)
|
||||
(ssg-attrib-set-on vfl-insert
|
||||
(list
|
||||
@@ -6705,6 +6708,9 @@
|
||||
(ssadd (entlast) merge-ss)
|
||||
)
|
||||
(setq neuer-insert (ssg-block-wrap-welt neuer-bname chain-start merge-ss))
|
||||
;; Ziel-Layer der Baugruppe aus cfg/layer.cfg (ohne Eintrag bleibt die
|
||||
;; Referenz auf dem aktuellen Layer, wie vor der Umstellung).
|
||||
(ssg-layer-setzen neuer-insert "variofoerderer")
|
||||
(ssg-attrib-set-on neuer-insert aggregiert)
|
||||
;; SEITE_AS/SEITE_ES explizit leeren, wenn die Kette (Ausnahmefall) ohne
|
||||
;; eigenes AS-/ES-Element beginnt/endet - ssg-attrib-set-on wuerde einen
|
||||
|
||||
Reference in New Issue
Block a user