我正在研究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中的东西?
提前致谢。
答案 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