Здравствуйте, необходимо сделать следующее:
По 3д-модели типа "коробка"(см.рис), которая имеет вариативные в некоторых пределах размеры, строится чертеж(см.рис)
После этого пользователю предлагается выделить один из контуров, допустим внутренний скругленный прямоугольник, и по нажатию кнопки координаты концов линий, концов дуг и, по возможности, радиус дуг записываются в txt файл, либо выводятся в листбокс, либо ещё как-то предоставляются.
По возможности, перед этим пользователь по нажатию мышки или принудительно задаёт систему координат (иначе будет от левого нижнего угла листа)
Приложение должно быть .exe, пишу на vb.net, начал с абсолютного нуля как программист, и пока что получилось вызвать Инвентор и вставить нужные виды с модели:
Imports System
Imports System.Type
Imports System.Activator
Imports System.Runtime.InteropServices
Imports Inventor
Public Class ScanViewsForm
Dim _invApp As Inventor.Application
Dim _started As Boolean = False
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
InitializeComponent()
Try
_invApp = Marshal.GetActiveObject("Inventor.Application")
Catch ex As Exception
Try
Dim invAppType As Type =
GetTypeFromProgID("Inventor.Application")
_invApp = CreateInstance(invAppType)
_invApp.Visible = True
_started = True
Catch ex2 As Exception
MsgBox(ex2.ToString())
MsgBox("Не удалось ни найти, ни создать сеанс Inventor")
End Try
End Try
End Sub
Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
InitializeComponent()
_invApp = Marshal.GetActiveObject("Inventor.Application")
If _invApp.Documents.Count = 0 Then
MsgBox("Надо открыть документ чертежа")
Return
End If
If _invApp.ActiveDocument.DocumentType <> DocumentTypeEnum.kDrawingDocumentObject Then
MsgBox("Требуется открыть чертеж")
Return
End If
Dim Doc1 As Inventor.DrawingDocument
Dim Sheet1 As Inventor.Sheet
'Dim View1 As DrawingView
Doc1 = _invApp.ActiveDocument
Sheet1 = Doc1.Sheets.Item(1)
'View1 = _Sheet1.DrawingViews(1)
Dim oPoint1 As Point2d
oPoint1 = _invApp.TransientGeometry.CreatePoint2d(20.0, 13.0)
Dim oPoint2 As Point2d
oPoint2 = _invApp.TransientGeometry.CreatePoint2d(20.0, 20.0)
Dim oPartDoc As PartDocument
oPartDoc = _invApp.Documents.Open("D:\CAM\MT2CAM4\model3.ipt", False)
Dim oView1 As DrawingView
oView1 = Sheet1.DrawingViews.AddBaseView(oPartDoc, oPoint1, 1, ViewOrientationTypeEnum.kTopViewOrientation, DrawingViewStyleEnum.kHiddenLineDrawingViewStyle)
Dim oView2 As DrawingView
oView2 = Sheet1.DrawingViews.AddBaseView(oPartDoc, oPoint2, 1, ViewOrientationTypeEnum.kFrontViewOrientation, DrawingViewStyleEnum.kHiddenLineDrawingViewStyle)
Call oPartDoc.Close(True)
End Sub
Столкнулся с неразрешимой проблемой получения координат конечной и начальной точек линии, так как не могу понять, к какому классу относится инвенторовское "ребро", писал код следующий:
_invApp = Marshal.GetActiveObject("Inventor.Application")
'Создание нового объекта clsSelect.
Dim oSelect As SelectSet
oSelect = _invApp.ActiveDocument.SelectSet
If oSelect.Count = 0 Then
MsgBox("Выберите линию")
Return
End If
If TypeOf oSelect Is Edge Then
Dim oL1 As Edge
oL1 = oSelect
'Dim oL1Pt1 As Point2d
Dim MinPt1 As Double
Dim MaxPt1 As Double
Call oL1.Evaluator.GetParamExtents(MinPt1, MaxPt1)
' MsgBox("x.end coord:", Length1)
Else
MsgBox("это не линия", )
Return
End If
На что получал "это не линия"
Буду очень благодарен, если кто-то поможет советом по поводу того, как вставить систему координат(СК) в нужном мне месте на листе чертежа мышью и как получить координаты начала/конца ребра и дуги относительно этой СК.