работа с графиком:
1. строим график
2. смотрим/зумируем/панируем - если "не подходит" -> goto 1
3. если "подходит" -> сохраняем. грузим след.график -> goto 1
программа получает поток "[x,y]" - на основе чего строится график.
сохранять нужно в текстовый файл именно этот самый "набора точек" видимой части (зум & пано)
как это сделать?! есть 2 пути:
### 1й вариант (решение в лоб)
- строим график (тут-же сохраняем данные в файл)
минусы:
- небольшой оверхед по сохранению (фигня)
- игнорируется зум/пано -> получаем "полный график" (не фигня)
### 2й вариант
- строим график, если "подходит" - сохраняем
задача:
- данные нужно как-то вытянуть из компонентов
- нужны данные только видимой части
вопрос:
- возможно-ли реализовать 2й вариант?
ваши идеи/ссылки, пендили, помидоры :о)
спасибо
lazarus-3.2.0, fpc-3.2.2
slackware 14.2/15.0 x64
p.s.
как выдрать "поток данных" из компоненты - вроде разобрался.
теперь бы понять как определить "находится ли данная точка в окне просмотра или лежит вне?!
function IsPointInViewPort(const AP: TDoublePoint): Boolean;
Посмотри на масштаб и границы шкал и выбери точки из диапазона
да я вроде уже нашел нужную пункциЮ, нет?! > IsPointInViewPort() разбираюсь с обьектами/наследием
В чарте много бреда, хотя можно сделать то, что нужно, но совсем не тем, чем нужно 😊
бла-бла-бла... я так тоже умею :о) по данной функции - что скажете, то или нет?! я и сам знаю какой там редкостный цирк... :о) другое дело, зачем изобретать то, что уже реализовано?!
я не знаю досконально всех функций, если она работает, то на здоровье, если она начнет выкидывать фортеля, то можно взять значения из диапазона шкал, это важно, если шкал несколько вдоль одной оси
абосольютно согласен! диаппазон будет в данном случае наиболее оптимален. но пока вот разбираюсь в строении/ооп итд всего этого ... (мозги закипают... быстро не получается, решил поинтересоваться, может кто уже решал что-то подобное) > шкал несколько мне пока с одной надо разобраться
несколько шкал, разные типы серий, зум\пан
function TChartSeries.ListSource: TListChartSource; begin // // Source : TCustomChartSource // TCustomChartSource -> TListChartSource // Result := TListChartSource(Source); end; а это вообще нормально - преобразовывать тип в более верхний, по отношению к текущему ?! я понимаю "понизить" до общего "родительского" ... но наоборот... (или я туплю?!)
Это нормально, если есть уверенность, что настоящий тип действительно такой
по большому счету все серии задаются addXY (за исключением парочки), то есть все сводится к двум координатам. Вся эта битва с типами - пустая.
да откудава он такой?! исходный/поле property Source : TCustomChartSource read GetSource write SetSource stored IsSourceStored; а преобразуется к TListChartSource
смотреть надо там, где Create делали, чтобы запихнуть в этот Source.
> Вся эта битва с типами - пустая ни чего не понял...
вот более полный выкус (если я не ошибаюсь) ``` TChartSeries = class(TCustomChartSeries) strict private FBuiltinSource : TCustomChartSource; FSource : TCustomChartSource; function GetSource : TCustomChartSource; procedure SetSource (AValue: TCustomChartSource); public property Source : TCustomChartSource read GetSource write SetSource stored IsSourceStored; function TChartSeries.GetSource: TCustomChartSource; begin if Assigned(FSource) then Result := FSource else Result := FBuiltinSource; end; function TChartSeries.AddXY(AX, AY: Double; AXLabel: String; AColor: TColor): Integer; begin // ListSource -> вызов функции, БЛЯТЬ, Result := ListSource.Add(AX, AY, AXLabel, AColor); // TChartSeries.ListSource() return TListChartSource end; function TChartSeries.ListSource: TListChartSource; begin // // Source : TCustomChartSource // TCustomChartSource -> TListChartSource // Result := TListChartSource(Source); end; ````
Обсуждают сегодня