放置固定类型的门

简介: 放置固定类型的门
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.Attributes;
namespace 放置固定类型的门
{
    [TransactionAttribute(TransactionMode.Manual)]
    public class Class1 : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIDocument uidoc = commandData.Application.ActiveUIDocument;
            Document doc = uidoc.Document;
            string doorTypeName = "0762 x 2032mm"; 
             FamilySymbol doorType = null;
            //在文档中找到名字为"0762 x 2032mm"的门类型。
            ElementFilter doorCategory = new ElementCategoryFilter(BuiltInCategory.OST_Doors);
            ElementFilter familySymbolFilter = new ElementClassFilter(typeof(FamilySymbol));
            LogicalAndFilter andFilter = new LogicalAndFilter(doorCategory, familySymbolFilter);
            FilteredElementCollector doorSymbols = new FilteredElementCollector(doc);
            doorSymbols = doorSymbols.WherePasses(andFilter);
            bool symbolFound = false;
            foreach (FamilySymbol element in doorSymbols)
            {
                if (element.Name == doorTypeName)
                {
                    symbolFound = true;
                    doorType = element;
                    break;
                }
            }
            //使用族类型创建门。
            if (doorType != null)
            {
                ElementFilter wallfilter = new ElementClassFilter(typeof(Wall));
                FilteredElementCollector filteredElements = new FilteredElementCollector(doc);
                filteredElements = filteredElements.WherePasses(wallfilter);
                Wall wall = null;
                Line line = null;
                foreach (Wall element in filteredElements)
                {
                    LocationCurve locationCurve = element.Location as LocationCurve;
                    if (locationCurve != null)
                    {
                        line = locationCurve.Curve as Line;
                        if (line != null)
                        {
                            wall = element;
                            break;
                        }
                    }
                }
                //在墙的中心位置创建一个门。
                if ( wall != null)
                {
                    XYZ midPoint = (line.GetEndPoint(0) + line.GetEndPoint(1)) / 2;
                    Level wallLevel = doc.GetElement(wall.LevelId) as Level;
                    //创建门:传入标高参数,作为门的默认标高。
                    //对文档进行修改必须使用事务。
                    Transaction transaction = new Transaction(doc);
                    transaction.Start("放置固定门");
                    FamilyInstance door = doc.Create.NewFamilyInstance(midPoint, doorType, wall, wallLevel, 
                        Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
                    transaction.Commit();
                    TaskDialog.Show("Succeeed", door.Id.ToString());
                }
                else
                {
                    TaskDialog.Show("Failed", "没有找到符合条件的墙");
                }
            }
            else
            {
                TaskDialog.Show("Failed", "没有族类型" + doorTypeName);
            }
            return Result.Succeeded;
        }
    }
}
相关文章
|
3天前
|
机器学习/深度学习 编译器 C语言
【C语言】数据输出的域宽控制(如何在输出数据时控制0占位)(如何输出前导0)(保留几位小数)(乘法口诀表打印不齐)等问题
【C语言】数据输出的域宽控制(如何在输出数据时控制0占位)(如何输出前导0)(保留几位小数)(乘法口诀表打印不齐)等问题
28 0
|
3天前
LabVIEW如何获取波形图上游标所在位置的数值
LabVIEW如何获取波形图上游标所在位置的数值
|
3天前
【每日一题Day162】LC1637两点之间不包含任何点的最宽垂直区域 | 排序
【每日一题Day162】LC1637两点之间不包含任何点的最宽垂直区域 | 排序
102 0
|
10月前
封装一个函数,可以自定义范围与跳过的数字。 例如在 100(不固定) ~ 1000(不固定) 内查找 5 (不固定)的倍数 和 带有 5 的值
封装一个函数,可以自定义范围与跳过的数字。 例如在 100(不固定) ~ 1000(不固定) 内查找 5 (不固定)的倍数 和 带有 5 的值
35 0
|
3天前
[MFC] Edit控件上的数据(可控固定位数)显示
[MFC] Edit控件上的数据(可控固定位数)显示
47 0
|
10月前
【各种进之间的转换】
【各种进之间的转换】
|
10月前
封装一个函数,山峰 高度不固定、纸张厚度不固定,计算折叠几次后超过山峰
封装一个函数,山峰 高度不固定、纸张厚度不固定,计算折叠几次后超过山峰
35 0
西门子S7-1200的运动控制功能、系统使能指令块、错误确认指令块、回参考点或设置参考点指令块的参数含义
今天我们来介绍西门子S7-1200的运动控制功能。西门子S7-1200的运动控制指令是通过使用相关工艺数据块和CPU的专用脉冲串输出来控制轴的运动。
西门子S7-1200的运动控制功能、系统使能指令块、错误确认指令块、回参考点或设置参考点指令块的参数含义
|
小程序 数据管理 定位技术
小程序中计算距离信息
小程序中计算距离信息
小程序中计算距离信息
|
存储 缓存 Java
字节面:什么是伪共享?
什么是伪共享?又该怎么避免伪共享的问题?
字节面:什么是伪共享?