admin 发表于 2024-3-6 11:46:45

字体,文本样式

// 创建字体样式:字体样式名、字体文件名、大字体文件名(亚洲国家用)
AcDbObjectId FymTextStyle::Add(const ACHAR *name, const ACHAR *fontFileName, const ACHAR *bigfontFile)
{   // 获得字体样式表
        Acad::ErrorStatus es;
    AcDbTextStyleTable *pTextStyle = NULL;
    es = acdbHostApplicationServices()->workingDatabase()->getTextStyleTable(pTextStyle, AcDb::kForWrite);
        if (es != ErrorStatus::eOk)
        {
                acutPrintf(L"\n打开文字样式表失败");
                return AcDbObjectId::kNull;
        }
        // 创建字体样式表记录
        AcDbTextStyleTableRecord* pTextStyleRcd = new AcDbTextStyleTableRecord();
        // 字体样式表记录添加:名称、字体文件名、比例、
        pTextStyleRcd->setName(name);
        pTextStyleRcd->setBigFontFileName(bigfontFile);
        pTextStyleRcd->setFileName(fontFileName);
        pTextStyleRcd->setXScale(1.0);
        // 字体样式记录添加进字体样式表中
        pTextStyle->add(pTextStyleRcd);
        // 返回字体样式表记录id
        AcDbObjectId styleId = pTextStyleRcd->objectId();
        pTextStyleRcd->close();
        pTextStyle->close();
        return styleId;
}
// 从AutoCAD的文本样式表中获取指定名称的文本样式的ID:字体样式名称
AcDbObjectId FymTextStyle::GetStyleId(const ACHAR* styleName)
{
        AcDbObjectId textStyleId = AcDbObjectId::kNull;
        // 如果字体样式名非空
        if (采用tcslen(styleName)>0)
        {
                AcDbTextStyleTable* pTextStyle = NULL;
                // 获得字体样式表指针
                Acad::ErrorStatus es;
                es = acdbHostApplicationServices()->workingDatabase()->getTextStyleTable(pTextStyle, AcDb::kForRead);
                // 获得字体样式记录id 并赋值textStyleId
                if (es != ErrorStatus::eOk) {
                        acutPrintf(L"未能打开文本样式表");
                        return AcDbObjectId::kNull;
                }
                AcDbObjectId styleId;
                if (pTextStyle->has(styleName)) {
                        pTextStyle->getAt(styleName, textStyleId);
                        pTextStyle->close();
                        return textStyleId;// 若字体样式名为空,返回kNull
                }
                else {
                        pTextStyle->close();
                        return AcDbObjectId::kNull;
                }
        }
        else {
                acutPrintf(L"请输入文本样式的名称");
                return AcDbObjectId::kNull;
        }
}
//获取AutoCAD中所有文本样式的名称,并存储命名为styleNames,返回对象数组
AcDbObjectIdArray FymTextStyle::GetAll(std::vector<CString>& styleNames)
{
        AcDbObjectIdArray styleIds;
        styleNames.clear();
        AcDbTextStyleTable* pStyleTable = NULL;
        Acad::ErrorStatus es;
        es = acdbHostApplicationServices()->workingDatabase()->getTextStyleTable(pStyleTable, AcDb::kForRead);
        //获取当前工作数据库,调用getTextStyleTable方法来以只读方式获取文本样式表,并将其赋值给pStyleTable指针
        if (es != ErrorStatus::eOk) {
                acutPrintf(L"未能打开文本样式表");
                return styleIds;
        }
        AcDbTextStyleTableIterator* pItr = NULL;
        pStyleTable->newIterator(pItr);//创建一个新的文本样式表迭代器,并将其赋值给pItr指针
        for (pItr->start();!pItr->done();pItr->step())
        {// 从文本样式表的起始位置开始迭代,直到完成遍历
                AcDbTextStyleTableRecord* pRcd;
                pItr->getRecord(pRcd, AcDb::kForRead);// 获取当前迭代的文本样式表记录,并将其赋值给pRcd指针
                ACHAR* textStyleName;//存储文本样式的名称
                pRcd->getName(textStyleName);//获取文本样式的名称,并将其赋值给textStyleName指针
                if (采用tcslen(textStyleName)>0)//检查textStyleName的长度是否大于0
                {
                        styleNames.push采用back(textStyleName);
                        //将textStyleName添加到传递给方法的styleNames向量中
                        styleIds.append(pRcd->objectId());//获取并添加文本样式记录的对象ID
                }
                acutDelString(textStyleName);//释放textStyleName的内存
                pRcd->close();//关闭当前迭代的文本样式表记录
        }
        delete pItr;//删除创建的文本样式表迭代器
        pStyleTable->close();//关闭文本样式表
}
页: [1]
查看完整版本: 字体,文本样式