📄 clscreatestripmap.cls
字号:
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "clsCreateStripMap"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
' Copyright 2006 ESRI
'
' All rights reserved under the copyright laws of the United States
' and applicable international laws, treaties, and conventions.
'
' You may freely redistribute and use this sample code, with or
' without modification, provided you include the original copyright
' notice and use restrictions.
'
' See use restrictions at /arcgis/developerkit/userestrictions.
Option Explicit
'----------------------------------------------
' Properties
' - DestinationFeatureClass (IFeatureClass, r/w)
' - MapScale (Double, r/w)
' - FrameWidthInPageUnits (Double, r/w)
' - FrameHeightInPageUnits (Double, r/w)
' - StripMapRoute (IPolyline, r/w)
'----------------------------------------------
' Methods
' - GenerateGrids(pApp as IApplication)
' : Generates the grids using the values added.
' - RunStandardGUI(pApp as IApplication)
' : To open the form without having the button
' added to ArcMap's GUI.
'----------------------------------------------
' Local Global Declarations
Private m_DestFL As IFeatureLayer
Private m_DestFC As IFeatureClass
Private m_Polyline As IPolyline
Private m_dMapScale As Double
Private m_dFrameWidthInPageUnits As Double
Private m_dFrameHeightInPageUnits As Double
Private m_FldStripName As String
Private m_FldNumInSeries As String
Private m_FldMapAngle As String
Private m_FldScale As String
Private m_RemoveGrids As Boolean
Private m_Flip As Boolean
Private m_GridWidth As Double
Private m_GridHeight As Double
Private m_StripMapName As String
Private m_pProgress As IModelessFrame
'----------------------------------------------
' API call to keep form top most
Private Const GWL_HWNDPARENT = -8
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Property Set DestinationFeatureLayer(pFL As IFeatureLayer)
54: If pFL.FeatureClass.ShapeType = esriGeometryPolygon Then
55: Set m_DestFL = pFL
56: Set m_DestFC = pFL.FeatureClass
57: Else
58: Err.Raise vbObjectError, "MapGridManager_Set_DestinationFeatureLayer", _
"Not a polygon feature layer"
60: End If
End Property
Public Property Get DestinationFeatureLayer() As IFeatureLayer
64: Set DestinationFeatureLayer = m_DestFL
End Property
Public Property Set StripMapRoute(RoutePolyline As IPolyline)
68: Set m_Polyline = RoutePolyline
End Property
Public Property Get StripMapRoute() As IPolyline
72: Set StripMapRoute = m_Polyline
End Property
Public Property Let FrameWidthInPageUnits(dWidth As Double)
76: m_dFrameWidthInPageUnits = dWidth
End Property
Public Property Get FrameWidthInPageUnits() As Double
80: FrameWidthInPageUnits = m_dFrameWidthInPageUnits
End Property
Public Property Let FrameHeightInPageUnits(dHeight As Double)
84: m_dFrameHeightInPageUnits = dHeight
End Property
Public Property Get FrameHeightInPageUnits() As Double
88: FrameHeightInPageUnits = m_dFrameHeightInPageUnits
End Property
Public Property Let MapScale(dScale As Double)
92: m_dMapScale = dScale
End Property
Public Property Get MapScale() As Double
96: MapScale = m_dMapScale
End Property
Public Property Let StripMapName(MapName As String)
100: m_StripMapName = MapName
End Property
Public Property Get StripMapName() As String
104: StripMapName = m_StripMapName
End Property
Public Property Let FieldNameStripMapName(FieldName As String)
109: m_FldStripName = FieldName
End Property
Public Property Get FieldNameStripMapName() As String
113: FieldNameStripMapName = m_FldStripName
End Property
Public Property Let FieldNameNumberInSeries(FieldName As String)
117: m_FldNumInSeries = FieldName
End Property
Public Property Get FieldNameNumberInSeries() As String
121: FieldNameNumberInSeries = m_FldNumInSeries
End Property
Public Property Let FieldNameMapAngle(FieldName As String)
125: m_FldMapAngle = FieldName
End Property
Public Property Get FieldNameMapAngle() As String
129: FieldNameMapAngle = m_FldMapAngle
End Property
Public Property Let FieldNameScale(FieldName As String)
133: m_FldScale = FieldName
End Property
Public Property Get FieldNameScale() As String
137: FieldNameScale = m_FldScale
End Property
Public Property Let RemoveCurrentGrids(RemoveGrids As Boolean)
141: m_RemoveGrids = RemoveGrids
End Property
Public Property Get RemoveCurrentGrids() As Boolean
145: RemoveCurrentGrids = m_RemoveGrids
End Property
Public Property Let FlipPolyline(Flip As Boolean)
149: m_Flip = Flip
End Property
Public Property Get FlipPolyline() As Boolean
153: FlipPolyline = m_Flip
End Property
Private Sub Class_Initialize()
' Set the defaults
158: Set m_pProgress = New ModelessFrame
End Sub
Public Sub RunStandardGUI(pApp As IApplication)
162: Set frmSMapSettings.m_Application = pApp
163: frmSMapSettings.Tickle
164: SetWindowLong frmSMapSettings.hwnd, GWL_HWNDPARENT, pApp.hwnd
165: frmSMapSettings.Show vbModeless
End Sub
Private Function CalculatePageToMapRatio(pApp As IApplication) As Double
Dim pMx As IMxDocument
Dim pPage As IPage
Dim pPageUnits As esriUnits
Dim pSR As ISpatialReference
Dim pSRI As ISpatialReferenceInfo
Dim pPCS As IProjectedCoordinateSystem
Dim dMetersPerUnit As Double
Dim dCurrScale As Double
Dim pExtentEnv As IEnvelope
Dim dEndX As Double, dEndY As Double
Dim dStartX As Double, dStartY As Double
On Error GoTo eh
' Init
184: Set pMx = pApp.Document
185: Set pSR = pMx.FocusMap.SpatialReference
' If a Projected coord system
187: If TypeOf pSR Is IProjectedCoordinateSystem Then
' Use meters per unit as the conversion
189: Set pPCS = pSR
190: dMetersPerUnit = pPCS.CoordinateUnit.MetersPerUnit
' Now convert this into page (ie: paper) units
192: Set pPage = pMx.PageLayout.Page
193: pPageUnits = pPage.Units
Select Case pPageUnits
Case esriInches: CalculatePageToMapRatio = dMetersPerUnit / (1 / 12 * 0.304800609601219)
Case esriFeet: CalculatePageToMapRatio = dMetersPerUnit / (0.304800609601219)
Case esriCentimeters: CalculatePageToMapRatio = dMetersPerUnit / (1 / 100)
Case esriMeters: CalculatePageToMapRatio = dMetersPerUnit / (1)
Case Else:
200: MsgBox "Warning: Only the following Page (Layout) Units are supported by this tool:" _
& vbCrLf & " - Inches, Feet, Centimeters, Meters" _
& vbCrLf & vbCrLf & "Calculating as though Page Units are in Inches..."
203: CalculatePageToMapRatio = dMetersPerUnit / (1 / 12 * 0.304800609601219)
204: End Select
' Otherwise
206: Else
' If not projected, we can only do a "flat" conversion -> that is, use the current scale and extent
' as a ratio to be applied to the map grid scale.
' NOTE: We MUST be in Layout mode to make this calculation, as the scale in Map View and Layout View
' are not the same (as the extent envelope and data frame envelope can be different shapes). The
' test for being in Layout Mode is made in the clsMapGridButton.ICommand_Enabled property.
212: Set pExtentEnv = pMx.ActiveView.Extent
213: dStartX = pExtentEnv.XMin
214: dStartY = pExtentEnv.YMin
215: dEndX = pExtentEnv.XMax
216: dEndY = pExtentEnv.YMax
218: dCurrScale = pMx.FocusMap.MapScale
219: If ((dEndX - dStartX) / m_dFrameWidthInPageUnits) > ((dEndY - dStartY) / m_dFrameHeightInPageUnits) Then
220: CalculatePageToMapRatio = m_dFrameWidthInPageUnits / ((dEndX - dStartX) / dCurrScale)
221: Else
222: CalculatePageToMapRatio = m_dFrameHeightInPageUnits / ((dEndY - dStartY) / dCurrScale)
223: End If
224: End If
Exit Function
eh:
228: CalculatePageToMapRatio = 1
229: MsgBox "Error in CalculatePageToMapRatio" & vbCrLf & Err.Description
End Function
Private Sub Class_Terminate()
233: Set m_DestFL = Nothing
234: Set m_DestFC = Nothing
235: Set m_pProgress = New ModelessFrame
End Sub
Public Sub GenerateStripMap(Application As IApplication)
Dim pMx As IMxDocument
Dim pPolyline As IPolyline
Dim pCenterPoint As IPoint
Dim pCirclePoly As IPolygon
Dim pGridPoly As IPolygon
Dim pCircularArc As IConstructCircularArc
Dim pSegmentCollection As ISegmentCollection
Dim pTopoOpt As ITopologicalOperator
Dim pGeoCol As IGeometryCollection
Dim pIntersectPoint As IPoint
Dim pArc As ICurve
Dim pIntersectPointPrev As IPoint
Dim bFirstRun As Boolean
Dim lLoop2 As Long
Dim dHighest As Double, lHighestRef As Long
Dim dHighestPrev As Double
Dim pCurve As ICurve, pLine As ILine
Dim pPLine As IPolyline
Dim bContinue As Boolean
Dim dGridAngle As Double
Dim bReducedRadius As Boolean
Dim lCounter As Long
Dim dHighestThisTurn As Double
Dim pWorkspaceEdit As IWorkspaceEdit
Dim lLoop As Long
Dim pFeatDataset As IFeatureDataset
Dim pFeature As IFeature
Dim pFeatCur As IFeatureCursor
Dim pSourcePolygon As IPolygon
'Dim pGridPolygon As IPolygon
Dim pPointColl As IPointCollection
Dim pStartingCoord As IPoint
Dim pPoint As IPoint
Dim lRow As Long
Dim lCol As Long
Dim lRowCount As Long
Dim lColCount As Long
Dim pClone As IClone
Dim dGridSizeW As Double
Dim dGridSizeH As Double
Dim pTransform As ITransform2D
Dim bOKToAdd As Boolean
Dim iStringLengthRow As Integer
Dim iStringLengthCol As Integer
Dim pDataset As IDataset
Dim lBase As Long
Dim dDataFrameWidth As Double
Dim dDataFrameHeight As Double
Dim dConvertPageToMapUnits As Double
Dim dIncrement As Double
Dim pInsertFeatureBuffer As IFeatureBuffer
Dim pInsertFeatureCursor As IFeatureCursor
Dim pFL As IFeatureLayer
Dim pFC As IFeatureClass
Dim pProgress As frmProgress
On Error GoTo eh
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -