yanghao1 发表于 2009-8-28 17:11:00

使用Autodesk.AutoCAD.GraphicsSystem.View类,文档却没有反应,怎么回事。例如:

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Autodesk.AutoCAD.GraphicsSystem.View zoom = new Autodesk.AutoCAD.GraphicsSystem.View();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zoom.Zoom(2);<br/>没反应。<br/>

雪山飞狐_lzh 发表于 2009-8-28 17:26:00

GraphicsSystem->图形接口,使用不是这样简单的
你只是新建一个View对象还不够,必须把它和当前视图联系起来
View可以用来Zoom,但操作无法回退
看过手册里的例子么?
建议你先按下心来仔细看下资料
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Geometry;

static void Zoom(Point3d pMin, Point3d pMax, Point3d pCenter, double dFactor)
{
// Get the current document and database
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;

int nCurVport = System.Convert.ToInt32(Application.GetSystemVariable("CVPORT"));

// Get the extents of the current space no points
// or only a center point is provided
// Check to see if Model space is current
if (acCurDb.TileMode == true)
{
      if (pMin.Equals(new Point3d()) == true &&
          pMax.Equals(new Point3d()) == true)
      {
          pMin = acCurDb.Extmin;
          pMax = acCurDb.Extmax;
      }
}
else
{
      // Check to see if Paper space is current
      if (nCurVport == 1)
      {
          // Get the extents of Paper space
          if (pMin.Equals(new Point3d()) == true &&
            pMax.Equals(new Point3d()) == true)
          {
            pMin = acCurDb.Pextmin;
            pMax = acCurDb.Pextmax;
          }
      }
      else
      {
          // Get the extents of Model space
          if (pMin.Equals(new Point3d()) == true &&
            pMax.Equals(new Point3d()) == true)
          {
            pMin = acCurDb.Extmin;
            pMax = acCurDb.Extmax;
          }
      }
}

// Start a transaction
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
      // Get the current view
      using (ViewTableRecord acView = acDoc.Editor.GetCurrentView())
      {
          Extents3d eExtents;

          // Translate WCS coordinates to DCS
          Matrix3d matWCS2DCS;
          matWCS2DCS = Matrix3d.PlaneToWorld(acView.ViewDirection);
          matWCS2DCS = Matrix3d.Displacement(acView.Target - Point3d.Origin) * matWCS2DCS;
          matWCS2DCS = Matrix3d.Rotation(-acView.ViewTwist,
                                       acView.ViewDirection,
                                       acView.Target) * matWCS2DCS;

          // If a center point is specified, define the min and max
          // point of the extents
          // for Center and Scale modes
          if (pCenter.DistanceTo(Point3d.Origin) != 0)
          {
            pMin = new Point3d(pCenter.X - (acView.Width / 2),
                                 pCenter.Y - (acView.Height / 2), 0);

            pMax = new Point3d((acView.Width / 2) + pCenter.X,
                                 (acView.Height / 2) + pCenter.Y, 0);
          }

          // Create an extents object using a line
          using (Line acLine = new Line(pMin, pMax))
          {
            eExtents = new Extents3d(acLine.Bounds.Value.MinPoint,
                                       acLine.Bounds.Value.MaxPoint);
          }

          // Calculate the ratio between the width and height of the current view
          double dViewRatio;
          dViewRatio = (acView.Width / acView.Height);

          // Tranform the extents of the view
          matWCS2DCS = matWCS2DCS.Inverse();
          eExtents.TransformBy(matWCS2DCS);

          double dWidth;
          double dHeight;
          Point2d pNewCentPt;

          // Check to see if a center point was provided (Center and Scale modes)
          if (pCenter.DistanceTo(Point3d.Origin) != 0)
          {
            dWidth = acView.Width;
            dHeight = acView.Height;

            if (dFactor == 0)
            {
                  pCenter = pCenter.TransformBy(matWCS2DCS);
            }

            pNewCentPt = new Point2d(pCenter.X, pCenter.Y);
          }
          else // Working in Window, Extents and Limits mode
          {
            // Calculate the new width and height of the current view
            dWidth = eExtents.MaxPoint.X - eExtents.MinPoint.X;
            dHeight = eExtents.MaxPoint.Y - eExtents.MinPoint.Y;

            // Get the center of the view
            pNewCentPt = new Point2d(((eExtents.MaxPoint.X + eExtents.MinPoint.X) * 0.5),
                                       ((eExtents.MaxPoint.Y + eExtents.MinPoint.Y) * 0.5));
          }

          // Check to see if the new width fits in current window
          if (dWidth > (dHeight * dViewRatio)) dHeight = dWidth / dViewRatio;

          // Resize and scale the view
          if (dFactor != 0)
          {
            acView.Height = dHeight * dFactor;
            acView.Width = dWidth * dFactor;
          }

          // Set the center of the view
          acView.CenterPoint = pNewCentPt;

          // Set the current view
          acDoc.Editor.SetCurrentView(acView);
      }

      // Commit the changes
      acTrans.Commit();
}
}
页: [1]
查看完整版本: 使用Autodesk.AutoCAD.GraphicsSystem.View类,文档却没有反应,怎么回事。例如: