Hi, aslam!
=========Beginning of the citation==============
using System ;
using Autodesk.AutoCAD.Runtime ;
using Autodesk.AutoCAD.Geometry ;
using Autodesk.AutoCAD.ApplicationServices ;
using Autodesk.AutoCAD.EditorInput ;
using Autodesk.AutoCAD.DatabaseServices ;
using Autodesk.AutoCAD.Interop ;
using Autodesk.AutoCAD.Interop.Common;
[assembly: CommandClass(typeof(ZoomLibrary.Zoom))]
namespace ZoomLibrary
{
public class Zoom
{
//
// Function for zooming entity on screen
//
static public void ZoomObject(ObjectId id, double zoomFactor)
{
Database db = HostApplicationServices.WorkingDatabase;
AcadApplication app = (AcadApplication) Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication;
Point3d center;
double zoomHeight = 0.0;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
object oMinpt = new object(), oMaxpt = new object();
double [] dMinpt = new double[3], dMaxpt = new double[3];
Entity en = (Entity) tr.GetObject(id,OpenMode.ForRead);
AcadEntity en_com = en.AcadObject as AcadEntity;
Object minPt = new Object(), maxPt = new Object();
en_com.GetBoundingBox(out oMinpt, out oMaxpt);
dMinpt = (double []) oMinpt; dMaxpt = (double []) oMaxpt;
double heightEnt = dMaxpt[1] - dMinpt[1];
double widthEnt = dMaxpt[0] - dMinpt[0];
Object objRes = new Object(); objRes = app.ActiveDocument.GetVariable("SCREENSIZE");
Point2d screenRes = new Point2d((double []) objRes);
double aspectScreen = screenRes.Y / screenRes.X;
double aspectEnt = heightEnt / widthEnt;
if (aspectEnt < aspectScreen)
{
zoomFactor *= (aspectEnt / aspectScreen);
}
center = new Point3d(
(dMinpt[0]+dMaxpt[0]) * 0.5,
(dMinpt[1]+dMaxpt[1]) * 0.5,
(dMinpt[2]+dMaxpt[2]) * 0.5
);
zoomHeight = heightEnt*100/Math.Max(zoomFactor,1e-6);
}
app.ZoomCenter(center.ToArray(),zoomHeight);
}
// Define Command "TestZoom"
[CommandMethod("TestZoom")]
static public void TestZoom()
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
PromptEntityResult rse = ed.GetEntity("\nSelect Entity: ");
if (rse.Status == PromptStatus.OK)
{
double zoomFactor = 100.0;
PromptDoubleOptions pdo = new PromptDoubleOptions("\nEnter zoom factor in percent (0...100) <100>: ");
pdo.UseDefaultValue = true; pdo.DefaultValue = zoomFactor;
pdo.AllowNegative = false; pdo.AllowZero = false; pdo.AllowNone = false;
PromptDoubleResult rsd = ed.GetDouble(pdo);
if (rsd.Status == PromptStatus.OK) zoomFactor = rsd.Value;
ZoomObject(rse.ObjectId,zoomFactor);
}
}
}
}
=========The end of the citation================
Best Regards,
Alexander Rivilis.