(defun quadriere (zahl) (* zahl zahl) ) (defun c:romi () (princ "bitte eine 3D-Polyline auswählen:\n") (setq i 0) (setq auswahl NIL) (while (= auswahl NIL) (if (> i 0) (alert "Es wurde nichts gewählt; bitte eine 3D-Polylinie wählen ... ") ) (setq auswahl (ssget)) (setq i (1+ i)) (if (/= auswahl NIL) (setq eintragsanzahl (sslength auswahl)) ) (while (> eintragsanzahl 1) (alert (strcat "Es wurden " (itoa(sslength auswahl)) " Elemente gewählt; bitte nur eine 3D-Polylinie wählen ...")) (setq eintragsanzahl NIL) (setq auswahl NIL) (setq i 0) ) (if (= eintragsanzahl 1) (progn (setq entitynummer (ssname auswahl 0)) (setq grafikdaten (entget entitynummer)) (setq elementtyp (cdr(assoc 0 grafikdaten))) ;(setq elementtyp (cdr(assoc 0 (entget (ssname auswahl 0))))) (if (/= elementtyp "POLYLINE") (progn (alert (strcat "Es wurde ein " elementtyp "-Element gewählt; bitte eine 3D-Polylinie wählen ...")) (setq eintragsanzahl NIL) (setq auswahl NIL) (setq i 0) ) ) ) ) ) (setq subentname (entnext entitynummer)) ; Koordinaten der Polyline extrahieren und Koordinaten der Schächte extrahieren beginnt (setq vertexlist '()) (setq schachtlist '()) (setq subelementtyp "DUMMI") (setq miniz 10000000000) (while (/= subelementtyp "SEQEND") (setq subgrafikdaten (entget subentname)) (setq subelementtyp(cdr(assoc 0 subgrafikdaten))) (setq vertex (cdr(assoc 10 subgrafikdaten))) (if (/= vertex NIL) (setq miniz (min (caddr vertex) miniz)) ; Minimalwert der Z-Koordinaten berechnen ) (if (= subelementtyp "VERTEX") (progn (setq vertexlist (append vertexlist (list vertex))) ; Vertexliste vom Gelände erstellen (princ ; (setq schachtlist ; (append schachtlist ; (list (ssname (ssget "X" '((0 . "INSERT") (2 . "schacht") (-4 . "=,=,=") (10 vertex))) ; < Hier ist was falsch 0 ) ; ) ; ) ) ) ) (setq subentname (entnext subentname)) ) (setq vertexanzahl (length vertexlist)) ; Delta-Horizontal und Delta-Vertikal berechnen (setq abstandslist NIL) (setq c 1) (while (< c vertexanzahl) (setq deltahorizontal (sqrt (+ (quadriere (- (car (nth c vertexlist) ) (car (nth (- c 1) vertexlist) ) ) ) (quadriere (- (cadr (nth c vertexlist) ) (cadr (nth (- c 1) vertexlist) ) ) ) ) ) ) (setq deltavertikal (- (caddr (nth c vertexlist) ) (caddr (nth (- c 1) vertexlist) ) ) ) (setq 1deltapaar (list deltahorizontal deltavertikal '0.0)) (setq abstandslist (append abstandslist (list 1deltapaar))) (setq c (1+ c)) ) (setvar "osnapcoord" 1) ; Damit die Koordinaten auch wirklich vom Programm genommen werden (setvar "dimzin" 0) ; damit das Zahlenformat wie in rtos vorgesehen angesprochen werden kann (setq z_vergleichsebene ; Einlesen der Vergleichsebenenhöhe (getreal (strcat "Höhe der Vergleichsebene eingeben <" (rtos (fix miniz) 2 3) ">: ") ) ) (if (= z_vergleichsebene NIL) (setq z_vergleichsebene (fix miniz)) ; Voreinstellung für Vergleichsebene, falls nichts eingegeben wird ) (setq ueberhoehung ; Überhöhungsfakor wählen (getreal (strcat "Überhöhungsfaktor eingeben <" (rtos 10 2 3) ">: ") ) ) (if (= ueberhoehung NIL) (setq ueberhoehung 10.0) ) (setq einsetzpunkt (getpoint "Einsetzpunkt wählen:")) (command "-layer" "m" "ls_gelaende" "fa" "3" "" "ls" "0.35" "" "ps" "style_1" "" "") ; Gelände zeichnen beginnt (setq diffz ; Differenzhöhe der Darstellung (- ; für angegebene Vergleichsebene berechnen (caddr (car vertexlist) ) z_vergleichsebene ) ) (setq einsetzgel1 ; Berechnung des 1. Geländeeinsetzpunktes (list (car einsetzpunkt) (+ (cadr einsetzpunkt) diffz ) (caddr einsetzpunkt) ) ) (setq tmppkt einsetzgel1) ; Geländelinie zeichnen (setq darstellungskoordlist ; und Liste erzeugen, die die dargestellten Geländelinienkoordinaten zusammenfasst (list tmppkt) ) (command "_pline" tmppkt) (foreach n abstandslist (setq abstand_gequetscht ; "gequetschte" Darstellung aufgrund der Überhöhung berechnen (list (/ (car n) ueberhoehung) ; Delta-Horizontal wird durch die Überhöhung dividiert (cadr n) ; Delta-Vertikal bleibt unverändert ) ) (setq darstellungskoordlist ; Der Schleifendurchlauf für das Zeichnen der Polyline wird auch (append darstellungskoordlist ; dazu genutzt, die Lisete für den dargestellten Geländelinienverlauf zu generieren) (list (mapcar '+ tmppkt abstand_gequetscht) ) ) ) (setq tmppkt (mapcar '+ tmppkt abstand_gequetscht)) (command tmppkt) ) (command "") (command "-layer" "m" "ls_vergleichsebene" "fa" "4" "" "ls" "0.50" "" "ps" "style_1" "" "" ) ; Vergleichsebene zeichnen beginnt (command "_line" (list (- (car einsetzpunkt) 8.0 ) (cadr einsetzpunkt) ) (list (car tmppkt) (cadr einsetzpunkt) ) "" ) (command "_-style" "ls_isocp" "isocp" "0.00" "1.00" "0" "n" "n") (command "_text" "p" "UL" (list ; Vergleichsebene beschriften (- (car einsetzpunkt) 8.0 ) (cadr einsetzpunkt) ) "0.5" "0.0" (strcat "VE=" (rtos z_vergleichsebene 2 3) "m" ) ) (command "-layer" "m" "ls_ordnerlinien_gelaende" "fa" "8" "" "ls" "0.15" "" "ps" "style_1" "" "" ) ; Ordnerlinen für's Gelände zeichnen beginnt (foreach n darstellungskoordlist (setq tmppkt n) (command "_line" tmppkt (list (car tmppkt) (cadr einsetzpunkt)) "") ) schachtlist ;(setq einsetzpunkt (getpoint "\nEinsetzpunkt:")) ;(command "_pline" einsetzpunkt) ;(foreach n abstandslist ; (setq einsetzpunkt (mapcar '+ einsetzpunkt n)) ; (command einsetzpunkt) ;) ;(command "") )