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

Форум по вопросам применения и программирования в Visio
Текущее время: 29 мар 2024, 00:41

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


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


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

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Вычисление длины ломанной линии
СообщениеДобавлено: 15 окт 2012, 12:51 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Может кому пригодится, как-то помогал сделать подобный макрос кому-то на форуме (или этом или старом) и забыл. Недавно коллеги по работе попросили сделать им такой же, пришлось вспоминать :)
Код:
Sub dl()
Dim sel As Selection
Dim snap1 As Shape
Set sel = ActiveWindow.Selection
If sel.Count <> 1 Then ' если не выделено ничего или больше одного будет сообщение
        MsgBox "Нужно выделить лишь одну линию!"
Exit Sub
End If
Set snap1 = sel.Item(1)
Dim dl As Double
dl = Round(KabLength(snap1) * 10) / 10
MsgBox ("длина линии " & dl & " мм")
End Sub

Function KabLength(Shap As Shape) As Double
Dim i As Integer
Dim Summa As Double ' сумма длин
Dim dx As Double, dy As Double ' определяем разности координат между концами отрезка
Dim nRows As Integer  ' счетчик количества изломов линии
nRows = Shap.RowCount(visSectionFirstComponent) - 1
Summa = 0
For i = 1 To nRows - 1  ' пошагово перебираются узлы линии и вычисляются расстояния между узлами:
dx = (Shap.CellsSRC(visSectionFirstComponent, i, 0) - Shap.CellsSRC(visSectionFirstComponent, i + 1, 0)) * 0.0254 * 1000 ' по оси X
dy = (Shap.CellsSRC(visSectionFirstComponent, i, 1) - Shap.CellsSRC(visSectionFirstComponent, i + 1, 1)) * 0.0254 * 1000 ' по оси Y
Summa = Summa + Sqr(dx ^ 2 + dy ^ 2) ' Вычисляем длину текущего отрезка и прибавляем к сумме длин предыдущих отрезков
Next
KabLength = Summa
End Function

Работает только с линиями, но не с дугами, полилиниями (вернее тем, что под этим подразумевается в Визио) и карандашными загогулинами

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


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

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

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Вычисление длины ломанной линии
СообщениеДобавлено: 21 мар 2023, 20:35 
Не в сети
Постоянный участник
Аватара пользователя

Зарегистрирован: 13 авг 2020, 04:53
Сообщений: 87
Использую Visio c: 2000
Уровнь квалификации: начальный
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
теперь можно так не заморачиваться, см. пост

visSectionFirstComponent ..! благодарю сэнсэй за пинок под жп. Нет тут смысл не считать общую длину с Pathlenth а именно кусками а потом суммировать не все сразу а так как надо . Например ..линия имеет условно 12 сегментов, но мне нужны три суммы 1+2+3 , 3+4+5+6, 6:12. Потом что в начале в середине и конце на линии размещены другие шейпы и мне нужны расстояния "по кривой" между ними..Дальше разберусь с математикой мне нужен был синтаксис что там в скобках и помощь учителя была очень своевременной.
Содержимое спрятано под спойлер ↓
Спойлер:
Интересно gpt4 уже может заменить человека в такой помощи и какова временная перспектива многоязыковых промтов? Понимаю что флуд но это будущее


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Вычисление длины ломанной линии
СообщениеДобавлено: 22 мар 2023, 09:08 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
fixer6 писал(а):
мне нужны три суммы 1+2+3 , 3+4+5+6, 6:12
Делал на скорую руку, без проверки количества участков линии! Чисто для демонстрации возможности…
Добавил в функцию две опциональные переменные (начало и конец цикла), если они не заданы выдает полную длину.Содержимое спрятано под спойлер ↓
Спойлер:
Код:
Sub dlina()
Dim sel As Selection
Dim snap1 As Shape
Set sel = ActiveWindow.Selection
If sel.Count <> 1 Then ' если не выделено ничего или больше одного будет сообщение
        MsgBox "Нужно выделить лишь одну линию!"
