Python indirizzo relativo

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

Moderatori: Arkimed, natas, visualtricks, cappellaiomatto

  • Advertising
IoAro
Messaggi: 51
Iscritto il: ven lug 30, 2010 1:06 pm

Python indirizzo relativo

Messaggio da IoAro »

Salve a tutti,
ho creato un semplice script per richiamare dei video tutorial (o pdf) direttamente da cinema, così da potermi rinfrescare velocemente le varie funzioni/settaggi di plugin e script.
Lo script funziona, ma mi piacerebbe compilarlo indicando l'indirizzo relativo anziché quello assoluto. Per esempio invece di "C:\Program Files\MAXON\CINEMA 4D R18\plugins\Video\Thrausi 1.mp4" vorrei trovare una formula simile a "(cartella plugin)\Video\Thrausi 1.mp4" in modo tale da poter trasportare gli script alle versione successive senza doverli modificare tutti a mano (R18, R19, ecc...).
Per maggior chiarezza, ecco lo script completo:

import c4d
from os import path as p
from c4d import storage as st
from c4d import gui

def main():

st.ShowInFinder("C:\Program Files\MAXON\CINEMA 4D R18\plugins\Video\Thrausi 1.mp4", True)

if __name__=='__main__':
main()

Qualcuno può aiutarmi?

Grazie in anticipo e buona giornata
Avatar utente
visualtricks
Moderatore
Messaggi: 3562
Iscritto il: gio set 23, 2004 5:13 pm
Località: Pistoia

Re: Python indirizzo relativo

Messaggio da visualtricks »

Ciao, prova a dare un'occhiata qua:
https://developers.maxon.net/docs/Cinem ... GetC4DPath
Immagine
๏_www.visualtricks.it_๏ .:: COMPUTER SAYS NO ::.
IoAro
Messaggi: 51
Iscritto il: ven lug 30, 2010 1:06 pm

Re: Python indirizzo relativo

Messaggio da IoAro »

visualtricks ha scritto:Ciao, prova a dare un'occhiata qua:
https://developers.maxon.net/docs/Cinem ... GetC4DPath
Grazie Per la risposta Visualtricks,
ed effettivamente si, ci avevo guardato e ho provato ad usare alcune di quelle stringhe nell'indirizzo dello script ma non ha funzionato... tu sapresti dirmi come si dovrebbe compilare correttamente un indirizzo relativo con quelle istruzioni?
Avatar utente
visualtricks
Moderatore
Messaggi: 3562
Iscritto il: gio set 23, 2004 5:13 pm
Località: Pistoia

Re: Python indirizzo relativo

Messaggio da visualtricks »

