找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2203|回复: 14

[ARX程序]:发个用TAB键移动视图的程序

[复制链接]
发表于 2006-9-21 14:18:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
自己用SDK中pretranslate的例子写了一个移动视图的程序,挺简单的,发上来看有没有人用得着.一方面为自己赚点积分,,二来看看有没有人把它改得更专业一点.

附上工程中唯一的CPP文件,用它来替代SDK下pretranslate中的CPP文件再编译即可

//////////////////////////////////////////////////////////////
//
// Includes
//
//////////////////////////////////////////////////////////////
#define _AFX_NOFORCE_LIBS // we do not want to link to MFC DLLs or libs
#ifdef _DEBUG
#define WAS_DEBUG
#undef _DEBUG
#endif

#include "afxwin.h"  // need this because rxmfcapi.h needs windows header.

#ifdef WAS_DEBUG
#undef WAS_DEBUG
#define _DEBUG
#endif

#include "aced.h"
#include "adslib.h"
#include "rxmfcapi.h"
#include <windef.h>
#include<accmd.h> //acedCommand
#include<acedads.h> //acedSetVar
#include<adscodes.h>
#include<adsdef.h> //resbuf
#include <rxmfcapi.h>
#include<dbsymtb.h> //AcDbViewTableRecord
#include<gepnt3d.h> //AcGePoint3d
#include<dbapserv.h> //acdbHostApplicationServices
#include<gepnt2d.h> //AcGePoint2d


//////////////////////////////////////////////////////////////
//
// Standard C Test function
//
//////////////////////////////////////////////////////////////

void snapTAB();                   // ARX callbacks
//void zoomExtents();
//void zoomExtents();
void moveview();
BOOL filterTAB(MSG *pMsg);      // hook function for capsing.


// preventing from inserting the same hook twice.
static BOOL TABDone = FALSE;
static long px=0;
static long py=0;

/*static struct resbuf wcs, ucs;*/ // 转换坐标时使用的坐标系统标记
//////////////////////////////////////////////////////////////
//
// Rx interface
//
//////////////////////////////////////////////////////////////


void initApp()
{
////snapTAB();
  acedRegCmds->addCommand( "MKEvents",      // Group name
                           "caps",      // Global function name
                           "caps",          // Local function name
                           ACRX_CMD_MODAL,    // Type
                           &snapTAB );         // Function pointer
  
  //acutPrintf( ".OK!\n" );

}

void unloadApp()
{
  
  if (TABDone == TRUE)
      acedRemoveFilterWinMsg(filterTAB);


}


//////////////////////////////////////////////////////////////
//
// Entry point
//
//////////////////////////////////////////////////////////////

extern "C" AcRx::AppRetCode acrxEntryPoint( AcRx::AppMsgCode msg, void* pkt)
{
  switch( msg )
  {
    case AcRx::kInitAppMsg:
      //initApp();
                snapTAB();
                acrxUnlockApplication(pkt);
                acrxDynamicLinker->registerAppMDIAware(pkt);
                acutPrintf( ".OK!\n" );
      break;
    case AcRx::kUnloadAppMsg:
      unloadApp();
      break;
    default:
      break;
  }
  return AcRx::kRetOK;
}



//////////////////////////////////////////////////////////////

BOOL filterTAB(MSG *pMsg)
{   
    // Change All lowercase to caps!!
    if (pMsg->message == WM_CHAR && pMsg->wParam == 9)//TAB键
        {

        moveview();

        }else if (pMsg->message == WM_MOUSEMOVE || pMsg->message == WM_LBUTTONDOWN
                || pMsg->message == WM_LBUTTONUP){
                                        px=LOWORD(pMsg->lParam);
                                        py=HIWORD(pMsg->lParam);
                }
    return FALSE; // continue
}




void snapTAB()
{
    if (TABDone == TRUE) // already has the hook??
      return;
    acutPrintf( "Capsing...\n" );
    if (acedRegisterFilterWinMsg(filterTAB) == FALSE)
        acutPrintf("Can't register Windows Msg hook - Lower->upper\n");
    else
      TABDone = TRUE;
}

