<?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>}

Leave a Reply to ArtemCancel reply