Создание и редактирование точек COGO
Создание точек
В .NET API Civil 3D реализовано два основных способа создания точек: создание одиночных точек с помощью объекта «Point3d» и создание сразу нескольких точек с помощью объекта «Point3dCollection». Создание точек COGO осуществляется через свойство «CogoPoints» объекта «CivilDocument», в котором выполняется функция «Add()», имеющую несколько перегрузок. Указанная функция «Add()» возвращает идентификатор создаваемой точки «ObjectId» или коллекцию идентификаторов «ObjectIdCollection».
При создании новой точки COGO можно указывать дополнительные параметры, например, описание и использование ключей описателей.
Следующий пример демонстрирует основные способы создания точек COGO:
- <CommandMethod("AOC_COGOPointsCreating")> Public Sub AOC_COGOPointsCreating()
- Dim a_CivilDoc As CivilDocument
- a_CivilDoc = CivilApplication.ActiveDocument
- 'из объекта Point3d
- 'одна точка по координатам
- a_CivilDoc.CogoPoints.Add(New Point3d(100, 110, 24))
- 'одна точка по координатам и описанию
- a_CivilDoc.CogoPoints.Add(New Point3d(120, 100, 22), "вторая точка")
- 'из объекта Point3dCollection
- 'несколько точек по координатам
- Dim q_Points As New Point3dCollection
- q_Points.Add(New Point3d(110, 140, 21))
- q_Points.Add(New Point3d(120, 140, 22))
- q_Points.Add(New Point3d(130, 140, 23))
- a_CivilDoc.CogoPoints.Add(q_Points)
- 'несколько точек по координатам и описанию
- q_Points = New Point3dCollection
- q_Points.Add(New Point3d(150, 110, 21))
- q_Points.Add(New Point3d(150, 120, 22))
- q_Points.Add(New Point3d(150, 130, 23))
- a_CivilDoc.CogoPoints.Add(q_Points, "вторая группа")
- End Sub
Редактирование точек
Доступ к точкам, как и к другим объектам Civil 3D, осуществляется посредством свойства «ObjectId».
Коллекцию идентификаторов для всех точек, созданных в чертеже можно получить с помощью функции «GetAllPointIds»:
- a_CivilDoc.GetAllPointIds()
Идентификатор одной конкретной точки можно получить с помощью функции «GetPointByPointNumber» свойства «CogoPoints»:
- a_CivilDoc.CogoPoints.GetPointByPointNumber()
Следующий пример демонстрирует, как открыть объект «COGO точка» и внести в него некоторые изменения:
- <CommandMethod("AOC_COGOPointsEditing")> Public Sub AOC_COGOPointsEditing()
- Dim a_CivilDoc As CivilDocument
- a_CivilDoc = CivilApplication.ActiveDocument
- Dim a_ed As Editor
- a_ed = Application.DocumentManager.MdiActiveDocument.Editor
- Dim q_PointId As ObjectId
- Dim q_Point As CogoPoint
- 'Получение ID точки с номером 8
- q_PointId = a_CivilDoc.CogoPoints.GetPointByPointNumber(8)
- Using a_Trans As Transaction = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction()
- 'Получение COGO точки по ее ID
- q_Point = a_Trans.GetObject(q_PointId, OpenMode.ForWrite)
- a_ed.WriteMessage(vbLf & "Редактирование свойств COGO точки с номером 8:")
- 'Описание точки
- a_ed.WriteMessage(vbLf & "описание '" & q_Point.RawDescription & "'")
- q_Point.RawDescription = "Отредактированная точка"
- a_ed.WriteMessage(" изменено - '" & q_Point.RawDescription & "'")
- 'Отметка точки
- a_ed.WriteMessage(vbLf & "отметка '" & q_Point.Elevation & "'")
- q_Point.Elevation = 100
- a_ed.WriteMessage(" изменена - '" & q_Point.Elevation & "'")
- 'Координата X точки
- a_ed.WriteMessage(vbLf & "координата X '" & q_Point.Easting & "'")
- q_Point.Easting = 155
- a_ed.WriteMessage(" изменена - '" & q_Point.Easting & "'")
- 'Координата Y точки
- a_ed.WriteMessage(vbLf & "координата Y '" & q_Point.Northing & "'")
- q_Point.Northing = 135
- a_ed.WriteMessage(" изменена - '" & q_Point.Northing & "'")
- 'Масштаб XY точки
- a_ed.WriteMessage(vbLf & "масштаб XY '" & q_Point.ScaleXY & "'")
- q_Point.ScaleXY = 0.5
- a_ed.WriteMessage(" изменен - '" & q_Point.ScaleXY & "'")
- 'Угол поворота метки точки
- a_ed.WriteMessage(vbLf & "поворот метки '" & q_Point.LabelRotation & "'")
- q_Point.LabelRotation = 0.12
- a_ed.WriteMessage(" изменен - '" & q_Point.LabelRotation & "'")
- 'Сохранение изменений в базе данных чертежа
- a_Trans.Commit()
- End Using
- End Sub
После выполнения этого кода можно будет увидеть результат на чертеже:
Или в командной строке:
Автор перевода: Алексей Терно
Обсуждение: http://adn-cis.org/forum/index.php?topic=475
Опубликовано 23.01.2014Отредактировано 23.01.2014 в 08:19:21