bool PropertyDataUpdater::ReadDataFromGE( CMFCPropertyGridCtrl* pPropDataList, const AcDbObjectId& objId ) { if( pPropDataList == NULL ) return false; if( objId.isNull() ) return false; //PrintPropList(pPropDataList); // 填充内容 AcTransaction* pTrans = actrTransactionManager->startTransaction(); if( pTrans == 0 ) return false; AcDbObject* pObj; if( Acad::eOk != pTrans->getObject( pObj, objId, AcDb::kForRead ) ) { actrTransactionManager->abortTransaction(); return false; } DataObject* pDO = DataObject::cast( pObj ); if( pDO == 0 ) { actrTransactionManager->abortTransaction(); return false; } //acutPrintf(_T("\n读取数据...")); DataHelperImpl dh( pDO ); int nCount = pPropDataList->GetPropertyCount(); for ( int i = 0; i < nCount; i++ ) { CMFCPropertyGridProperty* pProp = pPropDataList->GetProperty( i ); CString value; dh.getPropertyData( pProp->GetName(), value ); // 更新属性数据 FieldInfo info; // 默认设置(DT_STRING, m_enable=true, m_descr =_T("")) FieldInfoHelper::ReadFieldInfo( pDO->getType(), pProp->GetName(), info ); SetPropValue( pProp, info, value ); // 设置属性值 //DATA_TYPE dt = info.m_dt; //LIST_TYPE lt = info.m_lt; //if (dt == DT_LIST && lt == LT_INT) //{ // //} } actrTransactionManager->endTransaction(); //PrintPropList(pPropDataList); return true; }
// 根据类型名称查找 static void FilterDataObject( const AcDbObjectIdArray& dbObjIds, const CString& type, AcDbObjectIdArray& objIds ) { AcTransaction* pTrans = actrTransactionManager->startTransaction(); if( pTrans == 0 ) return; int len = dbObjIds.length(); for( int i = 0; i < len; i++ ) { AcDbObject* pObj; if( Acad::eOk != pTrans->getObject( pObj, dbObjIds[i], AcDb::kForRead ) ) continue; DataObject* pDO = DataObject::cast( pObj ); if( pDO == 0 ) continue; if( type == pDO->getType() ) { objIds.append( dbObjIds[i] ); } } actrTransactionManager->endTransaction(); }