コード例 #1
0
ファイル: EngineData.cs プロジェクト: Jamesbdsas/RevitSDK
        /// <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();
        }
コード例 #2
0
ファイル: EngineData.cs プロジェクト: Jamesbdsas/RevitSDK
        /// <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;
                }
            }
        }
コード例 #3
0
ファイル: EngineData.cs プロジェクト: Jamesbdsas/RevitSDK
        /// <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);
        }
コード例 #4
0
ファイル: EngineData.cs プロジェクト: Jamesbdsas/RevitSDK
        /// <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);
                forceCalculationDataDescriptor.AddBendingForceTypes(new ForceType[] { ForceType.Ux, ForceType.Uy, ForceType.Uz });
                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);
        }
コード例 #5
0
 /// <summary>
 /// Initializes a new instance of user's object with common parameters.
 /// </summary>
 /// <param name="data">Acces to cref="ServiceData"</param>
 /// <param name="param">Instance of base common parameters object with predefined parameters to copy.</param>
 public CommonParameters(Autodesk.Revit.DB.CodeChecking.ServiceData data, CommonParametersBase param)
     : base(param)
 {
 }
コード例 #6
0
        /// <structural_toolkit_2015>

        /// <summary>
        /// Creates user imlementation of cref="ICalculationScenario" which consists list of calculation objects cref="ICalculatinObject".
        /// </summary>
        /// <param name="parameters">User common parameters.</param>
        /// <returns>The new instance of cref="ICalculationScenario"</returns>
        public ICalculationScenario CreateCalculationScenario(CommonParametersBase parameters)
        {
            return(new CalculationScenario());
        }