Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: aleksandr73 от 12-04-2015, 13:42:45

Название: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 12-04-2015, 13:42:45
Александр Ривилис,

Доброе время суток.
Не подскажите кому можно задать вопрос по программе , хотелось бы уточнить пару вопросов у автора.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 12-04-2015, 14:15:39
Вопрос такой, ясли я имею декартовые координаты кривых в текстовом фаиле, как мне сгенерировать их в программу как исходные кривые.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 13-04-2015, 23:48:07
Приветствую на форуме!
Я совсем не специалист по Revit, и еще меньше по Revit API. Тем не менее за пару минут поисков в интернете я обнаружил следующую информацию:
В Revit имеется несколько видов кривых, которые создаются следующими методами:
Код - C# [Выбрать]
  1.     Line.CreateBound()
  2.     Line.CreateUnbound()
  3.     Arc.Create()
  4.     Ellipse.Create()
  5.     NurbSpline.Create()
  6.     HermiteSpline.Create()
  7.     Curve.CreateTransformed()
Из всего этого множества видимо подходят только два метода:
1) Line.CreateBound() создаёт отрезок, который задается точкой начала и точкой конца:
http://revitapisearch.com/html/7885bdf9-3007-ea60-af6b-a96ac7672c18.htm
2) NurbSpline.Create() создаёт сплайн, заданный управляющими точками, весами, степенью и т.д.
http://revitapisearch.com/html/8f04fddb-6f75-33a5-de9d-fb41dd79da48.htm
В первом случае тебе придётся создать множество отрезков, во втором случае одну гладкую кривую.
Что именно тебе нужно?

Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 08:26:45
Да, мне нужно создать одну гладкую кривую, но она будет состоять из около 4000 точек. Это же не проблема, если координаты точек у меня в текстовом файле
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 08:29:48
Это же не проблема, если координаты точек у меня в текстовом файле
Это вопрос или утверждение? Вообще-то проблемой это быть не должно. Просто их нужно прочитать из файла и поместить их в List<XYZ> (список координат точек).
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Виктор Чекалин от 14-04-2015, 08:39:02
aleksandr73, Александр прав. В Revit API есть методы по созданию кривых. Считываете координаты из файла и по этим координатам создаете нужные вам кривые. Пока проблем и препятснвий никаких не вижу.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 14:24:13
Виктор, т.е. я должен сгенерировать нужные мне прямыe по координатам x,y, по одному из выше описанных методов, а далее что нужно сделать чтобы именно они использовались при работе программы http://adn-cis.org/generacziya-krivoj-mezhdu-dvumya-drugimi-krivyimi.html как их выбрать из процессов??
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 14:32:50
aleksandr73, Александр прав. В Revit API есть методы по созданию кривых. Считываете координаты из файла и по этим координатам создаете нужные вам кривые. Пока проблем и препятснвий никаких не вижу.
Возможна ли работа генерации кривой между кривыми если их больше двух?
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Виктор Чекалин от 14-04-2015, 14:39:09
aleksandr73, в статье показан пример, как можно построить кривую, находящуюся между двумя другими кривыми.
В примере 2 кривые, между которыми строится новыя кривая, выбираются слудующим образом. Если в проекте всего две кривые, то берутся они. Если больше, то пользователь сам выбирает между каким кривыми ему нужно построить новую.
Как вы будете это реализовывать - зависит от вас и от потребностей.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 14:42:39
Возможна ли работа генерации кривой между кривыми если их больше двух?
А как вы себе это представляете?
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Виктор Чекалин от 14-04-2015, 14:47:36
Возможна ли работа генерации кривой между кривыми если их больше двух?
Будет проще, если вы объясните суть вашей задачи и что вы в итоге получить хотите. Пока ваши вопросы довольно абстрактны и не совсем понятны.
Еще раз повторю, что в статье описывался пример, как можно создать кривую, между двумя другими. Это имеет смсысл. А вот что должно получиться, если сгенерировать кривую между несколькими кривыми - у меня не получается представить.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 15:15:15
Виктор Чекалин,  а как добавить сами прямые в проект. Суть моей работы заключается в построении траектории движения между опасностями которые задаются кривыми по координатам
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 15:22:37
а как добавить сами прямые в проект.
Так прямые или кривые? И как в текстовом файле ты отличишь одну кривую от другой? Точнее где одна кривая заканчивается и где другая начинается? Как выглядит файл с координатами?
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 15:23:16
Виктор Чекалин, должна получиться траектория между кривыми
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs30.postimg.org%2Fhq9ub4tl9%2Fimage.jpg&hash=79b1a3a355dd60ab64be4ebe87589da1) (http://postimg.org/image/hq9ub4tl9/)
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 15:24:51
Александр Ривилис,  текстовый документ с точками через которые будет проходить кривая. Вот пример.
№                    X                                   Y   
         1   3921180.44797   2978504.61747   
         2   3921188.96319   2978515.14254   
         3   3921197.33963   2978524.43899   
         4   3921205.57728   2978532.50683
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 15:26:37
Александр Ривилис,  текстовый документ с точками через которые будет проходить кривая. Вот пример.
Для каждой кривой отдельный файл?
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 15:30:01
Александр Ривилис,  да для каждой кривой отдельный фаил.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 15:30:29
P.S.: Думаю, что обозначенный в статье алгоритм не годится в этом случае. Здесь нужны совершенно иные алгоритмы. Например, обозначенный в статье алгоритм не будет работать с кривой в виде островка.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Виктор Чекалин от 14-04-2015, 15:32:41
Суть моей работы заключается в построении траектории движения между опасностями которые задаются кривыми по координатам
Встречный вопрос - а вы до этого с Revit работали? По поему инструмент для решения вашей задачи выбран не совсем верный.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 15:34:32
Виктор Чекалин,  нет не работал искал много статей по созданию кривой, эта мне показалась более подходящей
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 15:35:58
Александр Ривилис, а каким методом построение кривой можно выбирать координаты из текстового документа. нужно подправить алгоритм построения между двумя точками?
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 15:39:56
Виктор Чекалин, просто по факту суть работы нахождение средней линии между двумя другими
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Виктор Чекалин от 14-04-2015, 15:39:58
aleksandr73, Revit - приложение для проектирования зданий и построения BIM-моделей. Приложение имеет API для создания надстроек. Вам же, судя по задаче нужно создать отдельное приложение.
Таким образом, Revit ну никак не подходит для вашей задачи. Тем не менее, алгоритм, приведенный в статье может вам помочь.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 15:44:56
Виктор Чекалин,  я бы хотел использовать для начала этот алгоритм, но никак не могу создать кривые и добавить их в проект, каким кодом следует это сделать?
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 15:48:14
IMHO, инструмент выбран совершенно неправильно. Я бы использовал AutoCAD. Тем более кривые из файла очень хорошо ложатся на примитив Полилиния, которого в Revit нет.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 15:52:37
Александр Ривилис,  но как в autocad я сгенерирую кривую между двумя?
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Виктор Чекалин от 14-04-2015, 15:55:15
бы хотел использовать для начала этот алгоритм
Так и используйте алгоритм. Алгоритм - это последовательность действией, а не конкретная реализация. Речь идет о том, что для вашей задачи - Revit не лучшее решение.
но как в autocad я сгенерирую кривую между двумя
Точно таким же алгоритмом как и в статье, например.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 15:59:56
Александр Ривилис,  но как в autocad я сгенерирую кривую между двумя?
Вот готовый алгоритм с кодом от Киана Уомсли: http://through-the-interface.typepad.com/through_the_interface/2013/07/finding-an-autocad-spline-between-two-others-using-net.html
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 16:02:58
Виктор Чекалин, да я вот даже не знаю как сделать так чтобы кривая была между двумя кривыми. Просто нужно найти расстояние между соответствующими точками и поделить его пополам? 
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 16:05:02
Александр Ривилис, да интересно нужно будет посмотреть, спасибо. Если возникнут вопросы, я надеюсь на вашу помощь.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 16:08:01
Только в случае "островов" этот алгоритм работать не будет. В этой задаче самое главное определится с алгоритмом.
А иначе будешь гадать какая из кривых (красная или зелёная) больше подходит:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F4405%2F7842324.3%2F0_fc01a_adab0d28_orig.png&hash=9a004cf11716ab609b537bae1e4d72b6)
P.S.: Я никогда не сталкивался с такими алгоритмами, так что врядли подскажу.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 16:12:40
Александр Ривилис, интересно, а с какого алгоритма эта картинка?
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 16:13:58
Александр Ривилис, интересно, а с какого алгоритма эта картинка?
Ни с какого. Вручную нарисовал в AutoCAD. И на глазок провёл два сплайна между "островами".
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 16:17:19
Александр Ривилис, но если без островков, алгоритм надеюсь будет работать. просто в тот алгоритм нужно добавить какие-либо дополнительные модули, но какие?
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 16:18:03
Александр Ривилис, но для моей задачи правильной была бы красная линия
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 16:19:52
но если без островков, алгоритм надеюсь будет работать
Работать то он будет, но удовлетворят ли его результаты...

