Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2011, 13:05   #11
djKeysi
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 18
По умолчанию

есть несколько таких стро как их прально написать? по отдельности
m 67.402531,1026.4466 1.12371,0.8423 -10.675575,13.8097 -1.123701,-0.843 z
m 7.834615,10.3028 1.12563,0.8406 -10.53791,13.6861 -1.12565,-0.8399 z
выручи плз
djKeysi вне форума Ответить с цитированием
Старый 09.08.2011, 13:34   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так, что ли?

Код:
        private void GetGraphicsFromStr(string str, List<PointF> pointList2, out float x0, out float y0)
        {
            x0 = 0f; y0 = 0f;
            if ((str.IndexOf("m") >= 0) && str.IndexOf("z") > str.IndexOf("m"))
            {
                str = str.Substring(str.IndexOf("m") + 1, str.IndexOf("z") - str.IndexOf("m") - 1).Trim();
                while (str.IndexOf("  ") >= 0) str = str.Replace("  ", " ");
                str = str.Replace(" ", ",");
                int i = 0;
                textBox1.Text = "";
                x0 = 0f; y0 = 0f;
                pointList2.Clear();
                PointF lastPoint = new PointF(0, 0);
                pointList2.Add(lastPoint);
                foreach (string s in str.Split(','))
                {
                    switch (i)
                    {
                        case 0: x0 = Convert.ToSingle(s);
                            break;
                        case 1: y0 = Convert.ToSingle(s);
                            break;
                        default:
                            if (i % 2 == 0)
                            {
                                lastPoint.X += Convert.ToSingle(s);
                            }
                            else
                            {
                                lastPoint.Y += Convert.ToSingle(s);
                                pointList2.Add(lastPoint);
                            }
                            break;
                    }
                    i++;
                    // textBox1.Text += i++.ToString() + ": " + s + " ";
                }
            }
        }

        private void DrawFigure(string FigureCoords, PaintEventArgs e, Pen myPen, List<PointF> pointList2, out float x0, out float y0)
        {
            e.Graphics.ResetTransform();
            GetGraphicsFromStr(FigureCoords,
                                pointList2, out x0, out y0);

            e.Graphics.TranslateTransform(x0, y0);
            e.Graphics.ScaleTransform(3.0f, 3.0f);


            PointF[] points2 = pointList2.ToArray();
            System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
            path.AddLines(points2);
            path.CloseFigure();
            e.Graphics.DrawPath(myPen, path);
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            e.Graphics.TranslateTransform(this.Size.Width / 2, this.Size.Height / 2);
            e.Graphics.ScaleTransform(3.0F, 1.0F);

            Pen myPen = new Pen(Color.Black, 0.3f);

            List<PointF> pointList2 = new List<PointF>();
            System.Drawing.Drawing2D.GraphicsState state = e.Graphics.Save();

            float x0, y0;

            // рисуем 1-ю фигуру
            DrawFigure("m 161.1665,274.02224 6.4094,0.44261 2.6443,-3.71543 -6.4413,-0.41724 z",
                       e, myPen, pointList2, out x0, out y0);

            // рисуем 2-ю фигуру
            DrawFigure("m 7.834615,10.3028 1.12563,0.8406 -10.53791,13.6861 -1.12565,-0.8399 z ",
                       e, myPen, pointList2, out x0, out y0);
            
            e.Graphics.Restore(state);
        }
p.s. неплохо бы в процедуру рисования передавать и цвет кисти и масштабный коэффициент...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.08.2011, 10:03   #13
djKeysi
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 18
По умолчанию

спасибо громадноетак все) вот про масштабный кооэфицент можно поподробнее, у меня целая схема с етими координатами она бы непомешала)

Последний раз редактировалось djKeysi; 10.08.2011 в 10:05.
djKeysi вне форума Ответить с цитированием
Старый 10.08.2011, 10:27   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
вот про масштабный кооэфицент можно поподробнее
Вы не поверите - я Вам помог конкретным примером ТОЛЬКО потому, что Вы выложили конкретный рабочий пример.
Сам я никогда на форме в C# не рисовал и, соответственно, не умею это делать...
В Вашем примере я увидел вот эту строчку:
Цитата:
Код:
         e.Graphics.ScaleTransform(3.0f, 3.0f);
опытным путём установил, что таким образом задаётся масштаб вывода (задаётся масштабный коэффициент по оси X и коэффициент по оси Y) изображения.
поставьте, например
Цитата:
Код:
         e.Graphics.ScaleTransform(15.0f, 15.0f);
посмотрите, что изменится...

вот эти масштабные коэффициенты тоже можно задавать (как удобнее и лучше - это уже Вам решать)...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.08.2011, 13:17   #15
djKeysi
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 18
По умолчанию

