jslchzw
路人甲
路人甲
  • 注册日期2004-12-12
  • 发帖数14
  • QQ
  • 铜币153枚
  • 威望0点
  • 贡献值0点
  • 银元0个
10楼#
发布于: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>
举报 回复(0) 喜欢(0)     评分
fnwgz
伴读书童
伴读书童
  • 注册日期2004-09-16
  • 发帖数120
  • QQ
  • 铜币638枚
  • 威望0点
  • 贡献值0点
  • 银元0个
11楼#
发布于: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" />
我也许很笨,但是我一直再努力,没有放弃!
举报 回复(0) 喜欢(0)     评分
万里云
路人甲
路人甲
  • 注册日期2005-01-14
  • 发帖数114
  • QQ
  • 铜币414枚
  • 威望0点
  • 贡献值0点
  • 银元0个
12楼#
发布于: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>
女口果人尔能看日月白这段言舌,那言兑日月人尔白勺目艮目青有严重白勺散光 
举报 回复(0) 喜欢(0)     评分
cumtyinpc
路人甲
路人甲
  • 注册日期2004-06-18
  • 发帖数9
  • QQ
  • 铜币170枚
  • 威望0点
  • 贡献值0点
  • 银元0个
13楼#
发布于: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>
举报 回复(0) 喜欢(0)     评分
cumtyinpc
路人甲
路人甲
  • 注册日期2004-06-18
  • 发帖数9
  • QQ
  • 铜币170枚
  • 威望0点
  • 贡献值0点
  • 银元0个
14楼#
发布于:2005-04-22 11:51
补充:楼上所用的esri.ServerStyle库文件应该是通过ESRI提供的转库工具实现的吧?不过这个转库工具好象有些bug,有一部分ESRI库文件转不过来,所以用了上述方法
举报 回复(0) 喜欢(0)     评分
septembers
路人甲
路人甲
  • 注册日期2004-11-02
  • 发帖数9
  • QQ
  • 铜币23枚
  • 威望0点
  • 贡献值0点
  • 银元0个
15楼#
发布于:2005-04-22 21:23
<P>顶</P>
举报 回复(0) 喜欢(0)     评分
2248911
路人甲
路人甲
  • 注册日期2006-08-11
  • 发帖数4
  • QQ
  • 铜币117枚
  • 威望0点
  • 贡献值0点
  • 银元0个
16楼#
发布于: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>
举报 回复(0) 喜欢(0)     评分
wuyue521_0
路人甲
路人甲
  • 注册日期2006-06-22
  • 发帖数47
  • QQ
  • 铜币272枚
  • 威望0点
  • 贡献值0点
  • 银元0个
17楼#
发布于:2007-10-31 12:42
<P>Engine里没有ISymbolSelector</P>
举报 回复(0) 喜欢(0)     评分
bobosky
路人甲
路人甲
  • 注册日期2003-08-04
  • 发帖数112
  • QQ
  • 铜币492枚
  • 威望0点
  • 贡献值0点
  • 银元0个
18楼#
发布于:2007-11-19 01:26
不错,支持<img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
上一页 下一页
游客

返回顶部