Как в Civil 3D получить объем каждого из материалов сечения

Автор Тема: Как в Civil 3D получить объем каждого из материалов сечения  (Прочитано 2061 раз)

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

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

Оффлайн TinaАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
  • Skype: murenkov
Добрый день. Подскажите, пожалуйста, как можно получить объем каждого из материалов сечения? Общий объем нашла так

Код - C# [Выбрать]
  1.      foreach (ObjectId materialSectionId in idCollection)
  2.     {
  3.             QuantityTakeoffResult quantityTakeoffRes = sampleLineGroup.GetTotalVolumeResultDataForMaterialList(qTOMaterials.MaterialListGuid);
  4.             foreach (QTOSectionalResult sect in quantityTakeoffRes.GetResultsAlongSampleLines())
  5.             {
  6.                        streamWriter.Write("\n\tCumulativeCutVolume:" + sect.VolumeResult.CumulativeCutVolume.ToString() + ", CumulativeFillVolume:" + sect.VolumeResult.CumulativeFillVolume.ToString());                          
  7.             }
  8.      }
Можно ли прочитать данные из таблиц объемов материалов?
« Последнее редактирование: 30-10-2018, 10:14:25 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 11422
  • Карма: 1477
  • Рыцарь ObjectARX
  • Skype: rivilis
Tina,
Приветствую на форуме!
Большая просьба соблюдать правило форматирования кода на форуме (читайте у меня в подписи).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн TinaАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
  • Skype: murenkov
Большое спасибо

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

  • Administrator
  • *****
  • Сообщений: 11422
  • Карма: 1477
  • Рыцарь ObjectARX
  • Skype: rivilis
Большое спасибо
Пока не за что. :) Надеюсь, что коллеги подскажут решение этой задачи.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2268
  • Карма: 625
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Можно ли прочитать данные из таблиц объемов материалов?
Из самих таблиц особо ничего уже не получить с помощью API. Можно только попробовать получить те же самые данные из чертежа.
Можете показать пример чертежа с таблицей, данные которой нужно получить?

Оффлайн TinaАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
  • Skype: murenkov
Да, конечно. Вот ссылка на чертеж.
https://dropmefiles.com/viP0G
Нужно найти объем песка и щебня.

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

  • ADN
  • *
  • Сообщений: 2268
  • Карма: 625
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Прошерстил API Reference вдоль и поперек. Вот, например, настройки таблиц - отдельные свойства для материалов и отдельные  для общих объёмов:

Но у группы осей сечений метод только для общих объёмов, для отдельных материалов нет:

Посмотрел у объектов SectionView, SectionViewGroup, SampleLine - у них также нет ничего подобного.
Залез внутрь AeccDbMgd и посмотрел есть ли подходящие внутренние методы - не нашёл.
Попробовал через COM - там вообще мало что есть по сравнению с .NET.
Есть очень старый вопрос на форуме Autodesk от Терно Алексея, но без ответа: https://forums.autodesk.com/t5/civil-3d-customization/material-data-from-samplelinegroup/td-p/3201344
Нашёл ещё код на VB.NET на гитхабе с получением данных из коридора: https://github.com/Armegedon/ACAD14-Reports/blob/master/Net/Source/C3DReports/Corridor/CorridorSlopeStake_ExtractData.vb
Там есть такой кусок:
Код - vb.net [Выбрать]
  1.             ' material info
  2.             If bHaveMaterialInfo Then
  3.                 sData.HaveMaterialInfo = bHaveMaterialInfo
  4.                 sData.CutArea = qtoSectionalResult(index).AreaResult.CutArea
  5.                 sData.FillArea = qtoSectionalResult(index).AreaResult.FillArea
  6.                 sData.CumulativeNetVolume = qtoSectionalResult(index).VolumeResult.CumulativeCutVolume - qtoSectionalResult(index).VolumeResult.CumulativeFillVolume
  7.             End If
Но, насколько я понял, это не то что нужно.
И ещё на португальском отсюда (можете сами перевести гуглтранслейтом): https://tbn2.blogspot.com/2012/05/
Цитировать
Sample Line Group

Dim slg as SampleLineGroup...


Falta um método/função equivalente ao

slg.GetTotalVolumeResultDataForMaterialList

que liste os materiais individualmente



tentei com:

Dim guidMaterialList As System.Guid = slg.GetMappingGuid(materialListName)

Dim guidCorte As System.Guid = slg.GetMaterialGuid(guidMaterialList , "corte")

slg.GetTotalVolumeResultDataForMaterialList(guidCorte)



mas isso dá erro. pois só aceita :

slg.GetTotalVolumeResultDataForMaterialList(guidMaterialList)



o que achei estranho, pois ate onde eu testei, so pode ter um material list na sample line group :

For Each r As Autodesk.Civil.QTO.DatabaseServices.QTOSectionalResult In _
slg.GetTotalVolumeResultDataForMaterialList(guidCorte).GetResultsAlongSampleLines
'como obter a estaca???
Next


a classe QTOSectionalResult não implementa uma forma de devolver a estaca.


em nenhuma das classes do QTO dá pra obter os fatores (Cut, Fill, Refill)
Так что, к моему сожалению, похоже на то, что нет в API инструментов для получения этих данных.
Как крайний вариант, если не найдёте способа получше, можно попробовать взрывать таблицу результатов и искать в полученных текстах нужные данные.

Оффлайн TinaАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
  • Skype: murenkov
Большое спасибо, попробую.


Отмечено как Решение Александр Ривилис 28-11-2018, 18:11:18

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

  • ADN
  • *
  • Сообщений: 2268
  • Карма: 625
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Пришёл ответ из ADN DevHelp, он заканчивается так: "... sorry for this bad news"

Оффлайн TinaАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
  • Skype: murenkov
 :) Ясно. Спасибо.

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

  • ADN
  • *
  • Сообщений: 2268
  • Карма: 625
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Tina, понимаю, что прошёл уже год. Но есть подозрение, что существует способ получить нужные данные с помощью API. Насколько сейчас эта задача актуальна для Вас?

Оффлайн durasovartyom

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Добрый день!
Актуально и сейчас.

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

  • ADN
  • *
  • Сообщений: 2268
  • Карма: 625
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Артём, я помню, что для вас это актуально  ;)
Просто ищу единомышленников-программистов, с которыми можно было бы объединиться для решения этой задачи.