[CDR 2017-2021] Сериализация объектов

Karatau

Участник
Топикстартер
Сообщения
60
Реакции
22
Здравствуйте, коллеги!
Внезапно появилась такая задача: как нарисовать сложные фигуры средствами VBA?
Например такие:
01.jpg

Иначе говоря, как захватить характеристики готовой фигуры, записать ее куда-нибудь (массив, файл) и потом нарисовать макросом?

Т.е. как серилизовать объект?

Может, существует стандартная процедура для этого, и тогда задача становится элементарной, но я не смог найти такую.

Буду рад любой помощи.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Не пойму сакральный смысл сего действия. А не проще ли записать обьект в векторный файл который затем импортировать (возможно макросом)? И что за термин такой мудреный "серилизация"?
 

Karatau

Участник
Топикстартер
Сообщения
60
Реакции
22
По определению:
Сериализация это процесс сохранения состояния объекта в последовательность байт; десериализация это процесс восстановления объекта, из этих байт.
 

Karatau

Участник
Топикстартер
Сообщения
60
Реакции
22
Хотелось обойтись вообще без файлов. Процедура рисовала бы нужную фигуру в нужном масштабе и нужном месте.

Я представляю себе такой макрос. Выделяешь фигуру, запускаешь его и он в TextBox пишет код. Вставляешь этот код в другой макрос и этот макрос рисует эту-же фигуру.

Вот такая-вот фантазия
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Фантазия весьма специфическая. Звучит примерно так: "Я представляю себе такую программу. Выделяешь кусок растрового изображения и она в TextBox пишет C++ код. Вставляешь этот код в другую программу и она рисует то же изображение" Вы такую программу видели? Лично я нет, хотя сделать элементарно. Просто зачем шубу в трусы заправлять, так никто не делает.
 

Karatau

Участник
Топикстартер
Сообщения
60
Реакции
22
Все весьма прагматично... Есть написанный макрос по автоматизированной верстке простых этикеток. Информация берется из экселевского файла (размер, цвет, заголовок, тексты, таблицы, и т.д.) и все отрисовывается. Но есть еще дополнительно различные условные знаки, которые сейчас берутся из другого кореловского файла. А хотелось (и фантазировалось), чтобы все было внутри макроса и никакие дополнительные файлы с ним не таскать. Все просто
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Но есть еще дополнительно различные условные знаки, которые сейчас берутся из другого кореловского файла.
Ну так и берите, какие проблемы? Зачем множить сущности?
А хотелось (и фантазировалось), чтобы все было внутри макроса
Ну напишите инсталлятор, внутри которого будут все файлы, включая те, из которых данные читаться будут. В конце концов в конец (каломбур!) макроса дописать бинарник можно а потом читать оттуда - ничего дополнительно таскать не придется.
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 809
Реакции
3 434
Я тоже не вполне понял. Сериализация — это превращение объекта в последовательность байтов, как правило направляемая через байтовый поток именно в файл. Вы же напротив хотите
никакие дополнительные файлы с ним не таскать

Не по теме:
Хтойта? ;)

 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Как вариант - если вы знаете, как нарисовать нужный обьект - поставьте макрос на запись и нарисуйте. Но алгоритмически проворачивать фарш назад, восстанавливая по готовому изображению последовательность команд - задача в равной степени нетривиальная и бесполезная.
 

George

I wish I was a monster you think I am
15 лет на форуме
Сообщения
17 302
Реакции
7 865
Кореловоды, ткните человека носом в функцию готовую.

В индизайне это data merge, например.
 

George

I wish I was a monster you think I am
15 лет на форуме
Сообщения
17 302
Реакции
7 865

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
устроили тут осеннее обострение и стерилизацию котов
Кто насерилизовавшего в тапок кота стерилизовал? 'hmmm'
Жора, ты снова мимо кассы, человек хочет, выражаясь простым языком, декомпилятор объекта в VBA код, каким боком тут Data Merge? '%)'
 

George

I wish I was a monster you think I am
15 лет на форуме
Сообщения
17 302
Реакции
7 865
Кто насерилизовавшего в тапок кота стерилизовал? 'hmmm'
Жора, ты снова мимо кассы, человек хочет, выражаясь простым языком, декомпилятор объекта в VBA код, каким боком тут Data Merge? '%)'
Ничего я не напутал, прочти пост 6 ещё раза три.
 

dastin

