/// <summary> /// Constructor /// </summary> /// <param name="creator">the family instance creator</param> /// <param name="type">based-type</param> public PlaceFamilyInstanceForm(FamilyInstanceCreator creator, BasedType type) { m_creator = creator; m_creator.CheckFamilySymbol(type); m_baseType = type; InitializeComponent(); // set the face name list and the default value foreach (String name in creator.FaceNameList) { comboBoxFace.Items.Add(name); } if (comboBoxFace.Items.Count > 0) { SetFaceIndex(0); } // set the family name list and the default value foreach (String symbolName in m_creator.FamilySymbolNameList) { comboBoxFamily.Items.Add(symbolName); } if (m_creator.DefaultFamilySymbolIndex < 0) { comboBoxFamily.SelectedItem = m_creator.FamilySymbolNameList[0]; } else { comboBoxFamily.SelectedItem = m_creator.FamilySymbolNameList[m_creator.DefaultFamilySymbolIndex]; } // set UI display according to baseType switch (m_baseType) { case BasedType.Point: this.Text = "Place Point-Based Family Instance"; labelFirst.Text = "Location :"; labelSecond.Text = "Direction :"; break; case BasedType.Line: comboBoxFamily.SelectedItem = "Line-based"; this.Text = "Place Line-Based Family Instance"; labelFirst.Text = "Start Point :"; labelSecond.Text = "End Point :"; break; default: break; } AdjustComboBoxDropDownListWidth(comboBoxFace); AdjustComboBoxDropDownListWidth(comboBoxFamily); }
/// <summary> /// Process the click event of "Next" button /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonNext_Click(object sender, EventArgs e) { if (radioButtonPoint.Checked) { m_baseType = BasedType.Point; } else if (radioButtonLine.Checked) { m_baseType = BasedType.Line; } else { throw new Exception("An error occured in selecting based type."); } this.Close(); this.DialogResult = DialogResult.OK; }
/// <summary> /// 1. Find all family symbols in current Revit document and store them /// 2. Find the index of default family symbol /// Point("Point-based"); Line("Line-based") /// </summary> public void CheckFamilySymbol(BasedType type) { m_defaultIndex = -1; m_familySymbolList.Clear(); Autodesk.Revit.DB.FilteredElementIterator familySymbolItor = new FilteredElementCollector(m_revitDoc.Document).OfClass(typeof(FamilySymbol)).GetElementIterator(); String defaultSymbolName = String.Empty; switch (type) { case BasedType.Point: defaultSymbolName = "Point-based"; break; case BasedType.Line: defaultSymbolName = "Line-based"; break; default: break; } bool hasDefaultSymbol = false; int ii = 0; while (familySymbolItor.MoveNext()) { FamilySymbol symbol = (FamilySymbol)familySymbolItor.Current; if(null == symbol) { continue; } if (!hasDefaultSymbol && 0 == String.Compare(defaultSymbolName, symbol.Name)) { hasDefaultSymbol = true; m_defaultIndex = ii; } // family symbol m_familySymbolList.Add(symbol); // family symbol name String familyCategoryname = String.Empty; if (null != symbol.Family.FamilyCategory) { familyCategoryname = symbol.Family.FamilyCategory.Name + " : "; } m_familySymbolNameList.Add(String.Format("{0}{1} : {2}" , familyCategoryname, symbol.Family.Name, symbol.Name)); ii++; } if (!hasDefaultSymbol) { FamilySymbol loadedfamilySymbol = null; try { m_revitDoc.Document.LoadFamilySymbol(String.Format(@"{0}.rfa", defaultSymbolName) , defaultSymbolName , out loadedfamilySymbol); } catch(Exception) { MessageBox.Show("Can't load the prepared rfa."); } if (null == loadedfamilySymbol) { return; } m_familySymbolList.Add(loadedfamilySymbol); String familyCategoryname = String.Empty; if (null != loadedfamilySymbol.Family.FamilyCategory) { familyCategoryname = loadedfamilySymbol.Family.FamilyCategory.Name +": "; } m_familySymbolNameList.Add(String.Format("{0}{1}: {2}" , familyCategoryname, loadedfamilySymbol.Family.Name, loadedfamilySymbol.Name)); m_defaultIndex = m_familySymbolList.Count - 1; } return; }
/// <summary> /// 1. Find all family symbols in current Revit document and store them /// 2. Find the index of default family symbol /// Point("Point-based"); Line("Line-based") /// </summary> public void CheckFamilySymbol(BasedType type) { m_defaultIndex = -1; m_familySymbolList.Clear(); Autodesk.Revit.DB.FilteredElementIterator familySymbolItor = new FilteredElementCollector(m_revitDoc.Document).OfClass(typeof(FamilySymbol)).GetElementIterator(); String defaultSymbolName = String.Empty; switch (type) { case BasedType.Point: defaultSymbolName = "Point-based"; break; case BasedType.Line: defaultSymbolName = "Line-based"; break; default: break; } bool hasDefaultSymbol = false; int ii = 0; while (familySymbolItor.MoveNext()) { FamilySymbol symbol = (FamilySymbol)familySymbolItor.Current; if (null == symbol) { continue; } if (!hasDefaultSymbol && 0 == String.Compare(defaultSymbolName, symbol.Name)) { hasDefaultSymbol = true; m_defaultIndex = ii; } // family symbol m_familySymbolList.Add(symbol); // family symbol name String familyCategoryname = String.Empty; if (null != symbol.Family.FamilyCategory) { familyCategoryname = symbol.Family.FamilyCategory.Name + " : "; } m_familySymbolNameList.Add(String.Format("{0}{1} : {2}" , familyCategoryname, symbol.Family.Name, symbol.Name)); ii++; } if (!hasDefaultSymbol) { FamilySymbol loadedfamilySymbol = null; try { m_revitDoc.Document.LoadFamilySymbol(String.Format(@"{0}.rfa", defaultSymbolName) , defaultSymbolName , out loadedfamilySymbol); } catch (Exception) { TaskDialog.Show("Revit", "Can't load the prepared rfa."); } if (null == loadedfamilySymbol) { return; } m_familySymbolList.Add(loadedfamilySymbol); String familyCategoryname = String.Empty; if (null != loadedfamilySymbol.Family.FamilyCategory) { familyCategoryname = loadedfamilySymbol.Family.FamilyCategory.Name + ": "; } m_familySymbolNameList.Add(String.Format("{0}{1}: {2}" , familyCategoryname, loadedfamilySymbol.Family.Name, loadedfamilySymbol.Name)); m_defaultIndex = m_familySymbolList.Count - 1; } return; }