private void DrawZAxisLabels()
        {
            Transform3D transform = new RotateTransform3D()
            {
                Rotation = new AxisAngleRotation3D()
                {
                    Axis = new Vector3D(0, 0, 1), Angle = 90
                }
            };

            var transformGroup = new Transform3DGroup();

            transformGroup.Children.Add(transform);

            transform = new TranslateTransform3D()
            {
                OffsetX = _length * 2 + 1,
                OffsetY = 0,
                OffsetZ = 0
            };
            transformGroup.Children.Add(transform);

            var zAxisMayTicks = this.TicksProvider.CreateMayorTicks(_zRange, _length);

            for (int i = 1; i < zAxisMayTicks.Length; i++)
            {
                var mayorTickLabel =
                    Text3D.CreateTextLabel3D(this.TicksProvider.GetLabelText(zAxisMayTicks[i]),
                                             Brushes.Black, true, 0.2,
                                             new Point3D(0, _length + 0.5, zAxisMayTicks[i].AxisValue),
                                             new Vector3D(0, 1, 0), new Vector3D(0, 0, 1));

                var ticklabelCln = mayorTickLabel.Clone();
                ticklabelCln.Transform = transformGroup;
                mayorTickLabelGroup.Children.Add(mayorTickLabel);
                mayorTickLabelGroup.Children.Add(ticklabelCln);
            }

            var zTextModel =
                Text3D.CreateTextLabel3D("Z Axis", Brushes.Black, true, 0.2,
                                         new Point3D(0, _length + 1.5, _length / 2),
                                         new Vector3D(0, 0, 1), new Vector3D(0, -1, 0));

            var zTextModel2 =
                Text3D.CreateTextLabel3D("Z Axis", Brushes.Black, true, 0.2,
                                         new Point3D(_length + 1.5, 0, _length / 2),
                                         new Vector3D(0, 0, 1), new Vector3D(1, 0, 0));

            axisLabelGroup.Children.Add(zTextModel);
            axisLabelGroup.Children.Add(zTextModel2);
        }
        private void DrawXAxisLabels()
        {
            /// Prepare transformation for transfroming label
            /// from one side to the other side.
            Transform3D transform = new RotateTransform3D()
            {
                Rotation = new AxisAngleRotation3D()
                {
                    Axis = new Vector3D(1, 0, 0), Angle = 90
                }
            };

            var transformGroup = new Transform3DGroup();

            transformGroup.Children.Add(transform);

            transform = new TranslateTransform3D()
            {
                OffsetX = 0,
                OffsetY = _length * 2 + 1,
                OffsetZ = 0
            };
            transformGroup.Children.Add(transform);

            foreach (var tick in _xAxisMayorTicks)
            {
                var mayorTickLabel =
                    Text3D.CreateTextLabel3D(this.TicksProvider.GetLabelText(tick),
                                             Brushes.Black, true, 0.2,
                                             new Point3D(tick.AxisValue, 0, _length + 0.5),
                                             new Vector3D(0, 0, -1), new Vector3D(-1, 0, 0));

                var ticklabelCln = mayorTickLabel.Clone();
                ticklabelCln.Transform = transformGroup;
                mayorTickLabelGroup.Children.Add(mayorTickLabel);
                mayorTickLabelGroup.Children.Add(ticklabelCln);
            }

            var xTextModel =
                Text3D.CreateTextLabel3D("X Axis", Brushes.Black, true, 0.2,
                                         new Point3D(_length / 2, 0, _length + 1.5),
                                         new Vector3D(1, 0, 0), new Vector3D(0, 0, 1));

            var xTextModel2 =
                Text3D.CreateTextLabel3D("X Axis", Brushes.Black, true, 0.2,
                                         new Point3D(_length / 2, _length + 1.5, 0),
                                         new Vector3D(-1, 0, 0), new Vector3D(0, -1, 0));

            axisLabelGroup.Children.Add(xTextModel);
            axisLabelGroup.Children.Add(xTextModel2);
        }