天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 60|回复: 0

‎使用 ObjectARX 缩放、平移和环绕当前 AutoCAD 视图‎

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式

‎使用 ObjectARX 缩放、平移和环绕当前 AutoCAD 视图‎


‎我们的学院 Kean 制作了一个关于在 .NET 中缩放、平移和环绕当前视图的‎‎博客‎‎。我正在ObjectARX中编写代码。缩放、平移、轨道化的基本工作流程类似:‎

‎1.获取他当前的视图记录‎

‎2.调整其参数。例如‎

‎缩放:使用系数调整高度和宽度‎

‎平移:调整视图中心‎

‎轨道:沿轴调整视图方向。‎

‎3. 使用更新的视图记录更新当前视图。‎

[code]static void panView()

{

    AcDbDatabase *pDb =

    acdbHostApplicationServices()->workingDatabase();  



       acedVports2VportTableRecords();



     //get the active viewport object

      AcDbViewportTable *pVpT = NULL;

      AcDbViewportTableRecord *pActVp = NULL;

      //get the *Active view port

      pDb->getViewportTable(pVpT,AcDb::kForRead);

      pVpT->getAt(_T("*Active"),pActVp,AcDb::kForWrite);

      pVpT->close();



      //get the view center point



      //assume we need to pan the view along X & Y in 10

      double panStep = 10;

      AcGePoint2d mCentPt = pActVp->centerPoint();

      mCentPt.x += panStep;

      mCentPt.y += panStep;



      //set the view center

      pActVp->setCenterPoint(mCentPt);

      //close the Active viewport

      pActVp->close();  

      //update the viewport

      acedVportTableRecords2Vports();

}



static void zoomView()

{

    AcDbDatabase *pDb =

    acdbHostApplicationServices()->workingDatabase();  



       acedVports2VportTableRecords();



     //get the active viewport object

      AcDbViewportTable *pVpT = NULL;

      AcDbViewportTableRecord *pActVp = NULL;

      //get the *Active view port

      pDb->getViewportTable(pVpT,AcDb::kForRead);

      pVpT->getAt(_T("*Active"),pActVp,AcDb::kForWrite);

      pVpT->close();  



      //assume we need to zoom the view out in scaling 10

      double zoomFactor = 10;



      pActVp->setHeight(pActVp->height() * zoomFactor);

      pActVp->setWidth(pActVp->width() * zoomFactor);



      //close the Active viewport

      pActVp->close();  

      //update the viewport

      acedVportTableRecords2Vports();

}



static void orbitView()

{

    AcDbDatabase *pDb =

    acdbHostApplicationServices()->workingDatabase();  



       acedVports2VportTableRecords();



     //get the active viewport object

      AcDbViewportTable *pVpT = NULL;

      AcDbViewportTableRecord *pActVp = NULL;

      //get the *Active view port

      pDb->getViewportTable(pVpT,AcDb::kForRead);

      pVpT->getAt(_T("*Active"),pActVp,AcDb::kForWrite);

      pVpT->close();  

     

      //assume we need to orbit the view direction

      // along (1,0,0) in angle 30 degree.



      AcGeVector3d oOldDir =  pActVp->viewDirection();

      AcGeMatrix3d oM;

      oM.setToRotation(30 * 3.1415926 / 180,AcGeVector3d(1,0,0),AcGePoint3d::kOrigin);

      oOldDir.transformBy(oM);

      pActVp->setViewDirection(oOldDir);      



      //close the Active viewport

      pActVp->close();  

      //update the viewport

      acedVportTableRecords2Vports();

}[/code]

 

 

 

 

‎使用 ObjectARX 缩放、平移和环绕当前 AutoCAD 视图‎
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 10:27 , Processed in 0.131836 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表