private void LoadBasicFlowchartNodes()
        {
            diagram.Behavior = Behavior.DrawLinks;
            shapeLibrary.LoadFromXml(@"../../CustomNodes/CustomLibrary/BasicFlowchart.sl");
            NodesFromLib();
            shapeList.SelectedIndex = 0;

            // Process Node (square anchors)
            AnchorPattern squareAnchors = new AnchorPattern(new AnchorPoint[]
            {
                // if you picture the node as a grid, top left is 0,0
                // bottom right is 100,100, center is 50,50, etc...
                // first value is X axis, 2nd is the Y axis
                // yes i had to figure this out myself, no i dont know what true is for but its true
                // what is documentation
                new AnchorPoint(50, 0, true, true),
                new AnchorPoint(100, 50, true, true),
                new AnchorPoint(50, 100, true, true),
                new AnchorPoint(0, 50, true, true)
            });

            // probably should have a better way of doing this instead of hard coding
            // the getItemAt()

            ShapeNode processNode = shapeList.Items.GetItemAt(0) as ShapeNode;

            processNode.Name                  = "processNode";
            processNode.AnchorPattern         = squareAnchors;
            processNode.TextAlignment         = TextAlignment.Center;
            processNode.TextVerticalAlignment = AlignmentY.Center;
            processNode.ResizeToFitText(FitSize.KeepRatio);

            // Start/End Node (same square anchors)
            ShapeNode startEndNode = shapeList.Items.GetItemAt(4) as ShapeNode;

            startEndNode.Name                  = "startEndNode";
            startEndNode.AnchorPattern         = squareAnchors;
            startEndNode.PolygonalTextLayout   = true;
            startEndNode.TextAlignment         = TextAlignment.Center;
            startEndNode.TextVerticalAlignment = AlignmentY.Center;
            startEndNode.ResizeToFitText(FitSize.KeepRatio);

            // Decision Node
            ShapeNode decisionNode = shapeList.Items.GetItemAt(5) as ShapeNode;

            decisionNode.Name                  = "decisionNode";
            decisionNode.AnchorPattern         = squareAnchors;
            decisionNode.PolygonalTextLayout   = true;
            decisionNode.TextAlignment         = TextAlignment.Center;
            decisionNode.TextVerticalAlignment = AlignmentY.Center;
            decisionNode.ResizeToFitText(FitSize.KeepRatio);

            // Data Node
            ShapeNode dataNode = shapeList.Items.GetItemAt(1) as ShapeNode;

            dataNode.Name                  = "dataNode";
            dataNode.AnchorPattern         = squareAnchors;
            dataNode.PolygonalTextLayout   = true;
            dataNode.TextAlignment         = TextAlignment.Center;
            dataNode.TextVerticalAlignment = AlignmentY.Center;
            dataNode.ResizeToFitText(FitSize.KeepRatio);

            // Subprocess Node
            ShapeNode subprocessNode = shapeList.Items.GetItemAt(2) as ShapeNode;

            subprocessNode.Name                  = "subprocessNode";
            subprocessNode.AnchorPattern         = squareAnchors;
            subprocessNode.TextAlignment         = TextAlignment.Center;
            subprocessNode.TextVerticalAlignment = AlignmentY.Center;
            subprocessNode.ResizeToFitText(FitSize.KeepRatio);

            // Document Node
            ShapeNode documentNode = shapeList.Items.GetItemAt(3) as ShapeNode;

            documentNode.Name                  = "documentNode";
            documentNode.AnchorPattern         = squareAnchors;
            documentNode.AnchorPattern         = squareAnchors;
            documentNode.TextAlignment         = TextAlignment.Center;
            documentNode.TextVerticalAlignment = AlignmentY.Center;
            documentNode.ResizeToFitText(FitSize.KeepRatio);

            diagram.LinkHeadShape     = MindFusion.Diagramming.Wpf.ArrowHeads.Circle;
            diagram.LinkHeadShapeSize = 10; // dont ask me what 10 is refering to in this case.
        }