阅读:2408回复:4
一个直接读取ArcGIS的style符号库的函数
<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> |
|
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编辑过]
|
|
|
2楼#
发布于:2005-04-23 21:31
<P>一般从符号库中存放的点、线、面符号都是多层符号类型。因此要从符号库中获得的符号上直接设置Color属性,来修改符号每层颜色要的作用,需要在做符号是确保每层的颜色设置锁为打开状态,要不就需要自己读取出每层的符号设置其颜色,这样才能达到效果</P>
|
|
3楼#
发布于:2005-04-25 00:03
我想问一下在Ao中怎样读取一个true type字体并将其加入到地图符号库中去呢?
|
|
4楼#
发布于:2005-04-25 20:47
通过 ICharacterMarkerSymbol接口实现和字体关联
|
|