乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 94|回复: 6

[原创]用TAB键移动视图的程序

[复制链接]

10

主题

131

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
171
发表于 2007-7-3 09:45:00 | 显示全部楼层 |阅读模式
自己用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
#include //acedCommand
#include //acedSetVar
#include
#include //resbuf
#include
#include //AcDbViewTableRecord
#include //AcGePoint3d
#include //acdbHostApplicationServices
#include //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
}
回复

使用道具 举报

25

主题

474

帖子

12

银币

中流砥柱

Rank: 25

铜币
572
发表于 2008-5-12 18:29:00 | 显示全部楼层
我这里出现很多错误
--------------------Configuration: pretranslate - Win32 Debug--------------------
Linking...
   Creating library .\Debug/pretranslate.lib and object .\Debug/pretranslate.exp
LINK : warning LNK4098: defaultlib "msvcrt.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
rxtemplt.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall AcDbViewTableRecord::~AcDbViewTableRecord(void)" (??1AcDbViewTableRecord@@UAE@XZ)
rxtemplt.obj : error LNK2001: unresolved external symbol "public: enum Acad::ErrorStatus __thiscall AcDbDatabase::updateExt(bool)" (?updateExt@AcDbDatabase@@QAE?AW4ErrorStatus@Acad@@_N@Z)
rxtemplt.obj : error LNK2001: unresolved external symbol "public: void __thiscall AcDbAbstractViewTableRecord::setWidth(double)" (?setWidth@AcDbAbstractViewTableRecord@@QAEXN@Z)
rxtemplt.obj : error LNK2001: unresolved external symbol "public: void __thiscall AcDbAbstractViewTableRecord::setHeight(double)" (?setHeight@AcDbAbstractViewTableRecord@@QAEXN@Z)
rxtemplt.obj : error LNK2001: unresolved external symbol "public: void __thiscall AcDbAbstractViewTableRecord::setCenterPoint(class AcGePoint2d const &)" (?setCenterPoint@AcDbAbstractViewTableRecord@@QAEXABVAcGePoint2d@@@Z)
rxtemplt.obj : error LNK2001: unresolved external symbol "public: __thiscall AcDbViewTableRecord::AcDbViewTableRecord(void)" (??0AcDbViewTableRecord@@QAE@XZ)
.\pretranslate.arx : fatal error LNK1120: 6 unresolved externals
Error executing link.exe.
pretranslate.arx - 7 error(s), 1 warning(s)
回复

使用道具 举报

25

主题

474

帖子

12

银币

中流砥柱

Rank: 25

铜币
572
发表于 2008-5-12 18:30:00 | 显示全部楼层
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:b0y2ztg503d.rar 
下载次数:0  文件大小:10.33 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]


这是工程文件
回复

使用道具 举报

10

主题

131

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
171
发表于 2008-5-13 08:51:00 | 显示全部楼层
看到下面的文字吗?
附上工程中唯一的CPP文件,用它来替代SDK下pretranslate中的CPP文件再编译即可
回复

使用道具 举报

10

主题

131

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
171
发表于 2008-5-13 09:28:00 | 显示全部楼层
问题出在引入的库文件上面,可能是有些库文件没引用,我用的的SDK2006,没法调试,我看了一下,你的调试版本和发布版本引入的库不一样。
你用下面的试试
acad.librxapi.libacedapi.libacrx15.libacutil15.lib
acdb15.lib
                                       
回复

使用道具 举报

25

主题

474

帖子

12

银币

中流砥柱

Rank: 25

铜币
572
发表于 2008-5-13 09:54:00 | 显示全部楼层
还是有很多错误:
--------------------Configuration: pretranslate - Win32 Debug--------------------
Linking...
   Creating library .\Debug/pretranslate.lib and object .\Debug/pretranslate.exp
rxtemplt.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: double & __thiscall AcGePoint2d:perator[](unsigned int)" (__imp_??AAcGePoint2d@@QAEAANI@Z)
rxtemplt.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall AcGePoint2d::AcGePoint2d(void)" (__imp_??0AcGePoint2d@@QAE@XZ)
.\pretranslate.arx : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
回复

使用道具 举报

10

主题

131

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
171
发表于 2008-5-13 16:33:00 | 显示全部楼层
acge15.lib
这个呢?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-6 07:05 , Processed in 0.267931 second(s), 71 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表