Codice Python

Forum per: Modellazione, Texturing, Animazione, Composting e tutto quello che riguarda il normale utilizzo di Cinema4D.

Moderatori: Arkimed, natas, visualtricks, cappellaiomatto

  • Advertising
Avatar utente
flowbox
Messaggi: 2545
Iscritto il: mar mag 20, 2008 8:29 pm
Località: Repubblica Dominicana

Codice Python

Messaggio da flowbox »

bene... mi sto cimentando un po con la programmazione...

naturalmente non sono proprio riuscito a creare lo snap come lo volevo io e quindi ho pensato di fare un'altro script che sarebbe utilissimo e che dovrebbe sopperire ad una mancanza del soft che fino ad oggi è stata ignorata da Maxon

riguarda il FFD free form deformation... che in cinema si applica in modo molto macchinoso

in 3ds max ed in maya per applicarlo è sufficiente selezionare l'oggetto o una selezione di un oggetto ed applicandolo il ffd prendera la stessa posizione e dimension dell'oggetto o della selezione, molto comodo e senza possibilita di errori o parti che non vengano incluse anche in oggetti molto complessi, invece in cinema va applicato, quindi va ridimensionato a seconda dell'oggetto a cui applicarlo... ma attenzione che deve essere fatto tramite l'object properties... se si cambia la dimensione nel viewport si ridimensiona anche l'ggetto a cui va applicato

tutta la premessa perche ho creato un piccolo script che dovrebbe farlo in automatico, allo stesso modo che 3ds o maya

MA NON FUNZIONA!!!!!!!

viene applicato ma nonostante nell'object properties ci siano scritte le corrette misure del modificatore... non le prende, cioe rimane della misura standard....

qui c'e il codice, se qualcuno volesse dare una mano farebbe un regalo alla comunita di c4d users :)

Codice: Seleziona tutto

#FFD Applicatore Python
import c4d
from c4d import gui

def main():
    ModFFD = c4d.BaseObject(5108)
    OggSelezionato = doc.GetActiveObjects(0)


    if len(OggSelezionato)>0:
      for ListOb in OggSelezionato:
        BRad = ListOb.GetRad()
        op.DelBit(c4d.BIT_ACTIVE)
        ModFFD.SetBit(c4d.BIT_ACTIVE)
        ModFFD[c4d.FFDOBJECT_SIZE]=(BRad*2)
        doc.InsertObject(ModFFD,ListOb)
        doc.AddUndo(c4d.UNDOTYPE_NEW, ModFFD)
        doc.EndUndo()
        c4d.EventAdd()
        
    else:
        gui.MessageDialog('Devi selezionare un oggetto')    
             
if __name__=='__main__':
    main()
Non ho piu freddo e NON PAGO PIU LE TASSE.... vivo qui:

http://www.infolasgaleras.com
________

http://www.websolutionsdf.com
______________________________
Avatar utente
nemesi
Messaggi: 525
Iscritto il: lun mar 28, 2005 4:22 am
Località: ascoli piceno

Re: Codice Python

Messaggio da nemesi »

ciao Flow :)
facendo un copia incolla veloce ho notato un piccolo problema di indentatura al for (linea 11) che, tra l'altro, la console non rileva.
Comunque, aggiustato questo, a me funziona...ma fa il contrario di quello che chiedi tu perché dimensiona l'oggetto sulla base della gabbia e non viceversa come ouoi vedere dal''immagine :?

Codice: Seleziona tutto

#FFD Applicatore Python
import c4d
from c4d import gui

def main():
    ModFFD = c4d.BaseObject(5108)
    OggSelezionato = doc.GetActiveObjects(0)


    if len(OggSelezionato)>0:
        for ListOb in OggSelezionato:
            BRad = ListOb.GetRad()
            op.DelBit(c4d.BIT_ACTIVE)
            ModFFD.SetBit(c4d.BIT_ACTIVE)
            ModFFD[c4d.FFDOBJECT_SIZE]=(BRad*2)
            doc.InsertObject(ModFFD,ListOb)
            doc.AddUndo(c4d.UNDOTYPE_NEW, ModFFD)
            doc.EndUndo()
            c4d.EventAdd()
        
    else:
        gui.MessageDialog('Devi selezionare un oggetto')    
             
if __name__=='__main__':
    main()
Allegati
Cattura.JPG
Estrudi da questo corpo!
Avatar utente
flowbox
Messaggi: 2545
Iscritto il: mar mag 20, 2008 8:29 pm
Località: Repubblica Dominicana

Re: Codice Python

Messaggio da flowbox »

si..qui è il problema

fai un parallelepipedo di misura strana tipo 250x390x605

poi applica lo script

ora vedrai il cubo diventa 200x200x200 che è la misura standard del ffd alla creazione... pero sia nelle misure del cubo che in quelle del ffd vedrai che i valori sono quelli del cubo originale cioe 250x390x605

e qui non mi ci raccapezzo (lo)
Non ho piu freddo e NON PAGO PIU LE TASSE.... vivo qui:

http://www.infolasgaleras.com
________

