Тема: Как узнать координаты крайних точек области модели, видимых через AcadPViewport?

Хочу сделать кнопку по которой указываешь AcadPViewport из листа, а программа переключается на область модели и масштабирует окно, чтобы вид совпал с выбранным ВиевПортом.
В свойствах AcadPViewport такого не нашел...
Заранее благодарю.

Re: Как узнать координаты крайних точек области модели, видимых через AcadPViewport?

> A_Banderass
Идея хорошая. Когда найдешь решение, поделись с народом.

Re: Как узнать координаты крайних точек области модели, видимых через AcadPViewport?

А если попробовать расковырять и переделать на VBA http://www.arcada.com.ua/forum/viewtopic.php?t=850 ?

Re: Как узнать координаты крайних точек области модели, видимых через AcadPViewport?

> A_Banderass
Была как-то сходная тема в обсуждении и тогда я по алгоритму предложенному А.Ривилисом набросал этот код. Здесь определяются размер клиентской области окна и позиция курсора. Возможно что-то пригодится для твоей задачи.

Option Explicit
Type POINTAPI
    X   As Long
    Y   As Long
End Type
Type rect
     Left As Long
     Top As Long
     Right As Long
     Bottom As Long
End Type
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As rect) As Long
Sub CursorPos()
    Dim retValue As Long
    Dim CursorLoc As POINTAPI
    retValue = GetCursorPos(CursorLoc)
    Dim vHWND As Long
    If Documents.Count = 0 Then
        MsgBox "There are no open documents!"
        Exit Sub
    End If
    vHWND = ActiveDocument.hwnd
    Dim vRect As rect
    Dim SizeOfScreen As Variant
    SizeOfScreen = ThisDrawing.GetVariable("SCREENSIZE")
    vRect.Right = SizeOfScreen(0)
    vRect.Bottom = SizeOfScreen(1)
    retValue = ScreenToClient(ByVal vHWND, CursorLoc)
    Dim HeightScreen As Long
    HeightScreen = ThisDrawing.GetVariable("VIEWSIZE")
    Dim WidthScreen As Long
    WidthScreen = HeightScreen * vRect.Right / vRect.Bottom
    Dim ÑenterScreen As Variant
    ÑenterScreen = ThisDrawing.GetVariable("VIEWCTR")
    Dim X0 As Double
    Dim Y0 As Double
    X0 = ÑenterScreen(0) - WidthScreen / 2
    Y0 = ÑenterScreen(1) - HeightScreen / 2
    Dim K_Coord_ScreenToWCS As Single
    K_Coord_ScreenToWCS = HeightScreen / vRect.Bottom
    Dim X_CursorPos As Double
    Dim YCursorPos As Double
    X_CursorPos = X0 + K_Coord_ScreenToWCS * CursorLoc.X
    YCursorPos = Y0 + (HeightScreen - K_Coord_ScreenToWCS * CursorLoc.Y)
    MsgBox "X = " & X_CursorPos & vbCrLf & "Y = " & YCursorPos
End Sub

Re: Как узнать координаты крайних точек области модели, видимых через AcadPViewport?

Все таки думаю это чуть другое. Должно быть попроще.
Есть одна мысль как это сделать...
Но пока не успеваю, занят другим.
Если все получится, то покажу.
Если кто уже знает или есть идея, прошу подсказать:)

Re: Как узнать координаты крайних точек области модели, видимых через AcadPViewport?

На самом деле все просто: Центр зоны в модели нахоится в XDATA, а размеры - это есть масштаб!

Re: Как узнать координаты крайних точек области модели, видимых через AcadPViewport?

> Sliver
Ух ты!!!

Re: Как узнать координаты крайних точек области модели, видимых через AcadPViewport?

> Sliver
Это прикол?
:)