private void OnGUI()
        {
            if (myNode != null && textWhere != null)
            {
                var screenWhere = PlanetariumCamera.Camera.WorldToScreenPoint(
                    ScaledSpace.LocalToScaledSpace(textWhere));

                if (screenWhere.z > 0 &&
                    screenWhere.x >= 0 && screenWhere.x <= Screen.width &&
                    screenWhere.y >= 0 && screenWhere.y <= Screen.height)
                {
                    // In front of camera, so draw

                    var camDist = cameraDist(textWhere);
                    if (0 < camDist && camDist < ringScale)
                    {
                        var offset = 0.6f * ringScale / camDist + 10;

                        labelStyle.normal.textColor = myNode.color;
                        if (GUI.Button(
                                new Rect(screenWhere.x - 50, Screen.height - screenWhere.y + offset, 100, 30),
                                myNode.GetCaption(vessel),
                                labelStyle
                                ))
                        {
                            EditMe?.Invoke(myNode);
                        }
                    }
                }
                else
                {
                    Vector2 edgePos = (screenWhere.z < 0 ? -1f : 1f) * screenRadius * (
                        new Vector2(screenWhere.x - Screen.width / 2, Screen.height / 2 - screenWhere.y).normalized
                        );
                    GUI.Label(
                        new Rect(
                            Mathf.Clamp(Screen.width / 2 + edgePos.x, 50, Screen.width - 100),
                            Mathf.Clamp(Screen.height / 2 + edgePos.y, 50, Screen.height - 50),
                            100, 30
                            ),
                        myNode.GetCaption(vessel),
                        labelStyle
                        );
                }
            }
        }
        private void OnGUI()
        {
            if (myNode != null && textWhere != null)
            {
                var camDist = cameraDist(textWhere);
                if (0 < camDist && camDist < ringScale)
                {
                    var screenWhere = PlanetariumCamera.Camera.WorldToScreenPoint(
                        ScaledSpace.LocalToScaledSpace(textWhere))
                                      + (0.6f * ringScale / camDist + 10) * Vector3.down;

                    if (screenWhere.z > 0 && viewport.Contains(screenWhere))
                    {
                        // In front of camera, so draw button
                        labelStyle.normal.textColor = myNode.color;
                        if (GUI.Button(
                                new Rect(
                                    screenWhere.x - halfTextWidth,
                                    Screen.height - screenWhere.y,
                                    textWidth, 30),
                                myNode.GetCaption(vessel),
                                labelStyle
                                ))
                        {
                            EditMe?.Invoke(myNode);
                        }
                    }
                    else
                    {
                        // Off edge of screen or behind camera, draw marker at edge of screen
                        labelStyle.normal.textColor = new Color(
                            myNode.color.r, myNode.color.g, myNode.color.b, 0.6f);
                        var edgePos = edgePosition((screenWhere.z < 0 ? -1f : 1f)
                                                   * ((Vector2)screenWhere - screenCenterOffset));
                        GUI.Label(
                            new Rect(edgePos.x - halfTextWidth, edgePos.y, textWidth, 30),
                            myNode.GetCaption(vessel),
                            labelStyle
                            );
                    }
                }
            }
        }