通过点击comp来获得他的名字和坐标,然后把名字依次显示在textbox中,然后根据textbox中name的数量来确定b数组的行数,再计算textbox中name所对应的comp之间的距离,可是为什么提示 b[x][0] = matrix[0];索引超出了数组界限?求指导
for (int i = 0; i < Selection.ItemCount; i++)
{
comp = (IvcComponent)Selection.getItem(i);
object name = comp.getProperty("Name");
double[] matrix = (double[])comp.RootNode.getProperty("WorldPositionMatrix"); //获得坐标xyz
if (textBox5.Text != "")
{
textBox5.Text += "->" + name.ToString();
}
else
{
textBox5.Text = name.ToString();
}
string[] tmp = textBox5.Text.Split("->".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); //得到拆分项
double sum = 0;
for (int x = 0; x < tmp.Length; x++)//根据拆分项确定行数
{
b[x][0] = matrix[0];
b[x][1] = matrix[1];
b[x][2] = matrix[2];
double xd = b[x][0] - b[x + 1][0];
double yd = b[x][1] - b[x + 1][1];
double zd = b[x][2] - b[x + 1][2];
sum += Math.Sqrt(xd * xd + yd * yd + zd * zd);
//listBox1.Items.Add("distance = " + sum);
}
}
解决方案
40
数组定义后据不能改变大小
既然你的 tmp 是可变长度的,不如将 b 定义成 List
var b = new List<double[]>();
另外 double xd = b[x][0] – b[x + 1][0]; 也有潜在的问题
前面刚对 b[x] 赋值,接下里就要取 b[x+1] 的值,显然是不对的
既然你的 tmp 是可变长度的,不如将 b 定义成 List
var b = new List<double[]>();
另外 double xd = b[x][0] – b[x + 1][0]; 也有潜在的问题
前面刚对 b[x] 赋值,接下里就要取 b[x+1] 的值,显然是不对的