马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
写了一段代码,包括两个步骤:
1. 以CAD图中某个表格为目标居中,并将CAD窗口尺寸重设,使得窗口刚好比表格大一点点;
2.导出当前CAD窗口内的图形到WMF格式文件。
单独测试两个函数,均能达到理想效果,但是两个函数放在一起按顺序执行时发现问题:
在第1步骤最后一个“居中显示”命令执行之前,第2步骤的导出wmf已经完成。然后再执行了居中显示操作。
这样就使得导出的图不是想要的内容。
求大神。
窗口重设函数如下:
- public static void ResizeCADWindow(this ObjectId id)
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Editor ed = doc.Editor;
- Database db = doc.Database;
- doc.Window.WindowState = Window.State.Normal;
- Point3dCollection range = id.GetBlockRange();
- Point3d min = range[0];
- Point3d max = range[1];
- //计算块参照在X方向上的实际长度
- double xRange = Math.Abs(max.X - min.X);
- //计算块参照在Y方向上的实际长度
- double yRange = Math.Abs(max.Y - min.Y);
- Point loc = doc.Window.Location;
- ////视图以当前块参照居中
- ed.ZoomObject(id);
- //ZoomWindowReflection(range);
- Size s = doc.Window.Size;
- //计算一个像素对应图纸中的长度
- double scale = yRange / (s.Height - 79);
- //定义新的窗口尺寸
- //注意,按照坐标计算出的窗体大小是包含标题栏、左右下侧边栏的大小,故应加常数,使得净绘图区域能够完整显示块参照
- Size size = new Size(Convert.ToInt32(xRange / scale) + 60, s.Height + 10);
- //重设窗口尺寸
- doc.Window.Size = size;
- //重设视图
- ViewTableRecord view = ed.GetCurrentView();
- view.CenterPoint = (min + 0.5 * (max - min)).Strip();
- view.Width = xRange;
- view.Height = yRange;
- ed.SetCurrentView(view);
- Application.UpdateScreen();
- ed.NewZoom(range);
- }
其中用重设视图的方法对指定范围居中显示的函数NewZoom()函数如下:
public static void NewZoom(this Editor ed, Point3dCollection range)
{
Point2d min = new Point2d(range[0].X, range[0].Y);
Point2d max = new Point2d(range[1].X, range[1].Y);
ViewTableRecord view = ed.GetCurrentView();
view.CenterPoint = min + (max - min) / 2;
view.Height = max.Y - min.Y;
view.Width = max.X - min.X;
ed.SetCurrentView(view);
} |