public HelixRenderPackageFactory() { TessellationParameters = new TessellationParameters() { MaxTessellationDivisions = MaxTessellationDivisionsDefault }; }
public DefaultRenderPackageFactory() { TessellationParameters = new TessellationParameters() { MaxTessellationDivisions = 32 }; }
public void Tessellate(IRenderPackage package, TessellationParameters parameters) { // Dynamo's renderer uses IRenderPackage objects // to store data for rendering. The Tessellate method // give you an IRenderPackage object which you can fill // with render data. // Set RequiresPerVertexColoration to let the renderer // know that you needs to use a per-vertex color shader. package.RequiresPerVertexColoration = true; AddColoredQuadToPackage(package); AddColoredLineToPackage(package); }
public void Tessellate(IRenderPackage package, TessellationParameters parameters) { package.RequiresPerVertexColoration = true; // As you add more data to the render package, you need // to keep track of the index where this coloration will // start from. geometry.Tessellate(package, parameters); if (parameters.ShowEdges) { var surf = geometry as Surface; if (surf != null) { foreach (var curve in surf.PerimeterCurves()) { curve.Tessellate(package, parameters); curve.Dispose(); } } var solid = geometry as Solid; if (solid != null) { foreach (var geom in solid.Edges.Select(edge => edge.CurveGeometry)) { geom.Tessellate(package, parameters); geom.Dispose(); } } } if (package.LineVertexCount > 0) { package.ApplyLineVertexColors(CreateColorByteArrayOfSize(package.LineVertexCount, color.Red, color.Green, color.Blue, color.Alpha)); } if (package.PointVertexCount > 0) { package.ApplyPointVertexColors(CreateColorByteArrayOfSize(package.PointVertexCount, color.Red, color.Green, color.Blue, color.Alpha)); } if (package.MeshVertexCount > 0) { package.ApplyMeshVertexColors(CreateColorByteArrayOfSize(package.MeshVertexCount, color.Red, color.Green, color.Blue, color.Alpha)); } }
public void Tessellate(IRenderPackage package, TessellationParameters parameters) { for (var i = 0; i < width - 1; i++) { for (var j = 0; j < length - 1; j++) { var a = vertexCoords[i , j]; var b = vertexCoords[i , j + 1]; var c = vertexCoords[i + 1, j]; var d = vertexCoords[i + 1, j + 1]; var v1 = Vector.ByTwoPoints(b, a).Cross(Vector.ByTwoPoints(c, b)).Normalized().Reverse(); var v2 = Vector.ByTwoPoints(c, d).Cross(Vector.ByTwoPoints(b, d)).Normalized().Reverse(); PushTriangleVertex(package, a, v1); PushTriangleVertex(package, b, v1); PushTriangleVertex(package, c, v1); PushTriangleVertex(package, d, v2); PushTriangleVertex(package, c, v2); PushTriangleVertex(package, b, v2); } } }
private static void CreateVertexColoredMesh(Point[] vertices, Color[] colors, IRenderPackage package, TessellationParameters parameters) { package.RequiresPerVertexColoration = true; for (var i = 0; i <= vertices.Count()-3; i+=3) { var ptA = vertices[i]; var ptB = vertices[i+1]; var ptC = vertices[i+2]; if (ptA.IsAlmostEqualTo(ptB) || ptB.IsAlmostEqualTo(ptC) || ptA.IsAlmostEqualTo(ptC)) { continue; } var alongLine = false; using (var l = Line.ByStartPointEndPoint(ptA, ptC)) { alongLine = ptB.DistanceTo(l) < 0.00001; } if (alongLine) { continue; } var cA = colors[i]; var cB = colors[i+1]; var cC = colors[i+2]; var s1 = ptB.AsVector().Subtract(ptA.AsVector()).Normalized(); var s2 = ptC.AsVector().Subtract(ptA.AsVector()).Normalized(); var n = s1.Cross(s2); package.AddTriangleVertex(ptA.X, ptA.Y, ptA.Z); package.AddTriangleVertexNormal(n.X, n.Y, n.Z); package.AddTriangleVertexColor(cA.Red, cA.Green, cA.Blue, cA.Alpha); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertex(ptB.X, ptB.Y, ptB.Z); package.AddTriangleVertexNormal(n.X, n.Y, n.Z); package.AddTriangleVertexColor(cB.Red, cB.Green, cB.Blue, cB.Alpha); package.AddTriangleVertexUV(0, 0); package.AddTriangleVertex(ptC.X, ptC.Y, ptC.Z); package.AddTriangleVertexNormal(n.X, n.Y, n.Z); package.AddTriangleVertexColor(cC.Red, cC.Green, cC.Blue, cC.Alpha); package.AddTriangleVertexUV(0, 0); } }
private void TessellateEdges(IRenderPackage package, TessellationParameters parameters) { if (!parameters.ShowEdges) return; var surf = geometry as Surface; if (surf != null) { foreach (var curve in surf.PerimeterCurves()) { curve.Tessellate(package, parameters); curve.Dispose(); } } var solid = geometry as Solid; if (solid != null) { foreach (var geom in solid.Edges.Select(edge => edge.CurveGeometry)) { geom.Tessellate(package, parameters); geom.Dispose(); } } }
private void CreateGeometryRenderData(Color color, IRenderPackage package, TessellationParameters parameters) { package.RequiresPerVertexColoration = true; // As you add more data to the render package, you need // to keep track of the index where this coloration will // start from. geometry.Tessellate(package, parameters); TessellateEdges(package, parameters); if (package.LineVertexCount > 0) { package.ApplyLineVertexColors(CreateColorByteArrayOfSize(package.LineVertexCount, color.Red, color.Green, color.Blue, color.Alpha)); } if (package.PointVertexCount > 0) { package.ApplyPointVertexColors(CreateColorByteArrayOfSize(package.PointVertexCount, color.Red, color.Green, color.Blue, color.Alpha)); } if (package.MeshVertexCount > 0) { package.ApplyMeshVertexColors(CreateColorByteArrayOfSize(package.MeshVertexCount, color.Red, color.Green, color.Blue, color.Alpha)); } }
private void CreateColorMapOnSurface(Color[][] colorMap , IRenderPackage package, TessellationParameters parameters) { const byte gray = 80; geometry.Tessellate(package, parameters); var colorBytes = new List<byte>(); foreach (var colorArr in colorMap) { foreach (var c in colorArr) { colorBytes.Add(c.Blue); colorBytes.Add(c.Green); colorBytes.Add(c.Red); colorBytes.Add(c.Alpha); } } package.SetColors(colorBytes.ToArray()); package.ColorsStride = colorMap.First().Length * 4; TessellateEdges(package, parameters); if (package.LineVertexCount > 0) { package.ApplyLineVertexColors(CreateColorByteArrayOfSize(package.LineVertexCount, gray, gray, gray, 255)); } }
public void Tessellate(IRenderPackage package, TessellationParameters parameters) { if(vertices != null) { CreateVertexColoredMesh(vertices, meshVertexColors, package, parameters); return; } if (singleColor != null) { CreateGeometryRenderData(singleColor, package, parameters); return; } if (colorMap != null) { if (!colorMap.Any()) { return; } CreateColorMapOnSurface(colorMap, package, parameters); return; } }
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 void Tessellate(IRenderPackage package, TessellationParameters parameters) { AsVector().Tessellate(package, parameters); }
public void Tessellate(List<object> objects, IRenderPackage package, TessellationParameters parameters) { foreach (var item in objects) { List<IGraphicItem> graphicItems = GetGraphicItems(item); if (null == graphicItems || graphicItems.Count == 0) continue; foreach (var g in graphicItems) { g.Tessellate(package, parameters); } } }
public void Tessellate(IRenderPackage package, TessellationParameters parameters) { if (singleColor != null) { CreateGeometryRenderData(singleColor, package, parameters); } else if (colorMap != null) { if (!colorMap.Any()) { return; } CreateColorMapOnSurface(colorMap, package, parameters); } }
public void Tessellate(IRenderPackage package, TessellationParameters parameters) { package.AddPointVertex(point.X, point.Y, point.Z); package.Description = label; }
public new void Tessellate(IRenderPackage package, TessellationParameters parameters) { //Ensure that the object is still alive if (!IsAlive) return; //Location Point DB.LocationPoint locPoint = InternalElement.Location as DB.LocationPoint; GeometryPrimitiveConverter.ToPoint(InternalTransform.OfPoint(locPoint.Point)).Tessellate(package, parameters); package.ApplyPointVertexColors(CreateColorByteArrayOfSize(package.PointVertexCount, 255, 0, 0, 0)); //Boundaries foreach (DB.BoundarySegment segment in InternalBoundarySegments) { Curve crv = RevitToProtoCurve.ToProtoType(segment.GetCurve().CreateTransformed(InternalTransform)); crv.Tessellate(package, parameters); if (package.LineVertexCount > 0) { package.ApplyLineVertexColors(CreateColorByteArrayOfSize(package.LineVertexCount, 255, 0, 0, 0)); } } }
public void Tessellate(List<object> objects, IRenderPackage package, TessellationParameters parameters) { throw new NotImplementedException(); }
public void Tessellate(IRenderPackage package, TessellationParameters parameters) { //could increase performance further by cacheing this tesselation Geometry.Tessellate(package, parameters); //we use reflection here because this API was added in Dynamo 1.1 and might not exist for a user in Dynamo 1.0 //if you do not care about ensuring comptability of your zero touch node with 1.0 you can just call SetTransform directly //by casting the rendering package to ITransformable. //look for the method SetTransform with the double[] argument list. var method = package.GetType(). GetMethod("SetTransform", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance, null, new[] { typeof(double[]) }, null); //if the method exists call it using our current transform. if (method != null) { method.Invoke(package, new object[] { new double[] {transform.XAxis.X,transform.XAxis.Y,transform.XAxis.Z,0, transform.YAxis.X,transform.YAxis.Y,transform.YAxis.Z,0, transform.ZAxis.X,transform.ZAxis.Y,transform.ZAxis.Z,0, transform.Origin.X,transform.Origin.Y,transform.Origin.Z,1 }}); } }