Получить код Типа линии

Автор Тема: Получить код Типа линии  (Прочитано 9717 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 139
  • Карма: 3
Получить код Типа линии
« : 25-08-2023, 16:49:12 »
Добрый день.
Подскажите можно ли из типа линии "выдернуть" его код,
Dim TLRec As LinetypeTableRecord = acTrans.GetObject(Id, OpenMode.ForRead)
и получить строку, типа такого: A,2.0,-0.5

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: Получить код Типа линии
« Ответ #1 : 27-08-2023, 14:12:24 »
Посмотрите как это сделано в MgdDbg, там хорошо видно как вытащить то, что Вы хотите :
https://github.com/shtirlitsDva/MgdDbg/blob/dfb1474a91c378488bd32660aded0c4d72cff888/Snoop/CollectorExts/SymbolTable.cs#L354C1-L387C10

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 139
  • Карма: 3
Re: Получить код Типа линии
« Ответ #2 : 29-08-2023, 15:37:09 »
Да, спасибо, почти все получилось.
Может кто подскажет как имя формы получить по индексу?
indexShape = recTypeLine.ShapeNumberAt(i1)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13877
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 545
  • Карма: 118
Re: Получить код Типа линии
« Ответ #4 : 30-08-2023, 10:58:34 »
получить строку, типа такого: A,2.0,-0.5
Если задача только извлечь описание типа линий, то есть готовое решение.
https://forum.dwg.ru/showthread.php?t=14359

Отмечено как Решение Захаров Максим 30-08-2023, 11:30:53

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 139
  • Карма: 3
Re: Получить код Типа линии
« Ответ #5 : 30-08-2023, 11:30:46 »
Спасибо всем.
Вроде все работает. Сделал вот так
Код - vb.net [Выбрать]
  1. Public Shared Function FuncReturnTypeLineCode(ByVal recTypeLine As LinetypeTableRecord) As String
  2.         FuncReturnTypeLineCode = "A"
  3.         Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  4.         Dim db As Database = doc.Database
  5.         Dim tr As Transaction = db.TransactionManager.StartTransaction()
  6.         Using tr
  7.             Dim acBlkTbl As BlockTable = tr.GetObject(db.BlockTableId, OpenMode.ForRead)
  8.             Dim acBlkTblRec As BlockTableRecord = tr.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
  9.             'находим все штрихи и точки
  10.             Dim lenD As Integer = recTypeLine.NumDashes
  11.             If lenD > 0 Then
  12.                 Try
  13.                     For i As Integer = 0 To lenD - 1
  14.                         Dim l As Double = 0
  15.                         Dim indexShape As Integer = 0
  16.                         Dim textVal As String = ""
  17.                         Dim nameShape As String = ""
  18.                         'находим значения
  19.                         l = recTypeLine.DashLengthAt(i) 'длина штриха
  20.                         indexShape = recTypeLine.ShapeNumberAt(i) 'индекс формы (0 - нет формы)
  21.                         Try
  22.                             textVal = recTypeLine.TextAt(i) 'читаем текст
  23.                         Catch ex As Autodesk.AutoCAD.Runtime.Exception
  24.                         End Try
  25.                         If indexShape > 0 Then
  26.                             Dim idTextStyleShape As ObjectId = recTypeLine.ShapeStyleAt(i)
  27.                             Dim textStyleShape As TextStyleTableRecord = tr.GetObject(idTextStyleShape, OpenMode.ForRead)
  28.                             If textStyleShape.IsShapeFile = True Then
  29.                                 Dim pShape As Autodesk.AutoCAD.DatabaseServices.Shape = New Autodesk.AutoCAD.DatabaseServices.Shape(Point3d.Origin, 1, 0, 1)
  30.                                 pShape.ShapeNumber = indexShape
  31.                                 pShape.StyleId = idTextStyleShape
  32.                                 acBlkTblRec.AppendEntity(pShape)
  33.                                 nameShape = pShape.Name
  34.                                 pShape.Erase()
  35.                             End If
  36.                             FuncReturnTypeLineCode = FuncReturnTypeLineCode & "," & l & ",[" & nameShape & "," & textStyleShape.FileName & ",S=" & recTypeLine.ShapeScaleAt(i) & ",R=" & recTypeLine.ShapeRotationAt(i) & ",X=" & recTypeLine.ShapeOffsetAt(i).X & ",Y=" & recTypeLine.ShapeOffsetAt(i).Y & "]"
  37.                         ElseIf textVal.Trim.Length > 0 Then
  38.                             Dim id As ObjectId = recTypeLine.ShapeStyleAt(i)
  39.                             Dim acShape As TextStyleTableRecord = tr.GetObject(id, OpenMode.ForRead)
  40.                             FuncReturnTypeLineCode = FuncReturnTypeLineCode & "," & l & ",[" & Chr(34) & textVal & Chr(34) & "," & IO.Path.GetFileNameWithoutExtension(acShape.FileName) & ",S=" & recTypeLine.ShapeScaleAt(i) & ",R=" & recTypeLine.ShapeRotationAt(i) & ",X=" & recTypeLine.ShapeOffsetAt(i).X & ",Y=" & recTypeLine.ShapeOffsetAt(i).Y & "]"
  41.                         Else
  42.                             FuncReturnTypeLineCode = FuncReturnTypeLineCode & "," & l
  43.                         End If
  44.                     Next i
  45.                 Catch ex As Autodesk.AutoCAD.Runtime.Exception
  46.                 End Try
  47.             End If
  48.         End Using
  49.     End Function