public void ResetMaterialControls() { // Identify the indices of the columnIndecies = new List <int>(); foreach (string groupParam in massGroupingParams) { for (int i = 0; i < headers.Count; i++) { string val = headers[i]; if (val == groupParam) { columnIndecies.Add(i); break; } } } // Group figure out how many groupings we need groupingNames = new List <string>(); foreach (object obj in importDataGrid.Items) { try { DataRowView drv = obj as DataRowView; string gName = string.Empty; foreach (int i in columnIndecies) { if (gName == string.Empty) { gName = drv.Row.ItemArray[i].ToString(); } else { gName += " - " + drv.Row.ItemArray[i].ToString(); } } if (!groupingNames.Contains(gName)) { groupingNames.Add(gName); } } catch (Exception ex) { TaskDialog.Show("Error: ", ex.Message); } } // instantiate the controls onto the material control area controlPanel.Children.Clear(); organizedMasses = new List <List <MassObject> >(); foreach (string gName in groupingNames) { MaterialSelectorControl ctrl = new MaterialSelectorControl(gName, projMaterials); ctrl.Margin = new Thickness(0, 0, 0, 0); controlPanel.Children.Add(ctrl); organizedMasses.Add(new List <MassObject>()); } foreach (object obj in importDataGrid.Items) { try { DataRowView drv = obj as DataRowView; string curName = string.Empty; foreach (int i in columnIndecies) { if (curName == string.Empty) { curName = drv.Row.ItemArray[i].ToString(); } else { curName += " - " + drv.Row.ItemArray[i].ToString(); } } int index = groupingNames.IndexOf(curName); string rName = drv.Row.ItemArray[2].ToString(); string rNumb = drv.Row.ItemArray[3].ToString(); if (rName == string.Empty && rName == null && rNumb == string.Empty && rNumb == null) { continue; } string dept = drv.Row.ItemArray[0].ToString(); string rType = drv.Row.ItemArray[1].ToString(); string progAreaStr = drv.Row.ItemArray[4].ToString(); string qtyStr = drv.Row.ItemArray[5].ToString(); List <ParameterObj> paramObjs = new List <ParameterObj>(); for (int i = 6; i < drv.Row.ItemArray.Length; i++) { ParameterObj po = new ParameterObj(); po.Name = "#" + headers[i] + "#"; po.Value = drv.Row.ItemArray[i].ToString(); paramObjs.Add(po); } MassObject mo = new MassObject(); mo.RoomName = rName; mo.RoomNumber = rNumb; if (dept != null && dept != string.Empty) { mo.Department = dept; } else { mo.Department = string.Empty; } if (rType != null && rType != string.Empty) { mo.RoomType = rType; } else { mo.RoomType = string.Empty; } double area = 0; if (double.TryParse(progAreaStr, out area)) { mo.ProgramArea = area; } else { mo.ProgramArea = 0; } int qty = 1; if (int.TryParse(qtyStr, out qty)) { mo.Quantity = qty; } else { mo.Quantity = 1; } //if (paramObjs != null && paramObjs.Count > 0) mo.Parameters = paramObjs; organizedMasses[index].Add(mo); } catch { } } }
private void createButton_Click(object sender, RoutedEventArgs e) { // Get the currently set materials List <Material> mats = new List <Material>(); foreach (UIElement uiElem in controlPanel.Children) { MaterialSelectorControl matCtrl = uiElem as MaterialSelectorControl; mats.Add(matCtrl.Material); } System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess(); IntPtr handle = proc.MainWindowHandle; SettingsForm form = new SettingsForm(organizedMasses, mats, paramsOut, uiDoc); System.Windows.Interop.WindowInteropHelper helper = new System.Windows.Interop.WindowInteropHelper(form); helper.Owner = handle; Hide(); form.ShowDialog(); List <Parameter> selectedParameters = form.SelectedParameters; // Get the DisplayUnitTypes for length and area. Units units = uiDoc.Document.GetUnits(); FormatOptions areaFO = units.GetFormatOptions(UnitType.UT_Area); FormatOptions lengthFO = units.GetFormatOptions(UnitType.UT_Length); DisplayUnitType lengthDUT = lengthFO.DisplayUnits; DisplayUnitType areaDUT = areaFO.DisplayUnits; double defaultHeight = 10; if (lengthDUT == DisplayUnitType.DUT_CENTIMETERS || lengthDUT == DisplayUnitType.DUT_DECIMETERS || lengthDUT == DisplayUnitType.DUT_METERS || lengthDUT == DisplayUnitType.DUT_METERS_CENTIMETERS || lengthDUT == DisplayUnitType.DUT_MILLIMETERS) { defaultHeight = 9.84252; } string temp = "start"; try { // Time to start creating masses, gather information for the schema excelFileName = new System.IO.FileInfo(excelFilePath).Name; temp = "excel file"; excelWorksheetName = worksheetComboBox.SelectedItem.ToString(); temp = "worksheet"; paramNames = new List <string>(); foreach (Parameter p in selectedParameters) { if (p != null) { paramNames.Add(p.Definition.Name); } else { paramNames.Add(string.Empty); } } temp = "params"; creationDateTime = DateTime.Now.ToString("yyyymmdd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); temp = "creation date"; // Other data, massGroupingParams, symbolId, and levelId are already defined. } catch (Exception ex) { TaskDialog.Show(temp, ex.Message); } // Create the masses using (Transaction t = new Transaction(uiDoc.Document, "Create Masses")) { t.Start(); // Make sure the Symbol is active if (!selectedSymbol.IsActive) { selectedSymbol.Activate(); uiDoc.Document.Regenerate(); } // Iterate through the masses double currentX = 0; for (int i = 0; i < organizedMasses.Count; i++) { try { List <MassObject> massGrp = organizedMasses[i]; double maxX = 0; double currentY = 0; string groupId = groupingNames[i]; foreach (MassObject mass in massGrp) { for (int j = 0; j < mass.Quantity; j++) { // Location XYZ loc = new XYZ(currentX, currentY, selectedLevel.ProjectElevation); //FamilyInstance FamilyInstance fi = uiDoc.Document.Create.NewFamilyInstance(loc, selectedSymbol, Autodesk.Revit.DB.Structure.StructuralType.NonStructural); // Calculate width and depth double sideLength = 10; if (mass.ProgramArea > 0) { sideLength = Math.Sqrt(mass.ProgramArea); } if (sideLength > maxX) { maxX = sideLength; } // Set the parameters as necessary if (selectedParameters[0] != null && selectedParameters[0].Definition.ParameterType == ParameterType.Text) { fi.get_Parameter(selectedParameters[0].Definition).Set(mass.Department); } if (selectedParameters[1] != null && selectedParameters[1].Definition.ParameterType == ParameterType.Text) { fi.get_Parameter(selectedParameters[1].Definition).Set(mass.RoomType); } if (selectedParameters[2] != null && selectedParameters[2].Definition.ParameterType == ParameterType.Text) { fi.get_Parameter(selectedParameters[2].Definition).Set(mass.RoomName); } if (selectedParameters[3] != null && selectedParameters[3].Definition.ParameterType == ParameterType.Text) { fi.get_Parameter(selectedParameters[3].Definition).Set(mass.RoomNumber); } if (selectedParameters[4] != null && selectedParameters[4].Definition.ParameterType == ParameterType.Area) { fi.get_Parameter(selectedParameters[4].Definition).Set(UnitUtils.ConvertToInternalUnits(mass.ProgramArea, areaDUT)); } if (selectedParameters[5] != null && selectedParameters[5].Definition.ParameterType == ParameterType.Material) { fi.get_Parameter(selectedParameters[5].Definition).Set(mats[i].Id); } if (selectedParameters[6] != null && selectedParameters[6].Definition.ParameterType == ParameterType.Length) { fi.get_Parameter(selectedParameters[6].Definition).Set(UnitUtils.ConvertToInternalUnits(sideLength, lengthDUT)); } if (selectedParameters[7] != null && selectedParameters[7].Definition.ParameterType == ParameterType.Length) { fi.get_Parameter(selectedParameters[7].Definition).Set(UnitUtils.ConvertToInternalUnits(sideLength, lengthDUT)); } if (selectedParameters[8] != null && selectedParameters[8].Definition.ParameterType == ParameterType.Length) { fi.get_Parameter(selectedParameters[8].Definition).Set(UnitUtils.ConvertToInternalUnits(defaultHeight, lengthDUT)); } for (int k = 9; k < mass.Parameters.Count + 9; k++) { if (k - 9 < mass.Parameters.Count) { ParameterObj po = mass.Parameters[k - 9]; if (selectedParameters[k] != null) { try { switch (selectedParameters[k].StorageType) { case StorageType.Double: double dbl = 0; if (double.TryParse(po.Value, out dbl)) { Parameter p = fi.get_Parameter(selectedParameters[k].Definition); if (p.Definition.ParameterType == ParameterType.Area) { p.Set(UnitUtils.ConvertToInternalUnits(dbl, areaDUT)); } else if (p.Definition.ParameterType == ParameterType.Length) { p.Set(UnitUtils.ConvertToInternalUnits(dbl, lengthDUT)); } else { p.Set(dbl); } } break; case StorageType.Integer: int integer = 0; if (int.TryParse(po.Value, out integer)) { fi.get_Parameter(selectedParameters[k].Definition).Set(integer); } break; case StorageType.ElementId: int elemIdInt = 0; if (int.TryParse(po.Value, out integer)) { fi.get_Parameter(selectedParameters[k].Definition).Set(new ElementId(elemIdInt)); } break; default: fi.get_Parameter(selectedParameters[k].Definition).Set(po.Value); break; } } catch { } } } } // Store the local Schema data, ie the creation datetime. try { StoreElemDateTime(fi, groupId); } catch (Exception ex) { TaskDialog.Show("Schema Error", ex.Message); } // Adjust the y Position currentY = currentY + sideLength + 5; } } // Adjust the X position currentX = currentX + maxX + 5; } catch (Exception ex) { TaskDialog.Show("Error", ex.Message); } } // Store the schema data for the entire creation set. //try //{ // if (StoreImportData()) // TaskDialog.Show("Success", "Should have successfully created the collection schema."); // else // TaskDialog.Show("Failure", "Failed to create the collection schema."); //} //catch (Exception ex) //{ // TaskDialog.Show("Schema Error", ex.Message); //} t.Commit(); } Close(); }