ADN Club > Inventor API

Из ilogic в inventor addin

(1/4) > >>

niksasa:
Добрый день. Решил адаптировать правило ilogic для addin.
Вот само правило ilogic для создания чертежа

--- Код: ---Imports Inventor.ViewOrientationTypeEnum
Imports Inventor.DrawingViewStyleEnum
doc = ThisDoc.ModelDocument
If (doc.SubType <> "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}") Then
MessageBox.Show("Это не файл сортамента", "iLogic")
Return
End If 
Dim oDrawingDoc as DrawingDocument   
Dim oPartDoc as Document
Dim oSheet As sheet
Dim oView1 as DrawingView
Dim oView2 as DrawingView
Dim oView3 as DrawingView
ViewScale = 1/2
'Ask to create drawing?
dwgQuery=MsgBox("Создать чертеж сортамента?", vbYesNo,"Выбирите действие")
If dwgQuery = vbYes Then
    oPartDoc = ThisDoc.Document
        'Define DWG Template File Location
    oDrawingDoc = ThisApplication.Documents.Add(kDrawingDocumentObject, "d:\Программы\Autodesk_Inventor_2013\Templates\Шаблоны-Никитин\Сортамент.dwg", True)
    'oDrawingDoc = ThisApplication.Documents.Add(kDrawingDocumentObject, "", True)
   oSheet = oDrawingDoc.Sheets.Item(1)
          ' Create a new NameValueMap object
  Dim oBaseViewOptions As NameValueMap
  oBaseViewOptions = ThisApplication.TransientObjects.CreateNameValueMap
  'True = folded view
 'False = flat pattern view
  oBaseViewOptions.Add("SheetMetalFoldedModel", False)
   'Define 2d view bottom left corner points for four views
oPoint1 = ThisApplication.TransientGeometry.CreatePoint2d(10, 20) ' front view
oPoint2 = ThisApplication.TransientGeometry.CreatePoint2d(20, 20) ' right view
oPoint3 = ThisApplication.TransientGeometry.CreatePoint2d(10, 15)' top view
oBaseView = oSheet.DrawingViews.AddBaseView(oPartDoc,oPoint1, ViewScale,kFrontViewOrientation, kHiddenLineRemovedDrawingViewStyle, "Главный")
oView2 = oSheet.DrawingViews.AddProjectedView(oBaseView,oPoint2, kFromBaseDrawingViewStyle, ViewScale)
oView3 = oSheet.DrawingViews.AddProjectedView(oBaseView,oPoint3, kFromBaseDrawingViewStyle, ViewScale) 
End If
--- Конец кода ---
На пользовательском элементе создана кнопка. На кнопку помещаю код:

--- Код: --- Dim doc As Document = m_inventorApplication.ActiveDocument
        If (doc.SubType <> "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}") Then
            MsgBox("Это не файл сортамента", , "myAddIn")
            Return
        End If
        Dim oDrawingDoc As DrawingDocument
        Dim oSheet As Sheet
        Dim oView1 As DrawingView
        Dim oView2 As DrawingView
        Dim oView3 As DrawingView
        Dim ViewScale As Double = 1 / 2
        'Ask to create drawing?
        Dim dwgQuery As Integer = MsgBox("Создать чертеж сортамента?", vbYesNo, "Выберите действие")
        If dwgQuery = vbYes Then
            'Define DWG Template File Location
            oDrawingDoc = m_inventorApplication.Documents.Add(DocumentTypeEnum.kDrawingDocumentObject, "d:\Программы\Autodesk_Inventor_2013\Templates\Шаблоны-Никитин\Сортамент.dwg", True)
            'oDrawingDoc = ThisApplication.Documents.Add(kDrawingDocumentObject, "", True)
            oSheet = oDrawingDoc.Sheets.Item(1)
            ' Create a new NameValueMap object
            Dim oBaseViewOptions As NameValueMap
            oBaseViewOptions = m_inventorApplication.TransientObjects.CreateNameValueMap
            'True = folded view
            'False = flat pattern view
            oBaseViewOptions.Add("SheetMetalFoldedModel", False)
            'Define 2d view bottom left corner points for four views
            Dim oPoint1 As Point = m_inventorApplication.TransientGeometry.CreatePoint2d(10, 20) ' front view
            Dim oPoint2 As Point = m_inventorApplication.TransientGeometry.CreatePoint2d(20, 20) ' right view
            Dim oPoint3 As Point = m_inventorApplication.TransientGeometry.CreatePoint2d(10, 15) ' top view
            oView1 = oSheet.DrawingViews.AddBaseView(doc, oPoint1, ViewScale, ViewOrientationTypeEnum.kFrontViewOrientation, _
                                                     DrawingViewStyleEnum.kHiddenLineRemovedDrawingViewStyle, "Главный")
            oView2 = oSheet.DrawingViews.AddProjectedView(oView1, oPoint2, DrawingViewStyleEnum.kFromBaseDrawingViewStyle, ViewScale)
            oView3 = oSheet.DrawingViews.AddProjectedView(oView1, oPoint3, DrawingViewStyleEnum.kFromBaseDrawingViewStyle, ViewScale)
        End If
