ADN Club > Inventor API
Из ilogic в inventor addin
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)
--- Конец кода ---
Что делать?
Навигация
Перейти к полной версии