Source code for fconcrete.StructuralConcrete.TransvSteelBar.TransvSteelBar

import numpy as np
import matplotlib.pyplot as plt
import copy
from fconcrete.helpers import getAxis, make_dxf

[docs]class TransvSteelBar(): def __init__(self, x, height, width, diameter, space_after, area, as_per_cm, anchor, length, cost): self.x = x self.height = height self.width = width self.diameter = diameter self.space_after = space_after self.area = area self.as_per_cm = as_per_cm self.anchor = anchor self.length = length self.cost = cost def __repr__(self): return str(self.__dict__)+'\n'
[docs] def plot(self, c=2, ax=None, fig=None, color_plot="blue", **options): """ Plot the transversal vision of the transversal bar. """ height, width, diameter = self.height, self.width, self.diameter x0, y0 = -width/2, c fig, ax = getAxis((x0, diameter), (x0+diameter+width-diameter, c+height)) if ax == None else (fig, ax) left_bar = plt.Rectangle((x0,y0), diameter, height, hatch="/", fill=False) right_bar = plt.Rectangle((width/2-diameter,y0), diameter, height, hatch="/", fill=False) top_bar = plt.Rectangle((x0+diameter,y0+height-diameter), width-2*diameter, diameter, hatch="/", fill=False) bottom_bar = plt.Rectangle((x0+diameter,y0), width-2*diameter, diameter, hatch="/", fill=False) anchor = plt.Rectangle((width/2+diameter/2, y0+height-diameter/2), diameter, self.anchor, hatch="|", fill=False, angle=135) #anchor ax.add_artist(left_bar) ax.add_artist(right_bar) ax.add_artist(top_bar) ax.add_artist(bottom_bar) ax.add_artist(anchor) return make_dxf(ax, **options) # if return_ax else None
[docs]class TransvSteelBars(): """ Class that defines a the TransvSteelBar list with easy to work properties and methods. """ def __init__(self, steel_bars=[]): self.steel_bars = np.array(steel_bars) self.x = np.array([ steel_bar.x for steel_bar in self.steel_bars ]) self.heights = np.array([ steel_bar.height for steel_bar in self.steel_bars ]) self.widths = np.array([ steel_bar.width for steel_bar in self.steel_bars ]) self.diameters = np.array([ steel_bar.diameter for steel_bar in self.steel_bars ]) self.space_afters = np.array([ steel_bar.space_after for steel_bar in self.steel_bars ]) self.areas = np.array([ steel_bar.area for steel_bar in self.steel_bars ]) self.as_per_cms = np.array([ steel_bar.as_per_cm for steel_bar in self.steel_bars ]) self.lengths = np.array([ steel_bar.length for steel_bar in self.steel_bars ]) self.costs = np.array([ steel_bar.cost for steel_bar in self.steel_bars ]) self.length = sum(self.lengths) self.cost = sum(self.costs)
[docs] def add(self, new_steel_bars): """ Add a array of Load in the Loads instance. """ previous_steel_bars = self.steel_bars if str(type(new_steel_bars)) == "<class 'fconcrete.StructuralConcrete.TransvSteelBar.TransvSteelBar.TransvSteelBars'>": concatenation = list(np.concatenate((previous_steel_bars,new_steel_bars.steel_bars))) concatenation.sort(key=lambda x: x.long_begin, reverse=False) new_steel_bars = np.array(concatenation) elif str(type(new_steel_bars)) == "<class 'fconcrete.StructuralConcrete.TransvSteelBar.TransvSteelBar.TransvSteelBar'>": new_steel_bars = np.append(previous_steel_bars,new_steel_bars) self.__init__(new_steel_bars)
[docs] def getTransversalBarAfterX(self, x): """ Get the next transversal bar in x or after. """ return self.steel_bars[self.x >= x][0]
[docs] def changeProperty(self, prop, function, conditional=lambda x:True): """ Change all properties of the TransvSteelBar in a single function. """ steel_bars = copy.deepcopy(self) for previous_steel_bar in steel_bars: if conditional(previous_steel_bar): current_attribute_value = getattr(previous_steel_bar, prop) setattr(previous_steel_bar, prop, function(current_attribute_value)) return steel_bars
[docs] def plotLong(self, **options): """ Plot the longitudinal vision of the transversal bar. """ _, ax = plt.subplots() for x, height in zip(self.x, self.heights): ax.plot([x,x], [0,height]) return make_dxf(ax, **options)
def __getitem__(self, key): return self.steel_bars[key] def __repr__(self): return str(self.steel_bars)