» dynamic plugin tutorials
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

dynamic plugin tutorials

under construction

Introduction

You already are familiar with what a dynamic plugin is. We now examine how to code some simple dynamic plugins in c#.

Beginner

#1 - Adding an If - Statement

A very common example is a node that handles some logic or that can be configured or just can be disabled.

Let's say we want to write a node that randomly increases/decreases its output value, which could be used to simulate the movement of an insect. At any time we want to be able to put it to sleep. And we want to be able to change the vividness.

So please clone with me the Template (Value) and give the name "RandomWalker" or something like that.

The Random Behaviour

Behind

FOutput.SliceCount = SpreadMax;

write the folowing:

var r = new Random();

This creates a random generator and assignes it to a local variable which we just called "r".
If you later on write "r." you see which methods can be called on the random generator. Use the keyboard arrow keys and move over "r.NextDouble".
In the tool tip you can see that r.NextDouble will generate values between 0.0 and 1.0.
Now change the line within the for-loop to:

FOutput[i] = (r.NextDouble()-0.5)*FInput[i];

In the tool tip we saw that r.NextDouble will generate values between 0.0 and 1.0. Subtracting by 0.5 will result in a value around 0. So 50% it will be negative (walk left), 50% it will be positive (walk right). Multiplying with the input gives the ability to scale the random walking at any time. But still this is only the walking velocity. The position doesn't change yet.
Now change the "=" in that line to to "+=", which means that the value of the last frame is changed by the random amount. Now it walks off...

Don't forget to use CTRL-S to save and compile.

Delete the "logger" stuff by hitting CTRL-D. You deleted the wrong line? Undo (CTRL-Z) is your friend.
Your code should now look like this:

public void Evaluate(int SpreadMax)
{
    FOutput.SliceCount = SpreadMax;
 
    var r = new Random();
 
    for (int i = 0; i < SpreadMax; i++)
        FOutput[i] += (r.NextDouble()-0.5)*FInput[i];    
}

Sleep

Create a new Input by opening the region "fields & pins" and adding the following line behind the first input declaration:

[Input("Enabled", DefaultValue = 1.0, IsSingle = true)]
ISpread<bool> FEnabled;

After hitting CTRL-S you will see the new pin.
Note that it is

  • called "Enabled"
  • accepts 0 or 1 (because it is a boolean)
  • it true (1.0) by default
  • and is not spreadable (IsSingle = true).

Add

if (FEnabled[0])

before your for-loop and the for loop will only be evaluated if "Enabled" is true.
Please always indent your code by using TABs to make the structure of the code more visible.

if (FEnabled[0])
    for (int i = 0; i < SpreadMax; i++)
        FOutput[i] += (r.NextDouble()-0.5)*FInput[i];

Note that the above is a shorthand for writing:

if (FEnabled[0])
{
    for (int i = 0; i < SpreadMax; i++)
    {
        FOutput[i] += (r.NextDouble()-0.5)*FInput[i];
    }
}

As soon as you want to do more in your loop or more is dependant on if Enabled = true, you will need the code blocks anyway.

Ideas for more tutorials

  1. Dealing with several Input Spreads
  2. Dealing with several Outputs
  3. Working with Strings
  4. Working with Colors
  5. Working with Enumerations
  6. How to write readable Code (1)
  7. How to share a Dynamic Plugin
  8. Working with Spreads of Spreads
  9. Working with your own Data Type
  10. Working with Transformations
  11. Working with External Libraries

anonymous user login

Shoutbox

~3h ago

joreg: Also as every 2 weeks: This Tuesday: Free introduction to the all-new #vvvv: free-vvvv-intro-workshops-this-summer-in-berlin followed by the regular vvvv meetup

~4h ago

skyliner: anyone at usbynight?

~5h ago

joreg: Reminder: This wednesday in #berlin: Getting Started with Data Visualization: https://nodeforum.org/announcements/workshop-getting-started-with-data-visualization/ vvvv #creativecoding #dataviz

~3d ago

joreg: @eglod vvvv is international! wenn du hilfe auf deutsch brauchst, dann komm am besten in unseren deutschen chat: https://riot.im/app/#/room/#vvvv-at:matrix.org

~3d ago

eglod: In allen möglichen Sprachen gibt es VVV. V4 ist deutsch, warum nicht in deutscher Sprache. eglod

~3d ago

eglod: In allen möglichen Sprachen gibt es VVV. V4 ist deutsch, warum nicht in deutscher Sprache. eglod

~4d ago

joreg: Reminder: First #vvvv meetup in #hamburg this friday: vvvv-hamburg-meetup-1 Hope to see some of you there!

~6d ago

AKa-visuals: Hi guys. Everyone guess when xenko engine would be avaliable to play around in vl ... Isnt?