Validate Plant P&ID drawings

<?xml encoding=”UTF-8″>By Augusto Goncalves

Inside Plant P&ID we can Validate, via ribbon Home>Validate>Run Validation or right-click on a drawing and select “Validate”. More details here.

Using APIs there is a ValidationSingleton object that has a ValidateDrawings or ValidareProject method. After run this, the Errors property will contain a list of validation errors. Actually there is one class for each type, so you’ll need to cast or, like in the sample below, simply get the error name.

Important: this API method will *only* show the validation errors after you run it via built-in command.

[<span>CommandMethod</span>(<span>"validateDrawings"</span>)]<br><span>public</span> <span>static</span> <span>void</span> CmdValidateDrawings()<br>{<br>  <span>Editor</span> ed = <span>Application</span>.DocumentManager.<br>    MdiActiveDocument.Editor;<br> <br>  <span>// Validation manager</span><br>  <span>AcPpValidationManager</span> vmgr = <span>ValidationSingleton</span>.Manager;<br> <br>  <span>// prepare a list of drawings</span><br>  <span>AcPpValidationAllOpenedDrawingManager</span> dsd =<br>    <span>new</span> <span>AcPpValidationAllOpenedDrawingManager</span>();<br>  <span>foreach</span> (<span>Document</span> doc <span>in</span> <span>Application</span>.DocumentManager)<br>  {<br>    dsd.Add(doc.Database);<br>  }<br> <br>  <span>// clear the list of error </span><br>  <span>// (in case you're running several times)</span><br>  vmgr.Errors.Clear();<br> <br>  <span>// the actual validation occurs here</span><br>  vmgr.ValidateProject(dsd);<br> <br>  <span>// now check the list of errors</span><br>  <span>if</span> (vmgr.Errors.Count > 0)<br>  {<br><br>    <span>AcPpValidationErrorCollection</span> errorList = vmgr.Errors;<br>    <span>foreach</span> (<span>IAcPpValidationError</span> item1 <span>in</span> errorList)<br>    {<br>      <span>// can be classes from namespace</span><br>      <span>// Autodesk.ProcessPower.PnIDDwgValidation          </span><br> <br> <br>      <span>// for now, let's write the error class name</span><br>      ed.WriteMessage(<span>"n{0}"</span>, <br>        item1.GetType().Name.PascalCaseToText());<br>    }<br>  }<br>}
<br><span>// nice sample Regular expression <a href="http://stackoverflow.com/questions/155303/net-how-can-you-split-a-caps-delimited-string-into-an-array">from here</a>.</span> <br><span>public</span> <span>static</span> <span>string</span> PascalCaseToText(<span>this</span> <span>string</span> text)<br>{<br>  <span>return</span> System.Text.RegularExpressions.<span>Regex</span>.Replace(<br>    text, <span>"([a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))"</span>, <span>"$1 "</span>);<br>}

Comments

2 responses to “Validate Plant P&ID drawings”

  1. Augusto, thank you very much for the article!
    Please, anybody help me! Is there any programmatic way to validate PnID Pipe Line Segments and P3D Pipe Run Elements (pipe, elbows, tees, reducers, ect.). There is no “Validate” column for PnID Pipe Line Segments in Project Setup.
    I’ve written about it here
    http://forums.autodesk.com/t5/autocad-plant-3d-forum/validation-mapping/m-p/6574957#M23539
    and here
    http://forums.autodesk.com/t5/autocad-plant-3d-p-id-ideas/validation-mapping/idi-p/6597784
    But I have not got a useful information. I really need to realize it.
    Thanks in advance.

  2. Such great information you have shared with us. Can you share the details of the latest flats in Bhopal?

Leave a Reply

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading