All Forums
 Категория Visio
 Форум Вопросы и ответы
 подскажите не_программеру
Author Previous Topic Topic Next Topic  

vtsoy

3 Posts

Posted - 06/09/2005 :  08:01:51
Доброе время суток, уважаемые

Сабж....как быстро сваять кусок кода (макрос), для расчета периметра коннектора. Задача упоминавшаяся: есть шкаф, есть рабочее место (порт), но трасса проходит таким образом (с использованием коннектора), что на ней (трассе) более одного (в моем случае - 4 поворота на 90 градусов. Один проблем (для меня) в некоторых случаях трасса поворачивает на 180 градусов по отношению к шкафу. Пример: шкаф (как нулевая отметка)-5м на юг- 20м на запад- 10 м. на юг - 5 метров на восток- рабочее место. (Восток, юг, север, запад - соотв-т сторонам монитора... жуть сам запутался ) Т.е. имеет место "отрицательное" направление части коннектора.
Обычно (до этого) всегда делал кабельную канализацию из прямых кусков, в кастомсвойствах автоматически (формулой) обсчитывал длину, количество концов в линии и иные свойства (запас кабеля у розетки, у шкафа, запас на спуски/подъемы, межэтажные запасы и проч.) Затем все это визардом в ексел.. дальше все просто.
Счас решил попробовать коннектором и.. вот, столкнулся :( с незнанием ВБА.
С уважением, Андрей

denis

7 Posts

Posted - 06/10/2005 :  07:28:25
Как я понял ты из координат (X,Y) шкафа вычитаешь координаты раб. места и получаешь длину кабеля. Но вомногих случаях это не дает верный результат. Для более точного расчета нужно брать какую-нибудь третью точку от которой расчитывается длина до раб. места. А длина кабеля от шкафа до этой точки будет величинной постоянной.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 06/10/2005 :  07:46:29
Это считает геометрию шейпа:
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
dy = (Shap.CellsSRC(visSectionFirstComponent, i, 1) - Shap.CellsSRC(visSectionFirstComponent, i + 1, 1)) * 0.0254
Summa = Summa + Sqr(dx ^ 2 + dy ^ 2)
Next
KabLength = Summa
End Function
Go to Top of Page

vtsoy

3 Posts

Posted - 06/10/2005 :  13:19:07
2 Denis. Не совсем. Метод "разности координат" :)) - более чем не идеален, нужно порой иметь не одну дополнительную базовую точку, а несколько, как-то их именовать, расставлять в процессе проектирования, делать точкой отсчета какую-то одну (или несколько)короче, головная боль.

Проще послойно обсчитать кол-во шейпов (в данном случае коннекторов), вычислить периметр каждого, добавить спуски-подъемы, запас на разделку и запас в шкафу. Добавить 10% и би хэппи. :)

2 Туманов
БАльшое человеческое спасибо! :) Ничего (почти) из кода не понял, но это пока не важно.

2 олл
А что, даже просто внимательно проштудировав этот форум, понабивав собственные шишки в борьбе с проектами и их реализацией в визио, вполне можно создать эдакий инструмент, с помощью которого можно делать собственно проектирование "непринужденно, легко и изящно" !))

С уважением, Андрей
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)