Дак это я понел, думал то нить пооригинальне ну ладно)
еше в вашей программе я изминил вот ети строки
Код:
 switch (i)
                    {
                        case 0: x0 = Convert.ToSingle(s.Replace('.', ','));
                            break;
                        case 1: y0 = Convert.ToSingle(s.Replace('.', ','));
                            break;
                        default:
                            if (i % 2 == 0)
                            {
                                lastPoint.X += Convert.ToSingle(s.Replace('.', ','));
                            }
                            else
                            {
                                lastPoint.Y += Convert.ToSingle(s.Replace('.', ','));
                                pointList2.Add(lastPoint);
                            }
                            break;
тогда программа заработала.
И еше при масштабировании например есть 2 квадрата когда масштабируеш они расползаются с одного места на другой, ладно бы только масштабировала а не смещала квадраты(
djKeysi вне форума Ответить с цитированием
Старый 16.08.2011, 06:09   #16
djKeysi
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 18
По умолчанию

Есть такой программный код подскажите плз как считать с хмл документа данные чтобы неписать все эти координаты(

Код:
//Я тут начал писать, ток нечто невыходит,пробую считать хмл файл:
  private void xml()

            XmlDocument doc = new XmlDocument();
                        orders.Clear();
        
                        doc.Load(map.xml);
                        XmlNodeList list = doc.ChildNodes;
                        svg.Appendtext(list.count.Tostring());
                         XmlNodeList ordersList = doc.DocumentElement.ChildNodes;
        foreach (XmlNode gigi in doc.DocumentElement[g].ChildNodes)
                   {
                       string value = gigi.Attributes["d"].Value;
                   }

            string pars;
                   string[] dva = pars.Split(new Char[] { ',' });
                   string m = dva[0];
                   string[] coord1 = dva[1].Split(new Char[] { ' ' });
                   string coord1_x = coord1[0];
                   string coord1_y = coord1[1];
                   string[] coord2 = dva[2].Split(new Char[] { ' ' });
                   string coord2_x = coord1[0];
                   string coord2_y = coord1[1];
                   string d = dva[3];
Сама программа и хмл файл в приложении
выработки.rar
map.rar

Последний раз редактировалось djKeysi; 16.08.2011 в 10:21.
djKeysi вне форума Ответить с цитированием
Старый 16.08.2011, 11:40   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

XPath + XmlDocument.SelectNodes
а помоему даже нужна будет вторая версия SelectNodes.
ибо пространст имен то там...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.08.2011, 13:04   #18
djKeysi
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 18
По умолчанию

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Xml;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            e.Graphics.TranslateTransform(-33.309996f, -291.935f);
            //e.Graphics.ScaleTransform(13.0F, 13.0F);

            Pen myPen = new Pen(Color.Black, 0.3f);

            List<PointF> pointList2 = new List<PointF>();
            System.Drawing.Drawing2D.GraphicsState state = e.Graphics.Save();

            XmlDocument doc = new XmlDocument();
            doc.Load(@"C:\Users\user\Documents\Visual Studio 2005\Projects\выработки\выработки\map.xml");
            XmlNodeList list = doc.ChildNodes;
            //svg.Appendtext(list.count.Tostring());
            XmlNodeList ordersList = doc.DocumentElement.ChildNodes;
            foreach (XmlNode gigi in doc.DocumentElement["g"].ChildNodes)
            {
                string pars = gigi.Attributes["d"].Value;
                string[] mas = pars.Split(new Char[] { ' ' });
                List<PointF> pointsList2 = new List<PointF>();
                PointF[] points2 = pointList2.ToArray();
                for (int i = 0; i < mas.Length; i++)
                {
                    if (mas[i].Contains(","))
                    {
                        string[] temp = mas[i].Split(new Char[] { ',' });
                        PointF point = new PointF();
                        point.X = Convert.ToSingle(temp[0]);
                        point.Y = Convert.ToSingle(temp[1]);
                        pointsList2.Add(point);
                    }
                }
                double m = (float)Convert.ToDouble(mas[0]);
                double z = (float)Convert.ToDouble(mas[mas.Length - 1]);

            }
        }
        }
    }
поправте что нетак плз(

Последний раз редактировалось djKeysi; 17.08.2011 в 13:09.
djKeysi вне форума Ответить с цитированием
Старый 18.08.2011, 07:14   #19
djKeysi
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 18
По умолчанию

help pls написать этот код правильно чтоб файл хтмл читался(
djKeysi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
разбор строки D_e_n_n Помощь студентам 2 03.03.2011 15:22
Разбор строки DenisVoronov Помощь студентам 11 18.11.2010 11:18
Разбор строки... CodeExpert Помощь студентам 3 23.02.2010 18:16
разбор строки на части Wi1D Общие вопросы C/C++ 7 27.12.2009 23:31
Разбор строки GPS TIT0 Общие вопросы C/C++ 1 08.03.2009 18:44