Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Захаров Максим от 25-08-2023, 16:49:12

Название: Получить код Типа линии
Отправлено: Захаров Максим от 25-08-2023, 16:49:12
Добрый день.
Подскажите можно ли из типа линии "выдернуть" его код,
Dim TLRec As LinetypeTableRecord = acTrans.GetObject(Id, OpenMode.ForRead)
и получить строку, типа такого: A,2.0,-0.5
Название: Re: Получить код Типа линии
Отправлено: Владимир Шу от 27-08-2023, 14:12:24
Посмотрите как это сделано в MgdDbg, там хорошо видно как вытащить то, что Вы хотите :
https://github.com/shtirlitsDva/MgdDbg/blob/dfb1474a91c378488bd32660aded0c4d72cff888/Snoop/CollectorExts/SymbolTable.cs#L354C1-L387C10
Название: Re: Получить код Типа линии
Отправлено: Захаров Максим от 29-08-2023, 15:37:09
Да, спасибо, почти все получилось.
Может кто подскажет как имя формы получить по индексу?
indexShape = recTypeLine.ShapeNumberAt(i1)
Название: Re: Получить код Типа линии
Отправлено: Александр Ривилис от 29-08-2023, 23:00:21
Захаров Максим,
Эти две ссылки должны тебе помочь:
https://adn-cis.org/poluchenie-obrazczov,-tekstov-i-form,-ispolzuemyix-v-tipax-linij.html
https://adn-cis.org/opredelenie-shx-fajla,-ispolzuemogo-v-tipe-linii.html
Название: Re: Получить код Типа линии
Отправлено: Привалов Дмитрий от 30-08-2023, 10:58:34
получить строку, типа такого: A,2.0,-0.5
Если задача только извлечь описание типа линий, то есть готовое решение.
https://forum.dwg.ru/showthread.php?t=14359
Название: Re: Получить код Типа линии
Отправлено: Захаров Максим от 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