Пример #1
0
 /// <summary>
 /// Commit transaction group button click event
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btnCommitTransGroup_Click(object sender, EventArgs e)
 {
     if (m_transactionGroup != null)
     {
         m_transactionGroup.Commit();
         AddNode(OperationType.CommitTransactionGroup);
         m_transaction     = null;
         m_lastCreatedWall = null;
         UpdateButtonsStatus();
     }
 }
Пример #2
0
        public bool RemoveLanguage(string language, bool deleteFile)
        {
            using var trasactionGroup = new TransactionGroup(2);
            if (deleteFile)
            {
                string translationJsonPath = _fileSourceSettings.DatabaseTranslateFilePath(language);
                if (File.Exists(translationJsonPath))
                {
                    trasactionGroup.Add(DeleteFileTransaction.Create(translationJsonPath));
                }
            }
            var updatedJsonNode = _configDataJsonNode;

            if (updatedJsonNode != null && updatedJsonNode.Languages.Contains(language))
            {
                var builder = new ConfigDataJsonNode.Builder(updatedJsonNode);
                builder.Languages.Remove(language);
                updatedJsonNode = builder.Build();
                trasactionGroup.Add(ConfigSaveTransaction.Create(updatedJsonNode, _fileSourceSettings.DatabaseFilePath));
            }
            if (!trasactionGroup.Apply())
            {
                _errorOutput.WriteLine("Error: Failed remove language");
                return(false);
            }
            _configDataTranslateJsonNodes.Remove(language);
            _configDataJsonNode = updatedJsonNode;
            trasactionGroup.Commit();
            return(true);
        }
Пример #3
0
        public static void InvokeGroup(this Document doc, Action <TransactionGroup> action, string name = "default")
        {
            using (var tr = new TransactionGroup(doc, name))
            {
                tr.Start();

                action(tr);

                var status = tr.GetStatus();
                switch (status)
                {
                case TransactionStatus.Started:
                    tr.Commit();
                    return;

                case TransactionStatus.Committed:
                case TransactionStatus.RolledBack:
                    break;

                case TransactionStatus.Error:
                    tr.RollBack();
                    return;

                default:
                    return;
                }
            }
        }
Пример #4
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIApplication uiapp = commandData.Application;
            UIDocument uidoc = uiapp.ActiveUIDocument;
            Application app = uiapp.Application;
            Document doc = uidoc.Document;

            Element element = doc.GetElement(uidoc.Selection.PickObject(ObjectType.Element));
            using (TransactionGroup transg = new TransactionGroup(doc))
            {
                transg.Start("Transaction Group");
                //Exception(Out Side Transaction)
                //SetParameter(element,"Transaction Group");
                using (Transaction tran = new Transaction(doc))
                {
                    tran.Start("Transaction");
                    SetParameter(element, "Transaction");
                    using (SubTransaction subtrans = new SubTransaction(doc))
                    {
                        subtrans.Start();
                        SetParameter(element, "Sub Transaction");
                        subtrans.Commit();
                    }
                    tran.Commit();
                }
                transg.Commit();
            }

            return Result.Succeeded;
        }
Пример #5
0
 public static void Import(Document doc, string filename)
 {
     using (TransactionGroup tg = new TransactionGroup(doc, "Import Doors"))
     {
         tg.Start();
         var Lines = File.ReadAllLines(filename);
         var Doors = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Doors).ToList();
         foreach (var line in Lines)
         {
             if (Doors.Any(x => x.get_Parameter(BuiltInParameter.ALL_MODEL_MARK).AsString() == line.Split('\t')[1]))
             {
                 var d = Doors.FirstOrDefault(x => x.get_Parameter(BuiltInParameter.ALL_MODEL_MARK).AsString() == line.Split('\t')[1]);
                 if (d != null)
                 {
                     using (Transaction t = new Transaction(doc, "Update " + line.Split('\t')[1]))
                     {
                         t.Start();
                         var e = d as Element;
                         for (int i = 0; i < DoorParameters.Count(); i++)
                         {
                             try { e.SetElementParam(DoorParameters[i], line.Split('\t')[i + 3]); } catch { }
                         }
                         try { e.get_Parameter(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS).SetValueString(line.Split('\t').Last()); } catch { }
                         t.Commit();
                     }
                 }
             }
         }
         tg.Commit();
     }
 }
Пример #6
0
        public static TResult InvokeGroup <TResult>(this Document doc, Func <TransactionGroup, TResult> func, string name = "default")
        {
            using (var tr = new TransactionGroup(doc, name))
            {
                tr.Start();

                var result = func(tr);

                var status = tr.GetStatus();
                switch (status)
                {
                case TransactionStatus.Started:
                    tr.Commit();
                    return(result);

                case TransactionStatus.Committed:
                case TransactionStatus.RolledBack:
                    return(result);

                case TransactionStatus.Error:
                    tr.RollBack();
                    return(result);

                default:
                    return(result);
                }
            }
        }
Пример #7
0
 public static void CollectData(this Document doc)
 {
     using (TransactionGroup tg = new TransactionGroup(doc, "Output Xml and Update Data"))
     {
         tg.Start();
         using (Transaction t = new Transaction(doc, "Add Parameters:"))
         {
             t.Start();
             foreach (Param p in Parameters)
             {
                 doc.AddParam(p);
             }
             t.Commit();
         }
         using (Transaction t = new Transaction(doc, "Collect Project Data"))
         {
             t.Start();
             var fams   = new FilteredElementCollector(doc).OfClass(typeof(Family)).Count();
             var insts  = new FilteredElementCollector(doc).OfClass(typeof(FamilyInstance)).Count();
             var mats   = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Materials).Count();
             var Sheets = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Sheets).ToElementIds().ToList();
             var Views  = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Views).ToElementIds().ToList();
             var vos    = Views.Where(x => !Viewport.CanAddViewToSheet(doc, Sheets.FirstOrDefault(), x)).Count();
             doc.SetParam(ProjectParams.Families, fams.ToString());
             doc.SetParam(ProjectParams.FamilyInstances, insts.ToString());
             doc.SetParam(ProjectParams.Materials, mats.ToString());
             doc.SetParam(ProjectParams.Sheets, Sheets.Count().ToString());
             doc.SetParam(ProjectParams.Views, Views.Count().ToString());
             doc.SetParam(ProjectParams.ViwesOnSheets, vos.ToString());
             t.Commit();
         }
         tg.Commit();
     }
 }
Пример #8
0
        public Result Execute(
            ExternalCommandData commandData,
            ref string message,
            ElementSet elements)
        {
            UIApplication uiapp = commandData.Application;
            UIDocument    uidoc = uiapp.ActiveUIDocument;
            Application   app   = uiapp.Application;
            Document      doc   = uidoc.Document;

            Tools tools = new Tools(uiapp);

            if (!tools.go)
            {
                TaskDialog.Show("Failed", "Please, run 'Budget Parameters' first.");
                return(Result.Failed);
            }

            using (TransactionGroup tgx = new TransactionGroup(doc))
            {
                tgx.Start();
                tools.ModellingTool();
                tools.WindowsAndDoorsHosts();
                tools.BoQ();
                tgx.Commit();
            }

            TaskDialog.Show("Status", "Tools and Hosts successfully finished.");
            return(Result.Succeeded);
        }
Пример #9
0
        /// <summary>
        /// This method implements the external command within
        /// Revit.
        /// </summary>
        /// <param name="commandData">An ExternalCommandData
        /// object which contains reference to Application and
        /// View needed by external command.</param>
        /// <param name="message">Error message can be returned
        /// by external command. This will be displayed only if
        /// the command status was "Failed". There is a limit
        /// of 1023 characters for this message; strings longer
        /// than this will be truncated.</param>
        /// <param name="elements">Element set indicating
        /// problem elements to display in the failure dialog.
        /// This will be used only if the command status was
        /// "Failed".</param>
        /// <returns>The result indicates if the execution
        /// fails, succeeds, or was canceled by user. If it
        /// does not succeed, Revit will undo any changes made
        /// by the external command.</returns>
        Result IExternalCommand.Execute(
            ExternalCommandData commandData, ref string message
            , ElementSet elements)
        {
            ResourceManager res_mng = new ResourceManager(
                GetType());
            ResourceManager def_res_mng = new ResourceManager(
                typeof(Properties.Resources));

            Result result = Result.Failed;

            try {
                UIApplication ui_app = commandData?.Application
                ;
                UIDocument  ui_doc = ui_app?.ActiveUIDocument;
                Application app    = ui_app?.Application;
                Document    doc    = ui_doc?.Document;

                /* Wrap all transactions into the transaction
                 * group. At first we get the transaction group
                 * localized name. */
                var tr_gr_name = UIBuilder.GetResourceString(
                    GetType(), typeof(Properties.Resources),
                    "_transaction_group_name");

                using (var tr_gr = new TransactionGroup(doc,
                                                        tr_gr_name)) {
                    if (TransactionStatus.Started == tr_gr
                        .Start())
                    {
                        /* Here do your work or the set of
                         * works... */
                        if (DoWork(commandData, ref message,
                                   elements))
                        {
                            tr_gr.Assimilate();
                            tr_gr.Commit();
                            result = Result.Succeeded;
                        }
                        else
                        {
                            tr_gr.RollBack();
                        }
                    }
                }
            }
            catch (Exception ex) {
                TaskDialog.Show(def_res_mng.GetString("_Error")
                                , ex.Message);

                result = Result.Failed;
            }
            finally {
                res_mng.ReleaseAllResources();
                def_res_mng.ReleaseAllResources();
            }

            return(result);
        }
Пример #10
0
        public void Start(Document docRvt)
        {
            //IL_0002: Unknown result type (might be due to invalid IL or missing references)
            //IL_000b: Unknown result type (might be due to invalid IL or missing references)
            //IL_000c: Unknown result type (might be due to invalid IL or missing references)
            //IL_0011: Unknown result type (might be due to invalid IL or missing references)
            //IL_0026: Unknown result type (might be due to invalid IL or missing references)
            //IL_002b: Unknown result type (might be due to invalid IL or missing references)
            //IL_002d: Unknown result type (might be due to invalid IL or missing references)
            //IL_003e: Unknown result type (might be due to invalid IL or missing references)
            //IL_00b1: Unknown result type (might be due to invalid IL or missing references)
            //IL_00b7: Unknown result type (might be due to invalid IL or missing references)
            //IL_00bc: Unknown result type (might be due to invalid IL or missing references)
            //IL_00bd: Unknown result type (might be due to invalid IL or missing references)
            //IL_00be: Unknown result type (might be due to invalid IL or missing references)
            //IL_00cf: Unknown result type (might be due to invalid IL or missing references)
            //IL_00ec: Unknown result type (might be due to invalid IL or missing references)
            //IL_00ed: Unknown result type (might be due to invalid IL or missing references)
            //IL_010b: Unknown result type (might be due to invalid IL or missing references)
            //IL_010e: Unknown result type (might be due to invalid IL or missing references)
            //IL_0116: Unknown result type (might be due to invalid IL or missing references)
            //IL_0126: Unknown result type (might be due to invalid IL or missing references)
            //IL_0127: Unknown result type (might be due to invalid IL or missing references)
            TransactionGroup val = null;

            try
            {
                StringBuilder stringBuilder = new StringBuilder();
                foreach (Document document in docRvt.get_Application().get_Documents())
                {
                    if (document.get_IsFamilyDocument())
                    {
                        stringBuilder.Append(document.get_Title() + "\n");
                    }
                }
                if (stringBuilder.Length > 0)
                {
                    FamMgr_Util.ShowMessage(EnvMsg.CloseAllFamilyDocument + "\n\n" + stringBuilder);
                }
                else
                {
                    val = new TransactionGroup(docRvt, "FamilyManager Basic");
                    val.Start();
                    IntPtr mainWindowHandle = Process.GetCurrentProcess().MainWindowHandle;
                    (CEntry.FamilyUploaderDlg = new frmFamilyUploader(docRvt)).ShowDialog(new MainWin32Wnd(mainWindowHandle));
                    val.Commit();
                }
            }
            catch (Exception ex)
            {
                FamMgr_Util.ShowMessage(FamMgr_Util.GetMessageString(ex.Message));
                if ((int)val != 0 && val.HasStarted() && !val.HasEnded())
                {
                    val.RollBack();
                }
            }
        }
Пример #11
0
        /// <summary>
        /// Implement this method as an external command for Revit.
        /// </summary>
        /// <param name="commandData">An object that is passed to the external application
        /// which contains data related to the command,
        /// such as the application object and active view.</param>
        /// <param name="message">A message that can be set by the external application
        /// which will be displayed if a failure or cancellation is returned by
        /// the external command.</param>
        /// <param name="elements">A set of elements to which the external application
        /// can add elements that are to be highlighted in case of failure or cancellation.</param>
        /// <returns>Return the status of the external command.
        /// A result of Succeeded means that the API external method functioned as expected.
        /// Cancelled can be used to signify that the user cancelled the external operation
        /// at some point. Failure should be returned if the application is unable to proceed with
        /// the operation.</returns>
        public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements)
        {
            // data verification
            if (null == commandData.Application.ActiveUIDocument)
            {
                return(Autodesk.Revit.UI.Result.Failed);
            }

            MyDocument mydocument = new MyDocument(commandData);



            // check whether the mass is kind of parallelepiped
            CurtainSystem.MassChecker checker = new CurtainSystem.MassChecker(mydocument);
            bool validMass = checker.CheckSelectedMass();

            if (!validMass)
            {
                message = Properties.Resources.MSG_InvalidSelection;
                return(Result.Cancelled);
            }

            UI.CurtainForm   curtainForm      = null;
            TransactionGroup transactionGroup = new TransactionGroup(commandData.Application.ActiveUIDocument.Document);

            try
            {
                transactionGroup.Start("CurtainSystemOperation");
                curtainForm = new UI.CurtainForm(mydocument);

                if (null != curtainForm && false == curtainForm.IsDisposed)
                {
                    curtainForm.ShowDialog();
                }

                transactionGroup.Commit();
            }
            catch (System.Exception ex)
            {
                transactionGroup.RollBack();
                message = ex.Message;
                return(Result.Failed);
            }
            finally
            {
                if (null != curtainForm && false == curtainForm.IsDisposed)
                {
                    curtainForm.Dispose();
                }
            }

            return(Autodesk.Revit.UI.Result.Succeeded);
        }
Пример #12
0
 public static void UnpackFamilies(this Document doc, Assembly assembly)
 {
     using (TransactionGroup tg = new TransactionGroup(doc, "Load Families"))
     {
         tg.Start();
         foreach (string name in assembly.GetManifestResourceNames().Where(x => x.EndsWith(".rfs")))
         {
             var fam = doc.UnpackFamily(assembly, name);
         }
         tg.Commit();
     }
 }
Пример #13
0
 public static void ProjectStartup(Document doc)
 {
     using (TransactionGroup tg = new TransactionGroup(doc, "Preupdater Registration"))
     {
         tg.Start();
         using (Transaction t = new Transaction(doc, "Add Params"))
         {
             t.Start();
             try { doc.AddParam(Params.Masterformat); } catch (Exception e) { e.OutputError(); }
             try { doc.AddParam(Params.OccupantLoadFactor); } catch (Exception e) { e.OutputError(); }
             try { doc.AddParam(Params.Uniformat); } catch (Exception e) { e.OutputError(); }
             t.Commit();
         }
         tg.Commit();
     }
 }
Пример #14
0
 public static void AddParams(this Document doc)
 {
     ResetParamLibrary.Run();
     using (TransactionGroup tg = new TransactionGroup(doc, "Add Params"))
     {
         tg.Start();
         using (Transaction t = new Transaction(doc, "ADD PARAMS"))
         {
             t.Start();
             foreach (Param p in GetParams())
             {
                 doc.AddParam(p);
             }
             t.Commit();
         }
         tg.Commit();
     }
 }
    public Result Execute(
        ExternalCommandData commandData,
        ref string message,
        ElementSet elements)
    {
        UIApplication uiapp = commandData.Application;
        UIDocument    uidoc = uiapp.ActiveUIDocument;
        Application   app   = uiapp.Application;
        Document      doc   = uidoc.Document;

        Selection  sel1    = uidoc.Selection;
        List <XYZ> tempXYZ = new List <XYZ>(1);
        XYZ        p1      = sel1.PickPoint();
        XYZ        p2      = null;


        //tempXYZ.Add(p3);

        ModelCurve visualLine = null;

        using (TransactionGroup tGroup = new TransactionGroup(doc))
        {
            tGroup.Start();

Redraw:
            using (Transaction t = new Transaction(doc))
            {
                t.Start("Step 1");

                Line line = Line.CreateBound(p1, getP3(uidoc));

                Plane       geomPlane = Plane.CreateByNormalAndOrigin(doc.ActiveView.ViewDirection, doc.ActiveView.Origin);
                SketchPlane sketch    = SketchPlane.Create(doc, geomPlane);
                visualLine = doc.Create.NewModelCurve(line, sketch) as ModelCurve;
                doc.Regenerate();
                uidoc.RefreshActiveView();
                goto Redraw;

                t.Commit();
            }
            tGroup.Commit();
        }
        return(Result.Succeeded);
    }
