 Here are some rhinoscripts those will be exercised in Digital Crafting Workshop – HexaPanels @ UPH Architecture.

Rhinoscript exercise #1 :
In this script exercise #1, we try to customize a planar modular system which modulated from a polygon. The customization created from a distance logic between each individual centroid of the module and a curve -as the attractor; which in the next step, the value of the distances will be used as an input to offset curve of a planar module.

```Option Explicit
'Script written by <Dani Hermawan - www.formologix.com > <www.formo.co>
'Script version Friday, 15 July 2011 13:32:45

Call Main()
Sub Main()
Dim arrCrvs01 : arrCrvs01 = Rhino.GetObjects("Select Curves to offset")
Dim arrPtCent
Dim crv01
Dim dblDist
Dim crvAtt : crvAtt=Rhino.GetObject("Select Curve to evaluate")
Dim arrEvaPt
Dim dblParam
Dim crv02
Dim arrCrvs02

'for loop-ing to do repetitive procedure
For Each crv01 In arrCrvs01
arrPtCent= Rhino.CurveAreaCentroid(crv01) 'get the centroid of the curve
'dblParam=Rhino.CurveClosestPoint(crvAtt, arrPtCent(0)) 'get parameter of the closest point on a curve

Rhino.Print "Curve parameter: " & CStr(dblParam)
arrEvaPt=Rhino.CurveEvaluate(crvAtt,dblParam,1) 'get coordinate of closest point on a curve

dblDist=Rhino.Distance(arrEvaPt(0),arrPtCent(0)) 'analyse the distance for distance logic
dblDist=dblDist/10

crv02=Rhino.OffsetCurve(crv01,arrPtCent(0),dblDist) 'offseting curve according to distance logic
arrCrvs02 = Array(crv01, crv02(0))
If Rhino.IsCurveClosed(crv02(0)) Then
Else
Rhino.DeleteObjects crv02
End If

Next

End Sub```

Rhinoscript exercise #2:
This second script is a development form the first one. Here, the script demonstrates at how more complex parametric transformations can be developed -3d modular system.

```Option Explicit
'Script written by <Dani Hermawan - www.formologix.com > <www.formo.co>
'Script version Friday, 15 July 2011 13:32:45

Call Main()
Sub Main()
Dim arrCrvs01 : arrCrvs01 = Rhino.GetObjects("Select Curves to offset")
Dim arrPtCent
Dim crv01
Dim dblDist
Dim crvAtt : crvAtt=Rhino.GetObject("Select Curve to evaluate")
Dim arrEvaPt
Dim dblParam
Dim crv02
Dim arrCrvs02
Dim arrCrvs03
Dim dblMove01 : dblMove01=Rhino.GetReal("First Copy distance",0.3)
Dim dblMove02 : dblMove02=Rhino.GetReal("Second Copy distance",-0.3)
Dim crv03
Dim crv04
Dim startPt
Dim startPt01
Dim arrStartPt
Dim dblDistCent
Dim dblParamPoly
Dim strLine
Dim strPt

For Each crv01 In arrCrvs01
arrPtCent= Rhino.CurveAreaCentroid(crv01)
dblParam=Rhino.CurveClosestPoint(crvAtt, arrPtCent(0))

arrEvaPt=Rhino.CurveEvaluate(crvAtt,dblParam,1)

dblDist=Rhino.Distance(arrEvaPt(0),arrPtCent(0))
dblDist=dblDist/15

'dblParamPoly=Rhino.CurveClosestPoint(crv01, arrPtCent(0))
arrStartPt = CurveEvaluate(crv01,dblParamPoly,1)

dblDistCent=Rhino.Distance(arrStartPt(0),arrPtCent(0))

If dblDistCent > dblDist Then

crv02=Rhino.OffsetCurve(crv01,arrPtCent(0),dblDist)
startPt=Rhino.CurveStartPoint(crv02(0))

Dim z1 : z1=arrPtCent(0)(2)+dblMove01
Dim z2 : z2=arrPtCent(0)(2)+dblMove02
Dim x : x=arrPtCent(0)(0)
Dim y : y=arrPtCent(0)(1)

Dim arrEnd01 : arrEnd01= Array(x,y,z1)
Dim arrEnd02 : arrEnd02= Array(x,y,z2)

If Rhino.IsCurveClosed(crv02(0)) Then

crv03=Rhino.CopyObject(crv01,arrPtCent(0),arrEnd01)
crv04=Rhino.CopyObject(crv01,arrPtCent(0),arrEnd02)

arrCrvs02 = Array(crv02(0), crv03)
arrCrvs03 = Array(crv02(0), crv04)

Else
Rhino.DeleteObjects crv02
End If

Else

End If
Rhino.DeleteObject strLine
Rhino.DeleteObject strPt

Next

End Sub```

The rhinoscripts above work with Rhino SR7 or above. A key character has to be modified in order to make the script works. It will be mentioned in the workshop.