Ejemplo n.º 1
0
        private void AddPositionKeyLines(Position3DTrack positionTrack, Color majorLineColor, Color minorLineColor, Point3D startPosition, int segmentsCount)
        {
            // First create WireCrossVisual3D and PolyLineVisual3D at the key frame positions
            var point3DCollection = new Point3DCollection(positionTrack.KeysCount);

            foreach (var positionKeyFrame in positionTrack.Keys)
            {
                point3DCollection.Add(positionKeyFrame.Position);

                var wireCrossVisual3D = new Ab3d.Visuals.WireCrossVisual3D()
                {
                    Position      = new Point3D(positionKeyFrame.Position.X + startPosition.X, positionKeyFrame.Position.Y + 1, positionKeyFrame.Position.Z + startPosition.Z),
                    LinesLength   = 8,
                    LineThickness = 2,
                    LineColor     = majorLineColor
                };

                MainViewport.Children.Add(wireCrossVisual3D);
            }

            var polyLineVisual3D = new Ab3d.Visuals.PolyLineVisual3D()
            {
                LineColor     = majorLineColor,
                LineThickness = 2,
                Transform     = new TranslateTransform3D(startPosition.X, 1, startPosition.Z),
                Positions     = point3DCollection
            };

            MainViewport.Children.Add(polyLineVisual3D);


            // Now add minor WireCrossVisual3D that will show how animation progresses through time
            double framesPerSegment = (double)positionTrack.LastFrame / (double)segmentsCount;

            Vector3D startPositionOffset = new Vector3D(startPosition.X, 0.8, startPosition.Z);

            for (int i = 0; i <= segmentsCount; i++)
            {
                double frameNumber = i * framesPerSegment;

                Point3D positionForFrame = positionTrack.GetPositionForFrame(frameNumber) + startPositionOffset;

                var wireCrossVisual3D = new Ab3d.Visuals.WireCrossVisual3D()
                {
                    Position      = positionForFrame,
                    LineColor     = minorLineColor,
                    LineThickness = 1,
                    LinesLength   = 6
                };

                MainViewport.Children.Add(wireCrossVisual3D);
            }
        }
Ejemplo n.º 2
0
        private void AddSpiralVisual3D(Point3DCollection spiralPositionCollection, Transform3D transform)
        {
            var polyLineVisual3D = new Ab3d.Visuals.PolyLineVisual3D()
            {
                Positions     = spiralPositionCollection,
                LineColor     = Colors.DeepSkyBlue,
                LineThickness = 2,
                Transform     = transform
            };

            MainViewport.Children.Add(polyLineVisual3D);
        }
Ejemplo n.º 3
0
        public TubePathSample()
        {
            InitializeComponent();

            var pathPositions = CreateHelixPath(startCenter: new Point3D(0, 0, 0),
                                                radius: 30,
                                                height: 100,
                                                totalDegrees: 360 * 3,
                                                totalPathPositions: 100);


            var polyLineVisual3D = new Ab3d.Visuals.PolyLineVisual3D()
            {
                Positions     = pathPositions,
                LineThickness = 3,
                LineColor     = Colors.Red,
                EndLineCap    = LineCap.ArrowAnchor,
                IsClosed      = false
            };

            MainViewport.Children.Add(polyLineVisual3D);


            var tubePathMesh3D = new Ab3d.Meshes.TubePathMesh3D(pathPositions: pathPositions,
                                                                radius: 10,
                                                                isTubeClosed: false,
                                                                isPathClosed: polyLineVisual3D.IsClosed,
                                                                generateTextureCoordinates: false,
                                                                segments: 10);

            var diffuseMaterial = new DiffuseMaterial(new SolidColorBrush(Color.FromArgb(150, 128, 255, 128)));

            var geometryModel3D = new GeometryModel3D(tubePathMesh3D.Geometry, diffuseMaterial);

            geometryModel3D.BackMaterial = geometryModel3D.Material;

            var modelVisual3D = new ModelVisual3D()
            {
                Content = geometryModel3D
            };

            MainViewport.Children.Add(modelVisual3D);


            var wireframeVisual3D = new Ab3d.Visuals.WireframeVisual3D()
            {
                OriginalModel = geometryModel3D,
                LineThickness = 1,
                LineColor     = Colors.Black,
                UseModelColor = false
            };

            MainViewport.Children.Add(wireframeVisual3D);



            pathPositions = new Point3DCollection(new Point3D[]
            {
                new Point3D(0, 0, 0),
                new Point3D(0, 10, 0),
                new Point3D(0, 20, 0),
                new Point3D(0, 30, 0),
                new Point3D(-20, 60, 0),
                new Point3D(-50, 100, 0),
                new Point3D(-120, 100, 0),
            });

            var openedTubePathVisual3D = CreateOpenedTubePathVisual3D(pathPositions: pathPositions,
                                                                      outerRadius: 16,
                                                                      innerRadius: 14,
                                                                      segmentsCount: 20,
                                                                      outerMaterial: new DiffuseMaterial(Brushes.Green),
                                                                      innerMaterial: new DiffuseMaterial(Brushes.DimGray));

            openedTubePathVisual3D.Transform = new TranslateTransform3D(100, 0, 100);

            MainViewport.Children.Add(openedTubePathVisual3D);
        }