AutoCAD Map 3D Developer
Welcome to Autodesk’s AutoCAD Map 3D Developer Forums. Share your knowledge, ask questions, and explore popular AutoCAD Map 3D Developer topics.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

.net Zoom to a selected point

2 REPLIES 2
Reply
Message 1 of 3
newautocad123
593 Views, 2 Replies

.net Zoom to a selected point

How can I zoom to a selected point programmatically?

 

Thanks.

2 REPLIES 2
Message 2 of 3
djonio
in reply to: newautocad123

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

Message 3 of 3
newautocad123
in reply to: djonio

Thanks. It works as desired.

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report

”Boost