Смещение всех объектов в пространстве модели

Автор Тема: Смещение всех объектов в пространстве модели  (Прочитано 7372 раз)

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

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Здравствуйте!
Есть чертеж - в пространстве модели тексты, полилинии, вставки блоков.
Есть ли какой-нибудь метод позволяющий сместить все объекты в пространстве модели на определенное расстояние одновременно?

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Нет. надо просто перебрать все Entity и передвинут каждый

Отмечено как Решение Atomohod 04-06-2021, 09:01:36

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Код - C# [Выбрать]
  1.       var direct = Gem.Matrix3d.Displacement(new Gem.Vector3d(0, 100, 0));
  2.  
  3.       var msId = Db.SymbolUtilityServices.GetBlockModelSpaceId(Db.HostApplicationServices.WorkingDatabase);
  4.       using (var ms = msId.Open(Db.OpenMode.ForRead) as Db.BlockTableRecord)
  5.       {
  6.         foreach(Db.ObjectId id in ms)
  7.         {
  8.           if (id.ObjectClass.IsDerivedFrom(Rtm.RXObject.GetClass(typeof(Db.Entity))))
  9.           {
  10.             using(var ent = id.Open(Db.OpenMode.ForWrite) as Db.Entity)
  11.             {
  12.               ent.TransformBy(direct);
  13.             }
  14.           }
  15.         }
  16.       }
Как вариант перегнать эти объекты в блок и подвинуть блок или развлекаться с Wblock копируя во внешнюю базу и вставляя обратно со смещением...

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Спасибо.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Между прочим: Перебирая все подряд объекты стоит учесть, что вам могут попасться:
1. удаленные объекты (id.IsErased) - надо игнорить
2. невидимые объекты entity.Visible - сами решайте что с ними делать
3. объекты с заблокированных слоев - если хотите двигать и их тоже, то используйте tr.GetObject с forceOpenOnLockedLayer
И подумайте об аннотациях в пространстве бумаги поверх вьюпортов - то же надо бы двигать.