@Override
    public void setViewingPlatform(ViewingPlatform vp) {
        super.setViewingPlatform(vp) ;
        if (vp == null) {
	    detachEcho() ;
            return ;
        }

	Viewer[] viewers = vp.getViewers() ;
	if (viewers != null) {
	    // Get the View from the first Viewer attached to the
	    // ViewingPlatform.  Multiple Viewers are not supported.
	    if (viewers.length != 0 && viewers[0] != null)
		view = viewers[0].getView() ;

	    if (viewers.length > 1)
		throw new RuntimeException("multiple Viewers not supported") ;
	}
	if (view == null) {
	    // Fallback to the first View attached to a live ViewPlatform.
	    view = getView() ;
	}
	if (view == null) {
	    // This behavior requires a view.  Bail.
	    throw new RuntimeException("a view is not available") ;
	}

        // Get the top-most TransformGroup in the ViewingPlatform.
        // ViewPlatformBehavior retrieves the bottom-most which won't work
        // if there are multiple TransformGroups.
        targetTG = vp.getMultiTransformGroup().getTransformGroup(0) ;

        // Should be an API for checking if homeTransform is null.
        if (homeTransform == null)
            setHomeTransform(new Transform3D()) ;

	attachEcho() ;
    }