用户登录
找回密码
立即注册
搜索
热搜: 视频教程
查看: 170|回复: 1

如何在Revit族中创建风管连接件

[复制链接]

1

主题

1

帖子

34

积分

新手上路

Rank: 1

积分
34
发表于 2024-10-22 10:28:06 | 显示全部楼层 |阅读模式

我想实现在Revit族中创建一个立方体,基于立方体的一个面创建风管连接件。插件代码有两个操作,第一个创建实例,第二个创建风管连接件。
族中有一个嵌套公制机械设备族,族名称“族1”,族类型名称“族1”,族类型的ID是3165。这个嵌套族中仅有一个拉伸立方体。

族文件截图(视图中的立方体,是为了看嵌套族里的内容,手工创建的,插件运行时没有这个立方体):

族截图

族截图


代码如下:
[Transaction(TransactionMode.Manual)]
public class Command : IExternalCommand
{
    public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
    {
        UIApplication uiapp = commandData.Application;
        UIDocument uidoc = uiapp.ActiveUIDocument;
        Document doc = uidoc.Document;
        FamilySymbol symbol = (FamilySymbol)(doc.GetElement(new ElementId(3165)));
        Transaction transaction = new Transaction(doc, "abc");
        transaction.Start();
        FamilyInstance instance = doc.FamilyCreate.NewFamilyInstance(new XYZ(), symbol, StructuralType.NonStructural);
        transaction.Commit();
        var planar = GetPlanars(instance);
        if (planar != null)
        {
            transaction.Start();
            ConnectorElement.CreateDuctConnector(doc, DuctSystemType.Global, ConnectorProfileType.Rectangular, planar.Reference);
            transaction.Commit();
            MessageBox.Show("Succeeded");
        }
        return Result.Succeeded;
    }

    private PlanarFace GetPlanars(FamilyInstance instance)
    {
        Options options = new Options
        {
            ComputeReferences = false,
            DetailLevel = ViewDetailLevel.Fine
        };
        GeometryElement geometryobj = instance.get_Geometry(options);
        if (geometryobj == null || geometryobj.Count() == 0)
        {
            MessageBox.Show("获取面失败");
            return null;
        }
        IEnumerator<GeometryObject> enumerator = geometryobj.GetEnumerator();
        while (enumerator.MoveNext())
        {
            Solid solid = enumerator.Current as Solid;
            if (solid == null || solid.SurfaceArea == 0)
            {
                GeometryInstance geoElem = enumerator.Current as GeometryInstance;
                if (geoElem != null)
                {
                    GeometryElement enumerator2 = geoElem.GetInstanceGeometry();
                    IEnumerator<GeometryObject> enumerator3 = enumerator2.GetEnumerator();
                    while (enumerator3.MoveNext())
                    {
                        solid = enumerator3.Current as Solid;
                        if (solid != null && solid.SurfaceArea > 0)
                        {
                            foreach (Face face in solid.Faces)
                            {
                                if (face is PlanarFace)
                                {
                                    return (PlanarFace)face;
                                }
                            }
                        }

                    }
                }
            }
        }
        return null;
    }
}

运行时,创建实例没有问题,获取实例几何的面也没有问题。调试截图如下:

获取几何面

获取几何面


创建风管连接件时出错,提示平面引用有问题

调试平面引用出错

调试平面引用出错

Revit错误提示截面

Revit错误提示截面


向各位专家请教,我该如何创建这个风管连接件?
回复

使用道具 举报

743

主题

3657

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12259
QQ
发表于 2024-10-23 15:55:09 | 显示全部楼层

这里需要改为True

  Options options = new Options
        {
            ComputeReferences = true,
            DetailLevel = ViewDetailLevel.Fine
        };
力鼎用户成功,
Joe
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.

京ICP备17008402号-1  |  Archiver  |  手机版  |  小黑屋  |  橄榄山BIM论坛    

点击立刻咨询
快速回复 返回顶部 返回列表