функции для работы с LandXML

Автор Тема: функции для работы с LandXML  (Прочитано 10426 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
функции для работы с LandXML
« : 23-01-2017, 20:35:46 »
Подскажите есть ли готовые функции
AutoCAD API для преобразования:
1) файлов LandXML ->  в поверхности
2) поверхности -> в LandXML

Или уже есть написанные разработчиками готовые решения
 для разбора landXML-документа?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: функции для работы с LandXML
« Ответ #1 : 23-01-2017, 20:38:53 »
Насколько мне известно LandXML был введён в 2000 году в AutoCAD и сразу же похоронен. API для него не делали. В чем смысл сейчас его вспоминать?
Или ты про Civil 3D / Map 3D? Тогда другое дело.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: функции для работы с LandXML
« Ответ #2 : 23-01-2017, 21:08:28 »
Да именно про Civil
Мне дорожники прислали пример LandXML
Вот фрагмент геометрических данных

Код - XML [Выбрать]
  1. <Surfaces> поверхности
  2. <Surface ... > одна поверхность
  3. <Pnts> блок набора точек поверхности
  4.         <P id="5">6911.620326337503 -2373.518034247022 166.812731282444</P>
  5.         <P id="6">6911.901984429399 -2373.416959132921 167.012227825708</P>
  6.         <P id="7">6912.598023753661 -2373.167180212511 166.997437825708</P>
  7.         <P id="8">6911.28687360906 -2372.575256282318 166.807678422546</P>
  8.         <P id="9">6911.564217126613 -2372.475729485509 167.004118981651</P>
  9.         <P id="10">6912.260256450874 -2372.225950565098 166.989328981651</P>
  10.         <P id="11">6911.922489148088 -2371.284720917685 166.981220137593</P>
  11.         <P id="12">6911.226449823826 -2371.534499838096 166.996010137593</P>
  12.         <P id="13">6910.950583741149 -2371.633496446344 166.800616035732</P>
  13.    ....
  14. </Pnts>
  15. <Faces> блок треугольников поверхности
  16.         <F n="3 0 0">8 6 5</F>        8,6,5 id точек
  17.         <F n="4 3 8">10 6 9</F>
  18.         <F n="2 1 6">9 6 8</F>
  19.         <F n="5 0 2">10 7 6</F>
  20.         <F n="0 4 11">291 7 10</F>
  21.         <F n="10 3 7">13 9 8</F>
  22.         <F i="1" n="18 6 0">16 13 8</F>
  23. ...
  24. </Faces>
  25. </Surface>
  26. </Surfaces>

С точками понятно id и координаты
блок элементов поверхностей

А вот с поверхностями пока не понял:
1) Что значит i ?
2) Что значит n ?
« Последнее редактирование: 24-01-2017, 12:22:16 от Алексей (IdeaSoft) »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: функции для работы с LandXML
« Ответ #3 : 23-01-2017, 21:11:10 »
Тему перенёс. Что касается:
Цитировать
1) файлов LandXML ->  в поверхности
2) поверхности -> в LandXML
Похоже в API есть только импорт: http://adndevblog.typepad.com/infrastructure/2012/12/creating-a-tin-surface-from-landxml-file.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: функции для работы с LandXML
« Ответ #4 : 23-01-2017, 21:34:45 »
Попутный вопрос по пользованию форумом.
Я частенько редактирую свои ответы.
Уведомляет ли система администратора в том, что моя запись была изменена?


Отмечено как Решение Алексей (IdeaSoft) 23-01-2017, 22:08:44

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: функции для работы с LandXML
« Ответ #5 : 23-01-2017, 21:50:37 »
А вот с поверхностями пока не понял:
1) Что значит i ?
2) Что значит n ?
Смотрим первоисточник: http://www.landxml.org/schema/landxml-1.2/documentation/LandXML-1.2Doc_F.html#Link07F5D340
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: функции для работы с LandXML
« Ответ #6 : 23-01-2017, 21:51:40 »
посмотрел весь документ параметра i либо нет
либо он равен i= "1" для тега <F>

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: функции для работы с LandXML
« Ответ #7 : 23-01-2017, 22:01:25 »
Смотрим первоисточник: http://www.landxml.org/schema/landxml-1.2/documentation/LandXML-1.2Doc_F.html#Link07F5D340
Понятно:
если i=1 - не видимый
n- смежное ребро 0 - не имеет соседнего ребра
 
т.е. для примера
<F n="3 0 0">8 6 5</F>
этот треугольник имеет смежную грань, которая определена точками id ( 3; 8 )
с точками id 6 и 5 общего ребра нет.
 

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: функции для работы с LandXML
« Ответ #8 : 23-01-2017, 22:05:01 »
Уведомляет ли система администратора в том, что моя запись была изменена?
Вроде нет. Но я перепроверю.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: функции для работы с LandXML
« Ответ #9 : 23-01-2017, 22:08:25 »
Уведомляет ли система администратора в том, что моя запись была изменена
Частенько с первого раза не получается сформулировать мысль или что то хочется дополнить или подправить ошибки.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: функции для работы с LandXML
« Ответ #10 : 24-01-2017, 12:08:34 »
Вот рыба алгоритма чтения LandXML

