Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. C++/Qt3d binding Sequential Animation based on a variable
QtWS25 Last Chance

C++/Qt3d binding Sequential Animation based on a variable

Scheduled Pinned Locked Moved QML and Qt Quick
3 Posts 2 Posters 2.9k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Offline
    D Offline
    Develman
    wrote on last edited by
    #1

    Hi all,

    I am new in qml and qt3d development I have found a problem that so far I haven't overcome and it is driving me nuts. My intention is to have a Animation or transformation that is continuously updated by a variablle.

    I have successfully loaded a .stl file using qt3d which I can apply a few transformations and animations, I have some data that comes from a C++ class that is being received properly according to the values displayed. However if I enter in an infinite loop SequentialAnimation I would expect my animation to be updated by the new values that I am receiving periodically, as I am printing them out I can see they are different but when I apply a rotation it seems that only uses the one that read only once when it was loaded.
    I have also tried to create a java function that returned the updated value by calling it in my to: NumberAnimation, however it didn't work. The behaviour was identical as shown bellow, it rotates only once until it reaches the value initially loaded.
    I would truly appreciate any inputs on this, I wonder if NumberAnimation only accepts constant values and probably there could be a better way to do it.

    Thank you in advance,

    Here is my code:

    @Image {

    source: "background.jpg"
    width: 800
    height: 600
    
    property variant m_external: 10 //Periodically updated variable
    
    Viewport
    {
    
        width: 800
        height: 600
    
       camera: Camera { eye: Qt.vector3d(210,100,190)}
    
       Item3D
           {
               id: y6
               mesh: Mesh { source : "y6.stl"; options: "ForceSmooth"}
                Light {}
    
                   transform: [
                          Rotation3D {id: swivel1; angle: -90; axis: Qt.vector3d(1,0,0)},
                          Rotation3D {id: swivel2; angle: 0; axis: Qt.vector3d(0,1,0)},
                          Rotation3D {id: swivel3; angle: 0; axis: Qt.vector3d(0,0,1)}
                          ]
                   SequentialAnimation
                   {
                                running: true
                                loops: Animation.Infinite
                                NumberAnimation {target: swivel2; property: "angle"; to : m_external; duration: 1000; easing.type: "OutQuad"}
                   }
           }
    
    }
    

    }@

    1 Reply Last reply
    0
    • S Offline
      S Offline
      SDubitskiy
      wrote on last edited by
      #2

      Try SmoothedAnimation.
      It recalculates itself when limits change.

      1 Reply Last reply
      0
      • D Offline
        D Offline
        Develman
        wrote on last edited by
        #3

        Thanks sDubitskiy, I replaced my NumberAnimation line by the following:
        @ SmoothedAnimation{target:swivel2; property : "angle"; to: m_external; duration: 1000; easing.type: "Linear"}@
        And didn't work. I think I am going to transfer my code to qt3d instead that looks more intuitive to me, as I don't know how to solve this relatively simple problem with qml.

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved