protected SheetItem GetSheetItem(OpenXmlElement source, IEnumerable <string> nameCells, int nameIndex, int dataStartIndex, int step)
        {
            var cells = GetCellFromRow(source, 0).ToArray();

            var name = GeneralParsing.GetCellValue(WorkbookPart, cells.Skip(nameIndex).First());
            var data = nameCells.Select(
                (x, i) =>
                new
            {
                Name = x,
                Data =
                    cells.Skip(dataStartIndex)
                    .Where((y, j) => j % step == i)
                    .Select(z => GeneralParsing.GetCellValue(WorkbookPart, z))
                    .ToArray()
            }).ToDictionary(dataKey => dataKey.Name, dataCheck => dataCheck.Data);


            var item = new SheetItem
            {
                Name = name,
                Data = data
            };

            return(item);
        }
예제 #2
0
 public SheetGradeWindow(SheetItem sheet)
 {
     InitializeComponent();
     Sheet       = sheet;
     Grades      = _repo.GetGradeBySheetId(sheet.Id);
     DataContext = this;
 }
예제 #3
0
 public SheetTaskWrapper(SheetItem element, SheetTask task)
 {
     Element = element;
     Task    = task;
 }
예제 #4
0
        /// <summary>
        /// Submits request to create new sheet.
        /// </summary>
        /// <param name="app"></param>
        private void CreateSheet(UIApplication app)
        {
            var doc = app.ActiveUIDocument.Document;

            CentralPath = FileInfoUtil.GetCentralFilePath(doc);

            IsUpdatingSheet = true;
            app.Application.FailuresProcessing += FailureProcessing;

            using (var trans = new Transaction(doc, "CreateSheet"))
            {
                trans.Start();

                try
                {
                    ViewSheet sheet;
                    if (SheetTask.IsPlaceholder)
                    {
                        sheet = ViewSheet.CreatePlaceholder(doc);
                    }
                    else
                    {
                        // TODO: This should be exposed to user in Mission Control.
                        var titleblock = new FilteredElementCollector(doc).OfClass(typeof(FamilySymbol)).FirstOrDefault(x => x.Category.Name == "Title Blocks");
                        if (titleblock == null)
                        {
                            IsUpdatingSheet = false;
                            Messenger.Default.Send(new SheetTaskCompletedMessage
                            {
                                Completed   = false,
                                Message     = "Could not find a valid TitleBlock.",
                                CentralPath = CentralPath
                            });
                            return;
                        }
                        sheet = ViewSheet.Create(doc, titleblock.Id);
                    }

                    sheet.get_Parameter(BuiltInParameter.SHEET_NUMBER)?.Set(SheetTask.Number);
                    sheet.get_Parameter(BuiltInParameter.SHEET_NAME)?.Set(SheetTask.Name);

                    // (Konrad) We can set this here and pick up in the UI before sending off to MongoDB.
                    var newSheetItem = new SheetItem(sheet, CentralPath)
                    {
                        Tasks        = SheetItem.Tasks,
                        CollectionId = SheetItem.CollectionId,
                        Id           = SheetItem.Id,
                        IsNewSheet   = true // this was overriden to false by default constructor
                    };
                    SheetItem = newSheetItem;

                    trans.Commit();
                    IsUpdatingSheet = false;
                }
                catch (Exception e)
                {
                    trans.RollBack();
                    IsUpdatingSheet = false;

                    Log.AppendLog(LogMessageType.EXCEPTION, "Failed to create sheet.");
                    Messenger.Default.Send(new SheetTaskCompletedMessage
                    {
                        Completed   = false,
                        Message     = e.Message,
                        CentralPath = CentralPath
                    });
                }
            }

            // (Konrad) We don't want Revit to keep triggering this even when we are not processing updates.
            app.Application.FailuresProcessing -= FailureProcessing;
        }
예제 #5
0
 /// <summary>
 /// Firest external command to set active view in Revit.
 /// </summary>
 /// <param name="sheet">Sheet item with reference to view.</param>
 public void OpenView(SheetItem sheet)
 {
     AppCommand.CommunicatorHandler.SheetItem = sheet;
     AppCommand.CommunicatorHandler.Request.Make(RequestId.OpenView);
     AppCommand.CommunicatorEvent.Raise();
 }