Тема: Как узнать координаты диагонали прямоугольника?

Есть чертеж (предположим А3).
Как программно узнать координаты левой нижней и правой верхней точек прямоугольника, в котором находится запечатываемая область? Может есть специальные методы?

Re: Как узнать координаты диагонали прямоугольника?

Вобщем нужны координаты эффективной площади.

Re: Как узнать координаты диагонали прямоугольника?

Это немного модифицированный пример из Help'a. Программа корректно определяет координаты эффективной области печати только в том случае, если настройки листа соответствуют свойствам одного из системных принтеров. Немного сумбурно, но это легче увидеть, чем объяснить. Поэкспериментируйте, установив View - Display - UCS Icon - Origin
, и Вы поймете, что я имею в виду. В это случае координаты нижнего верхнего угла определяются свойством PlotOrigin
(если оно не изменялось вручную, то - 0,0). А координаты верхнего правого угла будут определяться длиной и шириной области печати.

Option Explicit
Option Compare Text
Option Base 0
Sub Example_GetPaperMargins()
Dim Layout As ACADLayout
Dim msg, Measurement As String
Dim originalValue, marginLowerLeft, marginUpperRight As Variant
Dim PaperHeight As Double
Dim PaperWidth As Double
Dim PlotHeight As Double
Dim PlotWidth As Double
On Error GoTo Exit_Error
msg = vbCrLf & vbCrLf
' Получаем информацию обо всех листах текущего чертежа
For Each Layout In ThisDrawing.Layouts
    ' Пропускаем пространство модели
    If Layout.Name <> "Model" Then
        ThisDrawing.ActiveLayout = Layout
        msg = msg & "Лист: наименование - " & Layout.Name & ", формат - " & Layout.CanonicalMediaName & vbCrLf & vbCrLf
        ' Получаем информацию о координатах области печати и размерах листа
        Layout.GetPaperMargins marginLowerLeft, marginUpperRight
        Layout.GetPaperSize PaperWidth, PaperHeight
        originalValue = Layout.PlotOrigin
        PlotWidth = PaperWidth - marginUpperRight(0) - marginLowerLeft(0)
        PlotHeight = PaperHeight - marginUpperRight(1) - marginLowerLeft(1)
        ' Еденицы измерения
        If Layout.PaperUnits = acInches Then
            Measurement = " дюймов"
        Else
            If Layout.PaperUnits = acMillimeters Then
                Measurement = " миллиметра"
            Else
                Measurement = ""
            End If
        End If
        msg = msg & vbTab & "Размеры листа: " & Format(PaperWidth, "0") & " х " & Format(PaperHeight, "0") & Measurement & vbCrLf
        msg = msg & vbTab & "Эффективная область печати: " & Format(PlotWidth, "0.0000") & " х " & Format(PlotHeight, "0.0000") & Measurement & vbCrLf & vbCrLf
        msg = msg & vbTab & "Координаты области печати: " & vbCrLf & _
                            vbTab & vbTab & "Нижний левый угол: " & vbTab & Format(originalValue(0), "0.0000") & "," & Format(originalValue(1), "0.0000") & vbCrLf & _
                            vbTab & vbTab & "Верхний правый угол: " & vbTab & Format(PlotWidth, "0.0000") & "," & Format(PlotHeight, "0.0000") & vbCrLf & vbCrLf
        msg = msg & vbTab & "Отступы от границ листа: " & vbCrLf & _
                            vbTab & vbTab & "слева: " & vbTab & Format(marginLowerLeft(0), "0.0000") & Measurement & vbCrLf & _
                            vbTab & vbTab & "справа: " & vbTab & Format(marginUpperRight(0), "0.0000") & Measurement & vbCrLf & _
                            vbTab & vbTab & "сверху: " & vbTab & Format(marginUpperRight(1), "0.0000") & Measurement & vbCrLf & _
                            vbTab & vbTab & "снизу: " & vbTab & Format(marginLowerLeft(1), "0.0000") & Measurement & vbCrLf & vbCrLf
        msg = msg & "_____________________" & vbCrLf
        MsgBox "Информация о листах текущего чертежа: " & msg
    Else
        GoTo Next_Layout
    End If
Next_Layout:
    msg = vbCrLf & vbCrLf
Next
GoTo Exit_Here
Exit_Error:
MsgBox Err.Description & " - " & Err.Number
Err.Clear
GoTo Exit_Here
Exit_Here:
Set Layout = Nothing
Set originalValue = Nothing
Set marginLowerLeft = Nothing
Set marginUpperRight = Nothing
End Sub

Re: Как узнать координаты диагонали прямоугольника?

Спасибо. Поразбираюсь...