Выбор контура на чертеже с выводом координат

Автор Тема: Выбор контура на чертеже с выводом координат  (Прочитано 1553 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн funnydogs2uАвтор темы

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Здравствуйте, необходимо сделать следующее:
По 3д-модели типа "коробка"(см.рис), которая имеет вариативные в некоторых пределах размеры,  строится чертеж(см.рис)
После этого пользователю предлагается выделить один из контуров, допустим внутренний скругленный прямоугольник, и по нажатию кнопки координаты концов линий, концов дуг и, по возможности, радиус дуг записываются в txt файл, либо выводятся в листбокс, либо ещё как-то предоставляются.
По возможности, перед этим пользователь по нажатию мышки или принудительно задаёт систему координат (иначе будет от левого нижнего угла листа)
Приложение должно быть .exe, пишу на vb.net, начал с абсолютного нуля как программист, и пока что получилось вызвать Инвентор и вставить нужные виды с модели:
Код - vb.net [Выбрать]
  1. Imports System
  2. Imports System.Type
  3. Imports System.Activator
  4. Imports System.Runtime.InteropServices
  5. Imports Inventor
  6.  
  7. Public Class ScanViewsForm
  8.  
  9.     Dim _invApp As Inventor.Application
  10.     Dim _started As Boolean = False
  11.     Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
  12.         InitializeComponent()
  13.         Try
  14.             _invApp = Marshal.GetActiveObject("Inventor.Application")
  15.  
  16.         Catch ex As Exception
  17.             Try
  18.                 Dim invAppType As Type =
  19.                 GetTypeFromProgID("Inventor.Application")
  20.  
  21.                 _invApp = CreateInstance(invAppType)
  22.                 _invApp.Visible = True
  23.  
  24.                 _started = True
  25.  
  26.             Catch ex2 As Exception
  27.                 MsgBox(ex2.ToString())
  28.                 MsgBox("Не удалось ни найти, ни создать сеанс Inventor")
  29.             End Try
  30.         End Try
  31.     End Sub
  32.  
  33.     Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
  34.         InitializeComponent()
  35.         _invApp = Marshal.GetActiveObject("Inventor.Application")
  36.         If _invApp.Documents.Count = 0 Then
  37.             MsgBox("Надо открыть документ чертежа")
  38.             Return
  39.         End If
  40.         If _invApp.ActiveDocument.DocumentType <> DocumentTypeEnum.kDrawingDocumentObject Then
  41.             MsgBox("Требуется открыть чертеж")
  42.             Return
  43.         End If
  44.         Dim Doc1 As Inventor.DrawingDocument
  45.         Dim Sheet1 As Inventor.Sheet
  46.         'Dim View1 As DrawingView
  47.         Doc1 = _invApp.ActiveDocument
  48.         Sheet1 = Doc1.Sheets.Item(1)
  49.         'View1 = _Sheet1.DrawingViews(1)
  50.         Dim oPoint1 As Point2d
  51.         oPoint1 = _invApp.TransientGeometry.CreatePoint2d(20.0, 13.0)
  52.         Dim oPoint2 As Point2d
  53.         oPoint2 = _invApp.TransientGeometry.CreatePoint2d(20.0, 20.0)
  54.         Dim oPartDoc As PartDocument
  55.         oPartDoc = _invApp.Documents.Open("D:\CAM\MT2CAM4\model3.ipt", False)
  56.  
  57.         Dim oView1 As DrawingView
  58.         oView1 = Sheet1.DrawingViews.AddBaseView(oPartDoc, oPoint1, 1, ViewOrientationTypeEnum.kTopViewOrientation, DrawingViewStyleEnum.kHiddenLineDrawingViewStyle)
  59.         Dim oView2 As DrawingView
  60.         oView2 = Sheet1.DrawingViews.AddBaseView(oPartDoc, oPoint2, 1, ViewOrientationTypeEnum.kFrontViewOrientation, DrawingViewStyleEnum.kHiddenLineDrawingViewStyle)
  61.         Call oPartDoc.Close(True)
  62.  
  63.     End Sub
  64.  


Столкнулся с неразрешимой проблемой получения координат конечной и начальной точек линии, так как не могу понять, к какому классу относится инвенторовское "ребро", писал код следующий:
Код - vb.net [Выбрать]
  1.      _invApp = Marshal.GetActiveObject("Inventor.Application")
  2.         'Создание нового объекта clsSelect.
  3.         Dim oSelect As SelectSet
  4.         oSelect = _invApp.ActiveDocument.SelectSet
  5.         If oSelect.Count = 0 Then
  6.             MsgBox("Выберите линию")
  7.             Return
  8.         End If
  9.         If TypeOf oSelect Is Edge Then
  10.             Dim oL1 As Edge
  11.             oL1 = oSelect
  12.             'Dim oL1Pt1 As Point2d
  13.             Dim MinPt1 As Double
  14.             Dim MaxPt1 As Double
  15.             Call oL1.Evaluator.GetParamExtents(MinPt1, MaxPt1)
  16.  
  17.             ' MsgBox("x.end coord:", Length1)
  18.         Else
  19.             MsgBox("это не линия", )
  20.             Return
  21.         End If
  22.  
На что получал "это не линия"
Буду очень благодарен, если кто-то поможет советом по поводу того, как вставить систему координат(СК) в нужном мне месте на листе чертежа мышью и как получить координаты начала/конца ребра и дуги относительно этой СК.








Отмечено как Решение funnydogs2u 07-12-2019, 02:09:49

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
На что получал "это не линия"
Для определения типа выделенного объекта лучше юзать VBA, там все хорошо видно:


Линии на чертежах - это DrawingCurveSegment, название можно увидеть на скриншоте.

как вставить систему координат(СК)
Тут не всё так просто, раз выделенный объект имеет данные только от левого нижнего угла листа, то придется как то пересчитывать.
Да и похоже что масштаб вида влияет на координаты. Можно временно изображать начало новой системы координат через временные объекты.
Для временных объектов в инвенторе есть так называемая Клиентская Графика, о ней можно почитать в хэлпе.
Можно запрашивать, что бы пользователь выделил точку на виде, где будет новая система координат, а потом пересчитывать координаты относительно пользовательской системы координат.