Presets mir touchOSC

  • Geht einfacher:


    C
    var pan = p.GUISubProperties.First(c => c.PropertyType == EPropertyType.Pan);
    pan.ProgrammerValue = 17.4; (Double Wert)


    Muss ich die Werte noch irgendwie übernehmen?

    Habe gerade versucht, mal nur hardcodiert 17.4 wie in deinem Beispiel zu setzen, da tut sich aber gar nichts.


  • Ok alles klar.

    Danke dir.


    Wenn das funktioniert muss ich nur noch da Replace des Presets ausprobieren, dann müsste alles funktionieren und ich kann meine Positions Presets per Ipad vor dem Gig anpassen. :)


    Freu mich schon.

    Vielen Dank.

  • 1.: Also p.ProgrammerPropValue ist nicht null




    Mein Code schaut folgendermaßen aus. Das Markieren des Devices funktioniert, weil wenn ich mit der Maus manuell Pan und Tilt vom zuvor markierten ändere passt es.

    Sollten die Änderungen von Pan und Tilt gleich sichtbar sein?


    Markiere Gerät:

    Das funktioniert:

    Code
            private static void MarkiereGeraet(String strID)
            {
                var devices = new string[] { strID }; //Irgendwie ein Array der Device IDs erzeugen, kann auch 1 Device sein, oder 0, wenn die Selektion aufgehoben werden soll.
                ISessionFacade guiSession = ConnectionManager.getInstance().GuiSession;
                ICommand c = guiSession.getCommandInstance("Kernel", "createSelectedDeviceGroup");
                c.execute(guiSession.Name, devices, null); //null am Ende ist wichtig!
            }


    EditPreset:

    Da bin ich mir noch nicht sichter, das ClearProgrammer funktioniert. Aber wenn ich editPresetInProgrammer aufrufe, sollte das gleich in der GUi im Programmer zu sehen sein?

    Code
            private static void EditPreset(String strID)
            {
                ISessionFacade guiSession = ConnectionManager.getInstance().GuiSession;
                ICommand c = guiSession.getCommandInstance("Kernel", "clearProgrammer");
                c.execute(guiSession.Name);
    
                c = guiSession.getCommandInstance("Kernel", "editPresetInProgrammer");
                c.execute(guiSession.Name, strID, null);
            }


    P.S. Bitte nicht über die Variablen-Namen und Methoden-Namen urteilen, bin noch am rumprobieren und das hat noch nichts mit sauber programmieren zu tun ;)

  • Mhm, ok.


    Ja dann muss ich heute mal nochmal reindebuggen, vl. fällt mir ja noch irgendwas auf.


    Aber jetzt nochmal,


    1. Wenn ich EditPreset aufrufe, müssten die Werte im Programmer stehen?

    2. Wenn ich Pan und Tilt ändere müsste ich das gleich in der XY-Fader im DMXC mitbewegen?

  • Zu 1. Ja, das Preset sollte dann im Programmer landen.

    Zu 2. Mindestens im StageView sollte die Änderung sofort sichtbar sein, gesetzt dem Fall, der Programmer ist nicht auf Blind oder was auch immer geschaltet (oder Priorität normal). Effektiv müssten die Werte im Programmer landen, vergleichbar damit wenn du die Werte von Hand änderst.

  • Ok.


    Danke für die Infos.


    Der nächste Schritt wäre dann, dass ich das alles frei im MidiPlugin konfigurierbar mache.

    Also dass das nicht hardcodiert drin steht.


    Dazu müsste ich noch wissen:


    1. Wie komme ich zu allen Devices? Also Name + ID?
    2. Wie komme ich zu allen Presets? Preset-Name + ID?
  • Glaub das mit der Position hab ich jetzt hingebracht.

    Bzw. bin auf einen guten Weg.

    Aber das EditPreset funktioniert noch nicht.


    Was ist an folgender Funktion falsch?

    Code
            private static void EditPreset(String strID)
            {
                ISessionFacade guiSession = ConnectionManager.getInstance().GuiSession;
                ICommand c = guiSession.getCommandInstance("Kernel", "clearProgrammer");
                c.execute(guiSession.Name);
    
                c = guiSession.getCommandInstance("Kernel", "editPresetInProgrammer");
                var presets = new string[] { strID }; //Irgendwie ein Array der Device IDs erzeugen, kann auch 1 Device sein, oder 0, wenn die Selektion aufgehoben werden soll.
                c.execute(guiSession.Name, presets, null);
            }
  • Naja, zum einen brauchst du das "ClearProgrammer" vorher nicht. Wenn du das Preset in den Programmer lädst wird der automatisch gecleart. Aber das ist nicht das eigentliche Problem. Du hast das Codebeispiel von mir falsch übernommen. Edit Preset in Programmer lädt genau 1 Preset, ergo ist der parameter "presetId" ein String und kein String[]. Anhand des Kommentars sehe ich, dass du diverse Codebeispiele wild durcheinander kopiert hast. Dabei hat sich der Fehler eingeschlichen.

  • Mhm ok, dann muss ich das später nochmal probieren.


    Ja das mit dem String[] hab ich nur kurz zum probieren dazu geschrieben, da dass mit dem normalen String nicht funktioniert hat, dachte ich mir ich probier das mal so...

    Evtl. ist ja das ClearProgrammer das Problem...

  • So hab ich tatsächlich einen Hund reingebracht. Hab beim markieren vergessen den Übergabeparameter blind zu setzen.

    Jetzt funktionierts.


    Jedoch das Ändern von Pan und Tilt funktioniert immer noch nicht.

    Hab den Code jetzt auch nochmal mit deinen Beispielen abgeglichen, aber anscheinend funktioniert das nicht.


    tilt.ProgrammerValue hat einen WErt. Aber wenn ich da einen neuen setze ist im nächsten Durchlauf wieder der alte drin.


    Das ist der ganze Code.

  • Ok, dann versuch Übergangsweise den Pan / Tilt Wert auszulesen und dann einen "Position" Wert auf p zu setzen. Ist zwar unschön aber ich muss dann erstmal debuggen warum das bei dir passiert.


    Unabhängig davon, macht es keinen Sinn bei "nMin" und "nMax" den "Pan" Wert zu nehmen, wenn du Tilt setzen willst :-D, aber das ist eher ein Copy & Paste Problem.

  • Haha ok. Bei dem Copy und Paste hast du mich erwischt ;)


    Glaub das Problem liegt irgendwie hier:

    tilt.ProgrammerValue = nUmgerechneterWert;


    Wenn ich nämlich deinen letzten Vorschlag versuche und die Position manuell zu setzen versuche ich das tilt.ProgrammerValue in ein Double zu casten. Und hier kommt eine Exception


    Was auch interessant ist.


    Das tilt.ProgrammerValue hat als Dezimal-Trenner ein "," (Komma)

    Und der Double ein "."


    Vielleicht hilft ja das irgendwie weiter.


    invalidCastException kam bei


    Code
    double dbUmgerechneterWert = 13.4;
    p.ProgrammerValue = new Position(dbUmgerechneterWert, (double)tilt.ProgrammerValue);
  • Ah.... Ich glaube ich weiß was das Problem ist.....


    Versuch mal: tilt.ProgrammerValue = NumericFannedValue.FromDouble(dbUmgerechneterWert);


    Ich hab vergessen, dass Position, Pan und Tilt auch gefannt sein können.... Ich muss an der Stelle den Code etwas robuster machen.

  • Newly created posts will remain inaccessible for others until approved by a moderator.

    The last reply was more than 365 days ago, this thread is most likely obsolete. It is recommended to create a new thread instead.