xiaolinzi
路人甲
路人甲
  • 注册日期2004-03-29
  • 发帖数35
  • QQ
  • 铜币149枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1889回复:3

为什么打开CAD图形文件没有反应啊?(详见代码)

楼主#
更多 发布于:2007-08-24 10:27
<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>
喜欢0 评分0
whmwxhanshan123
路人甲
路人甲
  • 注册日期2006-06-17
  • 发帖数3108
  • QQ
  • 铜币6445枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2007-08-24 23:51
<img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
jiangying
路人甲
路人甲
  • 注册日期2005-11-15
  • 发帖数8
  • QQ
  • 铜币131枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
举报 回复(0) 喜欢(0)     评分
xiaolinzi
路人甲
路人甲
  • 注册日期2004-03-29
  • 发帖数35
  • QQ
  • 铜币149枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2007-09-01 17:40
<P>多谢你的回答                 </P><img src="images/post/smile/dvbbs/em02.gif" />
举报 回复(0) 喜欢(0)     评分
游客

返回顶部