Пример #16
0
        public static void ProjectStartup(AddInId id, Document doc)
        {
            using (TransactionGroup tg = new TransactionGroup(doc, "Preupdater Registration"))
            {
                tg.Start();
                if (!doc.IsFamilyDocument)
                {
                    using (Transaction t = new Transaction(doc, "Add Parameters"))
                    {
                        t.Start();
                        doc.AddParam(RoomParams.OccupantLoad);
                        doc.AddParam(RoomParams.OccupantLoadFactor);
                        t.Commit();
                    }
                    Room r;
                    using (Transaction t = new Transaction(doc, "Add Room"))
                    {
                        t.Start();
                        r = doc.Create.NewRoom(doc.Phases.get_Item(0));
                        t.Commit();
                    }
                    Element   room = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms).FirstOrDefault();
                    Parameter p    = room.get_Parameter(RoomParams.OccupantLoadFactor.Guid);

                    UpdateOccLoad updater = new UpdateOccLoad(id);
                    UpdaterRegistry.RegisterUpdater(updater, doc, true);
                    ElementCategoryFilter rooms  = new ElementCategoryFilter(BuiltInCategory.OST_Rooms);
                    ElementId             AreaId = new ElementId(BuiltInParameter.ROOM_AREA);
                    UpdaterRegistry.AddTrigger(updater.GetUpdaterId(), rooms, Element.GetChangeTypeParameter(AreaId));
                    UpdaterRegistry.AddTrigger(updater.GetUpdaterId(), rooms, Element.GetChangeTypeParameter(p.Id));

                    using (Transaction t = new Transaction(doc, "Add Room"))
                    {
                        t.Start();
                        doc.Delete(r.Id);
                        t.Commit();
                    }
                }
                tg.Commit();
            }
        }
Пример #17
0
        public bool CreateLanguage(string language)
        {
            if (_configData == null || _configDataJsonNode == null ||
                _configDataJsonNode.Languages.Contains(language))
            {
                _errorOutput.WriteLine("Error: Database not loaded");
                return(false);
            }
            if (_configDataJsonNode.Languages.Contains(language))
            {
                _errorOutput.WriteLine("Error: Language name already exist");
                return(false);
            }
            string translationJsonPath = _fileSourceSettings.DatabaseTranslateFilePath(language);

            if (File.Exists(translationJsonPath))
            {
                _errorOutput.WriteLine("Error: Language folder already exist");
                return(false);
            }
            var newTranslationJsonNode = ConfigDatabase.BuildTranslateNode(_configData, _networkSourceSettings);

            ConfigDataJsonNode.Builder builder = new ConfigDataJsonNode.Builder(_configDataJsonNode);
            builder.Languages.Add(language);
            var updatedJsonNode = builder.Build();

            Directory.CreateDirectory(Path.GetDirectoryName(translationJsonPath));
            using var trasactionGroup = new TransactionGroup(2);
            trasactionGroup.Add(ConfigSaveTransaction.Create(newTranslationJsonNode, translationJsonPath));
            trasactionGroup.Add(ConfigSaveTransaction.Create(updatedJsonNode, _fileSourceSettings.DatabaseFilePath));
            if (!trasactionGroup.Apply())
            {
                _errorOutput.WriteLine("Error: Failed write language files");
                return(false);
            }
            _configDataTranslateJsonNodes[language] = newTranslationJsonNode;
            _configDataJsonNode = updatedJsonNode;
            trasactionGroup.Commit();
            return(true);
        }
Пример #18
0
        public static void UpdateStyles(this Document doc)
        {
            Categories cats     = doc.Settings.Categories;
            var        Patterns = doc.GetLineStyles();

            using (TransactionGroup tg = new TransactionGroup(doc, "Line Style Changes"))
            {
                ElementId[] eids = new ElementId[5];
                using (Transaction t = new Transaction(doc, "Get EIDs"))
                {
                    t.Start();
                    eids = GetLineStyles(doc);
                    t.Commit();
                }
                tg.Start();
                foreach (Category c in cats)
                {
                    using (Transaction t = new Transaction(doc, "Set Line Styles"))
                    {
                        t.Start();
                        if (c.IsImportedCategory())
                        {
                            c.UpdateObjectStyle(eids);

                            if (!c.SubCategories.IsEmpty)
                            {
                                foreach (Category cs in c.SubCategories)
                                {
                                    cs.UpdateObjectStyle(eids);
                                }
                            }
                        }
                        t.Commit();
                    }
                }
                tg.Commit();
            }
        }
Пример #19
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIDocument       uidoc = commandData.Application.ActiveUIDocument;
            Document         doc   = uidoc.Document;
            TransactionGroup tg    = new TransactionGroup(doc, "TG");

            tg.Start();

            Transaction t1 = new Transaction(doc, "T1");

            t1.Start();
            Wall.Create(doc, Line.CreateBound(new XYZ(), new XYZ(0, 10, 0)), Level.Create(doc, 0).Id, false);
            t1.Commit();
            TaskDialog.Show("提示", "已经生成第一道墙");
            Transaction t2 = new Transaction(doc, "T2");

            t2.Start();
            Wall.Create(doc, Line.CreateBound(new XYZ(), new XYZ(0, 10, 0)), Level.Create(doc, 0).Id, false);
            t2.Commit();
            tg.Commit();

            Transaction tt = new Transaction(doc, "Transact");

            tt.Start();
            SubTransaction st1 = new SubTransaction(doc);

            st1.Start();
            SubTransaction st2 = new SubTransaction(doc);

            st2.Start();
            st2.Commit();
            TaskDialog.Show("提示", "t2已提交");
            st1.Commit();
            TaskDialog.Show("提示", "t1已提交");
            tt.Commit();

            return(Result.Succeeded);
        }
