;********************************************************************************************* ; Dateiname : SD_Absolute_Masse.lsp ; Autor : WasWoisI ; Erstellt : ; geändert : ;********************************************************************************************* ; Beschreibung: - Setzen einer absoluten Teilemasse ; - ;********************************************************************************************* ; Änderungen ; ;********************************************************************************************* (in-package :chris) (use-package :oli) (in-package :teo) (sd-defdialog 'SD_Absolute_Masse :dialog-title "Absolute Masse" :toolbox-button nil :variables '( ("Anwenden auf...") (parts :value-type :part-assembly :modifies nil :title "Teil" :multiple-items t :initial-value nil );end parts ("absolute Teilemasse") (masse :value-type :length :title "Masse [g]" :initial-value nil :prompt-text "Masse in Gramm eingeben" :initial-optional T );end masse ("Optionen") (DelTeilEig :title "TeileDichte loeschen" :toggle-type :wide-toggle :value-type :boolean :initial-value T :after-input (progn (setf nurBericht nil) );end progn );end DelTeilEig (NurMessen :title "nur Masse bestimmen" :toggle-type :wide-toggle :value-type :boolean :initial-value nil :after-input (progn (setf DelTeilEig nil) (setf ContRes nil) );end progn );end NurMessen ) ;end variables :ok-action '( progn (TeoMasseMI) );end ok-action :cancel-action '( progn );end cancel-action :help-action ' (progn (sd-display-url ( Format NIL "~A/SD_Masse.htm" (oli::sd-convert-filename-from-platform (oli::sd-sys-getenv "SCHILLERHELPDIR")))) ); end progn :local-functions '( ; ------------------------------------------------------------------------------------------------ (TeoMasseMI () (defun dbstatus () (progn (setf ContdbOkflag T) (setf InstDbOKflag T) (let ((n (length parts)) (i 0)) (dolist (part parts) (progn (setf TeilInBrowser (sd-inq-obj-pathname PART)) (setf DBStatusCont (sd-inq-obj-contents-read-only-p PART)) (setf DBStatusInst (sd-inq-obj-instance-read-only-p PART)) ; (display (format nil "Der Teile Status [dbstatuscont] ~A ist ~A [T = read only] [nil = modifiable]" TeilInBrowser DBStatusCont)) ; (display (format nil "Der BaugruppenStatus des Teils [dbstatusinst] ~A ist ~A [T = read only] [nil = modifiable]" TeilInBrowser DBStatusInst)) (if DBStatusCont (progn (setf ContDBOkFlag nil) ; (display "ContDBStatusCont ist T [read only]") );progn );enif (if DBStatusInst (progn (setf InstDBOkFlag nil) ; (display "DBStatusInst ist T Baugruppe [read only]") );progn ) );endprogn );endprogn (incf i) );end let ;(display (format nil "InstDBOKflag ~A" instdbokflag )) ;(display (format nil "ContDBOKflag ~A" contdbokflag )) );endprogn );dbstatus ; ---------------------------------------------------------------------------------------------------------------------------- (defun VolumenErmitteln () (progn (setf VolGes 0) (let ((n (length parts)) (i 0)) (dolist (part parts) (progn ; (display "Bericht") ; (display "-------") (setf TeilInBrowser (sd-inq-obj-pathname PART)) ; (sd-call-cmds (display (format nil "Teil im Browser: ~A" TeilInBrowser))) ; (display " ") (setf TeilVolumen (sd-call-cmds (get_vol_prop :for_part :part PART :volume))) ; (display (format nil "Teilvolumen von ~A betraegt ~A [mm3]" TeilInBrowser TeilVolumen)) (setf TeileDichte (sd-inq-part-density part :instance)) ; (display (format nil "Teildichte (instance): ~A [g/mm3]" TeileDichte)) (setf GrundDichte (sd-inq-part-density part :contents)) ; (display (format nil "Grunddichte (contents): ~A [g/mm3]" GrundDichte)) ; (display " ") ; (display "NIL = keine Eintraege") ; (display "==============================================================================================") (setf VolGes (+ VolGes TeilVolumen)) );endprogn );endprogn (incf i) );end let (display (format nil "Gesamtvolumen der ~A Teile betraegt: ~A [mm3]" (length parts) VolGes)) );endprogn );end VolumenErmitteln ; ---------------------------------------------------------------------------------------------------------------------------- (defun MasseVergeben () (let ((n (length parts)) (i 0)) (dolist (part parts) (progn (if DelTeileig (progn (setf TeilInBrowser (sd-inq-obj-pathname PART)) (sd-call-cmds (set_part_inst_density :parts part :clr)) (display (format nil "Teileigenschaften von ~A geloescht" TeilInBrowser)) );end progn );endif (sd-call-cmds (set_part_base_density :parts PART :dens NeueDichte)) );endprogn );endprogn (incf i) );end let );MasseVergeben ; ---------------------------------------------------------------------------------------------------------------------------- (defun Messen () (setf GesamtMasse 0) (let ((n (length parts)) (i 0)) (dolist (part parts) (progn (setf TeilMasse (sd-call-cmds (get_vol_prop :for_part :part PART :mass ))) (setf GesamtMasse (+ GesamtMasse Teilmasse)) );endprogn );endprogn (incf i) );end let (display " ") (display (format nil "Die Gesamtmasse der ~A Teile betraegt jetzt ~A [g]" (length parts) GesamtMasse)) );Messen ; ---------------------------------------------------------------------------------------------------------------------------- (dbstatus) (cond (NurMessen (progn (display "Nur messen") (Messen) );progn ) ((not ContDBOkFlag) (progn (display "Teile sind nicht reserviert") ) ) ((and (not InstDBOkFlag) DelTeilEig) (progn (display "Baugruppe ist nicht reserviert" ) (display "um Teileeigenschaften zu loeschen") ) ) ((not NurMessen) (display "Eigenschaften aendern") (VolumenErmitteln) (setf NeueDichte (/ masse VolGes)) (MasseVergeben) (Messen) ) );end cond );end TeoMasseMI );endlocalfunction ) ;enddefdialog