- UID
- 309121
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-8-16
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
头大,照书抄的例子总是运行通不过,连接错误,还查不出来,哪位有耐心的帮忙看看。
cpp文件:
#include "rxregsvc.h"
#include "aced.h"
#include "dbsymtb.h"
#include "adslib.h"
#include "dbents.h"
#include "dbpl.h"
//创建图形数据库函数
void createDwg()
{
//生成新的图形数据库,默认方式为包含基本的数据库要素
AcDbDatabase *pDb = new AcDbDatabase();
//获得块表指针
AcDbBlockTable *pBtbl;
pDb->getSymbolTable(pBtbl, AcDb::kForRead);
//获得模型空间的块表记录指针
AcDbBlockTableRecord *pBtblRcd;
pBtbl->getAt(ACDB_MODEL_SPACE, pBtblRcd, AcDb::kForWrite);
//关闭块表,接下来只对模型空间的块表记录进行操作
pBtbl->close();
//生成两个圆,代表眼睛
AcDbCircle *pCir1 = new AcDbCircle(AcGePoint3d(200, 200, 0), AcGeVector3d(0, 0, 1), 50);
AcDbCircle *pCir2 = new AcDbCircle(AcGePoint3d(400, 200, 0), AcGeVector3d(0, 0, 1), 50);
//生成一条直线,代表鼻子
AcDbLine *pLine = new AcDbLine(AcGePoint3d(300, 230, 0), AcGePoint3d(300, 50, 0));
//将鼻子颜色设为红色
pLine->setColorIndex(1);
//生成多义线
AcDbPolyline *pPolyline = new AcDbPolyline(4);
AcGePoint2d pt;
//添加多义线的顶点
pt.x = 220;
pt.y = 60;
pPolyline->addVertexAt(0, pt, 0.0, -1.0, -1.0);
pt.x = 250;
pt.y = 30;
pPolyline->addVertexAt(1, pt, 0.0, -1.0, -1.0);
pt.x = 350;
pt.y = 30;
pPolyline->addVertexAt(2, pt, 0.0, -1.0, -1.0);
pt.x = 380;
pt.y = 60;
pPolyline->addVertexAt(3, pt, 0.0, -1.0, -1.0);
//将多义线厚度设为100,颜色设为蓝色
pPolyline->setThickness(100);
pPolyline->setColorIndex(4);
//将圆、直线和多义线添加到模型空间,并分别关闭这些实体对象指针
pBtblRcd->appendAcDbEntity(pCir1);
pCir1->close();
pBtblRcd->appendAcDbEntity(pCir2);
pCir2->close();
pBtblRcd->appendAcDbEntity(pLine);
pLine->close();
pBtblRcd->appendAcDbEntity(pPolyline);
pPolyline->close();
pBtblRcd->close();
//将该图形数据库用制定文件名保存
pDb->saveAs("face.dwg");
delete pDb;
return;
}
//将指定文件名的图形数据库的信息进行解读并打印信息
void readDwg()
{
//创建一个空白的图形数据库
//AcDbDatabase()的参数必须为Adesk::kFalse
AcDbDatabase *pDb = new AcDbDatabase(Adesk::kFalse);
//将指定文件名的图形读入空白图形数据库
pDb->readDwgFile("face.dwg");
//获得块表指针
AcDbBlockTable *pBlkTbl;
pDb->getSymbolTable(pBlkTbl, AcDb::kForRead);
//获得模型空间的块表记录指针
AcDbBlockTableRecord *pBlkTblRcd;
pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForRead);
pBlkTbl->close();
//生成块表记录的迭代器
AcDbBlockTableRecordIterator *pBlkTblRcdItr;
pBlkTblRcd->newIterator(pBlkTblRcdItr);
//遍历法获得并打印每一个实体的类名
AcDbEntity *pEnt;
for (pBlkTblRcdItr->start(); !pBlkTblRcdItr->done(); pBlkTblRcdItr->step()) {
pBlkTblRcdItr->getEntity(pEnt, AcDb::kForRead);
acutPrintf("classname: %s\n", (pEnt->isA())->name());
pEnt->close();
}
pBlkTblRcd->close();
//删除块表记录迭代器及数据库指针
delete pBlkTblRcdItr;
delete pDb;
return;
}
//初始化引用程序
void initApp()
{
acedRegCmds->addCommand("ASDK_DWG_COMMANDS", "ASDK_CREATE", "CREATE", ACRX_CMD_MODAL, createDwg);
acedRegCmds->addCommand("ASDK_DWG_COMMANDS", "ASDK_READ", "READ", ACRX_CMD_MODAL, readDwg);
return;
}
//卸载应用程序
void unloadApp()
{
acedRegCmds->removeGroup("ASDK_DWG_COMMANDS");
return;
}
//应用程序入口函数
extern "C"
AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void *pkt)
{
//针对msg的类型分包
switch(msg) {
case AcRx::kInitAppMsg:
//对应用程序解锁
acrxDynamicLinker->unlockApplication(pkt);
//对应用程序进行注册
acrxDynamicLinker->registerAppMDIAware(pkt);
//对应用程序调用initApp()进行初始化
initApp();
break;
case AcRx::kUnloadAppMsg:
//对应用程序卸载
unloadApp();
break;
}
return AcRx::kRetOK;
}
下面是def文件:
LIBRARY testdb
DESCRIPTION "图形数据库操作"
EXPORTS
acrxEntryPoint PRIVATE
acrxGetApiVersion PRIVATE
按照书上说的在project->settings中的link页上的base address设为0x1c000000,object/library modules加上了acutil15.lib acrx15.lib acdb15.lib acedapi.lib rxapi.lib acad.lib acge15.lib。编译没问题,连接老是有错:
Linking...
Creating library Debug/testdb.lib and object Debug/testdb.exp
LINK : warning LNK4098: defaultlib "msvcrt.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
Debug/testdb.arx : warning LNK4086: entrypoint "_mainCRTStartup" is not __stdcall with 12 bytes of arguments; image may not run
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/testdb.arx : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
testdb.arx - 2 error(s), 2 warning(s) |
|