Asked — Edited

Need Help With Plugin

I need some help with a plugin I am working on. I am new to C# and OOP. Have went thru the Tutorial and the SDK Tutorials also.

User-inserted image

How do I get the values from the form in to my C# code?

 public enum LocationType
            {
                Wall = 255,
                Empty = 0,
                Destination = 254,
                Source = 1
            }
            public struct Location
            {

instead of Wall = 255, how do I get Wall = textBox1.Text. textBox1 being the Textbox name.

Thanks RichardZ


ARC Pro

Upgrade to ARC Pro

ARC Pro is your gateway to a community of like-minded robot enthusiasts and professionals, all united by a passion for advanced robot programming.

PRO
USA
#1  

//Option1:
//  null        => 0 AND returns false
//  empty       => 0 AND returns false
//  non integer => 0 AND returns false
int i1;
if (!int.TryParse(textBox1.Text, out i1))
{
    //it's not an integer 
    //raise an error
}

//Option2: 
//  null        => 0
//  empty       => raises an exception
//  non integer => raises an exception
int i2 = Convert.ToInt32(textBox1.Text);

//Option2: 
//  null        => raises an exception
//  empty       => raises an exception
//  non integer => raises an exception
int i3 = int.Parse(textBox1.Text);

If you're collecting input from a user, I'd go with option #1

PRO
USA
#2  

Thank you ptp, I have decided to leave the values for Robot, Empty, Wall and Goal as set values. Having them as part of an enumeration is my problem there I think.

In the picture I posted, Map Variable is $MyMap. This is a string of 6400 characters. Each character represents a 1'x1' block. How do I get this variable from ARC into my C#? I plan to use 2 for loops to move the data from the $MyMap variable to a 2 dimension array in the plugin.

PRO
USA
#3  

private void DoSomething()
{
	//Get EZScript's map variable
	var mapString = VariableManager.GetVariable("$MyMap");
	//example map 4 x 3 => "X....X....X."

	//Convert string to an array of 4 by 3
	var map4X3 = StringToMap(mapString, 4);

	DoSomethingWithMap(map4X3);

	//Convert array to string
	var newMapString = MapToString(map4X3);

	//Set EZScript's map variable
	VariableManager.SetVariable("$MyMap", newMapString);
}

private void DoSomethingWithMap(char[,] map)
{
	for (var rowIndex = 0; rowIndex < map.GetLength(0); rowIndex++)
	{
		for (var colIndex = 0; colIndex < map.GetLength(1); colIndex++)
		{
			var cellValue = map[rowIndex, colIndex];
			//DoSomething with cellValue
		}
	}
}

private static string MapToString(char[,] map)
{
	return new string(map.Cast<char>().ToArray());
}

private static char[,] StringToMap(string flatString, int width)
{
	var flatArray = flatString.ToCharArray();

	var height = (int)Math.Ceiling(flatArray.Length / (double)width);
	var result = new char[height, width];

	for (var index = 0; index < flatArray.Length; index++)
	{
		var rowIndex = index / width;
		var colIndex = index % width;
		result[rowIndex, colIndex] = flatArray[index];
	}

	return result;
}

PRO
USA
#4  

Quote:

instead of Wall = 255, how do I get Wall = textBox1.Text. textBox1 being the Textbox name.

Quote:

Having them as part of an enumeration is my problem there I think.

If your wall value is an enum you should use a ComboBox to capture the user input.

To load the ComboBox LocationTypeComboBox:


LocationTypeComboBox.DataSource = Enum.GetValues(typeof(LocationType));
LocationTypeComboBox.SelectedIndex = 0;

To get the enum from the ComboBox:


LocationType locationType;
Enum.TryParse<LocationType>(LocationTypeComboBox.SelectedValue.ToString(), out locationType); 

The "Standard" for a Label and Input is: Label TextBox Label ComboBox ...

PRO
USA
#5  

Thank you I believe this is what I was missing. I have picked up a few books on C# and going thru the lessons. catching on to the syntax easy enough but some of the concepts are a bit tough to get my head around. It is a bit different from TRS-80 Basic.

PRO
USA
#6  

When I execute the plugin, I get an error:

An exception of type 'System.Exception' occurred in ARC.exe but was not handled in user code

Additional information: Variable is an array: $MyMap

Makes sense to me. in ARC $MyMap is an array of 6400

the line of code reads:


var mapString = VariableManager.GetVariable("$MyMap");

PRO
USA
#7  

Quote:

In the picture I posted, Map Variable is $MyMap. This is a string of 6400 characters.
You mentioned a string.

if your variable is an Array:


//Get value from position 0 of $MyMap array
VariableManager.GetVariable("$MyMap", 0) 

PRO
USA
#8  

I'm curious, what you plan to do with EZ-Script and an Array of 80x80 i.e. 6400 positions ?