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

Форум по вопросам применения и программирования в Visio
Текущее время: 28 мар 2024, 21:55

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


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


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

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Изменение размера фигуры за заблокированную сторону
СообщениеДобавлено: 04 сен 2013, 18:47 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

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

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

Вопрос: Можно ли как-то разрешить изменение размера фигуры за левый край при защищённом позиционировании относительно него?

Альтернативный вопрос: Куда в ShapeSheet можно добавить перезапись (SETF) ширины и высоты фигуры при изменении свойства? Это позволит разделять ситуации когда размер геометрии определяется фактическим размером фигуры и когда он вычисляется автоматически. Т. е. речь идёт о подгонке фактического размера фигуры к размеру её геоиметрии только в то время, когда Prop.AutoSize имеет соответствующее значение. Это позволит позиционировать фигуру относительно правого края.

PS: Сам понимаю, что накосячил, делая такие фигуры :(


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 05 сен 2013, 13:28 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Неужели никаких мыслей нет?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Изменение размера фигуры за заблокированную сторону
СообщениеДобавлено: 05 сен 2013, 13:30 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Попробуй использовать контрол,
width=guard(60 mm - controls.row_1.x)
но скорее всего тоже будет очень коряво.

2. За изменением размера палит Event - EventXFMod

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 05 сен 2013, 13:38 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
Попробуй использовать контрол,
width=guard(60 mm - controls.row_1.x)
но скорее всего тоже будет очень коряво.

Не понял. Это для какого вопроса и чем должно помочь?

Surrogate писал(а):
2. За изменением размера палит Event - EventXFMod

Если в нём написать формулу
Код:
=SETF(GetRef(Width),IF(User.AutoSize=0,Width,User.WidthExpected))
то всё замечательно работает.
Значит надо нормально составить формулы и их туда запихать.
Спасибо :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 05 сен 2013, 14:50 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Qwertiy писал(а):
всё замечательно работает

Не совсем замечательно. При изменении размера рисуется пунктирная рамка, а сама фигура не перерисовывается, пока не отпустишь мышь...
Но в любом случае, это лучше чем было.
А ещё идеи есть?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Изменение размера фигуры за заблокированную сторону
СообщениеДобавлено: 05 сен 2013, 15:50 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Я сейчас на даче копаю траншею, пишу с телефона во время перекуров. Поэтому так немногословен :-)
про контрол я предлагал, добавить его к групповому шейпу. В предложенная формула может применяться как групповому, так и дочерним шейпам. Единственное, у меня красиво не получалось, может у тебя что получится!

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Изменение размера фигуры за заблокированную сторону
СообщениеДобавлено: 05 сен 2013, 15:55 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Твое первое сообщение в ветке занимает у меня 5 экранов телефона. Я никак не пойму ты какой шейп хочешь растянуть групповой или дочерний?
Даже безполезно просить выложить пример, даже если скачаю файл на телефон не смогу скинуть на комп :-(

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 05 сен 2013, 17:22 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
Поэтому так немногословен :)

Ну, особая многословность и не требуется ;)

Surrogate писал(а):
про контрол я предлагал

Дошло. Ты имел в виду добавить точку Contol и использовать для изменение размеров её, а не обычное перетаскивание за границу фигуры.
Абсолютно не нравится этот вариант...

Surrogate писал(а):
Я никак не пойму ты какой шейп хочешь растянуть групповой или дочерний?

Дочерний.

Surrogate писал(а):
Даже безполезно просить выложить пример

Если бы было просто сделать пример, я бы его сразу сделал...
Тут столько всего понаверчено. И всё строится макросами...

Surrogate писал(а):
Твое первое сообщение в ветке занимает у меня 5 экранов телефона.

Попробую покороче (не получилось) и попроще.

Есть группа, состоящая из прямоугольников (условно). У каждого прямоугольника есть свойство Autosize. Если там None, то размер нарисованного прямоугольника совпадает с размером фигуры. В противном случае прямоуголькин имеет вычисленный размер и рисуется от левого нижнего угла фигуры. Вычисленный размер прямоугольника может меняться. Прямоугольники в группе расположены так, что они касаются друг друга фактическими линиями (что не означает касание областей фигур). Позиционирование только горизонтальное (в данном случае), т. е. высота меня не волнует.

Группа привязывается за левый угол центрального прямоугольника. Соответственно прямоуголькики справа увеличивают свой размер вправо (сдвигая ещё более правые) - с ними всё хорошо. А вот прямоугольники слева увеличивают свой размер влево. Но из-за позиционирования геометрии внутри фигуры использование автоматического вычисления размера требует их привязку за левую сторону, либо совпадения ширины фигуры с шириной геометрии.

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

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

В данный момент, последнее - это лучший вариант, но хотелось бы получить более естественное поведение.

PS: Коротко не получилось, поставил пустые строки, чтобы легче было читать.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re:
СообщениеДобавлено: 05 сен 2013, 18:37 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Qwertiy писал(а):
Есть группа, состоящая из прямоугольников (условно). У каждого прямоугольника есть свойство Autosize. Если там None, то размер нарисованного прямоугольника совпадает с размером фигуры. В противном случае прямоуголькин имеет вычисленный размер и рисуется от левого нижнего угла фигуры. Вычисленный размер прямоугольника может меняться. Прямоугольники в группе расположены так, что они касаются друг друга фактическими линиями (что не означает касание областей фигур).
однако :-)

