bool ArxEntityHelper::SelectEntities( const AcDbObjectIdArray& objIds ) { //acedSSSetFirst(NULL, NULL); if( objIds.isEmpty() ) return false; ads_name ss; //创建一个空的选择集 if(RTNORM != acedSSAdd( NULL, NULL, ss )) return false; bool ret = true; for(int i=0;i<objIds.length();i++) { ads_name ename; if( Acad::eOk != acdbGetAdsName( ename, objIds[i] ) ) { ret = false;; break; } if( RTNORM != acedSSAdd( ename, ss, ss ) ) // 添加到选择集 { ret = false;; break; } } if(ret) { acedSSSetFirst( ss, NULL ); // 高亮选中 } acedSSFree( ss ); // 释放选择集 return ret; }
/* * 帮助文档中acedSSSetFirst以及acedSSGetFirst * 要求使用它的命令应该开启ACRX_CMD_USEPICKSET和ACRX_CMD_REDRAW选项 * 但测试结果显示,貌似不使用也可以?????? */ bool ArxEntityHelper::SelectEntity( const AcDbObjectId& objId ) { //acedSSSetFirst(NULL, NULL); if( objId.isNull() ) return false; ads_name ename; if( Acad::eOk != acdbGetAdsName( ename, objId ) ) return false;; ads_name ss; if( RTNORM != acedSSAdd( ename, NULL, ss ) ) return false; // 创建选择集 acedSSSetFirst( ss, NULL ); // 高亮选中 acedSSFree( ss ); // 释放选择集 return true; }
CTwAutoRedraw::CTwAutoRedraw() { ads_name_clear( m_ss ); acedSSAdd( NULL, NULL, m_ss ); }
//////////////////////////////////////////////////////////////////////////////// // drawMaterial() // // Draws a cube of the dimension "dCubeSize" at the position "corner", draws the // name of the material "sMaterial" under the cube, and applies the material // "sMaterial" to the cube. // // Returns AvRetNorm unless it encounters an error in acdbEntLast(), in // which case it returns AvRetError. // static AvErrorCode drawMaterial(ads_point corner, double dCubeSize, char *sMaterial, char *sLibPath) { AvErrorCode retval; AvMatlibParam libParam; AvRmatParam rmatParam; ads_name entity, selectionSet; drawCube(corner, dCubeSize); // Get the cube we just created // if (acdbEntLast(entity) != RTNORM) { acdbFail("acdbEntLast failed\n"); return AvRetError; } acedSSAdd(entity, NULL, selectionSet); drawMaterialName(corner, dCubeSize, sMaterial); // Retrieve the material from the library // libParam.mode = AvMatlibImport; libParam.libraryName = sLibPath; libParam.materialName = sMaterial; libParam.flags = AvMatlibMaterial | AvMatlibLibrary; if((retval = av_matlib(&libParam)) != AvRetNorm) { acutPrintf("error: %s importing %s\n", av_errorstr(retval), sMaterial); } else { // Apply the material to the drawing // rmatParam.mode = AvRmatAttach; rmatParam.selectionSet[0] = selectionSet[0]; rmatParam.selectionSet[1] = selectionSet[1]; rmatParam.name = sMaterial; rmatParam.flags = AvRmatSelSet | AvRmatName; if((retval = av_rmat(&rmatParam)) != AvRetNorm) { acutPrintf("error: %s attaching %s\n", av_errorstr(retval), sMaterial); } else { acutPrintf("attached material %s\n", sMaterial); } } acedSSFree(selectionSet); return AvRetNorm; }