Тема: Как по координатам из метода GetBoundingBox уменьшить размер окна до этих координат?

2 CADHELP
извините за назойливость , но никак не могу понять как по координатам из метода GetBoundingBox уменьшить размер окна до этих координат???????

Re: Как по координатам из метода GetBoundingBox уменьшить размер окна до этих координат?

Кажется алгоритм найден, в четверг попробую реализовать.Основан то ли на глюке метода SelectByPolygon, то ли на хитрой задумке разработчиков AutoCada.Вкратце:
1.Высчитываем какая из сторон прямоугольника > ширина или высота.
2.Делаем ZoomPickWindow и по границе большей стороны рисуем линию.
3.Уменьшаем ширину или высоту окна(в зависимости от того что меньше) до тех пор пока SelectByPolygon этой линии не станет равным нулю . Это значит, что окно стало размеров исходного прямоугольника.

Re: Как по координатам из метода GetBoundingBox уменьшить размер окна до этих координат?

зачем так сложно??
вычисли соотношение ширины к высоте (обьекта).Для етого ширину подели на высоту :)
Затем поменяй Ширину окна
ThisDrawing.Width = ThisDrawing.Width * (X/Y)
апотом просто Application.ZoomWindow minP, maxP
при етом ортогогональные стороны могут оказаться не видимыми так-как проходят по самому краю окна. Тем не мение ето не мешает создать нормальный wmf

Re: Как по координатам из метода GetBoundingBox уменьшить размер окна до этих координат?

М-м-м... Но из каких соображений вы высчитываете так ширину?

Re: Как по координатам из метода GetBoundingBox уменьшить размер окна до этих координат?

просто приравниваю соотношение окна к соотношению обьекта
допустим у вас прямоугольник 50 по X и 20 по Y, соотношение сторон будет 50/20=2.5
теперь меняем окно чертежа
ThisDrawing.Width = ThisDrawing.Height * 2.5

Re: Как по координатам из метода GetBoundingBox уменьшить размер окна до этих координат?

вот я лично не понимаю, смотри
мы делаем вначале zoompickwindow и получаем в окне изображение объекта, который по оси X или Y
приближен "до упора" , теперь нам надо сжать окно до размеров объекта в зависимости от того , где он сжат не "до упора"(X или Y). Так вот я и не понимаю по какому-такому закону вы выбираете соотношение ширины и высоты, поскольку первый Zoom , дальше в зависиости от размеров может давать различные соотношение.

Re: Как по координатам из метода GetBoundingBox уменьшить размер окна до этих координат?

мы говорим на разных языках ??
>>zoompickwindow и получаем в окне изображение объекта, который по оси X или Y
приближен "до упора"
не надо делать ни каких зумов руками или использовать zoompickwindow
>>Так вот я и не понимаю по какому-такому закону вы выбираете соотношение ширины и высоты
>>поскольку первый Zoom , дальше в зависиости от размеров может давать различные соотношение
Зум не меняет пропорции обьекта
не надо подстраивать окно под обьект, проще растянуть окно по пропорциям обьекта и уже потом делать зум по точкам обьекта
порядок таков
1. Максимайз окно чертежа(понятно?)
2. Взять точки обьецта (понятно?)
3. Найти пропорцию обьекта (П = Ш/В) (понятно?)
4. Изменить ширину окна чертежа (ширину окна * П)(понятно?)
5. Зум по точкам (понятно?)
6. Експорт
7. Сначала
при етом не важно будет ли окно иметь размер 200х300 или 400х600, ехпорт в wmf будет все равно одинаковый, так же не важно видиш ли ты все окно или только часть его(иногда при растягивании окно чертеж может быть болше чем окно автокада)
если ты делаеш ехпорт больше чем одного раза, не забудь максимайз окно чертежа
ThisDrawing.WindowState = acMax

Re: Как по координатам из метода GetBoundingBox уменьшить размер окна до этих координат?

ваш вариант верен если прямоугольник нарисован большая сторона по вертикали, а если большая сторона по горизонтали , то сверху и снизу экспортированной картинки будут пустые места

Re: Как по координатам из метода GetBoundingBox уменьшить размер окна до этих координат?

???
да какая разница что больше???

Sub wmfEx()
Dim rel As Double
Dim minP, maxP
Dim more As Boolean
Dim ss As AcadSelectionSet
ThisDrawing.WindowState = acMax
  Set ss = ThisDrawing.ActiveSelectionSet
    For i = 0 To 100000
        ss.Clear
        ss.SelectOnScreen
        ss.Item(0).GetBoundingBox minP, maxP
        rel = (maxP(0) - minP(0)) / (maxP(1) - minP(1))
        ThisDrawing.Width = ThisDrawing.Height * rel
        Application.ZoomWindow minP, maxP
        ThisDrawing.Width = ThisDrawing.Width + 5
        ThisDrawing.Height = ThisDrawing.Height + 5
        ThisDrawing.SendCommand "REGEN "
        ThisDrawing.Export "C:\" & CStr(i), "WMF", ss
        If MsgBox("Next?", vbYesNo) = vbNo Then Exit For
        ThisDrawing.WindowState = acMax
    Next
End Sub

Re: Как по координатам из метода GetBoundingBox уменьшить размер окна до этих координат?

Да вы были абсолютно правы, хочу только сказать , что ZoomWindow не всегда корректно работает, т.е. оставляет промежутки между краем экрана и самим чертежём, поэтому я использовал ZoomObject через SendCommand

Re: Как по координатам из метода GetBoundingBox уменьшить размер окна до этих координат?

VBA vесь глючный, можете замететь что я использую ThisDrawing.SendCommand "REGEN "
птому что ThisDrawing.REGEN ни хрена не REGEN то есть он конечно REGEN но все еще в окне до его изменения. Я думаю если ты используешь  ZoomObject через SendCommand то ThisDrawing.SendCommand "REGEN " можешь выкинуть, должно и без него работать