Форум пользователей Visio http://visio.getbb.ru/ |
|
Текст шейпа. Как сделать такое поведение? http://visio.getbb.ru/viewtopic.php?f=5&t=784 |
Страница 1 из 1 |
Автор: | 9rey [ 30 июн 2015, 14:26 ] |
Заголовок сообщения: | Текст шейпа. Как сделать такое поведение? |
Нужно чтоб текст шейпа вел себя вот так при изменении положения "ручек"-контролов: первая ручка задает положение текста, вторая ручка ездит только вдоль текста, задавая ширину. при этом шейп можно поворачивать, текст всегда горизонтален! что у меня и не получилось! - ручки ведут себя некорректно при повороте шейпа: нужно чтоб ручки вместе с текстом оставались горизонтальными. для того, чтоб текст был всегда горизонтален, использую формулу в ячейке TxtAngle: IF(BITXOR(FlipX,FlipY),1,-1)*Angle как добиться корректного поведения? |
Автор: | Surrogate [ 30 июн 2015, 14:44 ] |
Заголовок сообщения: | Re: Текст шейпа. Как сделать такое поведение? |
9rey писал(а): нужно чтоб ручки вместе с текстом оставались горизонтальными. не уверен, что ручки при таком раскладе можно сделать ТОЛЬКО горизонтально расположенными
|
Автор: | Tumanov [ 30 июн 2015, 14:48 ] |
Заголовок сообщения: | Re: Текст шейпа. Как сделать такое поведение? |
Может быть текст задать в отдельном шейпе, чтобы им было легче управлять. Не через TxtAngle, а через Angle. Тогда весь этот шейп можно сделать не поворачиваемым. И вторую "ручку" привязывать не к основному шейпу, а к этому внутреннему. (Это только возникшая мысль, сам пока не пробовал). |
Автор: | 9rey [ 30 июн 2015, 14:53 ] |
Заголовок сообщения: | Re: Текст шейпа. Как сделать такое поведение? |
Surrogate писал(а): не уверен, что ручки при таком раскладе можно сделать ТОЛЬКО горизонтально расположенными верю, что можно! нужную формулу придумать надо и вообще может гуру шейпшита подскажут как такое с нуля сделать. может я не туда зашел с реализацией... Tumanov писал(а): Может быть текст задать в отдельном шейпе, чтобы им было легче управлять. Не через TxtAngle, а через Angle. этот вариант оставлю на крайний случай, ибо много переделывать придется. |
Автор: | Surrogate [ 30 июн 2015, 15:02 ] |
Заголовок сообщения: | Re: Текст шейпа. Как сделать такое поведение? |
9rey писал(а): верю, что можно! с фиксированными точками конечно можно вспомнив из школы формулы тригонометрии добиться горизонтального положения! а вот для двух точек, которые могут двигаться произвольно плюс шейп еще может быть повернут на некий угол, наверно надо быть Лобачевским чтоб формулу составить
нужную формулу придумать надо |
Автор: | Tumanov [ 30 июн 2015, 15:02 ] |
Заголовок сообщения: | Re: Текст шейпа. Как сделать такое поведение? |
Может быть придется придумывать что-то с пересчетом через родительские координаты (в данном случае - страницы). Ведь это относительно нее точки должны быть горизонтальны. Вообще-то тяжело теоретически советовать... Надо самому сделать, а потом уже другим рассказывать |
Автор: | 9rey [ 30 июн 2015, 15:28 ] |
Заголовок сообщения: | Re: Текст шейпа. Как сделать такое поведение? |
если "победю" формулу, то напишу сюда. но есть опасения, что формула победит меня |
Автор: | Tumanov [ 30 июн 2015, 16:30 ] |
Заголовок сообщения: | Re: Текст шейпа. Как сделать такое поведение? |
Вот, вроде получилось https://www.dropbox.com/s/ndgu95wz7mf7m ... 8.avi?dl=0 Так? Сейчас формулы покопирую |
Автор: | 9rey [ 30 июн 2015, 16:36 ] |
Заголовок сообщения: | Re: Текст шейпа. Как сделать такое поведение? |
да, именно! но там еще должен быть текст |
Автор: | Tumanov [ 30 июн 2015, 16:38 ] |
Заголовок сообщения: | Re: Текст шейпа. Как сделать такое поведение? |
Оптимизировать не пытался. Просто получил первый результат, похожий на нужный. Вторая точка должна всегда быть правее на 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 Годится? |
Автор: | Tumanov [ 30 июн 2015, 16:40 ] |
Заголовок сообщения: | Re: Текст шейпа. Как сделать такое поведение? |
Цитата: да, именно! но там еще должен быть текст Я думал затык именно в управлении второй управляющей точкой... Про текст и не думал. Но принцип-то наверное можно использовать? |
Автор: | Tumanov [ 30 июн 2015, 17:58 ] |
Заголовок сообщения: | Re: Текст шейпа. Как сделать такое поведение? |
Да, с таким пересчетом SetAtRef что-то не дружит. Значит быстро не получилось. |
Автор: | nbelyh [ 30 июн 2015, 18:13 ] | |||
Заголовок сообщения: | Re: Текст шейпа. Как сделать такое поведение? | |||
Моя попытка . Содом и гомора блин
|
Автор: | 9rey [ 30 июн 2015, 19:03 ] |
Заголовок сообщения: | Re: Текст шейпа. Как сделать такое поведение? |
Tumanov спасибо! на этой основе можно попробовать сделать. как руки дойдут, отпишу! nbelyh и тебе спасибо! тут уже почти рабочий вариант! только осталось прикрутить второй контрол для позиционирования текста... |
Автор: | 9rey [ 23 июл 2015, 16:05 ] |
Заголовок сообщения: | Re: Текст шейпа. Как сделать такое поведение? |
Наконец руки дошли доделать этот шейп. Сделал на основе метода nbelyh. Спасибо ему за это. Работает, хоть и непонятно как Вложение: Не въезжаю как работают эти формулы: для 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) Выше моего понимания но работает как надо |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |