Обрезание поверхностей траншеи по котловану (TinSurface)

Автор Тема: Обрезание поверхностей траншеи по котловану (TinSurface)  (Прочитано 7542 раз)

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

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Не понимаю, как повторить операцию "образки" поверхностей (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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А что TinSurface может быть границей?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
А что TinSurface может быть границей?
Наверно, нет. Что, делает опция "Поверхность"?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Что, делает опция "Поверхность"?
Я так понимаю, что из указанной поверхности извлекается граница и в исходной поверхности исключается область по этой границе.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А что TinSurface может быть границей?
Наверно, нет. Что, делает опция "Поверхность"?
Вот один из вариантов: https://forums.autodesk.com/t5/civil-3d-customization/api-add-surface-as-a-hide-boundaries/m-p/8371776#M15618
Не уверен, что он универсальный, но в качестве заготовки можно использовать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Да, прикольно. Так сработало  :)

Код - 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);

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Динамика работает? В том смысле, что если вычитаемую поверхность отредактировать, то контур подрезки тоже изменится?

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Динамика работает? В том смысле, что если вычитаемую поверхность отредактировать, то контур подрезки тоже изменится?
Ого. Пока, такого, даже в мыслях не было  ;D
Нет. Добавляются просто точки вырезаемой границы. Ой, нет, добавляется объект границы. Щас проверю связь.
Проверим завтра. Я сам не умею  :(

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Когда пробовал через _AeccAddSurfaceBoundaries делать, вроде динамика была между поверхностями.

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
А еще в добавку можно вопросик?
Как находить пересечение поверхностей?
IntersectWith не дает точек пересечения.
Есть како-то хитрый способ?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
IntersectWith не дает точек пересечения.
Пересечение поверхностей - это линии, а не точки. Поэтому IntersectWith и не в состоянии находить их пересечения.
В AutoCAD .NET API нет методов для получения пересечения типа TinSurface, но есть для Autodesk.AutoCAD.Geometry.Surface класс Autodesk.AutoCAD.Geometry.SurfaceSurfaceIntersector
Впрочем как преобразовать Autodesk.Civil.DatabaseServices.TinSurface к Autodesk.AutoCAD.Geometry.Surface я не подскажу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
А еще в добавку можно вопросик?
Как находить пересечение поверхностей?
IntersectWith не дает точек пересечения.
Есть како-то хитрый способ?
Есть, но очень хитрый: https://forums.autodesk.com/t5/civil-3d-customization/intersection-lines-between-two-surfaces/td-p/4522349