pro spd_ui_draw_object::makeMinorTicks,range,scaling,minorNum,majorValues,majorSpacing,logMinorTickType,minorValues=minorValues,fail=fail
compile_opt idl2,hidden
fail = 1
tolerance = .01
undefine,minorValues
majorNum = n_elements(majorValues)
n = minorNum+1
if n * majorNum gt self.maxTickNum * 2 then begin
self.statusBar->update,'ERROR: The current settings will result in the creation of ' + strcompress(string(n*majorNum),/remove_all) + ' minor ticks. Draw operation failed.'
self.historyWin->update,'ERROR: The current settings will result in the creation of ' + strcompress(string(n*majorNum),/remove_all) + ' minor ticks. Draw operation failed.'
fail = 1
return
endif
majorValue1 = (majorValues[0] + range[0]/(range[1]-range[0]))*(range[1]-range[0])
majorValue2 = (majorValues[1] + range[0]/(range[1]-range[0]))*(range[1]-range[0])
if scaling eq 1 then begin
base = 10d
endif else begin
base = exp(1)
endelse
if scaling eq 0 || logMinorTickType eq 3 then begin
minorValues = (dindgen(n)*(1D/n))*majorSpacing
endif else if logMinorTickType eq 1 || logMinorTickType eq 2 then begin
stepSize=majorValue2-majorValue1
if logMinorTickType eq 1 then begin
deLogMajorValue1 = base^majorValue1
deLogMajorValue2 = base^(majorValue1+(1<stepSize))
endif else if logMinorTickType eq 2 then begin
deLogMajorValue1 = base^(majorValue2-(1<stepSize))
deLogMajorValue2 = base^(majorValue2)
endif
minorValues = (dindgen(n+1)/(n))*(deLogMajorValue2-deLogMajorValue1) + deLogMajorValue1
idx = where(minorValues ge base^majorValue1 and minorValues le base^majorValue2,c)
if c eq 0 then begin
minorValues = [base^majorValue1,base^majorValue2]
n=1
endif else begin
minorValues = minorValues[idx]
if minorValues[0] gt ((base^majorValue1)+(base^majorValue2-base^majorValue1)*tolerance) then begin
minorValues = [base^majorValue1,minorValues]
endif
if minorValues[n_elements(minorValues)-1] lt ((base^majorValue2)-(base^majorValue2-base^majorValue1)*tolerance) then begin
minorValues = [minorValues,base^majorValue2]
endif
n = (n_elements(minorValues)-1 < n)
endelse
if scaling eq 1 then begin
minorValues = alog10(minorValues)
endif else begin
minorValues = alog(minorValues)
endelse
minorValues = majorSpacing*((minorValues[0:n]) - majorValue1)/(majorValue2-majorValue1)
endif else begin
minorValues = alog10(10*dindgen(n+2)/(n+1)+1)*(majorValue2-majorValue1)/(range[1]-range[0])
endelse
minorInd1 = lindgen((majorNum+1)*(n)) / long(n)
minorInd2 = lindgen((majorNum+1)*(n)) mod long(n)
minorValues = majorValues[minorInd1]+minorValues[minorInd2]
idx = where(minorValues lt 1. and minorValues gt 0.,c)
if c gt 0 then begin
minorValues = minorValues[idx]
fail = 0
endif else begin
minorValues = minorValues[0]
fail = 1
endelse
return
end