Autodesk Revit插件崩溃

时间:2013-10-10 14:34:11

标签: c# revit autodesk revit-api

我正在研究Autodesk Revit 2014将室内几何体转换为概念性质量的插件。 但是当我运行脚本时,revit完全关闭。 我已经隔离了导致崩溃的代码:

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

revit日志显示此错误:

  

DBG_INFO:检测到未冻结的选择变化:第571行   N:\建立\ 2014_ship_x64_inst_20130308_1515 \源\的Revit \ revitui \ modscope \ ModScope.cpp

有没有人知道我使用squee命令是否有问题?或者它是Revit中的东西?

提前致谢。

3 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分:0)

你为此创建了一个交易吗?就像是:      使用(交易转换=新交易(doc," Extrude"))      {          trans.Start();          挤压m_extrusion = m_FamDoc.FamilyCreate.NewExtrusion ......          trans.Commit();      }

答案 2 :(得分:-1)

一个。没有创建我自己的任何挤出代码,和 B.不理解你正在做的事情的更大背景,

我最好的建议是看看Mastering Revit Architecture 2014这本书。我现在正在查看2013年的书,并且有关于API的章节(第25章)。在那一章中,他们深入研究了一个占据房间并产生群众的插件。它看起来完全你正在寻找的东西。

我只是绕道去看看API参考是否在2014年的书中,并且没有在TOC中列出,所以你可能对这个版本不太满意(我无法想象他们为什么会这样做)消除它),但2013绝对会。

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