This Rhinoscript takes any image reads the luminance value of the image at a user-specified 2d increment and uses the results as a scalar multiplier against a user-specified value for a selected set of objects.
Rhino Script
Option Explicit 'Script written by <David Mans> 'adapted from work by Che Wei Wang 'www.cwwang.com 'Script copyrighted by <NeoArchaic Studio> 'Script version Tuesday, March 18, 2008 7:40:18 AM Call Main() Sub Main() Dim arrObjects: arrObjects = Rhino.GetObjects("Select Objects",, True) If isNull(arrObjects) Then Exit Sub Dim arrItems, arrValues, arrResults arrItems = array("columns", "rows", "maximum_scale_height") arrValues = array(10, 10, 2) arrResults = Rhino.PropertyListBox(arrItems, arrValues,, "Image Parameters") Dim arrImg arrImg = arrImageSample(arrResults(0), arrResults(1)) ' image outputs (0)red(1)green(2)blue(3)alpha(4)hue(5)saturation(6)luminance Call Rhino.EnableRedraw(False) Call scaleByImage(arrObjects, arrImg(6), CDbl(arrResults(2))) Call Rhino.DeleteObjects(arrObjects) Call Rhino.EnableRedraw(True) End Sub Function scaleByImage(arrObjects, arrValues, dblScale) scaleByImage = Null Dim i, j, x, y, bBox bBox = Rhino.BoundingBox(arrObjects) x = Rhino.Distance(bBox(0), bBox(1)) y = Rhino.Distance(bBox(0), bBox(3)) Dim arrOutput(),tOutput() ReDim arrOutput(uBound(arrValues)) For i = 0 To uBound(arrValues) - 1 Step 1 ReDim tOutput(uBound(arrValues(i))) For j = 0 To uBound(arrValues(i)) - 1 Step 1 tOutput(j) = Rhino.ScaleObjects(Rhino.CopyObjects(arrObjects, array(0, 0, 0), array(x * i, y * j, 0)), array(0, 0, 0), array(1, 1, 1 + dblScale * arrValues(i)(j))) Next arrOutput(j) = tOutput Next scaleByImage = arrOutput End Function Function arrImageSample(cols, rows) arrImageSample = Null 'Instantiate the RhPicture Object Dim RhPicture : Set RhPicture = Rhino.GetPlugInObject("RhPicture") If IsNull(RhPicture) Then Exit Function 'Load an arbitrary image If Not RhPicture.LoadImage() Then Call Rhino.Print("Image not loaded") Exit Function End If 'Get the width and height Dim w : w = RhPicture.Width() Dim h : h = RhPicture.Height() If IsNull(w) Or IsNull(h) Then Call Rhino.Print("No valid image data") Exit Function End If Dim x, y, i,j Dim r, g, b, a, hu, s, u ReDim r(rows), g(rows), b(rows), a(rows), hu(rows), s(rows), u(rows) Dim rValSet, gValSet, bValSet, aValSet, hValSet, sValSet, uValSet ReDim rValSet(cols), gValSet(cols), bValSet(cols), aValSet(cols), hValSet(cols), sValSet(cols), uValSet(cols) 'Sample Image returning all values between zero and one For i = 0 To cols Step 1 For j = 0 To rows Step 1 x = int(w / cols) * i y = int(h / rows) * j If x > w Then x = w End If If y > h Then y = h End If r(j) = RhPicture.Red(x, y) / 255 g(j) = RhPicture.Green(x, y) / 255 b(j) = RhPicture.Blue(x, y) / 255 a(j) = RhPicture.Alpha(x, y) / 255 hu(j) = RhPicture.Hue(x, y) / 360 s(j) = RhPicture.Saturation(x, y) u(j) = RhPicture.Luminance(x, y) Next rValSet(i) = r gValSet(i) = g bValSet(i) = b aValSet(i) = a hValSet(i) = hu sValSet(i) = s uValSet(i) = u Next Set RhPicture = Nothing ' image outputs (0)red(1)green(2)blue(3)alpha(4)hue(5)saturation(6)luminance arrImageSample = array(rValSet, gValSet, bValSet, aValSet, hValSet, sValSet, uValSet) End Function