【CAD插件开发】批量修改图纸中在文字(C++)

0 评论
/
5 阅读
/
1137 字
13 2025-02
void ChangeTextInDrawing() {
    AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase();
    AcDbBlockTable* pBlockTable;
    pDb->getSymbolTable(pBlockTable, AcDb::kForRead);
    AcDbBlockTableRecord* pModelSpace;
    pBlockTable->getAt(ACDB_MODEL_SPACE, pModelSpace, AcDb::kForRead);
 
    AcDbObjectIdArray entityIds;
    pModelSpace->getIDsOfClass(AcDb::kMText, entityIds);
    
    for (auto& id : entityIds) {
        AcDbEntity* pEntity;
        pDb->openObject(pEntity, id, AcDb::kForRead);
        if (pEntity->isKindOf(AcDbMText::desc())) {
            AcDbMText* pText = AcDbMText::cast(pEntity);
            const char* text = pText->textString();
            if (text) {
                std::string newText = std::string(text).replace(0, 5, "NEW"); // 示例:将前5个字符替换为"NEW"
                pText->setTextString(newText.c_str());
            }
            pText->downgradeOpen(); // 降级对象以关闭它,但不保存到数据库中
        }
        pEntity->close(); // 关闭实体对象
    }
    pModelSpace->close();
    pBlockTable->close();
}

    暂无数据