阅读:1493回复:1
ArcEngine读完CAD不能正确显示
我用arc例子读进去一个CAD文件,结果显示出来不正确, 只有标著, 个别的方框,另一个问题显示的太小,用放大缩小后,放大和缩小怎么刚好相反? 打开的是dwg文件.<br>// 打开CAD文件<br><br>BOOL ImportCadFile( const CString; strFilePath,const CString; strFileName ,CString; strErrorMsg , IMapPtr ipMap)<br>{<br> HRESULT hr;<br> IWorkspaceFactoryPtr ipCadWKS;<br> IWorkspacePtr tempWorkSpace;<br> CString strTemp;<br> <br> int nPos = strFilePath.Find( strFileName ); <br> if( nPos>0 )<br> {<br> strTemp= strFilePath.Left( nPos );<br> }<br> else<br> {<br> strTemp= ".";<br> }<br> BSTR bstrCadPath = strTemp.AllocSysString();<br> BSTR bstrCadFilename =strFileName.AllocSysString();<br> hr = ipCadWKS.CreateInstance( CLSID_CadWorkspaceFactory );<br> if( FAILED( hr ) ){<br> strErrorMsg = L"不能创建工作区对象!";<br> return FALSE;<br> }<br> <br> hr = ipCadWKS->OpenFromFile( bstrCadPath, NULL, ;tempWorkSpace );<br> if( FAILED( hr ) ){<br> strErrorMsg = L"不能打开CAD文件工作区!";<br> return FALSE;<br> }<br> IFeatureWorkspacePtr ipWorkspace( tempWorkSpace );<br> IFeatureClassPtr ipFeatureClass;<br> IFeatureLayerPtr ipCadFeatureLayer;<br> IFeatureDatasetPtr ipFeatureDataset;<br> hr = ipWorkspace->OpenFeatureDataset( bstrCadFilename , ; ipFeatureDataset);<br> if( FAILED( hr ) ){<br> strErrorMsg = L"打开要素集失败!";<br> return FALSE;<br> }<br> LONG lCount;<br> BSTR aliasname;<br> enum esriFeatureType featureType;<br> IFeatureClassContainerPtr ipFeatureClassContainer( ipFeatureDataset );<br> ipFeatureClassContainer->get_ClassCount( ;lCount );<br> for( int nIndex=0;nIndex< lCount;++nIndex )<br> {<br> hr = ipFeatureClassContainer->get_Class( nIndex, ;ipFeatureClass );<br> if( FAILED( hr ) ){<br> strErrorMsg = L"取要素对象失败!";<br> return FALSE;<br> }<br> hr =ipFeatureClass->get_FeatureType( ;featureType );<br> if( FAILED( hr ) ){<br> strErrorMsg = L"取要素类型失败!";<br> return FALSE;<br> }<br> if( featureType == esriFTCoverageAnnotation )<br> {<br> ipCadFeatureLayer.CreateInstance( CLSID_CadAnnotationLayer );<br> }<br> else<br> {<br> ipCadFeatureLayer.CreateInstance( CLSID_FeatureLayer );<br> }<br> ipFeatureClass->get_AliasName( ; aliasname );<br> ipCadFeatureLayer->put_Name( aliasname );<br> ipCadFeatureLayer->putref_FeatureClass( ipFeatureClass );<br> <br> ipMap->AddLayer( ipCadFeatureLayer );<br> }<br><br> ::SysFreeString( bstrCadPath );<br> ::SysFreeString( bstrCadFilename);<br> return TRUE;<br>}<br>//////////<br>//打开文件<br>CString strFilter = L"Auto CAD(*.dwg)|*.dwg|Auto CAD(*.dfx)|*.dxf||";<br> CFileDialog dlg( TRUE,0,0,4|2,(LPCTSTR)strFilter,NULL);<br> TCHAR PathBuf[256];<br> ::GetCurrentDirectory( 256, PathBuf );<br> dlg.m_ofn.lpstrInitialDir = PathBuf;<br> if( IDOK!= dlg.DoModal() )<br> {<br> return;<br> }<br> CString strMsg;<br> if( FALSE == ImportCadFile( dlg.GetPathName(), dlg.GetFileName() ,strMsg ,m_ipMap ) )<br> {<br> AfxMessageBox( strMsg ); <br> return;<br> }<br> IActiveViewPtr ipActiveView( m_ipMap );<br> ipActiveView->Refresh();<br> LONG lCount = 0;<br> m_ipMap->get_LayerCount( ;lCount );<br> ILayerPtr pLayer;<br> VARIANT_BOOL bVisible = TRUE;<br> for( int nIndex=0; nIndex< lCount;++nIndex)<br> {<br> m_ipMap->get_Layer( nIndex, ;pLayer );<br> pLayer->put_Visible( bVisible );<br> }<br>/////////////////////////////////<br>//放大<br> IEnvelopePtr ipEnv;<br> double xMin,yMin,xMax,yMax;<br> IActiveViewPtr ipActiveView( m_ipMap );<br> ipActiveView->get_Extent( ;ipEnv );<br> ipEnv->Expand( 2,2, VARIANT_TRUE );<br> ipActiveView->put_Extent( ipEnv );<br> ipActiveView->Refresh( );<br><br>
|
|
1楼#
发布于:2007-10-19 15:43
怎么每人回答呢?
|
|