博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CAD注记层转到SDE Annotation Features(ArcEngine,C++实现)(转载)
阅读量:6094 次
发布时间:2019-06-20

本文共 3161 字,大约阅读时间需要 10 分钟。

CAD注记层转到SDE Annotation Features本文会提到两种方式,不过都是要添加一个element,所以,首先给出一个创建element的函数

ITextElementPtr MakeTextElement(CString strText, double x, double y) {
HRESULT hr; ITextElementPtr ipTextElement(CLSID_TextElement); hr = ipTextElement->put_ScaleText(VARIANT_TRUE); hr = ipTextElement->put_Text(CComBSTR(strText)); IGroupSymbolElementPtr ipGroupSymEle = ipTextElement; ipGroupSymEle->put_SymbolID(0); IPointPtr ipPoint(CLSID_Point); ipPoint->put_X(x); ipPoint->put_Y(y); IElementPtr ipElement = ipTextElement; ipElement->put_Geometry(ipPoint); return ipTextElement; }

第一种办法,通过IFDOGraphicsLayer添加Elements的方式实现,实现办法如下

BOOL AddTextElementEx(CString strText, double x, double y) {
HRESULT hr; IFeatureWorkspacePtr ipFeatWorkspace = m_ipWorkspace; if(ipFeatWorkspace == NULL) return FALSE; IFeatureClassPtr ipFeatureClass; hr = ipFeatWorkspace->OpenFeatureClass(CComBSTR(_T("abc")),&ipFeatureClass); IWorkspaceEditPtr ipWorkspaceEdit = m_ipWorkspace; if(ipWorkspaceEdit==NULL) return FALSE; IDatasetPtr ipDataset(ipFeatureClass); IFDOGraphicsLayerFactoryPtr ipFDOGLFactory(CLSID_FDOGraphicsLayerFactory); IWorkspacePtr ipWs; ipDataset->get_Workspace(&ipWs); IFeatureWorkspacePtr ipFeatWs(ipWs); IFeatureDatasetPtr ipFeatDataset; ipFeatureClass->get_FeatureDataset(&ipFeatDataset); ILayerPtr ipLayer; BSTR bstr; hr = ipDataset->get_Name(&bstr); hr = ipFDOGLFactory->OpenGraphicsLayer(ipFeatWs,ipFeatDataset,bstr,&ipLayer);  if(FAILED(hr))
return FALSE;IFDOGraphicsLayerPtr ipFDOGLayer(ipLayer);
IElementCollectionPtr ipElementColl;     hr = ipElementColl.CreateInstance(CLSID_ElementCollection);     if(FAILED(hr)||ipElementColl==NULL)         return FALSE;     ITextElementPtr ipTextElement = MakeTextElement(strText,x,y);     hr = ipElementColl->Add((IElementPtr)ipTextElement,-1);     hr = ipFDOGLayer->BeginAddElements();     hr = ipFDOGLayer->DoAddElements(ipElementColl,0);     hr = ipFDOGLayer->EndAddElements();     return TRUE; }

 第二种方式,通过IAnnotationFeature来实现,实现代码如下

BOOL AddTextElement(CString strText, double x, double y) {
HRESULT hr; IFeatureWorkspacePtr ipFeatWorkspace = m_ipWorkspace; if(ipFeatWorkspace == NULL) return FALSE; IFeatureClassPtr ipFeatureClass; hr = ipFeatWorkspace->OpenFeatureClass(CComBSTR(_T("abc")),&ipFeatureClass); IWorkspaceEditPtr ipWorkspaceEdit = m_ipWorkspace; if(ipWorkspaceEdit==NULL) return FALSE; hr = ipWorkspaceEdit->StartEditing(TRUE); hr = ipWorkspaceEdit->StartEditOperation(); hr = ipWorkspaceEdit->EnableUndoRedo(); IElementPtr ipElement = MakeTextElement(strText,x , y); IAnnotationFeaturePtr ipAnnotationFeature = ipFeature; if(ipAnnotationFeature == NULL) return FALSE; hr=ipAnnotationFeature->put_Annotation(ipElement); ipWorkspaceEdit->DisableUndoRedo(); ipWorkspaceEdit->StopEditOperation(); ipWorkspaceEdit->StopEditing(TRUE); return TRUE; }

  这两种方法,经过实际测试都可以成功,在导入的时候还需要注意一下空间参考系的问题,需要对应上,特别要注意dwg中的数据是否正确,如果注记的坐标不在参考系范围内,会出现导入失败的现象,我就是因为这个低级的错误,纠结了两天。

  

参考资料:

转载地址:http://wuwza.baihongyu.com/

你可能感兴趣的文章
下一步瞄准室内,u-blox厘米级高精定位为自动驾驶铺路
查看>>
Kodi 基金会加入 Linux 基金会,帮助发展开源运动
查看>>
Linux下用户的创建与删除
查看>>
python3中的进程
查看>>
[LeetCode]1-bit and 2-bit Characters 1位和2位字符
查看>>
[网络基础] Web请求与响应
查看>>
锋利 RAM 合集
查看>>
Python Vs R:数据科学家的永恒问题
查看>>
redis 学习指南
查看>>
探索Redis设计与实现10:Redis的事件驱动模型与命令执行过程
查看>>
Android多线程之Handler、Looper与MessageQueue源码解析
查看>>
counchbase springmvc maven (nosql)
查看>>
希尔排序(shell‘ sort)
查看>>
【Helm】release太多导致报错,一次从问题排查,修改源码编译到构建tiller镜像修复的经历...
查看>>
独家解密 | 第三届Aliware生态大会探访
查看>>
第十六章:数据绑定(一)
查看>>
数据库入门-pymysql模块的使用
查看>>
如何在命令长度受限的情况下成功get到webshell(函数参数受限突破、mysql的骚操作)...
查看>>
Linux基础命令---mktemp
查看>>
JavaScript 2018 中即将迎来的新功能
查看>>