если макросами всё строится, почему в шейпшите хочешь всё исправлять?

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 05 сен 2013, 18:43 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
если макросами всё строится, почему в шейпшите хочешь всё исправлять?

Потому что макросами генерируется фигура, которая потом становится трафаретом.
Макрос фактически генерирует ShapeSheet фигуры, которая сама с макросами никак не связана и шевелится самостоятельно :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Изменение размера фигуры за заблокированную сторону
СообщениеДобавлено: 05 сен 2013, 19:07 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
У тебя всё еще более замысловато, чем я думал!
Я тоже проникся мыслью: нарисовать быстро схему и сделать с нее сотни клонов не главное, главное научиться быстро исправить все клоны. Над чем сейчас работаю :-)

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 05 сен 2013, 19:20 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

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

У меня примерно так и сделано. Весь стенсил пересоздаётся, т. е. можно что-то изменить.
Проблема выплыла немного в другом - мне не хватает указателей на функции (а это использовать пока боюсь). Получается уйма копипаста и всякие select'ы. И всё чаще возникает желание это дело как-нибудь переписать. Т. е. фактически я могу легко исправить что-то для генерации одного трафарета, но аналогичный код может находиться ещё в охапке мест для других :(
И наоборот, есть базовые функции, которые затрагивают почти все фигуры, но из-за специфичности фигур в них передаются всякие чужеродные параметры, которые потом ресолвятся select'ом.

Surrogate писал(а):
Я тоже проникся мыслью

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

PS: Ура! У меня заработало позиционирование! А то я уже замучался с этой формулой.

UPDATE: Под свойствами понимаются ячейки вообще, а не именно свойства.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 05 сен 2013, 19:44 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
2. За изменением размера палит Event - EventXFMod

А можно отслеживать изменение конкретного свойства? Пришло в голову отлавливать изменение Autosize и только при его установке обновлять ширину/выстоту.
Правда я ещё не проверял, получиться ли через SETF записать и стереть GUARD...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Изменение размера фигуры за заблокированную сторону
СообщениеДобавлено: 06 сен 2013, 11:47 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Из-за специфичности твоих задач даже безполезно просить поделиться, как ты с позиционированием разобрался ;-)
а ЭТО меня вообще порвало, охренеть просто!
Тот евент ловит любое изменение размеров и местоположения.
Может макросом при открытии файла записывать в особые ячейки размеры фигур. А потом после изменений ловить фигуры с не-'оригинальными' размерами

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 06 сен 2013, 12:22 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
Из-за специфичности твоих задач даже безполезно просить поделиться, как ты с позиционированием разобрался ;-)

Нет, это я не с вопросом разобрался. Оставил пока твой вариант, с которым получается пунктирная рамка.
А разобрался я с корректрой реализацией наложения при креплении фигур с отрицательными индексами за правый край. В общем-то, формулу не жалко, но она без всего остального вообще ничего не даёт по сути:
Код:
.CellsSRC(visSectionObject, visRowXFormOut, visXFormPinX).FormulaForceU = "GUARD(" & IIf(Q = -BtnLim, IIf(Q < 0, "User.Width", "0p"), LastName & "!PinX+" & IIf(Q < 0, "User.Width-IF(" & LastName & "!User.Width<1,0p,1p)", IIf(Q, "MAX(" & LastName & "!User.Width-1p,0)", "IF(" & LastName & "!User.Width<1,0,-1p)"))) & ")"


Surrogate писал(а):
а ЭТО меня вообще порвало, охренеть просто!

Это ты про вопрос вообще или про что-то конкретное?
Или про совет по созданию фигур?

Surrogate писал(а):
Тот евент ловит любое изменение размеров и местоположения.

Я заметил. Но видимо именно наличие SETF в нём ведёт к изменению размера пользователем через рамку, вместо нормального.
Я подумал, что если можно отловить только изменение конкретного свойства, то не придётся помещать обработку в это событие и побочный эффект исчезнет...

Surrogate писал(а):
Может макросом при открытии файла записывать в особые ячейки размеры фигур. А потом после изменений ловить фигуры с не-'оригинальными' размерами

Получаемые файлы не содеражат макросов. Макросы используются только для их создания.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Изменение размера фигуры за заблокированную сторону
СообщениеДобавлено: 06 сен 2013, 13:02 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Про ЭТО: Там много всего написано с телефона не прочтешь :-)
я вообще не знал, что такое ЭТО можно сделать в ВБА.
Про макрос: сам код макроса может быть в другом файле, в другом окне. Я вообще файлами автокада управляю макросом из файла в эксель!

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 06 сен 2013, 13:09 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Изменение размера фигуры за заблокированную сторону
СообщениеДобавлено: 06 сен 2013, 13:33 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Мои советы были про то, как в уже созданных файлах с неким числом фигур вести учет фигур отредактированных за этот сеанс.

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 06 сен 2013, 13:36 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

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

Такое вроде пока не требуется...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 06 сен 2013, 18:00 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
А как обрабатывать изменение свойств фигуры?


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

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



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

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


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

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