阅读:2069回复:3
为什么打开CAD图形文件没有反应啊?(详见代码)
<DIV>请大家帮忙看下,敬请指正谢谢!<BR>////////////////////////////<BR>/**<BR>*打开CAD图形文件,添加到Map<BR>*/<BR>void CAOEXView::OnOpencadfile()<BR>{<BR>// 设置打开文件的过滤条件<BR>CString strFilter;<BR>strFilter = "Auto CAD(*.dxf)|*.dxf| Auto CAD(*.dwg)|*.dwg||";<BR>//定义打开对话框<BR>CFileDialog pDlg(TRUE,0,0,OFN_ALLOWMULTISELECT|OFN_EXPLORER<BR> |OFN_LONGNAMES|OFN_FILEMUSTEXIST<BR> |OFN_HIDEREADONLY,<BR> (LPCTSTR)strFilter,<BR> NULL);<BR>//设置对话框<BR>CString strTitle = "选择要打开的CAD文件";<BR>pDlg.m_ofn.lpstrTitle = strTitle;<BR>if(IDCANCEL == pDlg.DoModal())<BR> return;<BR>//打开对话框,得到文件的名字等。<BR>CString strExt,strPath;<BR>strExt = pDlg.GetFileExt();<BR>strPath = pDlg.GetPathName();<BR>if(!(strExt.IsEmpty()))<BR>{<BR> int temp;<BR> temp = strPath.ReverseFind('\\');<BR> strPath = strPath.Left(temp);<BR>}<BR><BR>//定义CadWorkspaceFactory<BR>IWorkspaceFactoryPtr ipCadWKSFact(CLSID_CadWorkspaceFactory);<BR>IWorkspacePtr ipwspace;<BR>//打开工作空间<BR>HRESULT hr = ipCadWKSFact->OpenFromFile(L"strpath",NULL,;ipwspace);<BR>if(FAILED(hr)) return;<BR>//接口查询<BR>IFeatureWorkspacePtr ipWorkspace(ipwspace);<BR>IFeatureLayerPtr ipCadFeatureLayer;//Cad要素层<BR>IFeatureDatasetPtr ipFeatureDataset;//要素集<BR>IFeatureClassPtr ipFeatureClass;//要素类<BR>CString strTemp;<BR>int iPathLength = strPath.GetLength();<BR>POSITION pos;<BR>pos = pDlg.GetStartPosition();<BR>ISetPtr ipSet(CLSID_Set);<BR>//打开所选择的多个图层<BR>while(pos !=NULL)<BR>{<BR> strTemp = pDlg.GetNextPathName(pos);<BR> strTemp = strTemp.Right(strTemp.GetLength()-(iPathLength+1));<BR> //打开CAD数据集<BR> hr = ipWorkspace->OpenFeatureDataset(L"StrTemp",;ipFeatureDataset);<BR> if(FAILED(hr)) return;<BR> <BR> //获得IFeatureClassContainer接口<BR> IFeatureClassContainerPtr ipFeatureClassContainer(ipFeatureDataset);<BR> //得到要素集中要素类的数量<BR> long lTemp;<BR> ipFeatureClassContainer->get_ClassCount(;lTemp);<BR> enum esriFeatureType featuretype;<BR> BSTR aliasname;<BR> for(int i = 0;i<lTemp;i++)<BR> {<BR> //得到要素类 <BR> hr = ipFeatureClassContainer->get_Class(i,;ipFeatureClass);<BR> if(FAILED(hr)) return;<BR> <BR> //得到要素的类型<BR> hr = ipFeatureClass->get_FeatureType(;featuretype);<BR> if(FAILED(hr)) return;<BR> //如果是注记层,则创建注记层<BR> if(featuretype ==esriFTCoverageAnnotation)<BR> {<BR> CoCreateInstance(CLSID_CadAnnotationLayer,NULL,CLSCTX_ALL,<BR> IID_IFeatureLayer,(void* *);ipCadFeatureLayer);<BR> if(ipCadFeatureLayer == NULL) return;<BR> }<BR> //否则创建Cad要素层<BR> else<BR> {<BR> CoCreateInstance(CLSID_CadFeatureLayer,NULL,CLSCTX_ALL,<BR> IID_IFeatureLayer,(void* *);ipCadFeatureLayer);<BR> if(ipCadFeatureLayer == NULL) return;<BR> }<BR> ipFeatureClass->get_AliasName(;aliasname);<BR> ipCadFeatureLayer->put_Name(aliasname);<BR> //将要素类置于CadFeatureLayer中<BR> ipCadFeatureLayer->putref_FeatureClass(ipFeatureClass);<BR> //将Cad图层添加到Map对象<BR> hr = m_ipMap->AddLayer(ipCadFeatureLayer);<BR> if(FAILED(hr)) return;<BR> }<BR>}<BR> IActiveViewPtr ipActiveView(m_ipMap);<BR>ipActiveView->Refresh();<BR>}</DIV>
|
|
1楼#
发布于:2007-08-24 23:51
<img src="images/post/smile/dvbbs/em01.gif" />
|
|
2楼#
发布于:2007-08-31 16:19
<P>修改以下2句</P>
<P>//打开工作空间<BR>HRESULT hr = ipCadWKSFact->OpenFromFile(CComBSTR(strPath),NULL,;ipwspace);</P> <P>//打开CAD数据集<BR>hr = ipWorkspace->OpenFeatureDataset(CComBSTR(strTemp),;ipFeatureDataset);</P> |
|
3楼#
发布于:2007-09-01 17:40
<P>多谢你的回答 </P><img src="images/post/smile/dvbbs/em02.gif" />
|
|