示例#1
0
        public static Body MultiCylinder(int circlePointsCount, double firstRadius, double secondRadius, double height)
        {
            Body newCube = new Body()
            {
                name = "MultiCylinder"
            };

            double alfa = 2 * Math.PI / circlePointsCount;
            double padding;
            if (firstRadius > secondRadius)
                padding = firstRadius;
            else
                padding = secondRadius;

            var firstConnection = new Connection();
            var secondConnection = new Connection();

            Point firstPoint, secondPoint;
            Connection heightConnection;
            for (int i = 0; i < circlePointsCount; i++)
            {

                heightConnection = new Connection();
                firstPoint = new Point()
                {
                    X = padding + firstRadius * Math.Cos(alfa * i),
                    Y = padding + firstRadius * Math.Sin(alfa * i),
                    Z = 0
                };

                secondPoint = new Point()
                {
                    X = padding + secondRadius * Math.Cos(alfa * i),
                    Y = padding + secondRadius * Math.Sin(alfa * i),
                    Z = height
                };

                heightConnection.points.Add(secondPoint);
                heightConnection.points.Add(firstPoint);

                firstConnection.points.Add(firstPoint);
                secondConnection.points.Add(secondPoint);

                newCube.connections.Add(heightConnection);
                newCube.points.Add(firstPoint);
                newCube.points.Add(secondPoint);
            }

            firstConnection.points.Add(firstConnection.points.First());
            secondConnection.points.Add(secondConnection.points.First());
            newCube.connections.Add(firstConnection);
            newCube.connections.Add(secondConnection);

            newCube.GenerateAxles();
            newCube.ReloadBody();
            return newCube;
        }
示例#2
0
 public Connection export()
 {
     var exportConnection= new Connection();
     foreach (var point in points)
     {
         var newPoint = new Point()
         {
             X = point.X,
             Y = point.Y,
             Z = point.Z
         };
         exportConnection.points.Add(newPoint);
     }
     exportConnection.color = color;
     exportConnection.name = name;
     return exportConnection;
 }
示例#3
0
        /// <summary>
        /// Чтение тела из файла. 
        /// </summary>
        /// <param name="source">Пишется относительный путь к файлу, пример - source/car.txt</param>
        /// <param name="shouldClear">Нужно ли очистить тело, перед чтением из файла. </param>
        public bool LoadingFromResource(string source, bool shouldClear)
        {
            if (shouldClear)
            {
                points.Clear();
                connections.Clear();                                                        //очищаем тело
                axles.customs.Clear();
            }

            try
            {
                FileStream stream = File.Open(source, FileMode.Open, FileAccess.Read);
                StreamReader reader = new StreamReader(stream);                         // открытие файла и запуск читалки

                try
                {
                    string currentPositionInFile = reader.ReadLine();                   // начниаем с точек
                    if (currentPositionInFile == "Points")
                    {
                        currentPositionInFile = reader.ReadLine();
                        do
                        {
                            var coordinates = currentPositionInFile.Split(' ');         // разбиваем строку на массив
                            points.Add(new Point()                                      // создаём точку, парсим координаты, заносим в список
                            {
                                X = int.Parse(coordinates[0]),
                                Y = int.Parse(coordinates[1]),
                                Z = int.Parse(coordinates[2])
                            });
                            currentPositionInFile = reader.ReadLine();

                        }
                        while (currentPositionInFile != "Connections");                 // заканчиваем соединенями
                    }
                    else return false;

                    if (currentPositionInFile == "Connections")                         // продолжаем соединениями
                    {
                        currentPositionInFile = reader.ReadLine();
                        do
                        {
                            var connectionPointsNumbers = currentPositionInFile.Split(' ').ToList();      // разбиваем на массив номеров точек
                            var newConnection = new Connection();                                // создаём новое соединение

                            var nameAndColorCheckTemp = 0;
                            while (!int.TryParse(connectionPointsNumbers[0], out nameAndColorCheckTemp)) // проверяем на кастомные имя и цвет
                            {
                                var nameAndColorParseTemp = connectionPointsNumbers[0];
                                if (nameAndColorParseTemp[0] != '#')
                                    newConnection.name = nameAndColorParseTemp;
                                else
                                {
                                    System.Windows.Media.Color currentColor = System.Windows.Media.Colors.Red;
                                    try
                                    {
                                        try
                                        {
                                            currentColor = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString(nameAndColorParseTemp);
                                        }
                                        catch
                                        {
                                            var color = Color.FromName(nameAndColorParseTemp.Substring(1));
                                            {
                                                currentColor = new System.Windows.Media.Color()
                                                {
                                                    A = color.A,
                                                    R = color.R,
                                                    G = color.G,
                                                    B = color.B
                                                };
                                            }
                                        }
                                    }
                                    catch
                                    {

                                    }

                                   newConnection.color = new System.Windows.Media.SolidColorBrush(currentColor);
                                }
                                connectionPointsNumbers.Remove(nameAndColorParseTemp);
                            }
                            foreach (string pointNumber in connectionPointsNumbers)              // идём по номерам
                            {
                                var currentPoint = points[int.Parse(pointNumber) - 1];           // парсим номер, берём точку, заносим в соединение
                                newConnection.points.Add(currentPoint);
                            }

                            connections.Add(newConnection);                                      // добавляем соединение в тело

                            currentPositionInFile = reader.ReadLine();
                        }
                        while (currentPositionInFile != "Axles");
                    }
                    else return false;

                    if (currentPositionInFile == "Axles")                               // продолжаем осями
                    {
                        var axlesSet = new AxleSet() { customs = axles.customs };                                   // создаем сет осей
                        currentPositionInFile = reader.ReadLine();
                        do
                        {

                            var axleInfo = currentPositionInFile.Split(' ');            // разбиваем строку на инфу. собираем две точки и ось
                            var firstPointInfo = axleInfo.Skip(1).TakeWhile(x => x != ",").ToArray();
                            var secondPointInfo = axleInfo.Skip(5).ToArray();
                            var firstPoint = new Point()
                                        {
                                            X = double.Parse(firstPointInfo[0]),
                                            Y = double.Parse(firstPointInfo[1]),
                                            Z = double.Parse(firstPointInfo[2])
                                        };
                            var secondPoint = new Point()
                                        {
                                            X = double.Parse(secondPointInfo[0]),
                                            Y = double.Parse(secondPointInfo[1]),
                                            Z = double.Parse(secondPointInfo[2])
                                        };
                            var axle = new Axle()
                                    {
                                        info = axleInfo[0],
                                        firstPoint = firstPoint,
                                        secondPoint = secondPoint

                                    };
                            switch (axle.info)                                        // заносим ось в сет
                            {
                                case "x":
                                    axlesSet.X = axle;
                                    break;
                                case "y":
                                    axlesSet.Y = axle;
                                    break;
                                case "z":
                                    axlesSet.Z = axle;
                                    break;
                                default:
                                    axlesSet.customs.Add(axle);
                                    break;
                            }

                            points.Add(firstPoint);                                     // обязательно заносим точки в тело, потому что они у нас динамические
                            points.Add(secondPoint);

                            currentPositionInFile = reader.ReadLine();
                        }
                        while (currentPositionInFile != "End");
                        axles = axlesSet;                                               // добавляем ось в сет

                    }
                    else return false;
                }
                catch (Exception exp)
                {
                    return false;
                }
                reader.Close();
                stream.Close();
                ReloadBody();                                                           // переобрабатываем тело
                return true;
            }
            catch (Exception exp)
            {
                return false;                                                                 // Если произошла ошибка в чтении файла
            }
        }