|
Highlighting AcDb2dpolyline vertices in a transaction
Question
How can I highlight a segment of an AcDb2dPolyline during a transaction? I
would also like to be able to select the highlighted segment while during the
transaction.
Answer
GS markers and subents are not implemented for old-style polyline vertices,
thus the AcDbEntity::highlight() command won't work for AcDb2dPolyline subentities.
It works only for the entire polyline.
However, you can fall back on ads_redraw with mode 3 to do the job. This works
perfectly well within transactions, with no need to call
AcTransaction::getObject().
Here's a snippet to illustrate:
//pPline points to an AcDb2dPolyline open for Read.
AcDbObjectIterator *pVertIter= pPline->vertexIterator();
AcDbObjectId vertexObjId;
//start a transaction
AcTransaction *pTrans = actrTransactionManager->startTransaction();
assert(pTrans != NULL);
//iterate through the oldstyle pline
//highlight each segment as you go
//numVerts == number of vertices in polyline
for (int vertexNumber = 0; vertexNumber < numVerts - 1;
vertexNumber++, pVertIter->step())
{
vertexObjId = pVertIter->objectId();
ads_name ename;
acdbGetAdsName(ename, vertexObjId);
ads_redraw(ename, 3);
//pause for user to see the effect
ads_getstring(0, "\nPress return to continue: ", dummy);
//always balance ads_redraw highlight calls in R14
ads_redraw(ename, 4);
}
actrTransactionManager->endTransaction();
delete pVertIter; |
|