structuraid_core 0.1.3 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -9
- data/lib/structuraid_core/design_codes/aci_318_19/rc/footings/bending_reinforcement_ratio.rb +65 -0
- data/lib/structuraid_core/design_codes/aci_318_19/rc/footings/one_way_shear_capacity.rb +29 -0
- data/lib/structuraid_core/design_codes/aci_318_19/rc/footings/punching_critical_section_perimeter.rb +105 -0
- data/lib/structuraid_core/design_codes/aci_318_19/rc/minimum_steel_cover.rb +55 -0
- data/lib/structuraid_core/design_codes/aci_318_19/rc/reduction_factor.rb +88 -0
- data/lib/structuraid_core/design_codes/nsr_10/rc/footings/bending_reinforcement_ratio.rb +66 -0
- data/lib/structuraid_core/design_codes/nsr_10/rc/footings/one_way_shear_capacity.rb +31 -0
- data/lib/structuraid_core/design_codes/nsr_10/rc/footings/punching_critical_section_perimeter.rb +103 -0
- data/lib/structuraid_core/design_codes/nsr_10/rc/minimum_steel_cover.rb +57 -0
- data/lib/structuraid_core/design_codes/nsr_10/rc/reduction_factor.rb +82 -0
- data/lib/structuraid_core/design_codes/schemas/rc/footings/bending_reinforcement_ratio_schema.rb +24 -0
- data/lib/structuraid_core/design_codes/schemas/rc/footings/one_way_shear_capacity_schema.rb +22 -0
- data/lib/structuraid_core/design_codes/schemas/rc/footings/punching_critical_section_perimeter_schema.rb +23 -0
- data/lib/structuraid_core/design_codes/schemas/rc/minimum_steel_cover_schema.rb +32 -0
- data/lib/structuraid_core/design_codes/schemas/rc/reduction_factor_schema.rb +17 -0
- data/lib/structuraid_core/design_codes/utils/schema_definition.rb +38 -9
- data/lib/structuraid_core/elements/column/rectangular.rb +5 -4
- data/lib/structuraid_core/elements/footing.rb +69 -2
- data/lib/structuraid_core/engineering/analysis/footing/base.rb +17 -0
- data/lib/structuraid_core/engineering/analysis/footing/centric_combined_two_columns.rb +99 -0
- data/lib/structuraid_core/engineering/analysis/footing/centric_isolated.rb +1 -1
- data/lib/structuraid_core/engineering/analysis/footing/utils/basic_geometry.rb +36 -0
- data/lib/structuraid_core/engineering/analysis/footing/utils/centroid.rb +33 -0
- data/lib/structuraid_core/engineering/analysis/footing/utils/one_way_moment.rb +63 -0
- data/lib/structuraid_core/engineering/analysis/footing/utils/one_way_shear.rb +46 -0
- data/lib/structuraid_core/engineering/base.rb +1 -1
- data/lib/structuraid_core/engineering/locations/absolute.rb +4 -0
- data/lib/structuraid_core/engineering/locations/base.rb +1 -0
- data/lib/structuraid_core/engineering/locations/collection.rb +51 -0
- data/lib/structuraid_core/engineering/locations/coordinates_system.rb +19 -4
- data/lib/structuraid_core/engineering/locations/relative.rb +17 -4
- data/lib/structuraid_core/errors/engineering/locations/duplicate_label_error.rb +13 -0
- data/lib/structuraid_core/loads/point_load.rb +3 -2
- data/lib/structuraid_core/version.rb +1 -1
- metadata +67 -2
| @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            module StructuraidCore
         | 
| 2 | 
            +
              module Engineering
         | 
| 3 | 
            +
                module Analysis
         | 
| 4 | 
            +
                  module Footing
         | 
| 5 | 
            +
                    module Utils
         | 
| 6 | 
            +
                      module OneWayShear
         | 
| 7 | 
            +
                        def shear_at(x_distance)
         | 
| 8 | 
            +
                          return [] if x_distance > section_length || x_distance.negative?
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                          shear = [
         | 
| 11 | 
            +
                            shear_stretch_1(x_distance),
         | 
| 12 | 
            +
                            shear_stretch_2(x_distance),
         | 
| 13 | 
            +
                            shear_stretch_3(x_distance)
         | 
| 14 | 
            +
                          ].select(&:nonzero?)
         | 
