31/05/2017
Как получить каноническое имя формата листа для локального имени формата?
Вопрос: Пользователь в команде ПЕЧАТЬ (_PLOT) выбирает формат листа по его локальному имени, а в программе для печати следует задавать каноническое имя формата. Как можно получить соответствие между локальным и каноническим именами формата?
Ответ: Ниже приведен код на VBA, реализующий преобразование локального имени в каноническое. Основное преобразование происходит в функции GetCanonicalFromLocalName.
Код - VBA: [Выделить]
- '1. Печать в PDF при помощи выбора нижней левой и верхней правой точек
- Sub PlotByPoints()
- Dim Layout As AcadLayout
- Dim pt1 As Variant, pt2 As Variant
- Set Layout = ThisDrawing.ActiveLayout
- ' Получаем первую точку рамки
- pt1 = ThisDrawing.Utility.GetPoint(, "Выберите нижний левый угол")
- ' Переводим координаты из WCS в DCS
- pt1 = ThisDrawing.Utility.TranslateCoordinates(pt1, acWorld, acDisplayDCS, False)
- ReDim Preserve pt1(0 To 1) ' Приводим массив к 2д виду, удаляем z координату
- ' Получаем вторую точку
- pt2 = ThisDrawing.Utility.GetPoint(, "Выберите правый верхний угол")
- ' Переводим координаты из WCS в DCS
- pt2 = ThisDrawing.Utility.TranslateCoordinates(pt2, acWorld, acDisplayDCS, False)
- ReDim Preserve pt2(0 To 1) ' Приводим массив к 2д виду, удаляем z координату
- ' Настройка печати
- Layout.ConfigName = "PDFCreator"
- ' Обновим текущую плот-информацию
- Layout.RefreshPlotDeviceInfo
- ' Печатаем на формат A0
- Layout.CanonicalMediaName = GetCanonicalFromLocalName(Layout, "A0")
- Layout.CenterPlot = True
- Layout.PlotRotation = ac90degrees
- Layout.StandardScale = acScaleToFit
- Layout.StyleSheet = "acad.ctb"
- ' Устанавливаем рамки окошка
- Layout.SetWindowToPlot pt1, pt2
- Layout.PlotType = acWindow
- ' Отправляем на печать
- ThisDrawing.Regen acAllViewports
- ThisDrawing.Plot.PlotToDevice
- End Sub
- '----------------------------------------------------------
- ' Функция преобразует из локального имени формата листа
- ' в каноническое
- '----------------------------------------------------------
- Function GetCanonicalFromLocalName(Layout As AcadLayout, lName As String) As String
- Dim cNames As Variant
- cNames = Layout.GetCanonicalMediaNames()
- Dim cName As String
- cName = Layout.CanonicalMediaName
- sName = Layout.GetLocaleMediaName(cNames(i))
- If lName = sName Then
- cName = cNames(i)
- Exit For
- End If
- Next
- GetCanonicalFromLocalName = cName
- End Function
Автор: Александр Ривилис
Отредактировано 31.05.2017 в 13:58:18
Обсуждение: http://adn-cis.org/forum/index.php?topic=7824
Опубликовано 31.05.2017Отредактировано 31.05.2017 в 13:58:18