⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modmakesymbols.bas

📁 FloodEvaluation-程序是gis方面的程序
💻 BAS
字号:
Attribute VB_Name = "modMakeSymbols"
Option Explicit

Private Const m_sPicFile As String = "C:\Program Files\ArcGIS\arcexe83\bin\icons\stop.bmp"
Public m_dSize As Double


'******************************************************************
'***********                    ***********************************
'*******       Marker Symbols        ******************************
'***********                    ***********************************
'******************************************************************
Public Function MakeNewSimpleMarkerSymbol() As ISymbol
  Dim pSimpSym As ISimpleMarkerSymbol
  Set pSimpSym = New SimpleMarkerSymbol
  With pSimpSym
    .Size = m_dSize
    .Style = esriSMSCircle
    .Color = RandomColor
    .Outline = True
    .OutlineSize = 0.1
    .OutlineColor = RandomColor
  End With
  
  Set MakeNewSimpleMarkerSymbol = pSimpSym
End Function

Public Function MakeNewArrowMarkerSymbol() As ISymbol
  Dim pArrSym As IArrowMarkerSymbol
  Set pArrSym = New ArrowMarkerSymbol
  With pArrSym
    .Color = RandomColor
    .Size = m_dSize
    .Style = esriAMSPlain
    .Angle = 45
  End With
  
  Set MakeNewArrowMarkerSymbol = pArrSym
End Function

Public Function MakeNewCharacterMarkerSymbol() As ISymbol
  Dim pCharSym As ICharacterMarkerSymbol
  Set pCharSym = New CharacterMarkerSymbol
  With pCharSym
    .Color = RandomColor
    .Size = m_dSize
    .CharacterIndex = 67
    .Font = MakeStdFont("ESRI Default Marker")
  End With
  
  Set MakeNewCharacterMarkerSymbol = pCharSym
End Function

Public Function MakeNewPictureMarkerSymbol() As ISymbol
  Dim pPicSym As IPictureMarkerSymbol
  Set pPicSym = New PictureMarkerSymbol
  With pPicSym
    .Size = m_dSize
    .CreateMarkerSymbolFromFile esriIPictureBitmap, m_sPicFile
  End With
  Set MakeNewPictureMarkerSymbol = pPicSym
End Function

Public Function MakeNewMultiLayerMarkerSymbol() As ISymbol
  Dim pMultiSym As IMultiLayerMarkerSymbol
  Set pMultiSym = New MultiLayerMarkerSymbol
  With pMultiSym
    .Size = m_dSize
    .AddLayer MakeNewPictureMarkerSymbol
    .AddLayer MakeNewCharacterMarkerSymbol
  End With
  
  Set MakeNewMultiLayerMarkerSymbol = pMultiSym
End Function

'******************************************************************
'***********                    ***********************************
'*******       Line Symbols        ******************************
'***********                    ***********************************
'******************************************************************
Public Function MakeNewSimpleLineSymbol() As ISymbol
  Dim pSimpSym As ISimpleLineSymbol
  Set pSimpSym = New SimpleLineSymbol
  With pSimpSym
    .Color = RandomColor
    .Width = m_dSize
    .Style = esriSLSDashDot
  End With
  
  Set MakeNewSimpleLineSymbol = pSimpSym
End Function

Public Function MakeNewMarkerLineSymbol() As ISymbol
  Dim pMarkSym As IMarkerLineSymbol
  Set pMarkSym = New MarkerLineSymbol
  With pMarkSym
    .Width = m_dSize
    Set .MarkerSymbol = MakeNewSimpleMarkerSymbol
  End With
  
  SetStdLineProperties pMarkSym, pMarkSym.MarkerSymbol.Size, pMarkSym.MarkerSymbol.Size * 2
  
  Set MakeNewMarkerLineSymbol = pMarkSym
End Function

Public Function MakeNewHashLineSymbol() As ISymbol
  Dim pHashSym As IHashLineSymbol
  Set pHashSym = New HashLineSymbol
  With pHashSym
    .Width = m_dSize
    Set .HashSymbol = MakeNewSimpleLineSymbol
  End With
  
  SetStdLineProperties pHashSym, pHashSym.HashSymbol.Width, pHashSym.HashSymbol.Width * 2
  
  Set MakeNewHashLineSymbol = pHashSym
End Function

Public Function MakeNewCartographicLineSymbol() As ISymbol
  Dim pCartSym As ICartographicLineSymbol
  Set pCartSym = New CartographicLineSymbol
  With pCartSym
    .Color = RandomColor
    .Width = m_dSize
    .Cap = esriLCSRound
    .Join = esriLJSMitre
  End With
  
  SetStdLineProperties pCartSym, pCartSym.Width, pCartSym.Width * 2
  
  Set MakeNewCartographicLineSymbol = pCartSym
End Function

Public Function MakeNewPictureLineSymbol() As ISymbol
  Dim pPicSym As IPictureLineSymbol
  Set pPicSym = New PictureLineSymbol
  With pPicSym
    .Width = m_dSize
    .CreateLineSymbolFromFile esriIPictureBitmap, m_sPicFile
  End With
  
  Set MakeNewPictureLineSymbol = pPicSym
End Function

Public Function MakeNewMultiLayerLineSymbol() As ISymbol
  Dim pMultiSym As IMultiLayerLineSymbol
  Set pMultiSym = New MultiLayerLineSymbol
  With pMultiSym
    .Width = m_dSize
    m_dSize = m_dSize / 2
    .AddLayer MakeNewSimpleLineSymbol
    m_dSize = m_dSize * 2
    .AddLayer MakeNewMarkerLineSymbol
  End With
  
  Set MakeNewMultiLayerLineSymbol = pMultiSym
End Function

'******************************************************************
'***********                    ***********************************
'*******       Fill Symbols        ******************************
'***********                    ***********************************
'******************************************************************
Public Function MakeNewSimpleFillSymbol() As ISymbol
  Dim pSimpSym As ISimpleFillSymbol
  Set pSimpSym = New SimpleFillSymbol
  With pSimpSym
    .Color = RandomColor
    .Style = esriSFSSolid
    .Outline = MakeNewSimpleLineSymbol
  End With
  
  Set MakeNewSimpleFillSymbol = pSimpSym
End Function

Public Function MakeNewPictureFillSymbol() As ISymbol
  Dim pPicSym As IPictureFillSymbol
  Set pPicSym = New PictureFillSymbol
  With pPicSym
    .CreateFillSymbolFromFile esriIPictureBitmap, m_sPicFile
    .Angle = 30
  End With
  
  Set MakeNewPictureFillSymbol = pPicSym
End Function

Public Function MakeNewGradientFillSymbol(pLineSymbol As ISimpleLineSymbol) As ISymbol
  Dim pGradSym As IGradientFillSymbol
  Set pGradSym = New GradientFillSymbol
  With pGradSym
    .ColorRamp = MakeNewRamp
    .GradientAngle = 25
    .GradientPercentage = 1
    .IntervalCount = 100
    .Style = esriGFSLinear
    .Outline = pLineSymbol
  End With
  
  Set MakeNewGradientFillSymbol = pGradSym
End Function

Public Function MakeNewMarkerFillSymbol() As ISymbol
  Dim pMarkSym As IMarkerFillSymbol
  Set pMarkSym = New MarkerFillSymbol
  With pMarkSym
    Set .MarkerSymbol = MakeNewCharacterMarkerSymbol
    .GridAngle = 60
    .Style = esriMFSGrid
    '.Outline = MakeNewSimpleLineSymbol
  End With
  
  Set MakeNewMarkerFillSymbol = pMarkSym
End Function

Public Function MakeNewLineFillSymbol() As ISymbol
  Dim pLineSym As ILineFillSymbol
  Set pLineSym = New LineFillSymbol
  With pLineSym
    .Separation = m_dSize * 1.5
    Set .LineSymbol = MakeNewSimpleLineSymbol
  End With
  
  Set MakeNewLineFillSymbol = pLineSym
End Function

Public Function MakeNewMultiLayerFillSymbol() As ISymbol
  Dim pMultiSym As IMultiLayerFillSymbol
  Set pMultiSym = New MultiLayerFillSymbol
  With pMultiSym
    .AddLayer MakeNewSimpleFillSymbol
    .AddLayer MakeNewMarkerFillSymbol
    '.Outline = MakeNewSimpleLineSymbol
  End With
  
  Set MakeNewMultiLayerFillSymbol = pMultiSym
End Function

Public Function MakeNewDotDensityFillSymbol() As ISymbol
  Dim pDotSym As IDotDensityFillSymbol
  Set pDotSym = New DotDensityFillSymbol
  With pDotSym
    .Color = RandomColor
    SetSymArrayMarkers pDotSym
    .BackgroundColor = RandomColor
    .DotCount(0) = 100
    .DotCount(1) = 50
    .DotSize = 2
    .DotSpacing = 2
    .FixedPlacement = False
    .Outline = MakeNewSimpleLineSymbol
  End With
  
  Set MakeNewDotDensityFillSymbol = pDotSym
End Function

'******************************************************************
'***********                    ***********************************
'********       Chart Symbols       ******************************
'***********                    ***********************************
'******************************************************************
Public Function MakeNewPieChartSymbol() As ISymbol
  Dim pPieSym As IPieChartSymbol
  Set pPieSym = New PieChartSymbol
  With pPieSym
    .Clockwise = True
  End With
  
  SetSymArrayFills pPieSym
  
  Dim pChart As IChartSymbol
  Set pChart = pPieSym
  With pChart
    .MaxValue = 10
    .Value(0) = 3
    .Value(1) = 10
  End With
  
  Dim p3DChart As I3DChartSymbol
  Set p3DChart = pPieSym
  With p3DChart
    .Display3D = True
    .Thickness = 20
    .Tilt = 30
  End With
  
  Set MakeNewPieChartSymbol = pPieSym
End Function

