原文:http://www.netfoucs.com/article/zhouschina/75660.html
首先下载TeighaViewer_vc10dll_3.09.1.msi和TX_SDK_3.09.0.0.zip, 下载地址参见http://blog.csdn.net/zhouschina/article/details/23423655
安装TeighaViewer_vc10dll_3.09.1.msi到系统中。由安装包可以看出,TeighaViewer版本为3.09.1,开发工具为Visual Studio 2010编译器。
解压TeighaViewer的SDK开发包TX_SDK_3.09.0.0.zip到指定目录。这里我们主要关心的是lib文件夹和TD文件夹下的include文件夹,在本课后面将会使用。TD文件夹下的源码程序和Platforms文件夹下的示例工程在今后的学习中将接触到。
打开Visual Studio 2010编译器,新建空项目ODA_Demo工程。
下面配置开发环境。
1、首先设置头文件包含和库包含:
图 1 包含TX_SDK头文件
图2 附加库文件目录
图3 添加必要的依赖项
2、添加必要的预定义_WIN32;WIN32;_DEBUG;_TOOLKIT_IN_DLL_;
_TOOLKIT_IN_DLL_该宏是必须的,否则会引起应用程序加载失败。Teigha Viewer加载*.tx时,提示如下错误:
ODA Warning: Loading of "*_3.09_10.tx" was failed (Entry point is missing).
图4 设置预处理器
3、设置生成目标文件名
设置目标文件名为ODA_Demo_3.09_10
注意:目标文件名后缀必须是“_3.09_10” ,3.09为Teigha Viewer版本号,10为编译器版本号。后缀不正确会引起加载Apps(*.tx)失败。
设置目标文件扩展名为:.tx
设置配置类型为:动态库(.dll)
设置字符集为:使用Unicode字符集
图5 设置生成目标文件名
4、设置启动命令
如图6所示,在配置属性—调试—命令项设置Teigha Viewer路径(以实际安装路径为准),例如:
D:\Program Files (x86)\ODA\Teigha Viewer 3.09.1\TeighaViewer.exe
图6 设置启动命令
5、新建ODA_DemoModule.h和ODA_DemoModule.cpp文件。
在ODA_DemoModule.h中添加代码如下:
- #pragma once#include "RxModule.h"#include "Ed/EdCommandStack.h"#include "StaticRxObject.h"#include "DbCommandContext.h" // 自定义命令类class textCmd : public OdEdCommand{public:const OdString groupName() const { return OD_T("Demo"); }const OdString globalName() const { return OD_T("InsertText"); }void execute(OdEdCommandContext* pCmdCtx);}; // 自定义模块类class ODA_DemoModule : public OdRxModule{protected:ODA_DemoModule(); void initApp(); void uninitApp(); public:~ODA_DemoModule(); // 命令OdStaticRxObject<textCmd> _textCmd;}; typedef OdSmartPtr<ODA_DemoModule> ODA_DemoModulePtr;
在ODA_DemoModule.cpp中添加代码如下:
- #include "OdaCommon.h"#include "ODA_DemoModule.h"#include "RxDynamicModule.h" #if defined(_TOOLKIT_IN_DLL_) && defined(_MSC_VER) // MacOS X dynamic library loading. //#ifdef _TOOLKIT_IN_DLL_#define VC_EXTRALEAN#include "windows.h"// 动态库入口函数extern "C" int APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID ){switch ( dwReason ){case DLL_PROCESS_ATTACH:// remove this if you need per-thread initializationDisableThreadLibraryCalls( (HMODULE)hInstance );break;}return TRUE;}#endif //_TOOLKIT_IN_DLL_ // MacOS X dynamic library loading. // 定义用户模块类ODRX_DEFINE_DYNAMIC_MODULE(ODA_DemoModule); ODA_DemoModule::ODA_DemoModule(){} ODA_DemoModule::~ODA_DemoModule(){} void ODA_DemoModule::initApp(){// 加载动态库初始化操作odedRegCmds()->addCommand( &_textCmd ); //注册命令} void ODA_DemoModule::uninitApp(){// 卸载动态库时反初始化操作odedRegCmds()->removeGroup( _textCmd.groupName() );} // 命令执行程序#include "DbText.h"#include "DbBlockTableRecord.h"void textCmd::execute(OdEdCommandContext* pCmdCtx){ OdDbCommandContextPtr pDbCmdCtx(pCmdCtx); OdDbUserIO* pIO = pDbCmdCtx->dbUserIO(); OdGePoint3d point3d = pIO->getPoint(OD_T("请选择文字插入点位")); OdDbTextPtr pText = OdDbText::createObject(); pText->setPosition(point3d); pText->setTextString(OD_T("Hello ODA!")); OdDbDatabase* pDatabase = pDbCmdCtx->database(); OdDbBlockTableRecordPtr pMs = pDatabase->getModelSpaceId().safeOpenObject(OdDb::kForWrite); pMs->appendOdDbEntity(pText);}
6、编译加载ODA_Demo_3.09_10.tx 程序
编译并成功生成ODA_Demo_3.09_10.tx,按F5启动调试。进入Tetgha Viewer界面,并打开一幅dwg文件,如下:
图7 Teigha Viewer界面
加载ODA_Demo_3.09_10.tx程序。有两种加载方式:
1、 命令行输入:appload
2、 菜单:Tools—Load Application..., 如图8
图8 菜单加载app方法
图 9 加载app界面
加载完成后,后在Registered Commands...菜单中添加了Demo子项菜单。
图10 ODA_Demo_3.09_10.tx中命令加载到菜单中
运行命令,或者命令行输出inserttext命令。
屏幕选择插入文本位置。得到效果如图11。
图11 输出的Hello ODA字符串
DEMO下载地址:http://download.csdn.net/detail/zhouschina/7175749