Редактирование объектов с чертежа по ObjectID

Автор Тема: Редактирование объектов с чертежа по ObjectID  (Прочитано 5103 раз)

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

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

  • ADN Club
  • Сообщений: 31
  • Карма: 2
Здравствуйте. Скажите, можно ли в autoCAD объекты чертежа редактировать по его ID. Постараюсь кратко ввести в курс дело:

1. У меня есть метод, который должен изменить координаты точки/окружности/линии(2 точки) и их высоту.
2. Со слоем проблем нет, я просто вызываю метод, блокирую чертеж, проверяю id_слоя и по нахождению нужного мне ID меняю его атрибуты
3. Не нашел хорошего примера, как можно по такому же принципу редактировать графические примитивы.

пытался работать с текущим набором через SelectAll(), брал entity. Но проблема в том, что entity, как я понимаю, это некий абстрактный объект, а не конкретный. И через нее я не могу задать новые значения координат для объекта. Пытался сделать так:

Код - C# [Выбрать]
  1. PromptSelectionResult getSel = doc.Editor.SelectAll();
  2.                        
  3.                         if (getSel.Status == PromptStatus.OK)
  4.                         {
  5.                             SelectionSet selSet = getSel.Value;
  6.  
  7.                             foreach (SelectedObject selObj in selSet)
  8.                             {
  9.                                 if (selObj.ObjectId != null)
  10.                                 {
  11.                                     DBPoint point = trans.GetObject(selObj.ObjectId, OpenMode.ForWrite) as DBPoint;
  12.                                     if (point != null)
  13.                                     {
  14.                                         point.Position.X = X1;
  15.                                     }
  16.                                 }
  17.                             }
  18.                         }

Но столкнулся с такой проблемой, что свойства DBPoint.X не имеет возможности установки (has no setter)

Подскажите пожалуйста, можно ли по такому принципу, как я хочу редактировать объекты, и если да, то как именно?
Возможно нужно делать данную процедуру иным способом?

Буду благодарен за помощь

Отмечено как Решение Даниил 13-02-2015, 15:32:18

Оффлайн bargool

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Position - это Point3d
Соответственно,
Код - C# [Выбрать]
  1. point.Position = New Point3d(X1, Y1, Z1);
Алексей

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Position - это Point3d
Соответственно,
Код - C#: [Выделить]

    point.Position = New Point3d(X1, Y1, Z1);
Думаю что в данном случае, т.к. ему нужно поменять только координату X:
Код - C# [Выбрать]
  1. point.Position = new Point3d(X1, point.Position.Y, point.Position.Z);
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bargool

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Согласен.
Просто хотел обозначить, что Point3d - это неизменяемый тип. При каждом изменении необходимо создавать новый объект
Алексей

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

  • ADN Club
  • Сообщений: 31
  • Карма: 2
Приложение будет предусматривать возможность поменять все 3 координаты для точки, координаты двух точек линии, радиус и координаты центра для окружности
Действительно, все работает. Нужно создавать новый объект.

Благодарю Вас за помощь.