/// <summary> /// Used to a new item in the dataGridView control. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void addButton_Click(object sender, EventArgs e) { System.String newLevelName; double newLevelElevation; //If it exists some Levels on Revit, //the added item's Name and Elevation uses last a Level's Name and Elevation. //Otherwise it uses a default data. if (bindingSource1.Count > 0) { bindingSource1.MoveLast(); LevelsDataSource lastItem = bindingSource1.Current as LevelsDataSource; System.String lastLevelName = lastItem.Name; double lastLevelElevation = lastItem.Elevation; newLevelName = lastLevelName + "'"; newLevelElevation = lastLevelElevation + Unit.CovertFromAPI(m_objectReference.UnitType, 10); } else { newLevelName = "Level" + " " + "1"; newLevelElevation = 0; } LevelsDataSource newLevel = new LevelsDataSource(); newLevel.Name = newLevelName; newLevel.Elevation = newLevelElevation; bindingSource1.Add(newLevel); }
/// <summary> /// Implement this method as an external command for Revit. /// </summary> /// <param name="revit">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 revit, ref String message, Autodesk.Revit.DB.ElementSet elements) { m_revit = revit; UnitType = m_revit.Application.ActiveUIDocument.Document.GetUnits().GetFormatOptions(Autodesk.Revit.DB.UnitType.UT_Length).DisplayUnits; Transaction documentTransaction = new Transaction(revit.Application.ActiveUIDocument.Document, "Document"); documentTransaction.Start(); try { //Get every level by iterating through all elements systemLevelsDatum = new List <LevelsDataSource>(); FilteredElementCollector collector = new FilteredElementCollector(m_revit.Application.ActiveUIDocument.Document); ICollection <Element> collection = collector.OfClass(typeof(Level)).ToElements(); foreach (Element element in collection) { Level systemLevel = element as Level; LevelsDataSource levelsDataSourceRow = new LevelsDataSource(); levelsDataSourceRow.LevelIDValue = systemLevel.Id.IntegerValue; levelsDataSourceRow.Name = systemLevel.Name; Parameter elevationPara = systemLevel.get_Parameter(BuiltInParameter.LEVEL_ELEV); double temValue = Unit.CovertFromAPI(UnitType, elevationPara.AsDouble()); double temValue2 = double.Parse(temValue.ToString("#.0")); levelsDataSourceRow.Elevation = temValue2; systemLevelsDatum.Add(levelsDataSourceRow); } using (LevelsForm displayForm = new LevelsForm(this)) { displayForm.ShowDialog(); } } catch (Exception ex) { message = ex.Message; documentTransaction.RollBack(); return(Autodesk.Revit.UI.Result.Failed); } documentTransaction.Commit(); return(Autodesk.Revit.UI.Result.Succeeded); }
/// <summary> /// Used to make setting apply to the model. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void okButton_Click(object sender, EventArgs e) { //Delete existed Levels for (int i = 0; i < m_deleteExistLevelTotal; i++) { m_objectReference.DeleteLevel(m_deleteExistLevelIDValue[i]); } List <LevelsDataSource> tempLevels = new List <LevelsDataSource>(); //Set all changed Levels' name and elevation if (1 == m_systemLevelChangedFlag) { for (int i = 0; i < m_changedItemsFlag.LongLength; i++) { if (1 == m_changedItemsFlag[i]) { bindingSource1.Position = i; LevelsDataSource changeItem = bindingSource1.Current as LevelsDataSource; if (false == m_objectReference.SetLevel(changeItem.LevelIDValue, changeItem.Name, changeItem.Elevation)) { changeItem.Name = "TempName" + changeItem.Name; tempLevels.Add(changeItem); m_objectReference.SetLevel(changeItem.LevelIDValue, changeItem.Name, changeItem.Elevation); } } } } foreach (LevelsDataSource item in tempLevels) { item.Name = item.Name.Remove(0, 8); // Remove the "TempName" string m_objectReference.SetLevel(item.LevelIDValue, item.Name, item.Elevation); } //Create new Levels for (int i = m_systemLevelsTotal; i < bindingSource1.Count; i++) { bindingSource1.Position = i; LevelsDataSource newItem = bindingSource1.Current as LevelsDataSource; m_objectReference.CreateLevel(newItem.Name, newItem.Elevation); } }
/// <summary> /// Used to delete a item. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void deleteButton_Click(object sender, EventArgs e) { if (1 == levelsDataGridView.RowCount) { TaskDialog.Show("Revit", "Deleting the only open view in the project is not allowed."); return; } if (bindingSource1.Position > m_systemLevelsTotal - 1) { bindingSource1.RemoveCurrent(); return; } if (bindingSource1.Position <= m_systemLevelsTotal - 1 && bindingSource1.Position >= 0) { LevelsDataSource aRow = bindingSource1.Current as LevelsDataSource; m_deleteExistLevelIDValue[m_deleteExistLevelTotal] = aRow.LevelIDValue; m_deleteExistLevelTotal++; bindingSource1.RemoveCurrent(); m_systemLevelsTotal = m_systemLevelsTotal - 1; int[] temChangedItemsFlag = new int[m_systemLevelsTotal]; for (int i = 0, j = 0; i < m_systemLevelsTotal; i++, j++) { if (bindingSource1.Position == i) { j++; } temChangedItemsFlag[i] = m_changedItemsFlag[j]; } m_changedItemsFlag = temChangedItemsFlag; return; } if (bindingSource1.Position < 0) { Autodesk.Revit.UI.TaskDialog.Show("Revit", "No have Level."); } }
/// <summary> /// Used to a new item in the dataGridView control. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void addButton_Click(object sender, EventArgs e) { System.String newLevelName; double newLevelElevation; //If it exists some Levels on Revit, //the added item's Name and Elevation uses last a Level's Name and Elevation. //Otherwise it uses a default data. if (bindingSource1.Count > 0) { bindingSource1.MoveLast(); LevelsDataSource lastItem = bindingSource1.Current as LevelsDataSource; System.String lastLevelName = lastItem.Name; double lastLevelElevation = lastItem.Elevation; newLevelName = lastLevelName + "'"; newLevelElevation = lastLevelElevation + Unit.CovertFromAPI(m_objectReference.UnitType, 10); } else { newLevelName = "Level" + " " + "1"; newLevelElevation = 0; } LevelsDataSource newLevel = new LevelsDataSource(); newLevel.Name = newLevelName; newLevel.Elevation = newLevelElevation; bindingSource1.Add(newLevel); }
/// <summary> /// Implement this method as an external command for Revit. /// </summary> /// <param name="revit">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 revit, ref String message, Autodesk.Revit.DB.ElementSet elements) { m_revit = revit; UnitType = m_revit.Application.ActiveUIDocument.Document.ProjectUnit.get_FormatOptions(Autodesk.Revit.DB.UnitType.UT_Length).Units; Transaction documentTransaction = new Transaction(revit.Application.ActiveUIDocument.Document, "Document"); documentTransaction.Start(); try { //Get every level by iterating through all elements systemLevelsDatum = new List<LevelsDataSource>(); FilteredElementCollector collector = new FilteredElementCollector(m_revit.Application.ActiveUIDocument.Document); ICollection<Element> collection = collector.OfClass(typeof(Level)).ToElements(); foreach (Element element in collection) { Level systemLevel = element as Level; LevelsDataSource levelsDataSourceRow = new LevelsDataSource(); levelsDataSourceRow.LevelIDValue = systemLevel.Id.IntegerValue; levelsDataSourceRow.Name = systemLevel.Name; Parameter elevationPara = systemLevel.get_Parameter(BuiltInParameter.LEVEL_ELEV); double temValue = Unit.CovertFromAPI(UnitType, elevationPara.AsDouble()); double temValue2 = double.Parse(temValue.ToString("#.0")); levelsDataSourceRow.Elevation = temValue2; systemLevelsDatum.Add(levelsDataSourceRow); } using (LevelsForm displayForm = new LevelsForm(this)) { displayForm.ShowDialog(); } } catch (Exception ex) { message = ex.Message; documentTransaction.RollBack(); return Autodesk.Revit.UI.Result.Failed; } documentTransaction.Commit(); return Autodesk.Revit.UI.Result.Succeeded; }