Пример #20
0
        public Result Execute(ExternalCommandData commandData,
                              ref string message, ElementSet elements)
        {
            UIApplication uiapp = commandData.Application;
            UIDocument    uidoc = uiapp.ActiveUIDocument;
            Application   app   = uiapp.Application;
            Document      doc   = uidoc.Document;

            using (TransactionGroup transGr = new TransactionGroup(doc))
            {
                transGr.Start("Auto Join");

                AutoJoinViewModel viewModel = new AutoJoinViewModel(uidoc);
                AutoJoinWindow    window    = new AutoJoinWindow(viewModel);
                if (window.ShowDialog() == false)
                {
                    return(Result.Cancelled);
                }

                transGr.Commit();
            }

            return(Result.Succeeded);
        }
Пример #21
0
 public static void Import(Document doc, string filename)
 {
     using (TransactionGroup tg = new TransactionGroup(doc, "Add Materials"))
     {
         Family fam;
         tg.Start();
         using (Transaction t = new Transaction(doc, "Load Family"))
         {
             t.Start();
             fam = EmbeddedFamilies.run(doc, "MaterialInstance");
             t.Commit();
         }
         FamilySymbol symbol = doc.GetElement(fam.GetFamilySymbolIds().FirstOrDefault()) as FamilySymbol;
         if (!symbol.IsActive)
         {
             using (Transaction t = new Transaction(doc, "Activate Symbol"))
             {
                 t.Start();
                 symbol.Activate(); doc.Regenerate();
                 t.Commit();
             }
         }
         var Lines   = File.ReadAllLines(filename);
         var Mats    = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Materials).ToList();
         var GenMods = GetGenericModels(doc, fam);
         foreach (var line in Lines)
         {
             if (Mats.Any(x => x.Name == line.Split('\t')[1]))
             {
                 var m = Mats.FirstOrDefault(x => x.Name == line.Split('\t')[1]);
                 if (m != null)
                 {
                     using (Transaction t = new Transaction(doc, "Update Material : " + m.Name))
                     {
                         t.Start();
                         var e = m as Element;
                         for (int i = 0; i < MatPars.Count(); i++)
                         {
                             try { e.SetElementParam(MatPars[i], line.Split('\t')[i + 2]); } catch { }
                         }
                         t.Commit();
                     }
                 }
                 if (!GenMods.Any(x => x.GetElementParam(SpecialParams.MaterialInstance) == line.Split('\t')[1]))
                 {
                     using (Transaction t = new Transaction(doc, "Place Material : " + line.Split('\t')[1]))
                     {
                         t.Start();
                         FamilyInstance f = doc.Create.NewFamilyInstance(new XYZ(0, 0, 0), doc.GetElement(fam.GetFamilySymbolIds().FirstOrDefault()) as FamilySymbol, StructuralType.NonStructural);
                         f.SetElementParam(SpecialParams.MaterialInstance, line.Split('\t')[1]);
                         t.Commit();
                     }
                 }
             }
             else
             {
                 using (Transaction t = new Transaction(doc, "Create Material : " + line.Split('\t')[1]))
                 {
                     t.Start();
                     ElementId matID = Material.Create(doc, line.Split('\t')[1]);
                     Element   mat   = doc.GetElement(matID);
                     for (int i = 0; i < MatPars.Count(); i++)
                     {
                         try { mat.SetElementParam(MatPars[i], line.Split('\t')[i + 2]); } catch { }
                     }
                     doc.Regenerate();
                     t.Commit();
                 }
                 using (Transaction t = new Transaction(doc, "Place Material : " + line.Split('\t')[1]))
                 {
                     t.Start();
                     FamilyInstance f = doc.Create.NewFamilyInstance(new XYZ(0, 0, 0), doc.GetElement(fam.GetFamilySymbolIds().FirstOrDefault()) as FamilySymbol, StructuralType.NonStructural);
                     f.SetElementParam(SpecialParams.MaterialInstance, line.Split('\t')[1]);
                     t.Commit();
                 }
             }
         }
         if (GenMods.Any())
         {
             List <ElementId> del = new List <ElementId>();
             foreach (var g in GenMods)
             {
                 if (!Lines.Any(x => x.Split('\t')[1] == g.GetElementParam(SpecialParams.MaterialInstance)))
                 {
                     del.Add(g.Id);
                 }
             }
             using (Transaction t = new Transaction(doc, "Delete Materials"))
             {
                 t.Start();
                 doc.Delete(del);
                 t.Commit();
             }
         }
         tg.Commit();
     }
 }
