I packed the entire FitSeries into the TAFuncSeries unit, this avoids exposing the DrawFuncHelper. Some issues are fixed, others are new:
- Using the DrawFuncHelper, the logarithmic fit curves are drawn correctly.
- There's an issue with log axes: run the program and select the third test function (exponential). When switching to log y the program crashes. This seems to be due to the negative values of the fitted curve between x=70 and 80. The AxisToGraph method of the LogarithmAxisTransform returns -INF for negative numbers. Some procedures in the library go crazy with that input - see my other posting. Ideally, the rest of the data should be drawn correctly, the illegal values should be ignored, at least optionally.
- I implemented the overridden AddSeries method and removed the Apply button. When clicking on "FitRange / Use Minimum" now the shorter fit curve is drawn immediately, but the ExecFit procedure is still not executed. This is my understanding of the notification sequence: change of FitRange --> FitRange.StyleChanged --> Chart.StyleChanged--> Broadcast --> Series Listener calls SourceChanged of Series. TFitSeries overrides the SourceChanged method and should run the fit, but it is not called. What is wrong?
- Old story: logarithmic labels. After playing around quite a lot, I found settings which avoid the chartsource and show the full decade labels (Options = [aiGraphCoords, aipUseMinLength, aipUseMaxLength, aipUseNiceSteps], MinLength=50, MaxLength=200, NiceSteps='1'), as well as settings for the constant intervals on log axis (Options = [aipUseMinLength, aipUseNiceSteps], MinLength=10, NiceSteps=log2|log5|log10). In the latter case, however, the labels are too far apart - run the program with the first test function and the first fit function, and activate log y. How can I reduce the interval length from 100 to, say, 20?