Метод Shape.DrawSpline (Visio)

Создает новую фигуру, путь которой следует за заданной последовательностью точек.

Синтаксис

выражение. DrawSpline( _xyArray()_ , _Tolerance_ , _Flags_ )

выражение Переменная, представляющая объект Фигура.

Параметры

Имя Обязательный или необязательный Тип данных Описание
xyArray() Обязательный Double Массив чередующихся значений x и y , определяющих точки в пути новой фигуры.
Допуск Обязательный Double Насколько близко путь новой фигуры должен приблизиться к заданным точкам.
Flags Обязательный Integer Флаги, влияющие на то, как рисуется фигура.

Возвращаемое значение

Shape

Примечания

Метод DrawSpline создает новую фигуру, путь которой находится в пределах заданного допуска заданного массива точек. Чтобы точно соответствовать заданным точкам, укажите допуск нуля (0). Как правило, метод DrawSpline помещает сегменты сплайна через точки, но иногда он создает сегменты линии или круговой дуги в новой фигуре.

Контрольные точки и погрешность находятся во внутренних единицах рисования (дюймах) относительно пространства координат страницы, master или группы, в которой создается новая фигура. Переданный массив должен быть SAFEARRAY из 8-байтовых значений с плавающей запятой, передаваемых по ссылке (VT_R8|VT_ARRAY|VT_BYREF). Таким образом Microsoft Visual Basic передает массивы в объекты службы автоматизации.

Ошибка от точки к пути результирующей фигуры примерно находится в пределах допустимости. Если количество точек велико, фактическая ошибка иногда может превышать предписанный допуск.

Параметр Flags — это битовая маска, указывающая параметры для рисования новой фигуры. Его значение должно быть равным нулю или комбинации одного или нескольких из следующих значений.

Константа Значение
visSplinePeriodic 1(&H1)
visSplineDoCircles 2(&H2)
visSplineAbrupt 4(&H4)
visSpline1D 8(&H8)

Если флаги включают visSplinePeriodic и выполняются следующие условия, приложение пытается нарисовать периодический сплайн. В противном случае Visio рисует не периодическое сплайн:

  • Последняя точка должна быть повторением первой.

  • Если флаг visSplineAbrupt также включен, весь закрытый путь, указанный точками, должен быть свободен от резких изменений направления и кривизны.

Если флаги включают visSplineDoCircles, Microsoft Visio распознает циклические сегменты в заданном массиве точек и создает циклические дуги вместо сплайн-строк для этих сегментов.

Если флаги включают visSplineAbrupt, Visio прерывает сплайн каждый раз, когда обнаруживает резкое изменение направления или кривизны в следе точки. Резкое изменение направления определяется тремя последовательными точками A, B, C в списке, для которых расстояние между B и сегментом AC линии более чем в два раза превышает допуск. Приложение также считает точку Б резким изменением, если один из сегментов AB или BC более чем в два раза длиннее другого. В момент, когда обнаруживается резкое изменение, приложение завершает текущий фрагмент (линия, дуга или сплайн) и запускает новый.

Если флаги включают visSpline1D , а первая и последняя точки в xyArray() не совпадают, метод DrawSpline создает фигуру с одномерным (1D) поведением. В противном случае он создает фигуру с двумерным (2D) поведением.

Если первая и последняя точки в xyArray() совпадают, метод DrawSpline создает заполненную фигуру.

Пример

В следующем примере показано, как провести периодический сплайн через пять произвольных точек, требуя, чтобы сплайн-подход был в пределах 0,25 дюйма (рисование) от каждой точки. Это позволяет Visio начинать новые сегменты на пути новой фигуры в точках, которые считаются резкими.

 
Public Sub DrawSpline_Example() 
 
 Dim vsoShape As Visio.Shape 
 Dim intCounter As Integer 
 Dim adblXYPoints(1 To (5 * 2)) As Double 
 
 For intCounter = 1 To 5 
 
 'Set x components (array elements 1,3,5,7,9) to 1,2,3,4,5 
 adblXYPoints((intCounter * 2) - 1) = intCounter 
 
 'Set y components (array elements 2,4,6,8,10) to f(i) 
 adblXYPoints(intCounter * 2) = (intCounter * intCounter) - (7 * intCounter) + 15 
 Next intCounter 
 
 Set vsoShape = ActivePage.DrawSpline(adblXYPoints, 0.25, visSplineAbrupt) 
 
End Sub

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.