просто в тот алгоритм нужно добавить какие-либо дополнительные модули, но какие?
Какие модули? Тут алгоритм скорее всего должен быть совершенно иным.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 16:23:41
Александр Ривилис, вот и проблема что я не знаю как создать нужный алгоритм, из-за этого ищу что-то похожее.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 16:37:32
aleksandr73, я создавал алгоритм в Matlab
Код - C++ [Выбрать]
  1. for i=1:length(x1)
  2. mind(i)=1000000;
  3. k(i)=0;
  4.    for j=1:length(x3)
  5.      
  6.    d=sqrt((x1(i)-x3(j))^2+(y1(i)-y3(j))^2);
  7.    if d<mind(i)
  8.        mind(i)=d;
  9.        k=j;
  10.        l=i;
  11.        
  12.        x0(i)=(x1(i)+x3(j))/2;
  13.        y0(i)=(y1(i)+y3(j))/2;
  14.      
  15.      
  16.        end;
  17.     end;
  18. end;
  19. hold on;
  20. plot(x1,y1,'Marker','.','MarkerEdgeColor','g','MarkerSize',30, 'LineStyle', 'none')
  21. plot(x3,y3,'Marker','.','MarkerEdgeColor','r','MarkerSize',30, 'LineStyle', 'none')
  22.  
  23. plot(x0,y0,'*');
  24. %plot(y1(k),x1(k),'*')
  25. %plot(y3(l),x3(l),'*')
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs29.postimg.org%2F3ocg1fppf%2Fimage.jpg&hash=7815e0abeca67040ed511f89ca849df9) (http://postimg.org/image/3ocg1fppf/)
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 16:39:52
aleksandr73, я создавал алгоритм в Matlab
И?
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 16:41:31
Александр Ривилис,  но по картинке видно что он не очень правильно рабртает
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 16:42:48
Я бы сказал точнее, что совсем неправильно работает.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 16:49:14
Александр Ривилис, я пытался находить расстояние от одной точки на одной кривой до каждой точки на другой кривой, и выбирать минимальное, далее находить середину минимального и так по циклу.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Виктор Чекалин от 14-04-2015, 16:51:45
ИМХО, задача заключается именно в построении траектории движения. А посмотрение траектории движения - это нечто больше, чем посмтроение кривой между двумя кривыми. Это уже из разряда того, как навигатор прокладывает маршруты между точкой А и точкой Б. А это уже требует совершенно других знаний, чем у специалистов на этом форуме.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 16:52:20
В случае замкнутого контура (или просто хитрого контура) алгоритм даёт бред. Нужно рассматривать только те точки, линия между которыми не пересекает контур. Только тогда есть шансы получить приемлимый результат.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Виктор Чекалин от 14-04-2015, 16:55:44
пытался находить расстояние от одной точки на одной кривой до каждой точки на другой кривой, и выбирать минимальное, далее находить середину минимального и так по циклу
В статье был алгоритм таков:
1) две кривые разбиваются на одинаковое количество отрезков
2) берем начальные координаты первого отрезка у обоих линий
3) вычислияем координаты середины между полученными на шаге 2 координатами
4) Повторяем шаги 2-3 для каждоого отрезка, на который мы разбили обе кривые
5) строим линию по координатам, полученным на шаге 3

