/// <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(); }
/// <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; } } }
/// <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); }
/// <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); }
/// <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) { }
/// <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()); }