Ejemplo n.º 1
0
        private Model3D CreateGeometry(bool isFinal)
        {
            Model3DGroup retVal = new Model3DGroup();

            #region box

            MaterialGroup material = new MaterialGroup();

            Color           ringColor = WorldColors.DirectionControllerRing_Color;
            DiffuseMaterial diffuse   = new DiffuseMaterial(new SolidColorBrush(ringColor));
            MaterialBrushes.Add(new MaterialColorProps(diffuse, ringColor));
            material.Children.Add(diffuse);

            SpecularMaterial specular = WorldColors.DirectionControllerRing_Specular;
            MaterialBrushes.Add(new MaterialColorProps(specular));
            material.Children.Add(specular);

            if (!isFinal)
            {
                EmissiveMaterial selectionEmissive = new EmissiveMaterial(Brushes.Transparent);
                material.Children.Add(selectionEmissive);
                SelectionEmissives.Add(selectionEmissive);
            }

            GeometryModel3D geometry = new GeometryModel3D
            {
                Material     = material,
                BackMaterial = material,

                Geometry = ConverterMatterToFuelDesign.GetMesh(.36d * SCALE, .04d * SCALE, 3),
            };

            retVal.Children.Add(geometry);

            #endregion

            #region brain

            ScaleTransform3D scaleTransform = new ScaleTransform3D(SCALE, SCALE, SCALE);

            if (!isFinal)
            {
                retVal.Children.AddRange(BrainDesign.CreateInsideVisuals(SCALE * .6, MaterialBrushes, SelectionEmissives, scaleTransform));
            }

            retVal.Children.Add(BrainDesign.CreateShellVisual(isFinal, MaterialBrushes, SelectionEmissives, scaleTransform));

            #endregion

            retVal.Transform = GetTransformForGeometry(isFinal);

            return(retVal);
        }
Ejemplo n.º 2
0
        internal static Model3D CreateGeometry(List <MaterialColorProps> materialBrushes, List <EmissiveMaterial> selectionEmissives, Transform3D transform, Tuple <Vector3D, double>[][] ringRotations, bool isFinal)
        {
            Model3DGroup retVal = new Model3DGroup();

            #region rings

            MaterialGroup material = new MaterialGroup();

            Color           ringColor = WorldColors.DirectionControllerRing_Color;
            DiffuseMaterial diffuse   = new DiffuseMaterial(new SolidColorBrush(ringColor));
            materialBrushes.Add(new MaterialColorProps(diffuse, ringColor));
            material.Children.Add(diffuse);

            SpecularMaterial specular = WorldColors.DirectionControllerRing_Specular;
            materialBrushes.Add(new MaterialColorProps(specular));
            material.Children.Add(specular);

            if (!isFinal)
            {
                EmissiveMaterial selectionEmissive = new EmissiveMaterial(Brushes.Transparent);
                material.Children.Add(selectionEmissive);
                selectionEmissives.Add(selectionEmissive);
            }

            foreach (var torusAngle in ringRotations)
            {
                GeometryModel3D geometry = new GeometryModel3D
                {
                    Material     = material,
                    BackMaterial = material
                };

                Transform3DGroup transformGroup = new Transform3DGroup();
                foreach (var individualAngle in torusAngle)
                {
                    transformGroup.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(individualAngle.Item1, individualAngle.Item2)));
                }

                const double THICKNESS  = SIZEPERCENTOFSCALE * .04;      // it's actually half thickness
                const double RINGRADIUS = (SIZEPERCENTOFSCALE * BRAINSIZE) - THICKNESS;

                if (isFinal)
                {
                    geometry.Geometry = UtilityWPF.GetTorus(10, 4, THICKNESS, RINGRADIUS);       // must be 10 sided to match the icosidodecahedron (not same as the ichthyosaur)
                }
                else
                {
                    geometry.Geometry = UtilityWPF.GetTorus(60, 12, THICKNESS, RINGRADIUS);
                }
                geometry.Transform = transformGroup;

                retVal.Children.Add(geometry);
            }

            #endregion

            #region brain

            double           brainScale     = SIZEPERCENTOFSCALE * BRAINSIZE;
            ScaleTransform3D scaleTransform = new ScaleTransform3D();
            scaleTransform.ScaleX = brainScale;
            scaleTransform.ScaleY = brainScale;
            scaleTransform.ScaleZ = brainScale;

            if (!isFinal)
            {
                retVal.Children.AddRange(BrainDesign.CreateInsideVisuals(brainScale * .9, materialBrushes, selectionEmissives, scaleTransform));
            }

            retVal.Children.Add(BrainDesign.CreateShellVisual(isFinal, materialBrushes, selectionEmissives, scaleTransform));

            #endregion

            retVal.Transform = transform;

            return(retVal);
        }