Ciao, rileggendo l'SDK in effetti non c'è un comando diretto per risalire alla directory dei plugin (o meglio, c'è ma restituisce la directory dove risiede il modulo python). Se tu creassi un plugin normale potresti usare __file__ per avere la posizione corretta, ma nel tuo caso usando uno script devi fare qualche passaggio in più:

Codice: Seleziona tutto

import c4d
import os

#Welcome to the world of Python

def main():
    
    app_path = c4d.storage.GeGetStartupApplication()  # percorso all'eseguibile di cinema (cinema4d.app o cinema4d.exe)

    cinema_dir =  os.path.abspath(os.path.join(app_path, os.pardir)) # os.pardir -> va su di un livello rispetto a app_path

    plugin_dir = os.path.join(cinema_dir, "plugins")  # concatena il percorso cinema_dir con la directory dei plugin

    your_dir =  os.path.join(cinema_dir, "plugins", "video")  # concatena il percorso alla directory plugin con la tua sottocartella
    
    print app_path
    print cinema_dir
    print plugin_dir
    print your_dir

if __name__=='__main__':
    main()
Immagine
๏_www.visualtricks.it_๏ .:: COMPUTER SAYS NO ::.
IoAro
Messaggi: 51
Iscritto il: ven lug 30, 2010 1:06 pm

Re: Python indirizzo relativo

Messaggio da IoAro »

visualtricks ha scritto:Ciao, rileggendo l'SDK in effetti non c'è un comando diretto per risalire alla directory dei plugin (o meglio, c'è ma restituisce la directory dove risiede il modulo python). Se tu creassi un plugin normale potresti usare __file__ per avere la posizione corretta, ma nel tuo caso usando uno script devi fare qualche passaggio in più:

Codice: Seleziona tutto

import c4d
import os

#Welcome to the world of Python

def main():
    
    app_path = c4d.storage.GeGetStartupApplication()  # percorso all'eseguibile di cinema (cinema4d.app o cinema4d.exe)

    cinema_dir =  os.path.abspath(os.path.join(app_path, os.pardir)) # os.pardir -> va su di un livello rispetto a app_path

    plugin_dir = os.path.join(cinema_dir, "plugins")  # concatena il percorso cinema_dir con la directory dei plugin

    your_dir =  os.path.join(cinema_dir, "plugins", "video")  # concatena il percorso alla directory plugin con la tua sottocartella
    
    print app_path
    print cinema_dir
    print plugin_dir
    print your_dir

if __name__=='__main__':
    main()
Grazie ancora Visualtricks,
ho capito, a livello concettuale, quello che m'hai riportato.
Purtroppo non essendo un campione in Python poi non so come concludere la questione, ovvero... in questo codice, se ho ben capito, c'è la definizione dei percorsi, ma come faccio poi ad applicarli alla stringa st.ShowInFinder("C:\Program Files\MAXON\CINEMA 4D R18\plugins\Video\Thrausi 1.mp4", True)?
O meglio, come posso sostituire il pezzo "C:\Program Files\MAXON\CINEMA 4D R18" (o addirittura "C:\Program Files\MAXON\CINEMA 4D R18\plugins\Video") con una definizione assoluta?

Grazie ancora per la disponibilità e perdona la mia ignoranza...
Avatar utente
visualtricks
Moderatore
Messaggi: 3562
Iscritto il: gio set 23, 2004 5:13 pm
Località: Pistoia

Re: Python indirizzo relativo

Messaggio da visualtricks »

In quel codice i vari percorsi sono assegnati a delle variabili (app_path, cinema_dir, plugin_dir, ecc), che puoi usare dove vuoi. Nel tuo caso specifico, supponendo che tu abbia una cartella "video" dentro "plugins" e che all'interno ci sia un file chiamato Thrausi.mp4 :

Codice: Seleziona tutto

import c4d
import os
from c4d import storage as st

def main():
    
    app_path = c4d.storage.GeGetStartupApplication() 
    cinema_dir =  os.path.abspath(os.path.join(app_path, os.pardir)) 
    your_file =  os.path.join(cinema_dir, "plugins", "video", "Thrausi.mp4")  
    st.ShowInFinder(your_file, True)

if __name__=='__main__':
    main() 
Definendo i percorsi in questa maniera lo script funziona su qualsiasi versione di cinema, a patto ovviamente che tu abbia sempre la cartella video dentro plugins.

Cmq se posso, non faresti prima a fare una libreria dei video all'interno del content browser? Li avresti tutti radunati in un unico file (.lib4d) e basterebbe copiare quello nelle varie versioni di cinema...
Immagine
๏_www.visualtricks.it_๏ .:: COMPUTER SAYS NO ::.
IoAro
Messaggi: 51
Iscritto il: ven lug 30, 2010 1:06 pm

Re: Python indirizzo relativo

Messaggio da IoAro »

Perfetto!
Grazie infinitamente, mi hai risparmiato non poco tempo e, soprattutto, mi hai spiegato molto chiaramente come questo succede.
Comunque riguardo alla libreria certo che puoi (anzi, devi) ed anch'io, inizialmente, avevo pensato ad una soluzione simile anche perché apprezzo grandemente le librerie di cinema (tranne per dei problemi mai completamente risolti coi percorsi delle texture per alcuni canali di alcuni materiali V-Ray) ma ho trovato un problema: mettendo un video o un pdf in una libreria e cercando di aprirlo col doppio clic da content browser non si apre esternamente (quindi con Acrobat o col riproduttore video) ma cerca di aprirlo in cinema ovviamente non riuscendoci: se anche per questo hai una soluzione, sarebbe graditissima!

In ogni caso grazie ancora, sei gentilissimo...
Avatar utente
visualtricks
Moderatore
Messaggi: 3562
Iscritto il: gio set 23, 2004 5:13 pm
Località: Pistoia

Re: Python indirizzo relativo

Messaggio da visualtricks »

mettendo un video o un pdf in una libreria e cercando di aprirlo col doppio clic da content browser non si apre esternamente
Uhm, strano..magari dipende dal tipo di file? A me gli mp4 li apre con VLC, pdf non ho mai provato in effetti
Immagine
๏_www.visualtricks.it_๏ .:: COMPUTER SAYS NO ::.
IoAro
Messaggi: 51
Iscritto il: ven lug 30, 2010 1:06 pm

Re: Python indirizzo relativo

Messaggio da IoAro »

Ho riprovato e niente...
Se creo una libreria e ci metto video (vari formati) e pdf, questi, cliccandoci sopra, non partono: i video fanno aprire la finestra d'importazione dei file Rhino e i pdf non danno segni di vita.
Non escludo che ci sia qualcosa di non a posto nella mia installazione, magari ci riprovo dopo una formattazione.
In ogni caso la questione è risolta e ti ringrazio ancora; la tentazione è di chiederti un altro paio di cose che non ho risolto, ma non voglio esagerare!

Buona giornata, grazie ancora!
Avatar utente
visualtricks
Moderatore
Messaggi: 3562
Iscritto il: gio set 23, 2004 5:13 pm
Località: Pistoia

Re: Python indirizzo relativo

Messaggio da visualtricks »

In ogni caso la questione è risolta e ti ringrazio ancora; la tentazione è di chiederti un altro paio di cose che non ho risolto, ma non voglio esagerare!
chiedi chiedi, ci piace python :)
Immagine
๏_www.visualtricks.it_๏ .:: COMPUTER SAYS NO ::.
  • Advertising
Rispondi