ADN Club > Другие продукты Autodesk
Plant 3D API. Поиск в БД Plant
(1/1)
Макс:
Добрый день,
прошу помочь (подсказать) как найти объекты с совпадающими параметрами (номер линии).
В проекте Plant необходимо проверить совпадение информации, указанной в линиях трубопроводов для чертежей Plant 3D и P&ID.
Информацию по линиям в Plant получаю при выполнении команды в пространстве файла Plant 3d
--- Код - C# [Выбрать] --- using Autodesk.AutoCAD.DatabaseServices;using Autodesk.AutoCAD.EditorInput;using Autodesk.ProcessPower.DataLinks;using Autodesk.ProcessPower.DataObjects;using Autodesk.ProcessPower.ProjectManager;using Autodesk.ProcessPower.P3dProjectParts;using Autodesk.AutoCAD.ApplicationServices.Application;using Autodesk.ProcessPower.PlantInstance; PlantProject currentProj = PlantApplication.CurrentProject; PipingProject pipeProj = (PipingProject)currentProj.ProjectParts["Piping"]; DataLinksManager dlm = pipeProj.DataLinksManager; PnPDatabase db = dlmPlant.GetPnPDatabase(); int dwgRowId = dlmPlant.GetDrawingId(Application.DocumentManager.MdiActiveDocument.Database); PnPRowIdArray groupPlantIds = dlm.GetRelatedRowIds( "P3dDrawingLineGroupRelationship", "Drawing", dwgRowId, "LineGroup"); foreach (int groupId in groupPlantIds) { PnPRow rowLineGroup = db.GetRow(groupId); try { tag = rowLineGroup["Tag"] as string; // номер линии, одинаков для чертежей Plant и P&ID } catch { excep += "\n* Номер линии (tag)"; } }
как получить информацию (совпадения по tag) из "PipeLineGroup"?
Макс:
Решение:
https://forums.autodesk.com/t5/autocad-plant-3d-forum/api-how-to-get-p3d-object-by-linenumber/td-p/5818840?profile.language=ru
--- Код - C# [Выбрать] ---using Autodesk.AutoCAD.Runtime;using Autodesk.AutoCAD.EditorInput;using Autodesk.ProcessPower.ProjectManager; // PnPProjectManagerMgd.dllusing Application = Autodesk.AutoCAD.ApplicationServices.Application; using Autodesk.ProcessPower.P3dProjectParts; // PnP3dProjectPartsMgd.dllusing Autodesk.ProcessPower.DataLinks; // PnPDataLinks.dllusing Autodesk.ProcessPower.PlantInstance;using Autodesk.ProcessPower.DataObjects; // PnPDataObjects.dll [CommandMethod("my_test")] public static void My_test() { Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; PlantProject currentProj = PlantApplication.CurrentProject; PipingProject pipeProj = (PipingProject)currentProj.ProjectParts["Piping"]; DataLinksManager dlm = pipeProj.DataLinksManager; PnPDatabase db = dlm.GetPnPDatabase(); int dwgRowId = dlm.GetDrawingId(Application.DocumentManager.MdiActiveDocument.Database); // получаем линии трубопроводов в текущем чертеже Plant 3D PnPRowIdArray groupPlantIds = dlm.GetRelatedRowIds("P3dDrawingLineGroupRelationship", "Drawing", dwgRowId, "LineGroup"); PnIdProject pidProj = (PnIdProject)currentProj.ProjectParts["PnId"]; DataLinksManager dlmPid = pidProj.DataLinksManager; PnPDatabase pidDb = dlmPid.GetPnPDatabase(); string tag = ""; foreach (int groupId in groupPlantIds) { PnPRow rowLineGroup = db.GetRow(groupId); try { tag = rowLineGroup["Tag"] as string; // номер линии (Tag), одинаков для чертежей Plant и P&ID } catch { Application.ShowAlertDialog("Ошибка получения данных по Номеру линии (tag)"); } PnPRow[] linegroup = pidDb.Tables["PipeLineGroup"].Select("Tag='" + tag + "'"); if (linegroup.Length != 0) { // LineGroupFrom - указываем из какого поля нужно получить данные string LineGroupFrom = linegroup[0]["LineGroupFrom"] as string; ed.WriteMessage("\n Tag: " + tag + "; LineGroupFrom " + LineGroupFrom + "\n"); } // ... далее обрабатываем полученные данные } }
Александр Ривилис:
Макс,
Спасибо за то, что поделился найденным решением!
Навигация
Перейти к полной версии