////////////////////////////////////////////////////
        //////////////// New in this sample ////////////////
        ////////////////////////////////////////////////////

        /// <summary>
        /// Adds and configures the <see cref="BridgeManager"/>.
        /// </summary>
        private void ConfigureBridges()
        {
            // create a new BridgeManager
            // The graph item styles are responsible for both
            // providing obstacles and drawing bridges,
            // the bridge manager collects the obstacles and
            // updates given edge paths to add bridges.
            // see MySimpleEdgeStyle
            var bridgeManager = new BridgeManager();

            //Convenience class that just queries all model item
            GraphObstacleProvider provider = new GraphObstacleProvider();

            //Register an IObstacleProvider, bridgeManager will query all registered obstacle providers
            //to determine if a bridge must be created
            bridgeManager.AddObstacleProvider(provider);
            //Bind the bridge manager to the GraphControl...
            bridgeManager.CanvasControl = graphControl;
        }
        /// <summary>
        /// Adds and configures the <see cref="BridgeManager"/>.
        /// </summary>
        private void ConfigureBridges()
        {
            bridgeManager = new BridgeManager();

            // we would like to change the custom bridge rendering default,
            // this can be done by decorating the existing default bridge creator
            bridgeManager.DefaultBridgeCreator = new CustomBridgeCreator(bridgeManager.DefaultBridgeCreator);

            //Convenience class that just queries all model item
            GraphObstacleProvider provider = new GraphObstacleProvider();

            //We also want to query nodes for potential obstacles (disabled by default)
            provider.QueryNodes = true;
            //Register an IObstacleProvider, bridgeManager will query all registered obstacle providers
            //to determine if a bridge must be created
            bridgeManager.AddObstacleProvider(provider);
            //Bind the bridge manager to the GraphControl...
            bridgeManager.CanvasControl = graphControl;
            //We register a custom obstacle provider in the node's lookup of group nodes
            // that can be used by bridgeManager (through provider...)
            graphControl.Graph.GetDecorator().NodeDecorator.ObstacleProviderDecorator.SetFactory(
                node => graphControl.Graph.IsGroupNode(node), node => new GroupNodeObstacleProvider(node));

            // Initialize GUI components that configure bridge appearance
            crossingStyleComboBox.ComboBox.DataSource   = Enum.GetValues(typeof(BridgeCrossingStyle));
            crossingStyleComboBox.SelectedItem          = bridgeManager.DefaultBridgeCrossingStyle;
            crossingStyleComboBox.SelectedIndexChanged += crossingStyleComboBox_SelectedIndexChanged;

            crossingPolicyComboBox.ComboBox.DataSource   = Enum.GetValues(typeof(BridgeCrossingPolicy));
            crossingPolicyComboBox.SelectedItem          = bridgeManager.BridgeCrossingPolicy;
            crossingPolicyComboBox.SelectedIndexChanged += crossingPolicyComboBox_SelectedIndexChanged;

            bridgeOrientationComboBox.ComboBox.DataSource   = Enum.GetValues(typeof(BridgeOrientationStyle));
            bridgeOrientationComboBox.SelectedItem          = bridgeManager.DefaultBridgeOrientationStyle;
            bridgeOrientationComboBox.SelectedIndexChanged += bridgeOrientationComboBox_SelectedIndexChanged;

            heightTextBox.Text = bridgeManager.DefaultBridgeHeight.ToString();
            widthTextBox.Text  = bridgeManager.DefaultBridgeWidth.ToString();
        }