autocad缩放对象到中心屏幕

时间:2015-08-20 20:11:23

标签: zoom

我无法理解为什么下面的代码不会缩放到所选对象的中心。通常情况下,物体靠近中心但位于屏幕顶部。

我可以使用doc.SendStringToExecute("ZOOM " + "OBJECT " + objIdString + " ", true, false, false);,我可以得到我想要的,但不是我想要它,因为调用来自无模式对话框上的按钮,然后是最后发生的事件。

我的目标是逐步完成并缩放中心对象选择器暂停,使用是/否来继续每个对象之间的对话。

任何帮助将不胜感激。

public static void ZoomObjects(ObjectIdCollection idCol)
{
    Document doc = Application.DocumentManager.MdiActiveDocument;
    Database db = doc.Database;
    Editor ed = doc.Editor;
    using (Transaction tr = db.TransactionManager.StartTransaction())
    using (ViewTableRecord view = ed.GetCurrentView())
    {
        Matrix3d WCS2DCS = Matrix3d.PlaneToWorld(view.ViewDirection);
        WCS2DCS = Matrix3d.Displacement(view.Target - Point3d.Origin) * WCS2DCS;
        WCS2DCS = Matrix3d.Rotation(-view.ViewTwist, view.ViewDirection, view.Target) * WCS2DCS;
        WCS2DCS = WCS2DCS.Inverse();
        Entity ent = (Entity)tr.GetObject(idCol[0], OpenMode.ForRead);
        Entity ent1 = (Entity)tr.GetObject(idCol[0], OpenMode.ForWrite);
        Extents3d ext = ent.GeometricExtents;
        for (int i = 1; i < Enerflex.SpoolTagFindForm1.idColCnt; i++)
        {
            ent = (Entity)tr.GetObject(idCol[i], OpenMode.ForRead);
            ent1 = (Entity)tr.GetObject(idCol[i], OpenMode.ForWrite);
            Extents3d tmp = ent.GeometricExtents;
            ext.AddExtents(tmp);
            ent1.Color = Color.FromColor(System.Drawing.Color.Red);
        }
        ext.TransformBy(WCS2DCS);
        view.Width = ext.MaxPoint.X - ext.MinPoint.X;
        view.Height = ext.MaxPoint.Y - ext.MinPoint.Y;
        view.CenterPoint = new Point2d((ext.MaxPoint.X + ext.MinPoint.X) / 2.0, (ext.MaxPoint.Y + ext.MinPoint.Y) / 2.0);
        ed.SetCurrentView(view);
        tr.Commit();
    }
}

1 个答案:

答案 0 :(得分:0)

找到了与缩放对象范围的差异的答案。选择后,某些对象包含MaxPointX&amp; Y和MinPointX&amp;相同的Y(文本对象)对缩放视图产生了不利影响。当我没有选择这些对象时,缩放按预期工作。