Public Function MakeNewBarChartSymbol() As ISymbol
  Dim pBarSym As IBarChartSymbol
  Set pBarSym = New BarChartSymbol
  With pBarSym
    .ShowAxes = True
    .Spacing = 2
    .VerticalBars = True
    .Width = 20
  End With
  
  SetSymArrayFills pBarSym
  
  Dim pChart As IChartSymbol
  Set pChart = pBarSym
  With pChart
    .MaxValue = 10
    .Value(0) = 3
    .Value(1) = 10
  End With
  
  Dim p3DChart As I3DChartSymbol
  Set p3DChart = pBarSym
  With p3DChart
    .Display3D = True
    .Thickness = 20
    '.Tilt = 30
  End With
  
  Set MakeNewBarChartSymbol = pBarSym
End Function

Public Function MakeNewStackedChartSymbol() As ISymbol
  Dim pStackSym As IStackedChartSymbol
  Set pStackSym = New StackedChartSymbol
  With pStackSym
    .Fixed = False
    .UseOutline = True
    .VerticalBar = False
    .Width = 30
  End With
  
  SetSymArrayFills pStackSym
  
  Dim pChart As IChartSymbol
  Set pChart = pStackSym
  With pChart
    .MaxValue = 10
    .Value(0) = 3
    .Value(1) = 10
  End With
  
  Dim p3DChart As I3DChartSymbol
  Set p3DChart = pStackSym
  With p3DChart
    .Display3D = True
    .Thickness = 20
    '.Tilt = 30
  End With
  
  Set MakeNewStackedChartSymbol = pStackSym
End Function

'******************************************************************
'***********                    ***********************************
'********       Misc Symbols       ******************************
'***********                    ***********************************
'******************************************************************
Public Function MakeNewTextSymbol() As ISymbol
  Dim pTxtSym As ITextSymbol
  Set pTxtSym = New TextSymbol
  With pTxtSym
    .Color = RandomColor
    .Font = MakeStdFont("Helvetica")
    .Size = m_dSize
    .Text = Format(Now, "HH:MM:SS")
    .VerticalAlignment = esriTVACenter
  End With
  
  Set MakeNewTextSymbol = pTxtSym
End Function

Public Function MakeNewColorSymbol() As ISymbol
  Dim pColSym As IColorSymbol
  Set pColSym = New ColorSymbol
  With pColSym
    .Color = RandomColor
  End With
  
  Set MakeNewColorSymbol = pColSym
End Function

Public Function MakeNewColorRampSymbol() As ISymbol
  Dim pColSym As IColorRampSymbol
  Set pColSym = New ColorRampSymbol
  With pColSym
    .ColorRamp = MakeNewRamp
    .Invert = False
  End With
  
  Set MakeNewColorRampSymbol = pColSym
End Function

'******************************************************************
'***********                        ***********************************
'********       Utility functions       ******************************
'***********                        ***********************************
'******************************************************************

Public Function MakeNewTemplate(Optional dMark As Double = 10, Optional dGap As Double = 20) As ITemplate
  Set MakeNewTemplate = New Template
  MakeNewTemplate.AddPatternElement m_dSize, m_dSize * 2
  MakeNewTemplate.Interval = 1 'm_dSize * 3
End Function

Public Sub SetStdLineProperties(ByRef pLineProps As ILineProperties, ByVal dMark As Double, ByVal dGap As Double)
  If Not pLineProps Is Nothing Then
    With pLineProps
      Set .Template = MakeNewTemplate(dMark, dGap)
    End With
  End If
End Sub

Public Function MakeStdFont(Optional ByVal sName As String = "ESRI Default Marker") As StdFont
  Set MakeStdFont = New stdole.StdFont
  MakeStdFont.name = sName
End Function

Public Sub SetSymArrayMarkers(ByRef pArray As ISymbolArray)
  Dim pMarker As ISimpleMarkerSymbol
  Set pMarker = New SimpleMarkerSymbol
  pMarker.Color = RandomColor
  pMarker.Style = esriSMSCircle
  pArray.AddSymbol pMarker
  Set pMarker = New SimpleMarkerSymbol
  pMarker.Color = RandomColor
  pMarker.Style = esriSMSCross
  pArray.AddSymbol pMarker
    
End Sub

Public Sub SetSymArrayFills(ByRef pArray As ISymbolArray)
  Dim pFill As ISimpleFillSymbol
  Set pFill = New SimpleFillSymbol
  pFill.Color = RandomColor
  pFill.Style = esriSFSSolid
  pArray.AddSymbol pFill
  Set pFill = New SimpleFillSymbol
  pFill.Color = RandomColor
  pFill.Style = esriSFSSolid
  pArray.AddSymbol pFill
    
End Sub

Public Function RandomColor() As IColor
  Randomize

  Set RandomColor = New RgbColor
  RandomColor.RGB = CLng((16777214) * Rnd + 1)
End Function

Public Function MakeNewRamp() As IColorRamp
  Dim pRamp As IAlgorithmicColorRamp, pColor As IColor
  Set pRamp = New AlgorithmicColorRamp
  pRamp.FromColor = RandomColor
  pRamp.ToColor = RandomColor
  pRamp.Algorithm = esriLabLChAlgorithm
  
  Set MakeNewRamp = pRamp
End Function


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -