关于离线CAD的完成,在这里介绍一个 OpenDWG,其开发库读者可以到这里下载: http://www.opendesign.com/download/ OpenDWG 是一个国际联盟组织,主要由一些从事 CAD 软件研发的公司和个人组成,致力于 DWG 文件格式研究与开发。为了促使 DWG 图形格式成为公开的 CAD 标准,该组织在多年研究基础上,提供了一套直接访问 DWG文件的函数库(简称 ODT),软件开发人员可以借以开发应用程序,使得系统能够独立于 AutoCAD 平台之外访问 DWG文件。
另外除了OpenDWG外,市面上还有很多软件,也可以借助 objectarx来开发,譬如下面是我要举例的BrisCAD,它也提供了一套SDK, 由于它高度兼容AutoCAD,所以你的arx工程只是做很少的改动或者不需要改动,就能在Briscad下运行。 譬如:我用visual studio 2008 新建一个 arx工程,在工程的属性栏里面修改: C++的include 目录为: .. \brx\inc; Link的Library 目录为: ..\brx\lib; 然后你就可以利用 objectarx的向导条创建一个命令,例如test 在test里面添加如下代码:
static void TestForBric_Test(void)
{
// Add your code for command TestForBric._Test here
acutPrintf(_T("\nHahah"));
ads_point p1,p2;
int ret = acedGetPoint(NULL,_T("\nPlease enter a point:"),p1);
if (ret != RTNORM)
{
return;
}
ret = acedGetPoint(p1,_T("\nEnter another point:"),p2);
if (ret != RTNORM)
{
return;
}
AcGePoint3d pt1 = asPnt3d(p1);
AcGePoint3d pt2 = asPnt3d(p2);
AcDbLine *pLine = new AcDbLine (pt1,pt2);
Acad::ErrorStatus es;
es = CreateEntity(pLine);
if (es!= Acad::eOk)
{
delete pLine;
pLine = NULL;
return;
}
}
和一些需要定义的函数: //创建实体
Acad::ErrorStatus CreateEntity(AcDbEntity * pEnt,Adesk::UInt16 color)
{
if (pEnt == NULL)
{
return Acad::eNullEntityPointer;
}
Acad::ErrorStatus es;
AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase();
AcDbBlockTableRecord *pRec = NULL;
es = acdbOpenAcDbObject((AcDbObject *&)pRec,pDb->currentSpaceId(),AcDb::kForWrite);
if(es!=Acad::eOk)
return es;
es = pRec->appendAcDbEntity(pEnt);
if(es!=Acad::eOk)
return es;
pEnt->setColorIndex(color);
pRec->close();
pEnt->close();
return es;
}
编译通过后,你就可以在Briscad下运行了。 下面是截图。
另外听说中望好像也支持用objectarx开发,但没用过。
|