开发者社区 > 弹性计算 > 云服务器ECS > 正文

c++ 基于ObjectARX 二次开发CAD 如何获取图中公差信息

已解决

c++ 基于ObjectARX 二次开发CAD 如何获取图中公差信息

展开
收起
kpj7lfqk7qrim 2023-09-14 11:45:18 86 0
3 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。
    推荐回答

    在C++中基于ObjectARX进行CAD的二次开发,可以使用AutoCAD的API来获取图中的公差信息。以下是一个示例代码,演示如何获取CAD图中的公差信息:

    #include <aced.h>
    #include <dbsymtb.h>
    #include <dbtoler.h>
    
    void GetTolerance()
    {
        AcDbDatabase* pDatabase = acdbHostApplicationServices()->workingDatabase();
        if (pDatabase == nullptr)
        {
            acutPrintf(_T("\nNo database available."));
            return;
        }
    
        AcDbBlockTable* pBlockTable;
        if (acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead) != Acad::eOk)
        {
            acutPrintf(_T("\nCannot open block table."));
            return;
        }
    
        AcDbBlockTableRecord* pModelSpace;
        if (pBlockTable->getAt(ACDB_MODEL_SPACE, pModelSpace, AcDb::kForRead) != Acad::eOk)
        {
            acutPrintf(_T("\nCannot open Model Space."));
            pBlockTable->close();
            return;
        }
        pBlockTable->close();
    
        AcDbBlockReferenceIterator* pIterator;
        if (pModelSpace->newBlockReferenceIterator(pIterator) != Acad::eOk)
        {
            acutPrintf(_T("\nCannot create block reference iterator."));
            pModelSpace->close();
            return;
        }
        pModelSpace->close();
    
        for (; !pIterator->done(); pIterator->step())
        {
            AcDbEntity* pEntity;
            if (pIterator->getEntity(pEntity, AcDb::kForRead) != Acad::eOk)
            {
                acutPrintf(_T("\nCannot get entity from iterator."));
                continue;
            }
    
            AcDbTolerance* pTolerance = AcDbTolerance::cast(pEntity);
            if (pTolerance != nullptr)
            {
                // 获取公差信息
                AcGePoint3d position = pTolerance->position();
                double upperValue = pTolerance->upperValue();
                double lowerValue = pTolerance->lowerValue();
    
                acutPrintf(_T("\nTolerance at (%.2f, %.2f, %.2f): Upper: %.4f, Lower: %.4f"),
                    position.x, position.y, position.z, upperValue, lowerValue);
            }
    
            pEntity->close();
        }
    
        delete pIterator;
    }
    
    void initApp()
    {
        acedRegCmds->addCommand(_T("MYCAD"), _T("GetTolerance"), _T("GT"), ACRX_CMD_MODAL, GetTolerance);
    }
    
    void unloadApp()
    {
        acedRegCmds->removeGroup(_T("MYCAD"));
    }
    
    extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* appId)
    {
        switch (msg)
        {
        case AcRx::kInitAppMsg:
            acrxDynamicLinker->unlockApplication(appId);
            acrxRegisterAppMDIAware(appId);
            initApp();
            break;
        case AcRx::kUnloadAppMsg:
            unloadApp();
            break;
        }
        return AcRx::kRetOK;
    }
    

    在上述示例代码中,我们将获取公差信息的过程封装在了 GetTolerance 函数中。首先,我们获取当前工作数据库,并打开模型空间。然后,使用块引用迭代器来遍历模型空间中的实体。对于每个实体,我们使用 AcDbTolerance::cast 函数将其转换为公差对象,并获取位置和上下限值等信息。

    2023-09-14 13:06:23
    赞同 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    楼主你好,在基于 ObjectARX 二次开发 CAD 中,获取图中公差信息所涉及到的主要步骤如下:

    1. 获取所需要的图形实体。可以通过实体的类型、选择集中的实体对象等方式来获取。

    2. 针对获取的实体对象,判断其是否携带了公差参数。在 CAD 中,常见的公差参数有尺寸公差、位置公差等。可以根据实体类型来确定其是否有对应的公差参数。

    3. 如果实体对象具有公差参数,可以通过相应的 API 来获取其具体数值或符号。比如,对于尺寸公差,可以使用 AcDbDimData 类来获取公差数值、公差符号等属性。

    4. 如果实体对象没有公差参数,则需要根据具体情况进行判断和处理。比如,对于一些自定义实体或复杂的几何形状,可能需要通过算法来计算其公差值。

    需要注意的是,获取图中公差信息涉及到的具体 API 和实现方式可能会因 CAD 版本、实体类型、具体的公差需求等因素而有所不同。

    2023-09-15 07:57:31
    赞同 展开评论 打赏
  • 要获取CAD图中的公差信息,您可以使用ObjectARX进行二次开发。下面是一些可能的方法:

    1. 遍历实体:通过遍历CAD图中的实体(例如线、圆等),使用ObjectARX提供的API来获取每个实体的公差信息。您可以检查实体的属性或扩展数据来获取公差信息。

    2. 查询扩展数据:在CAD中,您可以为实体添加自定义的扩展数据,用于存储额外的信息,包括公差。通过使用ObjectARX API,您可以查询实体的扩展数据并提取公差信息。

    3. 解析标注对象:CAD图中的标注对象通常包含有关尺寸和公差的信息。使用ObjectARX API,您可以解析标注对象并提取所需的公差信息。

    4. 使用CAD软件提供的API:某些CAD软件(如AutoCAD)提供了专门用于访问和操作图形数据的API。您可以查阅官方文档和开发者资源,以了解如何使用这些API获取公差信息。

    2023-09-14 22:40:46
    赞同 展开评论 打赏
问答分类:
C++
问答标签:

云服务器ECS是一种安全可靠、弹性可伸缩的IaaS级云计算服务。在这里你可以获取最新的ECS产品资讯、最前沿的技术交流以及优惠活动等信息,加速自己的技术成长。

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载