protected override void UpdatePreview()
    {
        _preview.target = selected;
        switch (_mode)
        {
        case 1:
            VertexPanel vertex = (VertexPanel)_modes[_mode];
            _preview.vertexMode = VertexMode.PrimarySelect;
            _preview.UpdatePrimarySelection(vertex.selectlist);
            break;

        case 2:
            TrianglePanel tri = (TrianglePanel)_modes[_mode];
            _preview.vertexMode = VertexMode.PrimarySelectTriangle;
            _preview.UpdatePrimarySelection(tri.selectlist);
            break;

        case 3:
            SocketPanel edge = (SocketPanel)_modes[_mode];
            _preview.vertexMode = VertexMode.PrimarySecondarySelet;
            _preview.UpdatePrimarySocketSelection(edge.inverseX, edge.inverseY, true, edge.axiSocket, edge.selectlist);
            break;

        case 4:
            SocketPanel face = (SocketPanel)_modes[_mode];
            _preview.vertexMode = VertexMode.PrimarySecondarySelet;
            _preview.UpdatePrimarySocketSelection(face.inverseX, face.inverseY, false, face.axiSocket, face.selectlist);
            break;

        default:
            _preview.vertexMode = VertexMode.None;
            break;
        }
    }
    protected override void UpdateModes()
    {
        if (_modes == null || _mode < 0 || _mode >= _modes.Length)
        {
            return;
        }
        switch (_mode)
        {
        case 0:
            SelectionPanel <RectDesign> select = (SelectionPanel <RectDesign>)_modes[_mode];
            if (selected != select.selected)
            {
                selected = select.selected;
            }
            break;

        case 1:
            VertexPanel vertex = (VertexPanel)_modes[_mode];
            vertex.target = selected;
            break;

        case 2:
            TrianglePanel tri = (TrianglePanel)_modes[_mode];
            tri.target = selected;
            break;

        case 3:
            PlugPanel corner = (PlugPanel)_modes[_mode];
            corner.target = selected;
            if (selected != null)
            {
                corner.plugs = selected.cornerplugs;
            }
            else
            {
                corner.plugs = null;
            }
            break;

        case 4:
            PlugPanel edge = (PlugPanel)_modes[_mode];
            edge.target = selected;
            if (selected != null)
            {
                edge.plugs = selected.edgeplugs;
            }
            else
            {
                edge.plugs = null;
            }
            break;
        }
    }
    protected override void UpdatePreview()
    {
        _preview.target = selected;
        switch (_mode)
        {
        case 1:
            VertexPanel vertex = (VertexPanel)_modes[_mode];
            _preview.vertexMode = VertexMode.PrimarySelect;
            _preview.UpdatePrimarySelection(vertex.selectlist);
            break;

        case 2:
            TrianglePanel tri = (TrianglePanel)_modes[_mode];
            _preview.vertexMode = VertexMode.PrimarySelectTriangle;
            _preview.UpdatePrimarySelection(tri.selectlist);
            break;

        default:
            _preview.vertexMode = VertexMode.None;
            break;
        }
    }
    protected override void UpdateModes()
    {
        if (_modes == null || _mode < 0 || _mode >= _modes.Length)
        {
            return;
        }
        switch (_mode)
        {
        case 0:
            SelectionPanel <CornerDesign> select = (SelectionPanel <CornerDesign>)_modes[_mode];
            if (selected != select.selected)
            {
                selected = select.selected;
            }
            break;

        case 1:
            VertexPanel vertex = (VertexPanel)_modes[_mode];
            vertex.target = selected;
            break;

        case 2:
            TrianglePanel tri = (TrianglePanel )_modes[_mode];
            tri.target = selected;
            break;

        case 3:
            SocketPanel edge = (SocketPanel)_modes[_mode];
            edge.target = selected;
            break;

        case 4:
            SocketPanel face = (SocketPanel)_modes[_mode];
            face.target = selected;
            break;
        }
    }