一业内朋友让我写个快速创建标高的插件。


一业内朋友让我写个快速创建标高的插件。

//创建标高

[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;

                default: return 1;

            }

        }

        #endregion

    }

}