internal static ModelVisual3D GetModel(Point3D position, Size3D size, double angle) { Model3DGroup group = DefaultModel.Clone(); Transform3DGroup trgr = new Transform3DGroup(); trgr.Children.Add(new ScaleTransform3D(size.X, size.Y, size.Z)); trgr.Children.Add(new TranslateTransform3D(position.X, position.Y, position.Z)); trgr.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), -angle), position)); group.Transform = trgr; return(new ModelVisual3D() { Content = group }); }
private byte[] GetFrameBuff(Model3DGroup meshGroup, AxisAngleRotation3D rotation = null) { var frame = ","; var facets = new List <Facet>(); var size = new ModelSize(64, 64, 32); var axis = new System.Windows.Media.Media3D.Vector3D(); var angle = 0d; if (rotation != null) { axis = rotation.Axis; angle = rotation.Angle; } Dispatcher.Invoke(new Action(() => { var cloneMeshGroup = meshGroup.Clone(); var transform = myViewport3D.Children[myViewport3D.Children.Count - 1].Transform.Clone() as Transform3DGroup; foreach (GeometryModel3D geo in cloneMeshGroup.Children) { var mesh = geo.Geometry as MeshGeometry3D; for (int i = 0; i < mesh.TriangleIndices.Count; i += 3) { var p = mesh.Positions[mesh.TriangleIndices[i]]; var p0 = transform.Transform(p); p = mesh.Positions[mesh.TriangleIndices[i + 1]]; var p1 = transform.Transform(p); p = mesh.Positions[mesh.TriangleIndices[i + 2]]; var p2 = transform.Transform(p); facets.Add(new Facet(p0, p1, p2)); } } })); //facets.RemoveAll(m => m.TooSmall); var results = SlicerHelper.DoCircleSlice(facets.ToArray(), new CircleArrayDefine[] { new CircleArrayDefine(new System.Numerics.Plane(0, 0, 1, 0), 200, 360) }); IImageMould im = new LED6432P(); foreach (var key in results.Keys) { var images = CircleSlicer.ToImage(results[key], size, 64, 32, 0, 0); for (int i = 0; i < images.Count; i++) { var bmp = images[i]; //bmp.Save(AppDomain.CurrentDomain.BaseDirectory + i + ".bmp"); frame += "," + im.GetMould(bmp); } } frame = frame.TrimStart(','); return(frame.Split(',').Select(m => Byte.Parse(m.Replace("0x", ""), System.Globalization.NumberStyles.AllowHexSpecifier)).ToArray()); }