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

28/01/2014

Создание и редактирование групп точек

Создание группы точек

Группы точек являются важной и функциональной составляющей Civil 3D и в .NET API предоставлены все необходимые функции для полноценной работы с ними.
По аналогии с точками COGO, группа точек создается с помощью функции «Add()» свойства «PointGroups».

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

Код - VB.NET: [Выделить]
  1. <CommandMethod("AOC_PointGroupCreating")> Public Sub AOC_PointGroupCreating()
  2.  
  3.    Dim a_CivilDoc As CivilDocument
  4.    a_CivilDoc = CivilApplication.ActiveDocument
  5.  
  6.    Dim q_PointGroupId As ObjectId
  7.    Dim q_PointGroup As PointGroup
  8.  
  9.    If a_CivilDoc.PointGroups.Contains("Новая группа точек") = False Then
  10.       q_PointGroupId = a_CivilDoc.PointGroups.Add("Новая группа точек")
  11.    End If
  12.  
  13. End Sub

Этот код вначале проверяет, существует ли группа с именем «Новая группа точек», и, если не существует, создает ее.

 

Редактирование группы точек

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

Код - VB.NET: [Выделить]
  1. Using a_Trans As Transaction = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction()
  2.  
  3.    q_PointGroup = a_Trans.GetObject(q_PointGroupId, OpenMode.ForWrite)
  4.    a_Trans.Commit()
  5.  
  6. End Using

Теперь мы получили полный доступ к указанной группе точек, например, мы можем включить в нее точки.
Включение и исключение точек из группы посредством .NET API производится с помощью запросов. В этом примере мы рассмотрим основной запрос – «StandardPointGroupQuery», который можно использовать в большинстве случаев:

Код - VB.NET: [Выделить]
  1. 'создание запроса для группы точек, чтобы включить в нее точки с описанием 'вторая группа'
  2. Dim q_PointGroupQuery As New Autodesk.Civil.DatabaseServices.StandardPointGroupQuery
  3. q_PointGroupQuery.IncludeRawDescriptions = "вторая группа"
  4. q_PointGroup.SetQuery(q_PointGroupQuery)

Так же мы можем определить стиль точки и стиль метки точки для этой группы:

Код - VB.NET: [Выделить]
  1. 'назначение ID стиля точки
  2. q_PointGroup.PointStyleId = a_CivilDoc.Styles.PointStyles.Item("Точка планового обоснования")
  3. 'назначение ID стиля метки точки
  4. q_PointGroup.PointLabelStyleId = a_CivilDoc.Styles.LabelStyles.PointLabelStyles.LabelStyles.Item("Номер и Описание")

Примечание: названия стилей взяты из русского шаблона «Russian Civil 3D All Styles.dwt».

И, наконец, мы можем получить список всех точек, входящих в группу:

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

В результате мы получим массив типа «UInteger», содержащий номера точек, по которым мы сможем получить соответствующие ID:

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

 

Порядок отображения групп

Поскольку одна и та же точка может принадлежать нескольким группам одновременно, очень важно контролировать порядок отображения этих групп. В Civil 3D это возможно через свойства групп точек:
Порядок отображения групп точек

В .NET API это реализовано через свойство «DrawOrder» коллекции групп точек в чертеже:

Код - VB.NET: [Выделить]
  1. 'получение текущего порядка отображения групп
  2. Dim q_DrawOrder As ObjectIdCollection
  3. q_DrawOrder = a_CivilDoc.PointGroups.DrawOrder
  4.  
  5. 'создание обратного порядка отображения
  6. Dim q_DrawOrderReversed As New ObjectIdCollection
  7. For i = q_DrawOrder.Count - 1 To 0 Step -1
  8.    Dim current As ObjectId = q_DrawOrder(i)
  9.    q_DrawOrderReversed.Add(current)
  10. Next
  11.  
  12. 'установка нового порядка отображения
  13. a_CivilDoc.PointGroups.DrawOrder = q_DrawOrderReversed

Свойство «DrawOrder» является обычной коллекцией ID групп точек, последовательность которых и есть порядок отображения групп.

Следует помнить, что свойство «DrawOrder» возвращает «отключенную» коллекция ID групп, т.е. ее нельзя редактировать напрямую. Для редактирования свойства «DrawOrder» необходимо будет вначале создать свой порядок отображения групп, и только потом назначить его свойству «DrawOrder».

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

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

Опубликовано 28.01.2014