<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://communities.bentley.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>[MDL V8XM/i] Copy parallel using Miter mode</title><link>https://communities.bentley.com/products/programming/microstation_programming/f/microstation-programming---forum/81962/mdl-v8xm-i-copy-parallel-using-miter-mode</link><description>Hi, 
 I want to create a parallel copy of an element descriptor using the Miter mode. I have searched the net and found an example for a complete command that use a function named mdlSolid_offsetWire() that does just that but I have a hard time to extract</description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Re: [MDL V8XM/i] Copy parallel using Miter mode</title><link>https://communities.bentley.com/thread/228009?ContentTypeID=1</link><pubDate>Sun, 18 Nov 2012 15:50:57 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:0686323e-8da1-4a05-8b4b-f62f27019025</guid><dc:creator>CWer</dc:creator><description>&lt;p&gt;Thank you very much YongAn!&lt;/p&gt;
&lt;p&gt;The function works perfect!&lt;/p&gt;
&lt;p&gt;I just added an element template pointer to the CreateElementByBody() which is used in dlKISolid_bodyToElementD(), to be able to preserver the colors, line type etc.&lt;/p&gt;
&lt;p&gt;Thanks also to Jon and &amp;nbsp;Michael for your help.&lt;/p&gt;
&lt;p&gt;Christian&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: [MDL V8XM/i] Copy parallel using Miter mode</title><link>https://communities.bentley.com/thread/227966?ContentTypeID=1</link><pubDate>Sat, 17 Nov 2012 06:48:15 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:b596f351-de9f-4873-98ab-9a5f7385616f</guid><dc:creator>Yongan.Fu</dc:creator><description>&lt;p&gt;The test-passed code shown here. I corrected serveral errors in my original UNTESTED code.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;int CreateElementByBody (MSElementDescr** resultEdp, KIBODY* pBody)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; *resultEdp = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp; KIBODY* pCopy = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlKISolid_copyBody (&amp;amp;pCopy, pBody);&lt;br /&gt;&amp;nbsp;&amp;nbsp; bool simplified = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (SUCCESS == mdlKISolid_simplifyBody (&amp;amp;pCopy, FALSE))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simplified = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (SUCCESS != mdlKISolid_bodyToElementD (resultEdp, simplified ? pCopy : pBody,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TRUE, -1, NULL, ACTIVEMODEL, false) || NULL == *resultEdp)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (NULL != pCopy)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlKISolid_deleteEntity (pCopy);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ERROR;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (NULL != pCopy)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlKISolid_deleteEntity (pCopy);&lt;br /&gt;&amp;nbsp;&amp;nbsp; return (NULL == *resultEdp) ? ERROR : SUCCESS;&lt;br /&gt;}&lt;/code&gt;&lt;code&gt;MdlPublic&amp;nbsp; int mdlElmdscr_copyParallelExt &lt;br /&gt;(&lt;br /&gt;MSElementDescr** outDscr , &lt;br /&gt;MSElementDescr*&amp;nbsp; inDscr , &lt;br /&gt;double&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; distance , &lt;br /&gt;DPoint3d*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; normal, &lt;br /&gt;int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gapFill&amp;nbsp;&amp;nbsp;&amp;nbsp; // 0 for arc fill, 1 for tangent extension fill, 2 for curve extension fill &lt;br /&gt;)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; KIBODY*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pWireBody = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp; int status = mdlKISolid_elementToBody (&amp;amp;pWireBody, inDscr, MASTERFILE);&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (SUCCESS != status || !mdlKISolid_isWireBody (pWireBody))&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pWireBody)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlKISolid_freeBody (pWireBody);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ERROR;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; KIEDGE*&amp;nbsp;&amp;nbsp; pEdge = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlKISolid_bodyAskFirstEdge (&amp;amp;pEdge, pWireBody);&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (NULL == pEdge)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlKISolid_freeBody (pWireBody);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ERROR;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; KIENTITY_LIST* pList = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlKISolid_listCreate (&amp;amp;pList);&lt;br /&gt;&amp;nbsp;&amp;nbsp; double tol = 0.1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlKISolid_beginCurrTrans (ACTIVEMODEL);&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlCurrTrans_invScaleDoubleArray (&amp;amp;distance, &amp;amp;distance, 1);&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlCurrTrans_invScaleDoubleArray (&amp;amp;tol, &amp;amp;tol, 1);&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlKISolid_endCurrTrans ();&lt;/code&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; if (SUCCESS != mdlKISolid_offsetWire (pList, pWireBody, pEdge, normal, distance, tol, gapFill, FALSE))&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlKISolid_freeBody (pWireBody);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlKISolid_listDelete (&amp;amp;pList);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ERROR;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; int count = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlKISolid_listCount(&amp;amp;count, pList);&lt;br /&gt;&amp;nbsp;&amp;nbsp; for (int i=0; i&amp;lt;count; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KIBODY*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pBody = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MSElementDescr*&amp;nbsp;&amp;nbsp; tempEdp = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlKISolid_listNthEl (&amp;amp;pBody, pList, i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (SUCCESS != CreateElementByBody (&amp;amp;tempEdp, pBody) || NULL == tempEdp)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (NULL != tempEdp)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlElmdscr_freeAll (&amp;amp;tempEdp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tempEdp = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlElmdscr_initOrAddToChain (outDscr, tempEdp);&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlKISolid_listDelete (&amp;amp;pList);&lt;br /&gt;&amp;nbsp;&amp;nbsp; return (NULL == *outDscr) ? ERROR : SUCCESS;&lt;br /&gt;}&lt;/code&gt;&lt;code&gt;void test ()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; MSElementDescrP&amp;nbsp; inEdP = NULL, outEdP = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp; DPoint3d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pt = {0, -1, 0}, normal, defaultNormal={0,0,1};&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlAssoc_getElementDescr (&amp;amp;inEdP, NULL, 770, ACTIVEMODEL, FALSE);&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlElmdscr_extractNormalTight (&amp;amp;normal, &amp;amp;pt, inEdP, &amp;amp;defaultNormal);&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlElmdscr_copyParallelExt (&amp;amp;outEdP, inEdP, 7000, &amp;amp;normal, 1);&lt;br /&gt;&amp;nbsp;&amp;nbsp; EditElemHandle eeh (outEdP, true, false);&lt;br /&gt;&amp;nbsp;&amp;nbsp; eeh.AddToModel (ACTIVEMODEL);&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;HTH, YongAn&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: [MDL V8XM/i] Copy parallel using Miter mode</title><link>https://communities.bentley.com/thread/227741?ContentTypeID=1</link><pubDate>Thu, 15 Nov 2012 13:35:51 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:a3e7565c-da82-4086-a64c-81e91f950640</guid><dc:creator>Jon Summers</dc:creator><description>&lt;p&gt;[quote user=&amp;quot;Yongan.Fu&amp;quot;]mdlElmdscr_copyParallelExt &lt;br /&gt;(&lt;br /&gt;MSElementDescr** outDscr , &lt;br /&gt;MSElementDescr*&amp;nbsp; inDscr, &lt;br /&gt; ... &lt;br /&gt; )[/quote]&lt;/p&gt;
&lt;p&gt;The input element &lt;span style="font-family:courier new,courier;"&gt;inDscr&lt;/span&gt; is never used, so that can&amp;#39;t possibly work.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new,courier;"&gt;pWireBody&lt;/span&gt; is never assigned, so remains NULL.&amp;nbsp; What&amp;#39;s missing is the code to convert &lt;span style="font-family:courier new,courier;"&gt;inDscr&lt;/span&gt; into &lt;span style="font-family:courier new,courier;"&gt;pWireBody&lt;/span&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: [MDL V8XM/i] Copy parallel using Miter mode</title><link>https://communities.bentley.com/thread/227729?ContentTypeID=1</link><pubDate>Thu, 15 Nov 2012 07:37:51 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:6278fd92-f882-4c7a-81a2-cfc714c3be2b</guid><dc:creator>Yongan.Fu</dc:creator><description>&lt;p&gt;I recommend to use mdlKISolid_offsetWire to do this. The following code is an example which I &lt;strong&gt;DO NOT&lt;/strong&gt; test in practice (And I also forget where I get it :)).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;int CreateElementByBody (MSElementDescr** resultEdp, KIBODY* pBody)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; *resultEdp = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp; KIBODY* pCopy = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlKISolid_copyBody (&amp;amp;pCopy, pBody);&lt;/code&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; bool simplified = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (SUCCESS == mdlKISolid_simplifyBody (&amp;amp;pCopy, FALSE))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simplified = true;&lt;/code&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; if (SUCCESS != mdlKISolid_bodyToElementD (resultEdp, simplified ? pCopy : pBody,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TRUE, -1, NULL, ACTIVEMODEL, false) || NULL == *resultEdp)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (NULL != pCopy)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlKISolid_deleteEntity (pCopy);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ERROR;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (NULL != pCopy)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlKISolid_deleteEntity (pCopy);&lt;br /&gt;&amp;nbsp;&amp;nbsp; return (NULL == *resultEdp) ? ERROR : SUCCESS;&lt;br /&gt;}&lt;/code&gt;&lt;code&gt;MdlPublic&amp;nbsp; int mdlElmdscr_copyParallelExt &lt;br /&gt;(&lt;br /&gt;MSElementDescr** outDscr , &lt;br /&gt;MSElementDescr*&amp;nbsp; inDscr , &lt;br /&gt;DPoint3d*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; point , &lt;br /&gt;double&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; distance , &lt;br /&gt;DPoint3d*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; normal, &lt;br /&gt;int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gapFill&amp;nbsp;&amp;nbsp;&amp;nbsp; // 0 for arc fill, 1 for tangent extension fill, 2 for curve extension fill &lt;br /&gt;}&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; KIENTITY_LIST* pList = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlKISolid_listCreate (&amp;amp;pList);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; KIBODY*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pWireBody = NULL;&lt;/code&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; KIEDGE*&amp;nbsp;&amp;nbsp; pEdge = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlKISolid_bodyAskFirstEdge (&amp;amp;pEdge, pWireBody);&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (NULL == pEdge)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ERROR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; if (SUCCESS != mdlKISolid_offsetWire (pList, pWireBody, pEdge, normal, distance, tol, gapFill, FALSE))&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlSolid_listDelete (&amp;amp;pList);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ERROR;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; int count = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlKISolid_listCount(&amp;amp;count, pList);&lt;br /&gt;&amp;nbsp;&amp;nbsp; for (int i=0; i&amp;lt;count; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KIBODY*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pBody = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MSElementDescr*&amp;nbsp;&amp;nbsp; tempEdp = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlKISolid_listNthEl (&amp;amp;pBody, pList, i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (SUCCESS != CreateElementByBody (&amp;amp;tempEdp, pBody) || NULL == tempEdp)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (NULL != tempEdp)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlElmdscr_freeAll (&amp;amp;tempEdp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tempEdp = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlElmdscr_initOrAddToChain (outDscr, tempEdp);&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlKISolid_freeEntityList (pList);&lt;br /&gt;&amp;nbsp;&amp;nbsp; mdlKISolid_listDelete (&amp;amp;pList);&lt;/code&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; return (NULL == *outDscr) ? ERROR : SUCCESS;&lt;br /&gt;}&lt;/code&gt;HTH, YongAn&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: [MDL V8XM/i] Copy parallel using Miter mode</title><link>https://communities.bentley.com/thread/227637?ContentTypeID=1</link><pubDate>Wed, 14 Nov 2012 20:29:46 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:e71393ce-f65a-486f-81aa-50124cdc94ea</guid><dc:creator>Michael Stark</dc:creator><description>&lt;p&gt;Christian&lt;/p&gt;
&lt;p&gt;You have to differ between Polyline and Arc parallels. What the original mode does, is connecting each and every generated parallel with an additional line. In your case it&amp;#39;s up to you &amp;nbsp;to use copyParallel for each part of a complex element and enhance or clip those elements to the point(s) calculated by mdlIntersect_allBetweenExtendedElms. I haven&amp;#39;t done so, because in my cases each arc is tangent to the previous and follow up lines, so that the parallels work as expected.&lt;/p&gt;
&lt;p&gt;HTH Michael&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: [MDL V8XM/i] Copy parallel using Miter mode</title><link>https://communities.bentley.com/thread/227636?ContentTypeID=1</link><pubDate>Wed, 14 Nov 2012 20:26:35 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:3f0d0d74-1940-4db2-a7e6-4a0473d64d4a</guid><dc:creator>Jon Summers</dc:creator><description>&lt;p&gt;Try a different approach.&amp;nbsp; You could construct a set of shapes, somewhat like this:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.la-solutions.co.uk/images/copy-parallel.png" alt="Block Algorithm" height="262" width="252" /&gt;&lt;/p&gt;
&lt;p&gt;Oops -- the colours have disappeared.&amp;nbsp; The SmartLine is the original; the shapes are constructed by creating blocks or wedges from each piece of the complex string.&amp;nbsp; The resulting &amp;#39;parallel&amp;#39; copy is the opposite edge of each shape.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: [MDL V8XM/i] Copy parallel using Miter mode</title><link>https://communities.bentley.com/thread/227609?ContentTypeID=1</link><pubDate>Wed, 14 Nov 2012 18:02:35 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:27300024-eb98-4c72-b91f-220ef8b1dbc6</guid><dc:creator>CWer</dc:creator><description>&lt;p&gt;Thanks for your reply Jon,&lt;/p&gt;
&lt;p&gt;it proves not to be that simple though. Except from the &amp;#39;knots&amp;#39; on the &amp;#39;inside&amp;#39; it also adds extra lines on the outside and it isn&amp;#39;t always correct either. &lt;br /&gt;In the image below the original line is red. It is created using the smart line tool. The thick lines are created with miter mode and the thin with original mode. As you can see the original mode doesn&amp;#39;t create a god result.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://communities.bentley.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Discussions-Components-Files/343173/3515.MoveParallel2.png" alt="" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;So it looks like I need to find another way than mdlElmdscr_copyParallel to create the parallel lines. The question is what that way is.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks&lt;br /&gt;Christian&lt;span class="field-item-description"&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: [MDL V8XM/i] Copy parallel using Miter mode</title><link>https://communities.bentley.com/thread/227602?ContentTypeID=1</link><pubDate>Wed, 14 Nov 2012 17:10:15 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:1c46845e-8a88-4cbc-9dd6-4402608a9de0</guid><dc:creator>Jon Summers</dc:creator><description>&lt;p&gt;Excellent illustration!&lt;/p&gt;
&lt;p&gt;I looks like you need to add a post-processing step after calling &lt;span style="font-family:courier new,courier;"&gt;mdlElmdscr_copyParallel&lt;/span&gt;. You&amp;#39;ve shown a complex string, made up of line and arc elements.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Step through the complex element components, checking for intersections between adjacent elements. Where you find an intersection, you should trim back a copy of each element to the intersect point. Finally, replace the modified element(s) in the complex string.&lt;/p&gt;
&lt;p&gt;Something like this&amp;nbsp;&amp;hellip;&lt;/p&gt;
&lt;pre&gt;&lt;code style="font-family:courier new,courier;"&gt; void mitreComplexString (MSElementDescrP* modified, MSElementDescrCP complexString)&lt;br /&gt; {&lt;br /&gt; &amp;nbsp;&amp;nbsp;mdlElmdscr_duplicate (modified, complexString);&lt;br /&gt; &amp;nbsp;&amp;nbsp;MSElementDescrP component1 = (*modified)-&amp;gt;h.firstElem;&lt;br /&gt; &amp;nbsp;&amp;nbsp;DPoint3d p1 [1];&lt;br /&gt; &amp;nbsp;&amp;nbsp;DPoint3d p2 [1];&lt;br /&gt; &amp;nbsp;&amp;nbsp;const double Tolerance = ((double)mdlModelRef_getUorPerMaster (ACTIVEMODEL)) / 10.0;&lt;br /&gt; &amp;nbsp;&amp;nbsp;while (component1)&lt;br /&gt; &amp;nbsp;&amp;nbsp;{&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MSElementDescrP component2 = component1-&amp;gt;h.next;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (NULL != component2 &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;&amp;amp;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0 &amp;lt; mdlIntersect_allBetweenElms (p1, p2, 1, component1, component2, NULL, Tolerance))&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:seagreen;"&gt; // Trim component elements&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MSElementDescrP copy1 = NULL;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MSElementDescrP copy2 = NULL;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mdlElmdscr_duplicateSingle (&amp;amp;copy1, component1);&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mdlElmdscr_duplicateSingle (&amp;amp;copy2, component2);&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:seagreen;"&gt; // trim geometry here&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:seagreen;"&gt; // Replace components in complex string&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mdlElmdscr_replace (&amp;amp;component1, copy1);&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mdlElmdscr_replace (&amp;amp;component2, copy2);&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:seagreen;"&gt; // Don&amp;#39;t free copy1 or copy2&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;component1 = component1-&amp;gt;h.next;&lt;br /&gt; &amp;nbsp;&amp;nbsp;}&lt;br /&gt; }&lt;/code&gt;&lt;/pre&gt;
&lt;!-- signoff --&gt;
&lt;p&gt;Regards, Jon Summers &lt;br /&gt; &lt;a href="http://www.la-solutions.co.uk"&gt;LA Solutions&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: [MDL V8XM/i] Copy parallel using Miter mode</title><link>https://communities.bentley.com/thread/227597?ContentTypeID=1</link><pubDate>Wed, 14 Nov 2012 16:23:34 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:8ad9f1e0-76c5-4acc-8d48-e4fc776e1bef</guid><dc:creator>CWer</dc:creator><description>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;thank you for your answer.&lt;/p&gt;
&lt;p&gt;The problem is that the&lt;span class="field-item-description"&gt; mdlElmdscr_copyParallel()&lt;/span&gt; function can add &amp;#39;knots&amp;#39; to the parallel line depending on how the original line looks. This is like the original mode in the move/copy parallel command works. I hope that this picture show what I mean:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://communities.bentley.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Discussions-Components-Files/343173/7041.moveParallel.png" alt="" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks&lt;/p&gt;
&lt;p&gt;Christian&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: [MDL V8XM/i] Copy parallel using Miter mode</title><link>https://communities.bentley.com/thread/227594?ContentTypeID=1</link><pubDate>Wed, 14 Nov 2012 15:53:25 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:d169ab9c-f538-4996-acbe-50f70b8184ec</guid><dc:creator>Michael Stark</dc:creator><description>&lt;p&gt;Christian, &lt;/p&gt;
&lt;p&gt;what&amp;#39;s wrong with mdlElmdscr_copyParallel ? What results do you receive and what do you expect ? I use this function a lot, and never figured out any problem or receiving anything else than a mitered parallel !&lt;/p&gt;
&lt;p&gt;Michael&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>