- UID
- 1
- 积分
- 16111
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-3
- 最后登录
- 1970-1-1
|
发表于 2002-7-8 13:27:58
|
显示全部楼层
Re: [求助]:ACAD_PROXY_ENTITY
最初由 ll_j 发布
[B]...则
创建代理。当发出的命令卸载创建自定... [/B]
以前在论坛给大家写过这样的代码的
- [FONT=courier new]
- int CleanProxy ()
- {
- AcDbObjectIdArray proxies;
-
- AcDbBlockTable*pTable;
- acdbCurDwg()->getBlockTable(pTable, AcDb::kForRead );
- if( pTable == NULL ) {
- return RTNORM;
- }
- AcDbBlockTableIterator*pTableIter;
- for( pTable->newIterator(pTableIter); !pTableIter->done();
- pTableIter->step() ) {
- AcDbBlockTableRecord*pRecord;
- pTableIter->getRecord(pRecord,AcDb::kForRead );
-
- if( pRecord == NULL ) {
- ads_printf("\nCannot open a BTR");
- continue;
- }
- AcDbBlockTableRecordIterator*pRecordIter;
-
- for( pRecord->newIterator(pRecordIter); !pRecordIter->done();
- pRecordIter->step() ) {
- AcDbEntity*pEnt;
- pRecordIter->getEntity(pEnt, AcDb::kForRead );
- if(pEnt != NULL ) {
- if( pEnt->isKindOf(AcDbProxyEntity::desc() )
- ) {
- proxies.append(pEnt->objectId() );
- }
- pEnt->close();
- }
- }
- delete pRecordIter;
- pRecord->close();
- }
- delete pTableIter;
-
- if( Acad::eOk != pTable->upgradeOpen() ) {
- ads_printf("\nCannot open table for Write");
- pTable->close();
- return RTNORM;
- }
-
- int nProxies = proxies.length();
- for( int i=0;i<nProxies; i++ ) {
- AcDbProxyEntity*pProxy;
- AcDbObject*pObj;
- acdbOpenAcDbObject(pObj, proxies[i], AcDb::kForRead );
- pProxy = AcDbProxyEntity::cast(pObj);
- if( NULL == pProxy ) {
- pObj->close () ;
- continue;
- }
-
- AcDbVoidPtrArray explodedEnts;
- pProxy->explode( explodedEnts );
- int nExplodedEnts = explodedEnts.length();
- if( nExplodedEnts > 0 ) {
- AcDbBlockTableRecord*pRecord = new
- AcDbBlockTableRecord();
- pRecord->setName("*B");
- AcDbObjectId blockId;
- pTable->add(blockId, pRecord );
- for( int j=0; j<nExplodedEnts; j++ ) {
- AcDbEntity*pEnt =
- (AcDbEntity*)(explodedEnts[j]);
- pRecord->appendAcDbEntity(pEnt);
- pEnt->setColorIndex(0);
- pEnt->close();
- }
- pRecord->close();
-
- AcDbBlockTableRecord*pOwningRecord;
- acdbOpenObject(pOwningRecord, pProxy->ownerId(),
- AcDb::kForWrite );
- if( NULL != pOwningRecord) {
- AcDbBlockReference*pRef = new
- AcDbBlockReference;
- pRef->setBlockTableRecord(blockId);
- pOwningRecord->close();
- pProxy->upgradeOpen();
- pProxy->handOverTo( pRef );
- pRef->setColor( pProxy->color() );
- pRef->setLayer(pProxy->layerId() );
- pRef->setVisibility( pProxy->visibility () );
- delete pProxy;
- pRef->close();
- }
- } else {
- pProxy->close();
- }
- }
- pTable->close();
- return RTNORM;
- }[/FONT]
复制代码 |
|