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

ADN Club => Civil 3D API => Тема начата: Вильдар от 22-01-2020, 17:51:43

Название: Обрезание поверхностей траншеи по котловану (TinSurface)
Отправлено: Вильдар от 22-01-2020, 17:51:43
Не понимаю, как повторить операцию "образки" поверхностей (TinSurface).
Вот тут показал, как это руками делается: команда _AeccAddSurfaceBoundaries


Пробую так, вылетает исключение - Invalid boundary entity.
Код - C# [Выбрать]
  1. TinSurface trench = doc.Editor.SelectEntity<TinSurface>("Выбор поверхности траншеи").GetObject<TinSurface>();
  2. TinSurface pit = doc.Editor.SelectEntity<TinSurface>("Выбор поверхности котлована").GetObject<TinSurface>();
  3. var ids = new ObjectIdCollection(new[] { pit.Id });
  4. trench.BoundariesDefinition.AddBoundaries(ids, 1, SurfaceBoundaryType.Hide, true);

https://drive.google.com/open?id=1LnnAG4Z3awN_OgQSytu53IpG9MHAzarB
Название: Re: Обрезание поверхностей траншеи по котловану (TinSurface)
Отправлено: Александр Ривилис от 22-01-2020, 17:54:52
А что TinSurface может быть границей?
Название: Re: Обрезание поверхностей траншеи по котловану (TinSurface)
Отправлено: Вильдар от 22-01-2020, 17:59:08
А что TinSurface может быть границей?
Наверно, нет. Что, делает опция "Поверхность"?
Название: Re: Обрезание поверхностей траншеи по котловану (TinSurface)
Отправлено: Дмитрий Загорулькин от 22-01-2020, 18:01:50
Что, делает опция "Поверхность"?
Я так понимаю, что из указанной поверхности извлекается граница и в исходной поверхности исключается область по этой границе.
Название: Re: Обрезание поверхностей траншеи по котловану (TinSurface)
Отправлено: Александр Ривилис от 22-01-2020, 18:04:15
А что TinSurface может быть границей?
Наверно, нет. Что, делает опция "Поверхность"?
Вот один из вариантов: https://forums.autodesk.com/t5/civil-3d-customization/api-add-surface-as-a-hide-boundaries/m-p/8371776#M15618
Не уверен, что он универсальный, но в качестве заготовки можно использовать.
Название: Re: Обрезание поверхностей траншеи по котловану (TinSurface)
Отправлено: Вильдар от 22-01-2020, 18:37:53
Да, прикольно. Так сработало  :)

Код - C# [Выбрать]
  1.    var trench = doc.Editor.SelectEntity<TinSurface>("Выбор поверхности траншеи").GetObject<TinSurface>();
  2.    var pit = doc.Editor.SelectEntity<TinSurface>("Выбор поверхности котлована").GetObject<TinSurface>();
  3.  
  4.    var borders = pit.ExtractBorder(SurfaceExtractionSettingsType.Plan);
  5.    trench.BoundariesDefinition.AddBoundaries(borders, 0.1, SurfaceBoundaryType.Hide, true);
Название: Re: Обрезание поверхностей траншеи по котловану (TinSurface)
Отправлено: Дмитрий Загорулькин от 22-01-2020, 18:58:46
Динамика работает? В том смысле, что если вычитаемую поверхность отредактировать, то контур подрезки тоже изменится?
Название: Re: Обрезание поверхностей траншеи по котловану (TinSurface)
Отправлено: Вильдар от 22-01-2020, 19:02:45
Динамика работает? В том смысле, что если вычитаемую поверхность отредактировать, то контур подрезки тоже изменится?
Ого. Пока, такого, даже в мыслях не было  ;D
Нет. Добавляются просто точки вырезаемой границы. Ой, нет, добавляется объект границы. Щас проверю связь.
Проверим завтра. Я сам не умею  :(
Название: Re: Обрезание поверхностей траншеи по котловану (TinSurface)
Отправлено: Дмитрий Загорулькин от 22-01-2020, 19:05:57
Когда пробовал через _AeccAddSurfaceBoundaries делать, вроде динамика была между поверхностями.
Название: Re: Обрезание поверхностей траншеи по котловану (TinSurface)
Отправлено: Вильдар от 23-01-2020, 17:09:10
А еще в добавку можно вопросик?
Как находить пересечение поверхностей?
IntersectWith не дает точек пересечения.
Есть како-то хитрый способ?
Название: Re: Обрезание поверхностей траншеи по котловану (TinSurface)
Отправлено: Александр Ривилис от 23-01-2020, 17:33:47
IntersectWith не дает точек пересечения.
Пересечение поверхностей - это линии, а не точки. Поэтому IntersectWith и не в состоянии находить их пересечения.
В AutoCAD .NET API нет методов для получения пересечения типа TinSurface, но есть для Autodesk.AutoCAD.Geometry.Surface класс Autodesk.AutoCAD.Geometry.SurfaceSurfaceIntersector
Впрочем как преобразовать Autodesk.Civil.DatabaseServices.TinSurface к Autodesk.AutoCAD.Geometry.Surface я не подскажу.
Название: Re: Обрезание поверхностей траншеи по котловану (TinSurface)
Отправлено: Дмитрий Загорулькин от 23-01-2020, 18:04:11
А еще в добавку можно вопросик?
Как находить пересечение поверхностей?
IntersectWith не дает точек пересечения.
Есть како-то хитрый способ?
Есть, но очень хитрый: https://forums.autodesk.com/t5/civil-3d-customization/intersection-lines-between-two-surfaces/td-p/4522349