BarShapePlacementUtil
    Module with the bar shape placement utility class
            BarShapePlacementUtil
    
    Canonical path: StdReinfShapeBuilder.BarShapePlacementUtil.BarShapePlacementUtil
  
Implementation of the bar shape placement utility.
This class can be used to calculate the placement of longitudinal bars in relation to multiple transverse shapes (e.g. stirrup, s-hook). An example use-case is the calculation of the position of the longitudinal bar in the corner of a stirrup or at the intersection of the legs of two stirrups.
            add_shape
add_shape(shape_id: int | str, shape: BendingShape)
Add a shape to the shape list
Parameters:
- 
            
shape_id(int | str) –ID of the reference shape
 - 
            
shape(BendingShape) –Shape
 
            get_placement
    Calculate the local placement line inside the local X/Y coordinate system of the shapes
Parameters:
- 
            
reinf_def–Reinforcement definition
 - 
            
param_dict–Parameter dictionary
 - 
            
local_angles–Rotation from global to local coordinate system
 
Returns:
- 
          –
          
Placement line in local coordinate system
 - 
          –
          
Cover at the start of the line
 - 
          –
          
Cover at the end of the line
 
            get_placement_at_shape_side
get_placement_at_shape_side(
    shape_id: int | str,
    side_number: int,
    ref_pnt_fac: float,
    b_above_side: bool,
    placement_diameter: float,
    local_angles: RotationAngles,
) -> tuple[Line2D, float, float]
Calculate the local placement line at a given leg of the reference shape in its local coordinate system
Parameters:
- 
            
shape_id(int | str) –ID of the reference shape
 - 
            
side_number(int) –Number of the leg of the reference shape, beginning with 1
 - 
            
ref_pnt_fac(float) –Factor for the reference point calculation. (-1 = at the side from left to right)
 - 
            
b_above_side(bool) –When set to True, the placement line is created above the leg
 - 
            
placement_diameter(float) –Diameter of the longitudinal bar
 - 
            
local_angles(RotationAngles) –Rotation from global to local coordinate system
 
Returns:
- 
              
Line2D–Placement line in local coordinate system
 - 
              
float–Cover at the start of the line
 - 
              
float–Cover at the end of the line
 
            get_placement_at_shape_side_intersection
get_placement_at_shape_side_intersection(
    shape_id1: int | str,
    side_number1: int,
    shape_id2: int | str,
    side_number2: int,
    shape_id3: int | str,
    side_number3: int,
    b_above_side3: bool,
    placement_diameter: float,
    local_angles: RotationAngles,
) -> tuple[Line2D, float, float]
Calculates the placement line on the specified leg of the third reference shape, starting at the intersection with the leg of the first reference shape and ending a the intersection with leg of the second reference shape.
Parameters:
- 
            
shape_id1(int | str) –ID of the first reference shape
 - 
            
side_number1(int) –Number of the leg of the first reference shape, beginning with 1
 - 
            
shape_id2(int | str) –ID of the second reference shape
 - 
            
side_number2(int) –Number of the leg of the second reference shape, beginning with 1
 - 
            
shape_id3(int | str) –ID of the third reference shape
 - 
            
side_number3(int) –Number of the leg of the third reference shape, beginning with 1
 - 
            
b_above_side3(bool) –When True, the placement line will be calculated above the leg, otherwise below
 - 
            
placement_diameter(float) –Diameter of the longitudinal bar
 - 
            
local_angles(RotationAngles) –Rotation from global to local coordinate system
 
Returns:
- 
              
Line2D–Placement line in local coordinate system
 - 
              
float–Cover at the start of the line
 - 
              
float–Cover at the end of the line
 
            get_placement_from_bending_roller
get_placement_from_bending_roller(
    shape_id: int | str,
    side_number: int,
    b_roller_start_point: bool,
    placement_base_line: Line2D | Line3D,
    b_placment_start_point: bool,
    placement_diameter: float,
    local_angles: RotationAngles,
) -> float
Get the placement cover from the bending roller of a defined side number
Parameters:
- 
            
shape_id(int | str) –ID of the reference shape
 - 
            
side_number(int) –Number of the shape leg
 - 
            
b_roller_start_point(bool) –True = roller at the start point / False = roller at the end point
 - 
            
placement_base_line(Line2D | Line3D) –Base line of the placement
 - 
            
b_placment_start_point(bool) –True = placement start point / False = placement end point
 - 
            
placement_diameter(float) –Diameter of the longitudinal bar
 - 
            
local_angles(RotationAngles) –Rotation from global to local coordinate system
 
