@@ -37,54 +37,43 @@ internal object NexradDecodeEightBit {
3737 try {
3838 val dataInputStream = UtilityIO .uncompress(context, radarBuffers.fileName)
3939 dataInputStream.skipBytes(30 )
40- var numberOfRleHalfWords: Int
4140 radarBuffers.colormap.redValues.put(0 , Color .red(radarBuffers.bgColor).toByte())
4241 radarBuffers.colormap.greenValues.put(0 , Color .green(radarBuffers.bgColor).toByte())
4342 radarBuffers.colormap.blueValues.put(0 , Color .blue(radarBuffers.bgColor).toByte())
4443 radarBuffers.floatBuffer.position(0 )
4544 radarBuffers.colorBuffer.position(0 )
46- var angle: Float
47- var angleV: Float
48- var level: Byte
49- var levelCount: Int
50- var binStart: Float
5145 var colorIndex = 0
5246 var radialIndex = 0
53- var curLevel: Byte
54- var angleSin: Float
55- var angleCos: Float
56- var angleVSin: Float
57- var angleVCos: Float
5847 var angleNext = 0.0f
5948 var angle0 = 0.0f
6049 val numberOfRadials = radarBuffers.numberOfRadials
6150 for (radialNumber in 0 until numberOfRadials) {
62- numberOfRleHalfWords = dataInputStream.readUnsignedShort()
63- angle = 450.0f - dataInputStream.readUnsignedShort() / 10.0f
51+ val numberOfRleHalfWords = dataInputStream.readUnsignedShort()
52+ val angle = 450.0f - dataInputStream.readUnsignedShort() / 10.0f
6453 dataInputStream.skipBytes(2 )
6554 if (radialNumber < numberOfRadials - 1 ) {
6655 dataInputStream.mark(100000 )
6756 dataInputStream.skipBytes(numberOfRleHalfWords + 2 )
6857 angleNext = 450.0f - dataInputStream.readUnsignedShort() / 10.0f
6958 dataInputStream.reset()
7059 }
71- level = 0 .toByte()
72- levelCount = 0
73- binStart = radarBuffers.binSize
60+ var level = 0 .toByte()
61+ var levelCount = 0
62+ var binStart = radarBuffers.binSize
7463 if (radialNumber == 0 ) {
7564 angle0 = angle
7665 }
77- angleV = if (radialNumber < numberOfRadials - 1 ) {
66+ val angleV = if (radialNumber < numberOfRadials - 1 ) {
7867 angleNext
7968 } else {
8069 angle0
8170 }
82- angleVCos = cos(angleV / M_180_DIV_PI )
83- angleVSin = sin(angleV / M_180_DIV_PI )
84- angleCos = cos(angle / M_180_DIV_PI )
85- angleSin = sin(angle / M_180_DIV_PI )
71+ val angleVCos = cos(angleV / M_180_DIV_PI )
72+ val angleVSin = sin(angleV / M_180_DIV_PI )
73+ val angleCos = cos(angle / M_180_DIV_PI )
74+ val angleSin = sin(angle / M_180_DIV_PI )
8675 for (bin in 0 until numberOfRleHalfWords) {
87- curLevel = (dataInputStream.readUnsignedByte() and 0xFF ).toByte()
76+ val curLevel = (dataInputStream.readUnsignedByte() and 0xFF ).toByte()
8877 if (bin == 0 ) {
8978 level = curLevel
9079 }
@@ -93,17 +82,38 @@ internal object NexradDecodeEightBit {
9382 } else {
9483 radarBuffers.floatBuffer.putFloat(radialIndex, binStart * angleVCos)
9584 radarBuffers.floatBuffer.putFloat(radialIndex + 4 , binStart * angleVSin)
96- radarBuffers.floatBuffer.putFloat(radialIndex + 8 , (binStart + radarBuffers.binSize * levelCount) * angleVCos)
97- radarBuffers.floatBuffer.putFloat(radialIndex + 12 , (binStart + radarBuffers.binSize * levelCount) * angleVSin)
98- radarBuffers.floatBuffer.putFloat(radialIndex + 16 , (binStart + radarBuffers.binSize * levelCount) * angleCos)
99- radarBuffers.floatBuffer.putFloat(radialIndex + 20 , (binStart + radarBuffers.binSize * levelCount) * angleSin)
85+ radarBuffers.floatBuffer.putFloat(
86+ radialIndex + 8 ,
87+ (binStart + radarBuffers.binSize * levelCount) * angleVCos
88+ )
89+ radarBuffers.floatBuffer.putFloat(
90+ radialIndex + 12 ,
91+ (binStart + radarBuffers.binSize * levelCount) * angleVSin
92+ )
93+ radarBuffers.floatBuffer.putFloat(
94+ radialIndex + 16 ,
95+ (binStart + radarBuffers.binSize * levelCount) * angleCos
96+ )
97+ radarBuffers.floatBuffer.putFloat(
98+ radialIndex + 20 ,
99+ (binStart + radarBuffers.binSize * levelCount) * angleSin
100+ )
100101 radarBuffers.floatBuffer.putFloat(radialIndex + 24 , binStart * angleCos)
101102 radarBuffers.floatBuffer.putFloat(radialIndex + 28 , binStart * angleSin)
102103 radialIndex + = 32
103104 for (unused in 0 .. 3 ) {
104- radarBuffers.colorBuffer.put(colorIndex, radarBuffers.colormap.redValues.get(level.toInt() and 0xFF ))
105- radarBuffers.colorBuffer.put(colorIndex + 1 , radarBuffers.colormap.greenValues.get(level.toInt() and 0xFF ))
106- radarBuffers.colorBuffer.put(colorIndex + 2 , radarBuffers.colormap.blueValues.get(level.toInt() and 0xFF ))
105+ radarBuffers.colorBuffer.put(
106+ colorIndex,
107+ radarBuffers.colormap.redValues.get(level.toInt() and 0xFF )
108+ )
109+ radarBuffers.colorBuffer.put(
110+ colorIndex + 1 ,
111+ radarBuffers.colormap.greenValues.get(level.toInt() and 0xFF )
112+ )
113+ radarBuffers.colorBuffer.put(
114+ colorIndex + 2 ,
115+ radarBuffers.colormap.blueValues.get(level.toInt() and 0xFF )
116+ )
107117 colorIndex + = 3
108118 }
109119 totalBins + = 1
@@ -123,24 +133,18 @@ internal object NexradDecodeEightBit {
123133 }
124134
125135 // level2
126- fun createRadials (radarBuffers : OglRadarBuffers , binBuff : ByteBuffer , radialStart : ByteBuffer ): Int {
136+ fun createRadials (
137+ radarBuffers : OglRadarBuffers ,
138+ binBuff : ByteBuffer ,
139+ radialStart : ByteBuffer
140+ ): Int {
127141 radarBuffers.colormap.redValues.put(0 , Color .red(radarBuffers.bgColor).toByte())
128142 radarBuffers.colormap.greenValues.put(0 , Color .green(radarBuffers.bgColor).toByte())
129143 radarBuffers.colormap.blueValues.put(0 , Color .blue(radarBuffers.bgColor).toByte())
130144 var totalBins = 0
131- var angle: Float
132- var angleV: Float
133- var level: Int
134- var levelCount: Int
135- var binStart: Float
136145 var binIndex = 0
137146 var colorIndex = 0
138147 var radialIndex = 0
139- var curLevel: Int
140- var angleSin: Float
141- var angleCos: Float
142- var angleVSin: Float
143- var angleVCos: Float
144148 val radarBlackHole: Float
145149 val radarBlackHoleAdd: Float
146150 when (radarBuffers.productCode.toInt()) {
@@ -155,38 +159,59 @@ internal object NexradDecodeEightBit {
155159 }
156160 }
157161 for (radialNumber in 0 until radarBuffers.numberOfRadials) {
158- angle = radialStart.getFloat(radialNumber * 4 )
159- level = binBuff.get(binIndex).toInt()
160- levelCount = 0
161- binStart = radarBlackHole
162- angleV = if (radialNumber < radarBuffers.numberOfRadials - 1 ) {
162+ val angle = radialStart.getFloat(radialNumber * 4 )
163+ var level = binBuff.get(binIndex).toInt()
164+ var levelCount = 0
165+ var binStart = radarBlackHole
166+ val angleV = if (radialNumber < radarBuffers.numberOfRadials - 1 ) {
163167 radialStart.getFloat(radialNumber * 4 + 4 )
164168 } else {
165169 radialStart.getFloat(0 )
166170 }
167- angleVCos = cos(angleV / M_180_DIV_PI )
168- angleVSin = sin(angleV / M_180_DIV_PI )
169- angleCos = cos(angle / M_180_DIV_PI )
170- angleSin = sin(angle / M_180_DIV_PI )
171+ val angleVCos = cos(angleV / M_180_DIV_PI )
172+ val angleVSin = sin(angleV / M_180_DIV_PI )
173+ val angleCos = cos(angle / M_180_DIV_PI )
174+ val angleSin = sin(angle / M_180_DIV_PI )
171175 for (bin in 0 until radarBuffers.numRangeBins) {
172- curLevel = binBuff.get(binIndex).toInt()
176+ val curLevel = binBuff.get(binIndex).toInt()
173177 binIndex + = 1
174178 if (curLevel == level) {
175179 levelCount + = 1
176180 } else {
177181 radarBuffers.floatBuffer.putFloat(radialIndex, binStart * angleVCos)
178182 radarBuffers.floatBuffer.putFloat(radialIndex + 4 , binStart * angleVSin)
179- radarBuffers.floatBuffer.putFloat(radialIndex + 8 , (binStart + radarBuffers.binSize * levelCount) * angleVCos)
180- radarBuffers.floatBuffer.putFloat(radialIndex + 12 , (binStart + radarBuffers.binSize * levelCount) * angleVSin)
181- radarBuffers.floatBuffer.putFloat(radialIndex + 16 , (binStart + radarBuffers.binSize * levelCount) * angleCos)
182- radarBuffers.floatBuffer.putFloat(radialIndex + 20 , (binStart + radarBuffers.binSize * levelCount) * angleSin)
183+ radarBuffers.floatBuffer.putFloat(
184+ radialIndex + 8 ,
185+ (binStart + radarBuffers.binSize * levelCount) * angleVCos
186+ )
187+ radarBuffers.floatBuffer.putFloat(
188+ radialIndex + 12 ,
189+ (binStart + radarBuffers.binSize * levelCount) * angleVSin
190+ )
191+ radarBuffers.floatBuffer.putFloat(
192+ radialIndex + 16 ,
193+ (binStart + radarBuffers.binSize * levelCount) * angleCos
194+ )
195+ radarBuffers.floatBuffer.putFloat(
196+ radialIndex + 20 ,
197+ (binStart + radarBuffers.binSize * levelCount) * angleSin
198+ )
183199 radarBuffers.floatBuffer.putFloat(radialIndex + 24 , binStart * angleCos)
184200 radarBuffers.floatBuffer.putFloat(radialIndex + 28 , binStart * angleSin)
185201 radialIndex + = 32
186202 for (unused in 0 .. 3 ) {
187- radarBuffers.colorBuffer.put(colorIndex, radarBuffers.colormap.redValues.get(level and 0xFF ))
188- radarBuffers.colorBuffer.put(colorIndex + 1 , radarBuffers.colormap.greenValues.get(level and 0xFF ))
189- radarBuffers.colorBuffer.put(colorIndex + 2 , radarBuffers.colormap.blueValues.get(level and 0xFF ))
203+ radarBuffers.colorBuffer.put(
204+ colorIndex,
205+ radarBuffers.colormap.redValues.get(level and 0xFF )
206+ )
207+ radarBuffers.colorBuffer.put(
208+ colorIndex + 1 ,
209+ radarBuffers.colormap.greenValues.get(level and 0xFF )
210+ )
211+ radarBuffers.colorBuffer.put(
212+ colorIndex + 2 ,
213+ radarBuffers.colormap.blueValues.get(level and 0xFF )
214+ )
190215 colorIndex + = 3
191216 }
192217 totalBins + = 1
@@ -202,7 +227,12 @@ internal object NexradDecodeEightBit {
202227 //
203228 // canvas based widget
204229 //
205- fun forCanvas (context : Context , src : String , radialStartAngle : ByteBuffer , binWord : ByteBuffer ): Short {
230+ fun forCanvas (
231+ context : Context ,
232+ src : String ,
233+ radialStartAngle : ByteBuffer ,
234+ binWord : ByteBuffer
235+ ): Short {
206236 var numberOfRangeBins = 0
207237 try {
208238 val dataInputStream = UtilityIO .uncompress(context, src)
@@ -246,7 +276,16 @@ internal object NexradDecodeEightBit {
246276 //
247277 // canvas based widget
248278 //
249- fun rect8bit (rBuff : ByteBuffer , binStart : Float , binSize : Float , levelCount : Int , angle : Float , angleV : Float , centerX : Int , centerY : Int ) {
279+ fun rect8bit (
280+ rBuff : ByteBuffer ,
281+ binStart : Float ,
282+ binSize : Float ,
283+ levelCount : Int ,
284+ angle : Float ,
285+ angleV : Float ,
286+ centerX : Int ,
287+ centerY : Int
288+ ) {
250289 rBuff.position(0 )
251290 rBuff.putFloat(binStart * cos(angle / M_180_DIV_PI ) + centerX)
252291 rBuff.putFloat((binStart * sin(angle / M_180_DIV_PI ) - centerY) * - 1.0f )
0 commit comments