コード例 #1
0
        private Visual3D CreateModel3D(bool isSelected, CraftModel craft)
        {
            int positionX = craft.PositionX * 256;
            int positionY = -craft.PositionY * 256;
            int positionZ = craft.PositionZ * 256;

            if (string.IsNullOrEmpty(craft.CraftName))
            {
                return(null);
            }

            var model = this.GetOptModel(craft.CraftName);

            if (model == null)
            {
                return(null);
            }

            var visual = new OptVisual3D
            {
                Cache            = model.Cache,
                SortingFrequency = 0.2,
                Version          = craft.Markings,
                IsWireframe      = isSelected
            };

            var transformGroup = new Transform3DGroup();

            transformGroup.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), -craft.Roll * 256 * 360.0 / 65536)));

            if (craft.UseStartWaypoint)
            {
                transformGroup.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), craft.HeadingZ)));
                transformGroup.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 0, 1), -craft.HeadingXY)));
            }
            else
            {
                transformGroup.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), (craft.Pitch - 64) * 256 * 360.0 / 65536)));
                transformGroup.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 0, 1), -craft.Yaw * 256 * 360.0 / 65536)));
            }

            transformGroup.Children.Add(new TranslateTransform3D(positionY, -positionX, positionZ));
            transformGroup.Freeze();

            visual.Transform = transformGroup;

            return(visual);
        }
コード例 #2
0
ファイル: ViewModel.cs プロジェクト: ual002/XwaOptEditor
        private Visual3D CreateModel3D(HangarItem item, double hangarFloorZ)
        {
            string name = (string)ExeModelIndexConverter.Default.Convert(item.ModelIndex, null, null, null);

            if (string.IsNullOrEmpty(name))
            {
                return(null);
            }

            var model = this.GetOptModel(name);

            if (model == null)
            {
                return(null);
            }

            var model3D = new OptVisual3D();

            model3D.Cache            = model.Item2;
            model3D.SortingFrequency = .2;

            double offsetX = item.PositionX;
            double offsetY = item.PositionY;
            double offsetZ;

            if (item.IsOnFloor)
            {
                offsetZ = hangarFloorZ + model.Item1.SpanSize.Z / 2;
            }
            else
            {
                offsetZ = item.PositionZ;
            }

            var transform = new Transform3DGroup();

            transform.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), item.HeadingZ * 360.0 / 65536)));
            transform.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 0, 1), -item.HeadingXY * 360.0 / 65536)));
            transform.Children.Add(new TranslateTransform3D(offsetY, -offsetX, offsetZ));
            transform.Freeze();

            model3D.Transform = transform;

            return(model3D);
        }