找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 144|回复: 0

[每日一码] 如何定义透明的命令,允许在屏幕四个方向分别PAN半个屏幕

[复制链接]

0

主题

0

回帖

28

积分

管理员

积分
28
发表于 2024-3-14 20:18:42 | 显示全部楼层 |阅读模式
  1. 问题: 如何定义透明的命令,允许在屏幕四个方向分别PAN半个屏幕
  2. 解决方案:
  3. The following code defines a transparent pan command for each of the four main
  4. compass directions:
  5. #include "rxregsvc.h"
  6. #include "aced.h"
  7. #include "dbsymtb.h"
  8. #include "adscodes.h"
  9. // Required for AutoCAD 2000
  10. #include "migrtion.h"
  11. // Deal with renaming of function in ObjectARX 2000
  12. #define acdbSetCurrentView acedSetCurrentView
  13. void panleft();
  14. void panright();
  15. void panup();
  16. void pandown();
  17. void
  18. initApp()
  19. {
  20.    acedRegCmds->addCommand( "PANNER", // Group name
  21.             "panl",                    // Global function name
  22.             "panl",                    // Local function name
  23.             ACRX采用CMD采用TRANSPARENT,              // Type
  24.             &panleft );                           // Function pointer
  25.    acedRegCmds->addCommand( "PANNER", // Group name
  26.             "panr",                                // Global function name
  27.             "panr",                                // Local function name
  28.             ACRX采用CMD采用TRANSPARENT,              // Type
  29.             &panright );                         // Function pointer
  30.    acedRegCmds->addCommand( "PANNER", // Group name
  31.             "panu",                               // Global function name
  32.             "panu",                               // Local function name
  33.             ACRX采用CMD采用TRANSPARENT,              // Type
  34.             &panup );                            // Function pointer
  35.    acedRegCmds->addCommand( "PANNER", // Group name
  36.             "pand",                               // Global function name
  37.             "pand",                               // Local function name
  38.             ACRX采用CMD采用TRANSPARENT,              // Type
  39.             &pandown );                       // Function pointer
  40. }
  41. void
  42. unloadApp()
  43. {
  44.    acedRegCmds->removeGroup( "PANNER" );
  45. }
  46. extern "C" AcRx::AppRetCode acrxEntryPoint( AcRx::AppMsgCode msg, void *p )
  47. {
  48.    switch (msg)
  49.    {
  50.    case AcRx::kInitAppMsg:
  51.             acrxRegisterAppMDIAware(p);
  52.             acrxUnlockApplication(p); // try to allow unloading
  53.             initApp();
  54.             break;
  55.    case AcRx::kUnloadAppMsg:
  56.             unloadApp();
  57.             break;
  58.    default:
  59.             break;
  60.    }
  61.    return AcRx::kRetOK;
  62. }
  63. void
  64. getCurrentView( AcDbViewTableRecord &view )
  65. {
  66.             struct resbuf var;
  67.             struct resbuf WCS, UCS, DCS;
  68.             WCS.restype = RTSHORT;
  69.             WCS.resval.rint = 0;
  70.             UCS.restype = RTSHORT;
  71.             UCS.resval.rint = 1;
  72.             DCS.restype = RTSHORT;
  73.             DCS.resval.rint = 2;
  74.             ads采用getvar("VIEWMODE", &var);
  75.             view.setPerspectiveEnabled(var.resval.rint & 1);
  76.    view.setFrontClipEnabled(var.resval.rint & 2 ? true : false);
  77.             view.setBackClipEnabled(var.resval.rint & 4 ? true : false);
  78.             view.setFrontClipAtEye(!(var.resval.rint & 16));
  79.             ads采用getvar("BACKZ", &var);
  80.             view.setBackClipDistance(var.resval.rreal);
  81.             ads采用getvar("VIEWCTR", &var);
  82.             ads采用trans(var.resval.rpoint, &UCS, &DCS, NULL, var.resval.rpoint);
  83.             view.setCenterPoint(AcGePoint2d(var.resval.rpoint[X],
  84. var.resval.rpoint[Y]));
  85.             ads采用getvar("FRONTZ", &var);
  86.             view.setFrontClipDistance(var.resval.rreal);
  87.             ads采用getvar("LENSLENGTH", &var);
  88.             view.setLensLength(var.resval.rreal);
  89.             ads采用getvar("TARGET", &var);
  90.             ads采用trans(var.resval.rpoint, &UCS, &WCS, NULL, var.resval.rpoint);
  91.             view.setTarget(AcGePoint3d(var.resval.rpoint[X], var.resval.rpoint[Y],
  92. var.resval.rpoint[Z]));
  93.             ads采用getvar("VIEWDIR", &var);
  94.             ads采用trans(var.resval.rpoint, &UCS, &WCS, TRUE, var.resval.rpoint);
  95.             view.setViewDirection(AcGeVector3d(var.resval.rpoint[X],
  96. var.resval.rpoint[Y], var.resval.rpoint[Z]));
  97.             ads采用getvar("VIEWSIZE", &var);           
  98.             view.setHeight(var.resval.rreal);
  99.    double tst = view.width();
  100. }
  101. void
  102. panleft()
  103. {
  104.    AcDbViewTableRecord view;
  105.    getCurrentView( view );
  106.    AcGePoint2d viewCen = view.centerPoint();
  107.    viewCen[X] = viewCen[X] - ( view.width() / 2 );
  108.    view.setCenterPoint( viewCen );
  109.    acdbSetCurrentView( &view, NULL );
  110. }
  111. void
  112. panright()
  113. {
  114.    AcDbViewTableRecord view;
  115.    getCurrentView( view );
  116.    AcGePoint2d viewCen = view.centerPoint();
  117.    viewCen[X] = viewCen[X] + ( view.width() / 2 );
  118.    view.setCenterPoint( viewCen );
  119.    acdbSetCurrentView( &view, NULL );
  120. }
  121. 下面是pandown()和panup()的定义函数
  122. void
  123. pandown()
  124. {
  125.    AcDbViewTableRecord view;
  126.    getCurrentView( view );
  127.    AcGePoint2d viewCen = view.centerPoint();
  128.    viewCen[Y] = viewCen[Y] - ( view.height() / 2 );
  129.    view.setCenterPoint( viewCen );
  130.    acdbSetCurrentView( &view, NULL );
  131. }
  132. void
  133. panup()
  134. {
  135.    AcDbViewTableRecord view;
  136.    getCurrentView( view );
  137.    AcGePoint2d viewCen = view.centerPoint();
  138.    viewCen[Y] = viewCen[Y] + ( view.height() / 2 );
  139.    view.setCenterPoint( viewCen );
  140.    acdbSetCurrentView( &view, NULL );
  141. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-29 05:28 , Processed in 0.098076 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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