Некромант-любитель
12 лет на форуме
Сообщения
2 131
Реакции
2 027
Но есть еще дополнительно различные условные знаки, которые сейчас берутся из другого кореловского файла. А хотелось (и фантазировалось), чтобы все было внутри макроса и никакие дополнительные файлы с ним не таскать
Конечно с иллюстрациями было бы понятнее - что это за знаки и куда они ставятся ...
Может ВСЕ эти различные условные знаки забить в шаблон - стартовый файл для верстки (принтмердж или что-то иное) - и сделать их поименованными и невидимыми, а средствами макроса делать их видимыми и задавать им позицию
 

Karatau

Участник
Топикстартер
Сообщения
60
Реакции
22
Конечно с иллюстрациями было бы понятнее - что это за знаки и куда они ставятся ...
Все очень просто, есть с пол-сотни стран, в каждую из них нужно нарисовать этикетку-стикер с текстом и разными значками (для каждой страны свой набор). Сейчас они берутся из файлов, иногда возникает путаница с версиями, вариантами значков, т.к. каждый дизайнер добавляет и исправляет их по своему усмотрению.
01.jpg

Хочу, чтобы макрос их отрисовывал сам и хочу, чтобы поместить процедуру рисования значка в макрос было легко, просто поставил сгенерированную процедуру отрисовки значка, вызвал ее и макрос нарисовал в нужном месте нужным размером и цветом.
Вот такой генератор процедуры рисования данной фигуры (хм... рифма!) я сейчас и пишу.
Через пару дней выложу на тест, если это будет кому-либо интересно...
 

dastin

Некромант-любитель
12 лет на форуме
Сообщения
2 131
Реакции
2 027
и разными значками (для каждой страны свой набор)
по этому признаку - страна - и активировать видимость (печатаемость) нужных значков (или слоя с набором значков) и удалением всех ненужных из стартового шаблона т.к. иначе есть опасения, что вес макета будет неприлично тяжёл
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Все очень просто, есть с пол-сотни стран, в каждую из них нужно нарисовать этикетку-стикер с текстом и разными значками (для каждой страны свой набор). Сейчас они берутся из файлов, иногда возникает путаница с версиями, вариантами значков, т.к. каждый дизайнер добавляет и исправляет их по своему усмотрению.
Посмотреть вложение 99139
Хочу, чтобы макрос их отрисовывал сам и хочу, чтобы поместить процедуру рисования значка в макрос было легко, просто поставил сгенерированную процедуру отрисовки значка, вызвал ее и макрос нарисовал в нужном месте нужным размером и цветом.
Вот такой генератор процедуры рисования данной фигуры (хм... рифма!) я сейчас и пишу.
Через пару дней выложу на тест, если это будет кому-либо интересно...
Генератор рисования писать не надо, есть уже готовый встроенный, повторяю, называется он "запись макроса"
 

Karatau

Участник
Топикстартер
Сообщения
60
Реакции
22
Генератор рисования писать не надо, есть уже готовый встроенный, повторяю, называется он "запись макроса"
Отлично! Получилось!
Оказывается, если у тебя уже есть готовый отрисованный объект и во время записи макроса немного подправить какую-либо точку (напр. подвигать туда-сюда):
01.jpg



То макрос запишет код, отрисовывающий нашу фигуру:

02.jpg


По-другому получить этот код не удалось, но и на этом спасибо!!! Задача решена
 
  • Спасибо
Реакции: Skvoznyak и ~RA~

dastin

Некромант-любитель
12 лет на форуме
Сообщения
2 131
Реакции
2 027
Решена. Это хорошо. Все же спрошу ещё, интереса ради ...
Эта этикетка ( -и) однотипны? Или на большом листе будет сразу несколько типов этикеток разного типа?
Какие данные в приведенном примере постоянны и какие меняются? Что вы подгружаете их экселевского файла?
И ещё ... каким способом это предполагается выводить на печать? Офсет? Оперативка?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Решена. Это хорошо. Все же спрошу ещё, интереса ради ...
Эта этикетка ( -и) однотипны? Или на большом листе будет сразу несколько типов этикеток разного типа?
Какие данные в приведенном примере постоянны и какие меняются? Что вы подгружаете их экселевского файла?
И ещё ... каким способом это предполагается выводить на печать? Офсет? Оперативка?
Без разницы. На самом деле, PrintMerge в кореле - достаточно тупой, бессмысленный и беспощадный инструмент, чтобы макросом удобнее было.
Но смысла закидывания отрисовщика непосредственно в код я так и не разумею. Ну ладно, кривую загнать в код можно (да и то если маленькую и несложную типа лого или значка) Но существует полно объектов, которые так не закодить. Более того - банально удобнее хранить зачки в отдельных файлах. К примеру, поменяли чуть-чуть значок - что, опять перекодировать? А так файл подправил и все.