Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 20 ноя 2019, 21:06

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !
Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Задание имени точке соединения
СообщениеДобавлено: 21 окт 2011, 12:12 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 915
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 123

Добавить очки репутацииУменьшить очки репутации
Здравствуйте!
Можно ли при добавлении точки соединения на фигуру задать ей (точке) имя (какое-то текстовое поле).
Чтобы было понятнее: у меня есть электрическая схема, на ней все элементы имеют точки подключения. Например замыкающий контакт в таком виде:
1 _\_ 2
Т.е. контакт имеет две точки с именами: 1 и 2.
Можно ли так сделать, чтобы при этом они были в составе фигуры, и к ним можно было обратиться из макроса по заданному пользоватетем имени?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Задание имени точке соединения
СообщениеДобавлено: 21 окт 2011, 13:39 
Не в сети
Глав-тролль

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3728
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Сбор вторичного сырья
Должность: Безработный
Уровнь квалификации: Отсутствует
Попробую ответить…

Осмысленных имен для точек соединения присвоить нельзя !
Визио при добавлении точек присоединения к фигуре само присваиваивает им порядковые номера.
не совсем понял, что значить "обращаться из макроса" ?
но если нужно получить координату X, точки присоединения 1 ее формула в ShapeSheet будет
Connections.X1
аналогично для координаты Y - Connections.Y1, и обоих координат точки 2 - Connections.X2 и Connections.Y2

пример в VBA
Application.ActiveWindow.Shape.CellsSRC(visSectionConnectionPts, 0, visCnnctX).FormulaU = "5 mm"
Аналогично для координаты Y - Application.ActiveWindow.Shape.CellsSRC(visSectionConnectionPts, 0, visCnnctY).FormulaU = "5 mm"
в данном случае 0 это для первой точки, 1 - будет для второй, ибо в VBA нумерация начинается с 0

как добавить точки в фигуру:
1. выделить фигуру, выбрать в меню значок точки привязки и мышкой кликнуть в нужное место
2. через ShapeSheet, добавить секцию Connections. для каждой новой точки добавлять строки в этой секции


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Задание имени точке соединения
СообщениеДобавлено: 21 окт 2011, 17:47 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 915
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 123

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

Изображение

Так вот, в данном случае у прибора KL1 есть 6 клемм с вышеприведенными названиями - столбец "Клеммы №". KL1 в свою очередь на схеме подключен к устройствам А1, SF1 и к составному устройству (например контроллеру) Unit 1, у которого есть несколько каналов, на которых в свою очередь несколько клемм. Короче KL1 подключен, как на таблице на рисунке - столбец "Адрес подключения", после двоеточия эти самые точки подключения. Собственно, задача стоит именно такую табличку и создать средствами Visio и макросов, имея схему электрическую условно такую:

Изображение

Мне надо просто перечислить в таблице для устр-ва KL1 названия всех точек подключения к другим устройствам.
Как это реализовать в Visio? может не через соединительные точки, раз им нельзя задать имя, а как-то по-другому?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Задание имени точке соединения
СообщениеДобавлено: 21 окт 2011, 18:48 
Не в сети
Глав-тролль

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3728
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Сбор вторичного сырья
Должность: Безработный
Уровнь квалификации: Отсутствует
Интересная задача !
мне иногда тоже требуется составлять подобные таблички :)
мне все было их лень автоматизировать, надо подумать …


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Задание имени точке соединения
СообщениеДобавлено: 21 окт 2011, 19:05 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 915
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 123

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Задание имени точке соединения
СообщениеДобавлено: 26 окт 2011, 11:04 
Не в сети
Глав-тролль

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3728
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Сбор вторичного сырья
Должность: Безработный
Уровнь квалификации: Отсутствует
Цитата:
Может как-то группы фигур делать. Т.е. устройство состоит из группы шейпов. отдельный шейп на одну точку соединения (т.е. вместо точки соединения использовать весь шейп, у которого естественно будет и текстовая часть, на которую можно потом ссылаться).


да, я примерно так и сделал…
пример выложил, лень было морочиться с таблицей для вывода результатов. поэтому ограничился примитивным прямоугольником :)

Код:
Sub ConnectedShapes()
Dim vsoSelection As Visio.Selection
    Set vsoSelection = Application.ActiveWindow.Page.CreateSelection(visSelTypeByLayer, visSelModeSkipSuper, "Connector") ' выделение всех коннекторов на листе
    Application.ActiveWindow.Selection = vsoSelection
Text = Chr(9) & "Начало" & Chr(9) & "конец" ' формирование текста шапки таблицы вывода результатов
For x = 1 To vsoSelection.Count ' перебор коннекторов
Dim sb As Shape ' шейп присоединенный к началу коннектора(х)
Dim se As Shape ' шейп присоединенный к концу коннектора(х)
Set SH = ActiveWindow.Selection.Item(x) 'выделенный шейп
If SH.connects.Count > 0 Then 'условие наличия активных связей
For i = 1 To SH.connects.Count 'цикл перебора всех активных связей
b(i) = SH.connects(i).ToSheet 'активные связи (к чему приклеен)
Next
End If
Set sb = ActivePage.Shapes.Item(b(1))  ' установление шейпа присоединенного к началу коннектора(х)
Set se = ActivePage.Shapes.Item(b(2))  ' установление шейпа присоединенного к концу коннектора(х)
Text = Text & Chr(10) & Chr(9) & sb.Parent.Name & ":" & sb.Characters & Chr(9) & se.Parent.Name & ":" & se.Characters ' добавление строки для коннектора(х)
Next x
' =========================================

Application.ActiveWindow.Page.DrawRectangle 3.307087, 2.125984, 5.669291, 1.811024 ' добавление таблицы вывода результатов
Set last = ActiveWindow.Selection.Item(1) ' последний добавленный элемент-прямоугольник

' здесь производятся различные манипуляции с прямоугольником-таблицей вывода результатов
 
last.Characters = Text ' заполнение таблицы текстом в теле прямоугольника
End Sub


Вложения:
Комментарий к файлу: Пример с выводом результата в примитивную таблицу
connect.zip [46.04 Кб]
Скачиваний: 125
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Задание имени точке соединения
СообщениеДобавлено: 26 окт 2011, 17:40 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 915
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 123

Добавить очки репутацииУменьшить очки репутации
Классно, спасибо!
Только надо было составлять табличку относительно каждого устройства, а не коннектора, но суть ясна :)
Единственный косяк - когда я в вашем примере добавляю новый коннектор, соединяю другие две точки устройств и запускаю макрос - вылезает ошибка:
Изображение

Почему так?
у меня Visio 2003 если че...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Задание имени точке соединения
СообщениеДобавлено: 26 окт 2011, 18:15 
Не в сети
Глав-тролль

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3728
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Сбор вторичного сырья
Должность: Безработный
Уровнь квалификации: Отсутствует
у меня стояла задача учесть все кабели на схеме, поэтому такое решение …

я тоже ретроград, у меня тоже visio2003 :)
ошибка повторилась и у меня. но как только я удалил в блоке SW02, квадраты с номерами 1-8 (их я добавил показывая коллеге один фокус во время написания макроса, потом забыл удалить). далее накопировал стандартных маленьких квадратов 2х2 мм (Например Fa0/1) и соединил их - макрос работает без проблем

точной причины сказать не могу :(


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Задание имени точке соединения
СообщениеДобавлено: 26 окт 2011, 20:40 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 915
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 123

Добавить очки репутацииУменьшить очки репутации
Еще раз спасибо, буду разбираться дальше на этом примере.
Еще вопрос: что-то я не могу найти, где в ShapeSheet фигуры находится поле с текстом, который вводится по двойному нажатию на фигуру. В упор не вижу. Откройте мне глаза))
Пардон за глупый вопрос, я с разработкой под Visio только знакомлюсь, обложился книгами и интернетами :geek: пока не все понятно


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Задание имени точке соединения
СообщениеДобавлено: 27 окт 2011, 12:35 
Не в сети
Глав-тролль

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3728
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Сбор вторичного сырья
Должность: Безработный
Уровнь квалификации: Отсутствует
в шейпшите по умолчанию 3 раздела описывающих текст: Character, Paragraph, Tabs

можно добавить в шейпшит раздел Text Transform - там можно задавать размеры и положение текстового поля, отличающиеся от размеров шейпа

по существу вопроса: в шейпшите не найдешь в явном виде поля с текстом шейпа. текст шейпа можно получить используя формулу =shapetext(sheet.#!thetext), где # - номер ID шейпа

ID шейпа можно посмотреть Format -> Special (если Visio 2003 английский комбинация клавиш Alt+o+e), ID верхняя строка


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Задание имени точке соединения
СообщениеДобавлено: 27 окт 2011, 13:03 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 915
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 123

Добавить очки репутацииУменьшить очки репутации
ок. получить текст можно, а изменить его через шейпшит как? (дико конечно сделано - все параметры для текста есть, а самого текста нет)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Задание имени точке соединения
СообщениеДобавлено: 27 окт 2011, 14:18 
Не в сети
Глав-тролль

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3728
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Сбор вторичного сырья
Должность: Безработный
Уровнь квалификации: Отсутствует
зачем его менять, через шейпшит ?

если нужно, чтоб в зависимости от условия менялся текст то в поле text fields. value можно написать формулу типа

=if(width>100 mm,"длина >100 mm","длина <100 mm")


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Задание имени точке соединения
СообщениеДобавлено: 27 окт 2011, 16:06 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 915
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 123

Добавить очки репутацииУменьшить очки репутации
это работает в том случае, когда секция text fields есть (когда ты ее добавил через меню Insert, причем на чертеже, в шейпшите она не добавляется). но когда я просто рисую скажем прямоугольник и пишу в нем текст (двойным щелчком) - этой секции нет, и возможности влиять на текст через шейпшит тоже. это вот и непонятно! программно-то текст можно достать и изменить его, а через шейпшит - нет. странно... я думал, что в шейпшите должны быть ВСЕ свойства фигуры (текст - часть фигуры).
в остальном то вопросов нет :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB