Antworten auf deine Fragen:
Neues Thema erstellen

Digtaluhr mit XPRESSO

KBB

Mod 3D | Blaubaer

Teammitglied
AW: Digtaluhr mit XPRESSO

Ach modulo ist ja für den Rest einer Teilung. Dann ginge anstatt
var Bildnummer = 10 * ((Minuten/10) - Int(Minuten/10));
auch
var Bildnummer = Minuten mod 10;
oder muss es hier
var Bildnummer = modulo (Minuten,10);
sein?

Edit: toni, die Uhr selbst arbeitet bei smart ja, im Moment möchte er die Materialien rechts im Bild jede Minute austauschen.
 

NT2005

Von dannen.

AW: Digtaluhr mit XPRESSO

Ohje, lesen ist wohl nicht meine Stärke mehr. :uhm:

Materialien mit den Namen 0-9, für jede Ziffer ein eigenes Objekt. Material für das Foto-Objekt mit 10 verschiedenen Texturen im Bildverzeichnis (Texture01.png).

Code:
/*
 * Set Texture Of A Single Display
 */ 
SetTexture(doc, obj, number) {
    var mat = doc->FindMaterial(tostring(int(number)));
    if(mat == NULL) {return;}
    var material_tag = obj->GetFirstTag();
    while(material_tag) {
        if(material_tag->GetType() == Ttexture) {
            material_tag->SetMaterial(mat->GetMarker());
            break;
        }

        material_tag = material_tag->GetNext();
    }
}

main(doc,op)
    {
    
    // Get Current Time
    var time = GeGetSysTime();
    var hour = time->hour;
    var minute = time->minute;
    var second = time->second;
    
    // Calculate Time
    // Format: hour2 hour1 : min2 min1 : sec2 sec1
    var hour2 = hour/10;
    var hour1 = Modulo(hour,10);
    
    var min2 = minute/10;
    var min1 = Modulo(minute,10);
    
    var sec2 = second/10;
    var sec1 = Modulo(second,10);
    
    
    // Object Names Of Each Display
    var names=new(array,6,1);
    names[0] = "hour2_obj";
    names[1] = "hour1_obj";
    names[2] = "min2_obj";
    names[3] = "min1_obj";
    names[4] = "sec2_obj";
    names[5] = "sec1_obj";
    
    // Update Material For Each Display
    var i = 0;
    for(i; i<6; i++) {
        var obj = doc->FindObject(names[i]);
        if(obj == NULL) {continue;}
        SetTexture(doc, obj, min1);
    }

    // Set Photo Material
    var photo = doc->FindMaterial("PhotoMaterial");
    if(photo == NULL) {return;}

    var texture_name = "Texture" + tostring(int(min1)) + ".png";
    var col = photo->GetChannel(CHANNEL_COLOR);
    var colBc = photo->GetContainer();
    colBc->SetData(CH_TEXTURE, texture_name);
    println(colBc->GetData(CH_TEXTURE));
    col->SetContainer(colBc);
    EventAdd();
}
 
Zuletzt bearbeitet:

KBB

Mod 3D | Blaubaer

Teammitglied
AW: Digtaluhr mit XPRESSO

Jo, nur mit 10 Bildern anstatt 60, siehe Post #18 .
Deshalb mein Modulo-Versuch oben. Aber ich halte mich jetzt raus :D
 
G

Gelöschtes Mitglied 467863

Guest

AW: Digtaluhr mit XPRESSO

Danke NT2005.

Deinen Code habe ich mir schon mal gespeichert (for the Future).

Den Namen des Material müsste ich doch so erhalten:

main()
{
var time = GeGetSysTime();
var minute = time->minute;
var smin = tostring(Modulo(minute,10));

var Material = stradd("Bild-", smin);

}

(Nur für mein Verständnis).

Ich habe nur 10 Materialien. Das Objekt ist eine Ebene mit dem Namen »Bild«. Kann man über diesen Namen direkt darauf zugreifen?

Gruß smart88
 
