zoukankan      html  css  js  c++  java
  • 判断链接文件偏移量创建空间。

    start
    [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;
        }
    }
    url:http://greatverve.cnblogs.com/p/revit-create-space.html
  • 相关阅读:
    封神台靶机练习第一章:SQL注入攻击原理
    java基础复习-自定义注解1(如何自定义注解?)
    java复习预科知识-Markdown学习
    leetcode-888-公平的糖果交换
    leetcode-884-两句话中的不常见单词
    leetcode-139-单词拆分(递归超时,动归解决)
    leetcode-134-加油站
    leetcode-91-解码方法(动态规划和递归两种解法)
    leetcode-56-合并区间
    leetcode-55-跳跃游戏
  • 原文地址:https://www.cnblogs.com/greatverve/p/revit-create-space.html
Copyright © 2011-2022 走看看