从墙获取其上的窗户

    技术2026-01-21  3

    窗户和门都是FamilyInstance类的实例,FamilyInstance.Host返回它所在墙的Id

    所以可以通过遍历整个模型中的所有窗户,如果当前窗户的Host值和墙的Id相等,那么这个窗户就是我们要获得的。

    下面是代码示例(For Revit 2010,如需要请升级代码,需要改动些)。

    <code_begin>

    //在执行本命令之前,请选择一堵墙,然后执行本命令

    public class GetWallFromWindow : IExternalCommand

        {

            public IExternalCommand.Result Execute(ExternalCommandData revit,

                                                   ref string message,

                                                   ElementSet elements)

            {

                string strMsg = "/nElement IDs:/n";

                Document doc = revit.Application.ActiveDocument;

                Wall wall1 = null;

                if (doc.Selection.Elements.Size < 1)

                {

                    message = "请选择一个墙";

                    return IExternalCommand.Result.Failed;

                }

                ElementSetIterator iter = doc.Selection.Elements.ForwardIterator();

                iter.MoveNext();

                wall1 = iter.Current as Wall;

                if (wall1 == null)

                {

                    message = "选择的对象不是墙!";

                    return IExternalCommand.Result.Failed;

                }

     

                ElementFilterIterator eIter = doc.get_Elements(typeof(FamilyInstance));

                Element eCur = null;

                FamilyInstance insWindow = null;

                while (eIter.MoveNext())

                {

                    eCur = eIter.Current as Element;

                    if (eCur.Category.Equals(doc.Settings.Categories.get_Item(BuiltInCategory.OST_Windows)))

                    {

                        insWindow = eCur as FamilyInstance;

                        if (insWindow.Host.UniqueId.Equals(wall1.UniqueId))

                        {

                            elements.Insert(insWindow);

                            strMsg = strMsg + insWindow.Id.Value.ToString() + "/n";

                        }

                    }

                }

     

                // 找到窗子后,对话框中显示找到的窗户数量。

                strMsg = elements.Size.ToString() + " 个窗户在选中的墙中:/n" + strMsg;

                MessageBox.Show(strMsg);

     

                return IExternalCommand.Result.Succeeded;

            }

        }

    <code_end>

    最新回复(0)