VB и ArcGis

0 голосов
спросил 24 Апр, 10 от Swallow (2,740 баллов) в категории Программные продукты Esri
    Добрый день. Есть ли возможность из проги написаной на VB запустить макрос в ArcScene допустим)

то что есть)
Dim myprocess As New Process()
myprocess.StartInfo.FileName = "C:\Program Files\ArcGIS\Bin\ArcScene.exe" --запускаю арксцену
myprocess.StartInfo.Arguments = "C:\123.sxd" -- даже нашел как открыть файл)
myprocess.start()

А вот как дальше запустить макрос хз) Может кто подскажет как или хоть где об этом можно прочитать. В программировании дуб дубом) Давно ничего не делал) А диплом сдавать надо)

9 Ответы

0 голосов
ответил 24 Апр, 10 от TDenis (42,620 баллов)
Почитать можно здесь:
http://www.esricanada.com/EN_support/1243_6058.asp
0 голосов
ответил 24 Апр, 10 от Swallow (2,740 баллов)
Спасибо) Буду разбираться пока)
0 голосов
ответил 26 Апр, 10 от Swallow (2,740 баллов)
Все таки не получается запустить макрос в арксцене. Не могу найти в объектах ничего связанного с макросами. Может кто имел дело с этим и сможет наводку дать?
0 голосов
ответил 26 Апр, 10 от TDenis (42,620 баллов)
На водку не даём, самим не хватает, можем только проконсультировать!

Находите запущенный экземпляр ArcScene с помощью интерфейса IAppRot.
Для найденного экземпляра, используя интерфейс IVbaApplication и его метод RunVBAMacro, запускаете нужный макрос.
Строчек в пять-шесть, думаю, уложитесь. Почитайте справку, поищите в примере эти слова)

P.S. Тема диплома секретом не является? Можете огласить? Любопытно.

P.S.S. А чего у вас ник такой подозрительный O_o Он вообще про птичку или про что?
    
0 голосов
ответил 26 Апр, 10 от TDenis (42,620 баллов)
Эх, ладно, уговорили. Вот так это выглядит на VB.NET:
Dim pAppROT As IAppROT

pAppROT = New AppROTClass
Dim pVbaApplication As IVbaApplication
pVbaApplication = pAppROT.Item(0)
pVbaApplication.RunVBAMacro("Project", "Module1", "ShowMessage", Nothing)
Надо добавить ссылки на сборки ESRI.ArcGIS.Display и ESRI.ArcGIS.Framework. Кроме того, вероятно, придётся поменять название проекта, модуля и скрипта.
Плюс, думаю, вам надо дождаться ещё запуска ArcScene (либо повесить функционал на разные кнопки). А то код выполнится (точнее - не выполнится, а выкинет исключение) ещё до того, когда ArcScene успеет загрузиться.
Поэтому самое тупое, но рабочее решение, это вставить паузу
Threading.Thread.Sleep(10000)
Если комп старый, увеличьте число в скобках. Раз вы пишете
myprocess.StartInfo.FileName = "C:\Program Files\ArcGIS\Bin\ArcScene.exe
то вам, думаю, такое решение сгодится)
    
0 голосов
ответил 27 Апр, 10 от Swallow (2,740 баллов)
На водку не даём, самим не хватает, можем только проконсультировать!

Находите запущенный экземпляр ArcScene с помощью интерфейса IAppRot.
Для найденного экземпляра, используя интерфейс IVbaApplication и его метод RunVBAMacro, запускаете нужный макрос.
Строчек в пять-шесть, думаю, уложитесь. Почитайте справку, поищите в примере эти слова)

P.S. Тема диплома секретом не является? Можете огласить? Любопытно.

P.S.S. А чего у вас ник такой подозрительный O_o Он вообще про птичку или про что?
    

Методом научного тыка вчера подобное сделал) И все как ни странно заработало)) Спасибо вам)
Ник нормальный) вообще про птичку он) А тема дипломной геоинформационный сервис для каталогов недвижимости.
    
0 голосов
ответил 27 Апр, 10 от Swallow (2,740 баллов)
Эх, ладно, уговорили. Вот так это выглядит на VB.NET:
Dim pAppROT As IAppROT

pAppROT = New AppROTClass
Dim pVbaApplication As IVbaApplication
pVbaApplication = pAppROT.Item(0)
pVbaApplication.RunVBAMacro("Project", "Module1", "ShowMessage", Nothing)
Надо добавить ссылки на сборки ESRI.ArcGIS.Display и ESRI.ArcGIS.Framework. Кроме того, вероятно, придётся поменять название проекта, модуля и скрипта.
Плюс, думаю, вам надо дождаться ещё запуска ArcScene (либо повесить функционал на разные кнопки). А то код выполнится (точнее - не выполнится, а выкинет исключение) ещё до того, когда ArcScene успеет загрузиться.
Поэтому самое тупое, но рабочее решение, это вставить паузу
Threading.Thread.Sleep(10000)
Если комп старый, увеличьте число в скобках. Раз вы пишете
myprocess.StartInfo.FileName = "C:\Program Files\ArcGIS\Bin\ArcScene.exe
то вам, думаю, такое решение сгодится)
    

        Dim appROTEvent As AppROT
        m_ROT = New AppROTClass
        appROTEvent = m_ROT
        Dim pApp As IVbaApplication
       
        If m_ROT.Count = 0 Then
            MsgBox("There are no running ArcScene processes")
        Else
            pApp = m_ROT.Item(0)
            pApp.RunVBAMacro("Project", "Module2", "Piy", Nothing)
        End If   

Я вот как то так сделал) Вроде тоже нормально)
0 голосов
ответил 27 Апр, 10 от Swallow (2,740 баллов)
    Да и кстати пока функционал весь на разных кнопках) Поэтому слип не имеет смысла использовать) Дальше незнаю что скажут мне делать.
0 голосов
ответил 27 Апр, 10 от TDenis (42,620 баллов)
image
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...