Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Пашин Евгений от 28-12-2015, 13:37:49

Название: Как выполнить запуск приложения AutoCAD?
Отправлено: Пашин Евгений от 28-12-2015, 13:37:49
Добрый вечер, подскажите пожалуйста, в какую сторону "копать", чтобы решить задачу:
1) На компьютере установлены: AutoCAD 2014, Plant 3D 2014 и Civil 3D 2014.
2) Имеются три чертежа, созданные в соответствующих приложениях.

Цель: открывать каждый чертеж в том приложении, в котором он был создан. Данная необходимость связана с тем, что в каждом чертеже имеются настройки, которые отличны для каждого чертежа. То есть, чертеж, созданный в Plant 3D не стоит открывать в Civil 3D, потому что при открытии файла может выскочить какое-нибудь окно, предупреждающее, что в данном чертеже нет определенного шрифта или что-то другое (тому подобное).

Заранее благодарен!
Название: Re: Как выполнить запуск приложения AutoCAD?
Отправлено: Александр Пекшев aka Modis от 28-12-2015, 13:40:33
Эммм... Это вопрос относится к программированию?
Правой кнопкой мышки на файл - "Открыть с помощью"
Название: Re: Как выполнить запуск приложения AutoCAD?
Отправлено: Пашин Евгений от 28-12-2015, 13:42:03
Эммм... Это вопрос относится к программированию?
Правой кнопкой мышки на файл - "Открыть с помощью"

Ха-ха ) Смешно! Нет я тут балуюсь понимаете ли )

Что-то типа CreateObject необходимо выполнить )
Название: Re: Как выполнить запуск приложения AutoCAD?
Отправлено: Александр Пекшев aka Modis от 28-12-2015, 13:48:21
Я и не смеюсь
Если вопрос по программированию, значит вы хотите открыть чертеж из своей функции, которая, логично, УЖЕ загружена в автокад. Соответственно - УЖЕ ОТКРЫТО какое-то из перечисленных приложений!
Из чего вытекает - вопрос сформулирован некорректно. Что вы хотите - не ясно
Название: Re: Как выполнить запуск приложения AutoCAD?
Отправлено: Александр Пекшев aka Modis от 28-12-2015, 13:54:24
В любом случае - на сколько мне известно в файле dwg не хранится информации о конкретном вертикальном решении (будь то civil, map и пр). Только версия - откройте dwg-файл обычным блокнотом и увидите прям самую первую строку. Например AC1027 - это будет соответствовать версии 2013 (табличка соответствия есть тут https://ru.wikipedia.org/wiki/DWG)
Название: Re: Как выполнить запуск приложения AutoCAD?
Отправлено: Пашин Евгений от 28-12-2015, 13:56:24
Ладно, попробую снова:
1) Имеются три приложения в системе: AutoCAD 2014, Plant 3D 2014 и Civil 3D 2014.
2) Имеются три чертежа, один из них создан в Plant 3D, другой в Civil 3D, а последний в AutoCAD.
3) Требуется программно (в виде отдельного приложения) запускать приложения Plant 3D и открыть в нем только тот чертеж, который был создан в нем. Второй чертеж (Civil 3D) открыть в том приложении, в котором он был создан. Третий чертеж (AutoCAD) в AutoCAD-е.
4) Выполнить все три операции в фоне. На самом деле меня это меньше интересует (с этим как-нибудь управлюсь).

Как-то так...
Название: Re: Как выполнить запуск приложения AutoCAD?
Отправлено: Пашин Евгений от 28-12-2015, 13:59:16
на сколько мне известно в файле dwg не хранится информации о конкретном вертикальном решении

На самом деле хранится. Мы это даже уже обсуждали: http://adn-cis.org/forum/index.php?topic=2972.msg11298#msg11298

Можно еще здесь посмотреть это: http://adndevblog.typepad.com/autocad/2013/08/registry-values-for-productid-and-localeid-for-autocad.html




Запускать приложение из конкретной папки и потом отлавливать запущенный процесс - не самое лучшее решение...
Похоже другого выбора у меня нет!

Если вдруг у кого-то будет более простое решение, пишите:
Код - vb.net [Выбрать]
  1.         Dim Shll As Object = CreateObject("WScript.Shell")
  2.         Dim RunPlant3D As String = Chr(34) & "C:\Program Files\Autodesk\AutoCAD 2014\acad.exe" & Chr(34) & _
  3.             " " & "/product" & Chr(34) & "PLNT3D" & Chr(34) & " " & "/language" & " " & Chr(34) & "ru-RU" & Chr(34)
  4.  
  5.         Shll.Run(RunPlant3D , , True)
  6.  
  7.  
  8.         Dim RunCivil3D As String = Chr(34) & "C:\Program Files\Autodesk\Autodesk AutoCAD Civil 3D 2014\acad.exe" & Chr(34) & _
  9.             " " & "/ld" & " " & Chr(34) & "C:\Program Files\Autodesk\Autodesk AutoCAD Civil 3D 2014\AecBase.dbx" & Chr(34) & _
  10.             " " & "/p" & " " & Chr(34) & "<<C3D_Russia>>" & Chr(34)
  11.  
  12.         Shll.Run(RunCivil3D , , True)

Допишу решение завтра!
Название: Re: Как выполнить запуск приложения AutoCAD?
Отправлено: Пашин Евгений от 30-12-2015, 14:02:01
Решение:
1. Определить все установленные версии (вертикальные решения) AutoCAD-а в системе:

Код - vb.net [Выбрать]
  1.         Dim AppVer As New List(Of String)
  2.         AppVer.Add("1") ' AutoCAD 2002
  3.         AppVer.Add("2") ' AutoCAD 2004
  4.         AppVer.Add("3") ' AutoCAD 2005
  5.         AppVer.Add("4") ' AutoCAD 2006
  6.         AppVer.Add("5") ' AutoCAD 2007
  7.         AppVer.Add("6") ' AutoCAD 2008
  8.         AppVer.Add("7") ' AutoCAD 2009
  9.         AppVer.Add("8") ' AutoCAD 2010
  10.         AppVer.Add("9") ' AutoCAD 2011
  11.         AppVer.Add("A") ' AutoCAD 2012
  12.         AppVer.Add("B") ' AutoCAD 2013
  13.         AppVer.Add("D") ' AutoCAD 2014
  14.         AppVer.Add("E") ' AutoCAD 2015
  15.         AppVer.Add("F") ' AutoCAD 2016
  16.  
  17.         Dim AppName As New List(Of String)
  18.         AppName.Add("000") ' Autodesk Civil 3D (C3D)
  19.         AppName.Add("001") ' AutoCAD (ACAD)
  20.         AppName.Add("002") ' AutoCAD OEM
  21.         AppName.Add("003") ' Inventor Series (AIS)
  22.         AppName.Add("004") ' AutoCAD Architecture (ACA)
  23.         AppName.Add("005") ' AutoCAD Mechanical (ACADM)
  24.         AppName.Add("006") ' Building System
  25.         AppName.Add("007") ' AutoCAD Electrical (ACADE)
  26.         AppName.Add("008") ' Land Desktop
  27.         AppName.Add("009") ' AutoCAD LT
  28.         AppName.Add("00A") ' AutoCAD OEM
  29.         AppName.Add("012") ' ADT for Raster Design
  30.         AppName.Add("013") ' Inventor Professional (AIP)
  31.         AppName.Add("014") ' Inventor Professional for Routed Systems (AIPRS)
  32.         AppName.Add("015") ' Inventor Professional for Simulation (AIPSIM)
  33.         AppName.Add("016") ' AutoCAD P & ID-2D (PNID)
  34.         AppName.Add("017") ' AutoCAD Plant 3D (PLNT3D)
  35.         AppName.Add("018") ' Civil 3D Land Desktop Companion
  36.         AppName.Add("022") ' Autodesk Utility Design
  37.         AppName.Add("023") ' Autodesk Topobase Client
  38.         AppName.Add("024") ' Autodesk Civil
  39.         AppName.Add("028") ' DWG TrueView
  40.         AppName.Add("029") ' AutoCAD escad
  41.         AppName.Add("030") ' AutoCAD Structural Detailing
  42.  
  43.         Dim AppLang As New List(Of String)
  44.         AppLang.Add("404")
  45.         AppLang.Add("405")
  46.         AppLang.Add("407")
  47.         AppLang.Add("409")
  48.         AppLang.Add("410")
  49.         AppLang.Add("411")
  50.         AppLang.Add("412")
  51.         AppLang.Add("415")
  52.         AppLang.Add("416")
  53.         AppLang.Add("419")
  54.         AppLang.Add("040C")
  55.         AppLang.Add("040A")
  56.         AppLang.Add("040E")
  57.         AppLang.Add("804")
  58.  
  59.         For Each aVer As String In AppVer
  60.             For Each aName As String In AppName
  61.                 For Each aLang As String In AppLang
  62.                     Dim aAssociation As String = My.Computer.Registry.GetValue("HKEY_CLASSES_ROOT\acad." & aVer & aName & "." & aLang & "\shell\open\command", "", Nothing) '  возвращает, например "C:\Program Files\Autodesk\AutoCAD 2014\acad.exe"
  63.                     If aAssociation <> "" Then
  64.                         MsgBox("На вашем компьютере установлен: " & Get_Full_App(aVer, aName, aLang))
  65.                     End If
  66.                 Next
  67.             Next
  68.         Next