| 15 | 
            +
                          return [0] if shear.empty?
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                          shear
         | 
| 18 | 
            +
                        end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                        private
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                        def shear_stretch_1(x_distance)
         | 
| 23 | 
            +
                          return 0.0 if x_distance > length_border_to_first_column || x_distance.zero?
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                          -solicitation_load * x_distance
         | 
| 26 | 
            +
                        end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                        def shear_stretch_2(x_distance)
         | 
| 29 | 
            +
                          local_length_1 = length_border_to_first_column
         | 
| 30 | 
            +
                          local_length_2 = length_first_column_to_second_column
         | 
| 31 | 
            +
                          return 0.0 if x_distance < local_length_1 || x_distance > local_length_1 + local_length_2
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                          -reaction_at_first_column - solicitation_load * x_distance
         | 
| 34 | 
            +
                        end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                        def shear_stretch_3(x_distance)
         | 
| 37 | 
            +
                          return 0.0 if x_distance < length_border_to_first_column + length_first_column_to_second_column
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                          -reaction_at_second_column - reaction_at_first_column - solicitation_load * x_distance
         | 
| 40 | 
            +
                        end
         | 
| 41 | 
            +
                      end
         | 
| 42 | 
            +
                    end
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
            end
         | 
| @@ -0,0 +1,51 @@ | |
| 1 | 
            +
            module StructuraidCore
         | 
| 2 | 
            +
              module Engineering
         | 
| 3 | 
            +
                module Locations
         | 
| 4 | 
            +
                  class Collection < Base
         | 
| 5 | 
            +
                    include Enumerable
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                    def initialize
         | 
| 8 | 
            +
                      @locations = []
         | 
| 9 | 
            +
                    end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    def each(&block)
         | 
| 12 | 
            +
                      locations.each(&block)
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    def add(location)
         | 
| 16 | 
            +
                      raise DuplicateLabelError, location.label if find_by_label(location.label)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                      locations.push(location)
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def inspect
         | 
| 22 | 
            +
                      locations.inspect
         | 
| 23 | 
            +
                    end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    def find_by_label(label)
         | 
| 26 | 
            +
                      locations.find { |location| location.label == label.to_sym }
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    def last
         | 
| 30 | 
            +
                      locations.last
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    def prepend(location)
         | 
| 34 | 
            +
                      locations.prepend(location)
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    def find_or_add_by_label(location)
         | 
| 38 | 
            +
                      add(location)
         | 
| 39 | 
            +
                      find_by_label(location.label)
         | 
| 40 | 
            +
                    rescue DuplicateLabelError => e
         | 
| 41 | 
            +
                      Warning.warn(e.message)
         | 
| 42 | 
            +
                      find_by_label(location.label)
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    private
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                    attr_reader :locations
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
            end
         | 
| @@ -4,11 +4,11 @@ module StructuraidCore | |
| 4 4 | 
             
              module Engineering
         | 
| 5 5 | 
             
                module Locations
         | 
| 6 6 | 
             
                  class CoordinatesSystem < Base
         | 
| 7 | 
            -
                    attr_reader :relative_locations, :axis_1
         | 
| 7 | 
            +
                    attr_reader :relative_locations, :axis_1, :anchor_location
         | 
