/// <summary> /// Set the parameters of a Revit element /// </summary> /// <param name="elt_create"></param> /// <param name="_params"></param> public static void SetParameters(Element elt_create, InputParams.BaseStruct _params) { if (_params.paramDict != null && _params.paramDict.Length > 0) { Trace.WriteLine(_params.paramDict[0].key.ToString()); for (int j = 0; j < _params.paramDict.Length; j++) { IList <Parameter> parameter = elt_create.GetParameters(_params.paramDict[j].key); if (_params.paramDict[j].key != null && parameter.Count() != 0) { if (parameter[0].Definition.UnitType == UnitType.UT_Length) { double val = double.Parse(_params.paramDict[j].value, System.Globalization.CultureInfo.InvariantCulture); parameter[0].Set(val / 0.3048); } else if (parameter[0].Definition.UnitType == UnitType.UT_Angle) { double val = double.Parse(_params.paramDict[j].value, System.Globalization.CultureInfo.InvariantCulture); parameter[0].Set(val * Math.PI / 180); } else { string val = _params.paramDict[j].value; parameter[0].Set(val); } } } } }
/// <summary> /// Create Revit element with geometric information /// </summary> /// <param name="doc"></param> /// <param name="_params"></param> /// <returns></returns> public static Element CreateElement(Document doc, InputParams.BaseStruct _params) { Element elt_create = null; double x = double.Parse(_params.insertionPoint.x, System.Globalization.CultureInfo.InvariantCulture); double y = double.Parse(_params.insertionPoint.y, System.Globalization.CultureInfo.InvariantCulture); double z = double.Parse(_params.insertionPoint.z, System.Globalization.CultureInfo.InvariantCulture); XYZ location = new XYZ(x / 0.3048, y / 0.3048, z / 0.3048); Trace.WriteLine(location.ToString()); string familyName = _params.familyName; string symbolName = _params.typeName; Family family = null; FamilySymbol symbol = null; //Filter Element Collector FilteredElementCollector FamiliesCollector = new FilteredElementCollector(doc); FamiliesCollector.OfClass(typeof(Family)); var families = from m_family in FamiliesCollector where m_family.Name.ToLower() == familyName.ToLower() select m_family; family = families.Cast <Family>().FirstOrDefault <Family>(); //If the family is not found in the document if (family == null) { throw new InvalidOperationException("The family " + familyName + " have not been found in the working document !"); } //choose the familysymbol if (symbolName != "") { //Symbol requested by the user foreach (ElementId id in family.GetFamilySymbolIds()) { FamilySymbol tmp_symbol = doc.GetElement(id) as FamilySymbol; if (tmp_symbol.Name == symbolName) { symbol = tmp_symbol; break; } } } else { //No symbol requested by the user so pick the first one foreach (ElementId id in family.GetFamilySymbolIds()) { symbol = doc.GetElement(id) as FamilySymbol; break; } } //Check if the symbol have been found if (symbol == null) { throw new InvalidOperationException("The symbol (.i.e. family type) " + symbolName + " have not been found in the family " + familyName); } //Activate the symbol if (!symbol.IsActive) { symbol.Activate(); doc.Regenerate(); } //place the familyinstance elt_create = doc.Create.NewFamilyInstance(location, symbol, Autodesk.Revit.DB.Structure.StructuralType.NonStructural); //Plan rotation double angle_rotation = double.Parse(_params.angle, System.Globalization.CultureInfo.InvariantCulture); //Rotation axis double x_axis = double.Parse(_params.rotAxis.x, System.Globalization.CultureInfo.InvariantCulture); double y_axis = double.Parse(_params.rotAxis.y, System.Globalization.CultureInfo.InvariantCulture); double z_axis = double.Parse(_params.rotAxis.z, System.Globalization.CultureInfo.InvariantCulture); XYZ axis_plan = new XYZ(x_axis / 0.3048, y_axis / 0.3048, z_axis / 0.3048); Trace.WriteLine(axis_plan.ToString()); XYZ deb_plan = location; XYZ fin_plan = deb_plan + axis_plan; Line axis_plan_line = Line.CreateBound(deb_plan, fin_plan); ElementTransformUtils.RotateElement(doc, elt_create.Id, axis_plan_line, angle_rotation); return(elt_create); }