ADN Club > Civil 3D API
Список элементов сети AutoCAD Civil
D_TRex:
Здравствуйте видел макрос для редактирования труб и колодцев Civil, хочу сделать под свои задачи, для этого надо получить список труб (колодцев).
Собственно к вопросу. Ткните пожалуйста в пример получения списка труб, я находил но там пример создания труб (а мне это не надо), ещё хорошо бы знать какие библиотеки должны быть подключены.
--- Код - vb.net [Выбрать] --- Public Sub AddPipe() Dim doc As CivilDocument = CivilApplication.ActiveDocument Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor Using ts As Transaction = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction() Dim oIdCollection As ObjectIdCollection = doc.GetPipeNetworkIds() Dim objId As ObjectId = oIdCollection(0) Dim oNetwork As Network = TryCast(ts.GetObject(objId, OpenMode.ForWrite), Network) ed.WriteMessage("Pipe Network: {0}" & vbLf, oNetwork.Name) Dim pid As ObjectId = oNetwork.PartsListId Dim pl As PartsList = TryCast(ts.GetObject(pid, OpenMode.ForWrite), PartsList) Dim oid As ObjectId = pl("Concrete Pipe") Dim pfa As PartFamily = TryCast(ts.GetObject(oid, OpenMode.ForWrite), PartFamily) Dim psize As ObjectId = pfa(0) Dim line As LineSegment3d = New LineSegment3d(New Point3d(30, 9, 0), New Point3d(33, 7, 0)) Dim col As ObjectIdCollection = oNetwork.GetPipeIds() Dim oidNewPipe As ObjectId = ObjectId.Null oNetwork.AddLinePipe(oid, psize, line, oidNewPipe, False) Dim oNewPipe As Pipe = TryCast(ts.GetObject(oidNewPipe, OpenMode.ForRead), Pipe) ed.WriteMessage("Pipe created: {0}" & vbLf, oNewPipe.DisplayName) ts.Commit() End Using End Sub Вот код создания труб из данного форума, (исходник само собой был не VB).
alz:
Ну собственно кусок моего кода, но ты точно уверен что в том разделе создал тему?
--- Код - C# [Выбрать] ---using (Transaction tr = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction()){ //получаем сеть using (Network network = tr.GetObject(networkId, OpenMode.ForRead, false, true) as Network) { //получаем список труб и колодцев PartsList partsList = tr.GetObject(network.PartsListId, OpenMode.ForRead, false, true) as PartsList; if (partsList != null) { //создаем коллекцию ObjectIdCollection pipe_ids = partsList.GetPartFamilyIdsByDomain(DomainType.Pipe); ObjectIdCollection structure_ids = partsList.GetPartFamilyIdsByDomain(DomainType.Structure); } } tr.commit();}
Из библиотек именно цивила вроде как AecBaseMgd и AeccDbMgd должно хватить.
D_TRex:
--- Цитата: alz от 15-02-2023, 11:12:54 ---но ты точно уверен что в том разделе создал тему
--- Конец цитаты ---
Только увидел что есть Civil.Api
Спасибо, список получил, уже хорошо, теперь буду пробовать как это использовать (если возможно)
alz:
--- Цитата: D_TRex от 15-02-2023, 11:33:41 --- Спасибо, список получил, уже хорошо, теперь буду пробовать как это использовать (если возможно)
--- Конец цитаты ---
Что-то я сразу немного не понял что для редактирования.
Текущие элементы в сети получаются методами network.GetPipeIds(); и network.GetStructureIds(); Возвращают ObjectIdCollection.
Код выше позволяет получить базовые части и их размеры для использования в создании новых или редактировании существующих труб и колодцев.
D_TRex:
Да я уже понял что не всё так просто, вчера смог получить все имена сетей, потом семейства труб (колодцев), далее типоразмеры по выбранному семейству, а вот то что мне надо было получить для редактирования - отметка начала (конца) трубы и глубина заложения, пока ни как.
Навигация
Перейти к полной версии