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

Форум по вопросам применения и программирования в Visio
Текущее время: 23 июн 2017, 05:43

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


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


Размещение файлов в формате vsd (а не vsdx/vsdm), увеличивает вероятность ответа стремительным домкратом !!!



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 30 июн 2015, 14:26 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
Нужно чтоб текст шейпа вел себя вот так при изменении положения "ручек"-контролов:

Изображение

первая ручка задает положение текста, вторая ручка ездит только вдоль текста, задавая ширину. при этом шейп можно поворачивать, текст всегда горизонтален!
что у меня и не получилось! - ручки ведут себя некорректно при повороте шейпа:

Изображение

нужно чтоб ручки вместе с текстом оставались горизонтальными.
для того, чтоб текст был всегда горизонтален, использую формулу в ячейке TxtAngle: IF(BITXOR(FlipX,FlipY),1,-1)*Angle

как добиться корректного поведения?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 30 июн 2015, 14:44 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3330
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
9rey писал(а):
нужно чтоб ручки вместе с текстом оставались горизонтальными.
не уверен, что ручки при таком раскладе можно сделать ТОЛЬКО горизонтально расположенными


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 30 июн 2015, 14:48 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Может быть текст задать в отдельном шейпе, чтобы им было легче управлять. Не через TxtAngle, а через Angle.
Тогда весь этот шейп можно сделать не поворачиваемым. И вторую "ручку" привязывать не к основному шейпу, а к этому внутреннему.
(Это только возникшая мысль, сам пока не пробовал).


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 30 июн 2015, 14:53 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
не уверен, что ручки при таком раскладе можно сделать ТОЛЬКО горизонтально расположенными

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

Tumanov писал(а):
Может быть текст задать в отдельном шейпе, чтобы им было легче управлять. Не через TxtAngle, а через Angle.

этот вариант оставлю на крайний случай, ибо много переделывать придется.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 30 июн 2015, 15:02 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3330
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
9rey писал(а):
верю, что можно!
нужную формулу придумать надо :)
с фиксированными точками конечно можно вспомнив из школы формулы тригонометрии добиться горизонтального положения! а вот для двух точек, которые могут двигаться произвольно плюс шейп еще может быть повернут на некий угол, наверно надо быть Лобачевским чтоб формулу составить Изображение


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 30 июн 2015, 15:02 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Может быть придется придумывать что-то с пересчетом через родительские координаты (в данном случае - страницы). Ведь это относительно нее точки должны быть горизонтальны.
Вообще-то тяжело теоретически советовать...
Надо самому сделать, а потом уже другим рассказывать :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 30 июн 2015, 15:28 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
если "победю" формулу, то напишу сюда. но есть опасения, что формула победит меня :(


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 30 июн 2015, 16:30 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Вот, вроде получилось
https://www.dropbox.com/s/ndgu95wz7mf7m ... 8.avi?dl=0
Так?
Сейчас формулы покопирую


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 30 июн 2015, 16:36 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
да, именно! но там еще должен быть текст :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 30 июн 2015, 16:38 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Оптимизировать не пытался. Просто получил первый результат, похожий на нужный.
Вторая точка должна всегда быть правее на 1 дюйм.
Это перевод в координаты листа. В этих координатах добавляется 1 к X.
Код:
Scratch.X1 =PNTX(PAR(PNT(Controls.Row_1,Controls.Row_1.Y))) + 1
Scratch.Y1 =PNTY(PAR(PNT(Controls.Row_1,Controls.Row_1.Y)))

Это обратный перевод
Код:
Scratch.X2 =PNTX(LOCTOLOC(PNT(Scratch.X1,Scratch.Y1),ThePage!PageWidth,Width))
Scratch.Y2 =PNTY(LOCTOLOC(PNT(Scratch.X1,Scratch.Y1),ThePage!PageWidth,Width))

Это просто ссылка
Код:
Controls.Row_2.X =Scratch.X2
Controls.Row_2.Y =Scratch.Y2

Годится?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 30 июн 2015, 16:40 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
да, именно! но там еще должен быть текст

Я думал затык именно в управлении второй управляющей точкой...
Про текст и не думал.
Но принцип-то наверное можно использовать?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 30 июн 2015, 17:58 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Да, с таким пересчетом SetAtRef что-то не дружит. Значит быстро не получилось.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 30 июн 2015, 18:13 
Не в сети
Ветеран
Аватара пользователя

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

Добавить очки репутацииУменьшить очки репутации
Моя попытка Изображение. Содом и гомора блин :D


Вложения:
default12.vsd [14 Кб]
Скачиваний: 35
default12.gif
default12.gif [ 41.42 Кб | Просмотров: 856 ]

_________________
Инструменты для облегчения создания диаграмм, и статьи по Visio:
http://unmanagedvisio.com/
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 30 июн 2015, 19:03 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
Tumanov
спасибо! на этой основе можно попробовать сделать. как руки дойдут, отпишу!

nbelyh
и тебе спасибо! тут уже почти рабочий вариант! только осталось прикрутить второй контрол для позиционирования текста...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текст шейпа. Как сделать такое поведение?
СообщениеДобавлено: 23 июл 2015, 16:05 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
Наконец руки дошли доделать этот шейп.
Сделал на основе метода nbelyh. Спасибо ему за это.
Работает, хоть и непонятно как :D
Вложение:
cnt.vsd [21.5 Кб]
Скачиваний: 39

Не въезжаю как работают эти формулы:
для X
=SETATREF(Scratch.X1,(SETATREFEVAL(SQRT((SETATREFEXPR(Width*0.8967)-Controls.Row_1)^2+(Controls.Row_2.Y-Controls.Row_1.Y)^2)))*COS(-Angle)+Controls.Row_1)
для Y
=SETATREF(Scratch.Y1,(SETATREFEVAL(SQRT((SETATREFEXPR(Height*0.0123)-Controls.Row_1.Y)^2+(Controls.Row_2-Controls.Row_1)^2)))*SIN(-Angle)+Controls.Row_1.Y)

Выше моего понимания :wall: но работает как надо


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

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



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

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


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

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