应用程序:DeleteDimensions
Revit平台:所有
Revit版本:2011.0
首次发布于:9.0
编程语言:C#
技能等级:初级
类别:基础知识、标注
类型:外部命令

主题:删除标注尺寸

概要:展示如何删除标注尺寸元素

相关类:

Autodesk.Revit.UI.IExternalCommand

Autodesk.Revit.DB.Dimension

Autodesk.Revit.DB.Element

项目文件:

DeleteDimesions.cs

该文件包含一个Command类,实现了IExternalCommand接口,类的功能是从所选元素中获取尺寸对象,并删除其中未锁定的尺寸。

功能:

- 使用Application.ActiveUIDocument.Selection.Elements获取所选元素。

- 使用Dimension.Pinned验证尺寸是否被锁定。

- 使用Document.Delete(ElementSet)删除尺寸。

操作说明:

1. 打开或新建一个Revit项目,并确保所有需要删除的标注尺寸已经放置。该示例的样例工程文件DeleteDimensions.rvt可在示例文件夹中找到。

2. 选择要删除的尺寸元素。

3. 运行该命令。

4. 如果标注尺寸未被锁住,它们将被删除。

完整的源代码请加入QQ群649037449,在群文件中下载RevitSDK.exe,解压后在文件夹中搜索本文中应用程序名称即可获得完整源码

DeleteDimesions.cs

//
// (C) Copyright 2003-2019 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;
using System.Collections.Generic;
using System.Text;

using Autodesk;
using Autodesk.Revit;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;

namespace Revit.SDK.Samples.DeleteDimensions.CS
{
   /// <summary>
   ///Add a command that given a selection deletes all the unpinned dimensions 
   /// that are found in that selection.
   /// </summary>
   [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
   [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
   [Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
   public class Command : IExternalCommand
   {
      /// <summary>
      /// Overload this method to implement the external command within Revit.
      /// </summary>
      /// <param name="commandData">An object that is passed to the external application
      /// which contains data related to the command,
      /// such as the application object and active view.</param>
      /// <param name="message">A message that can be set by the external application
      /// which will be displayed if a failure or cancellation is returned by
      /// the external command.</param>
      /// <param name="elements">A set of elements to which the external application
      /// can add elements that are to be highlighted in case of failure or cancellation.</param>
      /// <returns>Return the status of the external command.
      /// A result of Succeeded means that the API external method functioned as expected.
      /// Cancelled can be used to signify that the user cancelled the external operation 
      /// at some point. Failure should be returned if the application is unable to proceed with
      /// the operation.</returns>
      public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData,
          ref string message, Autodesk.Revit.DB.ElementSet elements)
      {
         ElementSet selections = new ElementSet();
         foreach (ElementId elementId in commandData.Application.ActiveUIDocument.Selection.GetElementIds())
         {
            selections.Insert(commandData.Application.ActiveUIDocument.Document.GetElement(elementId));
         }
         ElementSet dimsToDelete = new Autodesk.Revit.DB.ElementSet();

         //warning if nothing selected
         if (0 == selections.Size)
         {
            message = "Please select dimensions";
            return Autodesk.Revit.UI.Result.Failed;
         }

         //find all unpinned dimensions in the current selection 
         foreach (Element e in selections)
         {
            Dimension dimesionTemp = e as Dimension;
            if (null != dimesionTemp && !dimesionTemp.Pinned)
            {
               dimsToDelete.Insert(dimesionTemp);
            }
         }

         //warning if could not find any unpinned dimension
         if (0 == dimsToDelete.Size)
         {
            message = "There are no unpinned dimensions currently selected";
            return Autodesk.Revit.UI.Result.Failed;
         }

         Transaction transaction = new Transaction(commandData.Application.ActiveUIDocument.Document, "External Tool");

         transaction.Start();
         //delete all the unpinned dimensions
         foreach (Element e in dimsToDelete)
         {
             commandData.Application.ActiveUIDocument.Document.Delete(e.Id);
         }

         transaction.Commit();
         return Autodesk.Revit.UI.Result.Succeeded;
      }
   }
}