Как получить список канонических имен для плоттера?

Автор Тема: Как получить список канонических имен для плоттера?  (Прочитано 10403 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Леонид Семенов

  • ADN Club
  • Сообщений: 44
  • Карма: 2
  • Леонид Семенов. Ведущий инженер-программист
Решил воспользоваться функцией из
http://adn-cis.org/kak-poluchit-spisok-kanonicheskix-imen-dlya-plottera.html
Но почему-то у меня переменная psDicts из
Код - C# [Выбрать]
  1. // Получаем словарь PlotSettings
  2. DBDictionary psDicts = (DBDictionary)t.GetObject(db.PlotSettingsDictionaryId, OpenMode.ForRead);
пустое, как-будто бы у меня нет ни одного плоттера.
« Последнее редактирование: 25-04-2015, 22:28:15 от Александр Ривилис »

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Приветствую на форуме. Какая версия AutoCAD? Что такое "пустой"? Нет элементов в списке или происходит исключение при попытке получения этого объекта?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Леонид Семенов

  • ADN Club
  • Сообщений: 44
  • Карма: 2
  • Леонид Семенов. Ведущий инженер-программист
Я использую AutoCAD 2013.
вызов DBDictionary psDicts = (DBDictionary)t.GetObject(db.PlotSettingsDictionaryId, OpenMode.ForRead);
проходит без ошибок
Но в результате у меня "psDicts.Count = 0"

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А _PAGESETUP перед тем как выполнять это код делал? Для того, чтобы в psDicts что-то было необходимо сначала его назначить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вообще же тебе нужно сначала получить список всех доступных плоттеров: http://adn-cis.org/poluchenie-vsex-dostupnyix-imen-plotterov.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Леонид Семенов

  • ADN Club
  • Сообщений: 44
  • Карма: 2
  • Леонид Семенов. Ведущий инженер-программист
Спасибо большое, Александр Ривилис.
Вся проблема была в _PAGESETUP. Теперь разобрался.

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Вся проблема была в _PAGESETUP. Теперь разобрался.

А что именно Вы делали с _pagesetup? Форма открылась, а что дальше?
После закрытия формы ничего не изменилось.
psDicts.Count у меня тоже = 0!

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Думаю, что должен быть назначен хотя бы один плоттер.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Думаю, что должен быть назначен хотя бы один плоттер.

Назначен «DWG To PDF.pc3» - сойдёт? Может что-то ещё, а то опять psDicts.Count=0?

Мой код:

Код - vb.net [Выбрать]
  1. Imports Autodesk.AutoCAD.Runtime
  2. Imports Autodesk.AutoCAD.DatabaseServices
  3. Imports Autodesk.AutoCAD.PlottingServices ' Чтобы можно было определить PlotConfigManager и всю информацию о плоттерах
  4. Public Class GALLURGY_ACCORECONSOLE_NETLOAD
  5.     <CommandMethod("GALGETCANONICALMEDIANAMESOFLAYOUTS")>
  6.     Public Sub GALGETCANONICALMEDIANAMESOFLAYOUTS()
  7.         Dim AcEditor As Autodesk.AutoCAD.EditorInput.Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
  8.         Dim AcDB As Database = AcEditor.Document.Database
  9.         Dim strPlotSetName As String = "DWG To PDF.pc3"
  10.         Dim PlotSettingExists As Boolean = False
  11.         Using tr As Transaction = AcDB.TransactionManager.StartTransaction()
  12.             Try
  13.                 Dim psDicts As DBDictionary = CType(tr.GetObject(AcDB.PlotSettingsDictionaryId, OpenMode.ForRead), DBDictionary)
  14.                 MsgBox(psDicts.Count) ' Здесь он и выдаёт 0
  15.                 For Each psDict As System.Collections.DictionaryEntry In psDicts
  16.                     Dim obj As Object = psDict.Value ' не понятно для чего эта штука нужна!!! Но оставил для чистоты эксперимента!!!
  17.                     Dim key As String = CType(psDict.Key, String)
  18.                     MsgBox(key)
  19.                     If key = strPlotSetName Then
  20.                         PlotSettingExists = True
  21.                     End If
  22.                 Next
  23.  
  24.                 If PlotSettingExists Then
  25.                     Dim plotSettingDic As DBDictionary = CType(tr.GetObject(AcDB.PlotSettingsDictionaryId, OpenMode.ForRead), DBDictionary)
  26.                     Dim setting As PlotSettings = CType(tr.GetObject(plotSettingDic.GetAt(strPlotSetName), OpenMode.ForRead), PlotSettings)
  27.                     Dim psv As PlotSettingsValidator = Autodesk.AutoCAD.DatabaseServices.PlotSettingsValidator.Current
  28.  
  29.                     psv.RefreshLists(setting)
  30.  
  31.                     Dim strMediaNameList As Specialized.StringCollection = psv.GetCanonicalMediaNameList(setting)
  32.  
  33.                     For Each str As String In strMediaNameList
  34.                         MsgBox(str)
  35.                     Next
  36.                 End If
  37.                 tr.Commit()
  38.             Catch ex As Exception
  39.                 MsgBox(ex.Message)
  40.             End Try
  41.         End Using
  42.     End Sub
  43. End Class

Windows 10, AutoCAD 2017 x64
Подгружены ссылки AcCoreMgd.dll, AcMgd.dll и AcDbMgd.dll - может что-то лишнее из них?

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Или у тебя какой-то глюк с AutoCAD или ты что-то не то делаешь (это более вероятно). Посмотри видео. Там видно, что информация о Plot Settings в словаре PlotSettingsDictionary появляется только после того, как эти установки добавлены:



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Александр Наумович, я извиняюсь.

Добавил Набор1, теперь отобразился один элемент, настроенный на DWG To PDF.pc3. Однако он показал мне его имя, а не канонические имена форматов принтера DWG To PDF.pc3. То есть он так и не определил канонические имена форматов принтера.

И ещё, а как-то можно обойтись без этой процедуры добавления нового набора? Это не только неудобно, но и ещё странно.

И ещё мне Ваш плагин понравился, которым Вы пользуетесь - где-нибудь его можно скачать?
« Последнее редактирование: 03-05-2017, 14:36:47 от Пашин Евгений »

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
И ещё мне Ваш плагин понравился, которым Вы пользуетесь - где-нибудь его можно скачать?
ARXDBG и MGDDBG - утилиты для анализа AutoCAD, чертежа и т.д.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Однако он показал мне его имя, а не канонические имена форматов принтера DWG To PDF.pc3. То есть он так и не определил канонические имена форматов принтера.
Теоретически в этом коде должен был показать канонические имена:
Код - vb.net [Выбрать]
  1. Dim strMediaNameList As Specialized.StringCollection = psv.GetCanonicalMediaNameList(setting)
  2.  
  3. For Each str As String In strMediaNameList
  4.     MsgBox(str)
  5. Next
  6.  
Обратил внимание на то, что у тебя PlotSettings открывается OpenMode.ForRead, а в исходном примере OpenMode.ForWrite
Вполне возможно, что требуется открывать ForWrite

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
ARXDBG и MGDDBG - утилиты для анализа AutoCAD, чертежа и т.д.

Работает :) Только я не знаю где посмотреть все канонические имена форматов принтера.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Работает :) Только я не знаю где посмотреть все канонические имена форматов принтера.
Пашин Евгений
Посмотри этот пример: http://help.autodesk.com/view/ACD/2016/ENU/?guid=GUID-946669A9-E813-4D12-828A-44986E388AA2
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Посмотри этот пример: http://help.autodesk.com/view/ACD/2016/ENU/?guid=GUID-946669A9-E813-4D12-828A-44986E388AA2

