11/04/2014
Перемещение выбранного примитива в центр вида
Ниже код, который позиционирует выбранный примитив в центр вида. Большая часть кода подобна тому, который используется при зумировании примитива, за исключением того, что не меняется ни высота, ни ширина вида. Меняется лишь центр вида в DCS.
Код - C#: [Выделить]
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- PromptEntityOptions peo
- = new PromptEntityOptions("\nSelect an entity:");
- PromptEntityResult per = ed.GetEntity(peo);
- if (per.Status != PromptStatus.OK)
- return;
- ed.UpdateTiledViewportsInDatabase();
- using (Transaction tr = db.TransactionManager.StartTransaction())
- {
- Entity ent = tr.GetObject(
- per.ObjectId, OpenMode.ForRead) as Entity;
- Extents3d entityExtent = ent.GeometricExtents;
- ViewportTable vpTbl = tr.GetObject(
- db.ViewportTableId,
- OpenMode.ForRead
- ) as ViewportTable;
- ViewportTableRecord viewportTableRec
- = tr.GetObject(vpTbl["*Active"], OpenMode.ForWrite)
- as ViewportTableRecord;
- Matrix3d matWCS2DCS
- = Matrix3d.PlaneToWorld(viewportTableRec.ViewDirection);
- matWCS2DCS = Matrix3d.Displacement(
- viewportTableRec.Target - Point3d.Origin) * matWCS2DCS;
- matWCS2DCS = Matrix3d.Rotation
- (
- -viewportTableRec.ViewTwist,
- viewportTableRec.ViewDirection,
- viewportTableRec.Target
- ) * matWCS2DCS;
- matWCS2DCS = matWCS2DCS.Inverse();
- entityExtent.TransformBy(matWCS2DCS);
- Point2d center = new Point2d(
- (entityExtent.MaxPoint.X + entityExtent.MinPoint.X) * 0.5,
- (entityExtent.MaxPoint.Y + entityExtent.MinPoint.Y) * 0.5);
- viewportTableRec.CenterPoint = center;
- tr.Commit();
- }
- 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