Я не могу понять, как оптимизировать чертеж NSView, который содержит NSBezierPath.
Позвольте мне попытаться объяснить, что я имею в виду.У меня есть линейный график, составленный примерно из 40 тысяч точек, который я хочу нарисовать.У меня есть все точки, и мне легко один раз нарисовать полный график, используя следующий код:
NSInteger npoints=[delegate returnNumOfPoints:self]; //get the total number of points
aRange=NSMakeRange(0, npoints); //set the range
absMin=[delegate getMinForGraph:self inRange:aRange]; //get the Minimum y value
absMax=[delegate getMaxForGraph:self inRange:aRange]; //get the Maximum y value
float delta=absMax-absMin; //get the height of bound
float aspectRatio=self.frame.size.width/self.frame.size.heigh //compensate for the real frame
float xscale=aspectRatio*(absMax-absMin); // get the width of bound
float step=xscale/npoints; //get the unit size
[self setBounds:NSMakeRect(0.0, absMin, xscale, delta)]; //now I can set the bound
NSSize unitSize={1.0,1.0};
unitSize= [self convertSize:unitSize fromView:nil];
[NSBezierPath setDefaultLineWidth:MIN(unitSize.height,unitSize.width)];
fullGraph=[NSBezierPath bezierPath];
[fullGraph moveToPoint:NSMakePoint(0.0, [delegate getValueForGraph:self forPoint:aRange.location])];
//Create the path
for (long i=1; i<npoints; i++)
{
y=[delegate getValueForGraph:self forPoint:i];
x=i*step;
[fullGraph lineToPoint:NSMakePoint(x,y)];
}
[[NSColor redColor] set];
[fullGraph stroke];
Так что теперь у меня есть весь график, сохраненный в форме NSBezierPath в реальной координате, который я могу обводить,Но давайте предположим, что теперь я хочу отобразить график с добавлением одной точки за раз как можно быстрее.
Я не хочу рисовать весь набор точек каждый раз.Я хочу использовать, если возможно, полный график и визуализировать только небольшую часть.Допустим, я хочу рендерить в одном кадре только первые 1000 точек.Есть ли какая-либо возможность (изменение границ и, в конечном итоге, масштабирование пути каким-либо образом) для отображения только первой части графика в правильных границах?
Я не смог получить результат, потому что, если я изменяю границызатем масштаб изменяется, и я не могу решить проблему с шириной линии.