SetWidth Example

Using Programming Languages other than VBA

Sub Example_SetWidth()
	' The following code prompts you to select a lightweight
	' polyline, and then prompts you for the width to set each 
	' segment of the polyline. 
	' Pressing ENTER without specifying a width is equivalent to
	' entering 0. 
	Dim returnObj As AcadObject
	Dim basePnt As Variant
	Dim retCoord As Variant
	Dim StartWidth As Double
	Dim EndWidth As Double
	Dim i, j As Long
	Dim nbr_of_segments As Long
	Dim nbr_of_vertices As Long
	Dim segment As Long
	Dim promptStart As String
	Dim promptEnd As String
	On Error Resume Next
	ThisDrawing.Utility.GetEntity returnObj, basePnt, "Select a polyline"
	' Make sure the user selected a polyline.
	If Err <> 0 Then
		If returnObj.EntityName <> "AcDbPolyline" Then
			MsgBox "You did not select a polyline"
		End If
		Exit Sub
	End If

	' Obtain the coordinates of each vertex of the selected polyline.
	' The coordinates are returned in an array of points.
	retCoord = returnObj.Coordinates

	segment = 0
	i = LBound(retCoord)				 ' Start index of coordinates array
	j = UBound(retCoord)				 ' End index of coordinates array
	nbr_of_vertices = ((j - i) \ 2) + 1  ' Number of vertices in the polyline

	' Determine the number of segments in the polyline.
	' A closed polyline has as many segments as it has vertices.
	' An open polyline has one fewer segment than it has vertices.
	' Check the Closed property to determine if the polyline is closed.

	If returnObj.Closed Then
		nbr_of_segments = nbr_of_vertices
		nbr_of_segments = nbr_of_vertices - 1
	End If

	' Have user set the width for each segment of the polygon
	Do While nbr_of_segments > 0
		' Get width values from the user
		promptStart = vbCrLf & "Specify the width at the beginning of the segment at " & retCoord(i) & "," & retCoord(i + 1) & " ==> "
		promptEnd = vbCrLf & "Now specify the width at the end of that segment ==> "
		StartWidth = ThisDrawing.Utility.GetReal(promptStart)
		EndWidth = ThisDrawing.Utility.GetReal(promptEnd)

		' Set the width of the current segment
		returnObj.SetWidth segment, StartWidth, EndWidth
		' Prepare to obtain width of next segment, if any
		i = i + 2
		segment = segment + 1
		nbr_of_segments = nbr_of_segments - 1

	MsgBox "Segment widths have been set", , "SetWidth Example"

End Sub