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

23/01/2014

Создание и редактирование точек COGO

Создание точек

В .NET API Civil 3D реализовано два основных способа создания точек: создание одиночных точек с помощью объекта «Point3d» и создание сразу нескольких точек с помощью объекта «Point3dCollection». Создание точек COGO осуществляется через свойство «CogoPoints» объекта «CivilDocument», в котором выполняется функция «Add()», имеющую несколько перегрузок. Указанная функция «Add()» возвращает идентификатор создаваемой точки «ObjectId» или коллекцию идентификаторов «ObjectIdCollection».
При создании новой точки COGO можно указывать дополнительные параметры, например, описание и использование ключей описателей.

Следующий пример демонстрирует основные способы создания точек COGO:

Код - VB.NET: [Выделить]
  1. <CommandMethod("AOC_COGOPointsCreating")> Public Sub AOC_COGOPointsCreating()
  2.  
  3.    Dim a_CivilDoc As CivilDocument
  4.    a_CivilDoc = CivilApplication.ActiveDocument
  5.  
  6.    'из объекта Point3d
  7.    'одна точка по координатам
  8.    a_CivilDoc.CogoPoints.Add(New Point3d(100, 110, 24))
  9.  
  10.    'одна точка по координатам и описанию
  11.    a_CivilDoc.CogoPoints.Add(New Point3d(120, 100, 22), "вторая точка")
  12.  
  13.    'из объекта Point3dCollection
  14.    'несколько точек по координатам
  15.    Dim q_Points As New Point3dCollection
  16.    q_Points.Add(New Point3d(110, 140, 21))
  17.    q_Points.Add(New Point3d(120, 140, 22))
  18.    q_Points.Add(New Point3d(130, 140, 23))
  19.    a_CivilDoc.CogoPoints.Add(q_Points)
  20.  
  21.    'несколько точек по координатам и описанию
  22.    q_Points = New Point3dCollection
  23.    q_Points.Add(New Point3d(150, 110, 21))
  24.    q_Points.Add(New Point3d(150, 120, 22))
  25.    q_Points.Add(New Point3d(150, 130, 23))
  26.    a_CivilDoc.CogoPoints.Add(q_Points, "вторая группа")
  27.  
  28. End Sub

 

Редактирование точек

Доступ к точкам, как и к другим объектам Civil 3D, осуществляется посредством свойства «ObjectId».
Коллекцию идентификаторов для всех точек, созданных в чертеже можно получить с помощью функции «GetAllPointIds»:

Код - VB.NET: [Выделить]
  1. a_CivilDoc.GetAllPointIds()

Идентификатор одной конкретной точки можно получить с помощью функции «GetPointByPointNumber» свойства «CogoPoints»:

Код - VB.NET: [Выделить]
  1. a_CivilDoc.CogoPoints.GetPointByPointNumber()

Следующий пример демонстрирует, как открыть объект «COGO точка» и внести в него некоторые изменения:

Код - VB.NET: [Выделить]
  1. <CommandMethod("AOC_COGOPointsEditing")> Public Sub AOC_COGOPointsEditing()
  2.  
  3.    Dim a_CivilDoc As CivilDocument
  4.    a_CivilDoc = CivilApplication.ActiveDocument
  5.  
  6.    Dim a_ed As Editor
  7.    a_ed = Application.DocumentManager.MdiActiveDocument.Editor
  8.  
  9.    Dim q_PointId As ObjectId
  10.    Dim q_Point As CogoPoint
  11.  
  12.    'Получение ID точки с номером 8
  13.    q_PointId = a_CivilDoc.CogoPoints.GetPointByPointNumber(8)
  14.  
  15.    Using a_Trans As Transaction = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction()
  16.  
  17.       'Получение COGO точки по ее ID
  18.       q_Point = a_Trans.GetObject(q_PointId, OpenMode.ForWrite)
  19.       a_ed.WriteMessage(vbLf & "Редактирование свойств COGO точки с номером 8:")
  20.  
  21.       'Описание точки
  22.       a_ed.WriteMessage(vbLf & "описание '" & q_Point.RawDescription & "'")
  23.       q_Point.RawDescription = "Отредактированная точка"
  24.       a_ed.WriteMessage(" изменено - '" & q_Point.RawDescription & "'")
  25.  
  26.       'Отметка точки
  27.       a_ed.WriteMessage(vbLf & "отметка '" & q_Point.Elevation & "'")
  28.       q_Point.Elevation = 100
  29.       a_ed.WriteMessage(" изменена - '" & q_Point.Elevation & "'")
  30.  
  31.       'Координата X точки
  32.       a_ed.WriteMessage(vbLf & "координата X '" & q_Point.Easting & "'")
  33.       q_Point.Easting = 155
  34.       a_ed.WriteMessage(" изменена - '" & q_Point.Easting & "'")
  35.  
  36.       'Координата Y точки
  37.       a_ed.WriteMessage(vbLf & "координата Y '" & q_Point.Northing & "'")
  38.       q_Point.Northing = 135
  39.       a_ed.WriteMessage(" изменена - '" & q_Point.Northing & "'")
  40.  
  41.       'Масштаб XY точки
  42.       a_ed.WriteMessage(vbLf & "масштаб XY '" & q_Point.ScaleXY & "'")
  43.       q_Point.ScaleXY = 0.5
  44.       a_ed.WriteMessage(" изменен - '" & q_Point.ScaleXY & "'")
  45.  
  46.       'Угол поворота метки точки
  47.       a_ed.WriteMessage(vbLf & "поворот метки '" & q_Point.LabelRotation & "'")
  48.       q_Point.LabelRotation = 0.12
  49.       a_ed.WriteMessage(" изменен - '" & q_Point.LabelRotation & "'")
  50.  
  51.       'Сохранение изменений в базе данных чертежа
  52.       a_Trans.Commit()
  53.  
  54.    End Using
  55. End Sub

После выполнения этого кода можно будет увидеть результат на чертеже:

Точка до редактирования
Точка после редактирования

Или в командной строке:
Результат редактирования в командной строке

Автор: Алексей Терно
Автор перевода: Алексей Терно

Обсуждение: http://adn-cis.org/forum/index.php?topic=475

Опубликовано 23.01.2014
Отредактировано 23.01.2014 в 08:19:21