xxwwdd
路人甲
路人甲
  • 注册日期2003-08-19
  • 发帖数88
  • QQ
  • 铜币230枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2195回复:4

一个直接读取ArcGIS的style符号库的函数

楼主#
更多 发布于:2005-04-22 22:57
<P> private void GetStyle(string className, string styleSet, string Category, System.Collections.IList pList)
  {
   string myConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
    @"Data source= " + styleSet;</P>
<P>   OleDbConnection myConnection = new OleDbConnection(myConnectionString);</P>
<P>  
   string cmdText = "SELECT * FROM [" + className + "] Where Category = '" + Category + "'";
   IDbDataAdapter  pAdp = new OleDbDataAdapter(cmdText, myConnection);
   DataSet dataset = new DataSet();
   pAdp.Fill(dataset);  
   IStyleGalleryItem si;
   IPersistStream pPersistStream ;</P>
<P>   for(int i = 0; i < dataset.Tables[0].Rows.Count;i++)
   {</P>
<P>    si = new MyStyleGalleryItem();//ServerStyleGalleryItemClass(); //MyStyleGalleryItem是自己实现的一个StyleGalleryItem
    ((MyStyleGalleryItem)si).ItemID = (int)dataset.Tables[0].Rows["ID"];
    si.Name = (string)dataset.Tables[0].Rows["Name"];
    si.Category = (string)dataset.Tables[0].Rows["Category"];
    </P>
<P>    IMemoryBlobStream pStream = new MemoryBlobStreamClass();
    object pp =dataset.Tables[0].Rows["Object"];
    System.Array pArray = (System.Array)pp;</P>
<P>    int count = pArray.Length - 16;
    byte[] pGuidByte = new byte[16];
    for(int ii = 0; ii < 16; ii++)
    {
     pGuidByte[ii] = (byte)pArray.GetValue(ii);
    }
    System.Guid pGuid = new Guid(pGuidByte);</P>
<P>
//由Guid创建Style对象
    pPersistStream = (IPersistStream)CreateSymbol(pGuid);</P>
<P>    
    byte[] ObjectData = new byte[count];
    for(int ii = 0; ii < count; ii++)
    {
     ObjectData[ii] = (byte)pArray.GetValue(ii + 16);
    }
    ((IMemoryBlobStreamVariant)pStream).ImportFromVariant(ObjectData);
    
    pPersistStream.Load((IStream)pStream );</P>
<P>    si.Item = pPersistStream;</P>
<P>    pList.Add(si);</P>
<P>   }</P>
<P>   myConnection.Close();  
  }</P>
喜欢0 评分0
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于:2005-04-23 03:17
<P>支持一下,兄弟知道读出来后,并用符号设置了图层的符号显示,但是如何设置style里的符号的颜色呢?</P>
<P>下面的代码,是无效的,有兴趣的兄弟可以看看如何实现</P><PRE> Dim pStyleGallery As IStyleGallery
Set pStyleGallery = m_pDoc.StyleGallery</PRE><PRE>' set the symbol type to get
Dim pEnumStyGall As IEnumStyleGalleryItem
Set pEnumStyGall = pStyleGallery.Items("Line Symbols", "", "")
    
Dim pStyleGalleryItem As IStyleGalleryItem
Set pStyleGalleryItem = pEnumStyGall.Next
  
Dim pHiddenSym As ILineSymbol
Dim pUnPavedSym As ILineSymbol
Dim pUnnamedSym As ILineSymbol
Dim pPavedParkingSym As ILineSymbol
Dim pTunnelSym As ILineSymbol
Dim pStreetSym As ILineSymbol
Dim pAlleySym As ILineSymbol
Dim pRampSym As ILineSymbol</PRE><PRE>Set pHiddenSym = New SimpleLineSymbol
   Do Until pStyleGalleryItem Is Nothing
      If pStyleGalleryItem.Name = "Dashed 4:4" Then
            Set pUnnamedSym =pStyleGalleryItem.Item
      ElseIf pStyleGalleryItem.Name = "Road, Unpaved" Then
            Set pUnPavedSym = pStyleGalleryItem.Item
            Set pPavedParkingSym = pStyleGalleryItem.Item
            Set pTunnelSym = pStyleGalleryItem.Item
            Set pAlleySym = pStyleGalleryItem.Item
      ElseIf pStyleGalleryItem.Name = "Residential Street" Then
            Set pStreetSym = pStyleGalleryItem.Item
             pHiddenSym = pStyleGalleryItem.Item
      ElseIf pStyleGalleryItem.Name = "High Occupancy Lane Ramp" Then
            Set pRampSym = pStyleGalleryItem.Item
        End If
        Set pStyleGalleryItem = pEnumStyGall.Next
Loop</PRE><PRE> 'Roads Hidden
    Dim pHiddenRGBColor As IRgbColor
    Set pHiddenRGBColor = New RgbColor
    pHiddenRGBColor.RGB = RGB(124, 124, 124)
    pHiddenSym.Color = pHiddenRGBColor</PRE><PRE> 'Roads Unpaved
    Dim pUnPavedRGBColor As IRgbColor
    Set pUnPavedRGBColor = New RgbColor
    pUnPavedRGBColor.RGB = RGB(0, 0, 0)</PRE><PRE> pUnPavedSym.Color = pUnPavedRGBColor</PRE><PRE>pUnnamedSym.Color = pIntersectRGBColor
 pPavedParkingSym.Color = pHiddenRGBColor</PRE><PRE>  Dim pBridgeRGBColor As IRgbColor
    Set pBridgeRGBColor = New RgbColor
    pBridgeRGBColor.RGB = RGB(232, 190, 255)</PRE><PRE>pTunnelSym.Color = pBridgeRGBColor</PRE><PRE>  Dim pStreetRGBColor As IRgbColor
    Set pStreetRGBColor = New RgbColor
    pStreetRGBColor.RGB = RGB(168, 56, 0)</PRE><PRE>    pStreetSym.Color = pStreetRGBColor</PRE>
[此贴子已经被作者于2005-4-23 3:18:46编辑过]
举报 回复(0) 喜欢(0)     评分
xxwwdd
路人甲
路人甲
  • 注册日期2003-08-19
  • 发帖数88
  • QQ
  • 铜币230枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2005-04-23 21:31
<P>一般从符号库中存放的点、线、面符号都是多层符号类型。因此要从符号库中获得的符号上直接设置Color属性,来修改符号每层颜色要的作用,需要在做符号是确保每层的颜色设置锁为打开状态,要不就需要自己读取出每层的符号设置其颜色,这样才能达到效果</P>
举报 回复(0) 喜欢(0)     评分
septembers
路人甲
路人甲
  • 注册日期2004-11-02
  • 发帖数9
  • QQ
  • 铜币23枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2005-04-25 00:03
我想问一下在Ao中怎样读取一个true type字体并将其加入到地图符号库中去呢?
举报 回复(0) 喜欢(0)     评分
xxwwdd
路人甲
路人甲
  • 注册日期2003-08-19
  • 发帖数88
  • QQ
  • 铜币230枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2005-04-25 20:47
通过 ICharacterMarkerSymbol接口实现和字体关联
举报 回复(0) 喜欢(0)     评分
游客

返回顶部