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

Форум по вопросам применения и программирования в Visio
Текущее время: 12 авг 2020, 04:40

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


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


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



Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Программно нарисовать исходящие линии?
СообщениеДобавлено: 16 июл 2012, 10:04 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

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

Идеи?))


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Программно нарисовать исходящие линии?
СообщениеДобавлено: 16 июл 2012, 11:07 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
ладно, скажите просто как в определенной точке нарисовать исходящую линию :)


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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Программно нарисовать исходящие линии?
СообщениеДобавлено: 16 июл 2012, 11:26 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
оке) не горит


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

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

1. расположение точек соединения типа (справа) - для исходящих линий , а слева для входящих
или нет привязки исходящих/входящих линий к сторонам ?
2. Отходящая линия закончится на подобном шейпе или может закончится в любом месте ?


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

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

Добавить очки репутацииУменьшить очки репутации
насчет того как нарисовать линию - я бы попробовал просто включить запись макроса, нарисовать линию средствами визио, посмотреть код. и перевести его в C# :)


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

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3964
Откуда: оттуда
Использую Visio c: 1998
Уровнь квалификации: Отсутствует
9rey отличный совет :)


Sila
исходящими должны именно линии или коннекторы ?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Программно нарисовать исходящие линии?
СообщениеДобавлено: 16 июл 2012, 13:44 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
Слева - входящие линии, мы их задаём руками, 3 точки соединения (притягиваем линию в эти точки);
справа - исходящие линии - нужно задать автоматически, имеются 3 точки соединения, нужно как-то запретить коннектить туда руками.
Тип исходящей линии - коннектор - исходящий (стрелка из шейпа :) ), закончится в любом месте, достаточно указать её длину, (суть в том что эти автоматически сгенеринные линии буду входными для следующего шейпа :) )


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Программно нарисовать исходящие линии?
СообщениеДобавлено: 16 июл 2012, 13:45 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
Записать макрос сейчас немогу, визио поломан))) переделываю хранение данных в моем проекте :D


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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Программно нарисовать исходящие линии?
СообщениеДобавлено: 16 июл 2012, 14:15 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

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

