首先下载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 initialization
DisableThreadLibraryCalls( (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