Работает!!! И без всяких заморочек с _pagesetup и код запредельно простой.


Код - vb.net [Выбрать]
  1. Imports Autodesk.AutoCAD.Runtime
  2. Imports Autodesk.AutoCAD.DatabaseServices
  3. Imports Autodesk.AutoCAD.PlottingServices ' Чтобы можно было определить PlotConfigManager и всю информацию о плоттерах
  4. Public Class GALLURGY_ACCORECONSOLE_NETLOAD
  5.     <CommandMethod("GALGETCANONICALMEDIANAMESOFLAYOUTS")>
  6.     Public Sub GALGETCANONICALMEDIANAMESOFLAYOUTS()
  7.         Dim acDoc As Autodesk.AutoCAD.ApplicationServices.Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
  8.         ' Новый PlotSettings
  9.         Using plSet As PlotSettings = New PlotSettings(True)
  10.             Dim acPlSetVdr As PlotSettingsValidator = PlotSettingsValidator.Current
  11.             ' Устанавливаем плоттер и формат, НО я решил попробовать ничего в формат не добавлять!!! Только имя принтера!!!
  12.             acPlSetVdr.SetPlotConfigurationName(plSet, "DWG_To_PDF_Gallurgy.pc3", Nothing)
  13.             Dim cnt As Integer = 0
  14.             For Each mediaName As String In acPlSetVdr.GetCanonicalMediaNameList(plSet)
  15.                 ' Вывод имён по каноническому имени mediaName
  16.                 MsgBox(mediaName & " | " & acPlSetVdr.GetLocaleMediaName(plSet, cnt))
  17.                 cnt = cnt + 1
  18.             Next
  19.         End Using
  20.     End Sub
  21. End Class
  22.  

Намного проще, чем мне казалось.

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Александр Наумович, огромное Вам спасибо! Разобрался!!! У этой темы вроде бы нет решения, так может это решение отметим?!

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Я думаю, стоит и статью по данной теме переписать.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я думаю, стоит и статью по данной теме переписать.
Я другую статью написал: http://adn-cis.org/kak-poluchit-spisok-dostupnyix-plotterov-formatov-v-autocad.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy