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

Форум по вопросам применения и программирования в Visio
Текущее время: 06 авг 2020, 20:24

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


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


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !
Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 19 мар 2019, 13:57 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 61
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Удалил файлы поскольку решил попробовать продать сие.
Писал в VS 2017 Community.
Проверял на Visio 2016 и 2007 Другие версии не пробовал.

Убрал ошибку и добавил нерусский язык.

По этой ссылке файла тоже нет, теперь.
кросс-пост


Вложения:
Poster.png
Poster.png [ 191.27 Кб | Просмотров: 514 ]


Последний раз редактировалось Boris 30 мар 2019, 16:50, всего редактировалось 3 раз(а).
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 24 мар 2019, 15:47 
При создании четырёхугольного массива есть один глюк.
Если выбрать родительский элемент и потом передвинуть его в любую сторону то величина сдвига добавится ко всем элементам массива.
То есть родительский элемент на месте а массив в стороне на величину перемещения родительского шейпа после первого выделения.
И понять не могу из-за чего такой эффект.


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 24 мар 2019, 18:32 
Boris в сообщении писал(а):
Попробую описать что происходит.
Аддон по выделенному шейпу создаёт массив из копий первоначального шейпа. Строит правильно.
Удаляю массив им же. Отдельная кнопочка "Отменить".
И когда после этого на листе перемещаешь первый шейп в другую позицию. Создание следующего массива идёт криво. Причём кривизна зависит от расстояния на которое передвинул первый шейп. То есть программа помнит некоторые данные и пытается применить их.
этот баг описывался на стадии написания аддона


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 24 мар 2019, 20:30 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
этот баг описывался на стадии написания аддона

Да. И я там даже приводил VBA-тест повторяющий такое поведение.
Код:
    Dim arXY() As Double
    Dim arOb() As Variant
    Dim arId() As Integer
Sub ttt()
    If ActiveWindow.Selection.Count <> 1 Then Exit Sub
    Set shp = ActiveWindow.Selection(1)
    cnt = 1
    ReDim arXY(1 To 2)
    ReDim arOb(1 To 1)
    x0 = shp.Cells("PinX").ResultIU
    y0 = shp.Cells("PinY").ResultIU
    dx = 1
    Set arOb(1) = shp
    arXY(1) = x0 + dx
    arXY(2) = y0
    rez = ActivePage.DropMany(arOb, arXY, arId)
    Set arOb(1) = Nothing
    Set shp = Nothing
End Sub

Однако, как я теперь вижу, в выводы вкралась ошибка. Тогда я решил, что это не баг, а свойство Visio. Типа, так и надо...
Таки нет! Это ошибка программиста! Приведенный выше код (по сравнению с прежним) содержит две лишних очистки в конце. Чистится шейп и массив. И такой код не ошибается.
А вот если чистить что-то одно (хоть шейп, хоть массив), то уже наблюдаестя сдвиг. И не важно, что при следующем запуске шейп перезаписывается в массив, что вроде бы должно и массив очистить.
Так что народ там давал правильный совет - чистить надо все. И тщательнее, тщательнее!


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 25 мар 2019, 08:37 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 61
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Этот баг происходит и до построения массива.
Выделяешь шейп и ничего не строя передвигаешь его и нажимаешь кнопку построить.
И тогда массив строится с учетом этого сдвига.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 25 мар 2019, 12:54 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 61
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Дело в том что по задумке.
Пользователь строит массив, удаляет изменяет параметры и строит новый.
В том числе может перемещать родительский шейп. Пока не получит то чего желает.
И если после каждого удаления массива чистить имя шейпа, то пользователю придётся снова повторять процедуру выбора.
Это неудобно.

Кстати в остальных массивах по дуге такого глюка нет.
А ведь разница только в алгоритме построения.
Всё остальное совершенно одинаковое.
Посмотрите проект. Там почти каждая строчка с комментариями.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 25 мар 2019, 15:19 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Да, моя модель несколько отличается от исходной. Мы даже говорили о разных массивах. Я ведь использовал DropMany вместо простого Drop. А там массив строится заранее, еще до прорисовки шейпов. Ну ладно, неважно.
Еще раз разберем задачу.
У Вас образуется некая "скрытая память" исходного шейпа. И эта память начинает учитывать смещение исходного шейпа в последующих запусках. Возможно Visio принимает во внимание уникальный идентификатор шейпа, поэтому даже при обнулении и повторном присвоении объекта считает его тем же самым. Предположим, что мы не можем чистить эту скрытую память, но желательно от нее избавиться.
Я предлагаю следующий метод: размножать не исходный шейп, а его копию. В форме запоминаем исходный шейп. При построении массива создаем копию шейпа. Используем копию в операции Drop. После построения всего массива копию удаляем.
В этом случае на каждом проходе копия будет создаваться заново, поэтому рабочий шейп будет явно другим.
Присмотритесь к этому коду
Код:
                        ' Создание копии первого элемента, установка на место.
                        ' Получение имени полученной копии.
                        visShp = visAcPg.Shapes(Arrey.vPerObjPr)
                        Dim visShp1 As Visio.Shape
                        visShp.Copy(1)
                        visAcPg.Paste(1)
                        visShp1 = ViAp.ActiveWindow.Selection.PrimaryItem
                        vTemp = visAcPg.Drop(visShp1, vX1, vY1).Name
                        visShp1.Delete()
                        visShp1 = Nothing

Я его вставил непосредственно рядом с Drop. Для проверки. Вроде бы ситуация исправляется.
Это только пример. На самом деле копию надо делать перед циклом и удалять после цикла. То есть один раз на весь массив.
И не забыть копировать с опцией visCopyPasteNoTranslate, чтобы копия попадала на то же самое место, что и исходный шейп. (А может это и не важно).


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 25 мар 2019, 16:11 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 61
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Если включена привязка к первому то строится правильно.
Если после этого строить ещё раз но уже без привязки то тоже нормально.
Колдовством попахивает, однако.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 25 мар 2019, 16:37 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Последнее сообщение не понял...
Если так, то нормально. Если так, то тоже нормально.
А ненормально бывает? Или можно считать, что все заработало?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 25 мар 2019, 17:11 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Кстати, о птичках...
Читаю справку по поводу Drop
Цитата:
If ObjectToDrop is a Master, the pin of the master is dropped at the specified coordinates.

Типа, если дропаем мастер, то да, он ляжет в указанные координаты. А если нет, то ничего не сказано. Может и промахнется! Таки да, это и наблюдаем. В некоторых случаях промахивается. Но как тонко это отражено в документации :) То есть, они знали, просто не стали все подробности расписывать.
А ведь помнится, много лет тому назад я читал какое-то предупреждение о неточности Drop. И еще тогда взял за правило во всех программах - всегда после дропа подправлять PinX, PinY. Чтобы голова не болела. Чувствую, поэтому и никогда не налетал на такую ситуацию.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 26 мар 2019, 07:19 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 61
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Если после выбора шейпа переместить его то массив строится на удвоенное расстояние перемещения от родительского шейпа.
И по горизонтали и по вертикали.
Но если включить "Привязать к первому" то построение идёт правильно, без смещения.
Если в этом случае удалить массив и построит ещё раз но уже без привязки то тоже строится без смещения.
Вот я и говорю что колдовство однако.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 26 мар 2019, 07:57 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 61
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Вот это полностью вылечило глюк DROP.

vTemp = visAcPg.Drop(visAcPg.Shapes(Arrey.vPerObjPr), vX, vY).Name

'Лечение глюка DROP с точки зрения логики это бредовая конструкция, но ведь работает.
visAcPg.Shapes(vTemp).Cells("PinX").FormulaForce = visAcPg.Shapes(Arrey.vPerObjPr).Cells("PinX").ResultIU + (vX - vXC)
visAcPg.Shapes(vTemp).Cells("PinY").FormulaForce = visAcPg.Shapes(Arrey.vPerObjPr).Cells("PinY").ResultIU + (vY - vYC)

Получается, что в DROP нет необходимости, точнее его функция установки по координатам не работает и нужны костыли.
Интересно а в версиях VISIO домайкрософтовских этот эффект наблюдается?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 26 мар 2019, 08:57 
Не в сети
Глав-тролль

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3953
Откуда: оттуда
Использую Visio c: 1998
Уровнь квалификации: Отсутствует
Борис писал(а):
Интересно а в версиях VISIO домайкрософтовских этот эффект наблюдается?
не знаю поможет ли книжка изданная еще Visio Corporation ?
Tumanov в сообщении #11247 писал(а):
Один запрос в Яндексе - и вижу этой книжку :)
http://www.twirpx.com/file/622740/
пару лет назад находил ссылку на дистрибутивы ранних версий, не помню были ли там версии с поддержкой VBA. Я так и не смог их потестить. Т.к. нужно было установить ну очень древнюю версию Windows (а возможно и MS-DOS, я уже забыл). Честно говоря, не знаю что даст знание как работало это в версиях вышедших еще 20 лет назад ? Если очень интересно, могу поискать ссылки :D
Изображение
Дополнено позднее: Drop method (Version added: 2.0), DropMany method (Version added: 4.5), Duplicate method (Version added: 2.0)


Последний раз редактировалось Surrogate 28 мар 2019, 15:34, всего редактировалось 1 раз.

Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 26 мар 2019, 09:14 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
Вот это полностью вылечило глюк DROP.

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 26 мар 2019, 09:17 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
Интересно а в версиях VISIO домайкрософтовских этот эффект наблюдается?

Скорее всего наблюдается. Я сам не натыкался (причину уже объяснял). Если будете проверять, могу поискать старенькую версию.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 26 мар 2019, 09:25 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 516
Использую Visio c: 2008
Очков репутации: 105

Добавить очки репутацииУменьшить очки репутации
А собственно почему не использовать Shape.Dublicate вместо Drop?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 26 мар 2019, 09:30 
Не в сети
Глав-тролль

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3953
Откуда: оттуда
Использую Visio c: 1998
Уровнь квалификации: Отсутствует
Shishok писал(а):
почему не использовать Shape.Dublicate вместо Drop?
присоединяюсь!


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 26 мар 2019, 10:41 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 61
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Интерес к работе старых версий чисто академический.
То есть если в версии 5 такого глюка нет то его добавил всеми любимый майкрософт.
Дупликате - хороший вариант, я именно его и использовал в своих первых проектах.
Но он создаёт эелемент, где-то там, который потом надо ещё ставить на место.
Поэтому и выбрал Дроп. Он всё делает одной операцией.
Кто же знал о подводных камнях?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 26 мар 2019, 10:49 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
Поэтому и выбрал Дроп. Он всё делает одной операцией.

Более того, есть еще операция DropMany, которая весь этот массив нарисует действительно одной операцией. И по логике как раз ее следовало использовать.
Но у нее точно такой же "подводный камень" :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Add-On Массив: четырёхугольный, по дуге, по дуге из букв
СообщениеДобавлено: 26 мар 2019, 13:47 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 61
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
К тому же всё равно придётся ещё и поворачивать каждый объект по отдельности.
Код становится трудночитаемым. Хотя и компактным. Для прямоугольных массивов.


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

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



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

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


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

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