本人想在添加按钮点击的时候纪录下组件名字,并输出在textbox5中,然后顺便记录下坐标,然后再在计算按钮中调用,并计算全部在textbox5中显示的组件的距离和,在textbox6中显示距离和,可是运行下来,textbox6的显示一直是0,这是为什么啊?是哪里逻辑不对吗?小白勿喷…
public struct MY_POS { public double x; public double y; public double z; } private void 纪录_Click(object sender, EventArgs e) // 人行走路径点击选择 { IvcSelection Selection = app.findSelection("Component"); 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");//获得坐标下x,y,z的坐标 if (textBox5.Text != "") { textBox5.Text += "->" + name.ToString(); } else { textBox5.Text = name.ToString(); } string[] tmp = textBox5.Text.Split("->".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);//根据textbox的输出分割得到pos[]是行数 MY_POS [] pos = new MY_POS[tmp.Length]; for (int W = 0; W < tmp.Length; W++) { pos[W].x = matrix[0]; pos[W].y = matrix[1]; pos[W].z = matrix[2]; } } } private void 计算_Click(object sender, EventArgs e) { string[] tmp = textBox5.Text.Split("->".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); double sum = 0; MY_POS[] pos = new MY_POS[tmp.Length]; for (int W = 0; W < tmp.Length; W++) { double xd = pos[W].x - pos[W + 1].x; double yd = pos[W].y - pos[W + 1].y; double zd = pos[W].z - pos[W + 1].z; sum += Math.Sqrt(xd * xd + yd * yd + zd * zd); textBox6.Text = sum.ToString(); } }
解决方案
50
24 行处定义的 pos 是局部变量
25 ~ 30 行对他的赋值,在方法结束后就丢失了
37 行处定义了 pos,但赋的是空值
38 ~ 45 只是在对一个空值数组在做计算
25 ~ 30 行对他的赋值,在方法结束后就丢失了
37 行处定义了 pos,但赋的是空值
38 ~ 45 只是在对一个空值数组在做计算