public Point getCornerPoint(Edge e, double offset_main, double offset_side, double alfa = 1000) { Line startLine = e.Line.Offset(offset_main); Line otherLine = getOtherEdge(e).Line.Offset(offset_side); Line extendedStart = startLine.extendDouble(alfa); Line extendedOther = otherLine.extendDouble(alfa); Point ip = Line.getIntersectionPoint(extendedStart, extendedOther); return(ip); }
private void define_side_U(LineSegment seg) { G.Line mainLine = seg.getLine(); G.Line otherLine = seg.getOtherLine(); if (setLineSegment.Contains(seg)) { return; } if (isLineRight(mainLine) == false && isLineRight(otherLine) == true) { return; } G.Vector d1 = mainLine.getDirectionVector(); G.Vector o1 = mainLine.getOffsetVector(); int spacing = _V_.X_REINFORCEMENT_STIRRUP_SPACING; double nearEdge = _V_.X_CONCRETE_COVER_1 * 1.2; double equalSpacer = ((mainLine.Length() - 2 * nearEdge) % spacing) / 2; double j = nearEdge + equalSpacer; double len = mainLine.Length(); if ((len - nearEdge * 2) > spacing) { R.Raud_Array rauad = new R.Raud_Array(spacing); knownArrayReinforcement.Add(rauad); while (j < len) { G.Point start = mainLine.Start.move(j, d1); G.Point extended = start.move(_V_.Y_STIRRUP_MAX_LENGTH * 1.1, o1); G.Line temp = new G.Line(start, extended); G.Point end = G.Line.getIntersectionPoint(temp, otherLine); temp = new G.Line(start, end); if (Math.Round(temp.Length(), 0) > _V_.X_CONCRETE_COVER_1 * 2) { temp = temp.extendDouble(-1 * _V_.X_CONCRETE_COVER_1); U_side_handler(temp.Start, temp.End, seg); } j = j + spacing; } U_side_garbage_collector(); } }
public E_Raud(G.Line main, G.Line side1, G.Line side2, int nr, int d, string teras, int parand = 0) : base(main, nr, d, teras) { G.Vector mainDir = main.getDirectionVector(); G.Polar mainPol = G.Converter.xy_to_la(mainDir); G.Vector sideDir1 = side1.getDirectionVector(); G.Polar sidePol1 = G.Converter.xy_to_la(sideDir1); G.Vector sideDir2 = side2.getDirectionVector(); G.Polar sidePol2 = G.Converter.xy_to_la(sideDir2); _A = shorter(side1.Length()); _B = shorter(main.Length()); _B2 = shorter(main.Length() + parand); // parand magic _C = shorter(side2.Length()); G.Vector perpendVector = mainDir.rotate(-Math.PI / 2); double maxDist = Math.Max(_A, _C) * 2; G.Line mainExtended = main.extendDouble(maxDist); G.Point movePoint1 = side1.Start.move(maxDist, perpendVector); G.Line perpendLine1 = new G.Line(side1.Start, movePoint1); G.Point interPoint1 = G.Line.getIntersectionPoint(mainExtended, perpendLine1); G.Line XLine = new G.Line(side1.Start, interPoint1); G.Point movePoint2 = side2.End.move(maxDist, perpendVector); G.Line perpendLine2 = new G.Line(side2.End, movePoint2); G.Point interPoint2 = G.Line.getIntersectionPoint(mainExtended, perpendLine2); G.Line YLine = new G.Line(side2.End, interPoint2); _U = G.Converter.AngleDelta(mainPol.angle, sidePol1.angle); _V = G.Converter.AngleDelta(mainPol.angle, sidePol2.angle); _X = XLine.Length(); _Y = YLine.Length(); _IP = main.getCenterPoint(); _Length = _A + _B2 + _C; // parand magic G.Vector v1 = -1 * side1.getDirectionVector(); _Side1Point = _StartPoint.move(_A, v1); G.Vector v2 = side2.getDirectionVector(); _Side2Point = _EndPoint.move(_C, v2); }
private void create_valid_A() { List <G.Edge> emptyEdges = allEdges.Where(x => !setEdges.Keys.Contains(x)).ToList(); emptyEdges = emptyEdges.OrderBy(b => b.Line.Length()).Reverse().ToList(); foreach (G.Edge e in emptyEdges) { if (narrow_denier(e)) { continue; } if (e.StartCorner.Angle > Math.PI && e.EndCorner.Angle > Math.PI) { G.Line main = e.edgeOffset(_V_.X_CONCRETE_COVER_1, _V_.X_CONCRETE_COVER_1, _V_.X_CONCRETE_COVER_1); main = main.extendDouble(_V_.X_REINFORCEMENT_MAIN_ANCHOR_LENGTH); A_handler(main.Start, main.End, e, null, _V_.X_REINFORCEMENT_MAIN_DIAMETER); } } }