Основная сложность - как разбить кривую на равные отрезки и получить координаты начала и конца каждого отрезка. в Revit API были для этого методы. Как обстоят с этим дела в Mathalb или AutoCAD я не могу сказать.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 16:56:57
Виктор Чекалин,  да это создание траектории, но простой алгоритм это создание кривой между двумя другими
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 16:58:00
пытался находить расстояние от одной точки на одной кривой до каждой точки на другой кривой, и выбирать минимальное, далее находить середину минимального и так по циклу
В статье был алгоритм таков:
1) две кривые разбиваются на одинаковое количество отрезков
2) берем начальные координаты первого отрезка у обоих линий
3) вычислияем координаты середины между полученными на шаге 2 координатами
4) Повторяем шаги 2-3 для каждоого отрезка, на который мы разбили обе кривые
5) строим линию по координатам, полученным на шаге 3

Основная сложность - как разбить кривую на равные отрезки и получить координаты начала и конца каждого отрезка. в Revit API были для этого методы. Как обстоят с этим дела в Mathalb или AutoCAD я не могу сказать.
вот именно из-за этого я подумал выполнять задачу в Revit API
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Виктор Чекалин от 14-04-2015, 16:58:33
aleksandr73, как правильно заметил Александр, то в случае замкнутого конутра алгоритм работать не будет. Исходные кривые у вас что из себя представляют?
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 17:01:53
Виктор Чекалин,  да в случае замкнутого контура он не работает, возможно нужно сделать так чтобы он считал расстояния только для "видимых" частей контура
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Виктор Чекалин от 14-04-2015, 17:02:15
пытался находить расстояние от одной точки на одной кривой до каждой точки на другой кривой, и выбирать минимальное, далее находить середину минимального и так по циклу
Из данного сообщения не ясно, как выбирались точки на обоих кривых. Описаный алгоритм был применен в статье и даже работает.
Если у вас не получилось, значит это либо исходная кривая замкнутая, либо алгоритм был реализован не верно.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 17:03:07
Основная сложность - как разбить кривую на равные отрезки и получить координаты начала и конца каждого отрезка. в Revit API были для этого методы. Как обстоят с этим дела в Mathalb или AutoCAD я не могу сказать.
Редактировать сообщение
В AutoCAD это просто. Но сам алгоритм в данном случае не годится. Мне кажется, что алгоритм должен быть такой:
1) Находим минимальные и максимальные X и Y у всех переданных кривых, между которыми строим путь.
2) С заданным очень небольшим шагом строим вертикальные (или горизонтальные, или наклонные) прямые и находим пересечения между этими прямыми и переданными кривыми.
3) Находим крайние точки внешних по отношению к кривым областей, соединяем их между собой отрезком и находим середину отрезка.
4) Соединяем между собой последовательные середины отрезков.
Вполне возможно, что я не всё учел.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 17:05:51
Виктор Чекалин, кривые могут быть и простыми, не обязательно замкнутыми, но для примера я взял эти, и он должен был проложить кривую между островком и другой кривой. А вообще этот алгоритм должен реализоваться с помощью Диаграмм Вороного.
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs18.postimg.org%2Fr3teg240l%2Fimage.jpg&hash=f0c3f377f4dd45bbc3a5f336e4d4ce9f) (http://postimg.org/image/r3teg240l/)
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 17:08:06
Из данного сообщения не ясно, как выбирались точки на обоих кривых.


[/quote]
 точки выбирались последовательно по циклу, сначала расстояние от первой до каждой точки из друг. массива, далее находим минимальное
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 17:08:33
А вообще этот алгоритм должен реализоваться с помощью Диаграмм Вороного.
Ну вообще-то это совсем из другой оперы...
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 17:12:47
Александр Ривилис,  да но простой алгоритм это нахождение середины расстояния между точками. А на счет алгоритма в autocad, насколько сложно это реализуется?
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 17:20:25
А на счет алгоритма в autocad, насколько сложно это реализуется?
Речь о том алгоритме, который я расписал? Не очень сложно, хотя возможны различные нюансы. И я совершенно не уверен в его правильности. Как правильно сказал Виктор, здесь на форуме нет специалистов такого профиля. Здесь могут подсказать как работать с AutoCAD, Revit и т.д., но алгоритмы тебе придется или придумывать самому или искать в другом месте.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: aleksandr73 от 14-04-2015, 17:23:13
Александр Ривилис, варианты алгоритмов у меня есть, но чисто практических навыков реализации, к сожалению, не очень.
Название: Re: Создание кривой по координатам из текстового файла
Отправлено: Александр Ривилис от 14-04-2015, 19:41:45
Значит потребуется:
1) Определится со средой (AutoCAD, Revit)
2) Сделать нормальную постановку задачи (то что я вижу на данный момент - это лишь огрызки)
3) Разбить задачу на отдельные простейшие элементы (этапы).
4) Задать вопросы по этим простейшим элементам.
При этом сам алгоритм получения "трассы" на основе кучи кривых мы здесь не обсуждаем.