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

ADN Club => Civil 3D API => Тема начата: Tina от 30-10-2018, 09:58:48

Название: Как в Civil 3D получить объем каждого из материалов сечения
Отправлено: Tina от 30-10-2018, 09:58:48
Добрый день. Подскажите, пожалуйста, как можно получить объем каждого из материалов сечения? Общий объем нашла так

Код - 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.      }
Можно ли прочитать данные из таблиц объемов материалов?
Название: Re: Как в Civil 3D получить объем каждого из материалов сечения
Отправлено: Александр Ривилис от 30-10-2018, 10:16:35
Tina,
Приветствую на форуме!
Большая просьба соблюдать правило форматирования кода на форуме (читайте у меня в подписи).
Название: Re: Как в Civil 3D получить объем каждого из материалов сечения
Отправлено: Tina от 30-10-2018, 14:22:40
Большое спасибо
Название: Re: Как в Civil 3D получить объем каждого из материалов сечения
Отправлено: Александр Ривилис от 30-10-2018, 14:24:27
Большое спасибо
Пока не за что. :) Надеюсь, что коллеги подскажут решение этой задачи.
Название: Re: Как в Civil 3D получить объем каждого из материалов сечения
Отправлено: Дмитрий Загорулькин от 30-10-2018, 18:28:39
Можно ли прочитать данные из таблиц объемов материалов?
Из самих таблиц особо ничего уже не получить с помощью API. Можно только попробовать получить те же самые данные из чертежа.
Можете показать пример чертежа с таблицей, данные которой нужно получить?
Название: Re: Как в Civil 3D получить объем каждого из материалов сечения
Отправлено: Tina от 31-10-2018, 09:48:53
Да, конечно. Вот ссылка на чертеж.
https://dropmefiles.com/viP0G
Нужно найти объем песка и щебня.
Название: Re: Как в Civil 3D получить объем каждого из материалов сечения
Отправлено: Дмитрий Загорулькин от 31-10-2018, 14:41:39
Прошерстил API Reference вдоль и поперек. Вот, например, настройки таблиц - отдельные свойства для материалов и отдельные  для общих объёмов:
(https://i.postimg.cc/G882Zs1Y/tab-Styles.png) (https://postimg.cc/G882Zs1Y)
Но у группы осей сечений метод только для общих объёмов, для отдельных материалов нет:
(https://i.postimg.cc/Whn2Y7JC/s-Lines-Group.png) (https://postimg.cc/Whn2Y7JC)
Посмотрел у объектов 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 инструментов для получения этих данных.
Как крайний вариант, если не найдёте способа получше, можно попробовать взрывать таблицу результатов и искать в полученных текстах нужные данные.
Название: Re: Как в Civil 3D получить объем каждого из материалов сечения
Отправлено: Tina от 31-10-2018, 15:36:45
Большое спасибо, попробую.
Название: Re: Как в Civil 3D получить объем каждого из материалов сечения
Отправлено: Дмитрий Загорулькин от 14-11-2018, 15:53:12
Задал этот вопрос в ADN DevHelp. Может быть у них найдётся ответ.
Название: Re: Как в Civil 3D получить объем каждого из материалов сечения
Отправлено: Дмитрий Загорулькин от 28-11-2018, 16:57:24
Пришёл ответ из ADN DevHelp, он заканчивается так: "... sorry for this bad news"
Название: Re: Как в Civil 3D получить объем каждого из материалов сечения
Отправлено: Tina от 28-11-2018, 17:06:01
 :) Ясно. Спасибо.
Название: Re: Как в Civil 3D получить объем каждого из материалов сечения
Отправлено: Дмитрий Загорулькин от 17-12-2019, 11:58:07
Tina, понимаю, что прошёл уже год. Но есть подозрение, что существует способ получить нужные данные с помощью API. Насколько сейчас эта задача актуальна для Вас?
Название: Re: Как в Civil 3D получить объем каждого из материалов сечения
Отправлено: durasovartyom от 11-01-2020, 20:15:08
Добрый день!
Актуально и сейчас.
Название: Re: Как в Civil 3D получить объем каждого из материалов сечения
Отправлено: Дмитрий Загорулькин от 14-01-2020, 17:47:00
Артём, я помню, что для вас это актуально  ;)
Просто ищу единомышленников-программистов, с которыми можно было бы объединиться для решения этой задачи.