[PluginInfo(Name = "Template", Category = "Value", Help = "A Template", Tags = "simple, basic", Author = "vvvv group", AutoEvaluate = false)] |
L’attribut PluginInfo, écrit au-dessus de votre plugin-class, permet de décrire un plugin à vvvv. Pour plus d’infos sur AutoEvaluate , reportez-vous à la section Evaluate() ci-dessous. |
[Config("My Config Value")] public ISpread<double> FConfig; [Input("My Input String")] public ISpread<string> FInput; [Output("My Output Color")] public ISpread<RGBAColor> FOutput; Exemple d’attributs//specify a default value for a pin [Input("Input", DefaultValue = 255.0)] //specify a not spreadable pin. //The pin has only one slice //and the user can't change that. [.., IsSingle = true)] //specify the pins visibilty. [.., Visibility = PinVisibility.Hidden)] //specify a pin to be of type filename //to show a file-dialog on rightclick. [.., StringType = StringType.Filename)] Exemple DiffSpread[Input("Write", IsBang=true)] IDiffSpread<bool> FDoWrite; ... if (FDoWrite.IsChanged) ... Exemple Spread de spreads//create a two-dimensional spread //exposed in vvvv with a data and //a bin-size pin. [..] ISpread<ISpread<double>> FInput; Exemple PinGroup//create a dynamic pingroup, where //the user can specify the pin count //via the Inspektor. [.., IsPinGroup = true)] ISpread<ISpread<double>> FInput; |
Une pin est définie par deux lignes de code :
Attribut PinInfoL’attribut PinInfo est écrit juste au-dessus de la déclaration d’input ou d’output et permet de définir une pin. Déclaration de variablesDans la plupart de cas, vous déclarerez vos entrées et sorties avec le type générique ISpread<T> où T est le type de votre choix :
Lorsque vous voulez voir si une entrée a changé, utilisez simplement IDiffSpread<T> au lieu de ISpread<T> dans la déclaration et appelez .IsChanged. Spread de spreadSi vous déclarez une variable ISpread<ISpread<T>>, vous obtenez gratuitement une pin BinSize à côté de la pin en question qui vous permettra de structurer vos données en bins. Vous pouvez aussi en faire une pin PinGroup où, au lieu de BinSize, vous aurez une pin de config PinCount (reportez-vous à l’exemple sur la gauche). Ajouter/supprimer des pinsIl existe deux façons de faire ça pendant l’exécution :
Callbacks de connexionsDans les cas très rares où vous auriez besoin de réagir à des événements de connexion/déconnexion, utilisez Pin<T> au lieu de ISpread<T>, et lisez la page Pin(T) Events. |
public void Evaluate(int SpreadMax) { FOutput.SliceCount = SpreadMax; for (int i = 0; i < SpreadMax; i++) FOutput[i] = FInput[i] * 2; } |
C’est le cœur de votre plugin. La fonction Evaluate() s’exécute à chaque frame :
C’est ici que se trouveront les calculs principaux de votre plugin. Si vous cherchez un endroit où initialiser des bouts de code (c’est-à-dire ne les exécuter qu’une seule fois), reportez-vous à la section suivante (Constructeur). |
SpreadMax = SpreadUtils.SpreadMax(FInput1, FInput2 /* indiquez TOUT vos inputs ici*/);
public MyNodeClassname() { //initialize stuff } public class MyNodeClassname: IPluginEvaluate, IPartImportsSatisfiedNotification { ... public void OnImportsSatisfied() { //access your in-/outputs here } |
Vous utiliserez un constructeur si des bouts de votre code ne doivent être exécutés qu’une fois. Notez qu’il est optionnel et que par conséquent la plupart des templates n’en ont pas. |
public class MyNodeClassname: IPluginEvaluate, IDisposable { ... //called when the plugin gets //deleted public void Dispose() { //unsubscribe from events //and call dispose on resources //your plugin has created. } |
Dans le cas où votre plugin utiliserait des ressources devant être libérées lors de sa suppression, vous devrez implémenter l’interface IDisposable. Grâce à sa méthode Dispose, vous pourrez faire toutes vos tâches de nettoyage. |
[Import()] public IPluginHost2 FPluginHost; [Import()] public IHDEHost FHDEHost; |
Il existe deux points d’entrée pour accéder à la structure interne de vvvv :
|
Appuyez sur Ctrl+J pour ouvrir la fenêtre Project Explorer. Vous y verrez une arborescence de tous vos projets et pourrez y ajouter/supprimer des documents et références. DocumentsBien que vous pouvez définir plusieurs plugin-class dans votre document (créez les simplement les unes à la suite des autres), il est plus judicieux lorsque vous travaillez sur un grand nombre de nodes de les séparer dans plusieurs documents. Faite simplement un clic droit dans le Project Explorer et sélectionnez « Add … » pour ajouter un document existant ou en créer un nouveau. ReferencesVous y référencerez :
|
using System; .. using VVVV.PluginInterfaces.V2; |
Toutes les entités de .NET peuvent être atteintes via un chemin global étant le namespace dans lequel cette entité est définie suivi du nom de celle-ci. Par exemple, VVVV.PluginInterfaces.V2.ISpread<bool> est le chemin complet du type ISpread<bool> lui-même défini dans le namespace VVVV.PluginInterfaces.V2. |
[Import()] public ILogger Flogger; ... Flogger.Log(LogType.Debug, "foo"); |
La façon la plus simple de débugger votre code est d’écrire des messages de log que vous pourrez visualiser dans le Renderer (TTY). Pour cela, importez ILogger et appelez .Log() comme indiqué dans l’exemple de gauche. Points d’arrêtSi vous voulez définir des points d’arrêts et avancer pas à pas dans votre code, il vous faudra un IDE comme SharpDevelop ou VisualStudio et suivre les étapes suivantes :
Lorsqu’un point d’arrêt sera rencontré, l’IDE stoppera vvvv et vous pourrez parcourir vos lignes de code. |
|
anonymous user login
~3mth ago
~4mth ago
~4mth ago
~4mth ago
~4mth ago
~4mth ago
~4mth ago
~4mth ago
~5mth ago
~5mth ago