Langloch zeichnen mit RhinoScript

Mit dem folgenden Script kann man bequem ein Langloch zeichnen. Zunächst werden der Mittelpunkt, der Durchmesser und die Länge abgefragt, zuletzt in welcher Ausrichtung das Langloch gezeichnet werden soll.

Das Script ist IMHO selbsterklärend. Aus den ermittelten Parametern werden jeweils die Punkte errechnet, von wo (über welchen Punkt) bis wo eine Linie oder ein Bogen gezeichnet werden soll und die Kurven anschließend sofort gezeichnet.

Mögliche Optimierung: Kurven erzeugen und in eine Polykurve packen, Prüfung ob Länge größer als der Radius ist.

Option Explicit

'----------------------------------------
' @(#) Langloch zeichnen
' @(#) Datum: 2013-04-19
' @(#) Autor: dh
'----------------------------------------

' globale Variablen deklarieren
Dim doDebug

'----------------------------------------
' Hauptroutine
'----------------------------------------
Sub Langloch()

    Dim dblD, dblR, dblL
    Dim strDir, arrDirs
    Dim arrCenter, xc, yc
    Dim arrStart, arrEnd, arrMiddle
    Dim ob

    ' Parameter ermitteln
    
    arrCenter= Rhino.GetPoint("Langloch-Mittelpunkt")
    If Not IsArray(arrCenter) Then Exit Sub
    
    dblL= Rhino.GetReal("Langloch-Länge", 50.0, 0)
    If IsNull(dblL) Then Exit Sub

    dblD= Rhino.GetReal("Langloch-Durchmesser", 2.0, 0)
    If IsNull(dblD) Then Exit Sub

    arrDirs= Array("horizontal", "vertikal")
    strDir= Rhino.GetString("Langloch-Ausrichtung", arrDirs(0), arrDirs)
    If IsNull(strDir) Then Exit Sub

    ' jetzt geht's lohooos

    dblR= dblD / 2.0
    xc= arrCenter(0)
    yc= arrCenter(1)

    If strDir = "horizontal" Then
	
	' obere Linie
	arrStart= Array( xc + (dblL/2.0) - dblR, yc + dblR )
	arrEnd= Array( xc - (dblL/2.0) + dblR, yc + dblR )
	ob= Rhino.AddLine(arrStart, arrEnd)

	' linker Bogen
	arrStart= Array( xc - (dblL/2.0) + dblR, yc + dblR )
	arrMiddle= Array( xc - (dblL/2.0), yc)
	arrEnd= Array( xc - (dblL/2.0) + dblR, yc - dblR )
	ob= Rhino.AddArc3Pt(arrStart, arrEnd, arrMiddle )
	
	' untere Linie
	arrStart= Array( xc - (dblL/2.0) + dblR, yc - dblR )
	arrEnd= Array( xc + (dblL/2.0) - dblR, yc - dblR )
	ob= Rhino.AddLine(arrStart, arrEnd)

	' rechter Bogen
	arrStart= Array( xc + (dblL/2.0) - dblR, yc - dblR )
	arrMiddle= Array( xc + (dblL/2.0), yc)
	arrEnd= Array( xc + (dblL/2.0) - dblR, yc + dblR )
	ob= Rhino.AddArc3Pt(arrStart, arrEnd, arrMiddle )

    Else

	' rechte Linie
	arrStart= Array( xc + dblR, yc - (dblL/2.0) + dblR )
	arrEnd= Array( xc + dblR, yc + (dblL/2.0) - dblR )
	ob= Rhino.AddLine(arrStart, arrEnd)

	' oberer Bogen
	arrStart= Array( xc + dblR, yc + (dblL/2.0) - dblR )
	arrMiddle= Array( xc, yc + (dblL/2.0) )
	arrEnd= Array( xc - dblR, yc + (dblL/2.0) - dblR )
	ob= Rhino.AddArc3Pt(arrStart, arrEnd, arrMiddle )
	
	' linke Linie
	arrStart= Array( xc - dblR, yc + (dblL/2.0) - dblR )
	arrEnd= Array( xc - dblR, yc - (dblL/2.0) + dblR )
	ob= Rhino.AddLine(arrStart, arrEnd)

	' unterer Bogen
	arrStart= Array( xc - dblR, yc - (dblL/2.0) + dblR )
	arrMiddle= Array( xc, yc - (dblL/2.0) )
	arrEnd= Array( xc + dblR, yc - (dblL/2.0) + dblR )
	ob= Rhino.AddArc3Pt(arrStart, arrEnd, arrMiddle )

    End If

End Sub

'----------------------------------------
' Script startet hier
'----------------------------------------
' Globale Variablen initialisieren
doDebug= False
' Hauptroutine aufrufen
Langloch()
' Feierabend
Rhino.Print "End of Script"

rvb-Langloch

  1. Bisher keine Kommentare