コード例 #1
0
ファイル: PatternCopy.cs プロジェクト: koropet/PKUserTools
        void FindPoints()
        {
            for (int i = 0; i < lines_first_ent.Count; i++)
            {
                List <Point3d> lineintersections = new List <Point3d>();

                for (int j = 0; j < lines_second_ent.Count; j++)
                {
                    var pts = UT.IntersectWith(lines_first_ent[i], lines_second_ent[j], extend);

                    foreach (Point3d pt in pts)
                    {
                        lineintersections.Add(pt);
                    }
                }

                if (lines_first_ent[i] is Curve)
                {
                    var crv = lines_first_ent[i] as Curve;
                    try
                    {
                        lineintersections.Sort((x, y) => crv.GetParameterAtPoint(x).CompareTo(crv.GetParameterAtPoint(y)));
                    }
                    catch (Exception)
                    {
                        Tweet("Не удалась сортировка исходя из параметров");
                        try
                        {
                            lineintersections.Sort((x, y) => crv.StartPoint.DistanceTo(x).CompareTo(crv.StartPoint.DistanceTo(y)));
                        }
                        catch (Exception)
                        {
                            Tweet("Сортировка по дистанции от начала кривой не удалась");
                        }
                    }
                }

                for (int j = 0; j < lineintersections.Count; j++)
                {
                    if (copy_chess)
                    {
                        if (ChessOrder(i, j))
                        {
                            points.Add(lineintersections[j]);
                        }
                        else
                        {
                            points_alternative.Add(lineintersections[j]);
                        }
                    }
                    else
                    {
                        points.Add(lineintersections[j]);
                    }
                }
            }
        }
コード例 #2
0
        public RebarDrawing()
        {
            Tweet("Начинаем распознавать слои");

            if (!InitLayers())
            {
                Tweet("Не хватает слоев! Программа не будет продолжена. Для корректной работы необходим полный шаблон ПК");
                return;
            }
            if (!InitLinetype())
            {
                return;
            }

            Tweet("Пробуем нарисовать плиту");
            using (var th = new TransactionHelper())
            {
                var sset_line1 = Input.Objects("Выберите линию сечения нижней арматуры", new string[]
                                               { "SEttings", "ПАраметры", "LAyers", "cЛОи" },
                                               SetParams
                                               ); if (Input.StatusBad)
                {
                    return;
                }
                var sset_lines1 = Input.Objects("Выберите нижние арматурные стержни"); if (Input.StatusBad)
                {
                    return;
                }
                var sset_line2 = Input.Objects("Выберите линию сечения верхней арматуры"); if (Input.StatusBad)
                {
                    return;
                }
                var sset_lines2 = Input.Objects("Выберите верхние арматурные стержни"); if (Input.StatusBad)
                {
                    return;
                }

                var ln1    = th.ReadObject(sset_line1[0].ObjectId) as Line;
                var ln2    = th.ReadObject(sset_line2[0].ObjectId) as Line;
                var lines1 = th.ReadObjects(sset_lines1);
                var lines2 = th.ReadObjects(sset_lines2);

                var colors1 = lines1.Select((ln) => ln.Color).ToList();
                var colors2 = lines2.Select((ln) => ln.Color).ToList();

                dot_data1 = lines1.Select((ln) => {
                    return(new Tuple <double, Color>(UT.IntersectWith(ln, ln1)[0].X, ln.Color));
                }
                                          ).ToList();
                dot_data2 = lines2.Select((ln) => {
                    return(new Tuple <double, Color>(UT.IntersectWith(ln, ln2)[0].X, ln.Color));
                }
                                          ).ToList();

                th.WriteObjects(Slab(thickness, ln1.StartPoint.X, ln1.EndPoint.X, offset_up, offset_down, dots_up, dots_down));
            }
        }
コード例 #3
0
        /// <summary>
        /// Сравнение двух кривых исходя из направления сортировки
        /// </summary>
        /// <param name="x">первая кривая</param>
        /// <param name="y">вторая кривая</param>
        /// <param name="sorting_direction">кривая, по которой определяется направление сортировки</param>
        /// <returns></returns>
        /// <param name = "extend">Удлиннение</param>
        public static int CurveCompare(this Curve x, Curve y, Curve sorting_direction, bool extend)
        {
            //берем первые точки пересечения. Не забыть проверить есть ли они
            try
            {
                Point3d ptx = Utilities.IntersectWith(x, sorting_direction, extend)[0];
                Point3d pty = Utilities.IntersectWith(y, sorting_direction, extend)[0];

                return(sorting_direction.GetParameterAtPoint(ptx).CompareTo(sorting_direction.GetParameterAtPoint(pty)));
            }
            catch (Exception)
            {
                Messaging.Tweet("Не можем сравнить линии");
                return(0);
            }
        }
コード例 #4
0
ファイル: MultiLeader.cs プロジェクト: koropet/PKUserTools
        /// <summary>
        /// Мультивыноска из объектов со стрелками на одной линии
        /// </summary>
        public void MakeArrowsInline()
        {
            base.Execute();
            asc = UT.GetAnnoScale("CANNOSCALE");
            var     objects = new List <Entity>();
            var     points = new List <Point3d>();
            Point3d p1, p2;
            Line    p1p2;

            Vector3d offset = new Vector3d(2, 3.6, 0);

            var sset = Input.Objects("Выберите объекты"); if (Input.StatusBad)

            {
                return;
            }


            p1 = Input.Point("Выберите точку мультивыноски"); if (Input.StatusBad)
            {
                return;
            }
            p2 = Input.Point("Выберите точку для задания направления"); if (Input.StatusBad)
            {
                return;
            }

            p1p2 = new Line(p1, p2);
            Tweet("\nНачинаем транзакцию");
            using (var th = new TransactionHelper())
            {
                objects = th.ReadObjects(sset);

                Tweet("\nНачинаем поиск точек");
                foreach (Entity ent in objects)
                {
                    var pt_arr = UT.IntersectWith(p1p2, ent);
                    if (pt_arr.Count > 0)
                    {
                        points.Add(pt_arr[0]);
                    }
                }

                Tweet("\nНачинаем подготовку текста");

                mtp  = p1;
                text = "хх";
                PrepareMtext(0);

                Tweet("\nНачинаем подготовку выноски");
                MLeader mleader = new MLeader();
                mleader.SetDatabaseDefaults();
                mleader.ContentType = ContentType.MTextContent;

                mt.TransformBy(Matrix3d.Displacement(offset.DivideBy(asc.Scale)));

                mleader.MText = mt;

                Tweet("\nДобавляем линии");
                foreach (Point3d ptt in points)
                {
                    int idx = mleader.AddLeaderLine(p1);
                    mleader.SetFirstVertex(idx, ptt);
                }
                Tweet("\nЗаписываем объекты");
                th.WriteObject(mleader);
            }
        }