Newsgroup: it.comp.software.cad
Titolo: Acad 3D: Modificare la Proprietà "Massa" di un solido?

Come da oggetto, con AutoCad 2004:
E' possibile modificare la Proprietà Massa (Peso Specifico) di un Solido?
Teoricamente dovrebbe essere possibile visto che se lo interroghi su un 
solido (menu Strumenti / Interroga / Proprietà massa), ti da anche Massa e 
Volume, però con valori identici (pone la Massa=1).
Ma se non fosse possibile, non avrebbe nessun senso rispondere anche con la 
Massa.
Grazie a chi mi saprà rispondere.

 2D Parametric for 2000-2008 <
(strcat "I like " (substr (ver) 8 4) "!")
--

 "ALE_GetTotalWeight"
Ciao Marco
Innanzitutto complimenti per la funzione che hai creato.
Sembra proprio quello che servre a me, però... non so farla funzionare.
Premesso che non avevo mai usato AutoLisp, ti spiego come ho proceduto da 
ignorante.
1 Copia (il listato dal tuo link)
2 Acad / Strumenti / Autolisp / Editor
3 Nuovo, Incolla
4 Salva come: massa.lsp in una mia dir
5 Strumenti / Autolisp / Carica massa.lsp
6 idem / Gruppo di avvio / Contenuto / Aggiungi massa.lsp
7 Salvo il mio disegno, chiudo e riapro Acad e disegno
8 Digito "massa", comando sconosciuto
9 In Autolisp / Applicazioni caricate: c'è ma è inattivo (grigio chiaro)
10 idem / Cronologia: c'è
Puoi dirmi dov'è che sbaglio?
Grazie e ciao
PS: Speriamo che Massa invece ci sia domenica in F1... ;-)

