Опять же ArcScene

0 голосов
спросил 04 Май, 10 от Swallow (2,740 баллов) в категории Программные продукты Esri
    Теперь понадобилось вывести информацию из таблиц об выделеном объекте в наглядной форме. Решил сделать форму, а туда уже пихать значений полей таблицы выделенного объекта. Но остановился в общем то после создания этой формы)


Private Sub UserForm_Initialize()
Label1.Caption = А здесь буду присваивать значения.
End Sub

Подскажите как получить эти значения?) Ну либо почитать как обычно что нибудь.

8 Ответы

0 голосов
ответил 04 Май, 10 от Swallow (2,740 баллов)

Dim mxDoc As ISxDocument
Set mxDoc = Application.Document
Dim activeView As IActiveView
Set activeView = mxDoc.Scene
Dim featureEnum As IEnumFeature
Set featureEnum = activeView.Selection
featureEnum.Reset
Dim feat As IFeature
Set feat = featureEnum.Next
Do While Not feat Is Nothing
Dim index As Long
index = feat.Fields.FindField("StreetName")
MsgBox index
If index <> -1 Then
MsgBox feat.Value(index)
End If
Set feat = featureEnum.Next
Loop

Пытался что то такое сделать но нифига не пашет. Да и врядли что то правильно пытаюсь там сделать)
0 голосов
ответил 04 Май, 10 от Swallow (2,740 баллов)
Индекс находится нормально,  feat.value(index) пусто
0 голосов
ответил 04 Май, 10 от Swallow (2,740 баллов)

Public Sub fsdf()
Dim mxDoc As ISxDocument
Set mxDoc = Application.Document
Dim fLayer As IFeatureLayer
Dim map As IScene
Set map = mxDoc.Scene
Dim enumLayer As IEnumLayer
Set enumLayer = map.Layers
Dim layer As ILayer

Set layer = enumLayer.Next

Do Until layer Is Nothing
If layer.name = "23" Then
Set fLayer = layer
Exit Do
End If

Dim spFilter As ISpatialFilter
Set spFilter = New SpatialFilter
With spFilter
'Set .Geometry = MapCenter
.SpatialRel = esriSpatialRelIntersects
End With
Set layer = enumLayer.Next
Loop
Dim fCursor As IFeatureCursor
Set fCursor = fLayer.FeatureClass.Search(spFilter, True)
Dim feat As IFeature
Set feat = fCursor.NextFeature
If Not feat Is Nothing Then
Dim strVal As String
strVal = feat.Value(feat.Fields.FindField("StreetName"))
MsgBox strVal
End If


End Sub

Сделал вот так, вроде работает. Но надо доделывать. А как теперь из макросов записать в форму эти значения?)
    
0 голосов
ответил 04 Май, 10 от Swallow (2,740 баллов)
Вроде записал) Только вот код дурацкий получился.
0 голосов
ответил 04 Май, 10 от Swallow (2,740 баллов)
Если кто подскажет легче код будут очень признателен) А то разбираться и доделывать эту фигню муторно)
0 голосов
ответил 05 Май, 10 от Swallow (2,740 баллов)
Вопрос актуален)
0 голосов
ответил 06 Май, 10 от TDenis (42,620 баллов)
Никто не подскажет, и так элементарно всё.
Если сильно хочется на пару строк короче, то вместо цикла для поиска слоя можно использовать IGPUtilities.FindMapLayer, а вместо курсора с фильтром - IIdentify.Identify. Гугл подскажет как.
0 голосов
ответил 06 Май, 10 от Swallow (2,740 баллов)
Никто не подскажет, и так элементарно всё.
Если сильно хочется на пару строк короче, то вместо цикла для поиска слоя можно использовать IGPUtilities.FindMapLayer, а вместо курсора с фильтром - IIdentify.Identify. Гугл подскажет как.

    Я вообще просто в этом всем ничего не понимаю) Поэтому собирал из кусков) и получилось думаю не очень хорошо)
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...