• Revit API创建标高,单位转换


    一业内朋友让我写个快速创建标高的插件。
    //创建标高
    [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    public class cmdDrawLevel : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
        {
            UIApplication app = commandData.Application;
            Document doc = app.ActiveUIDocument.Document;
            Selection sel = app.ActiveUIDocument.Selection;
            try
            {
                Transaction ts = new Transaction(doc, "revit");
                ts.Start();
                //起始,间距,数量,前缀
                double dStart = RevitTools.Unit.CovertToAPI(double.Parse(XmlTools.levelStart), DisplayUnitType.DUT_METERS);
                double dDis = RevitTools.Unit.CovertToAPI(double.Parse(XmlTools.levelDis), DisplayUnitType.DUT_METERS);
                int iNum = int.Parse(XmlTools.levelNum);
                //创建起始标高
                Level levelStart = doc.Create.NewLevel(dStart);
                levelStart.Name = XmlTools.levelPre + 1;
                //
                for (int i = 1; i <= iNum; i++)
                {
                    Level level = doc.Create.NewLevel(dStart + i * dDis);
                    level.Name = XmlTools.levelPre + (i + 1);
                }

                ts.Commit();
            }
            catch (Exception ex)
            {
                TaskDialog.Show("error""请检查是否命名重复。");
            }

            return Result.Succeeded;
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace RevitCodes
    {
        class XmlTools
        {
            public static string levelStart = "4";
            public static string levelDis = "4";
            public static string levelNum = "10";
            public static string levelPre = "F";
        }
    }
    //
    // (C) Copyright 2003-2010 by Autodesk, Inc.
    //
    // Permission to use, copy, modify, and distribute this software in
    // object code form for any purpose and without fee is hereby granted,
    // provided that the above copyright notice appears in all copies and
    // that both that copyright notice and the limited warranty and
    // restricted rights notice below appear in all supporting
    // documentation.
    //
    // AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
    // AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
    // MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.
    // DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
    // UNINTERRUPTED OR ERROR FREE.
    //
    // Use, duplication, or disclosure by the U.S. Government is subject to
    // restrictions set forth in FAR 52.227-19 (Commercial Computer
    // Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
    // (Rights in Technical Data and Computer Software), as applicable.
    //


    using System;
    using System.Collections.Generic;
    using System.Text;
    using Autodesk.Revit.DB;
    using System.Configuration;
    using System.Reflection;

    namespace RevitTools
    {
        /// <summary>
        
    /// Provides static functions to convert unit
        
    /// </summary>
        static class Unit
        {
            #region Methods
            /// <summary>
            
    /// Convert the value get from RevitAPI to the value indicated by DisplayUnitType
            
    /// </summary>
            
    /// <param name="to">DisplayUnitType indicates unit of target value</param>
            
    /// <param name="value">value get from RevitAPI</param>
            
    /// <returns>Target value</returns>
            public static double CovertFromAPI(DisplayUnitType to, double value)
            {
                return value *= ImperialDutRatio(to);
            }

            /// <summary>
            
    /// Convert a value indicated by DisplayUnitType to the value used by RevitAPI
            
    /// </summary>
            
    /// <param name="value">Value to be converted</param>
            
    /// <param name="from">DisplayUnitType indicates the unit of the value to be converted</param>
            
    /// <returns>Target value</returns>
            public static double CovertToAPI(double value, DisplayUnitType from )
            {
                return value /= ImperialDutRatio(from);
            }

            /// <summary>
            
    /// Get ratio between value in RevitAPI and value to display indicated by DisplayUnitType
            
    /// </summary>
            
    /// <param name="dut">DisplayUnitType indicates display unit type</param>
            
    /// <returns>Ratio </returns>
            private static double ImperialDutRatio(DisplayUnitType dut) 
            {
                switch (dut)
                {
                    case DisplayUnitType.DUT_DECIMAL_FEET: return 1;
                    case DisplayUnitType.DUT_FEET_FRACTIONAL_INCHES: return 1;
                    case DisplayUnitType.DUT_DECIMAL_INCHES: return 12;
                    case DisplayUnitType.DUT_FRACTIONAL_INCHES: return 12;
                    case DisplayUnitType.DUT_METERS: return 0.3048;
                    case DisplayUnitType.DUT_CENTIMETERS: return 30.48;
                    case DisplayUnitType.DUT_MILLIMETERS: return 304.8;
                    case DisplayUnitType.DUT_METERS_CENTIMETERS: return 0.3048;
                    defaultreturn 1;
                }
            }
            #endregion
        }
    }
    url:http://greatverve.cnblogs.com/p/revit-api-create-level.html
  • 相关阅读:
    JS图片不间断滚动代码(向上,向下,向左,向右)
    存储过程int型转字符型
    DataList编辑、更新、取消、删除、分页
    js设置焦点
    iFrame只要竖滚动条,不要横滚动条
    C#中通过值和引用传递参数
    关于C#值类型,引用类型,值传递,引用传递
    提醒自我
    c#读取html文件内容替换之后再写入
    sql中替换字符串
  • 原文地址:https://www.cnblogs.com/greatverve/p/revit-api-create-level.html
Copyright © 2020-2023  润新知