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

oleg753

26 Posts

Posted - 06/11/2009 :  10:06:35
Как в Визио узнать длину линии, нарисованой инструментом "произв. линия"? Надо для вычисления длины кабельной трассы. Вообще, есть ли такая возможность?

bdfy

Belarus
267 Posts

Posted - 06/11/2009 :  14:00:21
да вариантов тыща. куда по вашему удобней результат вывести и по какому действию ?
Go to Top of Page

oleg753

26 Posts

Posted - 06/11/2009 :  15:17:48
Куда результат и по какому действию - не приципиально. Мне он нужен для справки.
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 06/11/2009 :  16:04:53
да откройте просто shape sheet вашей линии (правой кнопкой по фигуре), посмотрите свойство Width.
Go to Top of Page

oleg753

26 Posts

Posted - 06/11/2009 :  16:52:47
Мне надо узнать длину КРИВОЙ линии, а не параметр ширины прямоугольника, в который она вписана. Там есть такой параметр - длина линии? Может я не там смотрю, у меня русифицированный визио. Подскажите как по русски звучит это меню.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 06/11/2009 :  16:53:35
Как я понимаю, речь идет немного о другом случае...
"Произв. линия" - это наверное Freeform Tool. А для нее Width не годится. Width будет показывать расстояние между конечными точками, а надо отследить все изгибы. В этом случае придется разбираться со сплайнами. Это строка NURBSTo в секции геометрии с примерно такой формулой
=NURBS(7.2352, 3, 0, 0, 0.0547,0.452,0,1, 0.042,0.8541,0,1, 0.3959,1.0469,0,1, 0.6961,0.858,1.7061,1, 0.6376,0.4479,2.7269,1, 0.5794,-0.1704,3.2506,1, 1.0118,0.1377,4.9008,1)
А нельзя рисовать не через Freeform Tool, а ломаной линией? Тогда длину можно вычислить суммированием прямых в секции геометрии, а это должно быть гораздо проще.
Go to Top of Page

oleg753

26 Posts

Posted - 06/11/2009 :  18:23:08
quote:
Originally posted by Tumanov

Как я понимаю, речь идет немного о другом случае...
"Произв. линия" - это наверное Freeform Tool. А для нее Width не годится. Width будет показывать расстояние между конечными точками, а надо отследить все изгибы. В этом случае придется разбираться со сплайнами.


Да, именно так.
quote:
Originally posted by Tumanov

Это строка NURBSTo в секции геометрии с примерно такой формулой
=NURBS(7.2352, 3, 0, 0, 0.0547,0.452,0,1, 0.042,0.8541,0,1, 0.3959,1.0469,0,1, 0.6961,0.858,1.7061,1, 0.6376,0.4479,2.7269,1, 0.5794,-0.1704,3.2506,1, 1.0118,0.1377,4.9008,1)


Можно подробнее: достаточно только эту формулу прописать? Где будет результат?
quote:
Originally posted by Tumanov


А нельзя рисовать не через Freeform Tool, а ломаной линией? Тогда длину можно вычислить суммированием прямых в секции геометрии, а это должно быть гораздо проще.


Как работать с этим вариантом, я знаю, он описан в учебнике с примером. Но в моем случае он не подойдет. Я на существующей топокарте наношу трассу, обводя нанесенный трек. Потом сплайнами подгоняю нарисованную линию до совпадения с источником.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 06/11/2009 :  19:18:27
quote:
Можно подробнее: достаточно только эту формулу прописать? Где будет результат?

Нет, все гораздо хуже...
Visio всего лишь позволяет подсмотреть коэффициенты, которые он вычислил по Вашим действиям для описания результирующей линии. Количество аргументов в функции-формуле зависит от количества узлов. В хелпе функция описана довольно скупо:
NURBS(knotLast, degree, xType, yType, x1, y1, knot1, weight1, ...)
knotLast The last knot.
degree The spline's degree.
xType Specifies how to interpret the x input data. If xType is 0, all x input data are interpreted as a percentage of Width. If xType is 1, all x input data are interpreted as local coordinates.
yType Specifies how to interpret the y input data. If yType is 0, all y input data are interpreted as a percentage of Height. If yType is 1, all y input data are interpreted as local coordinates.
x1 An x-coordinate.
y1 A y-coordinate.
knot1 A knot on the B-spline.
weight1 A weight on the B-spline.
Ну а дальше нужно разбирать строку на коэффициенты и передавать их в некую программку, способную вычислить длину. Про готовую такую программку слышать как-то не доводилось.
---
P.S. И сдается мне, что если просто взять X и Y всех узлов, и высчитать длину ломаной, то погрешность составит несколько процентов. Для большинства задач может этого вполне достаточно будет. И алгоритм для такого приближения достаточно прост.
Go to Top of Page

oleg753

26 Posts

Posted - 06/12/2009 :  09:14:42
quote:
Originally posted by Tumanov

quote:
Можно подробнее: достаточно только эту формулу прописать? Где будет результат?

Нет, все гораздо хуже...


Спасибо за развернутый ответ. Это я и хотел выяснить.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 06/14/2009 :  05:50:42
А вот и наврал я в развернутом ответе :( А все потому, что по привычке пользуюсь Visio 2003... Для Visio 2007 программа существует, самому писать не надо!
Среди аддонов Visio есть "Shape Area and Perimeter". Это программка, которая показывает в отдельном окошке площадь и периметр селектированного шейпа.
В Visio 2003 для разомкнутых шейпов она не работала. То есть для прямой линии и для квадрата длину считала, а для ломаной показывала ноль. Соответственно и для линии, нарисованной Freeform Tool, тоже давала ноль.
А в Visio 2007 алгоритм подправили. Так что в нем Ваша задача решается. Можно вызвать аддон "Shape Area and Perimeter" (через Tools / Add-Ons / Visio Extras) и в поле "Total perimeter" видеть длину селектированной линии.
Прошу извинить за то, что ввел в заблуждение.
Go to Top of Page

oleg753

26 Posts

Posted - 06/14/2009 :  09:21:20
quote:
Originally posted by Tumanov

Прошу извинить за то, что ввел в заблуждение.


Ничего страшного, у меня все равно визио 2003. Но теперь думаю ставить 2007. Спасибо за поправку.
Go to Top of Page

ESV

Ukraine
21 Posts

Posted - 06/15/2009 :  10:13:13
В Visio 2003 достаточно соединить оба конца кривой линии 1-й - 2-мя отрезками прямой, так, что бы получилась замкнутая фигура. Ну а далее, думаю, все понятно.

________________________________________________________

Не надо ломать друг-другу глаза, используйте [cоde][/cоde]
Go to Top of Page

Surrogate

Russia
122 Posts

Posted - 11/16/2012 :  04:07:24  Visit Surrogate's Homepage
в визио 2010 есть возможность вычислять любые длины без макросов, в шейпшите! см. пост http://visio.getbb.ru/viewtopic.php?f=5&t=238

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)