Saving AcDbSubDmesh into drawing database failed

110 Views Asked by At

I am exporting a faceted mesh which is represented by its vertices array and face index array into dwg file format.

I used AcDbSubDmesh but closing the mesh returns "eNoDatabase".

const int subMeshLevel = 0;
auto      subMesh      = new AcDbSubDMesh();

AcGePoint3dArray         verticesArray;
AcArray<AcCmEntityColor> colorsArray;
AcGeVector3dArray        normalsArray;
AcArray<Adesk::Int32>    faceArray;
{
    verticesArray.append(AcGePoint3d(-1, 1, 0));
    verticesArray.append(AcGePoint3d(-1, -1, 0));
    verticesArray.append(AcGePoint3d(1, -1, 0));

    faceArray.append(Adesk::Int32(3));
    faceArray.append(Adesk::Int32(0));
    faceArray.append(Adesk::Int32(1));
    faceArray.append(Adesk::Int32(2));
}   
qDebug() << __func__ << "mesh creation " << int(subMesh->setSubDMesh(verticesArray, faceArray, subMeshLevel));
// Open database
AcDbBlockTable *pBlockTable;
m_database->getSymbolTable(pBlockTable, AcDb::kForRead);
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
pBlockTable->close();
AcDbObjectId objectId;
pBlockTableRecord->appendAcDbEntity(objectId, subMesh);

pBlockTableRecord->close();
qDebug() << __func__ << " Result " << int(subMesh->close());

The error does not come from my database because if I replace the subDMesh by a simple AcDbPolyFaceMesh object, I can draw a piece of triangles within my dwg file.

I don't see where is the mistake of my usage of AcDbSubDmesh.

1

There are 1 best solutions below

0
On

Looks like you only put 3 vertices in verticesArray instead of 4?