Topic: Klok maken met drivers  (gelezen 6148 keer)


Offline JvL

  • Member
  • *
  • Berichten: 3,415
    • Bekijk profiel
    • Llyr Studio
« Gepost op: 15 januari 2015, 01:17:06 am »

Offline IJp

  • *
  • Berichten: 4,385
    • Bekijk profiel
    • IJpart
« Reactie #1 Gepost op: 15 januari 2015, 10:26:03 am »
Met die driver moet ik ook nog leren omgaan en die klok is daar een mooie tutorial voor.
Weer Bedankt JvL.

Offline Zaph

  • Member
  • *
  • Berichten: 540
    • Bekijk profiel
    • Zaph webdevelopment
« Reactie #2 Gepost op: 15 januari 2015, 13:18:02 pm »
Heerlijk die tutorials die niet goed voorbereid zijn - "Huh? De secondewijzer draait de verkeerde kant op!"  ;)

Offline JvL

  • Member
  • *
  • Berichten: 3,415
    • Bekijk profiel
    • Llyr Studio
« Reactie #3 Gepost op: 15 januari 2015, 13:36:40 pm »
Zijn klok heeftna 24 uur ook een kleine afwijking, haha. Maar het gaat om het principe.  ;)

Offline Zaph

  • Member
  • *
  • Berichten: 540
    • Bekijk profiel
    • Zaph webdevelopment
« Reactie #4 Gepost op: 15 januari 2015, 13:50:51 pm »
Hier is mijn versie waar ik het eerder over had - die wel goed loopt...  ;)

Het enige is dat je er zelf op moet letten dat je voor de uren en minuten hele getallen invoert, dus niks achter de komma. Voor de tijd ga je naar Klok > Object tab > Custom properties

http://blender.zaph.nl/klok-met-drivers.blend
« Laatst bewerkt op: 15 januari 2015, 13:53:53 pm door Zaph »

Offline Ruud

  • Member
  • *
  • Berichten: 1,860
    • Bekijk profiel
« Reactie #5 Gepost op: 16 januari 2015, 06:46:41 am »
Het tikken het geluid van de klok kan men ook met een driver instellen .

Offline PKHG

  • Member
  • *
  • Berichten: 718
    • Bekijk profiel
« Reactie #6 Gepost op: 16 januari 2015, 11:34:14 am »
Hier is mijn versie waar ik het eerder over had - die wel goed loopt...  ;)

Het enige is dat je er zelf op moet letten dat je voor de uren en minuten hele getallen invoert, dus niks achter de komma. Voor de tijd ga je naar Klok > Object tab > Custom properties

http://blender.zaph.nl/klok-met-drivers.blend

En leg je aan domme Peter nog uit, hoe je je klok aan het lopen brengt?
De tutorial boven legt het voor mijn niet uit, te lang en voor mij niet duidelijk, begint met de
seconde wijzer laten rondlopen , misschien ben ik te ongeduldig en hebde film  te snel naar vooren  geschoven ...
Doei
       Peter

Offline Zaph

  • Member
  • *
  • Berichten: 540
    • Bekijk profiel
    • Zaph webdevelopment
« Reactie #7 Gepost op: 16 januari 2015, 13:03:32 pm »
De video gebruikt alleen seconden, dus da's niet heel intuitief in te stellen, maar wel makkelijk te animeren - gewoon op 'i' drukken op de start en eindframes, en zorgen dat de animatie geen curve maar een vector is.

Mijn versie wordt lastiger animeren als je meer dan een uur voorbij laat gaan, maar aangezien dat misschien minder vaak zal gebeuren kun je gewoon de waarde van 'Seconde' ketframen.

Offline IJp

  • *
  • Berichten: 4,385
    • Bekijk profiel
    • IJpart
« Reactie #8 Gepost op: 16 januari 2015, 14:12:53 pm »
Dit had een mooie challenges kunnen zijn ;)

Offline PKHG

  • Member
  • *
  • Berichten: 718
    • Bekijk profiel
« Reactie #9 Gepost op: 17 januari 2015, 21:14:45 pm »
Mark, maak er en challenge van:

Men hale zich de *.blend  Zaphs bijdrdare en animere het zo dat  van frame 0 tot frame 120
1.) de klok start met locale tijd (exact locaal)
2.) 10 minuten laat zien.

Overigens is het mij ondanks ... nog niet gelukt ... dus het is voor mij ook een chalenge

(al het spul van drivers vergeten na ja ben ook een opa ...) morgen dus knutseln ...
Doei
       Peter

Offline PKHG

  • Member
  • *
  • Berichten: 718
    • Bekijk profiel
« Reactie #10 Gepost op: 18 januari 2015, 09:58:35 am »
Om de tijd van de wijzers te zetten ging dit bij mij:
Code in text-editor zetten en aldaar runnen,