--- Конец кода ---
После нажатия на кнопку инвентор зависает. Чего не хватает в коде для работы кнопки? Спасибо.

Владимир Ананьев:
На какой строке в режиме отладки  возникает проблема?

Создание нового документа чертежа надо бы проверять на возможность возникновения ошибки.
oDrawingDoc создается корректно?

niksasa:

--- Цитата: Владимир Ананьев от 17-12-2013, 14:56:22 ---На какой строке в режиме отладки  возникает проблема?
--- Конец цитаты ---
В режиме отладки никаких ошибок не возникает.

--- Цитата: Владимир Ананьев от 17-12-2013, 14:56:22 ---oDrawingDoc создается корректно?
--- Конец цитаты ---
Чертеж вообще не создается

Владимир Ананьев:
Что странное пишешь. 
Или зависает, или в режиме пошагового исполнения все работает. 
Одно из двух...

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

Если ничего не выйдет, выложи наипростейший компилируемый проект VB.NET, который надежно воспроизводит проблему. 

niksasa:

--- Цитата: Владимир Ананьев от 17-12-2013, 15:20:38 ---Если документ чертежа не создается, выкинь из кода все, кроме команды на его создаение и добейся результата. 
Потом добавишь постепенно все остальное.
--- Конец цитаты ---
Сделал так, как Вы посоветовали. Дохожу до момента вставки вида и тут косяк.
Вот сообщение об ошибке:
Подробная информация об использовании оперативной
(JIT) отладки вместо данного диалогового
окна содержится в конце этого сообщения.

************** Текст исключения **************
System.InvalidCastException: Невозможно привести COM-объект типа "System.__ComObject" к интерфейсному типу "Inventor.Point". Операция завершилась со сбоем, поскольку вызов QueryInterface COM-компонента для интерфейса с IID "{CB69F172-558E-11D3-B793-0060B0F159EF}" возвратил следующую ошибку: Интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).
   в Properties.UserControl1.Button5_Click(Object sender, EventArgs e)
   в System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   в System.Windows.Forms.Control.WndProc(Message& m)
   в System.Windows.Forms.ButtonBase.WndProc(Message& m)
   в System.Windows.Forms.Button.WndProc(Message& m)
   в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Вот сам код:

--- Код: --- Dim oView1 As DrawingView
                Dim oView2 As DrawingView
                Dim oView3 As DrawingView
                Dim ViewScale As Double = 1 / 2
                Dim oPoint1 As Point = m_inventorApplication.TransientGeometry.CreatePoint2d(10, 20) ' front view
                Dim oPoint2 As Point = m_inventorApplication.TransientGeometry.CreatePoint2d(20, 20) ' right view
                Dim oPoint3 As Point = m_inventorApplication.TransientGeometry.CreatePoint2d(10, 15) ' top view
                oView1 = oSheet.DrawingViews.AddBaseView(pDoc, oPoint1, ViewScale, ViewOrientationTypeEnum.kFrontViewOrientation, _
                                                         DrawingViewStyleEnum.kHiddenLineRemovedDrawingViewStyle, "Главный")
                oView2 = oSheet.DrawingViews.AddProjectedView(oView1, oPoint2, DrawingViewStyleEnum.kFromBaseDrawingViewStyle, ViewScale)
                oView3 = oSheet.DrawingViews.AddProjectedView(oView1, oPoint3, DrawingViewStyleEnum.kFromBaseDrawingViewStyle, ViewScale)
--- Конец кода ---
Что делать?

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии