From fe69e90749e9590da9aa70ca0d949822e775ce3f Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sat, 24 Apr 2021 20:00:30 +0100 Subject: [PATCH] Added orientation pointer to PolarView.kt, changed drawn satellite icon --- .../presentation/polarScreen/PolarView.kt | 35 +++++++++++++++---- app/src/main/res/drawable/ic_sat_polar.xml | 11 ++++++ 2 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 app/src/main/res/drawable/ic_sat_polar.xml diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarView.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarView.kt index 18f74658..ac4d391f 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarView.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarView.kt @@ -18,10 +18,7 @@ package com.rtbishop.look4sat.presentation.polarScreen import android.content.Context -import android.graphics.Canvas -import android.graphics.Color -import android.graphics.Paint -import android.graphics.Path +import android.graphics.* import android.view.View import androidx.core.content.ContextCompat import com.rtbishop.look4sat.R @@ -66,6 +63,20 @@ class PolarView(context: Context) : View(context) { color = ContextCompat.getColor(context, R.color.themeLight) style = Paint.Style.FILL } + private val satBmp = ContextCompat.getDrawable(context, R.drawable.ic_sat_polar)?.let { sat -> + Bitmap.createBitmap(sat.intrinsicWidth, sat.intrinsicHeight, Bitmap.Config.ARGB_8888).also { + val canvas = Canvas(it) + sat.setBounds(0, 0, canvas.width, canvas.height) + sat.draw(canvas) + return@let it + } + } + private val orientPaint = Paint().apply { + isAntiAlias = true + color = Color.RED + style = Paint.Style.STROKE + strokeWidth = scale * 2f + } fun setPass(satPass: SatPass) { this.satPass = satPass @@ -86,6 +97,7 @@ class PolarView(context: Context) : View(context) { drawRadarText(canvas) if (!satPass.isDeepSpace) canvas.drawPath(satTrack, trackPaint) drawSatellite(canvas, satPass) + drawOrientation(canvas, azimuth, pitch) } private fun createPassTrajectory(satPass: SatPass) { @@ -121,13 +133,24 @@ class PolarView(context: Context) : View(context) { private fun drawSatellite(canvas: Canvas, satPass: SatPass) { val satPos = satPass.predictor.getSatPos(Date()) - if (satPos.elevation > 0) { + if (satPos.elevation > 0 && satBmp != null) { val satX = sph2CartX(satPos.azimuth, satPos.elevation, radius.toDouble()) val satY = sph2CartY(satPos.azimuth, satPos.elevation, radius.toDouble()) - canvas.drawCircle(satX, -satY, txtSize / 2.4f, satPaint) + canvas.drawBitmap(satBmp, satX - satBmp.width / 2, -satY - satBmp.height / 2, satPaint) } } + private fun drawOrientation(canvas: Canvas, azimuth: Float, pitch: Float) { + val azimuthRad = Math.toRadians(azimuth.toDouble()) + val tmpElevation = Math.toRadians(pitch.toDouble()) + val elevationRad = if (tmpElevation > 0.0) 0.0 else tmpElevation + val orientX = sph2CartX(azimuthRad, -elevationRad, radius.toDouble()) + val orientY = sph2CartY(azimuthRad, -elevationRad, radius.toDouble()) + canvas.drawLine(orientX - txtSize, -orientY, orientX + txtSize, -orientY, orientPaint) + canvas.drawLine(orientX, -orientY - txtSize, orientX, -orientY + txtSize, orientPaint) + canvas.drawCircle(orientX, -orientY, txtSize / 2, orientPaint) + } + private fun sph2CartX(azimuth: Double, elevation: Double, r: Double): Float { val radius = r * (piDiv2 - elevation) / piDiv2 return (radius * cos(piDiv2 - azimuth)).toFloat() diff --git a/app/src/main/res/drawable/ic_sat_polar.xml b/app/src/main/res/drawable/ic_sat_polar.xml new file mode 100644 index 00000000..c4b547dc --- /dev/null +++ b/app/src/main/res/drawable/ic_sat_polar.xml @@ -0,0 +1,11 @@ + + +