public void AddHeightControl(IObject3D item, DoubleOrExpression width, DoubleOrExpression depth, DoubleOrExpression height)
        {
            Func <double>   getWidth  = () => width.Value(item);
            Action <double> setWidth  = (newWidth) => width.Expression = newWidth.ToString();
            Func <double>   getDepth  = () => depth.Value(item);
            Action <double> setDepth  = (newDepth) => depth.Expression = newDepth.ToString();
            Func <double>   getHeight = null;
            Action <double> setHeight = null;

            if (height != null)
            {
                getHeight = () => height.Value(item);
                setHeight = (newHeight) => height.Expression = newHeight.ToString();
            }

            Object3DControls.Add(new ScaleHeightControl(this, getWidth, setWidth, getDepth, setDepth, getHeight, setHeight));
        }
        public void AddWidthDepthControls(IObject3D item, DoubleOrExpression width, DoubleOrExpression depth, DoubleOrExpression height)
        {
            Func <double>   getWidth  = () => width.Value(item);
            Action <double> setWidth  = (newWidth) => width.Expression = newWidth.ToString();
            Func <double>   getDepth  = () => depth.Value(item);
            Action <double> setDepth  = (newDepth) => depth.Expression = newDepth.ToString();
            Func <double>   getHeight = null;
            Action <double> setHeight = null;

            if (height != null)
            {
                getHeight = () => height.Value(item);
                setHeight = (newHeight) => height.Expression = newHeight.ToString();
            }

            if (width != null &&
                !width.IsEquation &&
                depth != null &&
                !depth.IsEquation)
            {
                for (int i = 0; i < 4; i++)
                {
                    Object3DControls.Add(new ScaleWidthDepthCornerControl(this, getWidth, setWidth, getDepth, setDepth, getHeight, setHeight, i));
                    Object3DControls.Add(new ScaleWidthDepthEdgeControl(this, getWidth, setWidth, getDepth, setDepth, getHeight, setHeight, i));
                }
            }
            else
            {
                // if the width is set and a constant
                if (width != null && !width.IsEquation)
                {
                    // add width side controls
                    Object3DControls.Add(new ScaleWidthDepthEdgeControl(this, getWidth, setWidth, null, null, getHeight, setHeight, 1));
                    Object3DControls.Add(new ScaleWidthDepthEdgeControl(this, getWidth, setWidth, null, null, getHeight, setHeight, 3));
                }

                // if the depth is set and a constant
                if (depth != null && !depth.IsEquation)
                {
                    // add depth side controls
                    Object3DControls.Add(new ScaleWidthDepthEdgeControl(this, null, null, getDepth, setDepth, getHeight, setHeight, 0));
                    Object3DControls.Add(new ScaleWidthDepthEdgeControl(this, null, null, getDepth, setDepth, getHeight, setHeight, 2));
                }
            }
        }