P.S.: Может быть не стоит полагаться на возможности convertFrom, а использовать подобный код для конвертации AcDb2dPolyline в AcDbPolyline:
static void P2DtoLWPoly(void)
{
ads_name en; ads_point p;
Acad::ErrorStatus es;
AcDbCurve *pEnt = NULL;
while (acedEntSel("\nУкажите 2D-полилинию: ",en,p) == RTNORM) {
acedBeginUndoGroup(curDoc());
AcDbObjectId objId; acdbGetObjectId(objId,en);
AcDbObjectPointer<AcDb2dPolyline> pPoly2D(objId,AcDb::kForWrite);
if ((es = pPoly2D.openStatus()) == Acad::eOk) {
AcDbPolyline *pLWPoly = new AcDbPolyline();
pLWPoly->setDatabaseDefaults(acdbCurDwg());
pLWPoly->setPropertiesFrom(pPoly2D.object());
pLWPoly->setNormal(pPoly2D->normal());
pLWPoly->setElevation(pPoly2D->elevation());
pLWPoly->setPlinegen(pPoly2D->isLinetypeGenerationOn());
pLWPoly->setThickness(pPoly2D->thickness());
pLWPoly->setClosed(pPoly2D->isClosed());
AcDbObjectIterator *pIter = pPoly2D->vertexIterator();
if (pIter) {
for (int iVert = 0; !pIter->done(); (pIter->step(), iVert++)) {
AcDbObjectId objId = pIter->objectId();
AcDbObjectPointer<AcDb2dVertex> pVert(objId,AcDb::kForRead);
if ((es = pVert.openStatus()) == Acad::eOk) {
es = pLWPoly->addVertexAt(iVert,asPnt2d(asDblArray(pVert->position())),
pVert->bulge(),
pVert->startWidth(),
pVert->endWidth()
);
if (es != Acad::eOk) {
acutPrintf("\npLWPoly->addVertexAt() = %s", acadErrorStatusText(es));
}
} else {
acutPrintf("\npVert.openStatus() = %s", acadErrorStatusText(es));
}
}
}
if (pLWPoly->numVerts() < 2) {
acutPrintf("\nКоличество вершин полилинии < 2!");
delete pLWPoly;
} else {
// Добавляем новую полилинию в чертеж
postToDatabase(pPoly2D->blockId(),pLWPoly);
pLWPoly->recordGraphicsModified();
pLWPoly->close(); // Не забываем закрыть новую полилинию
pPoly2D->erase(); // Удаляем старую 2D-полилинию
acutPrintf("... Готово!");
}
} else {
acutPrintf("\nЭто не 2D-полилиния или ее нельзя открыть для записи!");
}
acedEndUndoGroup(curDoc(),false);
}
}
Тут во всяком случае не будет ограничений, которые накладывает AutoCAD на возможность конвертации.