2. Функция, возвращающая полное имя приложения:

Код - vb.net [Выбрать]
  1.     Public Function Get_Full_App(ByVal AppVer As String, ByVal AppName As String, ByVal AppLang As String) As String
  2.         Get_Full_App = ""
  3.  
  4.         Select Case AppName
  5.             Case "000"
  6.                 Get_Full_App += "Autodesk Civil 3D"
  7.             Case "001"
  8.                 Get_Full_App += "AutoCAD"
  9.             Case "00A"
  10.                 Get_Full_App += "AutoCAD OEM"
  11.             Case "002"
  12.                 Get_Full_App += "MAP"
  13.             Case "003"
  14.                 Get_Full_App += "Inventor Series (AIS)"
  15.             Case "004"
  16.                 Get_Full_App += "AutoCAD Architecture"
  17.             Case "005"
  18.                 Get_Full_App += "AutoCAD Mechanical (ACADM)"
  19.             Case "006"
  20.                 Get_Full_App += "Building System"
  21.             Case "007"
  22.                 Get_Full_App += "AutoCAD Electrical (ACADE)"
  23.             Case "008"
  24.                 Get_Full_App += "Land Desktop"
  25.             Case "009"
  26.                 Get_Full_App += "AutoCAD LT"
  27.             Case "012"
  28.                 Get_Full_App += "ADT for Raster Design"
  29.             Case "013"
  30.                 Get_Full_App += "Inventor Professional (AIP)"
  31.             Case "014"
  32.                 Get_Full_App += "Inventor Professional for Routed Systems (AIPRS)"
  33.             Case "015"
  34.                 Get_Full_App += "Inventor Professional for Simulation (AIPSIM)"
  35.             Case "016"
  36.                 Get_Full_App += "AutoCAD P & ID - 2D"
  37.             Case "017"
  38.                 Get_Full_App += "AutoCAD Plant 3D"
  39.             Case "018"
  40.                 Get_Full_App += "Civil 3D Land Desktop Companion"
  41.             Case "022"
  42.                 Get_Full_App += "Autodesk Utility Design"
  43.             Case "023"
  44.                 Get_Full_App += "Autodesk Topobase Client"
  45.             Case "024"
  46.                 Get_Full_App += "Autodesk Civil"
  47.             Case "028"
  48.                 Get_Full_App += "DWG TrueView"
  49.             Case "029"
  50.                 Get_Full_App += "AutoCAD ecscad"
  51.             Case "030"
  52.                 Get_Full_App += "AutoCAD Structural Detailing"
  53.         End Select
  54.  
  55.         Get_Full_App += " "
  56.         Select Case AppVer
  57.             Case "1"
  58.                 Get_Full_App += "2002"
  59.             Case "2"
  60.                 Get_Full_App += "2004"
  61.             Case "3"
  62.                 Get_Full_App += "2005"
  63.             Case "4"
  64.                 Get_Full_App += "2006"
  65.             Case "5"
  66.                 Get_Full_App += "2007"
  67.             Case "6"
  68.                 Get_Full_App += "2008"
  69.             Case "7"
  70.                 Get_Full_App += "2009"
  71.             Case "8"
  72.                 Get_Full_App += "2010"
  73.             Case "9"
  74.                 Get_Full_App += "2011"
  75.             Case "A"
  76.                 Get_Full_App += "2012"
  77.             Case "B"
  78.                 Get_Full_App += "2013"
  79.             Case "D"
  80.                 Get_Full_App += "2014"
  81.             Case "E"
  82.                 Get_Full_App += "2015"
  83.             Case "F"
  84.                 Get_Full_App += "2016"
  85.         End Select
  86.  
  87.         Get_Full_App += " "
  88.         Select Case AppLang
  89.             Case "409"
  90.                 Get_Full_App += "(Английский)"
  91.             Case "407"
  92.                 Get_Full_App += "(Немецкий)"
  93.             Case "040C"
  94.                 Get_Full_App += "(Французский)"
  95.             Case "410"
  96.                 Get_Full_App += "(Итальянский)"
  97.             Case "040A"
  98.                 Get_Full_App += "(Испанский)"
  99.             Case "415"
  100.                 Get_Full_App += "(Польский)"
  101.             Case "040E"
  102.                 Get_Full_App += "(Венгерский)"
  103.             Case "405"
  104.                 Get_Full_App += "(Чешский)"
  105.             Case "419"
  106.                 Get_Full_App += "(Русский)"
  107.             Case "416"
  108.                 Get_Full_App += "(Бразильский/Португальский)"
  109.             Case "804"
  110.                 Get_Full_App += "(Упрощенный Китайский)"
  111.             Case "404"
  112.                 Get_Full_App += "(Традиционный Китайский)"
  113.             Case "412"
  114.                 Get_Full_App += "(Корейский)"
  115.             Case "411"
  116.                 Get_Full_App += "(Японский)"
  117.         End Select
  118.  
  119.         Return Get_Full_App
  120.     End Function

