[ADD] Kreiseldrehrichtungsanzeige hinzugefügt; [CHANGE] Insert des Kreisel mit Ausrichtung wird jetzt über die vom Benutzer gezeichnete Eingabelinie erreichnet; [FIX] Fehlende config Datei für die Positionierung der Stückliste hinzugefügt

This commit is contained in:
2026-10-16 11:41:51 +02:00
parent b6aa3d604c
commit 6b8f0f9ec3
8 changed files with 206 additions and 73 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+127 -42
View File
@@ -314,6 +314,77 @@
) )
;; --- Drehrichtungspfeil (data/ils/Drehrichtungspfeil.dwg) ---
;; Die DWG ist fuer einen Kreisel Nord -> Sued (AN oben, SP unten, also
;; Einfuegewinkel 270) und Drehrichtung im Uhrzeigersinn gezeichnet.
;; Im Block liegt der Kreisel entlang +X (Winkel 0); die Drehung des
;; Kreisels kommt ueber den Einfuegewinkel des KREISEL_n-Blocks automatisch
;; dazu. Der Pfeil wird daher im Block um 0 - 270 = 90 Grad gedreht.
(setq *kreisel-pfeil-block* "Drehrichtungspfeil")
(setq *kreisel-pfeil-winkel* (ssg-cfg-or "kreisel" "pfeil_winkel" 90.0))
;; X-Skalierung des Pfeils: UZS -> 1, GUZ -> -1 (Spiegelung an der eigenen
;; Y-Achse, die Pfeilspitze zeigt dann in die Gegenrichtung).
(defun kreisel-pfeil-xskal (drehrichtung)
(if (equal drehrichtung "GUZ") -1.0 1.0)
)
;; Reiner Kern: Einfuegeparameter beider Pfeile im Block-KS des Kreisels.
;; Rueckgabe: ((punkt winkel xskal) (punkt winkel xskal)) - AN8, dann SP8
;; (SP8 um 180 Grad gedreht).
(defun kreisel-pfeil-params (radius abstand drehrichtung / xs)
(setq xs (kreisel-pfeil-xskal drehrichtung))
(list (list (list radius 0.0 0.0) *kreisel-pfeil-winkel* xs)
(list (list (+ radius abstand) 0.0 0.0)
(rem (+ *kreisel-pfeil-winkel* 180.0) 360.0) xs))
)
;; Reiner Kern fuers Eckrad: ein Pfeil auf der Radmitte (Block-Ursprung),
;; ausgerichtet wie der AN8-Pfeil eines Kreisels gleicher Drehung.
(defun eckrad-pfeil-params (drehrichtung)
(list (list (list 0.0 0.0 0.0) *kreisel-pfeil-winkel*
(kreisel-pfeil-xskal drehrichtung)))
)
;; Einen Pfeil einfuegen. Ab dem zweiten Mal per Blockname, damit INSERT
;; nicht nach dem Neudefinieren der bestehenden Definition fragt.
(defun kreisel-pfeil-einfuegen (pt winkel xs)
(command "_.INSERT"
(if (tblsearch "BLOCK" *kreisel-pfeil-block*)
*kreisel-pfeil-block*
(strcat *block-path* *kreisel-pfeil-block* ".dwg"))
pt xs 1.0 winkel)
)
;; Alle Pfeile einer Parameterliste ((punkt winkel xskal) ...) einfuegen
;; (beim Aufbau der Blockdefinition). Fehlt die DWG, wird ohne Pfeil gebaut.
(defun kreisel-pfeile-einfuegen (params)
(if (findfile (strcat *block-path* *kreisel-pfeil-block* ".dwg"))
(foreach p params
(kreisel-pfeil-einfuegen (car p) (cadr p) (caddr p))
)
(princ (ssg-textf "kreisel-warn-pfeil-fehlt" (list *kreisel-pfeil-block*)))
)
)
;; Spiegelung der Pfeile in einer BESTEHENDEN Blockdefinition KREISEL_n_...
;; nachziehen (Edit/Redraw mit geaenderter DREHRICHTUNG - der Blockname
;; enthaelt die Drehrichtung nicht, die Definition wird wiederverwendet).
;; Wirkt wie kreisel-label-aktualisieren auf alle Referenzen der Definition.
(defun kreisel-pfeil-aktualisieren (bname drehrichtung / e ed xs)
(setq xs (kreisel-pfeil-xskal drehrichtung))
(setq e (tblobjname "BLOCK" bname))
(while (setq e (entnext e))
(setq ed (entget e))
(if (and (= (cdr (assoc 0 ed)) "INSERT")
(= (strcase (cdr (assoc 2 ed))) (strcase *kreisel-pfeil-block*))
(not (equal (cdr (assoc 41 ed)) xs 1e-9)))
(entmod (subst (cons 41 xs) (assoc 41 ed) ed))
)
)
)
;; Attribut-Funktionen: ssg-attrib-read, ssg-attrib-merge, ;; Attribut-Funktionen: ssg-attrib-read, ssg-attrib-merge,
;; ssg-attrib-defaults, ssg-attrib-make-defs aus ssg_core.lsp ;; ssg-attrib-defaults, ssg-attrib-make-defs aus ssg_core.lsp
@@ -439,6 +510,11 @@
;; SP8 Kreis (Spannstation) bei (radius+abstand, 0) - Dim-Suffix im Dateinamen ;; 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) (command "_.INSERT" (strcat *block-path* "SP8_" *ki-dxfm-dim* ".dwg") (list (+ radius abstand) 0.0 0.0) 1 1 0)
;; Drehrichtungspfeile auf AN8- und SP8-Mitte (SP8 um 180 Grad gedreht,
;; GUZ gespiegelt). Fehlt die DWG, wird der Kreisel ohne Pfeil gebaut.
(kreisel-pfeile-einfuegen
(kreisel-pfeil-params radius abstand (cdr (assoc "DREHRICHTUNG" attribs))))
;; Tangenten-Layer: bevorzugt aus cfg/layer.cfg (Baugruppe ;; Tangenten-Layer: bevorzugt aus cfg/layer.cfg (Baugruppe
;; "kreisel_tangente"), sonst der bisherige Hartwert S_LP. ;; "kreisel_tangente"), sonst der bisherige Hartwert S_LP.
(if (null (ssg-layer-anlegen "kreisel_tangente" T)) (if (null (ssg-layer-anlegen "kreisel_tangente" T))
@@ -506,6 +582,8 @@
(kreisel-label-aktualisieren bname (kreisel-label-aktualisieren bname
(kreisel-label-text kreisel-nummer (cdr (assoc "Bezeichnung" attribs)) (kreisel-label-text kreisel-nummer (cdr (assoc "Bezeichnung" attribs))
(if is-pin "PIN" "STANDARD") abstand)) (if is-pin "PIN" "STANDARD") abstand))
;; ebenso die Spiegelung der Drehrichtungspfeile
(kreisel-pfeil-aktualisieren bname (cdr (assoc "DREHRICHTUNG" attribs)))
) )
) )
@@ -561,10 +639,29 @@
;; KreiselInsert: Manuell Position + Parameter ;; KreiselInsert: Manuell Position + Parameter
;; -------------------------------------------- ;; --------------------------------------------
;; Reiner Kern: Abstand und Rotation aus Basispunkt und gezeigtem Punkt der
;; Abstands-Abfrage (Gummiband-Linie, 2D in der XY-Ebene).
;; Ohne Punkt (Enter) -> Vorgabe-Abstand, Rotation 0.
;; Rueckgabe: (abstand rotation-in-grad), Rotation in [0, 360)
(defun kreisel-insert-richtung (pt p2 vorgabe / a)
(if (and p2 (> (distance (list (car pt) (cadr pt)) (list (car p2) (cadr p2))) 1e-6))
(progn
(setq a (* (/ 180.0 pi) (angle (list (car pt) (cadr pt)) (list (car p2) (cadr p2)))))
(list (distance (list (car pt) (cadr pt)) (list (car p2) (cadr p2)))
(if (>= a 359.9999999) 0.0 a))
)
(list vorgabe 0.0)
)
)
;; -------------------------------------------- ;; --------------------------------------------
;; KreiselInsert: Manuell Position + Parameter ;; KreiselInsert: Manuell Position + Parameter
;; Abfrage: 1. Basispunkt (AN-Seite), 2. Abstand als Gummiband-Linie - die
;; Richtung der Linie ist zugleich die Rotation (Wert tippen = direkte
;; Distanzeingabe in Zeigerichtung), 3. Hoehe (Vorgabe aus angeklicktem
;; Block bzw. Z des Basispunkts), 4. Kreiselart.
;; -------------------------------------------- ;; --------------------------------------------
(defun c:KreiselInsert ( / pt abstand typ rotation rotStr hoehe (defun c:KreiselInsert ( / pt p2 erg abstand typ rotation hoehe hoehe-vorgabe
selectedEnt blockAttribs oldOsmode) selectedEnt blockAttribs oldOsmode)
(ssg-start (ssg-text "kreisel-start-insert") '(("OSMODE") ("CECOLOR"))) (ssg-start (ssg-text "kreisel-start-insert") '(("OSMODE") ("CECOLOR")))
@@ -572,76 +669,59 @@
(setq oldOsmode (getvar "OSMODE")) (setq oldOsmode (getvar "OSMODE"))
(setvar "OSMODE" (logior oldOsmode 512)) ;; 512 = INS (Block-Einfügepunkt) (setvar "OSMODE" (logior oldOsmode 512)) ;; 512 = INS (Block-Einfügepunkt)
;; 1. Einfuegepunkt ;; 1. Basispunkt (AN-Seite)
(setq pt (getpoint (ssg-text "kreisel-prompt-basispunkt"))) (setq pt (getpoint (ssg-text "kreisel-prompt-basispunkt")))
(if (null pt)
(progn
(setvar "OSMODE" oldOsmode)
(ssg-end)
(princ (ssg-text "kreisel-abbruch-befehl"))
(princ)
(return)
)
)
;; Osnap zurücksetzen auf den ursprünglichen Wert ;; Osnap zurücksetzen auf den ursprünglichen Wert
(setvar "OSMODE" oldOsmode) (setvar "OSMODE" oldOsmode)
;; 2. Prüfen ob ein Block getroffen wurde (if (null pt)
(princ (ssg-text "kreisel-abbruch-befehl"))
(progn
;; Hoehen-Vorgabe: angeklickter Block mit HOEHE, sonst Z des Punkts,
;; sonst Default (abgefragt wird erst nach dem Abstand)
(setq selectedEnt (nentselp pt)) (setq selectedEnt (nentselp pt))
(setq hoehe-vorgabe
;; --- HÖHE BESTIMMEN ---
(cond (cond
;; Fall 1: Auf einem Kreisel-Block geklickt
((and selectedEnt ((and selectedEnt
(setq selectedEnt (car selectedEnt)) (setq selectedEnt (car selectedEnt))
(setq blockAttribs (ssg-attrib-read selectedEnt)) (setq blockAttribs (ssg-attrib-read selectedEnt))
(assoc "HOEHE" blockAttribs)) (assoc "HOEHE" blockAttribs))
(setq hoehe (atof (cdr (assoc "HOEHE" blockAttribs)))) (atof (cdr (assoc "HOEHE" blockAttribs))))
(princ (ssg-textf "kreisel-hoehe-von-bestehendem" (list (rtos hoehe 2 0))))
)
;; Fall 2: Punkt hat Z-Koordinate > 0
((and (> (length pt) 2) (> (caddr pt) 0)) ((and (> (length pt) 2) (> (caddr pt) 0))
(setq hoehe (caddr pt)) (caddr pt))
(princ (ssg-textf "kreisel-hoehe-aus-3dpunkt" (list (rtos hoehe 2 0)))) (t *kreisel-default-hoehe*)
)
;; Fall 3: Sonst separat abfragen
(t
(setq hoehe (getreal (ssg-textf "kreisel-prompt-hoehe-z" (list (rtos *kreisel-default-hoehe* 2 0)))))
(if (null hoehe) (setq hoehe *kreisel-default-hoehe*))
) )
) )
;; 3. Abstand ;; 2. Abstand (Tangentenlaenge) - Linie gibt auch den Winkel vor
(initget 6) (setq p2 (getpoint pt (ssg-textf "kreisel-prompt-abstand"
(setq abstand (getdist (list (car pt) (cadr pt)) (list (rtos *kreisel-default-laenge* 2 0)))))
(ssg-textf "kreisel-prompt-abstand" (list (rtos *kreisel-default-laenge* 2 0))))) (setq erg (kreisel-insert-richtung pt p2 *kreisel-default-laenge*)
(if (null abstand) (setq abstand *kreisel-default-laenge*)) abstand (car erg)
rotation (cadr erg))
(princ (ssg-textf "kreisel-abstand-ausgabe" (list (rtos abstand 2 0)))) (princ (ssg-textf "kreisel-abstand-ausgabe" (list (rtos abstand 2 0))))
;; 4. Rotation ;; 3. Hoehe (Z-Koordinate)
(setq rotStr (getstring (ssg-text "kreisel-prompt-rotation"))) (setq hoehe (getreal (ssg-textf "kreisel-prompt-hoehe-z" (list (rtos hoehe-vorgabe 2 0)))))
(if (= rotStr "") (if (null hoehe) (setq hoehe hoehe-vorgabe))
(setq rotation 0.0)
(setq rotation (atof rotStr))
)
;; 5. Kreiselart ;; 4. Kreiselart
(setq typ (kreisel-ask-typ)) (setq typ (kreisel-ask-typ))
(princ (ssg-textf "kreisel-insert-zusammenfassung" (princ (ssg-textf "kreisel-insert-zusammenfassung"
(list (rtos rotation 2 1) (rtos hoehe 2 0) typ))) (list (rtos rotation 2 1) (rtos hoehe 2 0) typ)))
;; 6. Modul einfuegen ;; Modul einfuegen
(draw-module (list (car pt) (cadr pt) hoehe) abstand rotation (draw-module (list (car pt) (cadr pt) hoehe) abstand rotation
(list (cons "KREISELART" typ) (list (cons "KREISELART" typ)
(cons "HOEHE" (rtos hoehe 2 0)))) (cons "HOEHE" (rtos hoehe 2 0))))
;; KEIN weiteres (setvar "OSMODE" ...) mehr nötig!
;; ssg-end stellt nur CLAYER und CMDECHO wieder her, nicht OSMODE
(princ (ssg-text "kreisel-insert-fertig")) (princ (ssg-text "kreisel-insert-fertig"))
)
)
(ssg-end) (ssg-end)
(princ)
) )
@@ -1429,6 +1509,9 @@
(dbgp (strcat "INSERT Block: " *block-path* "AN8_" *ki-dxfm-dim* ".dwg")) (dbgp (strcat "INSERT Block: " *block-path* "AN8_" *ki-dxfm-dim* ".dwg"))
(command "_.INSERT" (strcat *block-path* "AN8_" *ki-dxfm-dim* ".dwg") (list 0.0 0.0 0.0) 1 1 0) (command "_.INSERT" (strcat *block-path* "AN8_" *ki-dxfm-dim* ".dwg") (list 0.0 0.0 0.0) 1 1 0)
;; Drehrichtungspfeil auf die Radmitte (GUZ gespiegelt)
(kreisel-pfeile-einfuegen (eckrad-pfeil-params (cdr (assoc "DREHRICHTUNG" attribs))))
;; Unsichtbare Attribut-Definitionen erzeugen ;; Unsichtbare Attribut-Definitionen erzeugen
(dbgp (strcat "Erzeuge " (itoa (length *eckrad-attrib-defs*)) " Attribut-Definitionen")) (dbgp (strcat "Erzeuge " (itoa (length *eckrad-attrib-defs*)) " Attribut-Definitionen"))
(ssg-attrib-make-defs *eckrad-attrib-defs* 50.0) (ssg-attrib-make-defs *eckrad-attrib-defs* 50.0)
@@ -1461,6 +1544,8 @@
(progn (progn
(princ (ssg-textf "kreisel-bestehende-blockdef" (list bname))) (princ (ssg-textf "kreisel-bestehende-blockdef" (list bname)))
(dbgp (strcat "Verwende bestehende Blockdefinition: " bname)) (dbgp (strcat "Verwende bestehende Blockdefinition: " bname))
;; EckradEdit behaelt ECKRAD_n - Spiegelung des Pfeils nachziehen
(kreisel-pfeil-aktualisieren bname (cdr (assoc "DREHRICHTUNG" attribs)))
) )
) )
+1 -1
View File
@@ -675,7 +675,7 @@ AutoLISP-Implementierung fuer ILS Kreisel und Eckrad. Enthaelt alle Befehle fuer
| Befehl | Beschreibung | | Befehl | Beschreibung |
| --- | --- | | --- | --- |
| `c:KreiselInsert` | Kreisel-Block an Punkt einfuegen (mit Dialog fuer Parameter) | | `c:KreiselInsert` | Kreisel-Block einfuegen: Basispunkt (AN-Seite), Abstand als Gummiband-Linie (deren Richtung = Rotation), Hoehe, Kreiselart |
| `c:KreiselConnect` | Zwei Punkte waehlen, Kreisel dazwischen einfuegen | | `c:KreiselConnect` | Zwei Punkte waehlen, Kreisel dazwischen einfuegen |
| `c:KreiselRedraw` | Bestehenden Kreisel mit neuen Parametern neu zeichnen | | `c:KreiselRedraw` | Bestehenden Kreisel mit neuen Parametern neu zeichnen |
| `c:KreiselQuick` | Schnelleinfuegung mit Standardwerten | | `c:KreiselQuick` | Schnelleinfuegung mit Standardwerten |
+29
View File
@@ -0,0 +1,29 @@
{
"_kommentar": "Konfiguration fuer SSG_FAEHNCHEN_STUECKLISTE (Lisp/ssg_stueckliste.lsp). Vorgaben fuer den Startdialog, Darstellung von Fuehrung und Tabelle (Walz-Layout, siehe tests/testdata/positionierung_nach_walz.dxf) und Regeln je Bauteiltyp.",
"startnummer": 100,
"alle_positionen_in_fahne": false,
"pos_layer": {
"modus": "suffix",
"suffix": "-POS",
"fest": "POS"
},
"tabellen_layer": "D-1-POS",
"fuehrung": {
"textstil": "Pos",
"font": "arial.ttf",
"texthoehe": 75,
"landung": [105, 159],
"landing_gap": 15,
"rahmen": true
},
"tabelle": {
"textstil": "Standard",
"texthoehe": 100,
"spalten": [300, 500, 500, 900, 4866],
"zeilenhoehe": 136
},
"regeln": [
{ "block": "GR_Traeger_*", "marker": "mitte" },
{ "block": "GR_Fahrstrecke_*", "marker": "mitte" }
]
}
Binary file not shown.
+1 -2
View File
@@ -284,7 +284,6 @@
"kreisel-hoehe-aus-3dpunkt": "\n-> Hoehe aus 3D-Punkt uebernommen: %1", "kreisel-hoehe-aus-3dpunkt": "\n-> Hoehe aus 3D-Punkt uebernommen: %1",
"kreisel-hoehe-aus-basispunkt": "\n-> Höhe aus Basispunkt übernommen: %1", "kreisel-hoehe-aus-basispunkt": "\n-> Höhe aus Basispunkt übernommen: %1",
"kreisel-hoehe-aus-startpunkt": "\n-> Hoehe aus Startpunkt uebernommen: %1", "kreisel-hoehe-aus-startpunkt": "\n-> Hoehe aus Startpunkt uebernommen: %1",
"kreisel-hoehe-von-bestehendem": "\n-> Höhe von bestehendem Kreisel übernommen: %1",
"kreisel-insert-zusammenfassung": "\n-> Rotation: %1 Höhe: %2 Kreiselart: %3", "kreisel-insert-zusammenfassung": "\n-> Rotation: %1 Höhe: %2 Kreiselart: %3",
"kreisel-labelsetup-fertig": "\nNeue Einstellungen: Höhe=%1, Farbe=%2, Y-Versatz=%3, Schriftart=Arial", "kreisel-labelsetup-fertig": "\nNeue Einstellungen: Höhe=%1, Farbe=%2, Y-Versatz=%3, Schriftart=Arial",
"kreisel-neue-beschriftungsposition": "\nNeue Beschriftungsposition: X=%1 Y=%2", "kreisel-neue-beschriftungsposition": "\nNeue Beschriftungsposition: X=%1 Y=%2",
@@ -471,7 +470,6 @@
"kreisel-prompt-basispunkt": "\nBasispunkt (AN-Seite): ", "kreisel-prompt-basispunkt": "\nBasispunkt (AN-Seite): ",
"kreisel-prompt-block-auswaehlen": "\nKreisel-Block auswaehlen: ", "kreisel-prompt-block-auswaehlen": "\nKreisel-Block auswaehlen: ",
"kreisel-prompt-endpunkt": "\nEndpunkt (SP-Seite aussen): ", "kreisel-prompt-endpunkt": "\nEndpunkt (SP-Seite aussen): ",
"kreisel-prompt-rotation": "\nRotation in Grad <0>: ",
"kreisel-prompt-startpunkt": "\nStartpunkt (AN-Seite aussen): ", "kreisel-prompt-startpunkt": "\nStartpunkt (AN-Seite aussen): ",
"kreisel-quick-fertig": "\nSchnell Einfuegen fertig.", "kreisel-quick-fertig": "\nSchnell Einfuegen fertig.",
"kreisel-start-connect": "Kreisel Smart Connect", "kreisel-start-connect": "Kreisel Smart Connect",
@@ -490,6 +488,7 @@
"kreisel-typ-opt-pin": "\n[2] PIN", "kreisel-typ-opt-pin": "\n[2] PIN",
"kreisel-typ-opt-standard": "\n[1] STANDARD (ohne PIN)", "kreisel-typ-opt-standard": "\n[1] STANDARD (ohne PIN)",
"kreisel-warn-blockpfad": "\n[KreiselInsert] WARNUNG: Block-Pfad nicht ermittelbar!", "kreisel-warn-blockpfad": "\n[KreiselInsert] WARNUNG: Block-Pfad nicht ermittelbar!",
"kreisel-warn-pfeil-fehlt": "\n[KreiselInsert] WARNUNG: %1.dwg nicht gefunden - Kreisel ohne Drehrichtungspfeil.",
"kreisel-warn-core-fehlt": "\n[KreiselInsert] WARNUNG: ssg_core.lsp nicht gefunden - Standardwerte.", "kreisel-warn-core-fehlt": "\n[KreiselInsert] WARNUNG: ssg_core.lsp nicht gefunden - Standardwerte.",
"omni-abbruch": "\nAbgebrochen.", "omni-abbruch": "\nAbgebrochen.",
"omni-abbruch-bogen": "\n[BOGEN] Abgebrochen.", "omni-abbruch-bogen": "\n[BOGEN] Abgebrochen.",
+1 -2
View File
@@ -284,7 +284,6 @@
"kreisel-hoehe-aus-3dpunkt": "\n-> Height taken from 3D point: %1", "kreisel-hoehe-aus-3dpunkt": "\n-> Height taken from 3D point: %1",
"kreisel-hoehe-aus-basispunkt": "\n-> Height taken from base point: %1", "kreisel-hoehe-aus-basispunkt": "\n-> Height taken from base point: %1",
"kreisel-hoehe-aus-startpunkt": "\n-> Height taken from start point: %1", "kreisel-hoehe-aus-startpunkt": "\n-> Height taken from start point: %1",
"kreisel-hoehe-von-bestehendem": "\n-> Height taken from existing Kreisel: %1",
"kreisel-insert-zusammenfassung": "\n-> Rotation: %1 Height: %2 Kreisel type: %3", "kreisel-insert-zusammenfassung": "\n-> Rotation: %1 Height: %2 Kreisel type: %3",
"kreisel-labelsetup-fertig": "\nNew settings: Height=%1, Colour=%2, Y offset=%3, Font=Arial", "kreisel-labelsetup-fertig": "\nNew settings: Height=%1, Colour=%2, Y offset=%3, Font=Arial",
"kreisel-neue-beschriftungsposition": "\nNew label position: X=%1 Y=%2", "kreisel-neue-beschriftungsposition": "\nNew label position: X=%1 Y=%2",
@@ -471,7 +470,6 @@
"kreisel-prompt-basispunkt": "\nBase point (AN side): ", "kreisel-prompt-basispunkt": "\nBase point (AN side): ",
"kreisel-prompt-block-auswaehlen": "\nSelect Kreisel block: ", "kreisel-prompt-block-auswaehlen": "\nSelect Kreisel block: ",
"kreisel-prompt-endpunkt": "\nEnd point (SP side, outer): ", "kreisel-prompt-endpunkt": "\nEnd point (SP side, outer): ",
"kreisel-prompt-rotation": "\nRotation in degrees <0>: ",
"kreisel-prompt-startpunkt": "\nStart point (AN side, outer): ", "kreisel-prompt-startpunkt": "\nStart point (AN side, outer): ",
"kreisel-quick-fertig": "\nQuick insert done.", "kreisel-quick-fertig": "\nQuick insert done.",
"kreisel-start-connect": "Kreisel Smart Connect", "kreisel-start-connect": "Kreisel Smart Connect",
@@ -490,6 +488,7 @@
"kreisel-typ-opt-pin": "\n[2] PIN", "kreisel-typ-opt-pin": "\n[2] PIN",
"kreisel-typ-opt-standard": "\n[1] STANDARD (without PIN)", "kreisel-typ-opt-standard": "\n[1] STANDARD (without PIN)",
"kreisel-warn-blockpfad": "\n[KreiselInsert] WARNING: block path not determinable!", "kreisel-warn-blockpfad": "\n[KreiselInsert] WARNING: block path not determinable!",
"kreisel-warn-pfeil-fehlt": "\n[KreiselInsert] WARNING: %1.dwg not found - carousel without direction arrow.",
"kreisel-warn-core-fehlt": "\n[KreiselInsert] WARNING: ssg_core.lsp not found - using defaults.", "kreisel-warn-core-fehlt": "\n[KreiselInsert] WARNING: ssg_core.lsp not found - using defaults.",
"omni-abbruch": "\nCancelled.", "omni-abbruch": "\nCancelled.",
"omni-abbruch-bogen": "\n[ARC] Cancelled.", "omni-abbruch-bogen": "\n[ARC] Cancelled.",
+21
View File
@@ -803,6 +803,27 @@
(defun tu-tests-kreisel ( / _e) (defun tu-tests-kreisel ( / _e)
(princ "\n[KreiselInsert]") (princ "\n[KreiselInsert]")
;; Drehrichtungspfeil: AN8-Mitte 90 Grad, SP8-Mitte 270 Grad, GUZ gespiegelt
(tu-eqf "kreisel-pfeil-params/uzs"
'(((400.0 0.0 0.0) 90.0 1.0) ((2700.0 0.0 0.0) 270.0 1.0))
(kreisel-pfeil-params 400.0 2300.0 "UZS"))
(tu-eqf "kreisel-pfeil-params/guz"
'(((400.0 0.0 0.0) 90.0 -1.0) ((2700.0 0.0 0.0) 270.0 -1.0))
(kreisel-pfeil-params 400.0 2300.0 "GUZ"))
(tu-eqf "kreisel-pfeil-xskal/nil-ist-uzs" 1.0 (kreisel-pfeil-xskal nil))
(tu-eqf "eckrad-pfeil-params/guz"
'(((0.0 0.0 0.0) 90.0 -1.0)) (eckrad-pfeil-params "GUZ"))
;; KreiselInsert: Abstand + Rotation aus der Gummiband-Linie
(tu-eqf "kreisel-insert-richtung/ost"
'(2300.0 0.0) (kreisel-insert-richtung '(100.0 100.0 0.0) '(2400.0 100.0 0.0) 2300.0))
(tu-eqf "kreisel-insert-richtung/sued"
'(1500.0 270.0) (kreisel-insert-richtung '(0.0 0.0 0.0) '(0.0 -1500.0 0.0) 2300.0))
(tu-eqf "kreisel-insert-richtung/z-ignoriert"
'(1000.0 90.0) (kreisel-insert-richtung '(0.0 0.0 2000.0) '(0.0 1000.0 0.0) 2300.0))
(tu-eqf "kreisel-insert-richtung/enter-vorgabe"
'(2300.0 0.0) (kreisel-insert-richtung '(0.0 0.0 0.0) nil 2300.0))
;; Projektion eines Punktes auf eine Gerade ;; Projektion eines Punktes auf eine Gerade
(tu-eqf "kreisel-project-point/lot" (tu-eqf "kreisel-project-point/lot"
'(0.0 0.0) (kreisel-project-point '(0.0 5.0) '(0.0 0.0) '(10.0 0.0))) '(0.0 0.0) (kreisel-project-point '(0.0 5.0) '(0.0 0.0) '(10.0 0.0)))