Returns:
- 
              
float–Local placement cover to a placement base line
 
            get_placement_from_side_intersection
get_placement_from_side_intersection(
    shape_id1: int | str,
    side_number1: int,
    b_above_side1: bool,
    shape_id2: int | str,
    side_number2: int,
    b_above_side2: bool,
    placement_base_line: Line2D,
    b_placment_start_point: bool,
    placement_diameter: float,
    local_angles: RotationAngles,
) -> float
Get the placement cover from the side intersection of two defined side numbers.
Parameters:
- 
            
shape_id1(int | str) –ID of the first shape
 - 
            
side_number1(int) –Number of the first shape leg
 - 
            
b_above_side1(bool) –Cover above the first side: True/False
 - 
            
shape_id2(int | str) –ID of the second shape
 - 
            
side_number2(int) –Number of the second shape leg
 - 
            
b_above_side2(bool) –Cover above the second side: True/False
 - 
            
placement_base_line(Line2D) –Base line of the placement
 - 
            
b_placment_start_point(bool) –True = placement start point / False = placement end point
 - 
            
placement_diameter(float) –Diameter of the longitudinal bar
 - 
            
local_angles(RotationAngles) –Rotation from global to local coordinate system
 
Returns:
- 
              
float–Local placement cover to a placement base line
 
            get_placement_in_corner
get_placement_in_corner(
    shape_id: int | str,
    corner_number: int,
    placement_diameter: float,
    local_angles: RotationAngles,
) -> Point3D
Calculate the placement point for a longitudinal bar in the corner of the given reference shape
Parameters:
- 
            
shape_id(int | str) –ID of the reference shape
 - 
            
corner_number(int) –Number of the corner in the reference shape, beginning with 1
 - 
            
placement_diameter(float) –Diameter of the longitudinal bar
 - 
            
local_angles(RotationAngles) –Rotation from global to local coordinate system
 
Returns:
- 
              
Point3D–Position of corner bar in the local coordinate system of the reference shape.
 
            get_placement_in_side_corners
get_placement_in_side_corners(
    shape_id: int | str,
    side_number: int,
    placement_diameter: float,
    local_angles: RotationAngles,
) -> tuple[Line2D, float, float]
Calculate the placement line on the entire length of the specified leg of the reference shape.
Note, that the calculation cannot be done in the first leg!
Parameters:
- 
            
shape_id(int | str) –ID of the reference shape
 - 
            
side_number(int) –Number of the shape's leg, beginning with 1
 - 
            
placement_diameter(float) –Diameter of the longitudinal bar
 - 
            
local_angles(RotationAngles) –Rotation from global to local coordinate system
 
Returns:
- 
              
Line2D–Placement line in local coordinate system
 - 
              
float–Cover at the start of the line
 - 
              
float–Cover at the end of the line
 
            get_placement_in_side_intersection
get_placement_in_side_intersection(
    shape_id1: int | str,
    side_number1: int,
    b_above_side1: bool,
    shape_id2: int | str,
    side_number2: int,
    b_above_side2: bool,
    placement_diameter: float,
    local_angles: RotationAngles,
) -> Point2D | Point3D
Get the placement point at the intersection of two legs.
Parameters:
- 
            
shape_id1(int | str) –ID of the first reference shape
 - 
            
side_number1(int) –Leg number of the first reference shape, beginning with 1
 - 
            
b_above_side1(bool) –True will calculate the placement point above the first leg, False below
 - 
            
shape_id2(int | str) –ID of the second reference shape
 - 
            
side_number2(int) –Leg number of the second reference shape, beginning with 1
 - 
            
b_above_side2(bool) –True will calculate the placement point above the second leg, False below
 - 
            
placement_diameter(float) –Diameter of the longitudinal bar
 - 
            
local_angles(RotationAngles) –Rotation from global to local coordinate system
 
Returns:
            get_placent_line_cover_from_side
get_placent_line_cover_from_side(
    shape_id: int | str, side_number: int, b_above_side: bool
) -> tuple[Line3D, float]
Get the placement line cover from a shape leg by side number
Parameters:
- 
            
shape_id(int | str) –ID of the reference shape
 - 
            
side_number(int) –Number of the shape leg
 - 
            
b_above_side(bool) –Cover above the side: True/False
 
Returns:
- 
              
Line3D–Placement line
 - 
              
float–Local placement cover
 
            get_side_length
    Gets the leg's length of the given shape
Parameters:
- 
            
shape_id(int | str) –ID of the reference shape
 - 
            
side_number(int) –Number of the leg
 
Return
Length of the leg