今天發現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;
}
}
}