static void _Create(IContextState context, IEnumerable <IFileGeometry3D> meshes, FileInfo texture, string name, LoadedVisualObject visual) { List <ElementTag> t = new List <ElementTag>(); var details = new LoadedObjectDetails(); var baseTag = ElementTag.New(); var index = 0; AxisAlignedBox fullBox = AxisAlignedBox.Zero; foreach (var geo in meshes) { var tag = Create(context, baseTag.WithPrefix(geo.Name ?? index.ToString()), new GeometryStructures <IFileGeometry3D>(geo), texture, out var box); t.Add(tag); fullBox = fullBox.Merge(box.Bounds); details.VertexCount += geo.Positions.Count; details.TriangleCount += (geo.Indices.Count / 3); index++; } visual.tags.AddRange(t); visual.Details = details; var size = fullBox.Size(); visual.worldX = VisualPolylineObject.Create(context, baseTag.WithPrefix("WorldX"), new[] { Vector3.Zero + Vector3.UnitX * size.X * -2f, Vector3.Zero + Vector3.UnitX * size.X * 2f }, V4Colors.Red, false); visual.worldX.IsVisible = false; visual.worldY = VisualPolylineObject.Create(context, baseTag.WithPrefix("WorldY"), new[] { Vector3.Zero + Vector3.UnitY * size.Y * -2f, Vector3.Zero + Vector3.UnitY * size.Y * 2f }, V4Colors.Green, false); visual.worldY.IsVisible = false; visual.worldZ = VisualPolylineObject.Create(context, baseTag.WithPrefix("WorldZ"), new[] { Vector3.Zero + Vector3.UnitZ * size.Z * -2f, Vector3.Zero + Vector3.UnitZ * size.Z * 2f }, V4Colors.Blue, false); visual.worldZ.IsVisible = false; }
public static LoadedVisualObject Create(IContextState context, IEnumerable <IFileGeometry3D> meshes, FileInfo texture, string name) { var visual = new LoadedVisualObject(name); visual.CullMode = SharpDX.Direct3D11.CullMode.Front; _Create(context, meshes, texture, name, visual); return(visual); }