示例#1
0
        /// <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);
                    }
                }
            }
        }
示例#2
0
        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);
                }
            }
        }