Visualize Points

 This Rhino Script presents a series of options for the visualization of points, relative to graphics output.  Once points are selected the user can then select to overlay the points with either a circle curve, cross curve, coordinate anchor curve, spherical surface, or cubical polysurface.  Once the output type is selected a series of orientation options are made available, either using the world coordinate plane, the camera plane, current construction plane, or a plane perpendicular to a user-specified point.

Rhino Script

Option Explicit
'Script written by <David Mans>
'Script copyrighted by <Neoarchaic Studio>
'Script version Wednesday, September 16, 2009 4:56:53 PM

Call Main()
Sub Main()
	Dim arrPtset, arrMode, arrOrient
	arrPtset = Rhino.GetObjects("Select Points to Visualize", 1,, True, False)
	If isNull(arrPtset) Then Exit Sub
	
	arrMode = Rhino.GetString("Select Visualization Mode", "Box", array("Circle", "Sphere", "Cross", "Coordinate_System", "Box"))
	If isNull(arrMode) Then Exit Sub
	arrOrient = Rhino.GetString("Select Object Orientation", "World", array("World", "Active", "Point", "Camera"))
	If isNull(arrOrient) Then Exit Sub
		
	'Optional Inputs
	Dim arrUserPt, dblRadius, arrCS
	If arrOrient = "Point" Then
		arrUserPt = Rhino.GetPoint("Select Point to Orient Objects Towards", array(0, 0, 0))
	ElseIf arrOrient = "Camera" Then
		arrUserPt = Rhino.ViewCamera()
	End If
	If arrOrient = "World" Then
		arrCS = Rhino.GetString("World Coordinate System", "XY", array("XY", "YZ", "ZX"))
	End If
	
	dblRadius = Rhino.GetReal("Radius", 1)
	If isNull(dblRadius) Then Exit Sub
	
	'Evalute for Each Point
	Dim i, j, arrPt, arrPln, tpt(), v(2), x, y, z
	
	If arrMode = "Box" Then
		ReDim tPt(7)
		x = array(1, -1, -1, 1, 1, -1, -1, 1)
		y = array(1, 1, -1, -1, 1, 1, -1, -1)
		z = array(-1, -1, -1, -1, 1, 1, 1, 1)
	ElseIf arrMode = "Cross" Then
		ReDim tPt(5)
		x = array(1, -1, 0, 0, 0, 0)
		y = array(0, 0, 1, -1, 0, 0)
		z = array(0, 0, 0, 0, 1, -1)
	ElseIf arrMode = "Coordinate_System" Then
		ReDim tPt(5)
		x = array(-1, 0, 0, 0, 0, 0)
		y = array(0, 0, -1, 0, 0, 0)
		z = array(0, 0, 0, 0, -1, 0)
	End If
	Call Rhino.EnableRedraw(False)
	For i = 0 To uBound(arrPtset) Step 1
		arrPt = Rhino.PointCoordinates(arrPtset(i))
		'Set up orientation options
		If arrOrient = "World" Then
			If arrCS = "XY" Then
				arrPln = Rhino.MovePlane(Rhino.WorldXYPlane(), arrPt)
			ElseIf arrCS = "YZ" Then
				arrPln = Rhino.MovePlane(Rhino.WorldYZPlane(), arrPt)
			ElseIf arrCS = "ZX" Then
				arrPln = Rhino.MovePlane(Rhino.WorldZXPlane(), arrPt)
			End If
		ElseIf arrOrient = "Active" Then
			arrPln = Rhino.ViewCPlane()
		ElseIf arrOrient = "Point" Then
			arrPln = Rhino.PlaneFromNormal(arrPt, Rhino.VectorCreate(arrPt, arrUserPt))
		ElseIf arrOrient = "Camera" Then
			arrPln = Rhino.PlaneFromNormal(arrPt, Rhino.VectorCreate(arrPt, arrUserPt))
		End If
		
		'Execute Visualization Functions/ Geometry
		If arrMode = "Circle" Then
			Call Rhino.AddCircle(arrPln, dblRadius)
		ElseIf arrMode = "Sphere" Then
			Call Rhino.AddSphere(arrPt, dblRadius)
		ElseIf arrMode = "Box" Then
			For j = 0 To 7 Step 1
				tPt(j) = evaluatePlane(arrPln, array(dblRadius * x(j), dblRadius * y(j), dblRadius * z(j)))
			Next
			Call Rhino.AddBox(tPt)
		ElseIf arrMode = "Cross" Or arrMode = "Coordinate_System" Then
			For j = 0 To 4 Step 2
				tPt(j) = evaluatePlane(arrPln, array(dblRadius * x(j), dblRadius * y(j), dblRadius * z(j)))
				tPt(j + 1) = evaluatePlane(arrPln, array(dblRadius * x(j + 1), dblRadius * y(j + 1), dblRadius * z(j + 1)))
				Call Rhino.AddLine(tPt(j), tPt(j + 1))
			Next
		End If
	Next
	
	Call Rhino.EnableRedraw(True)
End Sub
Function evaluatePlane(arrPlane, arrPoint)
	evaluatePlane = Null
	Dim i, arrPt
	arrPt = arrPlane(0)
	For i = 0 To 2 Step 1
		arrPt = Rhino.PointAdd(arrPt, Rhino.VectorScale(Rhino.VectorUnitize(arrPlane(i + 1)), arrPoint(i)))
	Next
	
	evaluatePlane = arrPt
End Function