【问题标题】:How to add Results for loop to List如何将循环结果添加到列表
【发布时间】:2019-09-21 23:32:36
【问题描述】:

我使用 revit 代码来收集 CurveLoops 并创建放样几何体。

使用 for 循环创建 CurveLoops 可以正常工作(从点创建线)。但它会创建两个单独的 CurveLoops。

我尝试将 for 循环结果添加到新列表 (profile3)。但它返回两个列表,其中包含一个 CurveLoop。在我的情况下,它应该是一个列表中的两个曲线循环(profile3)

CurveLoop profileLoop = new CurveLoop();

List<CurveLoop> profile3 = new List<CurveLoop>();

SolidOptions options = new SolidOptions(ElementId.InvalidElementId,
ElementId.InvalidElementId);

for (int i = 0; i < p.Count - 1; ++i)
{
    // Create lines and convert points to mm
    Line line = Line.CreateBound(p[i] / 304.8, p[i + 1] / 304.8);
    //Append points to CurveLoop
    profileLoop.Append(line);
}

//Here I want to add both created CurveLoops to list
profile3.Add(profileLoop);

//Create Loft
Solid loft = GeometryCreationUtilities.CreateLoftGeometry(profile3
    , options);

无法创建阁楼,因为它在列表中只有一个曲线循环,并且需要从 for 循环中创建两个

应该在一个列表中的第一个 CurveLoop 和第二个 CurveLoop

【问题讨论】:

  • 我真的看不出你在哪里创建 2 个 CurveLoops.. 我只看到 1 个 Curveloop 对象
  • 您是否发布了所有代码?这里只有一个Curveloop 对象。
  • API 来看,CurveLoop 似乎是曲线的集合......也许这就是产生混乱的地方?
  • 它从两个包含 9 个点的列表中创建两个 CurveLoops

标签: c# list for-loop revit-api


【解决方案1】:

您似乎需要将相同的CurveLoop 添加到列表中两次。所以你最终会得到一个包含两个匹配元素的列表。

我建议再做一次profile3.Add(profileLoop);

您并没有真正为迭代器创建两个不同的CurveLoops,只是一个。因此,您需要将其两次添加到列表中才能使您的结果生效。

【讨论】:

    【解决方案2】:

    问题

    你在这里所做的是将同一个对象多次传递到一个列表中,然后想知道为什么列表中的所有对象都是相同的。

    解决方案

    您可能想查看passing by reference 的概念以及reference types and value types 之间的区别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-01
      • 2020-01-10
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      相关资源
      最近更新 更多