import bpy
import time as t
from math import pi, degrees, radians

def get_uur_min_sec():
    tim = t.localtime()
    uur = (tim[3] % 12) * 30
    min = tim[4] * 6
    sec = tim[5] * 6
    return (uur,min,sec)
   
uur,min,sec =  get_uur_min_sec()
print(uur,min,sec)
bpy.context.area.type = 'VIEW_3D'
#bpy.ops.view3d.snap_cursor_to_center() ###Crash???!!!
Klein = bpy.data.objects['Klein']
Groot = bpy.data.objects['Groot']
Seconde = bpy.data.objects['Seconde']
#werkt maar niet nodig: print(Klein,Groot,Seconde)
bpy.context.scene.objects.active = Seconde
bpy.context.object.rotation_euler[1] = radians(sec)
bpy.context.scene.objects.active = Groot
bpy.context.object.rotation_euler[1] = -radians(min)
bpy.context.scene.objects.active = Klein
bpy.context.object.rotation_euler[1] = radians(uur)

bpy.context.area.type = 'TEXT_EDITOR'

Dit werkt als men alle drivers heeft verwijderd.



ik denk, dat ik (nog) geen rekening heb gehouden met zomer of winter tijd ... na ja .. een
begin dan maar ...
« Laatst bewerkt op: 18 januari 2015, 10:00:07 am door PKHG »
Doei
       Peter

Offline Zaph

  • Member
  • *
  • Berichten: 540
    • Bekijk profiel
    • Zaph webdevelopment
« Reactie #11 Gepost op: 18 januari 2015, 13:47:11 pm »
Leuk om eens te zien hoe je dingen manipuleert vanuit code. Ik had eerst een combinatie van code en drivers, maar dan moest ik elke keer eerst handmatig de code runnen, en daarna alle drivers updaten.

Offline PKHG

  • Member
  • *
  • Berichten: 718
    • Bekijk profiel
« Reactie #12 Gepost op: 18 januari 2015, 18:10:56 pm »
Grrrr dit werkt slechts af en toe:
import bpy

""" voorbeeld van WWW
def driverFunc(val):
    return val * val    # return val squared
bpy.app.driver_namespace['driverFunc'] = driverFunc    # add function to driver_namespace
"""

def set_my_clock(Second = "Seconde", Klein = "Klein", Groot = "Groot"):

    import bpy
    import time as t
    from math import pi, degrees, radians
    print(bpy.context.area)
    #bpy.context.area.type = 'VIEW_3D'
   
    tim = t.localtime()
    print("time is " + str(tim[5]))
    uur = (tim[3] % 12) * 30
    min = tim[4] * 6
    sec = tim[5] * 6
   
    Klein = bpy.data.objects['Klein']
    Groot = bpy.data.objects['Groot']
    Seconde = bpy.data.objects['Seconde']
    Cube = bpy.data.objects['Cube']
    print(Klein.name)


#    print(uur,min,sec)

#bpy.ops.view3d.snap_cursor_to_center()
#    print(Klein,Groot,Seconde)
    bpy.context.scene.objects.active = Seconde
    print("voor")
    print("active object" + str(bpy.context.scene.objects.active))
    print(bpy.context.object.rotation_euler[1])
    bpy.context.object.rotation_euler[1] = radians(sec)
    print(bpy.context.object.rotation_euler[1])
    print("na")
    bpy.context.scene.objects.active = Groot
    bpy.context.object.rotation_euler[1] = -radians(min)
    bpy.context.scene.objects.active = Klein
    bpy.context.object.rotation_euler[1] = radians(uur)

    #bpy.context.area.type = 'TEXT_EDITOR'

    tmp =  (uur * 3600 + min * 60 + sec)
    print("tmp = " + str(tmp))
    bpy.context.scene.objects.active = Cube
    return tmp
set_my_clock()
bpy.app.driver_namespace['set_my_clock'] = set_my_clock    # add function to driver_namespace



Blender 2.73 W64

Men moet blijkbaar de geschreven functie aan de driver_namespace bekend maken ...

Ik heb dan een Cube een driver gegeven en de scripted expression gezet
op: set_my_clock()
Als ik dan op dependencies hernieuwen klik lukt het soms, dat de klok gezet wordt en regelmatig komt er een foutmelding.

Einde van mijn weten (voorlopig) ...

Zaph, mag ik je *.blend ook aan anderen 'geven'?
Doei
       Peter

Offline Zaph

  • Member
  • *
  • Berichten: 540
    • Bekijk profiel
    • Zaph webdevelopment
« Reactie #13 Gepost op: 18 januari 2015, 20:12:22 pm »
Misschien de namepsace boven de aanroep zetten (laatste 2 regels omwisselen)?

Zaph, mag ik je *.blend ook aan anderen 'geven'?

Natuurlijk.