Пример #22
0
        /// <summary>
        /// Implement this method as an external command for Revit.
        /// </summary>
        /// <param name="commandData">An object that is passed to the external application 
        /// which contains data related to the command, 
        /// such as the application object and active view.</param>
        /// <param name="message">A message that can be set by the external application 
        /// which will be displayed if a failure or cancellation is returned by 
        /// the external command.</param>
        /// <param name="elements">A set of elements to which the external application 
        /// can add elements that are to be highlighted in case of failure or cancellation.</param>
        /// <returns>Return the status of the external command. 
        /// A result of Succeeded means that the API external method functioned as expected. 
        /// Cancelled can be used to signify that the user cancelled the external operation 
        /// at some point. Failure should be returned if the application is unable to proceed with 
        /// the operation.</returns>
        public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements)
        {
            // data verification
             if (null == commandData.Application.ActiveUIDocument)
             {
            return Autodesk.Revit.UI.Result.Failed;
             }

             MyDocument mydocument = new MyDocument(commandData);

             // check whether the mass is kind of parallelepiped
             CurtainSystem.MassChecker checker = new CurtainSystem.MassChecker(mydocument);
             bool validMass = checker.CheckSelectedMass();

             if (!validMass)
             {
            message = Properties.Resources.MSG_InvalidSelection;
            return Result.Cancelled;
             }

             UI.CurtainForm curtainForm = null;
             TransactionGroup transactionGroup = new TransactionGroup(commandData.Application.ActiveUIDocument.Document);
             try
             {
            transactionGroup.Start("CurtainSystemOperation");
            curtainForm = new UI.CurtainForm(mydocument);

            if (null != curtainForm && false == curtainForm.IsDisposed)
            {
               curtainForm.ShowDialog();
            }

            transactionGroup.Commit();
             }
             catch (System.Exception ex)
             {
             	transactionGroup.RollBack();
            message = ex.Message;
            return Result.Failed;
             }
             finally
             {
            if (null != curtainForm && false == curtainForm.IsDisposed)
            {
               curtainForm.Dispose();
            }
             }

             return Autodesk.Revit.UI.Result.Succeeded;
        }
Пример #23
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIApplication uiapp = commandData.Application;
            UIDocument    uidoc = uiapp.ActiveUIDocument;
            Application   app   = uiapp.Application;
            Document      doc   = uidoc.Document;

            using (TransactionGroup transGroup = new TransactionGroup(doc, "TextNoteToDetailRebarCmd"))
            {
                transGroup.Start();
                while (true)
                {
                    try
                    {
                        Reference r1 = uidoc.Selection.PickObject(ObjectType.Element,
                                                                  new TextNoteSelectionFilter(),
                                                                  "Pick Text Notes to copy value");
                        TextNote textNote = doc.GetElement(r1.ElementId) as TextNote;
                        if (textNote == null)
                        {
                            continue;
                        }

                        Reference r2 = uidoc.Selection.PickObject(ObjectType.Element,
                                                                  new DetailRebarSelectionFilter(),
                                                                  "Pick Text Notes to copy value");

                        Element detailRebar = doc.GetElement(r2.ElementId);
                        if (detailRebar == null)
                        {
                            continue;
                        }
                        Parameter barDiameter = detailRebar.LookupParameter("D");
                        Parameter spacing     = detailRebar.LookupParameter("S");
                        Parameter n           = detailRebar.LookupParameter("n");


                        // textNote = T10-150 B2
                        // textNote = 2T10-300 T2
                        string textNoteValue = textNote.Text.Trim();
                        char[] separator     = new[]
                        {
                            Convert.ToChar("T"),
                            Convert.ToChar("-"),
                            Convert.ToChar(" "),
                        };
                        string[] allValues = textNoteValue.Split(separator);

                        // textNote = ["",10,150,B2]
                        // textNote = [2,10,300,"",2]

                        //MessageBox.Show(allValues.Length.ToString());
                        //MessageBox.Show(allValues[0] + "\n" + allValues[1] + "\n" +
                        //                allValues[2] + "\n" +allValues[3] + "\n"+
                        //                allValues[4] + "\n");

                        using (Transaction trans = new Transaction(doc))
                        {
                            trans.Start("TextNoteToDetailRebarCmd");

                            // textNote = ["",10,150,B2] - T10-150 B2
                            if (string.IsNullOrEmpty(allValues[0]))
                            {
                                n.Set(Convert.ToInt16(allValues[1]));
                                barDiameter.Set(Convert.ToInt16(allValues[1]));
                                spacing.Set(Convert.ToInt16(allValues[2]));
                            }
                            else //textNote = [2, 10, 300, "", 2] - 2T10-300 T2
                            {
                                n.Set(Convert.ToInt16(allValues[0]));
                                barDiameter.Set(Convert.ToInt16(allValues[1]));
                                spacing.Set(Convert.ToInt16(allValues[2]));
                            }

                            trans.Commit();
                        }
                    }
                    catch (Exception e)
                    {
                        break;
                    }
                }
                transGroup.Commit();
            }

            return(Result.Succeeded);
        }
