判断链接文件偏移量创建空间。
start
url:http://greatverve.cnblogs.com/p/revit-create-space.html
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class cmd : IExternalCommand
{
/// <summary>
/// 根据链接文件名称找到对应链接路径,模糊匹配,待改进
/// </summary>
/// <param name="listPath"></param>
/// <param name="strKey"></param>
/// <returns></returns>
private string GetPath(List<string> listPath, string strKey)
{
foreach (string strPath in listPath)
{
if (strPath.Contains(strKey))
return strPath;
}
return "";
}
public Result Execute(ExternalCommandData cmdData, ref string msg, ElementSet elements)
{
UIDocument uiDoc = cmdData.Application.ActiveUIDocument;
UIApplication uiApp = cmdData.Application;
Document doc = uiDoc.Document;
Selection selection = uiDoc.Selection;
Transaction ts = new Transaction(doc, "www");
ts.Start();
FilteredElementCollector collector = new FilteredElementCollector(doc);//
collector.OfClass(typeof(Instance)).OfCategory(BuiltInCategory.OST_RvtLinks);//RevitLinkType
List<string> listPath = GetLinkFilePaths(doc);
foreach (Element elDoc in collector)
{
Instance ins = elDoc as Instance;
if (ins != null)
{
Transform transForm = ins.GetTransform();
string strKey = elDoc.Name.Substring(0, elDoc.Name.IndexOf(".rvt"));//找到链接文件名称
Document docLink = uiApp.Application.OpenDocumentFile(GetPath(listPath, strKey));
FilteredElementCollector collectorLink = new FilteredElementCollector(docLink);
collectorLink.OfCategory(BuiltInCategory.OST_Rooms);
foreach (Element el in collectorLink)
{
Room room = el as Room;
LocationPoint roomPoint = room.Location as LocationPoint;
UV uv = new UV();
if (room.Location != null)
{
uv = new UV(roomPoint.Point.X + transForm.Origin.X, roomPoint.Point.Y + transForm.Origin.Y);
}
doc.Create.NewSpace(room.Level, uv);
}
}
}
ts.Commit();
return Result.Succeeded;
}
/// <summary>
/// 取得链接文件路径
/// </summary>
/// <param name="doc"></param>
/// <returns></returns>
public List<string> GetLinkFilePaths(Document doc)
{
List<string> listPath = new List<string>();
foreach (ElementId elId in ExternalFileUtils.GetAllExternalFileReferences(doc))
{
if (doc.get_Element(elId).IsExternalFileReference())
{
ExternalFileReference fileRef = doc.get_Element(elId).GetExternalFileReference();
if ("RevitLink" == fileRef.ExternalFileReferenceType.ToString())
listPath.Add(ModelPathUtils.ConvertModelPathToUserVisiblePath(fileRef.GetAbsolutePath()));
}
}
return listPath;
}
}
[Regeneration(RegenerationOption.Manual)]
public class cmd : IExternalCommand
{
/// <summary>
/// 根据链接文件名称找到对应链接路径,模糊匹配,待改进
/// </summary>
/// <param name="listPath"></param>
/// <param name="strKey"></param>
/// <returns></returns>
private string GetPath(List<string> listPath, string strKey)
{
foreach (string strPath in listPath)
{
if (strPath.Contains(strKey))
return strPath;
}
return "";
}
public Result Execute(ExternalCommandData cmdData, ref string msg, ElementSet elements)
{
UIDocument uiDoc = cmdData.Application.ActiveUIDocument;
UIApplication uiApp = cmdData.Application;
Document doc = uiDoc.Document;
Selection selection = uiDoc.Selection;
Transaction ts = new Transaction(doc, "www");
ts.Start();
FilteredElementCollector collector = new FilteredElementCollector(doc);//
collector.OfClass(typeof(Instance)).OfCategory(BuiltInCategory.OST_RvtLinks);//RevitLinkType
List<string> listPath = GetLinkFilePaths(doc);
foreach (Element elDoc in collector)
{
Instance ins = elDoc as Instance;
if (ins != null)
{
Transform transForm = ins.GetTransform();
string strKey = elDoc.Name.Substring(0, elDoc.Name.IndexOf(".rvt"));//找到链接文件名称
Document docLink = uiApp.Application.OpenDocumentFile(GetPath(listPath, strKey));
FilteredElementCollector collectorLink = new FilteredElementCollector(docLink);
collectorLink.OfCategory(BuiltInCategory.OST_Rooms);
foreach (Element el in collectorLink)
{
Room room = el as Room;
LocationPoint roomPoint = room.Location as LocationPoint;
UV uv = new UV();
if (room.Location != null)
{
uv = new UV(roomPoint.Point.X + transForm.Origin.X, roomPoint.Point.Y + transForm.Origin.Y);
}
doc.Create.NewSpace(room.Level, uv);
}
}
}
ts.Commit();
return Result.Succeeded;
}
/// <summary>
/// 取得链接文件路径
/// </summary>
/// <param name="doc"></param>
/// <returns></returns>
public List<string> GetLinkFilePaths(Document doc)
{
List<string> listPath = new List<string>();
foreach (ElementId elId in ExternalFileUtils.GetAllExternalFileReferences(doc))
{
if (doc.get_Element(elId).IsExternalFileReference())
{
ExternalFileReference fileRef = doc.get_Element(elId).GetExternalFileReference();
if ("RevitLink" == fileRef.ExternalFileReferenceType.ToString())
listPath.Add(ModelPathUtils.ConvertModelPathToUserVisiblePath(fileRef.GetAbsolutePath()));
}
}
return listPath;
}
}
我这个博客废弃不用了,今天想寻找外链的时候,突然想到这个博客权重很高。
有需要免费外链的,留言即可,我准备把这个博客变成免费的友情链接站点。