Как сделать копию поверхности в текущем чертеже

Автор Тема: Как сделать копию поверхности в текущем чертеже  (Прочитано 14052 раз)

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Существуют ли какие то стандартные методы копирования существующей поверхности в текущий чертеж? Или  может быть можно как то поместить поверхность в быстрые ссылки а потом оттуда достать?

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Существуют ли какие то стандартные методы копирования существующей поверхности в текущий чертеж? Или  может быть можно как то поместить поверхность в быстрые ссылки а потом оттуда достать?
Приветствую на форуме!
В Civil 3D есть разные типы поверхностей. О каком типе поверхности идёт речь? Желательно с указанием класса примитива.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Не знаю что такое класс примитива. Суть задачи - есть чертеж с определенным набором поверхностей, любую выбранную поверхность необходимо скопировать n раз и потом производить какие то операции над клонами(поднять/опустить).

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
tinSurface
Могу предположить, что можно создать TinSurface методом Create, а затем использовать метод CopyFrom из старой в новую. Но не уверен.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
после создания поверхности (ObjectId surf = TinSurface.Create(db, "Поверхность-n");) у surf нет метода CopyFrom.

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
похоже что придется изобретать костыль - извлекать из поверхности точки и каждый раз создавать поверхность добавляя в нее эту группу точек. Но если поверхность сложная - то она построится как попало.

Отмечено как Решение Павел55 21-03-2019, 14:01:44

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
у surf нет метода CopyFrom.
surf - это ObjectId. А тебе нужен TinSurface. Поэтому должно быть как-то так:
Код - C# [Выбрать]
  1. ObjectId surfOldId = ... // Это ObjectId оригинальной поверхности
  2. using (Transaction tr = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
  3. {
  4.    TinSurface surfaceOld = surfOldId.GetObject(OpenMode.ForRead) as TinSurface;
  5.    ObjectId surfNewId = TinSurface.Create(db, "Поверхность-n");
  6.    TinSurface surfaceNew = surfNewId.GetObject(OpenMode.ForWrite) as TinSurface;
  7.    surfaceNew.CopyFrom(surfaceOld);
  8.    tr.Commit();
  9. }
Код не проверял.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Еще есть метод TinSurface.CreateByCropping Method (Database, String, ObjectId, Point2dCollection), который тоже можно попробовать использовать для создания копии поверхности.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
этот метод позволяет вставить поверхность только в другой чертеж, но не в тот, в котором исходная поверхность

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Только в ручном режиме -  Средствами Civil 3D. А  еще так написано  в справочнике по Civil 3D api - http://docs.autodesk.com/CIV3D/2017/ENU/API_Reference_Guide/html/7154a7a8-6129-30ed-5708-ea4ada2b3e90.htm

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Сработал! Ура) Только почему то имя копии поверхности = имя исходной поверхности. Спасибо за советы!  Приду к вам еще, так быстро мне не отвечали ни на одном форуме!

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Павел55,
Теперь тебе осталось убедиться, что изменения во второй поверхности не повлияют на первую поверхность. Что касается имени, но оно видимо сидит в самом примитиве TinSurface и CopyFrom копирует и его. Нужно поискать способ переименования. Сходу я такого в API не нашёл.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение