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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值