1

我正在为 Autodesk Revit 2014 开发一个插件,将房间几何图形转换为概念体量。但是当我运行脚本时,revit 会完全关闭。我已经隔离了导致崩溃的代码:

Extrusion m_Extrusion = m_FamDoc.FamilyCreate.NewExtrusion(true, m_CurveArArray, m_SketchPlane, 8);

revit 日志显示此错误:

DBG_INFO:检测到未冻结的选择更改。:n:\build\2014_ship_x64_inst_20130308_1515\source\revit\revitui\modscope\ModScope.cpp 的第 571 行

有谁知道我使用挤压命令是否有问题?还是在 Revit 中?

提前致谢。

4

4 回答 4

1

完全冻结很奇怪......它可能与您的代码有关(在 NewExtrusion 调用之前)

事实上,这个方法有一个完整的示例,请参阅 github 上这个文件的 createSolid 方法(大约第 170 行):https ://github.com/ADN-DevTech/RevitTrainingMaterial/blob/master/Labs/3_Revit_Family_API/SourceCS/1_ColumnRectangle .cs

// ==========================================
    //   (1) create a simple solid by extrusion
    // ==========================================
    Extrusion createSolid()
    {
      //
      // (1) define a simple rectangular profile
      //
      //  3     2
      //   +---+
      //   |   | d    h = height
      //   +---+
      //  0     1
      //  4  w
      //
      CurveArrArray pProfile = createProfileRectangle();
      //
      // (2) create a sketch plane
      //
      // we need to know the template. If you look at the template (Metric Column.rft) and "Front" view,
      // you will see "Reference Plane" at "Lower Ref. Level". We are going to create an extrusion there.
      // findElement() is a helper function that find an element of the given type and name.  see below.
      //
      ReferencePlane pRefPlane = findElement(typeof(ReferencePlane), "Reference Plane") as ReferencePlane;
      //SketchPlane pSketchPlane = _doc.FamilyCreate.NewSketchPlane( pRefPlane.Plane ); // 2013
      SketchPlane pSketchPlane = SketchPlane.Create( _doc, pRefPlane.Plane ); // 2014

      // (3) height of the extrusion
      //
      // once again, you will need to know your template. unlike UI, the alightment will not adjust the geometry.
      // You will need to have the exact location in order to set alignment.
      // Here we hard code for simplicity. 4000 is the distance between Lower and Upper Ref. Level.
      // as an exercise, try changing those values and see how it behaves.
      //
      double dHeight = mmToFeet(4000.0);

      // (4) create an extrusion here. at this point. just an box, nothing else.
      //
      bool bIsSolid = true;
      return _doc.FamilyCreate.NewExtrusion(bIsSolid, pProfile, pSketchPlane, dHeight);
    }
于 2015-04-27T18:01:47.230 回答
0

您是否为此创建了交易?类似于:使用 (Transaction trans = new Transaction(doc, "Extrude")) { trans.Start(); 挤压 m_extrusion = m_FamDoc.FamilyCreate.NewExtrusion...... trans.Commit(); }

于 2014-01-13T00:54:08.590 回答
0

通过定义任何类型的数组,我的代码中遇到了同样的问题。几周后通过大量搜索,我一无所获,但我意识到我使用的是 dot net framework 5.0 版,当我将其更改为 dot net framework 4.8 时,一切正常。

于 2022-02-08T09:24:05.160 回答
-1

A. 没有创建我自己的任何挤压代码,并且 B. 不了解您正在做的事情的更大背景,

我最好的建议是查看 Mastering Revit Architecture 2014 这本书。我现在正在看 2013 年的书,其中有一个关于 API 的部分(第 25 章)。在那一章中,他们深入研究了一个占用房间并产生质量的插件。它看起来正是您正在寻找的。

我只是绕道看看 API 参考是否在 2014 年的书中,并且它没有在 TOC 中列出,所以你可能对那个版本不走运(我无法想象他们为什么会删除它),但是2013年肯定会。

http://www.wiley.com/WileyCDA/WileyTitle/productCd-1118174089.html

于 2013-10-31T20:26:05.550 回答