Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 12 ноя 2018, 22:36

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)



Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Неправильное значение координат у динамического коннектора
СообщениеДобавлено: 03 июн 2016, 09:56 
Да, хочу добавить немаловажную вещь.
Я занимаюсь импортом из визио в визио(не спрашивайте зачем :D ). Поэтому беру геометрию динамического коннектора из визио, то есть корректную, которую я сам задал и накидываю опять же в визио на другую диаграмму. Поэтому у меня возникает сомнение в том, что постобработка пытается подогнать геометрию под координаты.


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Неправильное значение координат у динамического коннектора
СообщениеДобавлено: 03 июн 2016, 10:04 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 897
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
я например как-то преобразовывал набор линий в коннектор. т.е. тоже строил геометрию коннектора вручную. с нуля. отлично все работало. только делал это в VBA. попробуй сначала проделать то, что ты хочешь в VBA. таким образом круг подозреваемых сузится


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Неправильное значение координат у динамического коннектора
СообщениеДобавлено: 03 июн 2016, 11:04 
9rey писал(а):
я например как-то преобразовывал набор линий в коннектор. т.е. тоже строил геометрию коннектора вручную. с нуля. отлично все работало. только делал это в VBA. попробуй сначала проделать то, что ты хочешь в VBA. таким образом круг подозреваемых сузится

Попробовал тоже самое макросом сделать, получил ту же ошибку, то есть координата X сместилась по неведомой причине.
Коннектор взял самый простой, с двумя углами.


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Неправильное значение координат у динамического коннектора
СообщениеДобавлено: 03 июн 2016, 11:04 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1187
Очков репутации: 100588

Добавить очки репутацииУменьшить очки репутации
Цитата:
Если я не закреплю точку конца, то геометрия будет подстраиваться?

Так на моей картинке (см. выше) этот момент явно отображен.
Сначала коннектор из двух отрезков.
Я смещаю нижний отрезок вниз, для чего корректирую значения Y в двух строках.
Visio добавляет еще строку (сегмент) чтобы от второго смещенного узла опять прийти в старую конечную точку.
Коннектор не закреплен, болтается в воздухе.
-------
Потом я попробовал то же по X. Это уже без документирования.
Там Visio отреагировал по-другому (условия другие). Он просто заменил только что введенное программой значение на старое.
Для проверки гипотезы надо было, конечно, еще и EndX подкорректировать... Тогда скорее всего Visio принял бы изменения.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Неправильное значение координат у динамического коннектора
СообщениеДобавлено: 03 июн 2016, 11:14 
Да я уже понял, что это бессмысленно.
Тем не менее смещение наблюдается и при дропе макросом. То есть фигня какая-то, стрелку взял по длиннее, чтобы точно не было желания подстраивать геометрию, но не прокатило.
Есть у кого ещё идеи?


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Неправильное значение координат у динамического коннектора
СообщениеДобавлено: 03 июн 2016, 11:41 
Заметил странную особенность:
1) Добавляю коннектор на диаграмму, меняю его геометрию(удлиняю немного), при дропе макросом получили смещение.
2) Добавляю коннектор и не меняю его геометрию, при дропе смещения нету
Это так и должно работать?


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Неправильное значение координат у динамического коннектора
СообщениеДобавлено: 03 июн 2016, 12:22 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1187
Очков репутации: 100588

Добавить очки репутацииУменьшить очки репутации
Цитата:
Для проверки гипотезы надо было, конечно, еще и EndX подкорректировать... Тогда скорее всего Visio принял бы изменения.

Это проверил. Подтвердилось.
Цитата:
2) Добавляю коннектор и не меняю его геометрию, при дропе смещения нету
Это так и должно работать?

Вот тут едва ли кто скажет как "должно работать". Нет таких данных.
Вполне можно предположить, что в процессе изменения геометрии дополнительно переключается что-то еще. Шейп становится "не таким" и обрабатывается по-другому.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Неправильное значение координат у динамического коннектора
СообщениеДобавлено: 03 июн 2016, 15:07 
Tumanov писал(а):
Вполне можно предположить, что в процессе изменения геометрии дополнительно переключается что-то еще. Шейп становится "не таким" и обрабатывается по-другому.

И как определить, что что-то дополнительно переключается? Или подскажите как запретить пересчитывать координаты.
Я просто совсем не понимаю почему координаты сдвигаются и идей совсем нет как этого избежать, кроме здоровенных костылей.


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Неправильное значение координат у динамического коннектора
СообщениеДобавлено: 03 июн 2016, 16:18 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1187
Очков репутации: 100588

Добавить очки репутацииУменьшить очки репутации
Цитата:
Я просто совсем не понимаю почему координаты сдвигаются и идей совсем нет как этого избежать, кроме здоровенных костылей.

Координаты сдвигаются, потому что этот шейп (коннектор) не предназначен для такого программного управления. Считается, что им можно управлять только вручную. При этом Visio имеет право вмешиваться и "помогать" пользователю.
Если это не нравится, нужно пользоваться другими шейпами.
Или на свой страх и риск подмечать все особенности, накапливать опыт и приспосабливаться. Гарантий никаких не будет.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Неправильное значение координат у динамического коннектора
СообщениеДобавлено: 03 июн 2016, 23:04 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 897
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
строил коннектор по точкам. ф-я принимает коллекцию с координатами точек в координатах листа в дюймах (внутренние единицы визио), далее с пересчетом в координаты шейпа (коннектора). первый элемент коллекции - текст (пишется над коннектором).

у меня работало без вопросов (визио 2010). может поможет.

Код:
'построение коннектора из координат
Sub BuildConnectorByPoints(col As Collection)
    Dim sh As Shape, j As Long, k As Long, x1 As Double, y1 As Double
   
    Set sh = ActivePage.Drop(Application.ConnectorToolDataObject, 0, 0)
   
    With sh
        'перепрокладывать маршрут нельзя
        '.CellsU("ConFixedCode").ResultIU = 3
        .Text = col(1)
        .CellsU("BeginX") = col(2)
        .CellsU("BeginY") = col(3)
        .CellsU("EndX") = col(col.Count - 1)
        .CellsU("EndY") = col(col.Count)
       
        k = (col.Count - 1) / 2
        For j = 0 To k - 1 'заполнение геометрии коннектора
            If Not .RowExists(visSectionFirstComponent, visRowVertex + j, 0) Then
                .AddRow visSectionFirstComponent, visRowVertex + j, visTagLineTo
            End If
            x1 = col(2 + j * 2)
            y1 = col(3 + j * 2)
            .XYFromPage x1, y1, x1, y1
            .CellsSRC(visSectionFirstComponent, visRowVertex + j, visX).ResultIU = x1
            .CellsSRC(visSectionFirstComponent, visRowVertex + j, visY).ResultIU = y1
        Next j
        For j = .RowCount(visSectionFirstComponent) - 2 To k Step -1 'убрать оставшиеся лишние строки коннектора
            If .RowExists(visSectionFirstComponent, visRowVertex + j, 0) Then .DeleteRow visSectionFirstComponent, visRowVertex + j
        Next j
    End With
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Неправильное значение координат у динамического коннектора
СообщениеДобавлено: 06 июн 2016, 09:58 
Всем спасибо. Решил проблему путём добавления небольших пауз(50 миллисекунд) после каждой установленной точки.
Видимо этого достаточно чтобы отработала логика визио и координаты выставляются верные.
Конечно, выглядит как костыль, но в данном случае адекватный :D


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Неправильное значение координат у динамического коннектора
СообщениеДобавлено: 06 июн 2016, 11:22 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 897
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
в VBA иногда тоже так приходится делать. я для этого использую внутреннюю функцию визио - DoEvents


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Неправильное значение координат у динамического коннектора
СообщениеДобавлено: 06 июн 2016, 11:48 
9rey писал(а):
в VBA иногда тоже так приходится делать. я для этого использую внутреннюю функцию визио - DoEvents

Блин, а возможно что и не паузы нужны вовсе, а именно эта функция!
Я ведь паузы вместе с ней выполняю. Спасибо, есть над чем подумать.


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Неправильное значение координат у динамического коннектора
СообщениеДобавлено: 06 июн 2016, 22:53 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 591
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100603

Добавить очки репутацииУменьшить очки репутации
Bill17 писал(а):
Tumanov писал(а):
Вполне можно предположить, что в процессе изменения геометрии дополнительно переключается что-то еще. Шейп становится "не таким" и обрабатывается по-другому.

И как определить, что что-то дополнительно переключается? Или подскажите как запретить пересчитывать координаты.
Я просто совсем не понимаю почему координаты сдвигаются и идей совсем нет как этого избежать, кроме здоровенных костылей.


Попробуй просто выключить авто-расположение для твоего коннектора, если это тебе не нужно.
Поведение -> Соединительная линия -> Изменение маршрута -> Никогда

_________________
Инструменты для облегчения создания диаграмм, и статьи по Visio:
http://unmanagedvisio.com/


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB