天天看點

Revit導出DWGExportSetting

Revit導出DWGExportSetting

今天發現Revit中并沒有提供導出

導出設定

的按鍵,查閱API發現這塊屬于

DWGExportSetting

類型,如果導出就隻能自己寫接口進行導出。大部分導出這個位置的應該關注的是圖層修改器,這裡因為他的加載标準,圖層修改器是無法讀取,如果需要傳遞圖層需要傳遞項目标準或自己寫接口進行傳遞,這個也算是一個很雞肋的開發了。

這裡面Revit标準采用的編碼并不是UTF-8而是ANSI需要注意一下,不然導入的話全部都是亂碼。

整個步驟并不是很麻煩,下面是全部的代碼:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;
using GetGeometry;
using System.Windows;
using System.Net.Mail;
using System.Windows.Controls;
using Autodesk.Revit.DB.Architecture;
using BIMTools;
using Microsoft.Win32;


namespace UnitTest
{
    [Transaction(TransactionMode.Manual)]
    public class Commad : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIDocument uidoc = commandData.Application.ActiveUIDocument;
            Document doc = uidoc.Document;
            var names = ExportDWGSettings.ListNames(doc);
            FilteredElementCollector collector = new FilteredElementCollector(doc);
            var allElements = collector.WhereElementIsNotElementType().ToElements();
            var query = from e in allElements
                where e.GetType() == typeof(ExportDWGSettings)
                select e;
            
            var settings = query.FirstOrDefault(x => x.Name == "導出") as ExportDWGSettings;
            var options = settings.GetDWGExportOptions();
            var table = options.GetExportLayerTable();
            var builder = new StringBuilder("# Revit Export Layers");
            builder.AppendLine("# Maps Categories and Subcategories to layer names and color numbers");
            builder.AppendLine("# Category <tab> Subcategory <tab> Layer name <tab> Color number <tab>");
            builder.AppendLine("# Cut layer name <tab> Cut color number");
            builder.AppendLine("# Do not remove the colon (:) after certain category names.");
            builder.AppendLine("# -----------------------------------------------------");
            foreach (var pair in table)
            {
                var key = pair.Key;
                var categoryName = key.CategoryName;
                if (!categoryName.Contains("dwg"))
                {
                    var subCategoryName = key.SubCategoryName;
                    var value = pair.Value;
                    var layerName = value.LayerName;
                    var layerColor = value.ColorNumber;
                    var cutLayerName = value.CutLayerName;
                    var cutLayerColor = value.CutColorNumber;
                    if (layerColor==-1)
                    {
                        // builder.AppendLine(categoryName + "    " + subCategoryName );
                    }
                    else if (cutLayerColor == -1 || cutLayerName == "-1")
                    {
                        builder.AppendLine(categoryName + "\t" + subCategoryName + "\t" + layerName + "\t" +
                                           layerColor);
                    }
                    else
                    {
                        builder.AppendLine(categoryName + "\t" + subCategoryName + "\t" + layerName + "\t" + layerColor + "\t" +
                                           cutLayerName + "\t" + cutLayerColor);
                    }
                }
                else
                {
                    continue;
                }
                
            }
            
            SaveFileDialog dialog = new SaveFileDialog()
            {
                FileName = settings.Name,
                DefaultExt = ".txt"
            };
            var dialogResult = dialog.ShowDialog();
            if (dialogResult == true)
            {
                var path = dialog.FileName;
                using (StreamWriter writer = new StreamWriter(path,true,Encoding.Default))
                {
                    writer.Write(builder);
                }
            }

            return Result.Succeeded;
        }
    }
}