| | classdef BeamAnalysisApp < matlab.apps.AppBase
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| | properties (Access = public)
|
| | UIFigure matlab.ui.Figure
|
| | MainGrid matlab.ui.container.GridLayout
|
| |
|
| |
|
| | InputPanel matlab.ui.container.Panel
|
| | DiagramPanel matlab.ui.container.Panel
|
| | ResultsPanel matlab.ui.container.Panel
|
| | EquationsPanel matlab.ui.container.Panel
|
| |
|
| |
|
| | UnitSwitch matlab.ui.control.Switch
|
| | EditFc matlab.ui.control.NumericEditField
|
| | EditFy matlab.ui.control.NumericEditField
|
| | EditEs matlab.ui.control.NumericEditField
|
| | EditBeta1 matlab.ui.control.NumericEditField
|
| | EditEpsCu matlab.ui.control.NumericEditField
|
| |
|
| |
|
| | EditB matlab.ui.control.NumericEditField
|
| | EditH matlab.ui.control.NumericEditField
|
| | EditD matlab.ui.control.NumericEditField
|
| |
|
| |
|
| | EditBars matlab.ui.control.NumericEditField
|
| | EditBarArea matlab.ui.control.NumericEditField
|
| |
|
| |
|
| | AxSection matlab.ui.control.UIAxes
|
| | AxStrain matlab.ui.control.UIAxes
|
| | AxStress matlab.ui.control.UIAxes
|
| | AxEquations matlab.ui.control.UIAxes
|
| |
|
| |
|
| | ResultsText matlab.ui.control.TextArea
|
| | end
|
| |
|
| | properties (Access = private)
|
| | Units struct
|
| |
|
| | Colors struct
|
| | end
|
| |
|
| | methods (Access = private)
|
| |
|
| | function updateApp(app, ~)
|
| |
|
| | is_imperial = strcmp(app.UnitSwitch.Value, 'Imperial');
|
| |
|
| | fc = app.EditFc.Value;
|
| | fy = app.EditFy.Value;
|
| | Es = app.EditEs.Value;
|
| | beta1 = app.EditBeta1.Value;
|
| | epsilon_cu = app.EditEpsCu.Value;
|
| | b = app.EditB.Value;
|
| | h = app.EditH.Value;
|
| | d = app.EditD.Value;
|
| | n_bars = app.EditBars.Value;
|
| | bar_A = app.EditBarArea.Value;
|
| | As = n_bars * bar_A;
|
| |
|
| |
|
| | if is_imperial
|
| | app.Units = struct('len', 'in', 'area', 'in2', 'force', 'lb', ...
|
| | 'stress', 'psi', 'moment', 'lb-in', 'moment_k', 'k-in', 'moment_alt', 'k-ft');
|
| | else
|
| | app.Units = struct('len', 'mm', 'area', 'mm2', 'force', 'N', ...
|
| | 'stress', 'MPa', 'moment', 'N-mm', 'moment_k', 'N-mm', 'moment_alt', 'kN-m');
|
| | end
|
| | u = app.Units;
|
| | clr = app.Colors;
|
| |
|
| |
|
| | T = As * fy;
|
| | a = (As * fy) / (0.85 * fc * b);
|
| | c = a / beta1;
|
| | epsilon_y = fy / Es;
|
| | epsilon_s = epsilon_cu * (d - c) / c;
|
| |
|
| | if epsilon_s >= epsilon_y
|
| | yield_check = true;
|
| | fs = fy;
|
| | else
|
| | yield_check = false;
|
| | fs = epsilon_s * Es;
|
| | end
|
| |
|
| | Mn = As * fs * (d - a/2);
|
| |
|
| | if is_imperial
|
| | Mn_disp = Mn / 12000;
|
| | T_disp = T / 1000;
|
| | Mn_k = Mn / 1000;
|
| | else
|
| | Mn_disp = Mn / 1e6;
|
| | T_disp = T / 1000;
|
| | Mn_k = Mn;
|
| | end
|
| |
|
| | if is_imperial
|
| | term1 = (3 * sqrt(fc) / fy) * b * d;
|
| | term2 = (200 / fy) * b * d;
|
| | else
|
| | term1 = (0.25 * sqrt(fc) / fy) * b * d;
|
| | term2 = (1.4 / fy) * b * d;
|
| | end
|
| | As_min = max(term1, term2);
|
| | As_check = As >= As_min;
|
| |
|
| |
|
| | ax = app.AxSection;
|
| | cla(ax); hold(ax, 'on');
|
| |
|
| |
|
| | rectangle(ax, 'Position', [0, 0, b, h], ...
|
| | 'FaceColor', clr.concrete, 'EdgeColor', clr.outline, 'LineWidth', 1.5);
|
| |
|
| |
|
| | patch(ax, [0, b, b, 0], [h, h, h-a, h-a], clr.compression, ...
|
| | 'EdgeColor', 'none', 'FaceAlpha', 0.6);
|
| |
|
| |
|
| | plot(ax, [0, b], [h-c, h-c], '--', 'Color', clr.neutral, 'LineWidth', 1.2);
|
| |
|
| |
|
| | bar_r = sqrt(bar_A/pi) * 0.7;
|
| | steel_y = h - d;
|
| | if n_bars == 1
|
| | cx = b/2;
|
| | else
|
| | cx = linspace(b*0.12, b*0.88, n_bars);
|
| | end
|
| | for i = 1:n_bars
|
| | rectangle(ax, 'Position', [cx(i)-bar_r, steel_y-bar_r, 2*bar_r, 2*bar_r], ...
|
| | 'FaceColor', clr.steel, 'EdgeColor', [0.1 0.1 0.1], 'Curvature', [1 1], 'LineWidth', 0.5);
|
| | end
|
| |
|
| |
|
| | xh = b + b*0.08;
|
| | plot(ax, [xh, xh], [0, h], 'k-', 'LineWidth', 0.8);
|
| | plot(ax, [b, xh+b*0.02], [0, 0], 'k-', 'LineWidth', 0.8);
|
| | plot(ax, [b, xh+b*0.02], [h, h], 'k-', 'LineWidth', 0.8);
|
| | text(ax, xh+b*0.04, h/2, sprintf('h=%.1f', h), 'FontSize', 9, 'FontName', 'Arial');
|
| |
|
| |
|
| | xd = b + b*0.22;
|
| | plot(ax, [xd, xd], [steel_y, h], 'Color', clr.dimension, 'LineWidth', 0.8);
|
| | text(ax, xd+b*0.04, (h+steel_y)/2, sprintf('d=%.1f', d), 'FontSize', 9, 'Color', clr.dimension, 'FontName', 'Arial');
|
| |
|
| |
|
| | xa = -b*0.08;
|
| | plot(ax, [xa, xa], [h-a, h], 'Color', clr.compression_line, 'LineWidth', 1.5);
|
| | text(ax, xa-b*0.15, h-a/2, sprintf('a=%.2f', a), 'FontSize', 9, 'Color', clr.compression_line, 'FontName', 'Arial');
|
| |
|
| |
|
| | text(ax, b/2, -h*0.06, sprintf('b=%.1f', b), 'HorizontalAlignment', 'center', 'FontSize', 9, 'FontName', 'Arial');
|
| |
|
| |
|
| | text(ax, b+b*0.04, h-c, sprintf('c=%.2f', c), 'FontSize', 8, 'Color', clr.neutral, 'FontName', 'Arial');
|
| |
|
| | axis(ax, 'equal');
|
| | ax.XLim = [-b*0.25, b*1.4];
|
| | ax.YLim = [-h*0.12, h*1.08];
|
| | ax.XTick = []; ax.YTick = [];
|
| | ax.XColor = 'none'; ax.YColor = 'none';
|
| | title(ax, 'Cross Section', 'FontWeight', 'bold', 'FontSize', 11, 'FontName', 'Arial');
|
| |
|
| |
|
| | ax = app.AxStrain;
|
| | cla(ax); hold(ax, 'on');
|
| |
|
| | strain_w = 0.4;
|
| |
|
| |
|
| | plot(ax, [0, 0], [0, h], 'Color', [0.7 0.7 0.7], 'LineWidth', 1);
|
| |
|
| |
|
| | x_top = epsilon_cu * strain_w / 0.003;
|
| | x_bot = epsilon_s * strain_w / 0.003;
|
| | patch(ax, [0, x_top, x_bot, 0], [h, h, steel_y, steel_y], clr.strain, ...
|
| | 'EdgeColor', clr.strain_edge, 'LineWidth', 1.2, 'FaceAlpha', 0.5);
|
| |
|
| |
|
| | plot(ax, [-0.05, strain_w*1.2], [h-c, h-c], '--', 'Color', clr.neutral, 'LineWidth', 1);
|
| | text(ax, -0.03, h-c, sprintf('c=%.2f', c), 'FontSize', 8, 'HorizontalAlignment', 'right', 'Color', clr.neutral, 'FontName', 'Arial');
|
| |
|
| |
|
| | text(ax, x_top+0.02, h, sprintf('ecu=%.4f', epsilon_cu), 'FontSize', 9, 'Color', clr.strain_edge, 'FontName', 'Arial');
|
| | text(ax, x_bot+0.02, steel_y, sprintf('es=%.5f', epsilon_s), 'FontSize', 9, 'Color', clr.strain_edge, 'FontName', 'Arial');
|
| |
|
| | ax.XLim = [-0.1, strain_w*1.5];
|
| | ax.YLim = [-h*0.12, h*1.08];
|
| | ax.XTick = []; ax.YTick = [];
|
| | ax.XColor = 'none'; ax.YColor = 'none';
|
| | title(ax, 'Strain Distribution', 'FontWeight', 'bold', 'FontSize', 11, 'FontName', 'Arial');
|
| |
|
| |
|
| | ax = app.AxStress;
|
| | cla(ax); hold(ax, 'on');
|
| |
|
| | stress_w = 0.5;
|
| |
|
| |
|
| | patch(ax, [0, stress_w, stress_w, 0], [h, h, h-a, h-a], clr.compression, ...
|
| | 'EdgeColor', clr.compression_line, 'LineWidth', 1.2, 'FaceAlpha', 0.7);
|
| | text(ax, stress_w/2, h-a/2, '0.85fc''', 'HorizontalAlignment', 'center', 'FontSize', 9, 'FontName', 'Arial');
|
| |
|
| |
|
| | quiver(ax, stress_w+0.05, h-a/2, 0.2, 0, 0, 'Color', clr.compression_line, 'LineWidth', 2, 'MaxHeadSize', 0.8);
|
| | text(ax, stress_w+0.28, h-a/2, sprintf('C=%.0f k', T_disp), 'FontSize', 9, 'Color', clr.compression_line, 'FontName', 'Arial');
|
| |
|
| |
|
| | plot(ax, [0, stress_w*0.3], [steel_y, steel_y], 'Color', clr.steel, 'LineWidth', 2);
|
| |
|
| |
|
| | quiver(ax, 0, steel_y, 0.25, 0, 0, 'Color', clr.tension, 'LineWidth', 2, 'MaxHeadSize', 0.8);
|
| | text(ax, 0.28, steel_y, sprintf('T=%.0f k', T_disp), 'FontSize', 9, 'Color', clr.tension, 'FontName', 'Arial');
|
| |
|
| |
|
| | plot(ax, [-0.05, stress_w+0.3], [h-c, h-c], '--', 'Color', clr.neutral, 'LineWidth', 1);
|
| |
|
| |
|
| | xa_arm = stress_w + 0.45;
|
| | plot(ax, [xa_arm, xa_arm], [h-a/2, steel_y], 'Color', clr.moment_arm, 'LineWidth', 1.5);
|
| | plot(ax, [xa_arm-0.02, xa_arm+0.02], [h-a/2, h-a/2], 'Color', clr.moment_arm, 'LineWidth', 1.5);
|
| | plot(ax, [xa_arm-0.02, xa_arm+0.02], [steel_y, steel_y], 'Color', clr.moment_arm, 'LineWidth', 1.5);
|
| | text(ax, xa_arm+0.03, (h-a/2+steel_y)/2, 'd-a/2', 'FontSize', 9, 'Color', clr.moment_arm, 'FontName', 'Arial');
|
| |
|
| | ax.XLim = [-0.1, stress_w+0.65];
|
| | ax.YLim = [-h*0.12, h*1.08];
|
| | ax.XTick = []; ax.YTick = [];
|
| | ax.XColor = 'none'; ax.YColor = 'none';
|
| | title(ax, 'Stress Block & Forces', 'FontWeight', 'bold', 'FontSize', 11, 'FontName', 'Arial');
|
| |
|
| |
|
| | ax = app.AxEquations;
|
| | cla(ax); hold(ax, 'on');
|
| | axis(ax, 'off');
|
| | ax.XLim = [0 1]; ax.YLim = [0 1];
|
| |
|
| | y = 0.92;
|
| | dy = 0.115;
|
| | fs = 10;
|
| |
|
| |
|
| | text(ax, 0.01, y, 'STEP-BY-STEP CALCULATIONS', 'FontWeight', 'bold', 'FontSize', 12, 'FontName', 'Arial');
|
| | y = y - dy*0.7;
|
| |
|
| |
|
| | eq1 = sprintf('$$A_s = n \\times A_{bar} = %.0f \\times %.3f = %.3f \\; \\mathrm{%s}$$', n_bars, bar_A, As, u.area);
|
| | text(ax, 0.01, y, eq1, 'Interpreter', 'latex', 'FontSize', fs);
|
| | y = y - dy*0.6;
|
| |
|
| | eq2 = sprintf('$$T = A_s \\cdot f_y = %.3f \\times %.0f = %.0f \\; \\mathrm{%s} \\;\\; (%.1f \\; \\mathrm{kips})$$', As, fy, T, u.force, T_disp);
|
| | text(ax, 0.01, y, eq2, 'Interpreter', 'latex', 'FontSize', fs);
|
| | y = y - dy;
|
| |
|
| |
|
| | eq3 = sprintf('$$a = \\frac{A_s f_y}{0.85 f''_c b} = \\frac{%.0f}{0.85 \\times %.0f \\times %.1f} = %.4f \\; \\mathrm{%s}$$', T, fc, b, a, u.len);
|
| | text(ax, 0.01, y, eq3, 'Interpreter', 'latex', 'FontSize', fs);
|
| | y = y - dy*0.6;
|
| |
|
| | eq4 = sprintf('$$c = \\frac{a}{\\beta_1} = \\frac{%.4f}{%.3f} = %.4f \\; \\mathrm{%s}$$', a, beta1, c, u.len);
|
| | text(ax, 0.01, y, eq4, 'Interpreter', 'latex', 'FontSize', fs);
|
| | y = y - dy;
|
| |
|
| |
|
| | eq5 = sprintf('$$\\varepsilon_y = \\frac{f_y}{E_s} = \\frac{%.0f}{%.0f} = %.6f$$', fy, Es, epsilon_y);
|
| | text(ax, 0.01, y, eq5, 'Interpreter', 'latex', 'FontSize', fs);
|
| |
|
| | eq6 = sprintf('$$\\varepsilon_s = \\left(\\frac{d-c}{c}\\right)\\varepsilon_{cu} = \\left(\\frac{%.2f-%.2f}{%.2f}\\right)(%.4f) = %.6f$$', d, c, c, epsilon_cu, epsilon_s);
|
| | text(ax, 0.45, y, eq6, 'Interpreter', 'latex', 'FontSize', fs);
|
| |
|
| | if yield_check
|
| | text(ax, 0.92, y, '[OK]', 'FontSize', 10, 'Color', clr.ok, 'FontWeight', 'bold', 'FontName', 'Arial');
|
| | else
|
| | text(ax, 0.92, y, '[NG]', 'FontSize', 10, 'Color', clr.ng, 'FontWeight', 'bold', 'FontName', 'Arial');
|
| | end
|
| | y = y - dy;
|
| |
|
| |
|
| | eq7 = sprintf('$$M_n = A_s f_y \\left(d - \\frac{a}{2}\\right) = %.0f \\left(%.2f - \\frac{%.4f}{2}\\right) = %.0f \\; \\mathrm{%s}$$', T, d, a, Mn_k, u.moment_k);
|
| | text(ax, 0.01, y, eq7, 'Interpreter', 'latex', 'FontSize', fs);
|
| | y = y - dy*0.6;
|
| |
|
| | result_txt = sprintf('Mn = %.1f %s', Mn_disp, u.moment_alt);
|
| | text(ax, 0.01, y, result_txt, 'FontSize', 13, 'Color', clr.result, 'FontWeight', 'bold', 'FontName', 'Arial');
|
| | y = y - dy;
|
| |
|
| |
|
| | if is_imperial
|
| | eq9 = sprintf('$$A_{s,min} = \\max\\left(\\frac{3\\sqrt{f''_c}}{f_y}b_wd,\\;\\frac{200}{f_y}b_wd\\right) = %.4f \\; \\mathrm{%s}$$', As_min, u.area);
|
| | else
|
| | eq9 = sprintf('$$A_{s,min} = \\max\\left(\\frac{0.25\\sqrt{f''_c}}{f_y}b_wd,\\;\\frac{1.4}{f_y}b_wd\\right) = %.1f \\; \\mathrm{%s}$$', As_min, u.area);
|
| | end
|
| | text(ax, 0.01, y, eq9, 'Interpreter', 'latex', 'FontSize', fs);
|
| |
|
| | if As_check
|
| | text(ax, 0.75, y, sprintf('As >= As,min [OK]'), 'FontSize', 10, 'Color', clr.ok, 'FontWeight', 'bold', 'FontName', 'Arial');
|
| | else
|
| | text(ax, 0.75, y, sprintf('As < As,min [NG]'), 'FontSize', 10, 'Color', clr.ng, 'FontWeight', 'bold', 'FontName', 'Arial');
|
| | end
|
| |
|
| |
|
| | if yield_check
|
| | yield_str = 'Yes (Steel Yields)';
|
| | else
|
| | yield_str = 'No (Steel Elastic)';
|
| | end
|
| |
|
| | if As_check
|
| | asmin_str = 'OK';
|
| | else
|
| | asmin_str = 'NOT OK';
|
| | end
|
| |
|
| | results_str = sprintf([...
|
| | 'RESULTS SUMMARY\n' ...
|
| | '================\n\n' ...
|
| | 'Steel Area:\n' ...
|
| | ' As = %.4f %s\n\n' ...
|
| | 'Forces:\n' ...
|
| | ' T = C = %.2f kips\n\n' ...
|
| | 'Geometry:\n' ...
|
| | ' a = %.4f %s\n' ...
|
| | ' c = %.4f %s\n\n' ...
|
| | 'Strain Check:\n' ...
|
| | ' ey = %.6f\n' ...
|
| | ' es = %.6f\n' ...
|
| | ' Yield: %s\n\n' ...
|
| | 'NOMINAL MOMENT:\n' ...
|
| | ' Mn = %.1f %s\n\n' ...
|
| | 'Min Steel Check:\n' ...
|
| | ' As,min = %.4f %s\n' ...
|
| | ' Status: %s'], ...
|
| | As, u.area, T_disp, a, u.len, c, u.len, ...
|
| | epsilon_y, epsilon_s, yield_str, ...
|
| | Mn_disp, u.moment_alt, As_min, u.area, asmin_str);
|
| |
|
| | app.ResultsText.Value = results_str;
|
| | end
|
| |
|
| | function switchUnits(app, ~)
|
| | if strcmp(app.UnitSwitch.Value, 'Imperial')
|
| | app.EditFc.Value = 4000;
|
| | app.EditFy.Value = 60000;
|
| | app.EditEs.Value = 29000000;
|
| | app.EditBeta1.Value = 0.85;
|
| | app.EditEpsCu.Value = 0.003;
|
| | app.EditB.Value = 12;
|
| | app.EditH.Value = 20;
|
| | app.EditD.Value = 17.5;
|
| | app.EditBars.Value = 4;
|
| | app.EditBarArea.Value = 0.79;
|
| | else
|
| | app.EditFc.Value = 20;
|
| | app.EditFy.Value = 420;
|
| | app.EditEs.Value = 200000;
|
| | app.EditBeta1.Value = 0.85;
|
| | app.EditEpsCu.Value = 0.003;
|
| | app.EditB.Value = 250;
|
| | app.EditH.Value = 565;
|
| | app.EditD.Value = 500;
|
| | app.EditBars.Value = 3;
|
| | app.EditBarArea.Value = 510;
|
| | end
|
| | updateApp(app);
|
| | end
|
| | end
|
| |
|
| | methods (Access = public)
|
| | function app = BeamAnalysisApp()
|
| | createComponents(app);
|
| | initializeColors(app);
|
| | updateApp(app);
|
| | registerApp(app, app.UIFigure);
|
| | if nargout == 0
|
| | clear app
|
| | end
|
| | end
|
| |
|
| | function delete(app)
|
| | delete(app.UIFigure);
|
| | end
|
| | end
|
| |
|
| | methods (Access = private)
|
| |
|
| | function initializeColors(app)
|
| |
|
| | app.Colors = struct(...
|
| | 'concrete', [0.88 0.88 0.86], ...
|
| | 'outline', [0.3 0.3 0.3], ...
|
| | 'compression', [0.85 0.55 0.55], ...
|
| | 'compression_line', [0.7 0.2 0.2], ...
|
| | 'tension', [0.2 0.4 0.7], ...
|
| | 'steel', [0.25 0.25 0.3], ...
|
| | 'neutral', [0.4 0.4 0.4], ...
|
| | 'dimension', [0.2 0.5 0.7], ...
|
| | 'strain', [0.7 0.85 0.95], ...
|
| | 'strain_edge', [0.2 0.4 0.6], ...
|
| | 'moment_arm', [0.2 0.6 0.3], ...
|
| | 'result', [0.1 0.3 0.6], ...
|
| | 'ok', [0.1 0.5 0.2], ...
|
| | 'ng', [0.7 0.15 0.15], ...
|
| | 'bg', [0.97 0.97 0.97], ...
|
| | 'panel_bg', [1 1 1]);
|
| | end
|
| |
|
| | function createComponents(app)
|
| |
|
| | app.UIFigure = uifigure('Visible', 'off');
|
| | app.UIFigure.Position = [80 60 1400 800];
|
| | app.UIFigure.Name = 'Beam Analysis - Nominal Moment Strength (ACI 318)';
|
| | app.UIFigure.Color = [0.94 0.94 0.94];
|
| | app.UIFigure.Resize = 'on';
|
| |
|
| |
|
| | app.MainGrid = uigridlayout(app.UIFigure);
|
| | app.MainGrid.ColumnWidth = {'0.18x', '0.82x'};
|
| | app.MainGrid.RowHeight = {'1x'};
|
| | app.MainGrid.Padding = [8 8 8 8];
|
| | app.MainGrid.ColumnSpacing = 8;
|
| |
|
| |
|
| | app.InputPanel = uipanel(app.MainGrid);
|
| | app.InputPanel.Layout.Row = 1;
|
| | app.InputPanel.Layout.Column = 1;
|
| | app.InputPanel.Title = 'INPUT PARAMETERS';
|
| | app.InputPanel.FontWeight = 'bold';
|
| | app.InputPanel.FontSize = 11;
|
| | app.InputPanel.BackgroundColor = [1 1 1];
|
| |
|
| | inpGrid = uigridlayout(app.InputPanel);
|
| | inpGrid.ColumnWidth = {'1.3x', '1x'};
|
| | inpGrid.RowHeight = repmat({'fit'}, 1, 16);
|
| | inpGrid.RowSpacing = 4;
|
| | inpGrid.Padding = [8 8 8 8];
|
| |
|
| |
|
| | lbl = uilabel(inpGrid); lbl.Text = 'Unit System'; lbl.FontWeight = 'bold';
|
| | app.UnitSwitch = uiswitch(inpGrid, 'slider');
|
| | app.UnitSwitch.Items = {'Imperial', 'SI'};
|
| | app.UnitSwitch.ValueChangedFcn = createCallbackFcn(app, @switchUnits, true);
|
| |
|
| |
|
| | lbl = uilabel(inpGrid); lbl.Text = 'MATERIALS'; lbl.FontWeight = 'bold'; lbl.FontColor = [0.3 0.3 0.5];
|
| | uilabel(inpGrid);
|
| |
|
| |
|
| | lbl = uilabel(inpGrid); lbl.Text = 'fc'' (Concrete)';
|
| | app.EditFc = uieditfield(inpGrid, 'numeric');
|
| | app.EditFc.ValueChangedFcn = createCallbackFcn(app, @updateApp, true);
|
| |
|
| |
|
| | lbl = uilabel(inpGrid); lbl.Text = 'fy (Steel Yield)';
|
| | app.EditFy = uieditfield(inpGrid, 'numeric');
|
| | app.EditFy.ValueChangedFcn = createCallbackFcn(app, @updateApp, true);
|
| |
|
| |
|
| | lbl = uilabel(inpGrid); lbl.Text = 'Es (Modulus)';
|
| | app.EditEs = uieditfield(inpGrid, 'numeric');
|
| | app.EditEs.ValueChangedFcn = createCallbackFcn(app, @updateApp, true);
|
| |
|
| |
|
| | lbl = uilabel(inpGrid); lbl.Text = 'Beta1';
|
| | app.EditBeta1 = uieditfield(inpGrid, 'numeric');
|
| | app.EditBeta1.ValueChangedFcn = createCallbackFcn(app, @updateApp, true);
|
| |
|
| |
|
| | lbl = uilabel(inpGrid); lbl.Text = 'ecu (Ult. Strain)';
|
| | app.EditEpsCu = uieditfield(inpGrid, 'numeric');
|
| | app.EditEpsCu.ValueDisplayFormat = '%.4f';
|
| | app.EditEpsCu.ValueChangedFcn = createCallbackFcn(app, @updateApp, true);
|
| |
|
| |
|
| | lbl = uilabel(inpGrid); lbl.Text = 'GEOMETRY'; lbl.FontWeight = 'bold'; lbl.FontColor = [0.3 0.3 0.5];
|
| | uilabel(inpGrid);
|
| |
|
| |
|
| | lbl = uilabel(inpGrid); lbl.Text = 'b (Width)';
|
| | app.EditB = uieditfield(inpGrid, 'numeric');
|
| | app.EditB.ValueChangedFcn = createCallbackFcn(app, @updateApp, true);
|
| |
|
| |
|
| | lbl = uilabel(inpGrid); lbl.Text = 'h (Total Depth)';
|
| | app.EditH = uieditfield(inpGrid, 'numeric');
|
| | app.EditH.ValueChangedFcn = createCallbackFcn(app, @updateApp, true);
|
| |
|
| |
|
| | lbl = uilabel(inpGrid); lbl.Text = 'd (Eff. Depth)';
|
| | app.EditD = uieditfield(inpGrid, 'numeric');
|
| | app.EditD.ValueChangedFcn = createCallbackFcn(app, @updateApp, true);
|
| |
|
| |
|
| | lbl = uilabel(inpGrid); lbl.Text = 'REINFORCEMENT'; lbl.FontWeight = 'bold'; lbl.FontColor = [0.3 0.3 0.5];
|
| | uilabel(inpGrid);
|
| |
|
| |
|
| | lbl = uilabel(inpGrid); lbl.Text = 'Number of Bars';
|
| | app.EditBars = uieditfield(inpGrid, 'numeric');
|
| | app.EditBars.ValueDisplayFormat = '%.0f';
|
| | app.EditBars.ValueChangedFcn = createCallbackFcn(app, @updateApp, true);
|
| |
|
| |
|
| | lbl = uilabel(inpGrid); lbl.Text = 'Bar Area (each)';
|
| | app.EditBarArea = uieditfield(inpGrid, 'numeric');
|
| | app.EditBarArea.ValueChangedFcn = createCallbackFcn(app, @updateApp, true);
|
| |
|
| |
|
| | rightGrid = uigridlayout(app.MainGrid);
|
| | rightGrid.Layout.Row = 1;
|
| | rightGrid.Layout.Column = 2;
|
| | rightGrid.ColumnWidth = {'1x', '1x', '1x', '0.6x'};
|
| | rightGrid.RowHeight = {'1.2x', '1.5x'};
|
| | rightGrid.Padding = [0 0 0 0];
|
| | rightGrid.ColumnSpacing = 6;
|
| | rightGrid.RowSpacing = 6;
|
| |
|
| |
|
| |
|
| | sectionPanel = uipanel(rightGrid);
|
| | sectionPanel.Layout.Row = 1;
|
| | sectionPanel.Layout.Column = 1;
|
| | sectionPanel.BackgroundColor = [1 1 1];
|
| | sectionPanel.BorderType = 'line';
|
| |
|
| | secGrid = uigridlayout(sectionPanel);
|
| | secGrid.ColumnWidth = {'1x'};
|
| | secGrid.RowHeight = {'1x'};
|
| | secGrid.Padding = [2 2 2 2];
|
| |
|
| | app.AxSection = uiaxes(secGrid);
|
| | app.AxSection.Layout.Row = 1;
|
| | app.AxSection.Layout.Column = 1;
|
| |
|
| |
|
| | strainPanel = uipanel(rightGrid);
|
| | strainPanel.Layout.Row = 1;
|
| | strainPanel.Layout.Column = 2;
|
| | strainPanel.BackgroundColor = [1 1 1];
|
| | strainPanel.BorderType = 'line';
|
| |
|
| | strGrid = uigridlayout(strainPanel);
|
| | strGrid.ColumnWidth = {'1x'};
|
| | strGrid.RowHeight = {'1x'};
|
| | strGrid.Padding = [2 2 2 2];
|
| |
|
| | app.AxStrain = uiaxes(strGrid);
|
| | app.AxStrain.Layout.Row = 1;
|
| | app.AxStrain.Layout.Column = 1;
|
| |
|
| |
|
| | stressPanel = uipanel(rightGrid);
|
| | stressPanel.Layout.Row = 1;
|
| | stressPanel.Layout.Column = 3;
|
| | stressPanel.BackgroundColor = [1 1 1];
|
| | stressPanel.BorderType = 'line';
|
| |
|
| | stressGrid = uigridlayout(stressPanel);
|
| | stressGrid.ColumnWidth = {'1x'};
|
| | stressGrid.RowHeight = {'1x'};
|
| | stressGrid.Padding = [2 2 2 2];
|
| |
|
| | app.AxStress = uiaxes(stressGrid);
|
| | app.AxStress.Layout.Row = 1;
|
| | app.AxStress.Layout.Column = 1;
|
| |
|
| |
|
| | app.ResultsPanel = uipanel(rightGrid);
|
| | app.ResultsPanel.Layout.Row = 1;
|
| | app.ResultsPanel.Layout.Column = 4;
|
| | app.ResultsPanel.Title = 'Results';
|
| | app.ResultsPanel.FontWeight = 'bold';
|
| | app.ResultsPanel.BackgroundColor = [0.98 0.98 0.95];
|
| |
|
| | resGrid = uigridlayout(app.ResultsPanel);
|
| | resGrid.ColumnWidth = {'1x'};
|
| | resGrid.RowHeight = {'1x'};
|
| | resGrid.Padding = [4 4 4 4];
|
| |
|
| | app.ResultsText = uitextarea(resGrid);
|
| | app.ResultsText.Layout.Row = 1;
|
| | app.ResultsText.Layout.Column = 1;
|
| | app.ResultsText.FontName = 'Consolas';
|
| | app.ResultsText.FontSize = 9;
|
| | app.ResultsText.Editable = 'off';
|
| | app.ResultsText.BackgroundColor = [0.98 0.98 0.95];
|
| |
|
| |
|
| | app.EquationsPanel = uipanel(rightGrid);
|
| | app.EquationsPanel.Layout.Row = 2;
|
| | app.EquationsPanel.Layout.Column = [1 4];
|
| | app.EquationsPanel.Title = 'Calculation Procedure (ACI 318)';
|
| | app.EquationsPanel.FontWeight = 'bold';
|
| | app.EquationsPanel.BackgroundColor = [1 1 1];
|
| |
|
| | eqGrid = uigridlayout(app.EquationsPanel);
|
| | eqGrid.ColumnWidth = {'1x'};
|
| | eqGrid.RowHeight = {'1x'};
|
| | eqGrid.Padding = [4 4 4 4];
|
| |
|
| | app.AxEquations = uiaxes(eqGrid);
|
| | app.AxEquations.Layout.Row = 1;
|
| | app.AxEquations.Layout.Column = 1;
|
| | app.AxEquations.XTick = [];
|
| | app.AxEquations.YTick = [];
|
| | app.AxEquations.XColor = 'none';
|
| | app.AxEquations.YColor = 'none';
|
| |
|
| |
|
| | app.EditFc.Value = 4000;
|
| | app.EditFy.Value = 60000;
|
| | app.EditEs.Value = 29000000;
|
| | app.EditBeta1.Value = 0.85;
|
| | app.EditEpsCu.Value = 0.003;
|
| | app.EditB.Value = 12;
|
| | app.EditH.Value = 20;
|
| | app.EditD.Value = 17.5;
|
| | app.EditBars.Value = 4;
|
| | app.EditBarArea.Value = 0.79;
|
| |
|
| | app.UIFigure.Visible = 'on';
|
| | end
|
| | end
|
| | end
|
| |
|
| |
|