コード例 #1
0
STDMETHODIMP [!output CLASS_NAME]::AddToDb (AcDbObjectId &objId, AcDbObjectId ownerId /*=AcDbObjectId::kNull*/, TCHAR *keyName /*=NULL*/) {
	try {
		AcAxDocLock docLock (ownerId) ;

		Acad::ErrorStatus es ;
		AcAxObjectRefPtr<[!output ARX_CLASS_NAME]> obj (&m_objRef, AcDb::kForRead) ;

[!if ACAD_ENTITY_INTERFACE]
		//----- Entities can be owned by block table records only
		AcDbBlockTableRecordPointer pBlockTableRecord (ownerId, AcDb::kForWrite, true) ;
		if ( (es =pBlockTableRecord.openStatus ()) != Acad::eOk )
			throw es ;

		if ( (es =pBlockTableRecord->appendAcDbEntity (objId, obj.object ())) != Acad::eOk )
			throw es ;
[!else]
		//----- Non-entities cannot be owned by block table record, but are
		//----- usually owned by dictionaries. If this is not your case, please
		//----- change the code below.
		AcDbDictionaryPointer pDictionary (ownerId, AcDb::kForWrite, true) ;
		if ( (es =pDictionary.openStatus ()) != Acad::eOk )
			throw es ;

		if ( (es =pDictionary->setAt (keyName, obj.object (), objId)) != Acad::eOk )
			throw es ;
[!endif]
	} catch( const Acad::ErrorStatus ) {
		return (Error(L"Failed to add [!output ARX_CLASS_NAME] to database", IID_[!output INTERFACE_NAME], E_FAIL)) ;
	}
	return (SetObjectId (objId)) ;
}
コード例 #2
0
ファイル: GraphListCtrl.cpp プロジェクト: kanbang/SVN
Acad::ErrorStatus CGraphListCtrl::GetBlock1( LPCTSTR szBlockName, AcDbBlockTableRecord*& pBlockRecord )
{
	Acad::ErrorStatus es;
	pBlockRecord = NULL;

	AcDbBlockTableRecordPointer pSrcRc(szBlockName, m_pCurDb, AcDb::kForRead);
	es = pSrcRc.openStatus();
	if (Acad::eOk != es)
		return es;

	AcDbBlockTablePointer pDestTbl(m_DefDb, AcDb::kForRead);
	es = pDestTbl.openStatus();
	if (Acad::eOk != es)
		return es;

	AcDbBlockTableRecordPointer pDestRc;
	pDestRc.create();
	es = pDestRc.openStatus();
	if (Acad::eOk != es)
		return es;

	es = pDestRc->setName(szBlockName);
	if (Acad::eOk != es)
		return es;

	pDestTbl->upgradeOpen();
	es = pDestTbl->add(pDestRc.object());
	pDestTbl->downgradeOpen();
	if (Acad::eOk != es)
		return es;

	AcDbBlockTableRecordIterator* pIter = NULL;
	es = pSrcRc->newIterator(pIter);
	if (Acad::eOk != es)
		return es;

	AcDbObjectId objId;
	AcDbIdMapping idMap;
	AcDbObject* pObject = NULL;
	for (pIter->start(); !pIter->done(); pIter->step())
	{
		es = pIter->getEntityId(objId);
		if (Acad::eOk != es)
			continue;

		AcDbEntityPointer pEnt(objId, AcDb::kForRead);
		es = pEnt.openStatus();
		if (Acad::eOk != es)
			continue;

		if (pEnt->isKindOf(AcDbText::desc()))
		{
			continue;
		}

		es = pEnt->deepClone(pDestRc.object(), pObject, idMap, true);
		if (Acad::eOk != es)
			continue;

		pObject->close();
	}

	pBlockRecord = pDestRc.object();
	return es;
}