示例#1
0
        /***************************************************/
        /****              Private methods              ****/
        /***************************************************/

        private static Rebar ToRevitRebar(this IReinforcingBar bar, Document document, RevitSettings settings = null, Dictionary <Guid, List <int> > refObjects = null)
        {
            if (bar == null || document == null)
            {
                return(null);
            }

            Rebar rebar = refObjects.GetValue <Rebar>(document, bar.BHoM_Guid);

            if (rebar != null)
            {
                return(rebar);
            }

            settings = settings.DefaultIfNull();

            //getting host
            Element host = null;

            if (bar.CustomData.ContainsKey("HostId"))
            {
                host = document.GetElement(new ElementId((int)bar.CustomData["HostId"]));
            }
            else
            {
                BH.Engine.Reflection.Compute.RecordError("One or more rebars does not contain information about the host.");
                return(null);
            }

            if (host == null)
            {
                BH.Engine.Reflection.Compute.RecordError($"Rebar host with ID: {bar.CustomData["host"]} does not exist in the Revit project.");
                return(null);
            }

            //getting bar type
            RebarBarType barType = bar.ElementType(document, settings);

            if (barType == null)
            {
                BH.Engine.Reflection.Compute.RecordError($"Revit project does not contain rebar family containing type with matching diameter for one or more rebars.\nMissing Family: \"Rebar Bar : {(int)(bar.Diameter * 1000)}\"");
                return(null);
            }

            //setting bend radiuses
            barType.SetParameter(BuiltInParameter.REBAR_STANDARD_BEND_DIAMETER, bar.BendRadius * 2);
            barType.SetParameter(BuiltInParameter.REBAR_STANDARD_HOOK_BEND_DIAMETER, bar.BendRadius * 2);
            barType.SetParameter(BuiltInParameter.REBAR_BAR_STIRRUP_BEND_DIAMETER, bar.BendRadius * 2);

            //creating rebar
            RebarFreeFormValidationResult rffvr = new RebarFreeFormValidationResult();

            List <List <Curve> > curves = new List <List <Curve> > {
                bar.CentreCurve.IToRevitCurves()
            };                                                                                      //
            IList <IList <Curve> > iListCurves = new List <IList <Curve> >();                       // Needed to convert

            foreach (List <Curve> list in curves)                                                   // List<List<Curve>> -> IList<IList<Curve>>
            {
                iListCurves.Add(list);                                                              //
            }
            rebar = Rebar.CreateFreeForm(document, barType, host, iListCurves, out rffvr);

            //setting hooks
            if (bar.GetType() == typeof(Stirrup))
            {
                RebarHookType rht = new FilteredElementCollector(document).OfClass(typeof(RebarHookType)).Where(x => x.Name == "Standard - 90 deg.").FirstOrDefault() as RebarHookType;
                rebar.SetHookTypeId(0, rht.Id);
                rebar.SetHookTypeId(1, rht.Id);
                rebar.SetHookOrientation(0, RebarHookOrientation.Left);
                rebar.SetHookOrientation(1, RebarHookOrientation.Left);
            }

            rebar.CopyParameters(bar, settings);

            refObjects.AddOrReplace(bar, rebar);
            return(rebar);
        }
示例#2
0
        /***************************************************/
        /****            Interface methods              ****/
        /***************************************************/

        public static Rebar IToRevitRebar(this IReinforcingBar reinforcement, Document document, RevitSettings settings = null, Dictionary <Guid, List <int> > refObjects = null)
        {
            return(ToRevitRebar(reinforcement as dynamic, document, settings, refObjects));
        }