Список форумов Конференция САПР Bentley MicroStation Конференция САПР Bentley MicroStation
www.ustation.ru
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

VBA позиционирование вида на Attachment

 
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Прикладное
Предыдущая тема :: Следующая тема  
Автор Сообщение
AndrejS



Зарегистрирован: 12.10.2006
Сообщения: 18

СообщениеДобавлено: Чт Окт 12, 2006 1:25 pm    Заголовок сообщения: VBA позиционирование вида на Attachment Ответить с цитатой

Здравствуйте!
У меня такая проблема:
Нужно позиционировать вид на элементе, который находится в Attachment-файле. В данный момент есть такой код:

Код:


Public Sub ZoomReferenceElement(ele As Element, Transform As Point3d) '  Transform - точка начала координат Attachment-файла

    Dim Ext As Point3d          ' Extension - тут содержатся размеры
    Dim pntHigh As Point3d      ' Нижние значения коорд. осей в элементе
    Dim pntLow As Point3d       ' Верхние значения коорд. осей в элементе
    Dim oView As View           ' Объект "Вид"
    Dim Center As Point3d       ' Центр элемента
    Dim ViewCounter As Integer  ' Счетчик видов
       
    ' Считываем мин. и макс. значения коорд осей для рассматриваемого элемента
    pntHigh = ele.Range.High
    pntLow = ele.Range.Low

   
    ' Вносим поправки на смещение Attachment Origin относительно Master Origin
    pntHigh.X = pntHigh.X + Transform.X
    pntHigh.Y = pntHigh.Y + Transform.Y
    pntHigh.Z = pntHigh.Z + Transform.Z
    pntLow.X = pntLow.X + Transform.X
    pntLow.Y = pntLow.Y + Transform.Y
    pntLow.Z = pntLow.Z + Transform.Z


    ' Вычисляем размеры элемента
    Ext.X = pntHigh.X - pntLow.X
    Ext.Y = pntHigh.Y - pntLow.Y
    Ext.Z = pntHigh.Z - pntLow.Z
   
    ' Вычисляем центр элемента
    Center.X = (pntHigh.X + pntLow.X) / 2
    Center.Y = (pntHigh.Y + pntLow.Y) / 2
    Center.Z = (pntHigh.Z + pntLow.Z) / 2
   
   
    ' Позиционируем 4 основных вида на рассматриваемый элемент
   
    For ViewCounter = 1 To 4
        ' Берем вид, с котрым будем работать
        If (ActiveDesignFile.Views(ViewCounter).IsOpen = True) Then
            Set oView = ActiveDesignFile.Views(ViewCounter)
            With oView
                Dim viewExtents As Point3d
                viewExtents = .Extents
                .SetArea1 pntLow, pntHigh, .Origin, viewExtents.Z, .Rotation, .ActiveDepth
                ' Проводим зум на центре элемента
                .ZoomAboutPoint Center, 1.5
                ' Обновляем вид
                .Redraw
            End With
        End If
    Next ViewCounter
End Sub



Всё работает нормально, НО когда attach-файл начинаешь шкалировать, поворачивать, отражать и т.д. видимо сбиваются оси и единицы измерения по X,Y,Z. Вобщем позиционируется вид неправильно. Что делать? Don't know
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пт Окт 13, 2006 10:44 am    Заголовок сообщения: Ответить с цитатой

У меня все работает нормально, сначала элемент появляестя в центре вида, а потом если что делать с референсом, то все отображается без проблем
Может там дело в передаваемой точке Transform?
Я передавал точку 0,0,0
Или я что-то так не понял...
Опишите подробнее действия, когда возникает проблема, чтобы ее поймать...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
AndrejS



Зарегистрирован: 12.10.2006
Сообщения: 18

СообщениеДобавлено: Пн Окт 16, 2006 11:19 am    Заголовок сообщения: Ответить с цитатой

Да, верно. Что-то перемудрил со смещением. Спасибо. Yes

Тперь код такой:

Код:

Sub ZoomReferenceElement(ele As Element)
   
    Dim Ext As Point3d          ' Extension - тут содержатся размеры элемента
    Dim pntHigh As Point3d      ' Нижние значения коорд. осей в элементе
    Dim pntLow As Point3d       ' Верхние значения коорд. осей в элементе
    Dim oView As View           ' Объект "Вид"
    Dim ViewCounter As Integer  ' Счетчик видов
       
    Dim oLine As LineElement
    ' Считываем мин. и макс. значения коорд осей для рассматриваемого элемента
    pntHigh = ele.Range.High
    pntLow = ele.Range.Low
   
    Set oLine = CreateLineElement2(Nothing, pntLow, pntHigh)
    ActiveModelReference.AddElement oLine
    oLine.Redraw


    ' Вычисляем размеры элемента
    Ext.X = pntHigh.X - pntLow.X
    Ext.Y = pntHigh.Y - pntLow.Y
    Ext.Z = pntHigh.Z - pntLow.Z
   

   
   
    ' Позиционируем 4 основных вида на рассматриваемый элемент
    Dim pntZoom As Point3d
    For ViewCounter = 1 To 4
        ' Берем вид, с котрым будем работать
        If (ActiveDesignFile.Views(ViewCounter).IsOpen = True) Then
            Set oView = ActiveDesignFile.Views(ViewCounter)
            With oView
                 pntZoom = Point3dAddScaled(pntLow, Ext, 0.5)

                Dim viewExtents As Point3d
                viewExtents = .Extents
                .SetArea1 pntLow, pntHigh, .Origin, viewExtents.Z, .Rotation, .ActiveDepth
                ' Проводим зум на центре элемента
                .ZoomAboutPoint pntZoom, 1.5
                ' Обновляем вид
                .Redraw
            End With
        End If
    Next ViewCounter
End Sub


Но тут я не до конца понял с функцией Point3dAddScaled(pntLow, Ext, 0.5) тут первых 2-а параметра ясно что делают, а вот 3-ий что-то шкалирует. Но вот что... Don't know Может быть кто-то знает...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пн Окт 16, 2006 3:03 pm    Заголовок сообщения: Ответить с цитатой

Третий параметр просто умножается на вектор между двумя точками. В результате получается вектор с заданным масштабом.
Это легко проследить на след. примере
Код:


Dim m_atPoints(0 To 1) As Point3d
Dim oEl As LineElement

m_atPoints(1).X = 100# ' все остальные 0

' получаем линию длиной 100.0*0.5=50.0
m_atPoints(1) = Point3dAddScaled(m_atPoints(0), m_atPoints(1), 0.5)
Set oEl = CreateLineElement1(Nothing, m_atPoints)
ActiveModelReference.AddElement oEl
oEl.Redraw

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
AndrejS



Зарегистрирован: 12.10.2006
Сообщения: 18

СообщениеДобавлено: Вт Окт 17, 2006 3:36 pm    Заголовок сообщения: Ответить с цитатой

Да, всё верно. Спасибо.

Кстати. Этот макрос работает неправильно, если
в окне используется эффект перспективы!


Буду думать над изменением параметров перспективы вида... Confused
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Прикладное Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group