// // (C) Copyright 2003-2013 by Autodesk, Inc. // // Permission to use, copy, modify, and distribute this software in // object code form for any purpose and without fee is hereby granted, // provided that the above copyright notice appears in all copies and // that both that copyright notice and the limited warranty and // restricted rights notice below appear in all supporting // documentation. // // AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS. // AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF // MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC. // DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE // UNINTERRUPTED OR ERROR FREE. // // Use, duplication, or disclosure by the U.S. Government is subject to // restrictions set forth in FAR 52.227-19 (Commercial Computer // Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii) // (Rights in Technical Data and Computer Software), as applicable. // using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Autodesk.Revit.UI; namespace Revit.SDK.Samples.Units.CS { /// /// /// public partial class ProjectUnitForm : Form { //Required designer variable. private ProjectUnitData m_dataBuffer; /// /// Initialize GUI with ProjectUnitData /// /// relevant data from revit public ProjectUnitForm(ProjectUnitData dataBuffer) { InitializeComponent(); m_dataBuffer = dataBuffer; } private void ProjectUnitForm_Load(object sender, EventArgs e) { try { // Initialize the combo box and list view. this.disciplineCombox.BeginUpdate(); foreach (Autodesk.Revit.DB.UnitGroup ug in Enum.GetValues(typeof( Autodesk.Revit.DB.UnitGroup))) { this.disciplineCombox.Items.AddRange(new object[] { ug }); } this.disciplineCombox.SelectedItem = disciplineCombox.Items[0]; this.disciplineCombox.EndUpdate(); this.DecimalSymbolComboBox.BeginUpdate(); foreach (Autodesk.Revit.DB.DecimalSymbol ds in Enum.GetValues(typeof( Autodesk.Revit.DB.DecimalSymbol))) { this.DecimalSymbolComboBox.Items.AddRange(new object[] { ds }); } this.DecimalSymbolComboBox.EndUpdate(); this.DecimalSymbolComboBox.SelectedItem = m_dataBuffer.DecimalSymbol; this.DigitGroupingAmountComboBox.BeginUpdate(); foreach (Autodesk.Revit.DB.DigitGroupingAmount dga in Enum.GetValues(typeof( Autodesk.Revit.DB.DigitGroupingAmount))) { this.DigitGroupingAmountComboBox.Items.AddRange(new object[] { dga }); } this.DigitGroupingAmountComboBox.EndUpdate(); this.DigitGroupingAmountComboBox.SelectedItem = m_dataBuffer.DigitGroupingAmount; this.DigitGroupingSymbolComboBox.BeginUpdate(); foreach (string enumName in Enum.GetNames(typeof( Autodesk.Revit.DB.DigitGroupingSymbol))) { this.DigitGroupingSymbolComboBox.Items.AddRange(new object[] { enumName }); } this.DigitGroupingSymbolComboBox.EndUpdate(); this.DigitGroupingSymbolComboBox.SelectedItem = Enum.GetName(typeof(Autodesk.Revit.DB.DigitGroupingSymbol), m_dataBuffer.DigitGroupingSymbol); this.DecimalSymbolAndGroupingtextBox.Text = getDecimalSymbolAndGroupingstring(); this.DigitGroupingSymbolComboBox.SelectedIndexChanged += new System.EventHandler(this.DigitGroupingSymbolComboBox_SelectedIndexChanged); this.DigitGroupingAmountComboBox.SelectedIndexChanged += new System.EventHandler(this.DigitGroupingAmountComboBox_SelectedIndexChanged); this.DecimalSymbolComboBox.SelectedIndexChanged += new System.EventHandler(this.DecimalSymbolComboBox_SelectedIndexChanged); } catch { throw; } } private void disciplineCombox_SelectedIndexChanged(object sender, EventArgs e) { this.dataGridView.Rows.Clear(); FillGrid(); } /// /// Fill format which's discipline is the selected item of discipline combo box to the grid /// private void FillGrid() { try { // using the static example value 1234.56789 int count = 0; Dictionary.Enumerator iterator = m_dataBuffer.UnitType_FormatOptions.GetEnumerator(); while (iterator.MoveNext()) { if (Autodesk.Revit.DB.UnitUtils.GetUnitGroup(iterator.Current.Key).ToString() == this.disciplineCombox.SelectedItem.ToString()) { this.dataGridView.Rows.Add(); this.dataGridView["UnitType", count].Value = iterator.Current.Key; this.dataGridView["Label_UnitType", count].Value = m_dataBuffer.UnitType_Label[iterator.Current.Key]; this.dataGridView["FormatOptions", count].Value = Autodesk.Revit.DB.UnitFormatUtils.FormatValueToString(m_dataBuffer.Units, iterator.Current.Key, 1234.56789, false, false); count++; } } } catch { throw; } } private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == 2) { // show UI using (FormatForm displayForm = new FormatForm(m_dataBuffer, m_dataBuffer.UnitType_FormatOptions[(Autodesk.Revit.DB.UnitType)this.dataGridView["UnitType", e.RowIndex].Value])) { DialogResult result; while (DialogResult.Cancel != (result = displayForm.ShowDialog())) { if (DialogResult.OK == result) { try { this.m_dataBuffer.SetFormatOptions((Autodesk.Revit.DB.UnitType)this.dataGridView["UnitType", e.RowIndex].Value, displayForm.FormatOptions); this.dataGridView["FormatOptions", e.RowIndex].Value = Autodesk.Revit.DB.UnitFormatUtils.FormatValueToString(m_dataBuffer.Units, (Autodesk.Revit.DB.UnitType)this.dataGridView["UnitType", e.RowIndex].Value, 1234.56789, false, false); break; } catch (System.Exception ex) { TaskDialog.Show(ex.GetType().ToString(), "Set FormatOptions error : \n" + ex.Message, TaskDialogCommonButtons.Ok); } } } } } } private string setDecimalSymbolAndGrouping() { string format = DecimalSymbolAndGroupingtextBox.Text; try { m_dataBuffer.SetDecimalSymbolAndGrouping( (Autodesk.Revit.DB.DecimalSymbol)DecimalSymbolComboBox.SelectedItem, (Autodesk.Revit.DB.DigitGroupingSymbol)Enum.Parse(typeof(Autodesk.Revit.DB.DigitGroupingSymbol), (string)DigitGroupingSymbolComboBox.SelectedItem), (Autodesk.Revit.DB.DigitGroupingAmount)DigitGroupingAmountComboBox.SelectedItem); format = getDecimalSymbolAndGroupingstring(); } catch (System.Exception ex) { TaskDialog.Show(ex.GetType().ToString(), "Set Decimal Symbol and Grouping error : \n" + ex.Message, TaskDialogCommonButtons.Ok); throw; } return format; } private string getDecimalSymbolAndGroupingstring() { Autodesk.Revit.DB.FormatValueOptions formatvalueoptions = new Autodesk.Revit.DB.FormatValueOptions(); formatvalueoptions.AppendUnitSymbol = false; Autodesk.Revit.DB.FormatOptions formatoptions = new Autodesk.Revit.DB.FormatOptions(Autodesk.Revit.DB.UnitSymbolType.UST_NONE, Autodesk.Revit.DB.DisplayUnitType.DUT_CURRENCY); formatoptions.UseDefault = false; formatoptions.DisplayUnits = Autodesk.Revit.DB.DisplayUnitType.DUT_CURRENCY; formatoptions.UnitSymbol = Autodesk.Revit.DB.UnitSymbolType.UST_NONE; formatoptions.Accuracy = 0.01; //formatoptions.SuppressLeadingZeros = true; formatoptions.SuppressSpaces = false; formatoptions.SuppressTrailingZeros = false; formatoptions.UseGrouping = true; formatoptions.UsePlusPrefix = false; formatvalueoptions.SetFormatOptions(formatoptions); return Autodesk.Revit.DB.UnitFormatUtils.FormatValueToString(this.m_dataBuffer.Units, Autodesk.Revit.DB.UnitType.UT_Number, 123456789.0, false, false, formatvalueoptions); } private void DecimalSymbolComboBox_SelectedIndexChanged(object sender, EventArgs e) { if ((Autodesk.Revit.DB.DecimalSymbol)this.DecimalSymbolComboBox.SelectedItem == Autodesk.Revit.DB.DecimalSymbol.Comma && (string)this.DigitGroupingSymbolComboBox.SelectedItem == Enum.GetName(typeof(Autodesk.Revit.DB.DigitGroupingSymbol), Autodesk.Revit.DB.DigitGroupingSymbol.Comma)) { this.DigitGroupingSymbolComboBox.SelectedItem = Enum.GetName(typeof(Autodesk.Revit.DB.DigitGroupingSymbol), Autodesk.Revit.DB.DigitGroupingSymbol.Dot); } if ((Autodesk.Revit.DB.DecimalSymbol)this.DecimalSymbolComboBox.SelectedItem == Autodesk.Revit.DB.DecimalSymbol.Dot && (string)this.DigitGroupingSymbolComboBox.SelectedItem == Enum.GetName(typeof(Autodesk.Revit.DB.DigitGroupingSymbol), Autodesk.Revit.DB.DigitGroupingSymbol.Dot)) { this.DigitGroupingSymbolComboBox.SelectedItem = Enum.GetName(typeof(Autodesk.Revit.DB.DigitGroupingSymbol), Autodesk.Revit.DB.DigitGroupingSymbol.Comma); } try { this.DecimalSymbolAndGroupingtextBox.Text = setDecimalSymbolAndGrouping(); } catch { this.DecimalSymbolComboBox.SelectedItem = m_dataBuffer.DecimalSymbol; } } private void DigitGroupingAmountComboBox_SelectedIndexChanged(object sender, EventArgs e) { try { this.DecimalSymbolAndGroupingtextBox.Text = setDecimalSymbolAndGrouping(); } catch { this.DigitGroupingAmountComboBox.SelectedItem = m_dataBuffer.DigitGroupingAmount; } } private void DigitGroupingSymbolComboBox_SelectedIndexChanged(object sender, EventArgs e) { if ((string)this.DigitGroupingSymbolComboBox.SelectedItem == Enum.GetName(typeof(Autodesk.Revit.DB.DigitGroupingSymbol), Autodesk.Revit.DB.DigitGroupingSymbol.Comma) && (Autodesk.Revit.DB.DecimalSymbol)this.DecimalSymbolComboBox.SelectedItem == Autodesk.Revit.DB.DecimalSymbol.Comma) { this.DecimalSymbolComboBox.SelectedItem = Autodesk.Revit.DB.DecimalSymbol.Dot; } if ((string)this.DigitGroupingSymbolComboBox.SelectedItem == Enum.GetName(typeof(Autodesk.Revit.DB.DigitGroupingSymbol), Autodesk.Revit.DB.DigitGroupingSymbol.Dot) && (Autodesk.Revit.DB.DecimalSymbol)this.DecimalSymbolComboBox.SelectedItem == Autodesk.Revit.DB.DecimalSymbol.Dot) { this.DecimalSymbolComboBox.SelectedItem = Autodesk.Revit.DB.DecimalSymbol.Comma; } try { this.DecimalSymbolAndGroupingtextBox.Text = setDecimalSymbolAndGrouping(); } catch { this.DigitGroupingSymbolComboBox.SelectedItem = Enum.GetName(typeof(Autodesk.Revit.DB.DigitGroupingSymbol), m_dataBuffer.DigitGroupingSymbol); } } } }