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

ADN Club => AutoCAD .NET API => Тема начата: Elfilagas от 22-05-2017, 10:06:03

Название: Изменение формата листа
Отправлено: Elfilagas от 22-05-2017, 10:06:03
Добрый день,
Подскажите, можно ли как то через API менять положение и размеры границ листа на вкладке "Лист"?
Т.е. планируется чтобы при вставке форматки во вкладке листа под ним автоматически была область печати.
Название: Re: Изменение формата листа
Отправлено: Александр Пекшев aka Modis от 22-05-2017, 10:09:20
Это относится к настройкам печати для листа. Начните отсюда (http://help.autodesk.com/view/ACD/2016/ENU/?guid=GUID-56BD3247-471C-4471-A238-FFDFDC3BD2E4) и далее по накатанной - по запросу в гугле C# autocad layout plot settings можно найти много информации
Название: Re: Изменение формата листа
Отправлено: Elfilagas от 22-05-2017, 16:46:08
Спасибо, что-то получается, но возник вопрос, можно ли задать произвольный размер области печати?
Пока получается только выбрать формат листа для определенного принтера и вписать все что есть на листе в этот формат.
Смог считать размеры печати, но задать их не получается:
Код - vb.net [Выбрать]
  1.             Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  2.             Dim db As Database = doc.Database
  3.             Dim ed As Editor = doc.Editor
  4.  
  5.             Dim layout As Layout
  6.             Using Tx As Transaction = db.TransactionManager.StartTransaction()
  7.                 Dim layoutMgr As LayoutManager = LayoutManager.Current
  8.                 layout = TryCast(Tx.GetObject(layoutMgr.GetLayoutId(layoutMgr.CurrentLayout), OpenMode.ForWrite), Layout)
  9.                 Tx.Commit()
  10.             End Using
  11.  
  12.             MsgBox(layout.PlotPaperSize.X & " --- " & layout.PlotPaperSize.Y)
Название: Re: Изменение формата листа
Отправлено: Александр Ривилис от 22-05-2017, 16:58:47
Elfilagas
Прочитай пожалуйста по поводу форматирования кода у нас на форуме (у меня в подписи) и придерживайся этого правила.
Название: Re: Изменение формата листа
Отправлено: Александр Ривилис от 22-05-2017, 17:00:08
можно ли задать произвольный размер области печати?
А в AutoCAD'е вручную ты можешь это задать? Если нет, то и через API ты это не сделаешь.
Название: Re: Изменение формата листа
Отправлено: Elfilagas от 23-05-2017, 11:07:44
К этой же теме. Попробовал создать виртуальный принтер и задать нестандартные форматы нужного размера, чтобы затем применить к листам. Но при попытке применить по имени формата - выдает ошибку что параметр задан не верно:
Код - vb.net [Выбрать]
  1. ' Set the Plotter and page size
  2. acPlSetVdr.SetPlotConfigurationName(acPlSet, _
  3.                                  "NewVirtPlot.pc3", _
  4.                                  "A4Vert")
Стандартные форматы применяет корректно:
Код - vb.net [Выбрать]
  1. ' Set the Plotter and page size
  2. acPlSetVdr.SetPlotConfigurationName(acPlSet, _
  3.                                  "NewVirtPlot.pc3", _
  4.                                  "ISO_expand_A3_(297.00_x_420.00_mm)")
В чем может быть причина?

И еще один вопрос, для расширенных полей название "ISO_expand_A3", а как будет для стандартных форматов без полей? (нет англ. версии и нагуглить не выходит)
Название: Re: Изменение формата листа
Отправлено: Александр Ривилис от 23-05-2017, 11:12:28
И еще один вопрос, для расширенных полей название "ISO_expand_A3", а как будет для стандартных форматов без полей? (нет англ. версии и нагуглить не выходит)
Вообще-то у каждого плоттера (в том числе и виртуального) могут быть свои наименования форматов.
Название: Re: Изменение формата листа
Отправлено: Александр Ривилис от 23-05-2017, 11:23:43
(нет англ. версии и нагуглить не выходит)
(https://farm5.staticflickr.com/4269/34707198811_4c02887102_o.png)

Название: Re: Изменение формата листа
Отправлено: Elfilagas от 23-05-2017, 11:35:48
Вообще-то у каждого плоттера (в том числе и виртуального) могут быть свои наименования форматов.
"Expand" , работает вроде на всех, где есть такой формат, думал и для "без полей" тоже как то одинаково будет.
Интересует для стандартного плоттера "DWF6 ePlot".
Название: Re: Изменение формата листа
Отправлено: Elfilagas от 23-05-2017, 11:41:47
Александр, так форматы, которые Вы прислали - это наоборот с максимальными полями, у expand поля поменьше, а вот как будет "без полей"?
Название: Re: Изменение формата листа
Отправлено: Александр Ривилис от 23-05-2017, 11:53:21
Александр, так форматы, которые Вы прислали - это наоборот с максимальными полями, у expand поля поменьше, а вот как будет "без полей"?
Совсем без полей я не нашёл. Вот с минимальными полями:
(https://farm5.staticflickr.com/4204/34676652332_9f92d3c73a_o.png)

Название: Re: Изменение формата листа
Отправлено: Elfilagas от 23-05-2017, 12:23:33
Спасибо большое, это то что нужно.
Тогда остался один вопрос, почему программно не применяются нестандартные форматы:
К этой же теме. Попробовал создать виртуальный принтер и задать нестандартные форматы нужного размера, чтобы затем применить к листам. Но при попытке применить по имени формата - выдает ошибку что параметр задан не верно:
Код - vb.net [Выбрать]
' Set the Plotter and page size
acPlSetVdr.SetPlotConfigurationName(acPlSet, _
                                 "NewVirtPlot.pc3", _
                                 "A4Vert")
Стандартные форматы применяет корректно:
Код - vb.net [Выбрать]
' Set the Plotter and page size
acPlSetVdr.SetPlotConfigurationName(acPlSet, _
                                 "NewVirtPlot.pc3", _
                                 "ISO_expand_A3_(297.00_x_420.00_mm)")
В чем может быть причина?
Попробовал уже разные имена для нестандартных форматов на разных языках и даже только из цифр, все равно не применяется программно. Хотя в списке форматов они появляются и вручную их можно применить.
Название: Re: Изменение формата листа
Отправлено: Александр Ривилис от 23-05-2017, 12:41:32
Почитай эту тему: http://adn-cis.org/forum/index.php?topic=7795.0
Скорее всего тебе нужно будет задать:
Код - vb.net [Выбрать]
  1. acPlSetVdr.SetPlotConfigurationName(acPlSet, "NewVirtPlot.pc3", Nothing)
  2. acPlSetVdr.SetCanonicalMediaName(acPlSet, "A4Vert")

 
Название: Re: Изменение формата листа
Отправлено: Elfilagas от 23-05-2017, 13:53:16
Так тоже ошибка InvalidInput.

Попробовал вывести весь список форматов для виртуального принтера через:
Код - vb.net [Выбрать]
  1. acPlSetVdr.GetCanonicalMediaNameList(acPlSet)
И выяснилось что все нестандартные форматы, не зависимо от того какое имя им задавать имеют имя "UserDefinedMetric" с указанием размера, например: "UserDefinedMetric (210.00 x 297.00мм)".
Соответственно с таким именем работает:
Код - vb.net [Выбрать]
  1. acPlSetVdr.SetPlotConfigurationName(acPlSet, "NewVirtPlot.pc3", "UserDefinedMetric (210.00 x 297.00мм)")
Спасибо за помощь.
Название: Re: Изменение формата листа
Отправлено: Александр Ривилис от 23-05-2017, 14:23:11
И выяснилось что все нестандартные форматы, не зависимо от того какое имя им задавать имеют имя "UserDefinedMetric" с указанием размера, например: "UserDefinedMetric (210.00 x 297.00мм)".
А если получить для него свойство acPlSetVdr.GetLocaleMediaName(acPlSet,номер_пользовательского_формата_листа)? Не будт ли "A4Vert"?
Название: Re: Изменение формата листа
Отправлено: Elfilagas от 24-05-2017, 10:21:49
Да, возвращает "A4Vert".
Название: Re: Изменение формата листа
Отправлено: Александр Ривилис от 24-05-2017, 10:25:58
Да, возвращает "A4Vert".
О! Значит то, что мы видим в настройках печати - это LocaleMediaName и соответственно если ты создал специфическое имя для формата листа (например, "A4Vert"), то ты можешь найти по LocaleMediaName его CanonicalMediaName и задать это каноническое имя.