Пример #24
0
        public static void CreateBox(UIApplication app)
        {
            var doc  = app.ActiveUIDocument.Document;
            var view = doc.ActiveView;

            if (view.ViewType == ViewType.DraftingView)
            {
                var scale      = view.Scale;
                var multiplier = CC_ZeroPointRibbon.GetComboData(app);
                var adjw       = Width * scale * multiplier[1];
                var adjh       = Height * scale * multiplier[0];
                var ttlb       = Title * scale;
                var note       = adjw - (Notes * scale);

                XYZ p1 = new XYZ(0, 0, 0);
                XYZ p2 = new XYZ(adjw, 0, 0);
                XYZ p3 = new XYZ(0, adjh, 0);
                XYZ p4 = new XYZ(adjw, adjh, 0);

                var p5 = new XYZ(0, ttlb, 0);
                var p6 = new XYZ(adjw, ttlb, 0);
                var p7 = new XYZ(note, ttlb, 0);
                var p8 = new XYZ(note, adjh, 0);

                var       cut = new XYZ(0, 0, 1);
                ElementId subcat;

                using (TransactionGroup tg = new TransactionGroup(doc, "Create Reference Planes"))
                {
                    tg.Start();
                    using (Transaction t = new Transaction(doc, "Create Category"))
                    {
                        t.Start();
                        subcat = CategorySetup(doc);
                        t.Commit();
                    }
                    using (Transaction t = new Transaction(doc, "Purge RPs"))
                    {
                        t.Start();
                        var rps = new FilteredElementCollector(doc, view.Id).OfCategory(BuiltInCategory.OST_CLines).ToList();
                        foreach (var rp in rps)
                        {
                            var param = rp.get_Parameter(BuiltInParameter.CLINE_SUBCATEGORY);
                            var val   = param.AsElementId();
                            if (val == subcat)
                            {
                                doc.Delete(rp.Id);
                            }
                        }
                        t.Commit();
                    }
                    using (Transaction t = new Transaction(doc, "Create Zeros"))
                    {
                        t.Start();

                        var rp1 = doc.Create.NewReferencePlane(p1, p2, cut, view);
                        var rp2 = doc.Create.NewReferencePlane(p1, p3, cut, view);
                        var rp3 = doc.Create.NewReferencePlane(p3, p4, cut, view);
                        var rp4 = doc.Create.NewReferencePlane(p2, p4, cut, view);
                        var rp5 = doc.Create.NewReferencePlane(p5, p6, cut, view);
                        var rp6 = doc.Create.NewReferencePlane(p7, p8, cut, view);

                        rp1.get_Parameter(BuiltInParameter.CLINE_SUBCATEGORY).Set(subcat);
                        rp2.get_Parameter(BuiltInParameter.CLINE_SUBCATEGORY).Set(subcat);
                        rp3.get_Parameter(BuiltInParameter.CLINE_SUBCATEGORY).Set(subcat);
                        rp4.get_Parameter(BuiltInParameter.CLINE_SUBCATEGORY).Set(subcat);
                        rp5.get_Parameter(BuiltInParameter.CLINE_SUBCATEGORY).Set(subcat);
                        rp6.get_Parameter(BuiltInParameter.CLINE_SUBCATEGORY).Set(subcat);

                        t.Commit();
                    }
                    tg.Commit();
                }
            }
            else
            {
                TaskDialog.Show("Error", "Activate a Drafting View Before Use");
            }
        }