Site Tools


Calculating Hot/Cold Color Values

Developer: RhinoScript
Summary: Demonstrates how calculate colors for analysis using RhinoScript.

Question

What I would like to do is to show the curvature of a curve with a color index. For example, I divide a curve into 500 points and measure the curvature at each point. Now, I would like to assign a “curvature radius” color to each of the points. Any ideas?

Answer

One solution you might consider is to determine the minimum and maximum curvature values for your samples. Then, you can use this function to calculate a color value for each point.

 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 ' Return a RGB color given a scalar v in the range [vmin, vmax].
 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 Function GetHotColdColor(v, vmin, vmax)
 
   Dim r, g, b, dv
   r = 1.0 : g = 1.0 : b = 1.0 'white

   If (v < vmin) Then v = vmin
   If (v > vmax) Then v = vmax
   dv = vmax - vmin
 
   If (v < (vmin + 0.25 * dv)) Then
     r = 0
     g = 4 * (v - vmin) / dv
   ElseIf (v < (vmin + 0.5 * dv)) Then
     r = 0
     b = 1 + 4 * (vmin + 0.25 * dv - v) / dv
   ElseIf (v < (vmin + 0.75 * dv)) Then
     r = 4 * (v - vmin - 0.5 * dv) / dv
     b = 0
   Else
     g = 1 + 4 * (vmin + 0.75 * dv - v) / dv
     b = 0
   End If
 
   GetHotColdColor = RGB(Int(r*255), Int(g*255), Int(b*255))
 
 End Function

Here is a sample script that you can use to test the above function.

 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 ' Test procedure creates a "hot-to-cold" color ramp mesh.
 ' To see the results, set a viewport to "rendered" display.
 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 Sub TestGetHotColdColor()
 
   ' Mesh with 200 vertices and 100 faces
   Dim v(199), f(99), c(199), ub, i
 
   ' Fill in arrays
   ub = UBound(v)
   For i = 0 To UBound(v) Step 2
     v(i) = Array(i/2,0,0)
     v(i+1) = Array(i/2,10,0)
     c(i) = GetHotColdColor(i,0,ub)
     c(i+1) = c(i)
     f(i/2) = Array(i,i+2,i+3,i+1)
   Next
 
   ' Create the mesh object
   Call Rhino.AddMesh(v,f,,,c)
 
 End Sub
developer/scriptsamples/hotcoldcolor.txt · Last modified: 2011/11/11 by dale