写块克隆可以把当前数据库的实体写入到另一个dwg文件中去。用法根deepclone类似,不过deepclone只能复制到同一数据库中,而写块克隆是在不同数据库中进行复制的。

写块克隆也算是深度克隆,能把所克隆的实体带有的图层、标注样式、多线样式、文字样式、表格样式、引线样式都克隆过去。但是呢,我试过,如果实体的样式是standard样式,实体被克隆到新文件里去,就无法覆盖新文件里的standard样式了,我根据不同的样式采取了不同的方法来完成让standard样式也能被克隆过去。

首先简单的是Mleaderstyle、MLStyle和TableStyle,它们三个采取的是更改standard样式的名称,然后如果原实体有使用到standard样式就能被克隆过去了。这三个的样式都是通过字典来获取的。例如:

  

//表格样式
pDataBase->getTableStyleDictionary(newDict, AcDb::kForWrite);
bool flag=newDict->setName(L"Standard", L"oldStandard");
//多重引线样式
 pDataBase->getMLeaderStyleDictionary(newDict, AcDb::kForWrite);
bool flag = newDict->setName(L"Standard", L"oldStandard");   
//多线样式
 pDataBase->getMLStyleDictionary(newDict, AcDb::kForWrite);
bool flag = newDict->setName(L"Standard", L"oldStandard"); 

稍微复杂点的,文字样式,需要打开原数据库和新数据库的standard文字样式块记录,然后把原块记录的值赋值给新块记录。大概是这样:

if (pNewRec!=NULL)
                {
                    ACHAR * pTypeface = NULL;
                    Adesk::Boolean bold;
                    Adesk::Boolean italic;
                    Charset  charset;
                    Autodesk::AutoCAD::PAL::FontUtils::FontPitch  pitchAndFamily;
                    Autodesk::AutoCAD::PAL::FontUtils::FontFamily fontFamily;
                    ACHAR *na, *na1, *bigFontN;
                    txtRec->getName(na);

                    txtRec->fileName(na1);
                    txtRec->bigFontFileName(bigFontN);
                    Adesk::UInt8 flagB = txtRec->flagBits();
                    setSymbolName(pNewRec, na);
                    es = pNewRec->setFileName(na1);
                    es = pNewRec->setBigFontFileName(bigFontN);
                    pNewRec->setFlagBits(flagB);
                    pNewRec->setIsVertical(txtRec->isVertical());
                    pNewRec->setIsShapeFile(txtRec->isShapeFile());

                    es = txtRec->font(pTypeface, bold, italic, charset, pitchAndFamily, fontFamily);
                    //es = pTextStyle->font(pTypeface, bold, italic, charset, pitchAndFamily, fontFamily);
                    if (es == Acad::eOk)
                        pNewRec->setFont(pTypeface, bold, italic, charset, pitchAndFamily, fontFamily);
                    
                    es = pNewRec->setTextSize(txtRec->textSize());
                    if (styleId != stdId&&styleId != anoId)
                    {                        
                        es = pNewRec->setXScale(txtRec->xScale());
                    }
                    es = pNewRec->setObliquingAngle(txtRec->obliquingAngle());

                }
View Code

相关文章:

  • 2022-01-15
  • 2021-10-10
  • 2022-01-31
  • 2021-08-15
  • 2021-06-15
  • 2022-03-11
  • 2021-07-03
猜你喜欢
  • 2021-07-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-03
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案