Zuletzt bearbeitet von einem Moderator:

NT2005

Von dannen.

AW: Digtaluhr mit XPRESSO

Hey Smart,

Ja klar geht das so. Ich verwende eben: var texture_name = "Texture" + tostring(int(min1)) + ".png"; Kommt am Ende auf das Gleiche.

@KBB: Habe es schon geändert auf 10 Bildern. ;)
 
G

Gelöschtes Mitglied 467863

Guest

AW: Digtaluhr mit XPRESSO

Hallo NT2005.

Tauschst du mit "Set Photomaterial" die Bilder in der Textur aus?

Danke
 

NT2005

Von dannen.

AW: Digtaluhr mit XPRESSO

Richtig, ich tausche den Texturlink (Farb-Shader) aus. Du kannst aber auch, wie im ersten Teil, 10 Materialien erstellen.
 
G

Gelöschtes Mitglied 467863

Guest

AW: Digtaluhr mit XPRESSO

Hallo.

Ich habe das Script mal angepasst.

Code:
main()
{
    var Time = GeGetSysTime();
    var Stunden = Time->hour;
    var Minuten = Time->minute;
    var Tage = Time->day;
    var Monat = Time->month;
    var Jahr = Time->year;

    var tmin = tostring(Modulo(Minuten,10));
    var image_name = stradd("Wecker-", tmin, ".jpg");
    var texture_name = "Bild";

    var shour = tostring(Stunden);
    if(Stunden<10)
    { shour = stradd("0",shour);};

    var smin = tostring(Minuten);
    if(Minuten <10)
    { smin = stradd("0",smin);};

    var stag= tostring(Tage);
    if(Tage<10)
    { stag = stradd("0",stag);};

    var smon=tostring(Monat);
    if(Monat <10)
    { smon = stradd("0",smon);};

    var sjahr = tostring(Jahr);
    if(Jahr<10)
    { shour =stradd("0",sjahr);};

    var Uhrzeit = stradd(shour,":",smin);
    var Datum = stradd(stag,".",smon,".",sjahr);

    Anzeige_Uhrzeit = (Uhrzeit);
    StatusSetText(Anzeige_Uhrzeit);

    Anzeige_Datum = (Datum);
    StatusSetText(Anzeige_Datum);

    var photo = doc->FindMaterial(texture_name);    <-- In dieser Zeile sollte der Fehler stehen

    if(photo == NULL)
    { return;
    }

    var col = photo->GetChannel(CHANNEL_COLOR);
    var colBc = photo->GetContainer();
    colBc->SetData(CH_TEXTURE, image_name);
    println(colBc->GetData(CH_TEXTURE));
    col->SetContainer(colBc);
    EventAdd();

}


Leider funktioniert es so nicht. Irgendwo habe ich noch einen Fehler drin (Zeile 43/Spalte 22, Variable or function expected). Finde den Fehler aber nicht (Betriebsblind).

Danke im voraus
smart88
 
Zuletzt bearbeitet von einem Moderator:
G

Gelöschtes Mitglied 467863

Guest

AW: Digtaluhr mit XPRESSO

Guten Morgen.

Wenn ich main(doc) schreibe, erhalte ich als Fehlermeldung: zuviele Parameter.
 
G

Gelöschtes Mitglied 467863

Guest

AW: Digtaluhr mit XPRESSO

Danke mp5gosu.

Ich erhalte jetzt keine Fehlermeldung mehr. Aber die Bilder im Farbshader werden nicht geändert.

-------------
Sorry habe den Fehler gefunden.

var tmin = tostring(Modulo(Minuten,10));

geändert in

var tmin = tostring(int (Modulo(Minuten,10)));

Er hat z.B. Wecker-1.00000.jpg in den Shader geschrieben.

Beim rendern meckert er aber immer an, dass er das Bild nicht findet; z.B. Wecker-3.jpg

Die Bilder stehen im gleichen Pfad wie die c4d-Datei und nochmals im Texture-Suchpfad, so dass er sie finden müsste.

