Mais

Criando polilinhas perpendiculares de comprimento especificado que retêm atributos das polilinhas originais usando ArcObjects e VBA?

Criando polilinhas perpendiculares de comprimento especificado que retêm atributos das polilinhas originais usando ArcObjects e VBA?


Estou usando o ArcGIS 9.2 e estou tentando desesperadamente criar polilinhas perpendiculares às polilinhas existentes que tenho. Gostaria que as linhas perpendiculares cruzassem as linhas originais em seu ponto médio e que as linhas perpendiculares mantivessem os atributos das linhas originais e, finalmente, gostaria de ser capaz de controlar o comprimento que quero que as linhas perpendiculares tenham (por exemplo . 50 metros)

Um script que encontrei e colei abaixo, leva-me boa parte do caminho até lá, pois cria linhas perpendiculares nos pontos médios, mas não retém os atributos nem me permite definir o comprimento. Alguém pode sugerir o que preciso mudar para trazer os atributos e me deixar definir o comprimento das linhas que são desenhadas.

Opção Explicit Sub Test () Dim pEditor As IEditor Set pEditor = Application.FindExtensionByName ("ESRI Object Editor") If pEditor.EditState <> esriStateEditing Then MsgBox "começar a editar primeiro" Sair Sub End If Dim pEL As IEditLayers Definir pEL = pEditor If pEL.CurrentLayer.FeatureClass.ShapeType <> esriGeometryPolyline Then MsgBox "camada de destino deve ser polilinha" Sair Sub End If If pEditor.Map.SelectionCount = 0 Then MsgBox "nada selecionado" Sair Sub End If Dim pEnumFeat As IEnumFeature Definir pEnumFeat = pEditor. Map.FeatureSelection pEnumFeat.Reset pEditor.StartOperation Dim pFeat As IFeature Set pFeat = pEnumFeat.Next Do Até que pFeat Is Nothing If pFeat.Shape.GeometryType = esriGeometryPolyline Then Dim pNewFeat As IFeature Set pFeat = pEnumFeat.Next Do Até que pFeat Is Nothing If pFeat.Shape.GeometryType = esriGeometryPolyline Then Dim pNewFeat As IFeature Set pNewFeat.CurrentFeature.CurrentFeatFeat Is Nothing If pFeat.Shape.GeometryType = esriGeometryPolyline Then Dim pNewFeat As IFeature Set pNewFeat.CurrentFeature.CurrentFeatFeat = pNewFeat. Shape = MakePerp (pFeat.Shape, _ GetLength (pFeat.Shape)) pNewFeat.Store End If Set pFeat = pEnumFeat.Next Loop pEditor.StopOperation "makeperps" Dim pAV As IActiveView Definir pAV = pEditor.Map pAV.Refresh End Sub Function GetLength (pPolyline As IPolyline) As Double GetLength = pPolyline.Length End Function Função MakePerp (pBaseLine As IPolyline, ByVal dLen As Double) As IPolyline Dim pPointColl As IPointCollection Definir pPointColl = Nova polilinha Dim pPerpLine As IPolyline, ByVal dLen As Double) As IPolyline Dim pPointColl As IPointCollection Definir pPointColl = Nova polilinha Dim pPerpLine Como linha ILine Definir pPer pBaseLine.QueryNormal esriNoExtension, 0,5, True, dLen / 2 #, pPerpLine pPointColl.AddPoint pPerpLine.ToPoint pBaseLine.QueryNormal esriNoExtension, 0,5, True, dLen / -2 #, pPerpLine pPointColl.Addpoint

Você precisará ajustar esse código para criar um recurso.

Por exemplo, imagine que você selecionou todas as polilinhas que deseja fazer usando um IQueryFilter.

Para cada linha, você determinará a geometria de cruzamento usando seu sub e criará um novo registro (em uma determinada classe de recurso), copiando os atributos.

Verifique estes links:

http://edndoc.esri.com/arcobjects/9.1/ComponentHelp/esriGeoDatabase/IQueryFilter.htm

http://edndoc.esri.com/arcobjects/9.0/ComponentHelp/esriGeoDatabase/IRow.htm

http://resources.esri.com/help/9.3/ArcGISEngine/arcobjects/esriGeodatabase/IFeature.htm

http://edndoc.esri.com/arcobjects/9.1/ComponentHelp/esriGeoDatabase/ICursor.htm


Assista o vídeo: AutoCad aula 2 - Polilinha