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

11/04/2014

Перемещение выбранного примитива в центр вида

Ниже код, который позиционирует выбранный примитив в центр вида. Большая часть кода подобна тому, который используется при зумировании примитива, за исключением того, что не меняется ни высота, ни ширина вида. Меняется лишь центр вида в DCS.

Код - C#: [Выделить]
  1. Document doc = Application.DocumentManager.MdiActiveDocument;
  2. Database db = doc.Database;
  3. Editor ed = doc.Editor;
  4.  
  5. PromptEntityOptions peo
  6.             = new PromptEntityOptions("\nSelect an entity:");
  7. PromptEntityResult per = ed.GetEntity(peo);
  8. if (per.Status != PromptStatus.OK)
  9.     return;
  10.  
  11. ed.UpdateTiledViewportsInDatabase();
  12.  
  13. using (Transaction tr = db.TransactionManager.StartTransaction())
  14. {
  15.     Entity ent = tr.GetObject(
  16.                     per.ObjectId, OpenMode.ForRead) as Entity;
  17.  
  18.     Extents3d entityExtent = ent.GeometricExtents;
  19.  
  20.     ViewportTable vpTbl = tr.GetObject(
  21.                                         db.ViewportTableId,
  22.                                         OpenMode.ForRead
  23.                                       ) as ViewportTable;
  24.  
  25.     ViewportTableRecord viewportTableRec
  26.            = tr.GetObject(vpTbl["*Active"], OpenMode.ForWrite)
  27.                                        as ViewportTableRecord;
  28.  
  29.     Matrix3d matWCS2DCS
  30.        = Matrix3d.PlaneToWorld(viewportTableRec.ViewDirection);
  31.  
  32.     matWCS2DCS = Matrix3d.Displacement(
  33.         viewportTableRec.Target - Point3d.Origin) * matWCS2DCS;
  34.  
  35.     matWCS2DCS = Matrix3d.Rotation
  36.                                 (
  37.                                  -viewportTableRec.ViewTwist,
  38.                                  viewportTableRec.ViewDirection,
  39.                                  viewportTableRec.Target
  40.                                  ) * matWCS2DCS;
  41.  
  42.     matWCS2DCS = matWCS2DCS.Inverse();
  43.  
  44.     entityExtent.TransformBy(matWCS2DCS);
  45.  
  46.     Point2d center = new Point2d(
  47.     (entityExtent.MaxPoint.X + entityExtent.MinPoint.X) * 0.5,
  48.     (entityExtent.MaxPoint.Y + entityExtent.MinPoint.Y) * 0.5);
  49.  
  50.     viewportTableRec.CenterPoint = center;
  51.  
  52.     tr.Commit();
  53. }
  54.  
  55. ed.UpdateTiledViewportsFromDatabase();

 

Источник: http://adndevblog.typepad.com/autocad/2014/04/positioning-a-selected-entity-at-view-center.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=666

Опубликовано 11.04.2014
Отредактировано 11.04.2014 в 03:09:11