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

Мониторинг изменений данных объетов
http://visio.getbb.ru/viewtopic.php?f=6&t=1038
Страница 1 из 1

Автор:  Machestro [ 16 окт 2016, 15:16 ]
Заголовок сообщения:  Мониторинг изменений данных объетов

Начну издалека. Я черчу проекты по автоматизации (КИПиА, АСУТП….). Работаю в обычном AutoCAD. Мягко сказать, не подходит он для этого. Есть AutoCAD Electrical, но он слишком “не гибкий” и сложный для освоения.
Я не программист, хотя с программирование знаком. Для AutoCAD писал код на LISP. Точнее я могу прочитать код, разобраться в нём, видоизменить, а вот написать что-то своё с нуля - пока сложновато. С VBA не знаком. Хотя уже неделю изучал этот форум. Посмотрел все темы. Разбирался в примерах кода - более менее понятно. Хотя конечно всю объектную модель visio пока не представляю. Visio понравился своей гибкостью и интуитивной простотой.
Теперь ближе к делу. Хоть я и начинающий, но планы у меня большие. У меня есть наброски идеологии как должна работать САПР. Прошу уважаемых гуру данного форума оценить реализуема ли эта идеология. Ниже по пунктам распишу что хочу реализовать.

1.Допустим, есть набор объектов - условно-графическое отображение УГО.
У каждого моего объекта обязательно будет пользовательское данное - "ПОЗИЦИЯ"
Позиция может быть незаполненной, или иметь буквенный префикс, например, SF.

2.При добавлении УГО на страницу, при его копировании (CTRL+C, CTRL+V), или с зажатым CTRL. Необходимо чтобы увеличивался номер позиции. Например, SF1, SF2... Это правило должно соблюдаться во всём документе, то есть нумерация сквозная. (Примерно как это реализовано в этой теме - viewtopic.php?f=6&t=913)

3.При дублировании УГО (CTRL+D) должно быть полное дублирование объекта, включая номер позиции и все его свойства (Shape Data). Это означает, что в документе могут быть Объекты с одинаковой позицией.

4.Ключевой момент. Допустим на листе (или во всём документе) есть два объекта. Их позиции SF1 и SF2. Если мы переименуем позицию SF2 в SF1, то должно появиться предупреждение, что объект с такой позицией уже есть. Предоставить варианты действия:
- увеличить/оставить номер;
- Заменить свойства из SF1 в SF2;
- Заменить свойства из SF2 в SF1;
- Объединить свойства, с заменой из SF1 в SF2;
- Объединить свойства, с заменой из SF2 в SF1;

Это должно также работать если в документе больше чем 2 объекта с одинаковой позицией, то есть есть изменяемый объект и вставленные
Если мы создаем новый объект, например нарисовали круг, и добавили ему позицию, и приравняли её к какой-нибудь существующей, то этому объекту добавляются пользовательские данные сущ. объекта. (то есть объект не обязательно должен быть из набора). Знаю что есть Addon по копированию свойств объекта из этой темы - http://www.visio.getbb.ru/viewtopic.php?f=15&t=1042. Но больше понравился вариант из - viewtopic.php?f=15&t=217, так как я смог его прочитать и понять.

5.Объекты с одинаковой позицией должны быть связаны между собой во всём документе. То есть, если одному из объектов добавляется новая строка данных, или изменяются значения сущ. данных, то эти изменения должны коснуться всех объектов с этой позицией. Даже если мы меняем номер позиции, то все объекты с этим номером также меняют номер позиции.
Данные будут добавляться и как из источника внешних данных, так и вручную.
Что-то подобное было в этой теме - http://www.visio.getbb.ru/viewtopic.php?f=5&t=231, но не совсем работает так как надо, и не отслеживает изменения во всём документе.

6.Удаление одно из объектов с одинаковой позицией не должно влиять на свойства других объектов с этой позицией

