by Fenton Webb
The easiest way to do this is to construct an AcGeCircArc2d or AcGeCircArc3d
object and then use its center() method to get the point you want.
The following function finds any arc segments in a lightweight polyline and
identifies the center by dropping a point entity (AcDbPoint) in the calculated
location.
#include void show_centers() { // UI for selecting an entity ads_name en; ads_point pt; int rc = acedEntSel(L"Select LW polyline: ", en, pt); if (rc != RTNORM) { acutPrintf(L"Nothing selected.n", rc); return; } // convert ads_name to object id AcDbObjectId eId; Acad::ErrorStatus es = acdbGetObjectId(eId, en); // open object AcDbObjectPointer pPolyline(eId, AcDb::kForRead); if(pPolyline.openStatus() != Acad::eOk) { acutPrintf(L"You did not select a LW polyline.n"); return; } // get the number of segments int segments = pPolyline->numVerts() - 1; for(int i = 0; i < segments; i++) { if(pPolyline->segType(i) != AcDbPolyline::kArc) continue; // get arc segment on polyline AcGeCircArc2d geArc; pPolyline->getArcSegAt(i, geArc); // get center AcGePoint2d center = geArc.center(); // create a point entity AcDbObjectPointer pPoint; AcDbPoint *pointPtr = new AcDbPoint(AcGePoint3d(center[0], center[1], 0.0)); pPoint.acquire(pointPtr);
<p style="margin: 0px"><font face="Consolas"><font style="font-size: 8pt" color="#000000"> </font></font></p> <p style="margin: 0px"><font face="Consolas"><font color="#000000"><font style="font-size: 8pt">    </font></font><span style="color:"><font style="font-size: 8pt" color="#008000">// add the point entity to the block table record    </font></span></font></p> <p style="margin: 0px"><font face="Consolas"><font color="#000000"><font style="font-size: 8pt">    </font></font><span style="color:"><font style="font-size: 8pt" color="#008000">// containing the selected polyline    </font></span></font></p> <p style="margin: 0px"><font face="Consolas"><font color="#000000"><font style="font-size: 8pt">    </font></font><font style="font-size: 8pt"><span style="color:"><font color="#010001">AcDbBlockTableRecordPointer</font></span><font color="#000000"> </font><span style="color:"><font color="#010001">curSpace</font></span><font color="#000000">(</font><span style="color:"><font color="#010001">pPolyline</font></span><font color="#000000">-></font><span style="color:"><font color="#010001">blockId</font></span><font color="#000000">(), </font></font></font></p> <p style="margin: 0px"><font face="Consolas"><font color="#000000"><font style="font-size: 8pt">      </font></font><font style="font-size: 8pt"><span style="color:"><font color="#010001">AcDb</font></span><font color="#000000">::</font><span style="color:"><font color="#010001">kForWrite</font></span><font color="#000000">);</font></font></font></p> <p style="margin: 0px"><font face="Consolas"><font color="#000000"><font style="font-size: 8pt">    </font></font><font style="font-size: 8pt"><span style="color:"><font color="#0000ff">if</font></span><font color="#000000"> (</font><span style="color:"><font color="#010001">curSpace</font></span><font color="#000000">.</font><span style="color:"><font color="#010001">openStatus</font></span><font color="#000000">() == </font><span style="color:"><font color="#010001">Acad</font></span><font color="#000000">::</font><span style="color:"><font color="#010001">eOk</font></span><font color="#000000">)</font></font></font></p> <p style="margin: 0px"><font face="Consolas"><font color="#000000"><font style="font-size: 8pt">      </font></font><font style="font-size: 8pt"><span style="color:"><font color="#010001">curSpace</font></span><font color="#000000">-></font><span style="color:"><font color="#010001">appendAcDbEntity</font></span><font color="#000000">(</font><span style="color:"><font color="#010001">pPoint</font></span><font color="#000000">);    </font></font></font></p> <p style="margin: 0px"><font face="Consolas"><font style="font-size: 8pt" color="#000000"> </font></font></p> <p style="margin: 0px"><font face="Consolas"><font color="#000000"><font style="font-size: 8pt">    </font></font><font style="font-size: 8pt"><span style="color:"><font color="#010001">acutPrintf</font></span><font color="#000000">(</font><span style="color:"><font color="#010001">L</font></span><span style="color:"><font color="#a31515">"n - center: [%f, %f]"</font></span><font color="#000000">, </font><span style="color:"><font color="#010001">center</font></span><font color="#000000">[0], </font><span style="color:"><font color="#010001">center</font></span><font color="#000000">[1]); </font></font></font></p> <p style="margin: 0px"><font face="Consolas"><font style="font-size: 8pt" color="#000000">  }   </font></font></p> <p style="margin: 0px"><font face="Consolas"><font style="font-size: 8pt" color="#000000">}</font></font></p> <p style="margin: 0px"><font face="Consolas"><font style="font-size: 8pt" color="#000000"> </font></font></p> </div>

Leave a Reply