Community
Here is one way using COM. I just did a quick review and you might get an error if objectid is a Point object but this will get you going.
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); } if (zoomHeight <= 0) zoomHeight = 1; app.ZoomCenter(center.ToArray(), zoomHeight); }
r,
dennis
Can't find what you're looking for? Ask the community or share your knowledge.