天气与日历 切换到窄版

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

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

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 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. }
    复制代码

     

     

     

     

    [每日一码] 如何定义透明的命令,允许在屏幕四个方向分别PAN半个屏幕
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-11-1 13:37 , Processed in 0.171587 second(s), 27 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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