;** Berechnung der Gesamt-Masse von beliebigen Körpern, die als Kontur ;** aus einem Kreis oder einer geschlossenen Polylinie bestehen. Weiter ;** Angaben sind die Höhe des Körpers und die Dichte des Materials. ;** Die Dichte wird aus der Datei ETPMASSE.TXT gelesen. Ein Neueintrag ;** geschieht mittels eines Texteditors. Die Positionen der Werte sind ;** so zu setzen wie die Überschrift es vorgibt. (defun c:etpmasse ( / m_plusli m_minusli schleife10 antw1 cmd_echo) (setq cmd_echo (getvar "CMDECHO")) (setvar "CMDECHO" 0) (setq m_plusli '()) (setq m_minusli '()) (setq schleife10 T) (terpri) (princ "** Massenberechnung für WA - ETP **\n\n") (while schleife10 (initget "Material Berechnung Hinzu Entfernen Zurück") (terpri) (setq antw1 (getkword "Funktion wählen, (Zurück, Berechnung, Hinzu, Entfernen) : ")) (cond ((= antw1 "Material") (etpmat)) ;Material-Abfrage ((= antw1 "Berechnung") (etprech)) ;Berechnung der Gesamt-Masse ((= antw1 "Hinzu") (etphinzu)) ;Auswahl der Positiv-Konturen ((= antw1 "Entfernen") (etpentfe)) ;Auswahl der Negativ-Konturen ((= antw1 "Zurück") ;Beenden der Funktion (terpri) (princ "** Beende Massenberechnung ** ") (setq schleife10 nil) (princ) ) ) ) ; (setvar "CMDECHO" cmd_echo) );ende c:etpmasse ;*** MATWAHL ;*** Symbole einlesen : ;*** Symbole ausgeben : ;*** mögliche Antworten : String, ;*** Sicherheitsprüfung : existiert zu der Material-Nr eine Zeile in der ;*** : Datei etpmasse.txt ;*** Ausgabewert : dichte, real Dichte des Materials (defun matwahl (/ anfragetext vorgabe schleife1 zeile datei anzahl ok1 feldlaenge satzposition bas1 eingabe21 wahr zeilennr i etp_faktor dichte) (setq schleife1 T) (setq wahr nil) ;Pfadname der etpmasse.txt Datei (setq mat-dir "C:\Programme\Autodesk\MDT 2006\Support") ;Faktor für Umrechnung der Dichte-Einheit Ergebnis in Kg (setq etp_faktor 0.000001) (while schleife1 (setq anfragetext "Materialart wählen : ") (setq vorgabe "1") (setq datei (open (strcat mat-dir "etpmasse.txt") "r")) (setq zeile (read-line datei)) (setq zeile (read-line datei)) (terpri) (princ anfragetext) (terpri) (while zeile (print zeile) (setq zeile (read-line datei)) ) (close datei) (terpri) (terpri) ;(if (/= antw2 "") (setq eingabe2 antw2)) (if (null antw2) (setq eingabe2 vorgabe)) (princ anfragetext) (princ "<") (princ eingabe2) (princ "> :") (setq antw2 (getstring)) (if (/= antw2 "") (setq eingabe2 antw2)) (setq zeilennr (atoi eingabe2)) (setq i 1) (if (= (type zeilennr) (type i)) (progn (setq datei (open (strcat mat-dir "etpmasse.txt") "r")) (repeat (+ 5 zeilennr) (setq wahr (read-line datei)) ) ) ) (if wahr (progn (close datei) (setq dichte (* (atof (substr wahr 45 10)) etp_faktor)) (setq schleife1 nil) ) ) ) (setq dichte dichte) );ende matwahl ;*** MATHOEHE, ;*** Symbole einlesen : ;*** Symbole ausgeben : (defun mathoehe (/ anfragetext vorgabe hoehe) (setq anfragetext "Materialhöhe eingeben : ") (setq vorgabe 10.0) (if (null antw6) (setq eingabe6 vorgabe)) (princ anfragetext) (princ "<") (princ eingabe6) (princ "> :") (setq antw6 (getreal)) (if antw6 (setq eingabe6 antw6) (setq antw6 T)) (setq hoehe eingabe6) ) ;*** MATANZAHL, ;*** Symbole einlesen : ;*** Symbole ausgeben : ;*** Sicherheitsprüfung : (defun matanzahl (/ anfragetext vorgabe anzahl) (setq anfragetext "Materialanzahl eingeben : ") (setq vorgabe 1.0) (if (null antw7) (setq eingabe7 vorgabe)) (princ anfragetext) (princ "<") (princ eingabe7) (princ "> :") (setq antw7 (getreal)) (if antw7 (setq eingabe7 antw7) (setq antw7 T)) (setq anzahl eingabe7) ) ;** Ermittlung der Fläche von den gwählten Objekten. Die Objekte werden ;** überprüft auf Kreis und geschlossene Polilinie. Die Flächen werden ;** addiert und in eine Liste geschrieben (defun objekt_wahl ( / objekt objektname schleife1 schleife2 antw1 wert zaehler1) (setq objekt nil objektname nil) (setq schleife1 T) (setq schleife2 T) (setq objektli '()) (while schleife1 (while schleife2 (setq objektname (car (entsel "Kontur wählen "))) (if objektname (progn (setq objekt (entget objektname)) (cond ((= "CIRCLE" (cdr (assoc 0 objekt))) (progn (setq objektli (cons objektname objektli) schleife2 nil)) ) ((and (= "POLYLINE" (cdr (assoc 0 objekt))) (= 1 (cdr (assoc 70 objekt)))) (progn (setq objektli (cons objektname objektli) schleife2 nil)) ) ((and (= "LWPOLYLINE" (cdr (assoc 0 objekt))) (= 1 (cdr (assoc 70 objekt)))) (progn (setq objektli (cons objektname objektli) schleife2 nil)) ) (T (princ "Objekt ist kein Kreis u. keine geschlossene P-Linie \n")) ) ) (progn (terpri) (princ "kein Objekt gefunden \n") (setq schleife2 nil) ) ) ) ;schleife2 (terpri) (setq antw1 (getstring "weitere Kontur wählen ? (j/n) : ")) (if (= (strcase antw1) "N") (setq schleife1 nil) (setq schleife2 T)) ) ;schleife1 (setq wert 0) (setq zaehler1 0) (repeat (length objektli) (command ".fläche" "o" (nth zaehler1 objektli)) (setq wert (+ wert (getvar "area"))) (setq zaehler1 (1+ zaehler1)) ) (setq wert wert) ) ;** Ermittlung von Positiv-Masse. Die Dichte des Materials ergibt die ;** Funktion "matwahl", die Höhe der Kontur ergibt "mathoehe", die Fläche ;** der Kontur ergibt "objekt_wahl". (defun etphinzu ( / masse) (setq masse (* (matwahl) (mathoehe) (matanzahl) (objekt_wahl))) (setq m_plusli (cons masse m_plusli)) (princ m_plusli) (princ) ) ;** Ermittlung von Negativ-Masse. Die Dichte des Materials ergibt die ;** Funktion "matwahl", die Höhe der Kontur ergibt "mathoehe", die Fläche ;** der Kontur ergibt "objekt_wahl". (defun etpentfe ( / masse) (setq masse (* (matwahl) (mathoehe) (matanzahl) (objekt_wahl))) (setq m_minusli (cons masse m_minusli)) (princ m_minusli) (princ) ) ;** Berechnung der gesamten Masse. Die Summe der Negativ-Masen werden von ;** der Summe der Positiv-Massen abgezogen. Das Ergebnis wird als Text in ;** die Zeichnung eingetragen. Texthöhe, Einfügewinkel und Einfügepunkt ;** können eingegeben werden. Wenn keine Angabe zu Winkel und Höhe gemacht ;** wird, ist der Winkel = 0 und die Höhe = Höhe des aktuellen Textstiles. ;** Nachkommastellen auf 3 begrenzt (defun etprech ();( / masseges texthoehe winkel textpkt text_size) (setq text_size (getvar "textsize")) ;(setq masseplusges (apply '+ m_plusli)) ;(setq masseminusges (apply '+ m_minusli)) (setq masseges (- (apply '+ m_plusli) (apply '+ m_minusli))) (cond ; Ausgabeformat 1 g - 99 g ((and (< masseges 0.1) (>= masseges 0)) (setq masseges (strcat (rtos (* masseges 1000) 2 0) " g")) ) ; Ausgabeformat 0.1 kg - 0.99 kg ((and (< masseges 1.0) (>= masseges 0.1)) (setq masseges (strcat (rtos masseges 2 2) " kg")) ) ; Ausgabeformat 1.0 kg - unendlich kg ((>= masseges 1.0) (setq masseges (strcat (rtos masseges 2 1) " kg"))) ) (princ masseges) (terpri) (setq texthoehe (getstring "Texthöhe eingeben : ")) (if (= texthoehe "") (setq texthoehe (getvar "textsize")) (setq texthoehe (atof texthoehe)) ) (setq winkel (getstring "Einfügewinkel eingeben : ")) (if (= winkel "") (setq winkel 0) (setq winkel (atof winkel))) (initget (+ 1 2 4)) (setq textpkt (getpoint "Einfügepunkt eingeben : ")) (command "text" textpkt texthoehe winkel masseges) (setvar "textsize" text_size) ) (defun rund (real stelle) (atof (rtos real 2 stelle)) )