public static bool InsertNewRevision(Revision revision, Guid projectId, ref RevitSheetData sheetData) { bool inserted = false; try { RevitRevision rvtRevision = new RevitRevision(Guid.NewGuid(), revision.Description, revision.IssuedBy, revision.IssuedTo, revision.RevisionDate); NumberType revNumType = (NumberType)Enum.Parse(typeof(NumberType), revision.NumberType.ToString()); LinkedRevision linkedRevision = new LinkedRevision(Guid.NewGuid(), rvtRevision.Id, revision.SequenceNumber, revision.RevisionNumber, revNumType, projectId, revision.UniqueId, true); rvtRevision.LinkedRevisions.Add(linkedRevision); RevitLinkStatus linkStatus = new RevitLinkStatus(); linkStatus.IsLinked = true; linkStatus.CurrentLinkedId = revision.UniqueId; linkStatus.LinkedElementId = revision.Id.IntegerValue; linkStatus.ToolTip = "Linked Revision ElementId: " + revision.Id.IntegerValue; rvtRevision.LinkStatus = linkStatus; sheetData.Revisions.Add(rvtRevision); bool revisionDBUpdated = SheetDataWriter.ChangeRevisionItem(rvtRevision, CommandType.INSERT); bool linkedRevisionDBUpdated = SheetDataWriter.ChangeLinkedRevision(linkedRevision, CommandType.INSERT); List <RevisionOnSheet> rosList = new List <RevisionOnSheet>(); for (int sheetIndex = 0; sheetIndex < sheetData.Sheets.Count; sheetIndex++) { RevisionOnSheet ros = new RevisionOnSheet(Guid.NewGuid(), sheetData.Sheets[sheetIndex].Id, rvtRevision, false); sheetData.Sheets[sheetIndex].SheetRevisions.Add(rvtRevision.Id, ros); rosList.Add(ros); } bool rosDBUpdated = SheetDataWriter.InsertMultipleRevisionOnSheet(rosList); inserted = (revisionDBUpdated && linkedRevisionDBUpdated && rosDBUpdated) ? true : false; } catch (Exception ex) { MessageBox.Show("Failed to insert a new revision element.\n" + ex.Message, "Insert New Revision", MessageBoxButton.OK, MessageBoxImage.Warning); } return(inserted); }
public static bool InsertNewSheet(ViewSheet sheet, Guid projectId, ref RevitSheetData sheetData) { bool inserted = false; try { var sheetNumberExisting = from rvtSheet in sheetData.Sheets where rvtSheet.Number == sheet.SheetNumber select rvtSheet; if (sheetNumberExisting.Count() > 0) { RevitSheet rvtSheet = sheetNumberExisting.First(); int sheetIndex = sheetData.Sheets.IndexOf(rvtSheet); LinkedSheet linkedSheet = new LinkedSheet(Guid.NewGuid(), rvtSheet.Id, new LinkedProject(projectId), sheet.UniqueId, false); sheetData.Sheets[sheetIndex].LinkedSheets.Add(linkedSheet); bool linkedSheetDBUpdated = SheetDataWriter.ChangeLinkedSheet(linkedSheet, CommandType.INSERT); RevitLinkStatus linkStatus = new RevitLinkStatus(); linkStatus.IsLinked = true; linkStatus.CurrentLinkedId = sheet.UniqueId; linkStatus.LinkedElementId = sheet.Id.IntegerValue; linkStatus.ToolTip = "Linked Sheet ElementId: " + sheet.Id.IntegerValue; string toolTip = ""; if (CompareSheetParameters(sheet, rvtSheet, sheetData, out toolTip)) { linkStatus.Modified = true; linkStatus.ToolTip = toolTip; } sheetData.Sheets[sheetIndex].LinkStatus = linkStatus; inserted = true; } else { RevitSheet rvtSheet = new RevitSheet(Guid.NewGuid(), sheet.SheetNumber, sheet.ViewName); LinkedSheet linkedSheet = new LinkedSheet(Guid.NewGuid(), rvtSheet.Id, new LinkedProject(projectId), sheet.UniqueId, true); rvtSheet.LinkedSheets.Add(linkedSheet); bool sheetDBUpdated = SheetDataWriter.ChangeSheetItem(rvtSheet, CommandType.INSERT); bool linkedSheetDBUpdated = SheetDataWriter.ChangeLinkedSheet(linkedSheet, CommandType.INSERT); RevitLinkStatus linkStatus = new RevitLinkStatus(); linkStatus.IsLinked = true; linkStatus.CurrentLinkedId = sheet.UniqueId; linkStatus.LinkedElementId = sheet.Id.IntegerValue; linkStatus.ToolTip = "Linked Sheet ElementId: " + sheet.Id.IntegerValue; rvtSheet.LinkStatus = linkStatus; foreach (SheetParameter sheetParam in sheetData.SheetParameters) { SheetParameterValue paramValue = new SheetParameterValue(); paramValue.ParameterValueId = Guid.NewGuid(); paramValue.Parameter = sheetParam; paramValue.SheetId = rvtSheet.Id; Parameter param = sheet.LookupParameter(sheetParam.ParameterName); if (null != param) { switch (param.StorageType) { case StorageType.Double: paramValue.ParameterValue = param.AsDouble().ToString(); break; case StorageType.ElementId: paramValue.ParameterValue = param.AsElementId().IntegerValue.ToString(); break; case StorageType.Integer: paramValue.ParameterValue = param.AsInteger().ToString(); break; case StorageType.String: paramValue.ParameterValue = param.AsString(); break; } } rvtSheet.SheetParameters.Add(sheetParam.ParameterId, paramValue); } bool sheetParamDBUpdated = SheetDataWriter.InsertMultipleParameterValue(rvtSheet.SheetParameters.Values.ToList()); List <RevisionOnSheet> rosList = new List <RevisionOnSheet>(); foreach (RevitRevision revision in sheetData.Revisions) { RevisionOnSheet ros = new RevisionOnSheet(Guid.NewGuid(), rvtSheet.Id, revision, false); rvtSheet.SheetRevisions.Add(revision.Id, ros); rosList.Add(ros); } bool rosDBUpdated = SheetDataWriter.InsertMultipleRevisionOnSheet(rosList); sheetData.Sheets.Add(rvtSheet); inserted = (sheetDBUpdated && linkedSheetDBUpdated && rosDBUpdated) ? true : false; } } catch (Exception ex) { MessageBox.Show("Failed to add a new sheet element.\n" + ex.Message, "New Sheet", MessageBoxButton.OK, MessageBoxImage.Warning); } return(inserted); }