A pool of resources
Jitter

    


Developed to simulate the little bit of randomness which exists when you hand make things and place them in the real world this tool simply shakes things up a little bit.  Simply this rhinoscript uses a random function to produced minor variations in Position (move), Orientation (rotation), and Dimension (scale) within a range specified by the user.


platform: Rhino Script
function: Modeling Aid

 


Option Explicit
'Script written by <David Mans>
'Script copyrighted by <NeoArchaic Studio>
'Script version Tuesday, January 19, 2010 11:41:24 PM

Call Main()
Sub Main()
	Dim arrInputs, arrTemp, intCount, arrSorting(), arrGroups
	arrTemp = Rhino.GetObjects("Select Objects to Tile",,True)
	If isNull(arrTemp) Then Exit Sub

	arrGroups = SelectedGroups(arrTemp)

	intCount = uBound(arrGroups)
	ReDim arrSorting(intCount)

	arrInputs = Rhino.PropertyListBox(array("Rotation Min","Rotation Max","Move","Scale% Min","Scale% Max"),array(0,360,0,100,100),"Jitter")
	If isnull(arrinputs) Then Exit Sub

	Dim i, cnPt
	Call Rhino.EnableRedraw(False)
	For i = 0 To intCount Step 1
		arrSorting(i) = Rhino.ObjectsByGroup (arrGroups(i))

		cnPt = boundingBoxCenterPoint(arrSorting(i))
		Call Rhino.ScaleObjects(arrSorting(i),cnPt,array(random(arrInputs(3)*0.01,arrInputs(4)*0.01),random(arrInputs(3)*0.01,arrInputs(4)*0.01),random(arrInputs(3)*0.01,arrInputs(4)*0.01)),False)
		Call Rhino.RotateObjects(arrSorting(i),cnPt,random(arrInputs(0),arrInputs(1)),Rhino.WorldXYPlane()(1),False)
		Call Rhino.RotateObjects(arrSorting(i),cnPt,random(arrInputs(0),arrInputs(1)),Rhino.WorldXYPlane()(2),False)
		Call Rhino.RotateObjects(arrSorting(i),cnPt,random(arrInputs(0),arrInputs(1)),Rhino.WorldXYPlane()(3),False)
		Call Rhino.MoveObjects(arrSorting(i),cnPt,array(cnPt(0)+random(-1*arrInputs(2),arrInputs(2)),cnPt(1)+random(-1*arrInputs(2),arrInputs(2)),cnPt(2)+random(-1*arrInputs(2),arrInputs(2))))
	Next
	Call Rhino.EnableRedraw(True)

End Sub
Function SelectedGroups(arrObjects)
	SelectedGroups = Null 

	Dim arrGroups(), strGroup
	Dim i, nCount, bAppend

	nCount = -1

	For i = 0 To UBound(arrObjects)
		bAppend = False
		strGroup = Rhino.ObjectTopGroup(arrObjects(i))
		If Not IsNull(strGroup) Then
			If (nCount = -1) Then
				bAppend = True
			ElseIf (FindGroup(strGroup, arrGroups) = -1) Then
				bAppend = True
			End If
			If bAppend = True Then
				nCount = nCount + 1
				ReDim Preserve arrGroups(nCount)
				arrGroups(nCount) = strGroup
			End If
		End If
	Next

	If (nCount > -1) Then SelectedGroups = arrGroups

End Function
Function FindGroup(strGroup, arrGroups)
	Dim i
	FindGroup = -1
	For i = 0 To UBound(arrGroups)
		If (StrComp(strGroup, arrGroups(i), 1) = 0) Then
			FindGroup = i
			Exit Function
		End If
	Next
End Function
Function boundingBoxCenterPoint(arrInputs)
	boundingBoxCenterPoint = Null
	Dim b,arrPt
	b = Rhino.BoundingBox(arrInputs)

	arrPt = array(b(0)(0)+(b(1)(0)-b(0)(0))*0.5,b(0)(1)+(b(3)(1)-b(0)(1))*0.5,b(0)(2)+(b(4)(2)-b(0)(2))*0.5)
	boundingBoxCenterPoint = arrPt
End Function
Function random(min,max)
	random = Null
	Dim dblValue: dblValue = min+(max-min)*rnd()
	random = dblValue
End Function


Reply