2015-08-20 45 views
1

我似乎無法理解爲什麼下面的代碼不會縮放到所選對象的中心。通常物體靠近中心,但在屏幕的頂部。autocad將對象縮放到中心屏幕

我可以使用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(); 
    } 
} 

回答

0

找到了與縮放對象範圍差異的答案。選中時,包含MaxPointX & Y和MinPointX & Y的相同對象(文本對象)會對縮放視圖產生不利影響。當我沒有選擇這些對象時,縮放按預期工作。