Esempio n. 1
0
        /// <summary>
        /// 创建工作集
        /// </summary>
        /// <param name="doc">当前文档</param>
        /// <param name="worksetName">输入工作集名称</param>
        /// <returns>新的工作集</returns>
        public Workset CreateWorksets(Document doc, string worksetName)
        {
            Workset newWorksets = null;

            if (WorksetTable.IsWorksetNameUnique(doc, worksetName))
            {
                using (Transaction trans = new Transaction(doc, "创建工作集"))
                {
                    trans.Start();
                    newWorksets = Workset.Create(doc, worksetName);
                    trans.Commit();
                }
            }
            //判定是否有重名的工作集
            else
            {
                FilteredWorksetCollector worksetCollector = new FilteredWorksetCollector(doc);
                IList <Workset>          worksetsList     = worksetCollector.OfKind(WorksetKind.UserWorkset).ToWorksets();
                foreach (Workset workset in worksetsList)
                {
                    if (workset.Name.Contains(worksetName))
                    {
                        return(workset);
                    }
                }
            }
            return(newWorksets);
        }
Esempio n. 2
0
        public static Workset GetOrCreateWorkset(Document doc, string worksetName)
        {
            IList <Workset> userWorksets = new FilteredWorksetCollector(doc)
                                           .OfKind(WorksetKind.UserWorkset)
                                           .ToWorksets();

            bool checkNotExists = WorksetTable.IsWorksetNameUnique(doc, worksetName);

            if (!checkNotExists)
            {
                Debug.WriteLine("Workset exists: " + worksetName);
                Workset wset = new FilteredWorksetCollector(doc)
                               .OfKind(WorksetKind.UserWorkset)
                               .ToWorksets()
                               .Where(w => w.Name == worksetName)
                               .First();
                return(wset);
            }
            else
            {
                Debug.WriteLine("Create workset: " + worksetName);
                Workset wset = Workset.Create(doc, worksetName);
                return(wset);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Determines whether a given name is already used in the document.
        /// </summary>
        /// <param name="name">A workset name</param>
        /// <returns name="bool">True if workset name is unique in the document, false if already used.</returns>
        public static bool IsWorksetNameUnique(string name)
        {
            //Get Revit Document object
            revitDoc doc = DocumentManager.Instance.CurrentDBDocument;

            return(WorksetTable.IsWorksetNameUnique(doc, name));
        }
Esempio n. 4
0
        private static Workset GetWorkSet(Document doc)
        {
            Workset workSet = null;

            if (doc.IsWorkshared)
            {
                string workSetName = "WorkSetName";
                if (WorksetTable.IsWorksetNameUnique(doc, workSetName))
                {
                    using (Transaction tran = new Transaction(doc, "[ToolSet] Create Work Set For ToolSet"))
                    {
                        tran.Start();
                        workSet = Workset.Create(doc, workSetName);
                        tran.Commit();
                    }
                }
                else
                {
                    IList <Workset> list = new FilteredWorksetCollector(doc).OfKind(WorksetKind.UserWorkset).ToWorksets();
                    foreach (var item in list)
                    {
                        if (item.Name.Contains(workSetName))
                        {
                            return(item);
                        }
                    }
                }
            }
            return(workSet);
        }
Esempio n. 5
0
        public static IDictionary ByName(
            string name,
            [DefaultArgument("true")] bool visible,
            [DefaultArgument("\"\"")] string alias
            )
        {
            //Get Revit Document object
            revitDoc doc = DocumentManager.Instance.CurrentDBDocument;

            Workset workset = null;
            bool    created = false;

            //Only create workset if it's name isn't an empty string
            if (name != null && name != "")
            {
                //Verify that each workset isn't already in the document
                //If the workset is unique, create it
                if (WorksetTable.IsWorksetNameUnique(doc, name))
                {
                    //If the alias is already in the document
                    if (alias != null && WorksetTable.IsWorksetNameUnique(doc, alias) == false)
                    {
                        workset = GetByName(alias);
                        Rename(workset, name);
                        created = true;
                    }
                    else
                    {
                        using (Autodesk.Revit.DB.Transaction trans = new Autodesk.Revit.DB.Transaction(doc))
                        {
                            trans.Start("Create Workset");

                            workset = new Workset(doc, revitWorkset.Create(doc, name));

                            trans.Commit();
                        }
                        SetDefaultVisibility(workset, visible);
                        created = true;
                    }
                }
                // If the workset is already in the document, retrieve the workset
                else
                {
                    workset = GetByName(name);
                    created = false;
                }
            }

            return(new Dictionary <string, object>
            {
                { "workset", workset },
                { "created", created }
            });
        }
Esempio n. 6
0
        public static List <string> GetUsedNames(Document CurrentDoc, List <string> SelectedWorksets)
        {
            List <string> usedNames = new List <string>();

            foreach (string s in SelectedWorksets)
            {
                if (!WorksetTable.IsWorksetNameUnique(CurrentDoc, s))
                {
                    usedNames.Add(s);
                }
            }
            return(usedNames);
        }
Esempio n. 7
0
 private void button1_Click(object sender, EventArgs e)
 {
     if (selectedWorksetNames.Count == 0)
     {
         TaskDialog.Show("Error", "No worksets selected.");
         return;
     }
     // Document doc = extCommandData.Application.ActiveUIDocument.Document;
     using (Transaction t = new Transaction(doc, "Making Worksets"))
     {
         try
         {
             t.Start();
             // Workset workset1 = new FilteredWorksetCollector(doc).OfKind(WorksetKind.UserWorkset).Where(w => w.Name == "Workset1").FirstOrDefault();
             // WorksetId workset1Id = workset1?.Id;
             for (int i = 0; i < selectedWorksetNames.Count; i++)
             {
                 if (WorksetTable.IsWorksetNameUnique(doc, selectedWorksetNames[i].ToString()))
                 {
                     /*
                      * if (i == 0 && workset1Id != null)
                      * {
                      *  WorksetTable.RenameWorkset(doc, workset1Id, selectedWorksetNames[i].ToString());
                      * }
                      * else
                      * {
                      *  Workset.Create(doc, selectedWorksetNames[i].ToString());
                      * }
                      */
                     Workset.Create(doc, selectedWorksetNames[i].ToString());
                 }
                 else
                 {
                     TaskDialog.Show("Error", $"Duplicate workset name already exists in project: {selectedWorksetNames[i]}");
                 }
             }
             t.Commit();
             TaskDialog.Show("Success", $"{selectedWorksetNames.Count} worksets created.");
         }
         catch (Exception error)
         {
             t.RollBack();
             TaskDialog.Show("Error", error.ToString());
         }
     }
     this.Close();
 }
Esempio n. 8
0
 public static void ApplyWorksetModifications(Document doc, List <WorksetParameter> worksets, ref TransactionLog log)
 {
     using (Transaction t = new Transaction(doc))
     {
         if (t.Start("Add Worksets to Model.") == TransactionStatus.Started)
         {
             foreach (var w in worksets)
             {
                 if (w.IsModified)
                 {
                     if (w.IsExisting && w.Id >= 0)
                     {
                         if (WorksetTable.IsWorksetNameUnique(doc, w.Name))
                         {
                             WorksetTable.RenameWorkset(doc, new WorksetId(w.Id), w.Name);
                         }
                         var defaultVisibilitySettings = WorksetDefaultVisibilitySettings.GetWorksetDefaultVisibilitySettings(doc);
                         defaultVisibilitySettings.SetWorksetVisibility(new WorksetId(w.Id), w.VisibleInAllViews);
                         log.AddSuccess(w.ToString());
                     }
                     else
                     {
                         Workset newWorkset = null;
                         if (WorksetTable.IsWorksetNameUnique(doc, w.Name))
                         {
                             newWorkset = Workset.Create(doc, w.Name);
                         }
                         else
                         {
                             log.AddFailure(w.ToString());
                             continue;
                         }
                         if (newWorkset != null)
                         {
                             var defaultVisibilitySettings = WorksetDefaultVisibilitySettings.GetWorksetDefaultVisibilitySettings(doc);
                             defaultVisibilitySettings.SetWorksetVisibility(newWorkset.Id, w.VisibleInAllViews);
                             log.AddSuccess(w.ToString());
                         }
                     }
                 }
             }
             t.Commit();
         }
     }
 }
Esempio n. 9
0
        /// <summary>
        /// 创建工作集
        /// </summary>
        /// <param name="doc"></param>
        /// <returns></returns>
        public Workset CreateWorkset(Document doc)
        {
            Workset workset = null;

            if (doc.IsWorkshared)
            {
                string worksetName = "New Workset";
                if (WorksetTable.IsWorksetNameUnique(doc, worksetName))
                {
                    using (Transaction worksetTransaction = new Transaction(doc, "Set preview view id"))
                    {
                        worksetTransaction.Start();
                        workset = Workset.Create(doc, worksetName);
                        worksetTransaction.Commit();
                    }
                }
            }
            return(workset);
        }
Esempio n. 10
0
        private Workset CreateWorkset(Document document)
        {
            Workset newWorkset = null;

            // Worksets can only be created in a document with worksharing enabled
            if (document.IsWorkshared)
            {
                string worksetName  = "Workset4";
                string worksetName1 = "Workset5";
                string worksetName2 = "Workset6";
                // Workset name must not be in use by another workset
                if (WorksetTable.IsWorksetNameUnique(document, worksetName))
                {
                    using (Transaction worksetTransaction = new Transaction(document, "Set preview view id"))
                    {
                        worksetTransaction.Start();
                        newWorkset = Workset.Create(document, worksetName);
                        worksetTransaction.Commit();
                    }
                }
                if (WorksetTable.IsWorksetNameUnique(document, worksetName1))
                {
                    using (Transaction worksetTransaction = new Transaction(document, "Set preview view id"))
                    {
                        worksetTransaction.Start();
                        newWorkset = Workset.Create(document, worksetName1);
                        worksetTransaction.Commit();
                    }
                }
                if (WorksetTable.IsWorksetNameUnique(document, worksetName2))
                {
                    using (Transaction worksetTransaction = new Transaction(document, "Set preview view id"))
                    {
                        worksetTransaction.Start();
                        newWorkset = Workset.Create(document, worksetName2);
                        worksetTransaction.Commit();
                    }
                }
            }

            return(newWorkset);
        }
Esempio n. 11
0
        public static IDictionary Rename(Workset workset, string name)
        {
            //Get Revit Document object
            revitDoc doc            = DocumentManager.Instance.CurrentDBDocument;
            Workset  renamedWorkset = null;
            bool     renamed        = false;

            if (name != null && workset != null)
            {
                //Verify that the existing workset is in the document.
                //If the workset is unique, create it
                if (WorksetTable.IsWorksetNameUnique(doc, workset.internalWorkset.Name) == false)
                {
                    // Verify that the new name doesn't already exist
                    if (WorksetTable.IsWorksetNameUnique(doc, name) == true)
                    {
                        //Only rename workset if it's name isn't an empty string
                        if (name != "")
                        {
                            using (Autodesk.Revit.DB.Transaction trans = new Autodesk.Revit.DB.Transaction(doc))
                            {
                                trans.Start("Rename Workset");

                                WorksetTable.RenameWorkset(doc, workset.internalId, name);
                                workset.internalName = workset.internalWorkset.Name;
                                renamedWorkset       = workset;
                                renamed = true;

                                trans.Commit();
                            }
                        }
                    }
                }
            }

            return(new Dictionary <string, object>
            {
                { "workset", renamedWorkset },
                { "renamed", renamed }
            });
        }
Esempio n. 12
0
        public Workset GetWorkset(Document doc)
        {
            IList <Workset> userWorksets = new FilteredWorksetCollector(doc)
                                           .OfKind(WorksetKind.UserWorkset)
                                           .ToWorksets();

            bool checkNotExists = WorksetTable.IsWorksetNameUnique(doc, WorksetName);

            if (!checkNotExists)
            {
                Workset wset = new FilteredWorksetCollector(doc)
                               .OfKind(WorksetKind.UserWorkset)
                               .ToWorksets()
                               .Where(w => w.Name == WorksetName)
                               .First();
                return(wset);
            }
            else
            {
                Workset wset = Workset.Create(doc, WorksetName);
                return(wset);
            }
        }
Esempio n. 13
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            Document doc = commandData.Application.ActiveUIDocument.Document;

            if (!doc.IsWorkshared)
            {
                message = "Файл не является файлом совместной работы";
                return(Result.Failed);;
            }

            //считываю список рабочих наборов
            string dllPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
            string folder  = System.IO.Path.GetDirectoryName(dllPath);

            System.Windows.Forms.OpenFileDialog dialog = new System.Windows.Forms.OpenFileDialog();
            dialog.InitialDirectory = folder;
            dialog.Multiselect      = false;
            dialog.Filter           = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
            if (dialog.ShowDialog() != System.Windows.Forms.DialogResult.OK)
            {
                return(Result.Cancelled);
            }
            string xmlFilePath = dialog.FileName;

            InfosStorage storage = new InfosStorage();

            System.Xml.Serialization.XmlSerializer serializer =
                new System.Xml.Serialization.XmlSerializer(typeof(InfosStorage));
            using (StreamReader r = new StreamReader(xmlFilePath))
            {
                storage = (InfosStorage)serializer.Deserialize(r);
            }
            if (storage.LinkedFilesPrefix == null)
            {
                storage.LinkedFilesPrefix = "#";
            }

            using (Transaction t = new Transaction(doc))
            {
                t.Start("Создание рабочих наборов");

                //назначаю рабочие наборы в случае, если указана категория
                foreach (WorksetByCategory wb in storage.worksetsByCategory)
                {
                    Workset wset = wb.GetWorkset(doc);
                    List <BuiltInCategory> cats = wb.revitCategories;
                    if (cats == null)
                    {
                        continue;
                    }
                    if (cats.Count == 0)
                    {
                        continue;
                    }

                    foreach (BuiltInCategory bic in cats)
                    {
                        List <Element> elems = new FilteredElementCollector(doc)
                                               .OfCategory(bic)
                                               .WhereElementIsNotElementType()
                                               .ToElements()
                                               .ToList();

                        foreach (Element elem in elems)
                        {
                            WorksetBy.SetWorkset(elem, wset);
                        }
                    }
                }

                //назначаю рабочие наборы по именам семейств
                List <FamilyInstance> famIns = new FilteredElementCollector(doc)
                                               .WhereElementIsNotElementType()
                                               .OfClass(typeof(FamilyInstance))
                                               .Cast <FamilyInstance>()
                                               .ToList();
                foreach (WorksetByFamily wb in storage.worksetsByFamily)
                {
                    Workset wset = wb.GetWorkset(doc);

                    List <string> families = wb.FamilyNames;
                    if (families == null)
                    {
                        continue;
                    }
                    if (families.Count == 0)
                    {
                        continue;
                    }



                    foreach (string familyName in families)
                    {
                        List <FamilyInstance> curFamIns = famIns
                                                          .Where(f => f.Symbol.FamilyName.StartsWith(familyName))
                                                          .ToList();

                        foreach (FamilyInstance fi in curFamIns)
                        {
                            WorksetBy.SetWorkset(fi, wset);
                        }
                    }
                }

                //назначаю рабочие наборы по именам типов
                List <Element> allElems = new FilteredElementCollector(doc)
                                          .WhereElementIsNotElementType()
                                          .Cast <Element>()
                                          .ToList();

                foreach (WorksetByType wb in storage.worksetsByType)
                {
                    Workset       wset      = wb.GetWorkset(doc);
                    List <string> typeNames = wb.TypeNames;
                    if (typeNames == null)
                    {
                        continue;
                    }
                    if (typeNames.Count == 0)
                    {
                        continue;
                    }

                    foreach (string typeName in typeNames)
                    {
                        foreach (Element elem in allElems)
                        {
                            ElementId typeId = elem.GetTypeId();
                            if (typeId == null || typeId == ElementId.InvalidElementId)
                            {
                                continue;
                            }
                            ElementType elemType = doc.GetElement(typeId) as ElementType;
                            if (elemType == null)
                            {
                                continue;
                            }

                            if (elemType.Name.StartsWith(typeName))
                            {
                                WorksetBy.SetWorkset(elem, wset);
                            }
                        }
                    }
                }

                //назначаю рабочие наборы по значению параметров
                foreach (WorksetByParameter wb in storage.worksetsByParameter)
                {
                    Workset wset       = wb.GetWorkset(doc);
                    string  paramName  = wb.ParameterName;
                    string  paramValue = wb.ParameterValue;

                    List <Element> elemsFilterByParam = allElems
                                                        .Where(e => e.LookupParameter(paramName).AsString().Equals(paramValue)).ToList();

                    foreach (Element elem in elemsFilterByParam)
                    {
                        WorksetBy.SetWorkset(elem, wset);
                    }
                }


                //назначаю рабочие наборы для связанных файлов
                List <RevitLinkInstance> links = new FilteredElementCollector(doc)
                                                 .OfClass(typeof(RevitLinkInstance))
                                                 .Cast <RevitLinkInstance>()
                                                 .ToList();

                foreach (RevitLinkInstance rli in links)
                {
                    RevitLinkType linkFileType = doc.GetElement(rli.GetTypeId()) as RevitLinkType;
                    if (linkFileType == null)
                    {
                        continue;
                    }
                    if (linkFileType.IsNestedLink)
                    {
                        continue;
                    }

                    string linkWorksetName1 = rli.Name.Split(':')[0];
                    string linkWorksetName2 = linkWorksetName1.Substring(0, linkWorksetName1.Length - 5);
                    string linkWorksetName  = storage.LinkedFilesPrefix + linkWorksetName2;
                    bool   checkExists      = WorksetTable.IsWorksetNameUnique(doc, linkWorksetName);
                    if (!checkExists)
                    {
                        continue;
                    }

                    Workset.Create(doc, linkWorksetName);

                    Workset linkWorkset = new FilteredWorksetCollector(doc)
                                          .OfKind(WorksetKind.UserWorkset)
                                          .ToWorksets()
                                          .Where(w => w.Name == linkWorksetName)
                                          .First();

                    WorksetBy.SetWorkset(rli, linkWorkset);
                    WorksetBy.SetWorkset(linkFileType, linkWorkset);
                }

                t.Commit();
            }

            List <string> emptyWorksetsNames = WorksetTool.GetEmptyWorksets(doc);

            if (emptyWorksetsNames.Count > 0)
            {
                string msg = "Обнаружены пустые рабочие наборы! Их можно удалить вручную:\n";
                foreach (string s in emptyWorksetsNames)
                {
                    msg += s + "\n";
                }
                TaskDialog.Show("Отчёт", msg);
            }

            return(Result.Succeeded);
        }