给ACAD增加个命令,修改外部DWG文件,给所有LINE加扩展数据的完整的ARX代码...
来源:互联网 发布:淘宝店铺宝贝视频教程 编辑:程序博客网 时间:2024/06/07 19:29
#include // acadErrorStatusText
#include
#include
#include
#include
/*
* Register an application for xData
*
* In :
* AcDbDatabase* pDb : Database
* const char* pAppName : application name
* Adesk::Boolean exclude :
* If exclude == Adesk::kTrue, then xData associated with
* this AcDbRegAppTableRecord will not be saved when the
* drawing is saved as a release 12 (R12) drawing.
* If exclude == Adesk::kFalse, the data will be saved
* during a saveAsR12 operation.
*/
Acad::ErrorStatus
registerApp(AcDbDatabase* pDb, const char * pAppName,Adesk::Boolean exclude =
Adesk::kFalse)
{
AcDbRegAppTable* pAppTable;
Acad::ErrorStatus es;
// get the RegAppTable
if((es = pDb->getRegAppTable(pAppTable,AcDb::kForWrite)) != Acad::eOk)
return es;
// if RegAppTable has application already - fine
if(pAppTable->has(pAppName))
{
pAppTable->close();
return Acad::eOk;
}
AcDbRegAppTableRecord* pAppTableRecord = new AcDbRegAppTableRecord();
pAppTableRecord->setExcludeFromSaveAsR12(exclude);
pAppTableRecord->setName(pAppName);
if((es = pAppTable->add(pAppTableRecord)) != Acad::eOk)
{
delete pAppTableRecord;
pAppTable->close();
return es;
}
pAppTableRecord->close();
pAppTable->close();
return es;
}
/*
* Add to all lines in model space a point as xData
*/
Acad::ErrorStatus
addXDataToAllLines(AcDbDatabase* pDb,const char *pAppName)
{
AcDbBlockTable *pBlockTable;
AcDbBlockTableRecord *pModelSpace;
Acad::ErrorStatus es;
if((es = pDb->getBlockTable(pBlockTable,AcDb::kForRead)) != Acad::eOk)
return es;
if((es = pBlockTable->getAt(ACDB_MODEL_SPACE,pModelSpace,AcDb::kForRead))
!=
Acad::eOk)
{
pBlockTable->close();
return es;
}
pBlockTable->close();
AcDbBlockTableRecordIterator *pIter;
if((es = pModelSpace->newIterator(pIter)) != Acad::eOk)
{
pModelSpace->close();
return es;
}
AcDbEntity* pEnt;
AcDbLine* pLine;
for(;!pIter->done();pIter->step())
{
if(pIter->getEntity(pEnt,AcDb::kForRead) != Acad::eOk)
continue;
pLine = AcDbLine::cast(pEnt);
if(pLine)
{
struct resbuf* xdata;
AcGePoint3d pntToAttach = pLine->startPoint();
xdata =
ads_buildlist(1001,pAppName,1011,asDblArray(pntToAttach),0);
pLine->upgradeOpen();
if((es = pLine->setXData(xdata)) != Acad::eOk)
{
ads_printf("/nsetXData failed : es =
%s",acadErrorStatusText(es));
}
ads_relrb(xdata);
}
pEnt->close();
}
delete pIter;
return Acad::eOk;
}
void addXDataToExternalDb()
{
Acad::ErrorStatus es;
char* filename = "c://temp//test.dwg";
char* appName = "AcDcApp";
AcDbDatabase *pDb = new AcDbDatabase(Adesk::kFalse);
if((es = pDb->readDwgFile(filename)) != Acad::eOk)
{
ads_printf("/nreadDwgFile failed for %s : es =
%s",filename,acadErrorStatusText(es));
return;
}
if((es = registerApp(pDb,appName)) != Acad::eOk)
ads_printf("/nregisterApp failed : es = %s",acadErrorStatusText(es));
addXDataToAllLines(pDb,appName);
pDb->saveAs("c://temp//test2.dwg");
delete pDb;
}
void initApp()
{
acedRegCmds->addCommand("TEST",
"addx",
"addx",
ACRX_CMD_MODAL,
&addXDataToExternalDb);
}
void unloadApp()
{
acedRegCmds->removeGroup( "TEST" );
}
extern "C" AcRx::AppRetCode acrxEntryPoint( AcRx::AppMsgCode msg, void* p )
{
switch (msg) {
case AcRx::kInitAppMsg:
acrxUnlockApplication( p );
initApp();
break;
case AcRx::kUnloadAppMsg:
unloadApp();
break;
default:
break;
}
return AcRx::kRetOK;
}
- 给ACAD增加个命令,修改外部DWG文件,给所有LINE加扩展数据的完整的ARX代码...
- ARX给CAD发送命令的五种方法
- ARX给CAD发送命令的五种方法
- ARX给CAD发送命令的五种方法
- 给dwg文件进行加密编辑的方法
- ARX如何打开指定位置的DWG文件
- 给PDF文件加个真正的书签
- 给PDF文件加个真正的书签
- [Shell]给linux命令tee输出文件加个时间
- 任一给4个正整数,求出它的所有加和的总数
- 给uiview增加阴影效果的代码
- 给枚举值增加扩展数据
- 给WCF增加提交数据的容量。
- 给数据增加测试数据的存储过程
- 给数据库增加数据的存储过程
- 给表加数据的函数
- 给文件加行号的小程序
- Android Camera开发:给摄像头预览界面加个ZoomBar(附完整代码下载)
- .Net中常见问题及解决方法归类
- 你的.net 2.0 真的能与1.1 安全正确地运行在同一台电脑上吗? 小心Server Application Unavailable 错误
- ASP.NET筆記(本人收集整理)
- 偶然发现这里也有我的博客
- 全球最著名的16位黑客列传(上)
- 给ACAD增加个命令,修改外部DWG文件,给所有LINE加扩展数据的完整的ARX代码...
- SQL Server 中用代码复制表
- 二十世纪的数学
- log4j:ERROR Attempted to append to closed appender named [null].
- Spring--quartz中cronExpression配置说明
- 网页调用rm播放器代码 - 附详细说明
- pvfs提高性能的方法
- WPF中的命令邦定
- 每次移动别的机器上都要重新调用控件