/// <summary> /// запускаем функцию /// </summary> public override void Execute() { using (var lm = new PKLayerManager()) { lm.CommandLayer = "ПК_С_ЛинииРазрыва"; base.Execute(); var sset = Input.Objects( keywords: new string[] { "OFfset", "СМещение", }, message: "Выберите 2 отрезка на углу или полилинии проемов.", keywordinput: new SelectionTextInputEventHandler(LengthInput) ); if (Input.StatusBad) { return; } List <Entity> input = new List <Entity>(); using (TransactionHelper th = new TransactionHelper()) { input = th.ReadObjects(sset); } if (input == null || input.Count < 1) { Tweet("Не удалось прочитать объекты"); return; } SortLinesAndPolylines(input); using (TransactionHelper th = new TransactionHelper()) { for (int i = 0; i < lines.Count - 1; i += 2) { Make(lines[i], lines[i + 1]); if (!status_ok) { continue; } Tweet("Записываем линии в базу данных"); th.WriteObject(first); th.WriteObject(second); } foreach (Polyline pl in polylines) { Make(pl); if (!status_ok) { continue; } Tweet("Записываем линии в базу данных"); th.WriteObject(first); th.WriteObject(second); } } } }
public void MakeBreakLine() { using (var lm = new PKLayerManager()) { //находим текущий масштаб аннотаций. Не забываем что в аннотативном масштабе 1:25 масштаб равен 0,04, но нам нужно именно обратное число scale = 1 / (UT.GetAnnoScale("CANNOSCALE").Scale); size *= scale; overlength *= scale; lm.CommandLayer = "ПК_С_ЛинииРазрыва"; var sset = Input.Implied(); if (Input.StatusBad) //нет предварительно выбранных объектов. Используем старый механизм. { p1 = Input.Point("\nВведите первую точку"); if (Input.StatusBad) { return; } p2 = Input.Point("\nВведите вторую точку"); if (Input.StatusBad) { return; } p1p2 = new Line(p1, p2); p1p2v = p1p2.Delta.MultiplyBy(1 / p1p2.Length); Plane pl = new Plane(p1, p1p2.Delta.GetPerpendicularVector()); p11 = p1.Add(p1p2v.MultiplyBy(overlength * -1)); p21 = p2.Add(p1p2v.MultiplyBy(overlength)); //заполняем точки пока ввод корректный. Если не введено ни одной точки, ставим единственную в середину data = new List <Point2d>(); var pt = Input.Point("\nУкажите точку вставки символа или по умолчанию в середине"); int cnt = 0; if (Input.StatusBad) { if (int.TryParse(Input.StringResult, out cnt) && cnt > 0) { data = Divide(cnt); } else { data.Add(UT.GetMiddle(p1, p2).to2d()); } } while (Input.StatusOK) { data.Add(pt.OrthoProject(pl).to2d()); pt = Input.Point("\nУкажите следующую точку вставки символа"); } results.Add(Prepare()); } else { using (var th = new TransactionHelper()) { var ents = th.EditObjects(sset); var lines = ents.OfType <Line>(); var polylines = ents.OfType <Polyline>(); foreach (var l in lines) { th.WriteObject(MakeFromLine(l)); l.Erase(); } foreach (var pl in polylines) { th.WriteObject(MakeFromPolyLine(pl)); pl.Erase(); } } } using (var th = new TransactionHelper()) { th.WriteObjects(results); } } }