Но это простой вариант. Будет работать если только один тег <Surface> в блоке <Surfaces>

А есть файлы с несколькими <Surface>
Тут нужно еще доработать


Код - C# [Выбрать]
  1.         public static void Read_LandXML(string FileName)  {
  2.  
  3.             XmlReader XR = new XmlTextReader(FileName);
  4.             while (XR.Read())  {
  5.                 if (XR.NodeType == XmlNodeType.Element)     {
  6.                     ///////// ЧИТАЕМ ТОЧКИ ///////////////////////////////
  7.                     if (XR.Name == "P")  {
  8.                         XR.MoveToAttribute("id"); // перемещаемся в атрибуты элемента
  9.                         if (XR.Value != "")   {
  10.                             string pntID = XR.Value;
  11.                             XR.Read();
  12.                             XR.MoveToContent(); // перемещаемся в содержимое элемента
  13.                             if (XR.Value != "") {
  14.                                 string[] data = XR.Value.Trim().Replace(".", ",").Split(' ');
  15.                                 if (data.Length == 3) {
  16.                                     double vx = 0, vy = 0, vz = 0;
  17.                                     bool IsDbl = double.TryParse(data[0], out vx);
  18.                                     IsDbl = IsDbl && double.TryParse(data[1], out vy);
  19.                                     IsDbl = IsDbl && double.TryParse(data[2], out vz);
  20.                                     if (IsDbl)  {
  21.                                           // Если все три точки числа то можем
  22.                                           // формировать точку и добавлять ее в коллекцию точек
  23.                                     }
  24.                                 }
  25.                             }
  26.                         }
  27.                     }
  28.                     ///////// ЧИТАЕМ ТРЕУГОЛЬНИКИ ///////////////////////////////
  29.                     if (XR.Name == "F")  {
  30.                         XR.Read(); // читаем для того чтобы пропустить область атрибутов элемента
  31.                         XR.MoveToContent(); // перемещаемся в содержимое элемента                
  32.                          if (XR.Value != "")  {
  33.                              string[] data = XR.Value.Trim().Split(' '); // перечень ID точек
  34.                              if (data.Length == 3) {
  35.                                    // Тут добавляем объект треугольника
  36.                                    // в коллекцию треугольников
  37.                              }
  38.                         }
  39.                     }
  40.                 } // enf if
  41.             } // end while
  42. }

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: функции для работы с LandXML
« Ответ #11 : 24-01-2017, 14:57:22 »
А почему XmlTextReader? XML файл очень большой?

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: функции для работы с LandXML
« Ответ #12 : 24-01-2017, 15:14:05 »
XML файл очень большой?
У меня пока есть пример 4М
Хотя думаю, что и по 20-30М могут быть
Смотря какой проект?
Самый большой проект земли который мне доводилось видеть 300 000 треугольников.
Думаю это не предел.

« Последнее редактирование: 24-01-2017, 16:33:03 от Алексей (IdeaSoft) »

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: функции для работы с LandXML
« Ответ #13 : 24-01-2017, 15:14:50 »
А почему XmlTextReader?
Ты хочешь сказать, что есть бинарная версия landXML?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: функции для работы с LandXML
« Ответ #14 : 24-01-2017, 15:21:06 »
Нет, я хочу сказать, что есть еще 2 способа работы с XML файлами. Этот один из самых неудобных, но самый быстрый. Есть еще W3C DOM XML и LINQ to XML. LINQ to XML очень удобно использовать для чтения/изменения/записи XML. Но не знаю, как у него будет с производительностью на больших файлах.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: функции для работы с LandXML
« Ответ #15 : 24-01-2017, 15:54:11 »
Я вначале хотел было сделать так

Код - C# [Выбрать]
  1. XmlDocument doc = new XmlDocument();
  2. doc.Load(FileName);
  3. XmlNodeList sf = doc.GetElementsByTagName("Surface");

Но до конца не смог разобраться как прочитать атрибуты тега
Перебирая в цикле коллекцию XmlNodeList
Я смог только прочитать контент тега
Код - XML [Выбрать]
  1. <Pnts атрибуты вот тут не получилось>только вот эту часть смог прочитать</Pnts>

XmlNode.Value вернула контент
XmlNode.Attributes вернула null

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: функции для работы с LandXML
« Ответ #16 : 24-01-2017, 16:54:07 »
Ну что могу сказать - учите матчасть  ;)
Вот статья хорошая в тему: https://habrahabr.ru/post/138848/

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: функции для работы с LandXML
« Ответ #17 : 24-01-2017, 16:55:02 »
файл очень большой?
Проектировщики сегодня скинут мне файл XML - 55Мбайт
Вот и протестирую скорость загрузки

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: функции для работы с LandXML
« Ответ #18 : 24-01-2017, 17:25:16 »
Вот статья хорошая в тему
Спасибо за ссылочку