Кто-нибудь может подсказать
Можно ли это как-то обойти. Если нет, то может быть подскажете какой-нибудь другой метод быстрого построения ломаной (с большим кол-вом точек). C помощью LineTo выходит слишком медленно.
Заранее благодарен.
Почему функция Polyline дает возможность чертить ломаную не более чем из примерно 15-16 тыс. точек,а если задать массив из 20 000, то не чертится ничего? Пробовал API-ную Polyline - тот же эффект. А если сделать Pen->Width=2, то уже и из 3000 точек ломаной не получается.
Можно ли это как-то обойти. Если нет, то может быть подскажете какой-нибудь другой метод быстрого построения ломаной (с большим кол-вом точек). C помощью LineTo выходит слишком медленно.
Заранее благодарен.
Насколько я помню у PolyLine было только одно неявное ограничение - количество точек должно быть кратно 3.А вообще примерчик в студию.
Насколько я помню у 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) - опять-таки работает!
Я чего-то не знаю, не понимаю или все же это - глюк?
И если да, то какие еще есть методы быстрой отрисовки ломаной?
Спасибо.
А ось у вас случайно не 98??
Millenium и надо, чтобы под ней тоже работало.
А по-вашему в этом причина?
Millenium и надо, чтобы под ней тоже работало.
А по-вашему в этом причина?
Да давным давно, что-то где-то проскакивало про глюки GDI в семействе 9x, даже в MS KB описано, правда я не в курсе распросраняются ли они на вымя.
Да давным давно, что-то где-то проскакивало про глюки GDI в семействе 9x, даже в MS KB описано, правда я не в курсе распросраняются ли они на вымя.
А! Значит все-таки есть вероятность, что глюк. Что ж спасибо за ответы.
А вот насчет быстрого построения ломаной другим способом. Т.е. если строишь при одинарной толщине линии, то более менее быстро, а вот при двойной - уже не очень :(. Как быть?
А! Значит все-таки есть вероятность, что глюк. Что ж спасибо за ответы.
А вот насчет быстрого построения ломаной другим способом. Т.е. если строишь при одинарной толщине линии, то более менее быстро, а вот при двойной - уже не очень :(. Как быть?
Уходить от GDI.это его особенности и тут уж ничего не поделаешь.
А! Значит все-таки есть вероятность, что глюк. Что ж спасибо за ответы.
А вот насчет быстрого построения ломаной другим способом. Т.е. если строишь при одинарной толщине линии, то более менее быстро, а вот при двойной - уже не очень :(. Как быть?
Вот нарыл тут. Оказывается это не глюк, так как он описан, а документированный глюк есть фича=)
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.
Вот нарыл тут. Оказывается это не глюк, так как он описан, а документированный глюк есть фича=)
Спасибо большое, теперь уже точно можно говорить - почему так эти операторы работают.
А если не секрет, где вы взяли этот текст? В MSDN вроде бы нет.
Спасибо большое, теперь уже точно можно говорить - почему так эти операторы работают.
А если не секрет, где вы взяли этот текст? В MSDN вроде бы нет.
Да в нем родимом в 2003 и взял