Exit Sub
End If
Set snap1 = sel.Item(1)
Dim d1_3 As Double, d3_6 As Double, d6_12 As Double, dl As Double
dl = KabLength(snap1, 3, 6)
d1_3 = Round(KabLength(snap1, 1, 3) * 10) / 10
MsgBox ("Суммарная длина 1-3 участков " & d1_3 & " мм")
d3_6 = Round(KabLength(snap1, 3, 6) * 10) / 10
MsgBox ("Суммарная длина 3-6 участков " & d3_6 & " мм")
d6_12 = Round(KabLength(snap1, 6, 12) * 10) / 10
MsgBox ("Суммарная длина 6-12 участков " & d6_12 & " мм")
dl = Round(KabLength(snap1) * 10) / 10
MsgBox ("Суммарная длина всей линии " & dl & " мм")
End Sub

Function KabLength(Shap As Shape, Optional st As Integer, Optional en As Integer) As Double
Dim i As Integer
Dim Summa As Double ' сумма длин
Dim dx As Double, dy As Double ' определяем разности координат между концами отрезка
Dim nRows As Integer  ' счетчик количества изломов линии
nRows = Shap.RowCount(visSectionFirstComponent) - 1
Summa = 0
If st = 0 And en = 0 Then
st1 = 1
en1 = nRows - 1
Else
st1 = st
en1 = en
End If
For i = st1 To en1  ' пошагово перебираются узлы линии и вычисляются расстояния между узлами:
dx = (Shap.CellsSRC(visSectionFirstComponent, i, 0) - Shap.CellsSRC(visSectionFirstComponent, i + 1, 0)) * 0.0254 * 1000 ' по оси X
dy = (Shap.CellsSRC(visSectionFirstComponent, i, 1) - Shap.CellsSRC(visSectionFirstComponent, i + 1, 1)) * 0.0254 * 1000 ' по оси Y
Summa = Summa + Sqr(dx ^ 2 + dy ^ 2) ' Вычисляем длину текущего отрезка и прибавляем к сумме длин предыдущих отрезков
Next
KabLength = Summa
End Function

Оффтоп:
fixer6 писал(а):
Интересно gpt4 уже может заменить человека в такой помощи и какова временная перспектива многоязыковых промтов? Понимаю что флуд но это будущее
Не знаю насколько далеко шагнула вперед 4 версия, против версии 3.5 про которую хайп стоит с ноября прошлого года…
Версии 3.5 точно еще рано доверять :mrgreen:
Изображение
Я создал ветку про взаимодействие Visio+ChatGPT на форуме VisioGuy, там есть еще одна. Есть еще про взаимодействие Microsoft 365+AI
В общем скоро "узкоспециализированные гуру" типа меня точно станут не нужны!

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Вычисление длины ломанной линии
СообщениеДобавлено: 24 мар 2023, 16:55 
Не в сети
Постоянный участник
Аватара пользователя

Зарегистрирован: 13 авг 2020, 04:53
Сообщений: 87
Использую Visio c: 2000
Уровнь квалификации: начальный
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
Делал на скорую руку, без проверки количества участков линии! Чисто для демонстрации возможности…

По математике немного в исходнике не сошлось(d1_3 + d3_6 + d6_12 <> dl) .. :D На скорую вполне для понимания механики калькулятора. Благодарю.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Вычисление длины ломанной линии
СообщениеДобавлено: 24 мар 2023, 18:08 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
fixer6 писал(а):
По математике немного в исходнике не сошлось(d1_3 + d3_6 + d6_12 <> dl)
Так речь же шла о сегментах, а не о расстоянии между точками!
fixer6 писал(а):
линия имеет условно 12 сегментов, но мне нужны три суммы 1+2+3 , 3+4+5+6, 6:12
Вот как я понял это буквально…
Изображение
Сегменты 3 и 6 учитываются дважды!

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


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

Зарегистрирован: 13 авг 2020, 04:53
Сообщений: 87
Использую Visio c: 2000
Уровнь квалификации: начальный
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
Сегменты 3 и 6 учитываются дважды!

Благодарю в отладчике разобрался , перешел на след задачу ..определение какие именно сегменты входят в "кусок" между двумя "квадратами" над которыми проходит линия и т.д. Тема кабельной трассы и кабельного журнала без участия коннекторов :D На работе нанокад и там все уже придумано, но повторить какие то функции откуда на Visio неплохая практика программирования как хобби.


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

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



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

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


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

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