private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            try
            {
                if (e.NewItems != null && e.Action == NotifyCollectionChangedAction.Add)
                {
                    foreach (RevitSheet sheet in e.NewItems)
                    {
                        int  index   = rvtSheetData.Sheets.IndexOf(sheet);
                        Guid sheetId = Guid.NewGuid();
                        this.RvtSheetData.Sheets[index].Id = sheetId;
                        bool sheetDBUpdated = SheetDataWriter.ChangeSheetItem(rvtSheetData.Sheets[index], CommandType.INSERT);

                        foreach (SheetParameter sheetParam in rvtSheetData.SheetParameters)
                        {
                            SheetParameterValue paramValue = new SheetParameterValue();
                            paramValue.ParameterValueId = Guid.NewGuid();
                            paramValue.Parameter        = sheetParam;
                            paramValue.SheetId          = sheetId;

                            this.RvtSheetData.Sheets[index].SheetParameters.Add(sheetParam.ParameterId, paramValue);
                        }
                        bool sheetParamDBUpdated = SheetDataWriter.InsertMultipleParameterValue(RvtSheetData.Sheets[index].SheetParameters.Values.ToList());

                        foreach (RevitRevision revision in rvtSheetData.Revisions)
                        {
                            RevisionOnSheet ros = new RevisionOnSheet(Guid.NewGuid(), sheetId, revision, false);
                            this.RvtSheetData.Sheets[index].SheetRevisions.Add(revision.Id, ros);
                        }
                        bool rosDBUpdated = SheetDataWriter.InsertMultipleRevisionOnSheet(RvtSheetData.Sheets[index].SheetRevisions.Values.ToList());
                    }
                }
                if (e.OldItems != null && e.Action == NotifyCollectionChangedAction.Remove)
                {
                    foreach (RevitSheet sheet in e.OldItems)
                    {
                        bool sheetDBUpdated      = SheetDataWriter.ChangeSheetItem(sheet, CommandType.DELETE);
                        bool sheetParamDBUpdated = SheetDataWriter.DeleteSheetParameterValue(sheet.Id.ToString());
                        bool rosDBUpdated        = SheetDataWriter.DeleteRevisionOnSheet("RevisionsOnSheet_Sheet_Id", sheet.Id.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
        }
Example #2
0
        private bool DeleteSheet(ElementId sheetId)
        {
            bool deleted = false;

            try
            {
                if (idMaps.ContainsKey(sheetId))
                {
                    string      uniqueId    = idMaps[sheetId];
                    LinkedSheet linkedSheet = dataManager.GetLinkedSheet(uniqueId, linkedProjectId);
                    if (null != linkedSheet)
                    {
                        if (linkedSheet.IsSource)
                        {
                            MessageBoxResult msgResult = MessageBox.Show("Would you like to delete the sheet item in the linked database?", "Delete Sheet Source Item", MessageBoxButton.YesNo, MessageBoxImage.Question);
                            if (msgResult == MessageBoxResult.Yes)
                            {
                                RevitSheet rvtSheet = new RevitSheet()
                                {
                                    Id = linkedSheet.SheetId
                                };
                                bool sheetDeleted    = SheetDataWriter.ChangeSheetItem(rvtSheet, CommandType.DELETE);
                                bool paramDeleted    = SheetDataWriter.DeleteSheetParameterValue(rvtSheet.Id.ToString());
                                bool revisionDeleted = SheetDataWriter.DeleteRevisionOnSheet("RevisionsOnSheet_Sheet_Id", rvtSheet.Id.ToString());
                                bool linkDeleted     = SheetDataWriter.ChangeLinkedSheet(linkedSheet, CommandType.DELETE);
                                deleted = (sheetDeleted && paramDeleted && revisionDeleted && linkDeleted) ? true : false;
                            }
                            else
                            {
                                deleted = SheetDataWriter.ChangeLinkedSheet(linkedSheet, CommandType.DELETE);
                            }
                        }
                        else
                        {
                            deleted = SheetDataWriter.ChangeLinkedSheet(linkedSheet, CommandType.DELETE);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
            return(deleted);
        }
        private static bool UpdateDatabaseItem(object item, string propertyName, object propertyValue)
        {
            bool databaseUpdated = false;

            try
            {
                if (item.GetType() == typeof(RevitSheet))
                {
                    RevitSheet sheet = item as RevitSheet;
                    switch (propertyName)
                    {
                    case "Sheet Number":
                        databaseUpdated = SheetDataWriter.ChangeSheetItem(sheet.Id.ToString(), propertyName, propertyValue.ToString());
                        break;

                    case "Sheet Name":
                        databaseUpdated = SheetDataWriter.ChangeSheetItem(sheet.Id.ToString(), propertyName, propertyValue.ToString());
                        break;

                    case "Discipline":
                        Discipline discipline = propertyValue as Discipline;
                        if (null != discipline)
                        {
                            databaseUpdated = SheetDataWriter.ChangeSheetItem(sheet.Id.ToString(), propertyName, discipline.Id.ToString());
                        }
                        break;

                    default:
                        var paramValueFound = from paramValue in sheet.SheetParameters.Values where paramValue.Parameter.ParameterName == propertyName select paramValue;
                        if (paramValueFound.Count() > 0)
                        {
                            SheetParameterValue paramValue = paramValueFound.First();
                            paramValue.ParameterValue = propertyValue.ToString();
                            databaseUpdated           = SheetDataWriter.ChangeSheetParameterValue(paramValue, HOK.SheetManager.Database.CommandType.UPDATE);
                        }
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
            return(databaseUpdated);
        }
Example #4
0
        private bool UpdateSheet(ViewSheet viewSheet, List <ElementId> paramIds)
        {
            bool updated = false;

            try
            {
                LinkedSheet lsheet = dataManager.GetLinkedSheet(viewSheet.UniqueId, linkedProjectId);
                if (null != lsheet)
                {
                    foreach (ElementId paramId in paramIds)
                    {
                        string    paramName = sheetParameters[paramId];
                        Parameter param     = viewSheet.LookupParameter(paramName);
                        if (null != param)
                        {
                            string paramValue = "";
                            switch (param.StorageType)
                            {
                            case StorageType.Double:
                                paramValue = param.AsDouble().ToString();
                                break;

                            case StorageType.ElementId:
                                paramValue = param.AsElementId().IntegerValue.ToString();
                                break;

                            case StorageType.Integer:
                                paramValue = param.AsInteger().ToString();
                                break;

                            case StorageType.String:
                                paramValue = param.AsString();
                                break;
                            }

                            var paramFound = from sheetParam in rvtSheetParameters where sheetParam.ParameterName == paramName select sheetParam;
                            if (paramFound.Count() > 0)
                            {
                                SheetParameter      sheetParam      = paramFound.First();
                                SheetParameterValue sheetParamValue = dataManager.GetSheetParameterValue(sheetParam.ParameterId, lsheet.SheetId);
                                sheetParamValue.ParameterValue = paramValue;
                                updated = SheetDataWriter.ChangeSheetParameterValue(sheetParamValue, CommandType.UPDATE);
                            }
                            else if (paramId.IntegerValue == (int)BuiltInParameter.SHEET_NAME)
                            {
                                updated = SheetDataWriter.ChangeSheetItem(lsheet.SheetId.ToString(), "Sheet_Name", paramValue);
                            }
                            else if (paramId.IntegerValue == (int)BuiltInParameter.SHEET_NUMBER)
                            {
                                updated = SheetDataWriter.ChangeSheetItem(lsheet.SheetId.ToString(), "Sheet_Number", paramValue);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
            return(updated);
        }
Example #5
0
        private bool InsertSheet(ViewSheet sheet)
        {
            bool sheetInserted = false;

            try
            {
                // insert into the database connected
                RevitSheet  rvtSheet    = new RevitSheet(Guid.NewGuid(), sheet.SheetNumber, sheet.ViewName);
                LinkedSheet linkedSheet = new LinkedSheet(Guid.NewGuid(), rvtSheet.Id, new LinkedProject(linkedProjectId), sheet.UniqueId, true);
                rvtSheet.LinkedSheets.Add(linkedSheet);
                bool sheetDBUpdated       = SheetDataWriter.ChangeSheetItem(rvtSheet, CommandType.INSERT);
                bool linkedSheetDBUpdated = SheetDataWriter.ChangeLinkedSheet(linkedSheet, CommandType.INSERT);

                List <SheetParameterValue> paramValues = new List <SheetParameterValue>();
                foreach (SheetParameter sheetParam in rvtSheetParameters)
                {
                    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;
                        }
                    }
                    paramValues.Add(paramValue);
                }
                bool sheetParamDBUpdated = SheetDataWriter.InsertMultipleParameterValue(paramValues);

                List <Guid>            revisionIds = dataManager.GetRevisionIds();
                List <RevisionOnSheet> rosList     = new List <RevisionOnSheet>();

                foreach (Guid revisionId in revisionIds)
                {
                    RevitRevision rvtRevision = new RevitRevision();
                    rvtRevision.Id = revisionId;
                    RevisionOnSheet ros = new RevisionOnSheet(Guid.NewGuid(), rvtSheet.Id, rvtRevision, false);
                    rvtSheet.SheetRevisions.Add(rvtRevision.Id, ros);
                    rosList.Add(ros);
                }
                bool rosDBUpdated = SheetDataWriter.InsertMultipleRevisionOnSheet(rosList);

                sheetInserted = (sheetDBUpdated && linkedSheetDBUpdated && rosDBUpdated) ? true : false;

                if (sheetInserted && !idMaps.ContainsKey(sheet.Id))
                {
                    idMaps.Add(sheet.Id, sheet.UniqueId);
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
            return(sheetInserted);
        }
        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);
        }
        private void dataGridSheet_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
            try
            {
                DataGridRow row = e.Row;
                if (null != row)
                {
                    RevitSheet oldSheet     = row.Item as RevitSheet;
                    string     propertyName = e.Column.Header.ToString();

                    switch (propertyName)
                    {
                    case "Sheet Number":
                        TextBox textBoxNumber = e.EditingElement as TextBox;
                        if (null != textBoxNumber)
                        {
                            string updatedNumber = textBoxNumber.Text;
                            var    numbers       = from sheet in rvtSheetData.Sheets select sheet.Number;
                            if (numbers.Contains(updatedNumber))
                            {
                                e.Cancel = true;
                                MessageBox.Show(updatedNumber + " already exists in the list of sheets.\nPlease enter a different sheet name", "Existing Sheet Number", MessageBoxButton.OK, MessageBoxImage.Information);
                                return;
                            }
                            else
                            {
                                bool databaseUpdated = SheetDataWriter.ChangeSheetItem(oldSheet.Id.ToString(), "Sheet_Number", textBoxNumber.Text);
                            }
                        }
                        break;

                    case "Sheet Name":
                        TextBox textBoxName = e.EditingElement as TextBox;
                        if (null != textBoxName)
                        {
                            bool databaseUpdated = SheetDataWriter.ChangeSheetItem(oldSheet.Id.ToString(), "Sheet_Name", textBoxName.Text);
                        }
                        break;

                    case "Discipline":
                        ComboBox comboBoxDiscipline = e.EditingElement as ComboBox;
                        if (null != comboBoxDiscipline)
                        {
                            Discipline selectedDiscipline = comboBoxDiscipline.SelectedItem as Discipline;
                            if (null != selectedDiscipline)
                            {
                                bool databaseUpdated = SheetDataWriter.ChangeSheetItem(oldSheet.Id.ToString(), "Sheet_Discipline_Id", selectedDiscipline.Id.ToString());
                            }
                        }
                        break;

                    default:
                        //sheetParameter changed
                        TextBox textBoxParam    = e.EditingElement as TextBox;
                        var     paramValueFound = from paramValue in oldSheet.SheetParameters.Values where paramValue.Parameter.ParameterName == propertyName select paramValue;
                        if (paramValueFound.Count() > 0 && null != textBoxParam)
                        {
                            SheetParameterValue paramValue = paramValueFound.First();
                            paramValue.ParameterValue = textBoxParam.Text;
                            bool databaseUpdated = SheetDataWriter.ChangeSheetParameterValue(paramValue, CommandType.UPDATE);
                        }
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
        }