Forgot password?

Create an account!

Forum

« back

RhinoScript – Updating script on Rhino 4 problem

Messages

Please log in to write a message.

  • 3. metasword (Aug 03, 2008 13.44):

    Thanks Hanno. I will give it a go. And sorry about the misuse of code.

  • 2. Hanno (Aug 03, 2008 11.11):

    Hi metasword,

    if you paste a whole script, please use
    code -tags so that it gets syntax highlighted - its a lot better to read.

    As for your problem: I did not really look through your script, but I guess that it relates to the change in plane handling between Rhino3 and 4 - many methods, including SurfaceNormal, have been changed to work with the new planes. Look in the "RhinoScript Fundamentals" help for more informaton.

    Hope that helps!

    Hanno

  • 1. metasword (Aug 02, 2008 17.45):

    Hi,

    The following script used to work fine on Rhino 3 but on Rhino 4 I get this message:
    "type mismatch arrNormal ()"
    Line 86
    Can anybody give me a hand,please?

    Option Explicit
    '------------------------------------------------------------------------------
    ' Subroutine: ArraySurfaceNormalSectionLoft
    ' Purpose: Creates form a surface an array of normals, section and loft them.
    '------------------------------------------------------------------------------
    Sub ArraySurfaceNormalSectionLoft()

    Dim strObject, nLONGITUDE, nTRANSVERSAL
    Dim U, V, i, j, arrParam(1), arrPoint
    Dim arrParamNormal, arrNormal, Normal_Line
    Dim InterpCurve
    Dim strObjectLoft
    Dim strInterpCurve
    Dim strInterpCurveOnSurf
    Dim intDeltaHeight
    Dim intLoft_sectionsFrequence
    Dim intLoftType
    Dim arrInterpCurve

    ' ---------------------------------------------------------------------------------
    ' [ Get SURFACE object ]
    strObject = Rhino.GetObject("Select surface", 8)
    If IsNull(strObject) Then Exit Sub

    ' [ PROPERTY LIST BOX ]
    ' set variables
    Dim arrParameters, arrResults, arrValues
    ' set paramters names
    arrParameters = array("i: rows/sections (>1)", "j: columns/isoParms (>1)", "Normal: _height (<>0)", "Loft: _sectFrequence", "LOFT_Type", " _1 / Normal", " _2 / Loose", " _3 / Tight", " _4 / Straight")
    ' set default values
    arrValues = array("60", "10", "0.5", "2", "2", "-", "-", "-", "-")
    ' create "Property list box"
    arrResults = Rhino.PropertyListBox(arrParameters, arrValues, "Parameters", "ZOOYORK{1117_PAU_Skin_Panels}" )
    If IsArray(arrResults) Then
    ' NUMBER of rows/sections:
    nLONGITUDE = FormatNumber(arrResults(0))
    If IsNull(nLONGITUDE) Then Exit Sub
    nLONGITUDE = nLONGITUDE - 1
    ' NUMBER of columns:
    nTRANSVERSAL = FormatNumber(arrResults(1))
    If IsNull(nTRANSVERSAL) Then Exit Sub
    nTRANSVERSAL = nTRANSVERSAL - 1
    ' NORMAL _height:
    intDeltaHeight = FormatNumber(arrResults(2))
    If IsNull(intDeltaHeight) Then Exit Sub
    intDeltaHeight = intDeltaHeight - 1
    ' LOFT _Frequence:
    intLoft_sectionsFrequence = FormatNumber(arrResults(3))
    If intLoft_sectionsFrequence < 2 Then Exit Sub
    intLoft_sectionsFrequence = intLoft_sectionsFrequence -1
    intLoft_sectionsFrequence = intLoft_sectionsFrequence +1
    ' LOFT: _Type:
    intLoftType = FormatNumber(arrResults(4))
    If IsNull(intLoftType) Or intLoftType > 4 Then Exit Sub
    intLoftType = intLoftType - 1
    End If
    ' ---------------------------------------------------------------------------------
    ' GET DOMAIN OF SURFACE
    U = Rhino.SurfaceDomain(strObject, 0)
    V = Rhino.SurfaceDomain(strObject, 1)
    If Not IsArray(U) Or Not IsArray(V) Then Exit Sub

    ' ---------------------------------------------------------------------------------
    ' FOR each rows/sections:
    ' ---------------------------------------------------------------------------------
    For i = 0 To nLONGITUDE
    arrParam(0) = U(0) + (((U(1) - U(0)) / nLONGITUDE) * i)

    ' ---------------------------------------------------------------------------------
    ' FOR each columns/isoParms
    ' ---------------------------------------------------------------------------------
    For j = 0 To nTRANSVERSAL
    arrParam(1) = V(0) + (((V(1) - V(0)) / nTRANSVERSAL) * j)
    arrPoint = Rhino.EvaluateSurface(strObject, arrParam)
    'If IsArray(arrPoint) Then Rhino.AddPoint arrPoint

    ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ' [ ADD NORMAL ]
    arrParamNormal = Rhino.SurfaceClosestPoint(strObject, arrPoint)
    arrNormal = Rhino.SurfaceNormal(strObject, arrParamNormal)
    ' (arrNormal(0) is point on surf & arrNromal(1) is end of Normal)

    ' [ SET HEIGHT ALONG NORMAL ]
    ' Normal as Vector
    Dim arrNormal_VECTOR
    arrNormal_VECTOR = array( (arrNormal(1)(0))-(arrNormal(0)(0)), _
    (arrNormal(1)(1))-(arrNormal(0)(1)), _
    (arrNormal(1)(2))-(arrNormal(0)(2)) )
    ' Normal End Pt: translate along arrNormal_VECTOR and multiply by factor
    Dim arrNormal_ScaledEndPt
    arrNormal_ScaledEndPt = array( (arrNormal(1)(0))+(arrNormal_VECTOR(0)*intDeltaHeight), _
    (arrNormal(1)(1))+(arrNormal_VECTOR(1)*intDeltaHeight), _
    (arrNormal(1)(2))+(arrNormal_VECTOR(2)*intDeltaHeight) )
    ' Normal addLine
    Normal_Line = Rhino.addLine (arrNormal(0), arrNormal_ScaledEndPt)
    Rhino.objectColor Normal_Line, RGB(255, 0, 255)
    ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ' [ COLLECT NORMAL POINTS ]
    ' Normal PtOnSurface:
    ReDim Preserve arrNormal_PtOnSurf_Collect(nTRANSVERSAL)
    arrNormal_PtOnSurf_Collect(j) = arrNormal(0)
    ' Normal Scaled End PT:
    ReDim Preserve arrNormal_PtEnd_Collect(nTRANSVERSAL)
    ' special case for the EDGE
    If i=0 And i=nLONGITUDE And j=0 And j=nTRANSVERSAL Then
    ' else keep the point on the Edge
    arrNormal_PtEnd_Collect(j) = arrNormal(0)
    Else
    ' if different from first or last Pt:
    arrNormal_PtEnd_Collect(j) = arrNormal_ScaledEndPt
    End If
    ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    '[ EXPERIMENT ]
    Dim indexCROSS_everyNpoint: indexCROSS_everyNpoint = 2
    ' in order to start the count of every two, one stripe before
    ' catch on LONGITUDE (i) some points on the previous: it only start starting from the 2
    Dim STRIPE_FrequenceNumber: STRIPE_FrequenceNumber = i+1

    ReDim Preserve arrPt_WAVE(nTRANSVERSAL)
    Dim strWAVE
    ' WAVE UpDown is curve straight via all j points
    ReDim Preserve arrPt_WAVE_UpDown(nTRANSVERSAL)
    Dim strWAVE_UpDown

    'in order to start the count of every two, one stripe before
    If STRIPE_FrequenceNumber Mod 2 Then
    ' ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
    ' [ GREY & PINK ]
    If STRIPE_FrequenceNumber <> 1 Then
    ' first stripe doesn't have any previous history

    If j Mod indexCROSS_everyNpoint Then
    ' point on this row
    arrPt_WAVE(j) = arrNormal_PtOnSurf_Collect(j)
    arrPt_WAVE_UpDown(j) = arrNormal_PtOnSurf_Collect(j)
    Else
    ' point on the previous row
    arrPt_WAVE(j) = arrNormal_PtOnSurf_Collect_PreviousRow(j)
    arrPt_WAVE_UpDown(j) = arrNormal_PtEnd_Collect(j)
    End If

    If j = nTRANSVERSAL Then
    ' addCurve: WAVE GREY
    strWAVE = Rhino.AddInterpCrvOnSrf (strObject,arrPt_WAVE)
    Rhino.objectColor strWAVE, RGB(150, 150, 150)
    ' addCurve: WAVE PINK
    strWAVE_UpDown = Rhino.AddInterpCurve (arrPt_WAVE_UpDown, 3)
    Rhino.objectColor strWAVE_UpDown, RGB(200, 0, 200)

    ' ADD LOFT SURFACE:
    arrInterpCurve = array(strWAVE_previous(i-1), strWAVE_UpDown_previous(i-1), strWAVE)
    strObjectLoft = Rhino.AddLoftSrf (arrInterpCurve, , ,intLoftType,1,100, False)
    Rhino.SurfaceIsocurveDensity strObjectLoft, -1
    Rhino.objectColor strObjectLoft, RGB(225, 225, 255)
    End If

    End If
    ' ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
    Else
    ' ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
    ' [ BLACK & PURPLE]
    ' one point every two
    If j Mod indexCROSS_everyNpoint Then
    ' point on this row
    arrPt_WAVE(j) = arrNormal_PtOnSurf_Collect_PreviousRow(j)
    arrPt_WAVE_UpDown(j) = arrNormal_PtEnd_Collect(j)
    Else
    ' point on the previous row
    arrPt_WAVE(j) = arrNormal_PtOnSurf_Collect(j)
    arrPt_WAVE_UpDown(j) = arrNormal_PtOnSurf_Collect(j)
    End If

    If j = nTRANSVERSAL Then
    ' addCurve: WAVE BLACK
    strWAVE = Rhino.AddInterpCrvOnSrf (strObject,arrPt_WAVE)
    Rhino.objectColor strWAVE, RGB(0, 0, 0)
    ' addCurve: WAVE PURPLE
    strWAVE_UpDown = Rhino.AddInterpCurve (arrPt_WAVE_UpDown, 3)
    Rhino.objectColor strWAVE_UpDown, RGB(100, 0, 100)

    ' ADD LOFT SURFACE:
    If i>1 Then
    arrInterpCurve = array(strWAVE_previous(i-1), strWAVE_UpDown_previous(i-1), strWAVE)
    strObjectLoft = Rhino.AddLoftSrf (arrInterpCurve, , ,intLoftType,1,100, False)
    Rhino.SurfaceIsocurveDensity strObjectLoft, -1
    Rhino.objectColor strObjectLoft, RGB(0, 0, 0)
    End If
    End If
    ' ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
    End If

    'keep WAVE
    ReDim Preserve strWAVE_previous(nLONGITUDE)
    strWAVE_previous(i) = strWAVE
    ReDim Preserve strWAVE_UpDown_previous(nLONGITUDE)
    strWAVE_UpDown_previous(i) = strWAVE_UpDown

    ' keep the collection of point of the previous row
    ReDim Preserve arrNormal_PtOnSurf_Collect_PreviousRow(nTRANSVERSAL)
    arrNormal_PtOnSurf_Collect_PreviousRow(j) = arrNormal_PtOnSurf_Collect(j)
    ReDim Preserve arrNormal_PtEnd_Collect_PreviousRow(nTRANSVERSAL)
    arrNormal_PtEnd_Collect_PreviousRow(j) = arrNormal_PtEnd_Collect(j)
    '[ END EXPERIMENT ]
    ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ' ---------------------------------------------------------------------------------
    Next
    ' ---------------------------------------------------------------------------------
    ' ---------------------------------------------------------------------------------
    Next
    ' ---------------------------------------------------------------------------------

    End Sub
    ArraySurfaceNormalSectionLoft

Recommend

Why are these buttons gray?