http://www.websolutionsdf.com
______________________________
Avatar utente
nemesi
Messaggi: 525
Iscritto il: lun mar 28, 2005 4:22 am
Località: ascoli piceno

Re: Codice Python

Messaggio da nemesi »

e aggiungo: se modifichi le misure dell'FFD a 100 100 100 non diventa un cubo lato 100...
faccaimo così prova ad aggiungere dei commenti al codice così magari (almeno spero) diventa tutto più chiaro
e poi volevo domandarti l'uso di funzioni come DelBit e SetBit...senza le righe 13 e 14 pare che funziona lo stesso (vabé funziona per modo di dire ;) )
Estrudi da questo corpo!
Avatar utente
flowbox
Messaggi: 2545
Iscritto il: mar mag 20, 2008 8:29 pm
Località: Repubblica Dominicana

Re: Codice Python

Messaggio da flowbox »

ok aspetta che provo a commentare... pero mi è venuto in mente un escamotage... si dovrebbe scalare (invece di dimensionarlo) prima il FFD in base all'oggetto e poi applicarlo... dovrebbe funzionare, solo che il codice per scalare lo sto studiando...

cmq asp che ti posto il tutto commentato
Non ho piu freddo e NON PAGO PIU LE TASSE.... vivo qui:

http://www.infolasgaleras.com
________

http://www.websolutionsdf.com
______________________________
Avatar utente
nemesi
Messaggi: 525
Iscritto il: lun mar 28, 2005 4:22 am
Località: ascoli piceno

Re: Codice Python

Messaggio da nemesi »

non sarebbe una idea tanto malvagia la tua... :)
Estrudi da questo corpo!
Avatar utente
flowbox
Messaggi: 2545
Iscritto il: mar mag 20, 2008 8:29 pm
Località: Repubblica Dominicana

Re: Codice Python

Messaggio da flowbox »

si e dovrebbe funzionare... solo devo capire sto codice per scalare... puff puff... mica facile per me

http://chicagoc4d.com/C4DPythonSDK/misc ... ental.html

cmq qui ho commentato il codice di prima

Codice: Seleziona tutto

#FFD Applicatore Python
import c4d
from c4d import gui

def main():
    ModFFD = c4d.BaseObject(5108)
    OggSelezionato = doc.GetActiveObjects(0)


    if len(OggSelezionato)>0:#controlla lunghezza ogg. sel. non sia 0
        for ListOb in OggSelezionato:
            BRad = ListOb.GetRad()#ottiene dimensione oggetto e la mette in BRad
            op.DelBit(c4d.BIT_ACTIVE)#deseleziona oggetti
            ModFFD.SetBit(c4d.BIT_ACTIVE)#seleziona FFD
            ModFFD[c4d.FFDOBJECT_SIZE]=(BRad*2)#dovrebbe dimensionare il FFD non so il motivo ma la dimensione va moltiplicata x 2
            doc.InsertObject(ModFFD,ListOb)#inserisce il FFD figlio dell 'oggetto 
            doc.AddUndo(c4d.UNDOTYPE_NEW, ModFFD)
            doc.EndUndo()
            c4d.EventAdd()
        
    else:
        gui.MessageDialog('Devi selezionare un oggetto')    
             
if __name__=='__main__':
    main()
Non ho piu freddo e NON PAGO PIU LE TASSE.... vivo qui:

http://www.infolasgaleras.com
________

http://www.websolutionsdf.com
______________________________
Avatar utente
nemesi
Messaggi: 525
Iscritto il: lun mar 28, 2005 4:22 am
Località: ascoli piceno

Re: Codice Python

Messaggio da nemesi »

mmmh più complesso di quanto immaginassi questo fatto di scalare!
il BRad non so perché, ma è come dici anche tu e cioè va raddoppiato.
ho fatto una prova che non m'ha convinto:
nella riga

doc.InsertObject(ModFFD,ListOb)

il parametro ListOb dice all'FFD di posizionarsi con il proprio asse sull'asse dell'oggetto a cui si applica, ma se l'oggetto ha l'asse decentrato (come può essere l'asse di un oggetto poligono) non si troverà al centro dell'oggetto e quindi prima aggiungerei uno script per centrare l'asse...faccio una prova
Estrudi da questo corpo!
Avatar utente
nemesi
Messaggi: 525
Iscritto il: lun mar 28, 2005 4:22 am
Località: ascoli piceno

Re: Codice Python

Messaggio da nemesi »

ecco appena dopo il costrutto if andrebbe aggiunto
c4d.CallCommand(1011982) #centro asse oggetto selezionato
Estrudi da questo corpo!
Avatar utente
flowbox
Messaggi: 2545
Iscritto il: mar mag 20, 2008 8:29 pm
Località: Repubblica Dominicana

Re: Codice Python

Messaggio da flowbox »

vero... non ci avevo pensato... è esattamente come dici cosi centra l'asse

comunque lo scala non ci arrivo, trovassi almento uno script di esempio... invece solo delle info complesse
Non ho piu freddo e NON PAGO PIU LE TASSE.... vivo qui:

http://www.infolasgaleras.com
________

http://www.websolutionsdf.com
______________________________
  • Advertising
Rispondi