| 8 8 |  | 
| 9 | 
            -
                    def initialize(anchor_location | 
| 9 | 
            +
                    def initialize(anchor_location:)
         | 
| 10 10 | 
             
                      @anchor_location = anchor_location
         | 
| 11 | 
            -
                      @relative_locations =  | 
| 11 | 
            +
                      @relative_locations = Collection.new
         | 
| 12 12 | 
             
                      @axis_1 = Vector[1.0, 0.0, 0.0]
         | 
| 13 13 | 
             
                      @axis_3 = Vector[0.0, 0.0, 1.0]
         | 
| 14 14 | 
             
                    end
         | 
| @@ -19,13 +19,28 @@ module StructuraidCore | |
| 19 19 | 
             
                    end
         | 
| 20 20 |  | 
| 21 21 | 
             
                    def add_location(relative_location)
         | 
| 22 | 
            -
                      relative_locations | 
| 22 | 
            +
                      relative_locations.add(relative_location)
         | 
| 23 | 
            +
                    end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    def add_location_from_vector(vector, label:)
         | 
| 26 | 
            +
                      relative_location = Relative.from_vector(vector, label:)
         | 
| 27 | 
            +
                      add_location(relative_location)
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                    def find_or_add_location_from_vector(vector, label:)
         | 
| 31 | 
            +
                      relative_location = Relative.from_vector(vector, label:)
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                      relative_locations.find_or_add_by_label(relative_location)
         | 
| 23 34 | 
             
                    end
         | 
| 24 35 |  | 
| 25 36 | 
             
                    def axis_2
         | 
| 26 37 | 
             
                      axis_3.cross_product axis_1
         | 
| 27 38 | 
             
                    end
         | 
| 28 39 |  | 
| 40 | 
            +
                    def find_location(label)
         | 
| 41 | 
            +
                      relative_locations.find_by_label(label)
         | 
| 42 | 
            +
                    end
         | 
| 43 | 
            +
             | 
| 29 44 | 
             
                    private
         | 
| 30 45 |  | 
| 31 46 | 
             
                    attr_reader :axis_3
         | 
| @@ -4,20 +4,33 @@ module StructuraidCore | |
| 4 4 | 
             
              module Engineering
         | 
| 5 5 | 
             
                module Locations
         | 
| 6 6 | 
             
                  class Relative < Base
         | 
| 7 | 
            -
                    attr_reader : | 
| 7 | 
            +
                    attr_reader :label
         | 
| 8 | 
            +
                    attr_accessor :value_1, :value_2, :value_3
         | 
| 8 9 |  | 
| 9 | 
            -
                    def self. | 
| 10 | 
            +
                    def self.from_vector(vector, label: nil)
         | 
| 11 | 
            +
                      new(
         | 
| 12 | 
            +
                        value_1: vector[0],
         | 
| 13 | 
            +
                        value_2: vector[1],
         | 
| 14 | 
            +
                        value_3: vector[2],
         | 
| 15 | 
            +
                        label:
         | 
| 16 | 
            +
                      )
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    def self.from_matrix(matrix, label: nil)
         | 
| 10 20 | 
             
                      new(
         | 
| 11 21 | 
             
                        value_1: matrix[0, 0],
         | 
| 12 22 | 
             
                        value_2: matrix[1, 0],
         | 
| 13 | 
            -
                        value_3: matrix[2, 0]
         | 
| 23 | 
            +
                        value_3: matrix[2, 0],
         | 
| 24 | 
            +
                        label:
         | 
| 14 25 | 
             
                      )
         | 
| 15 26 | 
             
                    end
         | 
| 16 27 |  | 
| 17 | 
            -
                    def initialize(value_1:, value_2:, value_3:)
         | 
| 28 | 
            +
                    def initialize(value_1:, value_2:, value_3:, label: nil)
         | 
| 18 29 | 
             
                      @value_1 = value_1.to_f
         | 
| 19 30 | 
             
                      @value_2 = value_2.to_f
         | 
| 20 31 | 
             
                      @value_3 = value_3.to_f
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                      @label = label&.to_sym
         | 
| 21 34 | 
             
                    end
         | 
| 22 35 |  | 
| 23 36 | 
             
                    def to_matrix
         | 
| @@ -2,11 +2,12 @@ module StructuraidCore | |
| 2 2 | 
             
              module Loads
         | 
| 3 3 | 
             
                class PointLoad < Base
         | 
| 4 4 | 
             
                  attr_accessor :value
         | 
| 5 | 
            -
                  attr_reader :location
         | 
| 5 | 
            +
                  attr_reader :location, :label
         | 
| 6 6 |  | 
| 7 | 
            -
                  def initialize(value:, location:)
         | 
| 7 | 
            +
                  def initialize(value:, location:, label: nil)
         | 
| 8 8 | 
             
                    @value = value.to_f
         | 
| 9 9 | 
             
                    @location = location
         | 
| 10 | 
            +
                    @label = label&.to_sym
         | 
| 10 11 | 
             
                  end
         | 
| 11 12 | 
             
                end
         | 
| 12 13 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: structuraid_core
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1 | 
| 4 | 
            +
              version: 0.2.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Pradaing
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023- | 
| 11 | 
            +
            date: 2023-05-01 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: byebug
         | 
| @@ -38,6 +38,34 @@ dependencies: | |
| 38 38 | 
             
                - - "~>"
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 40 | 
             
                    version: 4.7.3
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: puma
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - ">="
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '0'
         | 
| 48 | 
            +
              type: :development
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - ">="
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '0'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: rack
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ">="
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '0'
         | 
| 62 | 
            +
              type: :development
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - ">="
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: '0'
         | 
| 41 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 70 | 
             
              name: rspec
         | 
| 43 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -94,6 +122,20 @@ dependencies: | |
| 94 122 | 
             
                - - "~>"
         | 
| 95 123 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 124 | 
             
                    version: 0.22.0
         | 
| 125 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 126 | 
            +
              name: yard
         | 
| 127 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 128 | 
            +
                requirements:
         | 
| 129 | 
            +
                - - ">="
         | 
| 130 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 131 | 
            +
                    version: '0'
         | 
| 132 | 
            +
              type: :development
         | 
| 133 | 
            +
              prerelease: false
         | 
| 134 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 135 | 
            +
                requirements:
         | 
| 136 | 
            +
                - - ">="
         | 
| 137 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 138 | 
            +
                    version: '0'
         | 
| 97 139 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 98 140 | 
             
              name: matrix
         | 
| 99 141 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -158,17 +200,32 @@ files: | |
| 158 200 | 
             
            - lib/structuraid_core/db/base.rb
         | 
| 159 201 | 
             
            - lib/structuraid_core/db/rebars.yml
         | 
| 160 202 | 
             
            - lib/structuraid_core/design_codes/aci_318_19/rc/elastic_modulus.rb
         | 
| 203 | 
            +
            - lib/structuraid_core/design_codes/aci_318_19/rc/footings/bending_reinforcement_ratio.rb
         | 
| 161 204 | 
             
            - lib/structuraid_core/design_codes/aci_318_19/rc/footings/min_height.rb
         | 
| 205 | 
            +
            - lib/structuraid_core/design_codes/aci_318_19/rc/footings/one_way_shear_capacity.rb
         | 
| 206 | 
            +
            - lib/structuraid_core/design_codes/aci_318_19/rc/footings/punching_critical_section_perimeter.rb
         | 
| 162 207 | 
             
            - lib/structuraid_core/design_codes/aci_318_19/rc/footings/punching_shear_capacity.rb
         | 
| 208 | 
            +
            - lib/structuraid_core/design_codes/aci_318_19/rc/minimum_steel_cover.rb
         | 
| 209 | 
            +
            - lib/structuraid_core/design_codes/aci_318_19/rc/reduction_factor.rb
         | 
| 163 210 | 
             
            - lib/structuraid_core/design_codes/base.rb
         | 
| 164 211 | 
             
            - lib/structuraid_core/design_codes/nsr_10/rc/elastic_modulus.rb
         | 
| 212 | 
            +
            - lib/structuraid_core/design_codes/nsr_10/rc/footings/bending_reinforcement_ratio.rb
         | 
| 165 213 | 
             
            - lib/structuraid_core/design_codes/nsr_10/rc/footings/min_height.rb
         | 
| 214 | 
            +
            - lib/structuraid_core/design_codes/nsr_10/rc/footings/one_way_shear_capacity.rb
         | 
| 215 | 
            +
            - lib/structuraid_core/design_codes/nsr_10/rc/footings/punching_critical_section_perimeter.rb
         | 
| 166 216 | 
             
            - lib/structuraid_core/design_codes/nsr_10/rc/footings/punching_shear_capacity.rb
         | 
| 217 | 
            +
            - lib/structuraid_core/design_codes/nsr_10/rc/minimum_steel_cover.rb
         | 
| 218 | 
            +
            - lib/structuraid_core/design_codes/nsr_10/rc/reduction_factor.rb
         | 
| 167 219 | 
             
            - lib/structuraid_core/design_codes/resolver.rb
         | 
| 168 220 | 
             
            - lib/structuraid_core/design_codes/schemas/empty_schema.rb
         | 
| 169 221 | 
             
            - lib/structuraid_core/design_codes/schemas/rc/elastic_modulus_schema.rb
         | 
| 222 | 
            +
            - lib/structuraid_core/design_codes/schemas/rc/footings/bending_reinforcement_ratio_schema.rb
         | 
| 170 223 | 
             
            - lib/structuraid_core/design_codes/schemas/rc/footings/min_height_schema.rb
         | 
| 224 | 
            +
            - lib/structuraid_core/design_codes/schemas/rc/footings/one_way_shear_capacity_schema.rb
         | 
| 225 | 
            +
            - lib/structuraid_core/design_codes/schemas/rc/footings/punching_critical_section_perimeter_schema.rb
         | 
| 171 226 | 
             
            - lib/structuraid_core/design_codes/schemas/rc/footings/punching_shear_capacity_schema.rb
         | 
| 227 | 
            +
            - lib/structuraid_core/design_codes/schemas/rc/minimum_steel_cover_schema.rb
         | 
| 228 | 
            +
            - lib/structuraid_core/design_codes/schemas/rc/reduction_factor_schema.rb
         | 
| 172 229 | 
             
            - lib/structuraid_core/design_codes/utils/code_requirement.rb
         | 
| 173 230 | 
             
            - lib/structuraid_core/design_codes/utils/schema_definition.rb
         | 
| 174 231 | 
             
            - lib/structuraid_core/elements/base.rb
         | 
| @@ -181,10 +238,17 @@ files: | |
| 181 238 | 
             
            - lib/structuraid_core/elements/reinforcement/straight_longitudinal.rb
         | 
| 182 239 | 
             
            - lib/structuraid_core/elements/reinforcement/straight_longitudinal_layer.rb
         | 
| 183 240 | 
             
            - lib/structuraid_core/elements/reinforcement/utils/rebar_data.rb
         | 
| 241 | 
            +
            - lib/structuraid_core/engineering/analysis/footing/base.rb
         | 
| 242 | 
            +
            - lib/structuraid_core/engineering/analysis/footing/centric_combined_two_columns.rb
         | 
| 184 243 | 
             
            - lib/structuraid_core/engineering/analysis/footing/centric_isolated.rb
         | 
| 244 | 
            +
            - lib/structuraid_core/engineering/analysis/footing/utils/basic_geometry.rb
         | 
| 245 | 
            +
            - lib/structuraid_core/engineering/analysis/footing/utils/centroid.rb
         | 
| 246 | 
            +
            - lib/structuraid_core/engineering/analysis/footing/utils/one_way_moment.rb
         | 
| 247 | 
            +
            - lib/structuraid_core/engineering/analysis/footing/utils/one_way_shear.rb
         | 
| 185 248 | 
             
            - lib/structuraid_core/engineering/base.rb
         | 
| 186 249 | 
             
            - lib/structuraid_core/engineering/locations/absolute.rb
         | 
| 187 250 | 
             
            - lib/structuraid_core/engineering/locations/base.rb
         | 
| 251 | 
            +
            - lib/structuraid_core/engineering/locations/collection.rb
         | 
| 188 252 | 
             
            - lib/structuraid_core/engineering/locations/coordinates_system.rb
         | 
| 189 253 | 
             
            - lib/structuraid_core/engineering/locations/relative.rb
         | 
| 190 254 | 
             
            - lib/structuraid_core/errors/base.rb
         | 
| @@ -193,6 +257,7 @@ files: | |
| 193 257 | 
             
            - lib/structuraid_core/errors/design_codes/unknown_design_code_error.rb
         | 
| 194 258 | 
             
            - lib/structuraid_core/errors/design_codes/unrecognized_value_error.rb
         | 
| 195 259 | 
             
            - lib/structuraid_core/errors/engineering/analysis/section_direction_error.rb
         | 
| 260 | 
            +
            - lib/structuraid_core/errors/engineering/locations/duplicate_label_error.rb
         | 
| 196 261 | 
             
            - lib/structuraid_core/errors/reinforcement/empty_layers.rb
         | 
| 197 262 | 
             
            - lib/structuraid_core/errors/reinforcement/invalid_distribution_direction.rb
         | 
| 198 263 | 
             
            - lib/structuraid_core/loads/base.rb
         |