void moveview()
{
//acutPrintf("移动视口!\n");
//本函数用来移动视口
        struct resbuf wcs, ucs; // 转换坐标时使用的坐标系统标记
        wcs.restype = RTSHORT; wcs.resval.rint = 0;
        ucs.restype = RTSHORT; ucs.resval.rint = 1;
        double screenx,screeny,vscal;// 1/2 屏幕 宽高 比例:像素/图形单位
        struct resbuf viewctr1 ;
        double vhight,vwidth;
        ads_point  ptCurrent;

        AcGePoint2d center_2d,ocenter_2d;//前一个为待移动的中心点 后一个为当前中心点
        acedGetVar("screensize",&viewctr1);//二维点 以像素为单位存储当前视口的大小
        screenx=viewctr1.resval.rpoint[X]/2;// 1/2 屏幕 宽
        screeny=viewctr1.resval.rpoint[Y]/2;// 1/2 屏幕 高
       
        acedGetVar("viewsize",&viewctr1);//类型:实数 按图形单位存储当前视口的高度。
        vhight=viewctr1.resval.rreal;//当前视口的高度 类型:实数
        vscal=screeny/vhight*2;//比例:像素/图形单位
        vwidth= screenx/vscal ;//当前视口的宽度 类型:实数

        //*********************************************************************
        acedGetVar("viewctr",&viewctr1);
        //类型:三维点 存储当前视口中视图的中心点。该值用 UCS 坐标表示。
        ocenter_2d[X]=viewctr1.resval.rpoint[X];
        ocenter_2d[Y]=viewctr1.resval.rpoint[Y];
        //*************************************************************
        ptCurrent[X]=(px-screenx)/vscal+ocenter_2d[X];
        ptCurrent[Y]=(screeny-py)/vscal+ocenter_2d[Y];
        acedTrans(ptCurrent,  &ucs, &wcs, 0, ptCurrent);
        center_2d[X]=ptCurrent[X];
        center_2d[Y]=ptCurrent[Y];

        AcDbViewTableRecord view ;// view2;
        view.setCenterPoint (center_2d);

view.setHeight(vhight);//设定图形单位高
view.setWidth(vwidth);//设定图形单位宽

//acutPrintf("调用!x:%lf Y:%lf\n" ,vwidth,vhight);
acedSetCurrentView (&view, NULL);//NULL

acdbHostApplicationServices()->workingDatabase()->updateExt(TRUE);//TRUE
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-9-21 16:04:10 | 显示全部楼层
很感谢,这是个不错的功能,以前在VBA中也做过的。如果好我就将它加入到软件中去。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-21 16:40:45 | 显示全部楼层
晕,下不来呀!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-21 17:44:58 | 显示全部楼层
好像江苏没法下载晓东空间的东西了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-22 08:33:42 | 显示全部楼层
这个还是第一次见,试了几次下不下来,麻烦给我发一份missyou0515@yahoo.com.cn
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-22 09:05:23 | 显示全部楼层
楼上武汉的老兄也下不下来嘛,看来不仅是江苏嘛!我也要:yoursmile4_19@163.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-22 13:15:31 | 显示全部楼层
下载不了啊,楼主给发一个吧。谢了!
2004100122@163.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-23 09:10:59 | 显示全部楼层
楼上三位,邮件已发送.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-24 11:52:49 | 显示全部楼层
邮件已收到,非常感谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-24 23:23:14 | 显示全部楼层
我也是下不了,只好请求楼主也发一份了,
heluyuan@geostar.com.cn
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-26 15:19:08 | 显示全部楼层
请给我发一个,gui_cx@163.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-28 15:54:57 | 显示全部楼层
楼上二位,,邮件已发送
其实代码不大,那位帮忙把那个CPP文件贴上就行了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-29 06:32:01 | 显示全部楼层
邮件已收到,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-10-1 09:14:14 | 显示全部楼层
重新上传一下吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-9-25 15:38:12 | 显示全部楼层
谢谢共享。再在找这个东西呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 23:32 , Processed in 0.200093 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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