| 
        
          | 
              
                | Author |  Topic  |  
                | dkapotov
 
                Russia29 Posts
 | 
                    
                      |  Posted - 10/23/2004 :  13:25:37   
 |  
                      | Вопрос такой. Создаю мастер-шейп, сохраняю его в Stencils, далее необходимо, чтобы у него заполнялись некие свойство. Например оптоволокно. На схеме над условным обозначением должны присутствовать его характеристики: диаметр сердцевины, диаметр оболочки, диаметр защиты и т.д. Допустим каждая из этих характеристик сопоставляется некой букве (a, b, c, d).
 Как сделать, чтобы при перетаскивании шейпа на рабочий лист появлялось окошко, прелагающее заполнить свойства этого шейпа и в дальнейшем они сохранялись бы в какой-нибудь базе?
 
 Капотов Дмитрий Владимирович
 |  |  
                | Tumanov
 
                Russia1198 Posts
 | 
                    
                      |  Posted - 10/23/2004 :  16:37:01 
 |  
                      | Вариант 1 - написать макрос или Add-on Вариант 2 - пользоваться Custom Properties Window и визардом Database Wizard.
 
 Вариант 1
 У документа есть событие добавления шейпа. По нему вызывается обработчик
 Document_ShapeAdded(ByVal Shape As IVShape)
 Текст этого обработчика пишете сами. Сначала делаете формочку, в которой есть поля для заполнения свойств. В обработчике эту форму вызываете. По кнопке OK на форме надо занести в пользовательские свойства введенные значения.
 Для сохранения в базе может быть отдельный макрос. Запускается, например, из меню, коннектится к базе, потом опрашивает все шейпы на рисунке. Если имя шейпа включает заданное имя (мастер-шейпа), то выбирает пользовательские свойства и добавляет их в виде строки к базе.
 
 Вариант 2
 Если открыть окно Custom Properties Window (меню View), то при переносе мастер-шейпа на страницу рисунка его свойства будут отображаться в этом окне. В принципе, это аналогично приглашению заполнить их.
 Для передачи данных в базу в Visio существует несколько Add-on'ов Database Wizard, Database Export и т.д. (в меню Tools / Macros / Visio Extras). С их помощью можно передать нужные данные.
 Например, берем Database Export.
 (Сначала нужно иметь какую-нибудь базу, например Access, и создать для нее псевдоним ODBC)
 Запускаем Database Export. Он запрашивает, что мы хотим экспортировать. Говорим, что хотим экспортировать данные селектированных шейпов.
 Селектируем нужные шейпы и жмем OK.
 Выбираем нужные пользовательские поля.
 Выбираем псевдоним нашей базы в качестве источника ODBC.
 Выбираем существующую табличку или вводим имя новой таблицы.
 Указываем имена и типы полей в базе.
 И еще через несколько нажатий клавиш, когда экспорт завершится, можно открывать базу Access и проверять наличие нужных данных в указанной таблице.
 Этот путь далеко не единственный, каждый визард может что-то свое...
 
 Короче, если Вам нужно быстро и сейчас, то изучаете эти визарды и уже можно работать. А если нужно иметь красивое приложение и не долбить каждый раз по лишним кнопкам, то лучше один раз написать пару своих макросов или Add-on'ов.
 |  
                      |  |  |  
                | Tumanov
 
                Russia1198 Posts
 | 
                    
                      |  Posted - 10/23/2004 :  17:28:34 
 |  
                      | Вот, например, этот макрос открывает таблицу Access и пишет туда два пользовательских свойства из единственного селектированного шейпа: Sub ttt()
 s1 = Replace(ActiveWindow.Selection(1).Cells("Prop.Row_1").Formula, Chr(34), "")
 s2 = Replace(ActiveWindow.Selection(1).Cells("Prop.Row_2").Formula, Chr(34), "")
 Dim cnt As New ADODB.Connection
 strDB = "D:\My Documents\db1.mdb"
 cnt.Open ("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\My Documents\db1.mdb")
 SQLstr = "INSERT INTO Таблица2 (Prop_Row_1, Prop_Row_2 ) VALUES ('" & s1 & "', '" & s2 & "');"
 cnt.Execute (SQLstr)
 cnt.Close
 Set cnt = Nothing
 End Sub
 
 Комментарии:
 База называется db1.mdb и находится в D:\My Documents\
 Custom Properties шейпа не переименованы, поэтому называются Prop.Row_1 и Prop.Row_2.
 Replace нужно чтобы вычистить лишние кавычки.
 SQLstr - это строка SQL, добавляющая запись в таблицу с именем "Таблица2".
 Поля в базе называются Prop_Row_1 и Prop_Row_2 (почти как свойства шейпа).
 К проекту, естественно, нужно добавить Microsoft ActiveX Data Objects 2.5 Library
 
 |  
                      |  |  |  
                | dkapotov
 
                Russia29 Posts
 | 
                    
                      |  Posted - 10/23/2004 :  20:21:53   
 |  
                      | quote:Originally posted by Tumanov
 
 Вот, например, этот макрос открывает таблицу Access и пишет туда два пользовательских свойства из единственного селектированного шейпа:
 Sub ttt()
 s1 = Replace(ActiveWindow.Selection(1).Cells("Prop.Row_1").Formula, Chr(34), "")
 s2 = Replace(ActiveWindow.Selection(1).Cells("Prop.Row_2").Formula, Chr(34), "")
 Dim cnt As New ADODB.Connection
 strDB = "D:\My Documents\db1.mdb"
 cnt.Open ("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\My Documents\db1.mdb")
 SQLstr = "INSERT INTO Таблица2 (Prop_Row_1, Prop_Row_2 ) VALUES ('" & s1 & "', '" & s2 & "');"
 cnt.Execute (SQLstr)
 cnt.Close
 Set cnt = Nothing
 End Sub
 
 Комментарии:
 База называется db1.mdb и находится в D:\My Documents\
 Custom Properties шейпа не переименованы, поэтому называются Prop.Row_1 и Prop.Row_2.
 Replace нужно чтобы вычистить лишние кавычки.
 SQLstr - это строка SQL, добавляющая запись в таблицу с именем "Таблица2".
 Поля в базе называются Prop_Row_1 и Prop_Row_2 (почти как свойства шейпа).
 К проекту, естественно, нужно добавить Microsoft ActiveX Data Objects 2.5 Library
 
 
 
 
 Чтож, спасибо за помощь. Попробую поковырять. Может получится...:))
 
 Капотов Дмитрий Владимирович
 |  
                      |  |  |  
                | dkapotov
 
                Russia29 Posts
 | 
                    
                      |  Posted - 10/23/2004 :  22:34:56   
 |  
                      | quote:Originally posted by Tumanov
 
 Вариант 1 - написать макрос или Add-on
 Вариант 2 - пользоваться Custom Properties Window и визардом Database Wizard.
 
 Короче, если Вам нужно быстро и сейчас, то изучаете эти визарды и уже можно работать. А если нужно иметь красивое приложение и не долбить каждый раз по лишним кнопкам, то лучше один раз написать пару своих макросов или Add-on'ов.
 
 
 
 
  В общем с горем пополам подсоединил базу Access. Есть ляпы:
 1. Если к листу привязать add-on Database export, то сколько раз будешь жать на педаль обновить данные, столько раз они в таблицу и пишутся. Т.е. если есть 5 шейпов на листе, а я выбрал два раза действие обновить базу, то в таблице появляется 10 строк. Данные дублируются дважды. Че-то не запонминаются уникальные номера шейпов.
 2. Хотелось бы, чтобы значения пользовательских полей выводились на лист. Например есть обозначение розетки. Я ей нарезаю пользовательские поля: 1-префикс, 2-номер комнаты, 3-номер порта, 4- тип порта. Обозначение розетки на схеме 1XD1.23.К (где 1-номер комнаты, XD-префикс, 23-номер порта, к-тип порта). Как забацать, чтобы вот такая строчка писалась над обозначением розетки на схеме? Например по двойному щелчку на шейпе или по контекстному меню. Пробовал макрос записать - фигня выходит. Только одно какое-то значение записывается и все. И то только для одного шейпа.
 
  
 Капотов Дмитрий Владимирович
 |  
                      |  |  |  
                | Tumanov
 
                Russia1198 Posts
 | 
                    
                      |  Posted - 10/24/2004 :  08:06:57 
 |  
                      | 1. Там надо сочетать функции. Если один раз провели экспорт, то появились связи между шейпами и строками базы. Дальше, чтобы использовать эти связи, надо пользоваться уже не экспортом, а Update. Тогда при изменении полей в шейпе будут меняться связанные с ними строки в базе... Короче, прежде чем работать, их действительно изучать надо :(
 
 2. Нужно в шейп Insert / Field / Custom formula и в нее вписать формулу, выбирающую данные из Custom Properties. Например,
 =Prop.Row_1 & " - " & Prop.Row_2
 Комментарии:
 Формула выберет значение из первой строки Custom Properties, после этого значения поставит дефис с двумя пробелами, потом припишет значение из второй строки Custom Properties.
 Разделители можно делать разные или вообще не делать.
 Объединение строковых переменных производится знаком &.
 Переменных можно набирать сколько угодно.
 Изменения на рисунке появляются сразу же, как только Вы закончите редактировать пользовательское свойство (например, переведете курсор на другое свойство).
 
 Однако, в нашем приложении "Задача 1" (которое я все никак не доделаю) в похожей ситуации используется другой принцип. В ОПС позиционные обозначения извещателей формируются по схеме: НомерПрибора - Префикс - НомерШлейфа - ПорядковыйНомерВШлейфе.
 Так вот, в таком случае для нумерации у меня сделан Add-on с формочкой. На рисунке выделяется несколько шейпов, которые надо пронумеровать (входящие в один шлейф). Запускается Add-on. Пользователю выдается формочка, на которой четыре поля: пустое, префикс из одного из шейпов, пустое, пустое.
 Пользователь либо оставляет поля пустыми, либо вводит туда начальные значения. Нажимает ОК.
 А дальше Add-on нумерует (присваивает позиционные обозначения) всем селектированным шейпам. Номер прибора и номер шлейфа добавляются, если на форме введены значения, иначе исключаются.
 Префикс берется из шейпа.
 Порядковый номер нарастает, начиная от введенного начального значения.
 Результат записывается в Custom Properties шейпа, а оттуда уже не составной, а простой формулой выводится в текстовое поле на рисунок.
 Удобно тем, что одна операция выполняется сразу для множества шейпов (и для одного тоже сгодится). Посмотрите, может и в данном случае такой принцип будет удобнее.
 |  
                      |  |  |  
                | dkapotov
 
                Russia29 Posts
 | 
                    
                      |  Posted - 10/24/2004 :  08:35:17   
 |  
                      | quote:Originally posted by Tumanov
 
 Однако, в нашем приложении "Задача 1" (которое я все никак не доделаю) в похожей ситуации используется другой принцип. В ОПС позиционные обозначения извещателей формируются по схеме: НомерПрибора - Префикс - НомерШлейфа - ПорядковыйНомерВШлейфе.
 Так вот, в таком случае для нумерации у меня сделан Add-on с формочкой. На рисунке выделяется несколько шейпов, которые надо пронумеровать (входящие в один шлейф). Запускается Add-on. Пользователю выдается формочка, на которой четыре поля: пустое, префикс из одного из шейпов, пустое, пустое.
 Пользователь либо оставляет поля пустыми, либо вводит туда начальные значения. Нажимает ОК.
 А дальше Add-on нумерует (присваивает позиционные обозначения) всем селектированным шейпам. Номер прибора и номер шлейфа добавляются, если на форме введены значения, иначе исключаются.
 Префикс берется из шейпа.
 Порядковый номер нарастает, начиная от введенного начального значения.
 Результат записывается в Custom Properties шейпа, а оттуда уже не составной, а простой формулой выводится в текстовое поле на рисунок.
 Удобно тем, что одна операция выполняется сразу для множества шейпов (и для одного тоже сгодится). Посмотрите, может и в данном случае такой принцип будет удобнее.
 
 
 
 Конечно так удобнее будет. Только есть еще небольшие нюансы. Как я понял нумерация шейпов проставляется один раз и навсегда. То есть нельзя будет в случае необходимости корректировки просто щелкнуть на текстовой надписи над шейпом и переправить вручную. И надо будет как то систематизировать весь спектр приборов и оборудования и делать какую то сводную или универсальную таблицу пользовательских свойств. Затруднительно будет, т.к. например у пожарного извещателя это один набор свойств, у применых приборов другой и т.п. Либо проще все решать - для каждого вида шейпов на каждый новый чертеж будет создаваться новая таблица в базе данных.
 
 Капотов Дмитрий Владимирович
 |  
                      |  |  |  
                | Tumanov
 
                Russia1198 Posts
 | 
                    
                      |  Posted - 10/24/2004 :  09:27:26 
 |  
                      | Тут уж надо выбирать - либо работаем в системе, либо вручную. То есть если щелкнуть на текстовой надписи и ввести текст вручную, потеряется возможность потом работать с ним визардом нумерации (хотя, в визард можно заложить и возможность восстановления формулы; сейчас этого нет). Но ведь можно запустить тот же Add-on по одному шейпу и изменить позиционное обозначение только в нем. Повторная нумерация тоже работает - выделил ту же или немного отличающуюся группу шейпов и перенумеровал...
 
 А по поводу систематизации - это действительно намного серьезнее, чем какой-то макрос написать. Но и эффект должен быть гораздо больше (может быть) :)
 |  
                      |  |  |  
                | immortal
 
                Russia391 Posts
 | 
                    
                      |  Posted - 10/25/2004 :  09:04:04   
 |  
                      | quote:не понятно зачем это все на схеме или плане, пусть будут в свойствах элемента, а все связи типа номера порта(присоединения, если я правильно понимаю) должны быть гдето в журнале (таблице) соединений, или кабельном журнале, на плане только позиционное обозначение, все остальные характеристики должны быть в ведомости изделий или спецификации, не надо хранить данные о шейпах чертежа в базе данных, база данных должна быть одна, и называться "база данных комплектующих", к комутирующим устройствам должно быть адресное присоединение, т.к. если при добавлении или изменении может оказаться что у одного адреса будут несколько присоединений, и в дальнейшем сложно работать с таким проектом, так-же усложняет работу большое количество элементов схемы, все это относиться к различным проводным системам, будь то скс, электрика и т.д.Хотелось бы, чтобы значения пользовательских полей выводились на лист. Например есть обозначение розетки. Я ей нарезаю пользовательские поля: 1-префикс, 2-номер комнаты, 3-номер порта, 4- тип порта. Обозначение розетки на схеме 1XD1.23.К (где 1-номер комнаты, XD-префикс, 23-номер порта, к-тип порта). Как забацать, чтобы вот такая строчка писалась над обозначением розетки на схеме
 
 
 визио 2003 форэвер
 
 ...а вобще-то я белый и пушистый.
 |  
                      |  |  |  
                | Tumanov
 
                Russia1198 Posts
 | 
                    
                      |  Posted - 10/25/2004 :  15:47:24 
 |  
                      | quote:не понятно зачем это все на схеме или плане,
 
 См. требования нормативных документов, например, РД 25.953-90
 "Буквенно-цифровое обозначение пожарного извещателя допускается записывать в последовательности: номер приемно-контрольного прибора, буквенный код извещателя, номер шлейфа, порядковый номер извещателя. Номер шлейфа и порядковый номер извещателя в обозначении должны разделяться точкой. Для построения обозначения применяют прописные буквы латинского алфавита.
 Например: 2ВТК1.12"
 |  
                      |  |  |  
                | immortal
 
                Russia391 Posts
 | 
                    
                      |  Posted - 10/26/2004 :  08:07:44   
 |  
                      | Понятно, тогда все эти свойства должны наследоваться (браться) из присоединенных элементов, я как раз над этим работаю, пока сделано только для электрики по высоте прокладки, планирую и адресные "ссылки" делать, в случае с quote:ставим ПКП и нумеруем его, далее присоединяем к нему шлейф, шлейф содержит (получает автоматически)номер ПКП, присоединяем к шлейфу пожарный извещатель и указываем присоединение, извещатель берет данные шлейфа, т.е. его номер, из шлейфа, номер ПКП, при изменении номера прибора или шлейфа, или извещателя, автоматически адреса изменяются. пока у меня немного работа в этом направлении приостановлена. т.к. проблема с запуском своих ехе, о чем я тут писал.Буквенно-цифровое обозначение пожарного извещателя допускается записывать в последовательности
 
 
 
 quote:Создаю мастер-шейп, сохраняю его в Stencils, далее необходимо, чтобы у него заполнялись некие свойство. Например оптоволокно. На схеме над условным обозначением должны присутствовать его характеристики: диаметр сердцевины, диаметр оболочки, диаметр защиты и т.д. Допустим каждая из этих характеристик сопоставляется некой букве (a, b, c, d).
 Как сделать, чтобы при перетаскивании шейпа на рабочий лист появлялось окошко, прелагающее заполнить свойства этого шейпа и в дальнейшем они сохранялись бы в какой-нибудь базе?
 
 
 
 в этом случае лучше сделать обратную задачу, создать базу данных комплектующих с уникальным полем "тип, марка, обозначение" а остальные характеристики будут браться из других полей, я делаю БДК, но предполагается в свойствах шейпа держать только уникальный номер изделия, в данном случае из поля "тип, марка, обозначение", в принципе можно и другие характеристики держать там, но если
 quote:то можно и не записывать, а можно и записывать, в любом лучше использовать вариант описанный мной, хотя тут не написано что для каждого документа своя база, как и не написано что одна база для всех. уточнять однако надо.допускается
 
 
 визио 2003 форэвер
 
 ...а вобще-то я белый и пушистый.
 |  
                      |  |  |  
                | dkapotov
 
                Russia29 Posts
 | 
                    
                      |  Posted - 10/26/2004 :  08:48:39   
 |  
                      | Обратная задача вовсе не лучше, потому как при проектировании системы я как пректировщик беру план помещения, определяю состав и тип помещений и начинаю набрасывать на него элементы (извещатели, приборы и т.п.). Так я определяю состав оборудования. Заранее в голове я его определить не могу просто физически. Если объект большой в особенности (несколько корпусов, распределенная территоия и т.п.) это касается интегрированных вместе систем - видео+СКУД+ОПС, то вообще нереально в голове все держать. Далее я как на ладони сразу увижу как организовать разбиение системы на разделы - какой извещатель в какой шлейф включить, какой шлейф к какому прибору подключить, как организовать связь между приборами и т.п. И уже на конечнеом этапе рождается окончательная структура системы, которую и надо описывать в базе.
 Хотя должен признать, что идея последовательной связи элементов очень хорошая, но наверное сильно усложняет задачу разработчикам. Поэтому и приходится довольстоваться малым пока.
 Сейчас хотя бы просто систематизировать и составить базу условных графических обозначений со свойствами...
 
 Капотов Дмитрий Владимирович
 |  
                      |  |  |  
                | immortal
 
                Russia391 Posts
 | 
                    
                      |  Posted - 10/26/2004 :  09:32:55   
 |  
                      | quote:Вы совершенно правы, но вы же не разработчик, что вам заботиться об усложнении задач, от вас требуется техническое задание на разработку, тут между прочим есть раздел для заказчиков и разработчиков, пока конечно можно сделать и так, но только как на первом этапе, хотелось бы нормально работать, и в голове не надо все держать, если вы размешаете приборы и провода на рисунке в визио , то почему нельзя вычислить их расположение, привязки и т.п. , а база данных должна быть комплектующих, естественно с возможностью добавления, по аналогии например с САПР Компас-6, там ведь связи не надо в голове держать. через месяц планирую закончить работу над базой данных со связью с шейпами, и тогда посмотрим.Хотя должен признать, что идея последовательной связи элементов очень хорошая, но наверное сильно усложняет задачу разработчикам. Поэтому и приходится довольстоваться малым пока.
 
 
 
 визио 2003 форэвер
 
 ...а вобще-то я белый и пушистый.
 |  
                      |  |  |  
                | Tumanov
 
                Russia1198 Posts
 | 
                    
                      |  Posted - 10/26/2004 :  16:40:23 
 |  
                      | quote:...тут между прочим есть раздел для заказчиков и разработчиков, ... через месяц планирую закончить работу над базой данных со связью с шейпами, и тогда посмотрим...
 
 
 Ну да, пожалуй это моя вина. Надо было совместно разрабатывать. А так получается, что два человека делают работу в параллель.
 Просто я слишком долго с задачей разбирался, а когда все понял, то привлекать кого-то еще вроде уже поздно стало. Неудачно получилось...
 Ну ничего, посмотрим у кого лучше получится :)
 |  
                      |  |  |  
                | dkapotov
 
                Russia29 Posts
 | 
                    
                      |  Posted - 10/26/2004 :  17:00:52   
 |  
                      | quote:Originally posted by Tumanov
 
 
 quote:...тут между прочим есть раздел для заказчиков и разработчиков, ... через месяц планирую закончить работу над базой данных со связью с шейпами, и тогда посмотрим...
 
 
 Ну да, пожалуй это моя вина. Надо было совместно разрабатывать. А так получается, что два человека делают работу в параллель.
 Просто я слишком долго с задачей разбирался, а когда все понял, то привлекать кого-то еще вроде уже поздно стало. Неудачно получилось...
 Ну ничего, посмотрим у кого лучше получится :)
 
 
 
 
    Придется напроситься в бета-тестеры... 
 Капотов Дмитрий Владимирович
 |  
                      |  |  |  
                | immortal
 
                Russia391 Posts
 | 
                    
                      |  Posted - 10/27/2004 :  06:33:36   
 |  
                      | quote:толко приветствуется, я тут уже писал о тестировании моих разработок, пока откликнулся только Digitall, могу общаться мылом, аськой и через этот форумПридется напроситься в бета-тестеры...
 
 
 
 бэтатестерам скидка 100%
  
 визио 2003 форэвер
 
 ...а вобще-то я белый и пушистый.
 |  
                      | Edited by - immortal on 10/27/2004  06:39:03
 |  
                      |  |  |  
                |  Topic  |  |  |  |