Gruß smart88
 
Zuletzt bearbeitet von einem Moderator:
G

Gelöschtes Mitglied 467863

Guest

AW: Digtaluhr mit XPRESSO

Nachdem dies nicht funktionierte, habe ich mich für die Lösung mit 10 Texturen entschieden. Habe dem Bild-Objekt eine eigene C.O.F.F.E.E Expression mit nachstehendem Code zugewiesen.

main(doc,op)
{ var time = GeGetSysTime();
var minute = time->minute;
var t_min = tostring(int(Modulo(minute,10)));
var t_name = stradd("Bild-", t_min);
var t_obj_name = "Bild";
var doc = GetActiveDocument();
var obj = doc->FindObject(t_obj_name);

if(obj == NULL) {return; }

var mat = doc->FindMaterial(t_name);

if(mat == NULL) { return; }

var material_tag = obj->GetFirstTag();

while(material_tag)
{ if(material_tag->GetType() == Ttexture)
{ material_tag->SetMaterial(mat->GetMarker());
break;
}
material_tag = material_tag->GetNext();
}

EventAdd();
}

Jetzt funktioniert der Bildwechsel und die Uhrzeit sogar ohne dass man etwas tun muss.

Danke euch allen für eure Hilfe.

smart88
 
Zuletzt bearbeitet von einem Moderator:

KBB

Mod 3D | Blaubaer

Teammitglied
AW: Digtaluhr mit XPRESSO

Beim rendern meckert er aber immer an, dass er das Bild nicht findet; z.B. Wecker-3.jpg
Vielleicht muss das System das Bild schon geladen haben, so wie der Code im Moment ist. Eine Möglichkeit, das zu prüfen, wäre, mal testhalber 10 Materialien mit den 10 Bildern vorzubereiten. Nicht so wie Du es jetzt machst und die 10 benutzen, sondern nur um zu sehen, was passiert, wenn die Bilder der Szene schon bekannt sind. Evtl. fehlt dann noch ein Stück Code, oder COFFEE kommt im Gegensatz zu Python mit dem Laden nicht klar - hatte nicht schon jemand sowas getippt die Tage?
 
G

Gelöschtes Mitglied 467863

Guest

AW: Digtaluhr mit XPRESSO

Hallo KBB.

Ich habe das mal getestet. Zum Glück hatte ich mir den Code gespeichert und konnte ihn einfach neu laden.

Du hast recht, die Images müssen in einer Textur geladen sein (sie liegen dann im Cache von Cinema). Sofort hat der Code funktioniert,

Super!!!!!

Danke dir.
 

KBB

Mod 3D | Blaubaer

Teammitglied
AW: Digtaluhr mit XPRESSO

Gerne.
Jetzt wäre das ganze in Python doch sehr interessant, da das wohl weniger Probleme und mehr Problemlösungen in Sachen Laden & Speichern bereithält. Mich würde interssieren, ob das auch auf sowas wie das Laden von Texturen, die *nicht* im Speicher vorliegen, zutrifft.
 
G

Gelöschtes Mitglied 467863

Guest

AW: Digtaluhr mit XPRESSO

Sorry, aber mit Python habe ich mich noch garnicht befasst, Ist das ein zusätzliches Modul?
 

KBB

Mod 3D | Blaubaer

Teammitglied
AW: Digtaluhr mit XPRESSO

Welche Cinema Version hast Du denn?
Trag die doch mal links in Deinem Profil ein, neben Corel X5
 

KBB

Mod 3D | Blaubaer

Teammitglied
AW: Digtaluhr mit XPRESSO

Ah schade, dann ist das noch nicht drin.
Es gab bis zur R12 ein Plugin Py4D, das wird seit Erscheinen der R12 aber nicht mehr unterstützt. K.A. ob das Plug selbst vllt. noch mit älteren Versionen läuft. Wenns Dich interessiert - Python scheint in einigen Dingen COFFEE überlegen zu sein - dann schau mal hier vorbei:
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.611
Beiträge
1.538.341
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben