lethuongtri 发表于 2022-1-22 07:41:17

无法将多行文字附加到引线

大家好。我有一个问题.所以现在我正在创建带有注释(Mtext)的领导者。
源代码如下。我使用了“pLeader->attattachAnnotation(pMtext->objectID)”,但它不起作用。你能告诉我为什么吗?
关于命令的结果,我还附上了下面的图片。请看。
void
cmdKRLE()
{
    ads_point pt0,pt1, pt2;
    TCHAR Content;
    pt0 = 0;
    pt0 = 0;
    pt0 = 0;
    acedInitGet(1, NULL);
    acedGetPoint(pt0, _T("\n Select the first point:"), pt1);
    acedInitGet(1, NULL);
    acedGetPoint(pt1, _T("\n Select the second point:"), pt2);
    acdbUcs2Wcs(pt1, pt1, false);
    acdbUcs2Wcs(pt2, pt2, false);
   
    AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase();
    Acad::ErrorStatus es;
    AcDbBlockTableRecordPointer pBtr(pDb->currentSpaceId(), AcDb::kForWrite);
    if (pBtr.openStatus() != Acad::eOk) return;
    struct resbuf DimScale;
    acedGetVar(_T("DIMSCALE"), &DimScale);
    acedGetString(1, _T("\n Input content:"), Content);
    AcDbObjectPointerpMtext;
    pMtext.create();
    pMtext->setContents(Content);
    pMtext->setLayer(_T("TEXT"));
    pMtext->setTextHeight(DimScale.resval.rreal * 3.2);
    pMtext->setLocation(asPnt3d(pt2));
    if (pt2 >= pt1)
    {
      pMtext->setAttachment(AcDbMText::kBottomLeft);
    }
    else
    {
      pMtext->setAttachment(AcDbMText::kBottomRight);
    }
    es = pBtr->appendAcDbEntity(pMtext);
    if (es != Acad::eOk)
    {
      acutPrintf(_T("\n Can not add Mtext!"));
      return;
    }
    AcDbObjectPointer pLeader;
    pLeader.create();
    pLeader->appendVertex(asPnt3d(pt1));
    pLeader->appendVertex(asPnt3d(pt2));
    es = pBtr->appendAcDbEntity(pLeader);
    if (es != Acad::eOk)
    {
      acutPrintf(_T("\n Can not add Leader!"));
      return;
    }
    pLeader->setLayer(_T("SCALE"));
    pLeader->setDimscale(DimScale.resval.rreal);
    pLeader->attachAnnotation(pMtext->objectId());
    pLeader->evaluateLeader();
}



**** Hidden Message *****

lethuongtri 发表于 2022-1-22 19:13:55

嗨,您应该检查每个ARX调用的错误状态,当事情变糟时,它可能会告诉它。exampleif (auto e = pMtext->setContents(...); e != eOk)。
acutPrintf(_T(“\nError @ pMtext->setContents = %ls: ”), acadErrorStatusText(e));。
另外,我喜欢在创建实体后使用设置数据库默认值,这可能不是这里的错误,但它是导致很多问题的原因AcDbObjectPointerpMtext;。
pMtext.create();。
pMtext->setDatabaseDefaults(pDb);。

lethuongtri 发表于 2022-1-22 20:42:31

感谢您的回复。我得到了这个.让我用这个再次检查我的代码。
页: [1]
查看完整版本: 无法将多行文字附加到引线