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); }
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); }