Тема: Измерения в Инвенторе

Мне нужно измерить расстояние между двумя элементами сборки. В iLogic это делается без труда, а вот в VBA я такого не нашел.
Подскажите, кто знает, как померять расстояние между элементами в сборке или как импортировать это значение из правила iLogic в форму, созданную в VBA?

Re: Измерения в Инвенторе

Алексей М пишет:

как импортировать это значение из правила iLogic в форму, созданную в VBA?

В SDK Инвентора есть пример, как в VBA подцепить iLogic:

Dim iLogicAuto As Object
Set iLogicAuto = GetiLogicAddin(ThisApplication)
If (iLogicAuto Is Nothing) Then Exit Sub

Dim curDoc As Document
Set curDoc = ThisApplication.ActiveDocument

iLogicAuto.ParamValue(curDoc, "text0") = "From Automation"
Dim curVal As String
curVal = iLogicAuto.ParamValue(curDoc, "text0")

MsgBox curVal

Re: Измерения в Инвенторе

Алексей, может вы владете програмированием на уровне, что поможете мне решить мою задачу?
происходит програмная вставка детали в сборку. не могу выполнить вставку таким образом, что бы деталь повисала на курсоре и ждала указания точки вставки. пока вставка происходит всегда в одну и ту же точку (в начало координат).
Не подскажите, как это можно реализовать?

Re: Измерения в Инвенторе

ssn пишет:

не могу выполнить вставку таким образом, что бы деталь повисала на курсоре и ждала указания точки вставки. пока вставка происходит всегда в одну и ту же точку (в начало координат).

По умолчанию матрица создается с нулевыми координатами, поэтому после создания ее надо модифицировать, типа:

' Set the rotation of the matrix for a 45 degree rotation about the Z axis.
    Call oMatrix.SetToRotation(3.14159265358979 / 4, _
                            oTG.CreateVector(0, 0, 1), oTG.CreatePoint(0, 0, 0))
    ' Set the translation portion of the matrix so the part will be positioned
    ' at (3,2,1).
    Call oMatrix.SetTranslation(oTG.CreateVector(3, 2, 1))

А вот с подвеской на курсор придется повозиться. Сами модели можно перемещать процедурой  SetTransformWithoutConstraints(Matrix As Matrix). В событии OnMouseMove(ByVal Button As Inventor.MouseButtonEnum, ByVal ShiftKeys As Inventor.ShiftStateEnum, ByVal ModelPosition As Inventor.Point, ByVal ViewPosition As Inventor.Point2d, ByVal View As Inventor.View) Handles omouseEvent.OnMouseMove
надо считывать координаты курсора в ModelPosition и загонять их в матрицу.
Может есть способы проще, я этим не занимался...
В SDK Инвентора можно найти примеры для изучения.

(изменено: Алексей Романов, 14 апреля 2012г. 17:56:44)

Re: Измерения в Инвенторе

ssn пишет:

не могу выполнить вставку таким образом, что бы деталь повисала на курсоре и ждала указания точки вставки.

Тема мне показалась интересной, вот работающий код:

 Private WithEvents oInteraction As InteractionEvents = Nothing
    Private WithEvents omouseEvent As MouseEvents = Nothing
    Private opDoc As ComponentOccurrence = Nothing
    Private oTransform As Matrix
    '===========================================
    ' Действие при нажатии кнопки
    Private Sub ToolStripButton7_Click(ByVal sender As System.Object, _
                 ByVal e As System.EventArgs) Handles ToolStripButton7.Click
        If m_inventorApplication.ActiveDocumentType <> DocumentTypeEnum.kAssemblyDocumentObject Then Exit Sub
        Dim ocmdMgr As CommandManager
        Try
            If Not m_inventorApplication.ActiveView Is Nothing Then
                'Вставляем модель C:\\Part1.ipt (можно запросить у пользователя) в начало координат
                Dim oADoc As AssemblyDocument
                oADoc = m_inventorApplication.ActiveDocument

                Dim oAsmCompDef As AssemblyComponentDefinition
                oAsmCompDef = oADoc.ComponentDefinition

                Dim oTG As TransientGeometry
                oTG = m_inventorApplication.TransientGeometry
                oTransform = oTG.CreateMatrix
                opDoc = oAsmCompDef.Occurrences.Add("C:\\Part1.ipt", oTransform)

                'Включаем отслежевание курсора мыши
                ocmdMgr = m_inventorApplication.CommandManager
                oInteraction = ocmdMgr.CreateInteractionEvents()
                omouseEvent = oInteraction.MouseEvents
                omouseEvent.MouseMoveEnabled = True
                oInteraction.Start()
            End If
        Catch ex As Exception
        End Try
    End Sub
    Private Sub omouseEvent_OnMouseClick(ByVal Button As Inventor.MouseButtonEnum, ByVal ShiftKeys As Inventor.ShiftStateEnum, ByVal ModelPosition As Inventor.Point, ByVal ViewPosition As Inventor.Point2d, ByVal View As Inventor.View) Handles omouseEvent.OnMouseClick
        'Отключаем отслежевание курсора мыши, фиксируя вставку модели
        If Not oInteraction Is Nothing Then
            oInteraction.Stop()
            omouseEvent = Nothing
            oInteraction = Nothing
            opDoc = Nothing
        End If
    End Sub
    Private Sub omouseEvent_OnMouseMove(ByVal Button As Inventor.MouseButtonEnum, ByVal ShiftKeys As Inventor.ShiftStateEnum, ByVal ModelPosition As Inventor.Point, ByVal ViewPosition As Inventor.Point2d, ByVal View As Inventor.View) Handles omouseEvent.OnMouseMove
        'Перемещаем модель за курсором мыши. Если ошибка, отключаем отслежевание, удаляем модель
        Try
            oTransform.SetTranslation(m_inventorApplication.TransientGeometry.CreateVector(ModelPosition.X, ModelPosition.Y, ModelPosition.Z))
            opDoc.Transformation = oTransform
            View.Update()
        Catch ex As Exception
            If Not oInteraction Is Nothing Then
                oInteraction.Stop()
                omouseEvent = Nothing
                oInteraction = Nothing
                opDoc.Delete()
                opDoc = Nothing

            End If
        End Try
    End Sub

PS код на VB.NET, может стоит обсуждать это в соответствующей теме?

Re: Измерения в Инвенторе

давненько не заглядывал сюда, а тут такой сюрприз!!!
спасибо, пошел пробовать.
:)