š» Rhino 5
š¼ Rhino Script
š ļø Visual Basic
Ā
This Rhino Script 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.
Ā
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
Ā