public void Tessellate(IRenderPackage package, TessellationParameters parameters) { // This example contains information to draw a point package.AddPointVertex(point.X, point.Y, point.Z); package.AddPointVertexColor(255, 0, 0, 255); package.AddPointVertex(0, 1, 1); package.AddPointVertexColor(255, 0, 0, 255); package.AddPointVertex(0, 2, 2 + counter / 10.0); package.AddPointVertexColor(255, 0, 0, 255); package.AddPointVertex(0, 3, 3 + counter / 10.0); package.AddPointVertexColor(255, 0, 0, 255); package.AddPointVertex(0, 4, 4 + counter / 10.0); package.AddPointVertexColor(255, 0, 0, 255); }
public void Tessellate(IRenderPackage package, double tol = -1, int maxGridLines = 512) { if (!Values.Any() || Values == null) { return; } var min = Values.Min(); var max = Values.Max(); var normalizedValues = Values.Select(v => (v - min) / (max - min)); var colorRange = Utils.CreateAnalyticalColorRange(); var data = ValueLocations.Zip( normalizedValues, (p, v) => new Tuple <Point, double>(p, v)); foreach (var d in data) { var pt = d.Item1; var color = colorRange.GetColorAtParameter(d.Item2); package.AddPointVertex(pt.X, pt.Y, pt.Z); package.AddPointVertexColor(color.Red, color.Green, color.Blue, color.Alpha); } }
/// <summary> /// This is the method that takes care of custom rendering... /// </summary> /// <param name="package"></param> /// <param name="parameters"></param> public void Tessellate(IRenderPackage package, TessellationParameters parameters) { Point[] pts = mesh.VertexPositions; Vector[] normals = mesh.VertexNormals; IndexGroup[] indices = mesh.FaceIndices; bool foo = package.DisplayLabels; int i = 0; foreach (Point p in pts) { package.AddPointVertex(p.X, p.Y, p.Z); package.AddPointVertexColor(255, 0, 0, 255); } foreach (IndexGroup ig in indices) { if (ig.Count == 3) { DrawColoredLine(package, this, pts[ig.A], pts[ig.B]); DrawColoredLine(package, this, pts[ig.B], pts[ig.C]); DrawColoredLine(package, this, pts[ig.C], pts[ig.A]); } else if (ig.Count == 4) { DrawColoredLine(package, this, pts[ig.A], pts[ig.B]); DrawColoredLine(package, this, pts[ig.B], pts[ig.C]); DrawColoredLine(package, this, pts[ig.C], pts[ig.D]); DrawColoredLine(package, this, pts[ig.D], pts[ig.A]); } } }
internal static void RenderNetworkFrame(CompasNetwork network, double[][] vertices, IRenderPackage package, TessellationParameters parameters) { // Vertices foreach (double[] p in vertices) { package.AddPointVertex(p[0], p[1], p[2]); package.AddPointVertexColor(255, 0, 0, 255); } if (network.edgesInt != null) { foreach (int[] ids in network.edgesInt) { double[] p0 = vertices[ids[0]]; double[] p1 = vertices[ids[1]]; package.AddLineStripVertexColor(0, 255, 0, 255); package.AddLineStripVertex(p0[0], p0[1], p0[2]); package.AddLineStripVertexColor(0, 0, 255, 255); package.AddLineStripVertex(p1[0], p1[1], p1[2]); package.AddLineStripVertexCount(2); } } }
internal static void AddColouredVertex( IRenderPackage package, GTGeom.Vertex vertex, DSCore.Color color) { package.AddPointVertex(vertex.X, vertex.Y, vertex.Z); package.AddPointVertexColor(color.Red, color.Green, color.Blue, color.Alpha); }
public static void DrawPoints(IRenderPackage package, List <Triple> points, Color color) { for (int i = 0; i < points.Count; i++) { package.AddPointVertex(points[i].X, points[i].Y, points[i].Z); package.AddPointVertexColor(color.R, color.G, color.B, color.A); } }
private static void LegacyPackageEnsureColorExistsPerVertex(IRenderPackage pkg, int previousPointVertexCount, int previousLineVertexCount, int previousMeshVertexCount) { // We sequence the if statements here to avoid calling Count on PointVertexColors if we don't have to. // For Helix IRenderPackage implementation we have to regenerate a new IEnumerable each time we access PointVertexColors. // The data is stored in a Helix specific data structure for efficient transfer to the view later. // The same applies for line and mesh if (pkg.PointVertexCount > previousPointVertexCount) { var colorCount = pkg.PointVertexColors.Count() / 4; if (colorCount < pkg.PointVertexCount) { for (var i = colorCount; i < pkg.PointVertexCount; i++) { pkg.AddPointVertexColor(DefR, DefG, DefB, DefA); } } } if (pkg.LineVertexCount > previousLineVertexCount) { var colorCount = pkg.LineStripVertexColors.Count() / 4; if (colorCount < pkg.LineVertexCount) { for (var i = colorCount; i < pkg.LineVertexCount; i++) { pkg.AddLineStripVertexColor(DefR, DefG, DefB, DefA); } } } if (pkg.MeshVertexCount > previousMeshVertexCount) { var colorCount = pkg.MeshVertexColors.Count() / 4; if (colorCount < pkg.MeshVertexCount) { for (var i = colorCount; i < pkg.MeshVertexCount; i++) { pkg.AddTriangleVertexColor(DefR, DefG, DefB, DefA); } } } }
public void Tessellate(IRenderPackage package, double tol = -1, int maxGridLines = 512) { // This example contains information to draw a point package.AddPointVertex(point.X, point.Y, point.Z); package.AddPointVertexColor(255, 0, 0, 255); }
public void Tessellate(IRenderPackage package, TessellationParameters parameters) { // This example contains information to draw a point package.AddPointVertex(point.X, point.Y, point.Z); package.AddPointVertexColor(255, 0, 0, 255); }
public static void DrawPoint(IRenderPackage package, Triple point, Color color) { package.AddPointVertex(point.X, point.Y, point.Z); package.AddPointVertexColor(color.R, color.G, color.B, color.A); }
public void Tessellate(IRenderPackage package, TessellationParameters parameters) { package.RequiresPerVertexColoration = true; Geo.Point OP1 = this._webAxis.StartPoint; Geo.Point OP2 = this._webAxis.EndPoint; Geo.Vector webAxis = Geo.Vector.ByTwoPoints(OP1, OP2); Geo.Vector normal = _webNormal; Geo.Vector lateral = webAxis.Cross(normal); lateral = lateral.Normalized(); lateral = lateral.Scale(1.75); normal = normal.Normalized(); normal = normal.Scale(1.5); Geo.Vector lateralR = Geo.Vector.ByCoordinates(lateral.X * -1, lateral.Y * -1, lateral.Z * -1); Geo.Vector webAxisR = Geo.Vector.ByCoordinates(webAxis.X * -1, webAxis.Y * -1, webAxis.Z * -1); Geo.Vector normalR = Geo.Vector.ByCoordinates(normal.X * -1, normal.Y * -1, normal.Z * -1); Geo.Point p0 = OP1.Add(normal.Add(lateral)); Geo.Point p1 = OP2.Add(normal.Add(lateral)); Geo.Point p2 = OP1.Add(lateral); Geo.Point p3 = OP2.Add(lateral); Geo.Point p6 = OP1.Add(normal.Add(lateralR)); Geo.Point p7 = OP2.Add(normal.Add(lateralR)); Geo.Point p4 = OP1.Add(lateralR); Geo.Point p5 = OP2.Add(lateralR); lateral = lateral.Normalized().Scale(1.25); lateralR = lateralR.Normalized().Scale(1.25); Geo.Point p8 = OP1.Add(lateralR).Add(normal); Geo.Point p9 = OP2.Add(lateralR).Add(normal); Geo.Point p10 = OP1.Add(lateral).Add(normal); Geo.Point p11 = OP2.Add(lateral).Add(normal); //////////// // // // // // // // // // // Geo.Point[] pts = { p0, p1, p2, p1, p2, p3, p2, p3, p4, p3, p4, p5, p4, p5, p6, p5, p6, p7, p0, p1, p10, p1, p10, p11, p6, p7, p8, p7, p8, p9 }; Geo.Vector[] vectors = { lateral, normal, lateral.Reverse(), normal.Reverse(), normal.Reverse() }; byte[] colors = { 100, 100, 100, 100, 110, 110, 110, 110, 110, 110 }; var faces = new List <List <int> > { new List <int> { 0, 1, 2 }, new List <int> { 3, 4, 5 }, new List <int> { 6, 7, 8 }, new List <int> { 9, 10, 11 }, new List <int> { 12, 13, 14 }, new List <int> { 15, 16, 17 }, new List <int> { 18, 19, 20 }, new List <int> { 21, 22, 23 }, new List <int> { 24, 25, 26 }, new List <int> { 27, 28, 29 } }; for (int i = 0; i < faces.Count; i++) { package.AddTriangleVertex(pts[faces[i][0]].X, pts[faces[i][0]].Y, pts[faces[i][0]].Z); package.AddTriangleVertex(pts[faces[i][1]].X, pts[faces[i][1]].Y, pts[faces[i][1]].Z); package.AddTriangleVertex(pts[faces[i][2]].X, pts[faces[i][2]].Y, pts[faces[i][2]].Z); package.AddTriangleVertexColor(colors[i], colors[i], colors[i], 255); package.AddTriangleVertexColor(colors[i], colors[i], colors[i], 255); package.AddTriangleVertexColor(colors[i], colors[i], colors[i], 255); package.AddTriangleVertexNormal(vectors[i / 2].X, vectors[i / 2].Y, vectors[i / 2].Z); package.AddTriangleVertexNormal(vectors[i / 2].X, vectors[i / 2].Y, vectors[i / 2].Z); package.AddTriangleVertexNormal(vectors[i / 2].X, vectors[i / 2].Y, vectors[i / 2].Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); } foreach (hOperation op in operations) { Geo.Point opPoint = this._webAxis.PointAtParameter(op._loc / this._webAxis.Length); byte r = 255; byte g = 66; byte b = 57; byte a = 255; switch (op._type) { case Operation.WEB: package.AddPointVertex(opPoint.X, opPoint.Y, opPoint.Z); package.AddPointVertexColor(r, g, b, a); lateral = lateral.Normalized().Scale(15.0 / 16.0); lateralR = lateralR.Normalized().Scale(15.0 / 16.0); package.AddPointVertex(opPoint.Add(lateral).X, opPoint.Add(lateral).Y, opPoint.Add(lateral).Z); package.AddPointVertexColor(r, g, b, a); package.AddPointVertex(opPoint.Add(lateralR).X, opPoint.Add(lateralR).Y, opPoint.Add(lateralR).Z); package.AddPointVertexColor(r, g, b, a); break; case Operation.DIMPLE: lateral = lateral.Normalized().Scale(1.0); lateralR = lateralR.Normalized().Scale(1.0); normal = normal.Normalized().Scale(0.75); package.AddLineStripVertex(opPoint.Add(lateral.Add(normal)).X, opPoint.Add(lateral.Add(normal)).Y, opPoint.Add(lateral.Add(normal)).Z); lateral = lateral.Normalized().Scale(2.5); package.AddLineStripVertex(opPoint.Add(lateral.Add(normal)).X, opPoint.Add(lateral.Add(normal)).Y, opPoint.Add(lateral.Add(normal)).Z); package.AddLineStripVertexColor(r, g, b, a); package.AddLineStripVertexColor(r, g, b, a); package.AddLineStripVertexCount(2); lateral = lateral.Normalized().Scale(1.75); package.AddPointVertex(opPoint.Add(lateral.Add(normal)).X, opPoint.Add(lateral.Add(normal)).Y, opPoint.Add(lateral.Add(normal)).Z); package.AddPointVertexColor(r, g, b, a); package.AddLineStripVertex(opPoint.Add(lateralR.Add(normal)).X, opPoint.Add(lateralR.Add(normal)).Y, opPoint.Add(lateralR.Add(normal)).Z); lateralR = lateralR.Normalized().Scale(2.5); package.AddLineStripVertex(opPoint.Add(lateralR.Add(normal)).X, opPoint.Add(lateralR.Add(normal)).Y, opPoint.Add(lateralR.Add(normal)).Z); package.AddLineStripVertexColor(r, g, b, a); package.AddLineStripVertexColor(r, g, b, a); package.AddLineStripVertexCount(2); lateralR = lateralR.Normalized().Scale(1.75); package.AddPointVertex(opPoint.Add(lateralR.Add(normal)).X, opPoint.Add(lateralR.Add(normal)).Y, opPoint.Add(lateralR.Add(normal)).Z); package.AddPointVertexColor(r, g, b, a); break; case Operation.SWAGE: lateral = lateral.Normalized().Scale(1.25); lateralR = lateralR.Normalized().Scale(1.25); webAxis = webAxis.Normalized().Scale(.875); webAxisR = webAxisR.Normalized().Scale(.875); package.AddLineStripVertex(opPoint.Add(lateral.Add(webAxis)).X, opPoint.Add(lateral.Add(webAxis)).Y, opPoint.Add(lateral.Add(webAxis)).Z); package.AddLineStripVertex(opPoint.Add(lateral.Add(webAxisR)).X, opPoint.Add(lateral.Add(webAxisR)).Y, opPoint.Add(lateral.Add(webAxisR)).Z); package.AddLineStripVertexColor(r, g, b, a); package.AddLineStripVertexColor(r, g, b, a); package.AddLineStripVertexCount(2); package.AddLineStripVertex(opPoint.Add(lateralR.Add(webAxis)).X, opPoint.Add(lateralR.Add(webAxis)).Y, opPoint.Add(lateralR.Add(webAxis)).Z); package.AddLineStripVertex(opPoint.Add(lateralR.Add(webAxisR)).X, opPoint.Add(lateralR.Add(webAxisR)).Y, opPoint.Add(lateralR.Add(webAxisR)).Z); package.AddLineStripVertexColor(r, g, b, a); package.AddLineStripVertexColor(r, g, b, a); package.AddLineStripVertexCount(2); break; case Operation.BOLT: lateral = lateral.Normalized().Scale(0.25); lateralR = lateralR.Normalized().Scale(0.25); webAxis = webAxis.Normalized().Scale(0.25); webAxisR = webAxisR.Normalized().Scale(0.25); normal = normal.Normalized().Scale(0.01); normalR = normalR.Normalized().Scale(0.01); Geo.Point[] boltPts = { opPoint.Add(lateral.Add(webAxis.Add(normal))), opPoint.Add(lateral.Add(webAxisR.Add(normal))), opPoint.Add(lateralR.Add(webAxisR.Add(normal))), opPoint.Add(lateralR.Add(webAxis.Add(normal))) }; package.AddTriangleVertex(boltPts[0].X, boltPts[0].Y, boltPts[0].Z); package.AddTriangleVertex(boltPts[1].X, boltPts[1].Y, boltPts[1].Z); package.AddTriangleVertex(boltPts[2].X, boltPts[2].Y, boltPts[2].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertex(boltPts[0].X, boltPts[0].Y, boltPts[0].Z); package.AddTriangleVertex(boltPts[2].X, boltPts[2].Y, boltPts[2].Z); package.AddTriangleVertex(boltPts[3].X, boltPts[3].Y, boltPts[3].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); boltPts = new Geo.Point[] { opPoint.Add(lateral.Add(webAxis.Add(normalR))), opPoint.Add(lateral.Add(webAxisR.Add(normalR))), opPoint.Add(lateralR.Add(webAxisR.Add(normalR))), opPoint.Add(lateralR.Add(webAxis.Add(normalR))) }; package.AddTriangleVertex(boltPts[0].X, boltPts[0].Y, boltPts[0].Z); package.AddTriangleVertex(boltPts[1].X, boltPts[1].Y, boltPts[1].Z); package.AddTriangleVertex(boltPts[2].X, boltPts[2].Y, boltPts[2].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertex(boltPts[0].X, boltPts[0].Y, boltPts[0].Z); package.AddTriangleVertex(boltPts[2].X, boltPts[2].Y, boltPts[2].Z); package.AddTriangleVertex(boltPts[3].X, boltPts[3].Y, boltPts[3].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); break; case Operation.SERVICE_HOLE: lateral = lateral.Normalized().Scale(0.5); lateralR = lateralR.Normalized().Scale(0.5); webAxis = webAxis.Normalized().Scale(0.5); webAxisR = webAxisR.Normalized().Scale(0.5); normal = normal.Normalized().Scale(0.01); normalR = normalR.Normalized().Scale(0.01); Geo.Point[] servicePts = new Geo.Point[] { opPoint.Add(lateral.Add(webAxis.Add(normal))), opPoint.Add(lateral.Add(webAxisR.Add(normal))), opPoint.Add(lateralR.Add(webAxisR.Add(normal))), opPoint.Add(lateralR.Add(webAxis.Add(normal))) }; package.AddTriangleVertex(servicePts[0].X, servicePts[0].Y, servicePts[0].Z); package.AddTriangleVertex(servicePts[1].X, servicePts[1].Y, servicePts[1].Z); package.AddTriangleVertex(servicePts[2].X, servicePts[2].Y, servicePts[2].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertex(servicePts[0].X, servicePts[0].Y, servicePts[0].Z); package.AddTriangleVertex(servicePts[2].X, servicePts[2].Y, servicePts[2].Z); package.AddTriangleVertex(servicePts[3].X, servicePts[3].Y, servicePts[3].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); servicePts = new Geo.Point[] { opPoint.Add(lateral.Add(webAxis.Add(normalR))), opPoint.Add(lateral.Add(webAxisR.Add(normalR))), opPoint.Add(lateralR.Add(webAxisR.Add(normalR))), opPoint.Add(lateralR.Add(webAxis.Add(normalR))) }; package.AddTriangleVertex(servicePts[0].X, servicePts[0].Y, servicePts[0].Z); package.AddTriangleVertex(servicePts[1].X, servicePts[1].Y, servicePts[1].Z); package.AddTriangleVertex(servicePts[2].X, servicePts[2].Y, servicePts[2].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertex(servicePts[0].X, servicePts[0].Y, servicePts[0].Z); package.AddTriangleVertex(servicePts[2].X, servicePts[2].Y, servicePts[2].Z); package.AddTriangleVertex(servicePts[3].X, servicePts[3].Y, servicePts[3].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); break; case Operation.NOTCH: lateral = lateral.Normalized().Scale(1.75); lateralR = lateralR.Normalized().Scale(1.75); webAxis = webAxis.Normalized().Scale(0.875); webAxisR = webAxisR.Normalized().Scale(0.875); normal = normal.Normalized().Scale(0.01); normalR = normalR.Normalized().Scale(0.01); Geo.Point[] notchPts = { opPoint.Add(lateral.Add(webAxis.Add(normal))), opPoint.Add(lateral.Add(webAxisR.Add(normal))), opPoint.Add(lateralR.Add(webAxisR.Add(normal))), opPoint.Add(lateralR.Add(webAxis.Add(normal))) }; package.AddTriangleVertex(notchPts[0].X, notchPts[0].Y, notchPts[0].Z); package.AddTriangleVertex(notchPts[1].X, notchPts[1].Y, notchPts[1].Z); package.AddTriangleVertex(notchPts[2].X, notchPts[2].Y, notchPts[2].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertex(notchPts[0].X, notchPts[0].Y, notchPts[0].Z); package.AddTriangleVertex(notchPts[2].X, notchPts[2].Y, notchPts[2].Z); package.AddTriangleVertex(notchPts[3].X, notchPts[3].Y, notchPts[3].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); notchPts = new Geo.Point[] { opPoint.Add(lateral.Add(webAxis.Add(normalR))), opPoint.Add(lateral.Add(webAxisR.Add(normalR))), opPoint.Add(lateralR.Add(webAxisR.Add(normalR))), opPoint.Add(lateralR.Add(webAxis.Add(normalR))) }; package.AddTriangleVertex(notchPts[0].X, notchPts[0].Y, notchPts[0].Z); package.AddTriangleVertex(notchPts[1].X, notchPts[1].Y, notchPts[1].Z); package.AddTriangleVertex(notchPts[2].X, notchPts[2].Y, notchPts[2].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertex(notchPts[0].X, notchPts[0].Y, notchPts[0].Z); package.AddTriangleVertex(notchPts[2].X, notchPts[2].Y, notchPts[2].Z); package.AddTriangleVertex(notchPts[3].X, notchPts[3].Y, notchPts[3].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); break; case Operation.LIP_CUT: lateral = lateral.Normalized().Scale(1.75); lateralR = lateralR.Normalized().Scale(1.75); webAxis = webAxis.Normalized().Scale(0.875); webAxisR = webAxisR.Normalized().Scale(0.875); normal = normal.Normalized().Scale(1.51); normalR = normalR.Normalized().Scale(0.01); Geo.Vector lateral2 = lateral.Normalized().Scale(1.25); Geo.Vector lateral2R = lateralR.Normalized().Scale(1.25); Geo.Point[] lipPts = { opPoint.Add(webAxis).Add(lateral).Add(normal), opPoint.Add(webAxisR).Add(lateral).Add(normal), opPoint.Add(webAxis).Add(lateral2).Add(normal), opPoint.Add(webAxisR).Add(lateral2).Add(normal) }; package.AddTriangleVertex(lipPts[0].X, lipPts[0].Y, lipPts[0].Z); package.AddTriangleVertex(lipPts[1].X, lipPts[1].Y, lipPts[1].Z); package.AddTriangleVertex(lipPts[2].X, lipPts[2].Y, lipPts[2].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertex(lipPts[1].X, lipPts[1].Y, lipPts[1].Z); package.AddTriangleVertex(lipPts[2].X, lipPts[2].Y, lipPts[2].Z); package.AddTriangleVertex(lipPts[3].X, lipPts[3].Y, lipPts[3].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); lipPts = new Geo.Point[] { opPoint.Add(webAxis).Add(lateralR).Add(normal), opPoint.Add(webAxisR).Add(lateralR).Add(normal), opPoint.Add(webAxis).Add(lateral2R).Add(normal), opPoint.Add(webAxisR).Add(lateral2R).Add(normal) }; package.AddTriangleVertex(lipPts[0].X, lipPts[0].Y, lipPts[0].Z); package.AddTriangleVertex(lipPts[1].X, lipPts[1].Y, lipPts[1].Z); package.AddTriangleVertex(lipPts[2].X, lipPts[2].Y, lipPts[2].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertex(lipPts[1].X, lipPts[1].Y, lipPts[1].Z); package.AddTriangleVertex(lipPts[2].X, lipPts[2].Y, lipPts[2].Z); package.AddTriangleVertex(lipPts[3].X, lipPts[3].Y, lipPts[3].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexNormal(normal.X, normal.Y, normal.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); break; case Operation.END_TRUSS: lateral = lateral.Normalized().Scale(1.76); lateralR = lateralR.Normalized().Scale(1.76); if (opPoint.DistanceTo(this._webAxis.StartPoint) < opPoint.DistanceTo(this._webAxis.EndPoint)) { webAxis = webAxis.Normalized().Scale(0.5); } else { webAxis = webAxisR.Normalized().Scale(0.5); } normal = normal.Normalized().Scale(1.50); Geo.Vector normal2 = normal.Normalized().Scale(1.0); Geo.Vector normal3 = normal.Normalized().Scale(0.5); normalR = normalR.Normalized().Scale(0.01); lateral2 = lateral.Normalized().Scale(1.25); lateral2R = lateralR.Normalized().Scale(1.25); Geo.Point[] endTrussPts = { opPoint.Add(lateral).Add(normal2), opPoint.Add(lateral).Add(normal).Add(webAxis), opPoint.Add(lateral).Add(normal) }; package.AddTriangleVertex(endTrussPts[0].X, endTrussPts[0].Y, endTrussPts[0].Z); package.AddTriangleVertex(endTrussPts[1].X, endTrussPts[1].Y, endTrussPts[1].Z); package.AddTriangleVertex(endTrussPts[2].X, endTrussPts[2].Y, endTrussPts[2].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(lateral.X, lateral.Y, lateral.Z); package.AddTriangleVertexNormal(lateral.X, lateral.Y, lateral.Z); package.AddTriangleVertexNormal(lateral.X, lateral.Y, lateral.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); endTrussPts = new Geo.Point[] { opPoint.Add(lateral).Add(normal3), opPoint.Add(lateral).Add(webAxis), opPoint.Add(lateral) }; package.AddTriangleVertex(endTrussPts[0].X, endTrussPts[0].Y, endTrussPts[0].Z); package.AddTriangleVertex(endTrussPts[1].X, endTrussPts[1].Y, endTrussPts[1].Z); package.AddTriangleVertex(endTrussPts[2].X, endTrussPts[2].Y, endTrussPts[2].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(lateral.X, lateral.Y, lateral.Z); package.AddTriangleVertexNormal(lateral.X, lateral.Y, lateral.Z); package.AddTriangleVertexNormal(lateral.X, lateral.Y, lateral.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); endTrussPts = new Geo.Point[] { opPoint.Add(lateralR).Add(normal2), opPoint.Add(lateralR).Add(normal).Add(webAxis), opPoint.Add(lateralR).Add(normal) }; package.AddTriangleVertex(endTrussPts[0].X, endTrussPts[0].Y, endTrussPts[0].Z); package.AddTriangleVertex(endTrussPts[1].X, endTrussPts[1].Y, endTrussPts[1].Z); package.AddTriangleVertex(endTrussPts[2].X, endTrussPts[2].Y, endTrussPts[2].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(lateralR.X, lateralR.Y, lateralR.Z); package.AddTriangleVertexNormal(lateralR.X, lateralR.Y, lateralR.Z); package.AddTriangleVertexNormal(lateralR.X, lateralR.Y, lateralR.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); endTrussPts = new Geo.Point[] { opPoint.Add(lateralR).Add(normal3), opPoint.Add(lateralR).Add(webAxis), opPoint.Add(lateralR) }; package.AddTriangleVertex(endTrussPts[0].X, endTrussPts[0].Y, endTrussPts[0].Z); package.AddTriangleVertex(endTrussPts[1].X, endTrussPts[1].Y, endTrussPts[1].Z); package.AddTriangleVertex(endTrussPts[2].X, endTrussPts[2].Y, endTrussPts[2].Z); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexColor(r, g, b, a); package.AddTriangleVertexNormal(lateralR.X, lateralR.Y, lateralR.Z); package.AddTriangleVertexNormal(lateralR.X, lateralR.Y, lateralR.Z); package.AddTriangleVertexNormal(lateralR.X, lateralR.Y, lateralR.Z); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertexUV(0, 0); break; default: package.AddPointVertex(opPoint.X, opPoint.Y, opPoint.Z); package.AddPointVertexColor(r, g, b, a); break; } } }