Exemplo n.º 1
0
        /// <summary>
        /// Gets ForceCalculationDataDescriptor object for the current structure
        /// </summary>
        /// <param name="data">Service Data</param>
        /// <param name="combinations">List of selected combinations ids </param>
        /// <param name="elementId">Id of Revit element</param>
        /// <returns>Reference to ForceCalculationDataDescriptor</returns>
        protected ForceCalculationDataDescriptor GetForceCalculationDataDescriptor(Autodesk.Revit.DB.CodeChecking.ServiceData data, List <ElementId> combinations, ElementId elementId)
        {
            Tuple <Label, CalculationParameter, BuiltInCategory, Element> intData = GetElementInternalData(data, elementId);
            Label ccLabel = intData.Item1;
            CalculationParameter calculationParameters = intData.Item2;
            BuiltInCategory      category = intData.Item3;
            Element element = intData.Item4;

            List <ForceType> forceTypes = new List <ForceType>();// { ForceType.Fx, ForceType.Fy, ForceType.Fz, ForceType.Mx, ForceType.My, ForceType.Mz };

            forceTypes = GetForceTypes(data, new ElementId[] { elementId });

            ForceCalculationDataDescriptor descriptor = null;

            double elementLength = (element as Autodesk.Revit.DB.Structure.AnalyticalModel).GetCurve().Length;

            elementLength = Autodesk.Revit.DB.UnitUtils.ConvertFromInternalUnits(elementLength, DisplayUnitType.DUT_METERS);
            descriptor    = new ForceCalculationDataDescriptorLinear(elementId, 1.0, calculationParameters.CalculationPointsSelector.GetPointCoordinates(data.Document, true, elementLength, elementId, combinations, forceTypes), true, forceTypes);

            if (descriptor == null)
            {
                descriptor = new ForceCalculationDataDescriptorLinear(elementId);
            }

            if (descriptor == null)
            {
                descriptor = new ForceCalculationDataDescriptor(elementId);
            }

            return(descriptor);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Runs calculation for elements served in user implementation of cref="IEngineData".
        /// </summary>
        /// <param name="server">Acces to cref="Server".</param>
        /// <param name="data">Acces to cref="ServiceData".</param>
        public void Calculate(Server.Server server, Autodesk.Revit.DB.CodeChecking.ServiceData data)
        {
            List <Tuple <ElementId, ResultStatus> > listElementStatus = ReadListElementIdWithStatus(server, data);

            if (listElementStatus.Count > 0)
            {
                CalculateSetOfElements(listElementStatus, server, data);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Creates new instance of class with list of calculation points for user's elements.
        /// </summary>
        /// <param name="data">Acces to cref="ServiceData".</param>
        /// <param name="parameters">User object with common parameters.</param>
        /// <param name="elementId">Id of an element.</param>
        /// <returns>List of calculation points for user's element.</returns>
        public List <CalcPoint> CreateCalcPointsForElement(Autodesk.Revit.DB.CodeChecking.ServiceData data, CommonParametersBase parameters, ElementId elementId)
        {
            List <CalcPoint> calculationPoints = new List <CalcPoint>();
            CommonParameters commonParameters  = parameters as CommonParameters;

            if (commonParameters != null)
            {
                calculationPoints = commonParameters.ResultCache.GetCalculationPoints(elementId);
            }
            return(calculationPoints);
        }
Exemplo n.º 4
0
        public override void Verify(Autodesk.Revit.DB.CodeChecking.ServiceData data)
        {
            Autodesk.Revit.DB.CodeChecking.Storage.StorageService  service         = Autodesk.Revit.DB.CodeChecking.Storage.StorageService.GetStorageService();
            Autodesk.Revit.DB.CodeChecking.Storage.StorageDocument storageDocument = service.GetStorageDocument(data.Document);


            Main.Calculation.EngineData enginData = new Main.Calculation.EngineData();
            Engine.Engine engine = new Engine.Engine(enginData);

            engine.Calculate(this, data);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Saves in Revit data base information collected in the list elements data.
        /// </summary>
        /// <param name="data">Acces to cref="ServiceData".</param>
        /// <param name="listElementData">List of elements data.</param>
        protected void SaveListElementData(Autodesk.Revit.DB.CodeChecking.ServiceData data, List <ObjectDataBase> listElementData)
        {
            Autodesk.Revit.DB.CodeChecking.NotificationService.ProgressStart(Resources.ResourceManager.GetString("DataSaving"), listElementData.Count);
            int step = 0;

            foreach (ElementDataBase elemData in listElementData)
            {
                SaveElementResult(elemData.ElementId, elemData.Result, elemData.Status, data);
                step++;
                Autodesk.Revit.DB.CodeChecking.NotificationService.ProgressStep(string.Format("{0:d}%", step * 100 / listElementData.Count));
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Creates new instance of a user's class with common parameters.
        /// </summary>
        /// <param name="data">Acces to cref="ServiceData".</param>
        /// <param name="parameters">Instance of base class with common parameters.</param>
        /// <returns>New instance of user implementation of class derived from cref="CommonParametersBase".</returns>
        public CommonParametersBase CreateCommonParameters(Autodesk.Revit.DB.CodeChecking.ServiceData data, CommonParametersBase parameters)
        {
            Autodesk.Revit.DB.CodeChecking.NotificationService.ProgressStart(Resources.ResourceManager.GetString("DataPreparation"), 1);

            CommonParameters commonParameters = new CommonParameters(data, parameters);

            List <ForceCalculationDataDescriptor> calculationDataDescriptors = new List <ForceCalculationDataDescriptor>();

            foreach (Tuple <ElementId, ResultStatus> elemStatus in commonParameters.ListElementStatus)
            {
                ForceCalculationDataDescriptor forceCalculationDataDescriptor = GetForceCalculationDataDescriptor(data, parameters.ListCombinationId, elemStatus.Item1);
                ///<structural_toolkit_2015>
                if (forceCalculationDataDescriptor is ForceCalculationDataDescriptorLinear)
                {
                    forceCalculationDataDescriptor.AddBendingForceTypes(new ForceType[] { ForceType.Ux, ForceType.Uy, ForceType.Uz });
                }
                ///</structural_toolkit_2015>
                calculationDataDescriptors.Add(forceCalculationDataDescriptor);
                if (NotificationService.ProgressBreakInvoked())
                {
                    break;
                }
            }

            ForceResultsPackageDescriptor[] vResPackDesc = new ForceResultsPackageDescriptor[] { ForceResultsPackageDescriptor.GetResultPackageDescriptor(data.Document, commonParameters.ActivePackageGuid) };

            // Uncomment the code below to dump to a text file the time spent on accessing ResultsBuilder
            // Int64 forceResultsCacheAccessTime = System.DateTime.Now.Ticks;
            commonParameters.ResultCache = new ForceResultsCache(data.Document, calculationDataDescriptors, vResPackDesc, commonParameters.ListCombinationId, GetInputDataUnitSystem());
            // Uncomment the code below to dump to a text file the time spent on accessing ResultsBuilder
            // forceResultsCacheAccessTime = System.DateTime.Now.Ticks - forceResultsCacheAccessTime;

            foreach (Tuple <ElementId, ResultStatus> elemStatus in commonParameters.ListElementStatus)
            {
                ForceResultsCache.ElementResultsStatus resultStatus = commonParameters.ResultCache.GetElementResultsStatus(elemStatus.Item1);
                if (resultStatus != ForceResultsCache.ElementResultsStatus.ResultsOK)
                {
                    elemStatus.Item2.AddError(Resources.ResourceManager.GetString("ErrStaticResults"));
                }
            }

            // Uncomment the code below to dump to a text file the time spent on accessing ResultsBuilder
            // using (System.IO.StreamWriter writer = new System.IO.StreamWriter(data.Document.PathName + ".RBAccessTimeInfo.txt", true))
            // {
            //    string resultBuilderAccessTime = DateTime.Now.ToString() + " Cache: " + (new System.TimeSpan(forceResultsCacheAccessTime)).TotalSeconds + " RB: " + (new System.TimeSpan(commonParameters.ResultCache.ResultBuilderAccessTime)).TotalSeconds;
            //
            //    writer.WriteLine(resultBuilderAccessTime);
            // }

            Autodesk.Revit.DB.CodeChecking.NotificationService.ProgressStep("");
            return(commonParameters);
        }
Exemplo n.º 7
0
 /// <summary>
 /// Gets number of available threads or processors. user could switch off parallel calculation by returning value 1.
 /// </summary>
 /// <param name="data">Service data.</param>
 /// <returns>Number of threads</returns>
 public int GetNumberOfThreads(Autodesk.Revit.DB.CodeChecking.ServiceData data)
 {
     /// <structural_toolkit_2015>
     if (Tools.IsJournalPlayback)
     {
         return(1);
     }
     else
     {
         return(Environment.ProcessorCount);
     }
     /// </structural_toolkit_2015>
 }
Exemplo n.º 8
0
        /// <summary>
        /// Reads from Revit information about selected elements and store it in the list with elements data.
        /// </summary>
        /// <param name="data">Acces to cref="ServiceData".</param>
        /// <param name="listElementStatus">List identyficators of elements with result status.</param>
        /// <param name="parameters">Common parameters.</param>
        /// <returns>List of elements data.</returns>
        protected List <ObjectDataBase> ReadListElementData(Autodesk.Revit.DB.CodeChecking.ServiceData data, List <Tuple <ElementId, ResultStatus> > listElementStatus, CommonParametersBase parameters)
        {
            Autodesk.Revit.DB.CodeChecking.Storage.StorageService  service         = Autodesk.Revit.DB.CodeChecking.Storage.StorageService.GetStorageService();
            Autodesk.Revit.DB.CodeChecking.Storage.StorageDocument storageDocument = service.GetStorageDocument(data.Document);

            List <ObjectDataBase> listElementData = new List <ObjectDataBase>();

            foreach (Tuple <ElementId, ResultStatus> elemStatus in listElementStatus)
            {
                Element element = data.Document.GetElement(elemStatus.Item1);
                if (element != null)
                {
                    Autodesk.Revit.DB.CodeChecking.Storage.Label ccLabel = storageDocument.LabelsManager.GetLabel(element);
                    if (ccLabel != null)
                    {
                        Autodesk.Revit.DB.BuiltInCategory category = (Autodesk.Revit.DB.BuiltInCategory)element.Category.Id.IntegerValue;
                        StructuralAssetClass material = ccLabel.Material;
                        Autodesk.Revit.DB.ExtensibleStorage.Framework.SchemaClass label  = EngineData.ReadElementLabel(category, material, ccLabel, data);
                        Autodesk.Revit.DB.ExtensibleStorage.Framework.SchemaClass result = EngineData.CreateElementResult(category, material);

                        ObjectDataBase         objectData       = new ObjectDataBase(elemStatus.Item1, category, material, label);
                        List <SectionDataBase> listSectionsData = new List <SectionDataBase>();
                        List <CalcPoint>       listCalcPoints   = EngineData.CreateCalcPointsForElement(data, parameters, elemStatus.Item1);
                        foreach (CalcPoint p in listCalcPoints)
                        {
                            SectionDataBase sectBase = new SectionDataBase(p, objectData);
                            SectionDataBase sectData = EngineData.CreateSectionData(sectBase);

                            listSectionsData.Add(sectData);
                        }

                        ElementDataBase elemBase = new ElementDataBase(result, listCalcPoints, listSectionsData, elemStatus.Item2, data.Document, objectData);
                        ElementDataBase elemData = EngineData.CreateElementData(elemBase);

                        listElementData.Add(elemData);
                    }
                }
            }

            return(listElementData);
        }
Exemplo n.º 9
0
        private List <ForceType> GetForceTypes(Autodesk.Revit.DB.CodeChecking.ServiceData data, IEnumerable <ElementId> elementsIds)
        {
            List <ForceType> forceTypes = new List <ForceType>();

            foreach (ElementId elementId in elementsIds)
            {
                Tuple <Label, CalculationParameter, BuiltInCategory, Element> elementsInternalData = GetElementInternalData(data, elementId);
                BuiltInCategory category = elementsInternalData.Item3;
                Label           ccLabel  = elementsInternalData.Item1;

                switch (category)
                {
                default:
                    break;

                case Autodesk.Revit.DB.BuiltInCategory.OST_ColumnAnalytical:
                {
                    LabelColumn label = ReadElementLabel(category, ccLabel.Material, ccLabel, data) as LabelColumn;
                    if (label != null)
                    {
                        forceTypes = label.EnabledInternalForces.Select(s => s.GetForceType()).ToList();
                    }
                    break;
                }

                case Autodesk.Revit.DB.BuiltInCategory.OST_BeamAnalytical:
                {
                    LabelBeam label = ReadElementLabel(category, ccLabel.Material, ccLabel, data) as LabelBeam;
                    if (label != null)
                    {
                        forceTypes = label.EnabledInternalForces.Select(s => s.GetForceType()).ToList();
                    }
                    break;
                }
                }
            }
            return(forceTypes);
        }
Exemplo n.º 10
0
        /// <summary>
        /// Reads calculation parameters from revit data base.
        /// </summary>
        /// <param name="data">Acces to cref="ServiceData".</param>
        /// <returns>User calculation parameters schema object.</returns>
        public Autodesk.Revit.DB.ExtensibleStorage.Framework.SchemaClass ReadCalculationParameter(Autodesk.Revit.DB.CodeChecking.ServiceData data)
        {
            Autodesk.Revit.DB.CodeChecking.Storage.StorageService  service         = Autodesk.Revit.DB.CodeChecking.Storage.StorageService.GetStorageService();
            Autodesk.Revit.DB.CodeChecking.Storage.StorageDocument storageDocument = service.GetStorageDocument(data.Document);
            CalculationParameter calculationParameter = storageDocument.CalculationParamsManager.CalculationParams.GetEntity <CalculationParameter>(data.Document);

            return(calculationParameter);
        }
Exemplo n.º 11
0
        private List <ForceType> GetForceTypes(Autodesk.Revit.DB.CodeChecking.ServiceData data, IEnumerable <ElementId> elementsIds)
        {
            List <ForceType> forceTypes = new List <ForceType>();

            foreach (ElementId elementId in elementsIds)
            {
                Tuple <Label, CalculationParameter, BuiltInCategory, Element> elementsInternalData = GetElementInternalData(data, elementId);
                BuiltInCategory category = elementsInternalData.Item3;
                Label           ccLabel  = elementsInternalData.Item1;

                switch (category)
                {
                default:
                    break;

                case Autodesk.Revit.DB.BuiltInCategory.OST_ColumnAnalytical:
                {
                    LabelColumn label = ReadElementLabel(category, ccLabel.Material, ccLabel, data) as LabelColumn;
                    if (label != null)
                    {
                        forceTypes = label.EnabledInternalForces.Select(s => s.GetForceType()).ToList();
                    }
                    break;
                }

                case Autodesk.Revit.DB.BuiltInCategory.OST_BeamAnalytical:
                {
                    LabelBeam label = ReadElementLabel(category, ccLabel.Material, ccLabel, data) as LabelBeam;
                    if (label != null)
                    {
                        forceTypes = label.EnabledInternalForces.Select(s => s.GetForceType()).ToList();
                    }
                    break;
                }

                /// <structural_toolkit_2015>
                case Autodesk.Revit.DB.BuiltInCategory.OST_FloorAnalytical:
                case Autodesk.Revit.DB.BuiltInCategory.OST_FoundationSlabAnalytical:
                {
                    LabelFloor label = ReadElementLabel(category, ccLabel.Material, ccLabel, data) as LabelFloor;
                    if (label != null)
                    {
                        if (label.EnabledInternalForces.Contains(EnabledInternalForces.MY))
                        {
                            forceTypes.Add(ForceType.Mxx);
                            forceTypes.Add(ForceType.Myy);
                        }
                        if (label.EnabledInternalForces.Contains(EnabledInternalForces.FX))
                        {
                            forceTypes.Add(ForceType.Fyy);
                            forceTypes.Add(ForceType.Fxx);
                        }
                    }
                    break;
                }

                case Autodesk.Revit.DB.BuiltInCategory.OST_WallAnalytical:
                {
                    LabelWall label = ReadElementLabel(category, ccLabel.Material, ccLabel, data) as LabelWall;
                    if (label != null)
                    {
                        if (label.EnabledInternalForces.Contains(EnabledInternalForces.FX))
                        {
                            forceTypes.Add(ForceType.Fyy);
                            forceTypes.Add(ForceType.Fxx);
                        }
                        if (label.EnabledInternalForces.Contains(EnabledInternalForces.MY))
                        {
                            forceTypes.Add(ForceType.Mxx);
                            forceTypes.Add(ForceType.Myy);
                        }
                    }
                    break;
                }
                    /// </structural_toolkit_2015>
                }
            }
            return(forceTypes);
        }
Exemplo n.º 12
0
 /// <summary>
 /// Gets number of available threads or processors. user could switch off parallel calculation by returning value 1.
 /// </summary>
 /// <param name="data">Service data.</param>
 /// <returns>Number of threads</returns>
 public int GetNumberOfThreads(Autodesk.Revit.DB.CodeChecking.ServiceData data)
 {
     return(Environment.ProcessorCount);
 }
Exemplo n.º 13
0
        private Tuple <Label, CalculationParameter, BuiltInCategory, Element> GetElementInternalData(Autodesk.Revit.DB.CodeChecking.ServiceData data, ElementId elementId)
        {
            Element              element              = data.Document.GetElement(elementId);
            BuiltInCategory      category             = Autodesk.Revit.DB.CodeChecking.Tools.GetCategoryOfElement(element);
            StorageDocument      storageDocument      = Autodesk.Revit.DB.CodeChecking.Storage.StorageService.GetStorageService().GetStorageDocument(data.Document);
            CalculationParameter calculationParameter = storageDocument.CalculationParamsManager.CalculationParams.GetEntity <CalculationParameter>(data.Document);
            Label ccLabel = storageDocument.LabelsManager.GetLabel(element);

            return(new Tuple <Label, CalculationParameter, BuiltInCategory, Element>(ccLabel, calculationParameter, category, element));
        }
Exemplo n.º 14
0
        /// <summary>
        /// Gives possibility to write data to Revit data base.
        /// </summary>
        /// <param name="listElementData">List of user element objects.</param>
        /// <param name="parameters">User common parameters.</param>
        /// <param name="data">Acces to cref="ServiceData".</param>
        public void SaveToRevitDB(List <ObjectDataBase> listElementData, CommonParametersBase parameters, Autodesk.Revit.DB.CodeChecking.ServiceData data)
        {
            Autodesk.Revit.DB.ResultsBuilder.Storage.ResultsPackageBuilder builder = Autodesk.Revit.DB.CodeChecking.Storage.StorageService.GetStorageService().GetStorageDocument(data.Document).CalculationParamsManager.CalculationParams.GetOutputResultPackageBuilder(Server.Server.ID);
            ForceResultsWriter resultsWriter = new ForceResultsWriter(data.Document, builder, Autodesk.Revit.DB.ResultsBuilder.UnitsSystem.Metric);

            foreach (ObjectDataBase objectDataBase in listElementData)
            {
                ElementDataBase elementDataBase = objectDataBase as ElementDataBase;

                switch (elementDataBase.Category)
                {
                default:
                    break;

                case Autodesk.Revit.DB.BuiltInCategory.OST_ColumnAnalytical:
                case Autodesk.Revit.DB.BuiltInCategory.OST_BeamAnalytical:
                {
                    //TBD - RB doesn't support relative coordinates as input
                    //Begin mod
                    //IList<double> vx = (from sec in elementDataBase.ListSectionData select (sec as LinearSection).GetCalcResultsInPt()[ResultTypeLinear.X_Rel ]).ToList();
                    bool isListForces = true;
                    foreach (LinearSection sec in elementDataBase.ListSectionData)
                    {
                        if (sec.ListInternalForces == null || sec.ListInternalForces.Count == 0)
                        {
                            isListForces = false;
                            break;
                        }
                    }
                    if (isListForces)
                    {
                        IList <double> xCoordinates = (from sec in elementDataBase.ListSectionData select(sec as LinearSection).GetCalcResultsInPoint()[ResultTypeLinear.X]).ToList();
                        //End Mod
                        resultsWriter.SetMeasurementForElement(elementDataBase.ElementId, AxisDirection.X, xCoordinates);

                        ResultTypeLinear[] resultTypesLinear = new ResultTypeLinear[] { ResultTypeLinear.Abottom, ResultTypeLinear.Atop, ResultTypeLinear.Aleft, ResultTypeLinear.Aright };
                        foreach (ResultTypeLinear forceType in resultTypesLinear)
                        {
                            ICollection <double> valuesInPoints = (from LinearSection section in elementDataBase.ListSectionData select section.GetCalcResultsInPoint()[forceType]).ToList();
                            resultsWriter.AddResultsForElement(elementDataBase.ElementId, forceType.GetResultType(), valuesInPoints);
                        }
                    }
                }
                break;
                }
            }

            resultsWriter.StoreResultsInResultsBuilder("RCCalculationsResults");
            //builder.Finish();
        }
Exemplo n.º 15
0
        /// <summary>
        /// Gives possibility to read data from Revit data base and puts them into user element's objects and into user section's objects and into user common parameters.
        /// </summary>
        /// <param name="listElementData">List of user element objects.</param>
        /// <param name="parameters">User common parameters.</param>
        /// <param name="data">Acces to cref="ServiceData".</param>
        public void ReadFromRevitDB(List <ObjectDataBase> listElementData, CommonParametersBase parameters, Autodesk.Revit.DB.CodeChecking.ServiceData data)
        {
            // read additional information from Revit data and store them in user objects derived from ElementDataBase and listed in listElementData

            Autodesk.Revit.DB.CodeChecking.NotificationService.ProgressStart(Resources.ResourceManager.GetString("ReadingGeometry"), listElementData.Count);
            ElementAnalyser elementAnalyser = new ElementAnalyser(GetInputDataUnitSystem());

            int step = 0;

            foreach (ObjectDataBase elemData in listElementData)
            {
                Element element = data.Document.GetElement(elemData.ElementId);
                if (element != null)
                {
                    switch (elemData.Category)
                    {
                    default:
                        break;

                    case Autodesk.Revit.DB.BuiltInCategory.OST_ColumnAnalytical:
                    {
                        ColumnElement elem = elemData as ColumnElement;
                        if (elem != null && !elem.Status.IsError())
                        {
                            elem.Info = elementAnalyser.Analyse(element);
                            if (elem.Info.Material.Characteristics.YoungModulus.X < Double.Epsilon)
                            {
                                elem.Status.AddError(Resources.ResourceManager.GetString("ErrYoungModulus"));
                            }

                            MaterialConcreteCharacteristics concrete = (MaterialConcreteCharacteristics)elem.Info.Material.Characteristics.Specific;
                            if (concrete == null || concrete.Compression < Double.Epsilon)
                            {
                                elem.Status.AddError(Resources.ResourceManager.GetString("ErrConcreteCompression"));
                            }

                            foreach (SectionDataBase sectionDataBase in elem.ListSectionData)
                            {
                                ColumnSection sec = sectionDataBase as ColumnSection;
                                if (sec != null)
                                {
                                    sec.Info = elem.Info;
                                }
                            }
                        }
                        break;
                    }

                    case Autodesk.Revit.DB.BuiltInCategory.OST_BeamAnalytical:
                    {
                        BeamElement elem = elemData as BeamElement;
                        if (elem != null && !elem.Status.IsError())
                        {
                            elementAnalyser.TSectionAnalysis = false;
                            LabelBeam labelBeam = elem.Label as LabelBeam;
                            if (labelBeam != null)
                            {
                                elementAnalyser.TSectionAnalysis = labelBeam.SlabBeamInteraction == BeamSectionType.WithSlabBeamInteraction;
                            }

                            elem.Info = elementAnalyser.Analyse(element);
                            if (elem.Info.Material.Characteristics.YoungModulus.X < Double.Epsilon)
                            {
                                elem.Status.AddError(Resources.ResourceManager.GetString("ErrYoungModulus"));
                            }

                            MaterialConcreteCharacteristics concrete = (MaterialConcreteCharacteristics)elem.Info.Material.Characteristics.Specific;
                            if (concrete == null || concrete.Compression < Double.Epsilon)
                            {
                                elem.Status.AddError(Resources.ResourceManager.GetString("ErrConcreteCompression"));
                            }

                            foreach (SectionDataBase sectionDataBase in elem.ListSectionData)
                            {
                                BeamSection sec = sectionDataBase as BeamSection;
                                if (sec != null)
                                {
                                    sec.Info = elem.Info;
                                }
                            }
                        }
                        break;
                    }
                    }
                }
                Autodesk.Revit.DB.CodeChecking.NotificationService.ProgressStep(string.Format("{0:d}%", ++step * 100 / listElementData.Count));
                if (NotificationService.ProgressBreakInvoked())
                {
                    break;
                }
            }
        }
Exemplo n.º 16
0
        /// </structural_toolkit_2015>

        /// <summary>
        /// Read from Revit parameters common for all selected elements and stores them in cref="CommonParametersBase".
        /// </summary>
        /// <param name="listElementStatus">List identyficators of elements with result status.</param>
        /// <param name="server">Acces to cref="Server".</param>
        /// <param name="data">Acces to cref="ServiceData".</param>
        /// <returns>Common parameters.</returns>
        protected CommonParametersBase ReadCommonParameters(List <Tuple <ElementId, ResultStatus> > listElementStatus, Server.Server server, Autodesk.Revit.DB.CodeChecking.ServiceData data)
        {
            Autodesk.Revit.DB.CodeChecking.Storage.StorageService  service         = Autodesk.Revit.DB.CodeChecking.Storage.StorageService.GetStorageService();
            Autodesk.Revit.DB.CodeChecking.Storage.StorageDocument storageDocument = service.GetStorageDocument(data.Document);

            Guid activePackageId = storageDocument.CalculationParamsManager.CalculationParams.GetInputResultPackageId(server.GetServerId());

            Autodesk.Revit.DB.ExtensibleStorage.Framework.SchemaClass calcParams = EngineData.ReadCalculationParameter(data);

            List <ElementId> listCombinationId = new List <ElementId>();

            if (server.LoadCasesAndCombinationsSupport())
            {
                listCombinationId = storageDocument.CalculationParamsManager.CalculationParams.GetLoadCasesAndCombinations(Server.Server.ID);
            }

            CommonParametersBase parameBase = new CommonParametersBase(listElementStatus, listCombinationId, activePackageId, calcParams);
            CommonParametersBase parameters = EngineData.CreateCommonParameters(data, parameBase);

            return(parameters);
        }
Exemplo n.º 17
0
        /// <summary>
        /// Reads parameters of user element label.
        /// </summary>
        /// <param name="category">Category of the element.</param>
        /// <param name="material">Material of the element.</param>
        /// <param name="label">Acces to the Revit storage with labels."</param>
        /// <param name="data">Acces to cref="ServiceData".</param>
        /// <returns>User label of the element.</returns>
        public Autodesk.Revit.DB.ExtensibleStorage.Framework.SchemaClass ReadElementLabel(Autodesk.Revit.DB.BuiltInCategory category, Autodesk.Revit.DB.StructuralAssetClass material, Autodesk.Revit.DB.CodeChecking.Storage.Label label, Autodesk.Revit.DB.CodeChecking.ServiceData data)
        {
            if (label != null)
            {
                switch (material)
                {
                case StructuralAssetClass.Concrete:
                    switch (category)
                    {
                    default:
                        break;

                    case Autodesk.Revit.DB.BuiltInCategory.OST_ColumnAnalytical: return(label.GetEntity <LabelColumn>(data.Document));

                    case Autodesk.Revit.DB.BuiltInCategory.OST_BeamAnalytical: return(label.GetEntity <LabelBeam>(data.Document));
                    }
                    break;

                case StructuralAssetClass.Metal:
                    break;
                }
            }

            return(null);
        }
Exemplo n.º 18
0
        /// <summary>
        /// Reads from Revit information about selected elements, next Calculates the list of elements, at the end saves calculation results in Revit Data Base.
        /// </summary>
        /// <param name="listElementStatus">List identyficators of elements with result status.</param>
        /// <param name="server">Acces to cref="Server".</param>
        /// <param name="data">Acces to cref="ServiceData".</param>
        protected void CalculateSetOfElements(List <Tuple <ElementId, ResultStatus> > listElementStatus, Server.Server server, Autodesk.Revit.DB.CodeChecking.ServiceData data)
        {
            // reading from Revit Api
            CommonParametersBase  parameters      = ReadCommonParameters(listElementStatus, server, data);
            List <ObjectDataBase> listElementData = ReadListElementData(data, listElementStatus, parameters);

            if (NotificationService.ProgressBreakInvoked() == false)
            {
                EngineData.ReadFromRevitDB(listElementData, parameters, data);
            }

            int maxNumberOfThreads = EngineData.GetNumberOfThreads(data);

            if (maxNumberOfThreads < 1)
            {
                maxNumberOfThreads = 1;
            }

            // pure calculation (without any connection with Revit api)
            List <ObjectDataBase> listElementFiltered = EngineData.FilterElementForCalculation(listElementData);

            if (NotificationService.ProgressBreakInvoked() == false)
            {
                /// <structural_toolkit_2015>
                CalculateElementList(listElementFiltered, parameters, maxNumberOfThreads, server);
            }
            /// </structural_toolkit_2015>

            // writing to Revit Api
            if (NotificationService.ProgressBreakInvoked() == false)
            {
                SaveListElementData(data, listElementData);
                EngineData.SaveToRevitDB(listElementData, parameters, data);
            }
        }
Exemplo n.º 19
0
        /// <summary>
        /// Reads from Revit selected elements identificators and collect in the list only that which has apprppriate label, material and category.
        /// </summary>
        /// <param name="server">Acces to cref="Server".</param>
        /// <param name="data">Acces to cref="ServiceData".</param>
        /// <returns>List identyficators of elements with result status.</returns>
        protected List <Tuple <ElementId, ResultStatus> > ReadListElementIdWithStatus(Server.Server server, Autodesk.Revit.DB.CodeChecking.ServiceData data)
        {
            Autodesk.Revit.DB.CodeChecking.Storage.StorageService  service         = Autodesk.Revit.DB.CodeChecking.Storage.StorageService.GetStorageService();
            Autodesk.Revit.DB.CodeChecking.Storage.StorageDocument storageDocument = service.GetStorageDocument(data.Document);
            Guid activePackageId = storageDocument.CalculationParamsManager.CalculationParams.GetInputResultPackageId(server.GetServerId());

            List <Tuple <ElementId, ResultStatus> > listElementId = new List <Tuple <ElementId, ResultStatus> >();

            foreach (Element element in data.Selection)
            {
                Autodesk.Revit.DB.CodeChecking.Storage.Label ccLabel = storageDocument.LabelsManager.GetLabel(element);
                if (ccLabel != null)
                {
                    Autodesk.Revit.DB.BuiltInCategory category = (Autodesk.Revit.DB.BuiltInCategory)element.Category.Id.IntegerValue;
                    StructuralAssetClass material = ccLabel.Material;

                    if (server.GetSupportedMaterials().Contains(material) &&
                        server.GetSupportedCategories(material).Contains(category))
                    {
                        ElementId id = new ElementId(element.Id.IntegerValue);

                        SchemaClass  label  = EngineData.ReadElementLabel(category, material, ccLabel, data);
                        ResultStatus status = new Autodesk.Revit.DB.CodeChecking.Storage.ResultStatus(Server.Server.ID, activePackageId);
                        EngineData.VerifyElementLabel(category, material, label, ref status);

                        listElementId.Add(new Tuple <ElementId, ResultStatus>(id, status));
                    }
                }
            }

            return(listElementId);
        }
Exemplo n.º 20
0
        /// <summary>
        /// Saves in Revit the result object of an element.
        /// </summary>
        /// <param name="elementId">Identificator of an element.</param>
        /// <param name="resultSchema">Result object.</param>
        /// <param name="status">Status of element's results.</param>
        /// <param name="data">Acces to cref="ServiceData".</param>
        protected void SaveElementResult(ElementId elementId, Autodesk.Revit.DB.ExtensibleStorage.Framework.SchemaClass resultSchema, Autodesk.Revit.DB.CodeChecking.Storage.ResultStatus status, Autodesk.Revit.DB.CodeChecking.ServiceData data)
        {
            Autodesk.Revit.DB.CodeChecking.Storage.StorageService  service         = Autodesk.Revit.DB.CodeChecking.Storage.StorageService.GetStorageService();
            Autodesk.Revit.DB.CodeChecking.Storage.StorageDocument storageDocument = service.GetStorageDocument(data.Document);

            Element element = data.Document.GetElement(elementId);

            if (resultSchema != null)
            {
                storageDocument.ResultsManager.SetResult(resultSchema.GetEntity(), element, status, true);
            }
        }