阅读:5761回复:18
[讨论]engine中如何读取arcgis符号库中符号
<P>如题:在engine开发中如何读取arcgis符号库中符号呢?在ao 用 ISymbolSelector。在engine如何读取呢,请高手指教,谢谢!!!!!!!!</P><img src="images/post/smile/dvbbs/em12.gif" /><img src="images/post/smile/dvbbs/em12.gif" /><img src="images/post/smile/dvbbs/em12.gif" /><img src="images/post/smile/dvbbs/em12.gif" />
|
|
|
1楼#
发布于:2007-11-19 01:26
不错,支持<img src="images/post/smile/dvbbs/em01.gif" />
|
|
2楼#
发布于:2007-10-31 12:42
<P>Engine里没有ISymbolSelector</P>
|
|
3楼#
发布于:2007-10-14 22:21
<P>我定义了一个ISymbolSelector接口变量,但是编译器提示没有定义该类型:“f:\test2\test2view.cpp(587): error C2065: “ISymbolSelectorPtr” : 未声明的标识符”</P>
<P>不知那位大侠指点这是为什么?<BR></P> <P>我是在VC6.0环境中使用的。我刚接触ArcEngine,请大家多多指教!!!谢谢</P><BR> |
|
4楼#
发布于:2005-04-22 21:23
<P>顶</P>
|
|
5楼#
发布于:2005-04-22 11:51
补充:楼上所用的esri.ServerStyle库文件应该是通过ESRI提供的转库工具实现的吧?不过这个转库工具好象有些bug,有一部分ESRI库文件转不过来,所以用了上述方法
|
|
6楼#
发布于:2005-04-22 11:42
<P>TO 万里云、楼主:</P><P> 不好意思,有几天没来了.我的思路是:</P><P>1)写一个转库程序,用ServerStyleGallery类将ESRI符号库中的内容读出,并写入到一个自定义的文件中,如Mystyle.estyle;</P><P>2)用ServerStyleGallery类再次加载Mystyle.estyle库中的符号信息.</P><P>在VS.NET(C++)下成功实现,但在VB环境中还存在问题,正在研究中.....</P><P>上次说的不大清楚,希望这次能够给你提供一些帮助.</P><P>欢迎一起交流.QQ:52882621</P>
|
|
7楼#
发布于:2005-04-21 10:40
<DIV> </DIV><DIV>vb解决方法,我已经实现</DIV><DIV> </DIV><DIV>Dim pStyleGal As IStyleGallery
Dim pStyleStorage As IStyleGalleryStorage Dim pEnumStyleGall As IEnumStyleGalleryItem Dim pStyleItem As IStyleGalleryItem </DIV><DIV> </DIV><DIV>Dim strCategory As String Dim pStyleGalPath As String </DIV><DIV> </DIV><DIV>pStyleGalPath = "e:\ArcGIS\Styles\esri.ServerStyle" </DIV><DIV> </DIV><DIV>Set pStyleGal = New ServerStyleGallery </DIV><DIV> </DIV><DIV> Set pStyleStorage = pStyleGal pStyleStorage.TargetFile = pStyleGalPath strCategory = "Fill Symbols" Set pEnumStyleGall = pStyleGal.Items(strCategory, "", "") pEnumStyleGall.Reset Set pStyleItem = pEnumStyleGall.Next Do Until pStyleItem Is Nothing If UCase("lake") = UCase(pStyleItem.Name) Then Exit Do End If Set pStyleItem = pEnumStyleGall.Next Loop Dim pScreenDisplay As IScreenDisplay Dim pRubberPolygon As IRubberBand Dim pPolygon As IPolygon <FONT color=#000000>Dim pFillSymbol As IFillSymbol Set pScreenDisplay = Me.MapControl1.ActiveView.ScreenDisplay </FONT></DIV><DIV><FONT color=#000000> </FONT></DIV><DIV><FONT color=#000000> </FONT></DIV><DIV><FONT color=#000000> </FONT></DIV><DIV><FONT color=#000000>Set pFillSymbol = pStyleItem.Item </FONT> Set pRubberPolygon = New RubberPolygon Set pPolygon = pRubberPolygon.TrackNew(pScreenDisplay, pFillSymbol) </DIV><DIV> </DIV><DIV>With pScreenDisplay .StartDrawing pScreenDisplay.hDC, esriNoScreenCache .SetSymbol pFillSymbol .DrawPolygon pPolygon .FinishDrawing End With 'Me.MapControl1.ActiveView.Refresh End Sub </DIV> |
|
|
8楼#
发布于:2005-04-21 07:30
<P>好!!!! </P><img src="images/post/smile/dvbbs/em12.gif" /><img src="images/post/smile/dvbbs/em12.gif" /><img src="images/post/smile/dvbbs/em12.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" />
|
|
|
9楼#
发布于:2005-04-20 23:08
<P>我是用的C#</P><P>StyleGallery这个CoClass是在ESRI.ArcGIS.Framework命名空间下的</P><P>而ServerStyleGallery是在ESRI.ArcGIS.Display命名空间下的</P><P>//类的构造函数</P><P>public clsLoadStyle(TreeView temptvw)
{ ptreeView=temptvw; pStyleGlry = new ServerStyleGalleryClass(); // pStylStor = (IStyleGalleryStorage) pStyleGlry ; //系统默认路径,要求shtp_important.ServerStyle必须存放在系统标准style库里 //shtp_important.style为要显示的style库 pStylePath = pStylStor.DefaultStylePath + "shtp_important.ServerStyle"; //将该style文件加到gallerystorage中 pStylStor.AddFile(pStylePath); //如果原stylegallery里有文件,则清空 pStyleGlry.Clear(); //将stylegallery里的item取出,存放在EnumItem里 pEnumItems = pStyleGlry.get_Items("Marker Symbols",pStylePath,""); //指向EnumItem里第一个item pEnumItems.Reset(); // // TOD 在此处添加构造函数逻辑 // }</P><P>//获取指定的图符</P><P>private ISymbol StyleGalleryExample() { //MytreeNode是自定义的一个控件,继承自TreeNode</P><P> MytreeNode node = (MytreeNode)ptreeView.SelectedNode; // //转到第一个Item开始查找 pEnumItems.Reset(); IStyleGalleryItem pStyleItem ; ISymbol psymbol ; //通过styleItem对item进行操作 //如果是叶子节点,则继续 if(node.Tag == 3) { pStyleItem = pEnumItems.Next(); //如果styleItem不为空,且当前Item不是对应节点的Item, //则继续向下查找 while( pStyleItem != null ;;pStyleItem.Name != node.Text ) { //依次向下查找 pStyleItem = pEnumItems.Next(); } //如果找到了当前选择的叶子节点对应的item,则取出其值 if(pStyleItem != null) { IMarkerSymbol pMarkerSym; pMarkerSym = pStyleItem.Item as IMarkerSymbol; //将取得的Item送给symbol psymbol = pMarkerSym as ISymbol; //返回获得的symbol return psymbol; } //如果没有该叶子节点的图符,返回空 else return null; } //如果不是叶子节点,则返回空 else return null; } </P> |
|
上一页
下一页