设置视口中心点setViewCenter

ads_point pt;
        ads_name ent,ss;
        //切换到模型空间
        acedMspace();
        if (RTNORM != acedGetPoint(NULL,_T("\n选择新的视口中心点:"),pt))
        {
            return;
        }
        acutPrintf(_T("\n拾取视口中心点(%0.4lf,%0.4lf)"),pt[X],pt[Y]);
        // 转换坐标系的标记
        struct resbuf ucs, dcs;
        ucs.restype = RTSHORT;
        ucs.resval.rint = 1;
        dcs.restype = RTSHORT;
        dcs.resval.rint = 2;        
        acedTrans(pt,&ucs,&dcs,NULL,pt);
        AcGePoint2d ptCenter=asPnt2d(pt);
        //切换到图纸空间
        acedPspace();
        if (RTNORM != acedSSGet(NULL,NULL,NULL,NULL,ss))
        {
            return;
        }
        Adesk::Int32 nLength;
        acedSSLength(ss,&nLength);
        for (Adesk::Int32 i=0;i<nLength;i++)
        {
            AcDbObjectId objId=AcDbObjectId::kNull;
            acedSSName(ss,i,ent);
            acdbGetObjectId(objId,ent);
            AcDbObjectPointer<AcDbViewport> pVp(objId,AcDb::kForWrite);
            if (Acad::eOk != pVp.openStatus() || pVp == NULL)
            {
                continue;
            }
            //pVp->setViewCenter()
            AcGePoint2d ptOld= pVp->viewCenter();
            acutPrintf(_T("\n原有视口中心点(%0.4lf,%0.4lf)"),ptOld.x,ptOld.y);
            acutPrintf(_T("\n设置视口中心点(%0.4lf,%0.4lf)"),ptCenter.x,ptCenter.y);
            pVp->setViewCenter(ptCenter);
            ptOld= pVp->viewCenter();
            acutPrintf(_T("\n结果视口中心点(%0.4lf,%0.4lf)"),ptOld.x,ptOld.y);
        }
        acedSSFree(ss);

 

posted @ 2019-04-26 23:33  edata  阅读(939)  评论(0编辑  收藏  举报