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

ADN Club => AutoCAD .NET API => Тема начата: Atomohod от 03-06-2021, 16:10:06

Название: Смещение всех объектов в пространстве модели
Отправлено: Atomohod от 03-06-2021, 16:10:06
Здравствуйте!
Есть чертеж - в пространстве модели тексты, полилинии, вставки блоков.
Есть ли какой-нибудь метод позволяющий сместить все объекты в пространстве модели на определенное расстояние одновременно?
Название: Re: Смещение всех объектов в пространстве модели
Отправлено: avc от 03-06-2021, 16:14:36
Нет. надо просто перебрать все Entity и передвинут каждый
Название: Re: Смещение всех объектов в пространстве модели
Отправлено: Владимир Шу от 03-06-2021, 16:22:35
Код - 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 копируя во внешнюю базу и вставляя обратно со смещением...
Название: Re: Смещение всех объектов в пространстве модели
Отправлено: Atomohod от 04-06-2021, 09:02:04
Спасибо.
Название: Re: Смещение всех объектов в пространстве модели
Отправлено: avc от 04-06-2021, 16:33:18
Между прочим: Перебирая все подряд объекты стоит учесть, что вам могут попасться:
1. удаленные объекты (id.IsErased) - надо игнорить
2. невидимые объекты entity.Visible - сами решайте что с ними делать
3. объекты с заблокированных слоев - если хотите двигать и их тоже, то используйте tr.GetObject с forceOpenOnLockedLayer
И подумайте об аннотациях в пространстве бумаги поверх вьюпортов - то же надо бы двигать.