public ResultSet1D FrameResultSet1dToSpeckle(string elementName) { List <Result1D> results = new List <Result1D>(); SetLoadCombinationsForResults(); // Reference variables for ETABS API int numberOfResults = 0; string[] obj, elm, loadCase, stepType; obj = elm = loadCase = stepType = new string[1]; double[] objSta, elmSta, stepNum, p, v2, v3, t, m2, m3; objSta = elmSta = stepNum = p = v2 = v3 = t = m2 = m3 = new double[1]; Model.Results.FrameForce(elementName, eItemTypeElm.ObjectElm, ref numberOfResults, ref obj, ref objSta, ref elm, ref elmSta, ref loadCase, ref stepType, ref stepNum, ref p, ref v2, ref v3, ref t, ref m2, ref m3); // Value used to normalized output station of forces between 0 and 1 var lengthOf1dElement = objSta.Max(); for (int i = 0; i < numberOfResults; i++) { Result1D result = new Result1D() { element = FrameToSpeckle(elementName), position = (float)(objSta[i] / lengthOf1dElement), permutation = loadCase[i], dispX = 0, // values eventually populated by element.Node.{displacements} dispY = 0, // values eventually populated by element.Node.{displacements} dispZ = 0, // values eventually populated by element.Node.{displacements} rotXX = 0, // values eventually populated by element.Node.{displacements} rotYY = 0, // values eventually populated by element.Node.{displacements} rotZZ = 0, // values eventually populated by element.Node.{displacements} forceX = (float)v3[i], forceY = (float)v2[i], forceZ = (float)p[i], momentXX = (float)m3[i], momentYY = (float)m2[i], momentZZ = (float)t[i], axialStress = 0, // values eventually populated when element1d.section values are available shearStressY = 0, // values eventually populated when element1d.section values are available shearStressZ = 0, // values eventually populated when element1d.section values are available bendingStressYPos = 0, // values eventually populated when element1d.section values are available bendingStressYNeg = 0, // values eventually populated when element1d.section values are available bendingStressZPos = 0, // values eventually populated when element1d.section values are available bendingStressZNeg = 0, // values eventually populated when element1d.section values are available combinedStressMax = 0, // values eventually populated when element1d.section values are available combinedStressMin = 0 // values eventually populated when element1d.section values are available }; results.Add(result); } return(new ResultSet1D() { results1D = results }); }
/// <summary> /// Display the result /// 1. Create a new sheet /// 2. Create two range to display the key and value /// 3. Create a chart based the range object /// </summary> private void Display1DResult(Result1D result1d) { if (result1d.Keys.Count > 0) { Excel.Worksheet resultSheet = this.Sheets.Add(missing, missing, missing, missing) as Excel.Worksheet; Excel.Range KeyColumnHead = resultSheet.get_Range("A1", missing); KeyColumnHead.Value2 = result1d.KeyLabel; Excel.Range ValueColumnHead = resultSheet.get_Range("B1", missing); ValueColumnHead.Value2 = result1d.ValueLabel; Excel.Range headRange = resultSheet.get_Range("A1", "B1"); headRange.Style = headStyle; headRange.EntireColumn.AutoFit( ); //Bind the data float[,] keyvalues = new float[result1d.Keys.Count, 2]; for (int i = 0; i < result1d.Keys.Count; i++) { keyvalues[i, 0] = result1d.Keys[i]; keyvalues[i, 1] = result1d.Values[i]; } string rangeKey = string.Format("A2:A{0}", result1d.Keys.Count + 1); string rangeValue = string.Format("B2:B{0}", result1d.Values.Count + 1); Excel.Range dataRange = resultSheet.get_Range(rangeKey, rangeValue); dataRange.Value2 = keyvalues; dataRange.Style = dataStyle; dataRange.EntireColumn.AutoFit( ); //Add a Chart for the selected data. Excel._Chart oChart = (Excel._Chart) this.Charts.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing); //Use the ChartWizard to create a new chart from the selected data. Excel.Range oResizeRange = resultSheet.get_Range(rangeValue, missing).get_Resize( result1d.Keys.Count, 1); oChart.ChartWizard(oResizeRange, Excel.XlChartType.xlLine, Type.Missing, Excel.XlRowCol.xlColumns, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); oChart.Visible = Microsoft.Office.Interop.Excel.XlSheetVisibility.xlSheetHidden; //Configure the format of chart ConfigureExcelChartFormat(resultSheet.Name, result1d.ValueLabel, oChart); //Position of the chart resultSheet.Shapes.Item(1).Top = (float)(double)oResizeRange.Top; resultSheet.Shapes.Item(1).Left = (float)(double)oResizeRange.Left + (float)(double)oResizeRange.Width; } }
public ResultSet1D SpandrelResultSet1dToSpeckle(string elementName) { List <Result1D> results = new List <Result1D>(); SetLoadCombinationsForResults(); // Reference variables for ETABS API int numberOfResults = 0; string[] storyName, spandrelName, loadCase, location; storyName = spandrelName = loadCase = location = new string[1]; double[] p, v2, v3, t, m2, m3; p = v2 = v3 = t = m2 = m3 = new double[1]; Model.Results.SpandrelForce(ref numberOfResults, ref storyName, ref spandrelName, ref loadCase, ref location, ref p, ref v2, ref v3, ref t, ref m2, ref m3); for (int i = 0; i < numberOfResults; i++) { if (spandrelName[i] == elementName) { Result1D result = new Result1D() { element = new Element1D() { name = elementName }, // simple new Element1D until conversion class for spandrels is created position = 0, description = "Location: " + location[i] + " - " + storyName[i], permutation = loadCase[i], dispX = 0, // values eventually populated by element.Node.{displacements} dispY = 0, // values eventually populated by element.Node.{displacements} dispZ = 0, // values eventually populated by element.Node.{displacements} rotXX = 0, // values eventually populated by element.Node.{displacements} rotYY = 0, // values eventually populated by element.Node.{displacements} rotZZ = 0, // values eventually populated by element.Node.{displacements} forceX = (float)v3[i], forceY = (float)v2[i], forceZ = (float)p[i], momentXX = (float)m3[i], momentYY = (float)m2[i], momentZZ = (float)t[i], axialStress = 0, // values eventually populated when element1d.section values are available shearStressY = 0, // values eventually populated when element1d.section values are available shearStressZ = 0, // values eventually populated when element1d.section values are available bendingStressYPos = 0, // values eventually populated when element1d.section values are available bendingStressYNeg = 0, // values eventually populated when element1d.section values are available bendingStressZPos = 0, // values eventually populated when element1d.section values are available bendingStressZNeg = 0, // values eventually populated when element1d.section values are available combinedStressMax = 0, // values eventually populated when element1d.section values are available combinedStressMin = 0 // values eventually populated when element1d.section values are available }; results.Add(result); } } return(new ResultSet1D() { results1D = results }); }