вопрос по работе макроса wx_TransparentEdge

Статус
Закрыто для дальнейших ответов.

Andreypriz

Участник
Топикстартер
Сообщения
15
Реакции
0
Макрос не коректно работает. При обработке простых фигур (круг, квадрат) всё ОК!. Если фигура сложная как в примере, всё кранты, идёт сдвиг. Исправь если можно "wOxxOm", оченно нужен!
 

Вложения

  • primer.gif
    primer.gif
    25.4 КБ · Просм.: 981

wOxxOm

Участник
Сообщения
798
Реакции
3
Ответ: вопрос по работе макроса wx_TransparentEdge

К сожалению использовать макрос можно только для простых фигур из одного объекта - это проблема недостаточной гибкости позиционирования прозрачности изнутри ВБА.

Видимо придется вам вручную двигать центр прозрачности, это можно и довольно нетрудно, надо только в инструменте "рюмка" попадать точно в центр прозрачности. Вы удивитесь наверное отклонениям "правильного" центра от геометрического
 

Andreypriz

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: вопрос по работе макроса wx_TransparentEdge

Спасибо за подробный ответ. Хочу поделиться наблюдением. Изучив несколько вариантов сдвигов, пришел к выводу, что этот цетр не совпадает с центром начального объекта ровно на величину размытия.
 

wOxxOm

Участник
Сообщения
798
Реакции
3
Ответ: вопрос по работе макроса wx_TransparentEdge

гм, интересно, хотелось бы придумать как узнавать программно что надо сдвинуть?

P.S. У меня получились разные цифры сдвига:
при feather=2
горизонталь: 2,067%
вертикаль: 3,82%
 

Andreypriz

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: вопрос по работе макроса wx_TransparentEdge

Помозгую напишу, есть какая-то закономернось это точно.
Если не трудно опиши в двух словах алгоритм работы макроса, потому как есть идеи.
 

lev

Модератор
20 лет на форуме
Сообщения
2 150
Реакции
2 073
Ответ: вопрос по работе макроса wx_TransparentEdge

макрос не учитывает толщину обводки объекта, поправляется это легко и просто, надеюсь Вы найдете соответствующее место в коде
Код:
Dim x#, y#, w#, h#
   sh.GetBoundingBox x, y, w, h, True
      With sr(2).Transparency.ApplyPatternTransparency(cdrBitmapPattern, tmp, 0, 0, 100, True)
         .MirrorFill = False
         .TileOffsetType = cdrTileOffsetRow
         .TileOffset = 0
         .RotationAngle = 0#
         .SkewAngle = 0
         .TileWidth = w 'sh.SizeWidth
         .TileHeight = h 'sh.SizeHeight
         .OriginX = 0#
         .OriginY = 0#
      End With
 

wOxxOm

Участник
Сообщения
798
Реакции
3
Ответ: вопрос по работе макроса wx_TransparentEdge

Речь идет о сложных объектах без обводок. Здесь к сожалению это добавление ничем не помогает
 

wOxxOm

Участник
Сообщения
798
Реакции
3
Ответ: вопрос по работе макроса wx_TransparentEdge

Чтобы не сползала прозрачность надо перед или после применения макроса назначить объекту обводку
 

Andreypriz

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: вопрос по работе макроса wx_TransparentEdge

Спасибо что проникнулся темой. Попробую найти алгоритм без обводки.
Успехов! Кстати если после создания прозрачных краев применить к линзе "заморозку", то у объекта можно убрать контур, сдвига не будет.
Наверное это можно внедрить в макрос. Например: макрос назначает объекту любую обводку, далее как сейчас, в конце "заморозка" и убрать контур.
Успехов!
 
Статус
Закрыто для дальнейших ответов.