3. Запуск конкретного приложения осуществляется так:

Код - vb.net [Выбрать]
  1. ...
  2.         Dim AppPath As String = My.Computer.Registry.GetValue("HKEY_CLASSES_ROOT\acad." & aVer & aName & "." & aLang & "\shell\open\command", "", Nothing)
  3.  
  4.         Dim Shll As Object = CreateObject("WScript.Shell")
  5.         Dim myRunString As String = Chr(34) & AppPath & Chr(34) & " /ld " & Chr(34) & IO.Path.GetDirectoryName(AppPath) & "\AecBase.dbx" & Chr(34) & " /product " & Get_Product_Name(aName) & " /language " & Chr(34) & Get_Lang_Sufix(aLang) & Chr(34) ' Отлично работает!!!
  6.         Shll.Run(myRunString, 0, False)
  7. ...
  8.  

Функции для определения параметров запуска приложения:

Код - vb.net [Выбрать]
  1.     Public Function Get_Lang_Sufix(ByVal AppLang As String) As String
  2.         Get_Lang_Sufix = ""
  3.         Select Case AppLang
  4.             Case "419"
  5.                 Get_Lang_Sufix = "ru-RU"
  6.             Case "409"
  7.                 Get_Lang_Sufix = "en-US"
  8.         End Select
  9.         Return Get_Lang_Sufix
  10.     End Function
  11.  
  12.     Public Function Get_Product_Name(ByVal AppName As String) As String
  13.         Get_Product_Name = ""
  14.         Select Case AppName
  15.             Case "000"
  16.                 Get_Product_Name = "C3D"
  17.             Case "001"
  18.                 Get_Product_Name = "ACAD"
  19.             Case "004"
  20.                 Get_Product_Name = "ACA"
  21.             Case "005"
  22.                 Get_Product_Name = "ACADM"
  23.             Case "007"
  24.                 Get_Product_Name = "ACADE"
  25.             Case "016"
  26.                 Get_Product_Name = "PNID"
  27.             Case "017"
  28.                 Get_Product_Name = "PLNT3D"
  29.         End Select
  30.         Return Get_Product_Name
  31.     End Function
  32.  


Вот и всё решение. Работает в фоне.

Единственный недостаток, что при запуске приложения SplashScreen таки отображается.


Тема закрыта.
Название: Re: Как выполнить запуск приложения AutoCAD?
Отправлено: Александр Пекшев aka Modis от 30-12-2015, 14:04:41
Я бы посоветовал все эти данные хранить, скажем в xml-файле. Твоя программа бы считывала данные из него, однако вы всегда сможете легко его править. Да и код будет меньше и работать удобнее. Но это ИМХО
Название: Re: Как выполнить запуск приложения AutoCAD?
Отправлено: Пашин Евгений от 30-12-2015, 14:08:08
Я бы посоветовал все эти данные хранить, скажем в xml-файле. Твоя программа бы считывала данные из него, однако вы всегда сможете легко его править. Да и код будет меньше и работать удобнее. Но это ИМХО

Да, конечно! Здесь я просто для понимания выложил данные.
Название: Re: Как выполнить запуск приложения AutoCAD?
Отправлено: Дима_ от 31-12-2015, 03:01:51
Да, конечно! Здесь я просто для понимания выложил данные.
Угадайте что я понял смотря на Ваш код.
з.ы. Если на каникулах будет скучно - почитайте это (https://ru.wikipedia.org/wiki/Ассоциативный_массив#) - клавиатура целей будет.
Название: Re: Как выполнить запуск приложения AutoCAD?
Отправлено: Пашин Евгений от 25-01-2016, 06:47:06
Угадайте что я понял смотря на Ваш код.
з.ы. Если на каникулах будет скучно - почитайте это - клавиатура целей будет.

Спасибо, разобрался! Двойной массив <Ключ>,<Значение>!
Правда классами получилось не хуже )))