вот и думай теперь как из НУЖНОЙ точки нарисовать линию программно(


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

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3964
Откуда: оттуда
Использую Visio c: 1998
Уровнь квалификации: Отсутствует
точка коннекта есть у шейпа такое свойство Connection points
Код:
Application.ActiveWindow.Shape.CellsSRC(visSectionConnectionPts, 0, visCnnctX).FormulaU = "Width*0.5"
    Application.ActiveWindow.Shape.CellsSRC(visSectionConnectionPts, 0, visCnnctY).FormulaU = "Height*

я просто сразу никак не соображу как сделать, чтоб линия стартовала из этой точки коннекта…


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Программно нарисовать исходящие линии?
СообщениеДобавлено: 16 июл 2012, 15:30 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
ладно...как-нибудь прийдет идея, я думаю.

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


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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Программно нарисовать исходящие линии?
СообщениеДобавлено: 16 июл 2012, 15:49 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
это я понял...но как бы вы сделали это на вба? на c# в событии соединения шейпа я принимаю объект connects в котором указаны объекты шейпы: моя линия и мой шейп , куда она присоединяется.

как определить в какую координату она присоединилась?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Программно нарисовать исходящие линии?
СообщениеДобавлено: 16 июл 2012, 23:35 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1668
Очков репутации: 100613

Добавить очки репутацииУменьшить очки репутации
ConnectionPoints пронумерованы. Номер узнается методом ToPart.
По номеру вычисляем номер строки в секции Connection Points.
А там лежат координаты.
Код:
Private Sub pg_ConnectionsAdded(ByVal Connects As IVConnects)
    Debug.Print Connects.ToSheet
    Debug.Print Connects.FromSheet
    Debug.Print Connects(1).ToPart
    n = Connects(1).ToPart - 100
    If n >= 0 Then
        Debug.Print Connects.ToSheet.CellsSRC(visSectionConnectionPts, visRowConnectionPts + n, visX)
        Debug.Print Connects.ToSheet.CellsSRC(visSectionConnectionPts, visRowConnectionPts + n, visY)
    End If
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Программно нарисовать исходящие линии?
СообщениеДобавлено: 17 июл 2012, 09:19 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
окк, пасиб, а почему при вычислении n написано -100 ?)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Программно нарисовать исходящие линии?
СообщениеДобавлено: 17 июл 2012, 10:25 
Не в сети
Глав-тролль

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3964
Откуда: оттуда
Использую Visio c: 1998
Уровнь квалификации: Отсутствует
как я и говорил, что визио работает с абсолютными координатами. ниже код и пример
Код:
Sub dl()
Set SHP1 = ActivePage.Shapes.ItemFromID(3)
Set SHP = ActivePage.Shapes.ItemFromID(2)
LXB = SHP.CellsSRC(visSectionObject, visRowXFormOut, visXFormPinX) - SHP.CellsSRC(visSectionObject, visRowXFormOut, visXFormLocPinX) + SHP.CellsSRC(visSectionConnectionPts, 0, visCnnctX)
LYB = SHP.CellsSRC(visSectionObject, visRowXFormOut, visXFormPinY) - SHP.CellsSRC(visSectionObject, visRowXFormOut, visXFormLocPinY) + SHP.CellsSRC(visSectionConnectionPts, 0, visCnnctY)
LXE = SHP1.CellsSRC(visSectionObject, visRowXFormOut, visXFormPinX) - SHP1.CellsSRC(visSectionObject, visRowXFormOut, visXFormLocPinX) + SHP1.CellsSRC(visSectionConnectionPts, x, visCnnctX)
' SHP1.CellsSRC(visSectionObject, visRowXFormOut, visXFormPinX)   - абсолютная координата "расположения булавки" Pin Pos шейпа по оси Х
' SHP1.CellsSRC(visSectionObject, visRowXFormOut, visXFormLocPinX)   - поиск крайней левой координаты фигуры по оси Х (относительная)
' SHP1.CellsSRC(visSectionConnectionPts, 0, visCnnctX)      - поиск координаты точки соединения1 оси Х
LYE = SHP1.CellsSRC(visSectionObject, visRowXFormOut, visXFormPinY) - SHP1.CellsSRC(visSectionObject, visRowXFormOut, visXFormLocPinY) + SHP1.CellsSRC(visSectionConnectionPts, x, visCnnctY)
ActiveWindow.Shape.DrawLine LXB, LYB, LXE, LYE
End Sub


где то был у меня код для коннекторов, буду поискать :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Программно нарисовать исходящие линии?
СообщениеДобавлено: 17 июл 2012, 10:31 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
спасибо! я сделал, ура!)))

способ такой: я заранее определяю точки соединения, в шейпшЫте списываю формулы каждой точки, и сравниваю с коннектом, код C#:

Код:
  private static void AppConnectionsAdded(Connects connects)
        {
           var n = connects[1].ToPart - 100;
           
                var x = connects.ToSheet.CellsSRC[
                    (short) VisSectionIndices.visSectionConnectionPts, (short) (VisRowIndices.visRowConnectionPts + n),
                    (short) VisCellIndices.visX].FormulaU;
                var y =
                    connects.ToSheet.CellsSRC[
                        (short) VisSectionIndices.visSectionConnectionPts, (short) (VisRowIndices.visRowConnectionPts + n),
                        (short)VisCellIndices.visY].FormulaU;
               

            if (x == "Width*1" && y == "Height*0.5")
            {
                connects.FromSheet.Text = "Внизу";
            }

            if (x == "Width*0.5" && y == "Height*0")
            {
                connects.FromSheet.Text = "Слева";
            }
}


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Программно нарисовать исходящие линии?
СообщениеДобавлено: 17 июл 2012, 10:36 
Не в сети
Глав-тролль

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3964
Откуда: оттуда
Использую Visio c: 1998
Уровнь квалификации: Отсутствует
этот код для коннектора или линии ?


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

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



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

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


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

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