You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将一个函数的运行结果作为另一函数输入,解决brep不存在当前上下文报错

问题原因

报错是典型的变量作用域问题:你在btnSelectBuilding_Click_1方法内声明的brep是局部变量,作用域仅局限在该方法内部,另一个按钮的点击事件btnCalculate_Click不属于这个作用域,因此无法访问到这个变量。

修复步骤
  • 第一步:在两个按钮事件所属的窗体类的成员层级,声明一个Rhino.Geometry.Brep类型的成员变量,用来持久存储选中的几何形体。
  • 第二步:在选择建筑的点击事件中,将选中的brep赋值给这个类成员变量,而非仅定义局部变量。
  • 第三步:在计算按钮的点击事件中,读取该类成员变量作为参数传入即可,建议增加非空校验避免空引用异常。
完整修改代码示例

1. 声明类成员变量

// 写在窗体类内部、所有方法的外部
private Rhino.Geometry.Brep _selectedBuildingBrep;

2. 修改选择建筑按钮点击事件

private void btnSelectBuilding_Click_1(object sender, EventArgs e)
{
     MyFunctions.SelectBuildingGeometry(out Rhino.Geometry.Brep brep);
     // 将选中的几何赋值给类成员变量
     _selectedBuildingBrep = brep;
}

3. 修改计算按钮点击事件

private void btnCalculate_Click(object sender, EventArgs e)
{
     // 非空校验,避免未选择几何就点击计算引发异常
     if(_selectedBuildingBrep == null)
     {
         MessageBox.Show("请先选择建筑几何形体");
         return;
     }
     MyFunctions.EvaluateGeometry(_selectedBuildingBrep);
}
可选优化

你当前的SelectBuildingGeometry方法同时使用out参数和返回值返回同一个brep对象,逻辑冗余,可以简化为仅用返回值的写法:

// 优化后的工具方法
public static Brep SelectBuildingGeometry()
{
     Brep brep;
     // ...原有选择几何的逻辑不变...    
     return brep;
}

// 对应简化的选择按钮事件
private void btnSelectBuilding_Click_1(object sender, EventArgs e)
{
     _selectedBuildingBrep = MyFunctions.SelectBuildingGeometry();
}

内容的提问来源于stack exchange,提问作者NHQue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:57:03