Форум пользователей Visio
http://visio.getbb.ru/

Правильное ограничение размеров фигуры
http://visio.getbb.ru/viewtopic.php?f=5&t=1355
Страница 1 из 1

Автор:  vin [ 29 июн 2018, 16:01 ]
Заголовок сообщения:  Правильное ограничение размеров фигуры

Хотел поделиться опытом.
Ранее в старом форуме был совет как ограничить, например, ширину минимальным значением. Было предложено так:
Код:
LocPinX=GUARD(IF(Width<20 mm,Width*0.5+SETF("Width",20 mm),Width*0.5))

здесь сделан трюк, чтобы не вводить секцию user. Ссылка на ячейку Width есть, но на PinX она влияние не оказывает.

Можно без трюка (чтобы было понятней) ввести секцию User и просто добавить формулу:
Код:
IF(Width<20 mm, SETF("Width",20 mm), 0)

Visio видит, что наша ячейка зависит от Width - начинает пересчитывать ячейку при изменении Width и,
при уменьшении менее 20 mm, SETF устанавливает значение 20 mm.

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

Наконец-то я нашел как победить эту проблему!
Для этого я использую SETATREF

В секции User завожу две строки:
Код:
User.DeltaX = 80 mm
User.MinWidth= 20 mm

В Width пишу:
Код:
Width =SETATREF(User.DeltaX, SETATREFEVAL( IF( SETATREFEXPR()<User.MinWidth, User.MinWidth, SETATREFEXPR())))

При изменении Width - изменения направляются в ячейку User.DeltaX.
SETATREFEVAL - пересчитывает значения, которые будут использованы как Width.
При этом SETATREFEXPR() выступает как текущее значение.

При таком подходе фигура больше не "улетает".

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/