<?xml encoding=”UTF-8″>By Augusto Goncalves
This post is actually inspired on create a new line group previous post, but with some changes. This will actually mimic the Line Number >> New >> Assign Tag feature on Plant 3D.
First, remove previous group related to the pipe, in order to avoid belong to more than one line group, which can be a modeling error. Second, just make the code simpler to include on your code. Note this will run for individual pipe making each pipe into a different line group (therefore different ISO production from each of them), you may adjust to a group of pipes.
<span>private</span> <span>static</span> <span>void</span> CreateNewTag(<span>ObjectId</span> partId, <span>string</span> newTagValue)<br>{<br> <span>PlantProject</span> currentProj = <span>PlantApplication</span>.CurrentProject;<br> <span>PipingProject</span> pipeProj = (<span>PipingProject</span>)currentProj.ProjectParts[<span>"Piping"</span>];<br> <span>DataLinksManager</span> dlm = pipeProj.DataLinksManager;<br> <span>PnPDatabase</span> db = dlm.GetPnPDatabase();<br> <br> <span>PnPTable</span> p3dLineGroupTable = db.Tables[<span>"P3dLineGroup"</span>];<br> <span>PnPRow</span> lgRow = p3dLineGroupTable.NewRow();<br> lgRow[<span>"Tag"</span>] = newTagValue;<br> p3dLineGroupTable.Rows.Add(lgRow);<br> <br> <span>int</span> prRowId = dlm.FindAcPpRowId(partId);<br> <span>PnPRow</span> prRow = db.GetRow(prRowId); <span>// not used yet</span><br> <br> <span>// remove all line groups already related </span><br> <span>// to this pipe, if any, to avoid this pipe</span><br> <span>// belong to multiple line groups</span><br> <span>PnPRowIdArray</span> priorGroupIds = dlm.GetRelatedRowIds(<br> <span>"P3dLineGroupPartRelationship"</span>, <span>"Part"</span>,<br> prRowId, <span>"LineGroup"</span>);<br> <span>if</span> (priorGroupIds.Count != 1)<br> {<br> <span>foreach</span> (<span>int</span> id <span>in</span> priorGroupIds)<br> {<br> dlm.Unrelate(<span>"P3dLineGroupPartRelationship"</span>,<br> <span>"LineGroup"</span>, id, <span>"Part"</span>, prRowId);<br> }<br> }<br> <br> <span>// make the relation</span><br> <span>if</span> (lgRow.RowId != -1 && prRowId != -1)<br> {<br> dlm.Relate(<span>"P3dLineGroupPartRelationship"</span>,<br> <span>"LineGroup"</span>, lgRow.RowId, <span>"Part"</span>, prRowId);<br> }<br><br>}
And here is a simple command to invoke this routine
[<span>CommandMethod</span>(<span>"customNewTag"</span>)]<br><span>public</span> <span>static</span> <span>void</span> CmdCustomNewTag()<br>{<br> <span>Editor</span> ed = <span>Application</span>.DocumentManager.MdiActiveDocument.Editor;<br> <br> <span>PromptEntityOptions</span> peo = <span>new</span> <span>PromptEntityOptions</span>(<span>"nSelect pipe: "</span>);<br> peo.SetRejectMessage(<span>"nOnly pipes"</span>);<br> peo.AddAllowedClass(<span>typeof</span>(<span>Pipe</span>), <span>true</span>);<br> <span>PromptEntityResult</span> per = ed.GetEntity(peo);<br> <span>if</span> (per.Status != <span>PromptStatus</span>.OK) <span>return</span>;<br> <br> <span>PromptResult</span> pr = ed.GetString(<span>"nEnter new tag: "</span>);<br> <span>if</span> (pr.Status != <span>PromptStatus</span>.OK) <span>return</span>;<br> <br> CreateNewTag(per.ObjectId, pr.StringResult);<br>}


Leave a Reply to GrifoCancel reply