先上代码(亲测可用):
/// <summary>
/// 定位缩放值指定实体
/// </summary>
/// <param name="oid"></param>
public static void Orientate(ObjectId oid)
{
try
{
Entity current_entity = GetEntity(oid);
current_entity.Highlight();//高亮显示实体
//缩放至实体
ZoomToExtent(current_entity.GeometricExtents);
}
catch (Exception ex)
{
throw;
}
}
/// <summary>
/// 缩放至指定范围
/// </summary>
/// <param name="extent"></param>
public static void ZoomToExtent(Extents3d extent)
{
try
{
Point3d pMin = extent.MinPoint;
Point3d pMax = extent.MaxPoint;
//获取当前文档及数据库
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
// 启动事务
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
// 获取当前视图
using (ViewTableRecord acView = acDoc.Editor.GetCurrentView())
{
//设置视图的高
acView.Height = Math.Abs(pMin.Y - pMax.Y);
//设置视图的宽
acView.Width = Math.Abs(pMin.X - pMax.X);
// 设置视图中心
acView.CenterPoint = new Point2d((pMin.X+pMax.X)/2, (pMin.Y+pMax.Y)/2);
// 更新当前视图
acDoc.Editor.SetCurrentView(acView);
}
// 提交更改
acTrans.Commit();
}
}
catch (Exception)
{
throw;
}
}
我有一个功能是做检查功能得,检查结果为一个DataTable显示在DataGridView中,我要实现双击行定位缩放到指定实体。
DataGridView显示了除过oid(ObjectID.ToString())得其它字段,双击行由于id唯一,我们可以找到这个对象拿到oid,通过上一篇文章可以获取ObjectID实体然后进行缩放定位。