Редактирование размера аннотаций
Главная › Форумы › Задать вопрос › Редактирование размера аннотаций
- В этой теме 21 ответ, 5 участников, последнее обновление 6 лет, 6 месяцев назад сделано Nickolay.
-
АвторСообщения
-
Николай, хорошо, что вы проработали свой вариант.Мне кажется, что этот вариант не самый эффективный. Ваша фраза о невозможности изменять семейства не совсем корректна.
Я предложу свой вариант.
Ранее вы писали:семейство марок невозможно изменять, задавая параметры.
Мне не нравится слово “семейство”, потому, что мы меняем не семейство а “тип”. Действительно в семействах марок мы не можем создавать параметры экземпляра. Однако параметры типа работают как положено. Т.е. не надо марку одного типа заменить на другой. Например, марку типа “Длинна 20мм” заменить макру этого же семейства, но с типом “Длинна 30мм”. По-моему, гораздо проще изменить тип (мы же это обсуждали прямо в этой теме в Денвером-22). В ответе #7900 Денвер предложил адекватный алгоритм действий. Эффект будет похож на ручную замену типа одной марки на другой тип. Чем не устраивает подобный алгоритм? Зачем придумывать костыли?
NickolayУчастникИваСерж, не могу создать такое количество типов, которые подойдут для любой ситуации, т.е. для любого количества символов внутри марки.
Это значит, что размер должен просчитываться по алгоритму, исходя из размера строкиЭто почему это? для практической работы достаточно 6-10 типов. Я пользуюсь типами 5,7,10,15,20,25,35 мм. Хватает на все. Делать округлением в 5 мм. Норм будет отрабатывать.
NickolayУчастникДа дело не только лишь в размерах. Важен так же шрифт внутри. Его размер тоже влияет на высоту, однако эти параметры легче изменять в Annotation Symbol, нежели во всем семействе марок. Они выведены и легкодоступны для редактирования.
Плюс, я видел как сами люди из конторы пользуются подобными шаблонами. Я же по их заказу делаюNickolayУчастникРеализовал. Происходит замена семейства на подгруженное, перенос данных (координаты выноски, самой марки и текст внутри), затем установка ширины.
Следом появляется новая проблема: идущие подряд новые марки могут наслаиваться на друг друга из-за изменения ширины.
Думаю, надо написать алгоритм, который будет смещать их по координатам левее/правее и выше/ниже относительно друг друга, дабы между ними было равное расстояние. Значит, нужно преобразование из ширины в футах в формат координат dpi и КАКИМ ТО ОБРАЗОМ определение наслаивания, ( т. е. программа должна работать не с одной маркой, а хотя бы с двумя, и по ширине/координатам вымерять необходимое смещение)
Перевод, наверное, с помощью команды Unit.
Думаю, цикл который будет работать с двумя маркам: A и B, B и C, C и D и т.д. Этакий перебор всех.
Если есть мысли на этот счет, буду радПредлагаю искать пересечения через Баундинг-бокс и фильтры.
http://thebuildingcoder.typepad.com/blog/2010/12/find-intersecting-elements.htmlЕдинственный недостаток – баундинг бокс ортогонален. Если сильно захочется вращать примечания под углом – будут сложности. Но для ортогонально располагаемых примечаний – быстро и эффективно.
NickolayУчастникBounding box пролетает, потому как он включает в себя семейство целиком, начиная от точки выноски, заканчивая самим коробом марки:
А нужны координаты именно коробки.
Я думаю, есть смысл использовать location – координату центра короба марки, от него отсчитать по ширине влево или вправо — это и будет искомые начало и конец.
Использовать перебор по два элемента, сравнивать и при наслоении двигать их на заданную длину друг от друга -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.