7.Необязательный, но крайне желательная функция. Все объекты с одинаковой позицией должны иметь гиперссылки друг на друга. Получается, что одному объекту будет добавлено несколько гиперссылок. Гиперссылка должна увеличивать страницу по ширине объекта. Лучше чтобы гиперссылки добавлялись по мере добавления объектов. Хотя можно уже и в готовом проекте просканировать объекты и добавить гиперссылки.
При удалении объектов гиперссылки должны удаляться

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

Автор:  Tumanov [ 16 окт 2016, 16:47 ]
Заголовок сообщения:  Re: Мониторинг изменений данных объетов

Реализовать вроде бы можно. По ходу реализации выяснится, что некоторые вещи реализуются тяжело, поэтому придется их немного видоизменить. Ну, это как обычно.
Начинать скорее всего нужно с создания некого базового объекта. И постепенно наращивать его свойства и методы работы с ним.
Могу предположить, где встретятся трудности...
1. Трудно будет реализовать одинаковое поведение и свойства для разнообразных объектов. Или их нужно будет все делать самому и с нуля, чтобы по возможности были одинаковыми.
Поэтому я бы рассмотрел возможность оставить шейпы более свободными, а позиции (позиционные обозначения) показывать не дополнительных связанных объектах, типа выносок, полок.
2.
Цитата:
Данные будут добавляться и как из источника внешних данных, так и вручную.
это из той же оперы. Связь с источником данных (штатная) осложняет контроль за структурой шейпа. В шейп могут внедриться элементы, которых там не ждали.
3. Разное поведение по Ctrl+V и Ctrl+D слегка противоречит сути Visio. Проще отслеживать события шейпа или документа, чем нажатия на клавиши. А события-то в этом случае одинаковые.
4. Связь через гиперссылки тоже представляется технологически неудобной. Лучше бы использовать поиск. Кстати, у Вас ведь помимо схем будет что-то типа перечня элементов или ведомости. И данные явно будут в отдельном окне. Вот оттуда и нужно искать способ перехода.
5. Надо бы разделить "разные объекты с одинаковой позицией" и "один и тот же объект, показанный в разных местах документа". Если такое есть, конечно. И по-разному реализовать логику работы с ними.
Вроде бы пока больше ничего страшного не видно.

Автор:  nbelyh [ 16 окт 2016, 17:18 ]
Заголовок сообщения:  Re: Мониторинг изменений данных объетов

IMHO, вполне реализуемо, но это дохрена работы. Некоторые хотелки в-общем, нетривиальные, хотя (насколько я вижу) все реализуемые.
Я бы оценил в месяц возни, при условии что программист, который это будет делать, знает Visio, и что руки у него из нужного места растут.

Цитата:
1. Трудно будет реализовать одинаковое поведение и свойства для разнообразных объектов. Или их нужно будет все делать самому и с нуля, чтобы по возможности были одинаковыми. Поэтому я бы рассмотрел возможность оставить шейпы более свободными, а позиции (позиционные обозначения) показывать не дополнительных связанных объектах, типа выносок, полок.
2. Данные будут добавляться и как из источника внешних данных, так и вручную.
это из той же оперы. Связь с источником данных (штатная) осложняет контроль за структурой шейпа. В шейп могут внедриться элементы, которых там не ждали.
Ну это имеет смысл если он думает о трудозатратах (т.е. если у него бюджет или время ограничены) ;)
Цитата:
3. Разное поведение по Ctrl+V и Ctrl+D слегка противоречит сути Visio. Проще отслеживать события шейпа или документа, чем нажатия на клавиши. А события-то в этом случае одинаковые.
Не совсем одинаковые. При желании можно отследить через Application.IsInScope(visDuplicate) ;)
Visio сначала открывает "высокоуровневый" scope типа "Paste" или "Duplicate", а потом уже идет событие ShapeAdded например.

Machestro, в общем если у тебя нет бюджета на разработку на месяцок-другой, я бы не выпендривался, и ел что дают (в данном случае - использовал бы связь с данными в Excel) :D

Автор:  Machestro [ 16 окт 2016, 17:32 ]
Заголовок сообщения:  Re: Мониторинг изменений данных объетов

Tumanov писал(а):
1. Трудно будет реализовать одинаковое поведение и свойства...


Надо лишь копировать Добавленные данные (секция Shape Data), то есть текстовую информацию. Речь не идёт о копировании каких-то динамических свойств. Например у автоматического выключателя есть такие данные Позиция (SF1), Производитель, ток и т.д. Если на другой странице я создам любой объект - пускай квадрат, и добавлю ему данные - Позиция = SF1, то все остальные данные подхватятся и создаться из автомата, который на стр. 1.

2. Хотелось реализовать базу данных в Excel. Есть одна книга, где на листах описываются различные изделия. Допустим лист1-автоматические выключатели, лис2 - Блоки питания и т.д. Эта книга подключена к шаблону Visio. Потом обычным Drag and Drop Данные перетаскиваются на любой объект. Насколько я понял в этом случае объекту добавляются дынные (то есть в Shape Data добавляются новые строки ), наименование которых соответствует наименованию столбцов в книге Excel.

3. На счёт этого согласен. Это просто "хотелка". Хотелось как-то различить команды. Хотя по факту на одном листе не должно присутствовать одного объекта с одной и той же позицией. Вообще по поводу нумерации на хорошенько подумать, так как возможны всякие префиксы, суффиксы к номеру.

4.Гиперссылки нужны для PDF. Проекты будут передаваться в PDF.
Насчёт спецификаций и перечней. Планировалось делать штатный отчёт "Отчёт о фигурах" - сливать это всё в Excel и там с помощью макросов сортировать и приводить к нужному виду (хотя та ещё задачка).

Автор:  Surrogate [ 16 окт 2016, 18:13 ]
Заголовок сообщения:  Re: Мониторинг изменений данных объетов

Ты прав, visio очень гибкий инструмент!
Machestro писал(а):
но планы у меня большие
это очень хорошо, только от меня (как от местного админа) большая просьба
- для обсуждения нюансов реализации вышеупомянутых задач и их подзадач, создавать новые отдельные темы! А мы уже советом поможем!

Автор:  9rey [ 16 окт 2016, 18:38 ]
Заголовок сообщения:  Re: Мониторинг изменений данных объетов

это все сделать можно и относительно не сложно. но нужны навыки. лучше действительно по одному вопросу решать, а не в кучу все валить.

Machestro писал(а):
Надо лишь копировать Добавленные данные (секция Shape Data), то есть текстовую информацию. Речь не идёт о копировании каких-то динамических свойств. Например у автоматического выключателя есть такие данные Позиция (SF1), Производитель, ток и т.д. Если на другой странице я создам любой объект - пускай квадрат, и добавлю ему данные - Позиция = SF1, то все остальные данные подхватятся и создаться из автомата, который на стр. 1.


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

Автор:  Surrogate [ 19 окт 2016, 13:30 ]
Заголовок сообщения:  Re: Мониторинг изменений данных объетов

Machestro писал(а):
Работаю в обычном AutoCAD. Мягко сказать, не подходит он для этого.
если говорить за «голый AutoCAD из коробки», то да.
Surrogate в сообщении #9084 писал(а):
большинство людей делает такие вещи в CAD-подобных программах, там для этого больше возможностей. и можно нагуглить решение готовое (или почти готовое) в LISP.
Если не не изменяет память, видел что-то подобное в книге
Зуев С. А., Полещук Н. Н. САПР на базе AutoCAD — как это делается. — СПб.: «БХВ-Петербург», 2004. — 1168 с. — ISBN 5-94157-344-8. 
Machestro писал(а):
Хотя конечно всю объектную модель visio пока не представляю
для информации
Surrogate в сообщении #8353 писал(а):
Объектная модель MS Visio ( ↓ картинка кликабельна)
Содержимое спрятано под спойлер ↓
Спойлер:
9rey писал(а):
надо начинать постепенно и задавать конкретные вопросы
Machestro, если ты таки решил изобретать велосипед для выполнения вышеупомянутых задач в Visio, ждем вопросов !
Оффтоп:
На тебя вся надежда - что догоним количество сообщений на форуме до 10к к Новому Году Изображение

Автор:  Machestro [ 19 окт 2016, 17:28 ]
Заголовок сообщения:  Re: Мониторинг изменений данных объетов

Книга хорошая, она мне помогла разобраться в LISP, так же как и другие книги автора. Но ЛИСПОМ всё не решить. Я уже достиг максимума в AutoCAD.

Велосипед собираюсь построить. Как раз в данный момент пишу некоторые наброски (даже что-то получается). Вопросы обязательно будут. Они уже есть, но чуть позже задам их

Автор:  Surrogate [ 13 янв 2022, 11:28 ]
Заголовок сообщения:  Re: Мониторинг изменений данных объетов

раз уж вы к нам сегодня заглянули позволю себе задать еще несколько дополнительных вопросов :D
Machestro писал(а):
Велосипед собираюсь построить
как кстати успехи в этом направлении ?
Machestro в сообщении #14453 писал(а):
Но сейчас сценарий такой - электротехнические приборы (автомат, блок питания, контроллер и т.д.) Все эти приборы имеют свое УГО, то есть это определённые мастера. У каждого прибора (мастера) есть контакты - контакт это тоже мастер, который содержит определенные данные. Я не могу предусмотреть сейчас все данные которые будут у контакта (набор данных будет один и тот же для всех приборов)
у нас в соседнем районе соседнем подразделе форума затевается очередное велосипедо-строение
immortal в сообщении #16570 писал(а):
Велосипед это итоговый комплект проектной или рабочей документации по электроснабжению (в будущем отоплению, вентиляции, канализации и т.п.)
может чего-то посоветуете ?

Автор:  Machestro [ 13 янв 2022, 11:57 ]
Заголовок сообщения:  Re: Мониторинг изменений данных объетов

Я уже не проектирую электрические схемы и прочую документацию по АСУТП (сменил место работы). Теперь я полноценный разработчик BI, поэтому забросил данный проект. Но то что получалось мне определенно нравилось, visio со своим формульным движком просто сказка + vba (вместо LISP тоже огромный +) + Ещё и Powe Query для формирования нужных Спецификаций
Специфика моей работы была следующая - один и тот же электротехнический объект мог находиться на различных листах проекта, но с различным отображением (под одним и тем же я имею ввиду полное его позиционное обозначение + место установки). И написал формулу (очень длинную), которая использует SetAtRef и прочее которая связывала бы все эти "одинаковые" объекты в одно целое. Если я менял что-то у одного объекта (имею ввиду текстовую информацию, или номер провода в проводнике), то это так же менялось и у всех его экземпляров.
Потом планировал извлекать информацию через Power Query. Это если кратко описать. А так вспоминать нужно, но наработки сохранились

Автор:  Surrogate [ 13 янв 2022, 12:07 ]
Заголовок сообщения:  Re: Мониторинг изменений данных объетов

Machestro писал(а):
сменил место работы). Теперь я полноценный разработчик BI
поздравляю :!:
я тоже 4 года уже не работаю с Visio, но у меня прозаическая писанина и причесывание документации в MS Word :wall:
Machestro писал(а):
но наработки сохранились
если не жалко поделитесь :mrgreen:
Surrogate в сообщении #16677 писал(а):
Все что осталось после потери флешки свалено в моей папке на GitHub.
правда я свои макросы выложил, но они без комментариев - все равно мало кто разберется :?

Автор:  Machestro [ 13 янв 2022, 12:17 ]
Заголовок сообщения:  Re: Мониторинг изменений данных объетов

Если будет время, то постараюсь вспомнить и поделиться что есть

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