Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Кто-нибудь может подсказать

621
23 марта 2004 года
Бешеный кролик
151 / / 23.03.2004
Почему функция Polyline дает возможность чертить ломаную не более чем из примерно 15-16 тыс. точек,а если задать массив из 20 000, то не чертится ничего? Пробовал API-ную Polyline - тот же эффект. А если сделать Pen->Width=2, то уже и из 3000 точек ломаной не получается.

Можно ли это как-то обойти. Если нет, то может быть подскажете какой-нибудь другой метод быстрого построения ломаной (с большим кол-вом точек). C помощью LineTo выходит слишком медленно.

Заранее благодарен.
358
23 марта 2004 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by Бешеный кролик
Почему функция Polyline дает возможность чертить ломаную не более чем из примерно 15-16 тыс. точек,а если задать массив из 20 000, то не чертится ничего? Пробовал API-ную Polyline - тот же эффект. А если сделать Pen->Width=2, то уже и из 3000 точек ломаной не получается.

Можно ли это как-то обойти. Если нет, то может быть подскажете какой-нибудь другой метод быстрого построения ломаной (с большим кол-вом точек). C помощью LineTo выходит слишком медленно.

Заранее благодарен.


Насколько я помню у PolyLine было только одно неявное ограничение - количество точек должно быть кратно 3.А вообще примерчик в студию.

621
23 марта 2004 года
Бешеный кролик
151 / / 23.03.2004
Цитата:
Originally posted by moonmike

Насколько я помню у PolyLine было только одно неявное ограничение - количество точек должно быть кратно 3.А вообще примерчик в студию.


Нет такого ограничения у Polyline, ты с PolyBezier путаешь.

А вот и примерчик:

в массиве double graph[2][100000] сидит график, который прекрасно строится, если сделать так:

Canvas->MoveTo(graph[0][0],graph[1][0]);
for (i=1;i<100000;i++)
Canvas->LineTo(graph[0],graph[1]);


Теперь объявим массив TPoint и загоним туда точки:

TPoint ppp[100000];
for (i=0;i<100000;i++) ppp=Point(graph[0],graph[1]);

Вот если теперь выполнить функцию
Canvas->Polyline(ppp,10000);

то строится часть графика, причем очень быстро.

А если, например Canvas->Polyline(ppp,20000);
то ничего не строится, Canvas остается пустым.

Не помогает также непосредственный вызов API-ной функции Polyline(Canvas->Handle,ppp,20000),
а Polyline(Canvas->Handle,ppp,10000) - опять-таки работает!

Я чего-то не знаю, не понимаю или все же это - глюк?

И если да, то какие еще есть методы быстрой отрисовки ломаной?

Спасибо.

358
23 марта 2004 года
moonmike
423 / / 18.10.2002
А ось у вас случайно не 98??
621
23 марта 2004 года
Бешеный кролик
151 / / 23.03.2004
Цитата:
Originally posted by moonmike
А ось у вас случайно не 98??



Millenium и надо, чтобы под ней тоже работало.
А по-вашему в этом причина?

358
23 марта 2004 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by Бешеный кролик


Millenium и надо, чтобы под ней тоже работало.
А по-вашему в этом причина?


Да давным давно, что-то где-то проскакивало про глюки GDI в семействе 9x, даже в MS KB описано, правда я не в курсе распросраняются ли они на вымя.

621
23 марта 2004 года
Бешеный кролик
151 / / 23.03.2004
Цитата:
Originally posted by moonmike

Да давным давно, что-то где-то проскакивало про глюки GDI в семействе 9x, даже в MS KB описано, правда я не в курсе распросраняются ли они на вымя.



А! Значит все-таки есть вероятность, что глюк. Что ж спасибо за ответы.
А вот насчет быстрого построения ломаной другим способом. Т.е. если строишь при одинарной толщине линии, то более менее быстро, а вот при двойной - уже не очень :(. Как быть?

358
23 марта 2004 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by Бешеный кролик


А! Значит все-таки есть вероятность, что глюк. Что ж спасибо за ответы.
А вот насчет быстрого построения ломаной другим способом. Т.е. если строишь при одинарной толщине линии, то более менее быстро, а вот при двойной - уже не очень :(. Как быть?


Уходить от GDI.это его особенности и тут уж ничего не поделаешь.

358
31 марта 2004 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by Бешеный кролик


А! Значит все-таки есть вероятность, что глюк. Что ж спасибо за ответы.
А вот насчет быстрого построения ломаной другим способом. Т.е. если строишь при одинарной толщине линии, то более менее быстро, а вот при двойной - уже не очень :(. Как быть?


Вот нарыл тут. Оказывается это не глюк, так как он описан, а документированный глюк есть фича=)

Цитата:

Remarks
The lines are drawn from the first point through subsequent points by using the current pen. Unlike the LineTo or PolylineTo functions, the Polyline function neither uses nor updates the current position.

Windows 95/98/Me: Polyline cannot draw more than a certain number of points. The limit depends on the line width (that is, the width of the pen selected into the DC), as shown in the following table.

Line width Maximum points allowed
line width is 1 16K
line width > 1 (that is, wideline) and device supports wideline 16K
line width > 1 but device does not support wideline approximately 1360 (that is, approximately 16K / 12)


Any extra points are ignored. To draw a line with more points, divide the data into groups that have less than the maximum number of points and call the function for each group of points. Remember to connect the line segments.

621
01 апреля 2004 года
Бешеный кролик
151 / / 23.03.2004
Цитата:
Originally posted by moonmike

Вот нарыл тут. Оказывается это не глюк, так как он описан, а документированный глюк есть фича=)



Спасибо большое, теперь уже точно можно говорить - почему так эти операторы работают.
А если не секрет, где вы взяли этот текст? В MSDN вроде бы нет.

358
02 апреля 2004 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by Бешеный кролик


Спасибо большое, теперь уже точно можно говорить - почему так эти операторы работают.
А если не секрет, где вы взяли этот текст? В MSDN вроде бы нет.


Да в нем родимом в 2003 и взял

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог