Announcement

Collapse
No announcement yet.

Rotary Knob

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Rotary Knob

    Hello friends, i'm a noob here at Indigo forum (as you may know), and this is my fist request for help.
    I've played with AMS some time ago, made a few simple installers (one still working at my working place, as a software installer form our server).
    Past this years, and back to AMS, i'm trying to make a multimedia player (which is almost finished, wiht the help of a lot of reading in this forum),
    but my doubt is, how can i do a mouse control on a costume image(s) rotary knob (volume) for the player.
    I've tryed an approach for the volume slider with the "Slider_Framework" from Worm, and BioHazard code to "Display Audio Volume (via Images)"
    but not with the result i want.
    So what i'm asking here is, if you can guide me on creating the rotary movement controled by the mouse.
    I think that includes math, angles, mouse actions and positions, to drag the knob, but i don't know how.
    Point me some directions please, i'll try to do my best.


    Another question: Can this code be usefull?
    (It's from Eclipse (Android)

    ================================================== ================================================== =

    local gAActiveKnob = nil
    local xData, yData, tanData
    local this_control

    --Based on the X and Y positions of the cursor, determines the closest index in the slider, and checks if the cursor is in range of the slider
    function CalculateKnobPosition(mapargs)
    local dk_data = {}
    local mid_x, mid_y
    local ctrl_x, ctrl_y
    local calc_x,calc_y
    local radians, degrees

    local press_x = mapargs.context_event_data.x
    local press_y = mapargs.context_event_data.y

    this_control = mapargs.context_control
    dk_data = gre.get_data(this_control..".grd_width",this_contr ol..".grd_height",this_control..".grd_x",this_cont rol..".grd_y",this_control..".angle")
    mid_x = dk_data[this_control..".grd_width"] / 2
    mid_y = dk_data[this_control..".grd_height"] / 2
    ctrl_x = dk_data[this_control..".grd_x"]
    ctrl_y = dk_data[this_control..".grd_y"]

    calc_x = press_x - mid_x - ctrl_x
    calc_y = press_y - mid_y - ctrl_y

    radians = math.atan2(calc_y, calc_x)
    degrees = math.deg(radians)

    -- rotate quadrant to align control rotation degrees
    if(degrees < 0)then
    --on the top portion of the circle
    degrees = 90 - math.abs(degrees)
    if(degrees < 0)then
    degrees = 360 - math.abs(degrees)
    end
    else
    degrees = 90 + math.abs(degrees)
    end

    -- apply start and end stops
    --[[if(degrees > 54 and degrees < 90)then
    degrees = 54
    elseif(degrees > 90 and degrees < 126)then
    degrees = 126
    end--]]

    print("press_x:" ..press_x .." press_y:" ..press_y )
    print("ctrl_x:" ..ctrl_x .." ctrl_y:" ..ctrl_y )
    print("calc_x:" ..calc_x .." calc_y:" ..calc_y )
    print("x:" ..press_x - mid_x.." y:" ..press_y - mid_y .. " deg:"..degrees)

    local data = {}
    data["controls_layer.degrees.text"] = string.format("%3.1fº",degrees)
    data[this_control..".angle"] = degrees
    gre.set_data(data)

    end

    --Checks if motion is on current slider if so, calculates slider position
    function CBKnobMotion(mapargs)
    if gAActiveKnob == nil then
    return
    end
    local control_name = mapargs.context_control
    if gAActiveKnob == control_name then
    CalculateKnobPosition(mapargs)
    else
    gAActiveKnob = nil
    end
    end

    function CBKnobPress(mapargs)
    gAActiveKnob = mapargs.context_control
    CalculateKnobPosition(mapargs)
    end

    --When the slider is released set the active slider to nil
    function CBKnobRelease(mapargs)
    gAActiveKnob = nil
    end


    ================================================== =================================================

  • #2

    Comment


    • #3
      for this you should use Audio Control Object

      Comment


      • #4
        The issue of using a rotary-style volume control was raised & addressed some time back.
        It's inherently problematic - read this thread: https://forums.indigorose.com/forum/...e-control-dial

        Comment


        • #5

          The plugin was written by LucasTheDuck who's not been active here since 2013..................
          But without the source-code to the plugin, a definitive cause is unknowable

          Click image for larger version

Name:	screen.PNG
Views:	123
Size:	6.0 KB
ID:	304864





          Knob Proper Test

          Comment

          Working...
          X