> Puoi dirmi dov'è che sbaglio?
Nel sito dove hai trovato la funzione probabilmente
non hanno riportato tutto ciò che è necessario necessarie.
Quello che segue è l'ultima version completa.
; Marc'Antonio Alessi 
http://xoomer.alice.it/alessi
; Version 1.01 - 19/10/2005 - per Andrea da Modena e ReddeV
; #WSpVl = variabile globale
;
(defun C:ALE_GetTotalWeight ( / Countr SelSet EntNam EntObj VolVal)
  (vl-load-com)
  (if
    (setq SelSet
      (ALE_SsGetFilter "Seleziona uno o più solidi" '((0 . "3DSOLID")))
    )
    (progn
      (setq
        #WSpVl (uReal 7 "" "Peso specifico" #WSpVl)
        VolVal 0.0
        Countr 0
      )
      (while (setq EntNam (ssname SelSet 0))
        (setq
          EntObj (ALE_vlax-Ename>Vla-Object EntNam)
          VolVal (+ (vla-get-Volume EntObj) VolVal)
          Countr (1+ Countr)
        )
        (ssdel EntNam SelSet)
      )
      (princ
        (strcat
          "\n" (itoa Countr) " Solidi > Volume totale: "
          (rtos VolVal 2 1)
          " - Peso totale: " (rtos (* VolVal #WSpVl 0.000001) 2 1)
        )
      )
      (vlax-release-object EntObj)
    )
  )
  (princ)
)
;
(defun uReal (IGtBit KwdStr PrmStr DefRea / InpVal)
  (if DefRea
    (setq
      PrmStr (strcat "\n" PrmStr " <" (ALE_RTOS_DZ8 DefRea) ">: ")
      IGtBit (logand IGtBit 254)
    )
    (setq PrmStr (strcat "\n" PrmStr ": "))
  )
  (initget IGtBit KwdStr)
  (setq InpVal (getreal PrmStr))
  (if InpVal InpVal DefRea)
)
;
(defun ALE_RtoS_DZ8 (ReaVal / CurDZn OutVal)
  (if (= 8 (setq CurDZn (getvar "DIMZIN")))
    (setq CurDZn nil)
    (setvar "DIMZIN" 8)
  )
  (setq OutVal (rtos ReaVal 2))
  (and CurDZn (setvar "DIMZIN" CurDZn))
  OutVal
)
;
; Copyright ©2005 - Marc'Antonio Alessi, Italy - All rights reserved
; 
http://xoomer.alice.it/alessi
;
; Function: ALE_SsGetFilter
;
; Version 1.00 - 22/02/2005
;
; Description:
;   Ssget with filter list
;
; Arguments:
;   PrmStr = User prompt [STR]
;   FltLst = ssget filter list [LIST]
;
; Example:
;  (ALE_SsGetFilter "Select attibuted block(s)" '((0 . "INSERT") (66 . 1)))
;
; Return Values:
;   [PICKSET] Selection set
;   nil if user press 'Return' or 'Space'
;
(defun ALE_SsGetFilter (PrmStr FltLst / FlgSlt SelSet)
    (princ "\n_ ")
    (prompt (setq PrmStr (strcat "\n" PrmStr ": ")))
    (if
      (while (not FlgSlt)
        (if (setq SelSet (ssget FltLst))
          (not (setq FlgSlt T)) 
          (if (= 52 (getvar "ERRNO"))
            (setq FlgSlt T)
            (prompt
              (strcat
                "\nNessun oggetto selezionato o valido, riprova!" PrmStr
              )
            )
          )
        )
      )
      (not (princ "\nComando annullato.  "))
      SelSet
    )
)
;
(defun C:ALE_GetWeight ( / EntObj VolVal WSpVal)
  (vl-load-com)
  (if (setq EntObj (ALE_EntSelFilter "Seleziona un solido" '((0 . "3DSOLID"))))
    (progn
      (setq
        EntObj (ALE_vlax-Ename>Vla-Object EntObj)
        VolVal (vla-get-Volume EntObj)
        WSpVal (getreal "\nPeso specifico: ")
      )
      (if WSpVal
        (princ
          (strcat
            "\nVolume: " (rtos VolVal 2 1)
            " - Peso: " (rtos (* VolVal WSpVal 0.000001) 2 1)
          )
        )
      )
    )
  )
  (princ)
)
;
; Copyright ©2005 - Marc'Antonio Alessi, Italy - All rights reserved
; 
http://xoomer.alice.it/alessi
;
; Function: ALE_EntSelFilter
;
; Version 1.00 - 22/02/2005
;
; Description:
;   Ssget for one entity with filter list
;
; Arguments:
;   PrmStr = User prompt [STR]
;   FltLst = ssget filter list [LIST]
;
; Example:
;  (ALE_EntSelFilter "Select attibuted block" '((0 . "INSERT") (66 . 1)))
;
; Return Values:
;   [ENAME] Entity name
;   nil if user press 'Return' or 'Space'
;
(defun ALE_EntSelFilter (PrmStr FltLst / FlgSlt EntNam)
    (princ "\n_ ")
    (prompt (setq PrmStr (strcat "\n" PrmStr ": ")))
    (if
      (while (not FlgSlt)
        (if (setq EntNam (ssget "_:E:S" FltLst))
          (not (setq FlgSlt T)) 
          (if (= 52 (getvar "ERRNO"))
            (setq FlgSlt T)
            (prompt (strcat "\nNessun oggetto selezionato o valido, riprova!" PrmStr))
          )
        )
      )
      (not (princ "\nComando annullato.  "))
      (ssname EntNam 0)
    )
)
;
; Function: ALE_vlax-Ename>Vla-Object
;
; Version 1.00 - 22/02/2005
;
; Description:
;   Validate input object
;
; Arguments:
;   EntObj = [VLA-OBJECT] or [ENAME]
;
; Return Values:
;   [VLA-OBJECT] if valid input object
;   nil otherwise
;
(defun ALE_vlax-Ename>Vla-Object (EntObj)
    (cond
      ( (= (type EntObj) 'VLA-OBJECT) EntObj )
      ( (= (type EntObj) 'ENAME) (setq EntObj (vlax-Ename->Vla-Object EntObj)) )
      (T (prompt "\nTipo di oggetto non valido!  ") )
    )
)

 Quello che segue è l'ultima version completa.
Ciao
Ti ringrazio, ma purtroppo continua a non funzionare.
Ho usato la stessa procedura, che ti quoto aggiornata:
1 Copia (il listato dalla tua mail)
2 Acad / Strumenti / Autolisp / Editor
3 Nuovo e poi Incolla (devo fare NUOVO perchè nella finestra Traccia non lo 
fa incollare, mentre nella finestra Console lo incolla ma poi è disattivo 
Salva)
4 Salva come: massa.lsp in una mia dir (ho provato anche a salvarlo come 
tmp.lsp di default)
5 Strumenti / Autolisp / Carica massa.lsp
6 idem / Gruppo di avvio / Contenuto / Aggiungi massa.lsp (o tmp.lsp)
7 Salvo il mio disegno, chiudo e riapro Acad e disegno
8 Digito "massa", comando sconosciuto
9 In Autolisp / Applicazioni caricate: c'è ma è inattivo (grigio chiaro)
10 idem / Cronologia: c'è
E' corretto dargli un mio nome (massa)?
E' corretto salvarlo in un mia dir?
Come si lancia?
Grazie ancora e ciao

1 Copia (il listato dalla tua mail)
2 Apri Notepad e poi Incolla
4 Salva come: massa.lsp in una mia dir
5 Strumenti / Autolisp / Carica massa.lsp
6 idem / Gruppo di avvio / Contenuto / Aggiungi massa.lsp (o tmp.lsp)
8 Digito ALE_GetTotalWeight

"Marco_AA" <Marco_AA@Marco_AA.com> ha scritto

Ora finalmente si installa, però... non funziona bene.
Digito ALE_GetTotalWeight e introduco il Peso Specifico
Nella riga di comando mi da il Volume vero, e il Peso Totale = 0 (zero)
Digito propmass e ci sono Massa vera uguale a Volume vero (come prima della 
tua routine)
Porta pazienza...
Grazie e ciao