static public void DrawRodTwoPoints() { var keywords = new string[] { "LEft", "ЛЕво", "RIght", "ПРаво", "Diameter", "Диаметр", "ANchorage", "АНкеровка" }; Point3d p1 = Input.Point("Выберите первую точку", keywords, SetSides); if (Input.StatusCancel) { return; } Point3d p2 = Input.Point("Выберите вторую точку", keywords, SetSides); if (Input.StatusCancel) { return; } Point3d p3 = Input.Point("Выберите сторону смещения"); if (Input.StatusCancel) { return; } double anchorage = Math.Round(base_anchorage * diameter / round) * round; double offset = Math.Round((min_layer + diameter / 2) / round_5, MidpointRounding.AwayFromZero) * round_5; var vp1p2 = UT.GetUniteVector(p1, p2); var pl = new Plane(p1, vp1p2.GetPerpendicularVector()); Point3d p4 = p3.OrthoProject(pl); var vp4p3 = UT.GetUniteVector(p4, p3); var A = p1.Add(vp4p3.MultiplyBy(offset)).Add(vp1p2.MultiplyBy(left_anchorage?-anchorage:0)); var B = p2.Add(vp4p3.MultiplyBy(offset)).Add(vp1p2.MultiplyBy(right_anchorage?anchorage:0)); using (var th = new TransactionHelper()) { var AB = new Line(A, B); AB.SetDatabaseDefaults(); th.WriteObject(AB); } }