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

ADN Club => Другие продукты Autodesk => Тема начата: Макс от 26-05-2021, 11:16:29

Название: Plant 3D API. Поиск в БД Plant
Отправлено: Макс от 26-05-2021, 11:16:29
Добрый день,
прошу помочь (подсказать) как найти объекты с совпадающими параметрами (номер линии).
В проекте Plant необходимо проверить совпадение информации, указанной в линиях трубопроводов для чертежей Plant 3D и P&ID.

Информацию по линиям в Plant получаю при выполнении команды в пространстве файла Plant 3d

Код - C# [Выбрать]
  1.  
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.ProcessPower.DataLinks;
  5. using Autodesk.ProcessPower.DataObjects;
  6. using Autodesk.ProcessPower.ProjectManager;
  7. using Autodesk.ProcessPower.P3dProjectParts;
  8. using Autodesk.AutoCAD.ApplicationServices.Application;
  9. using Autodesk.ProcessPower.PlantInstance;
  10.  
  11. PlantProject currentProj = PlantApplication.CurrentProject;
  12.  
  13. PipingProject pipeProj = (PipingProject)currentProj.ProjectParts["Piping"];
  14.  
  15. DataLinksManager dlm = pipeProj.DataLinksManager;
  16.  
  17. PnPDatabase db = dlmPlant.GetPnPDatabase();
  18.  
  19. int dwgRowId = dlmPlant.GetDrawingId(Application.DocumentManager.MdiActiveDocument.Database);
  20.  
  21. PnPRowIdArray groupPlantIds = dlm.GetRelatedRowIds(
  22.               "P3dDrawingLineGroupRelationship", "Drawing",
  23.               dwgRowId, "LineGroup");
  24.  
  25. foreach (int groupId in groupPlantIds)
  26.             {
  27.  
  28.                 PnPRow rowLineGroup = db.GetRow(groupId);
  29.  
  30.                 try
  31.                 {
  32.                     tag = rowLineGroup["Tag"] as string; // номер линии, одинаков для чертежей Plant и P&ID
  33.                    
  34.                 }
  35.                 catch
  36.                 {
  37.                     excep += "\n* Номер линии (tag)";                    
  38.                 }
  39.             }
  40.  
  41.  

как получить информацию (совпадения по tag) из "PipeLineGroup"?

Название: Re: Plant 3D API. Поиск в БД Plant
Отправлено: Макс от 26-05-2021, 13:55:52
Решение:

https://forums.autodesk.com/t5/autocad-plant-3d-forum/api-how-to-get-p3d-object-by-linenumber/td-p/5818840?profile.language=ru

Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.Runtime;
  2. using Autodesk.AutoCAD.EditorInput;
  3. using Autodesk.ProcessPower.ProjectManager; // PnPProjectManagerMgd.dll
  4. using Application = Autodesk.AutoCAD.ApplicationServices.Application;
  5. using Autodesk.ProcessPower.P3dProjectParts; // PnP3dProjectPartsMgd.dll
  6. using Autodesk.ProcessPower.DataLinks; // PnPDataLinks.dll
  7. using Autodesk.ProcessPower.PlantInstance;
  8. using Autodesk.ProcessPower.DataObjects; // PnPDataObjects.dll
  9.  
  10. [CommandMethod("my_test")]
  11.         public static void My_test()
  12.         {
  13.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  14.  
  15.             PlantProject currentProj = PlantApplication.CurrentProject;
  16.             PipingProject pipeProj = (PipingProject)currentProj.ProjectParts["Piping"];
  17.             DataLinksManager dlm = pipeProj.DataLinksManager;
  18.             PnPDatabase db = dlm.GetPnPDatabase();
  19.             int dwgRowId = dlm.GetDrawingId(Application.DocumentManager.MdiActiveDocument.Database);
  20.  
  21.             // получаем линии трубопроводов в текущем чертеже Plant 3D
  22.             PnPRowIdArray groupPlantIds = dlm.GetRelatedRowIds("P3dDrawingLineGroupRelationship", "Drawing", dwgRowId, "LineGroup");
  23.  
  24.  
  25.             PnIdProject pidProj = (PnIdProject)currentProj.ProjectParts["PnId"];
  26.             DataLinksManager dlmPid = pidProj.DataLinksManager;
  27.             PnPDatabase pidDb = dlmPid.GetPnPDatabase();
  28.  
  29.             string tag = "";
  30.  
  31.             foreach (int groupId in groupPlantIds)
  32.             {
  33.                 PnPRow rowLineGroup = db.GetRow(groupId);
  34.                 try
  35.                 {
  36.                     tag = rowLineGroup["Tag"] as string; // номер линии (Tag), одинаков для чертежей Plant и P&ID
  37.                 }
  38.                 catch
  39.                 {
  40.                     Application.ShowAlertDialog("Ошибка получения данных по Номеру линии (tag)");
  41.                 }
  42.  
  43.                 PnPRow[] linegroup = pidDb.Tables["PipeLineGroup"].Select("Tag='" + tag + "'");
  44.                 if (linegroup.Length != 0)
  45.                {
  46.                     // LineGroupFrom - указываем из какого поля нужно получить данные
  47.                     string LineGroupFrom = linegroup[0]["LineGroupFrom"] as string;
  48.                     ed.WriteMessage("\n Tag: " + tag + "; LineGroupFrom " + LineGroupFrom + "\n");
  49.                 }
  50.  
  51.                // ... далее обрабатываем полученные данные
  52.  
  53.             }
  54.  
  55.         }
  56.  

Название: Re: Plant 3D API. Поиск в БД Plant
Отправлено: Александр Ривилис от 26-05-2021, 15:28:47
Макс,
Спасибо за то, что поделился найденным решением!