/* ==============================================================================
* 功能描述:DocExtend
* 创 建 者:Garrett
* 创建日期:2018/6/11 16:00:53
* ==============================================================================*/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using Autodesk.Revit.DB;
using SAGA.DotNetUtils;
using SAGA.RevitUtils.Extends;
namespace MBIUtility.Extend
{
///
/// DocExtend
///
public static class DocExtend
{
public static readonly string MBIResourcePath = Path.Combine(AppBaseInfo.AppRunPath, "MBIResource");
public static readonly string EmptyFilePath = Path.Combine(MBIResourcePath, "EmptyFile\\EmptyProject.rvt");
///
/// 关闭文档
///
///
///
public static bool CloseDoc(string path)
{
if (path == null || !File.Exists(path)) return false;
bool result = true;
try
{
//打开空文件并激活
var placeholderFile = EmptyFilePath;
var uiApp = ExternalDataWrapper.Current.UiApp;
var docs = uiApp.Application.Documents;
if (docs.IsEmpty) return result;
if (uiApp.ActiveUIDocument != null && uiApp.ActiveUIDocument.Document.PathName == path)
{
var docCur = uiApp.ActiveUIDocument;
uiApp.OpenAndActivateDocument(placeholderFile);
result = docCur.SaveAndClose();
}
else
{
foreach (Document doc in docs)
{
if (doc.PathName == path)
{
//版本升级,保存
var verionName = doc.Application.VersionName;
var info = BasicFileInfo.Extract(doc.PathName);
var savedInVersion = info.SavedInVersion; //<==Autodesk Revit 2014
result = doc.Close(verionName != savedInVersion || doc.IsModified);
}
}
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
return result;
}
///
/// 关闭文档
///
///
///
public static bool CloseDoc(this Document doc)
{
return CloseDoc(doc?.PathName);
}
///
/// 简单关闭模型不保存
///
///
///
public static bool CloseDocSimple(this Document doc)
{
bool result = true;
var basePath = doc.PathName;
var uiApp = ExternalDataWrapper.Current.UiApp;
if (uiApp.ActiveUIDocument != null && uiApp.ActiveUIDocument.Document.PathName == basePath)
{
result= false;
}
else
{
result= doc.Close();
}
return result;
}
///
/// 由code获取FamilySymbol
///
///
///
///
public static FamilySymbol GetFamilySymbol(this Document doc, string code)
{
Func filterFamily = (t) =>
{
return Regex.IsMatch(t, $@"{code}\s*-\s*\S*");
};
List listFamily = doc.GetFamilys();
var fa = listFamily.FirstOrDefault(t => filterFamily(t.Name));
List symbolList = fa?.GetFamilySymbols();
var fs= symbolList?.FirstOrDefault();
if (fs!=null&&!fs.IsActive)
fs.Activate();
return fs;
}
}
}