获取ARX实体的DXF信息

作者: admin 分类: C++,ObjectARX 发布时间: 2020-02-16 10:27

下面介绍两种: 一种是在ARX程序中,一种是在CAD中,获取DXF信息

1. 在CAD中,可以在Command中输入以下信息,然后点选实体,就可以获取到实体的信息:

命令: (entget(car(entsel)))

命令: (entsel)

选择对象: (<图元名: 7ffffb05380> (792.588 573.405 0.0))

命令: (car(entsel))

选择对象: <图元名: 7ffffb05380>

命令: (entget(car(entsel)))

选择对象: ((-1 . <图元名: 7ffffb05380>) (0 . "TEXT") (330 . <图元名: 7ffffb039f0>) (5 .

"140") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "注释层") (100 . 

"AcDbText") (10 789.655 572.652 0.0) (40 . 2.5) (1 . "未命名") (50 . 0.0) (41 . 

1.0) (51 . 0.0) (7 . "Standard") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 

0.0 1.0) (100 . "AcDbText") (73 . 0))

2. 在Arx程序中,通过这这个函数实现获取

函数:acdbEntGet

struct resbuf *

acdbEntGet(const ads_name ent);

Retrieves the specified entity from the drawing database and returns its definition data as a linked list of result buffers. This function is used also to examine dictionaries.

例如,在已知objid情况下,获取信息:

ads_name ads;
acdbGetAdsName(ads, objid);
resbuf* pResbuf = acdbEntGet(ads);
resbuf* pNext = pResbuf;
for (; pNext != NULL; pNext=pNext->rbnext)
{
      if (pNext->restype == 0)
      { // DXF == 0时,内容为String型,代表类型名称,例如 TEXT
            break;
     }
}

Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu  转载请标明来源 

————————————————

版权声明:本文为CSDN博主「春夜喜雨」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/chunyexiyu/article/details/38421409

ObjectArx查看实体DXF信息

  • 在cad中使用(entget(car(entsel)))命令查看实体DXF信息

  • 在arx中使用acdbEntGet函数查看实体DXF信息()

void ZffChap5EntInfo()
{
      // 提示用户选择实体
      ads_name entName;
      ads_point pt;
      if (acedEntSel(TEXT("\n选择实体:"), entName, pt) != RTNORM)
            return;
      
      struct resbuf *rbEnt;  // 保存实体数据的结果缓冲区
      struct resbuf *rb;           // 用于遍历rbEnt的结果缓冲区
      
      // 从entName获得保存实体数据的结果缓冲区
      rbEnt = acdbEntGet(entName);
      rb = rbEnt;
      
      while (rb != NULL)
      {
            switch (rb->restype)
            {
            case -1:    // 图元名
                  acutPrintf(TEXT("\n图元名: %x"), rb->resval.rstring);
                  break;
            case 0:           // 图元类型
                  acutPrintf(TEXT("\n图元类型: %s"), rb->resval.rstring);
                  break;
            case 8:           // 图层
                  acutPrintf(TEXT("\n图层:%s"), rb->resval.rstring);
                  break;
            case 10:    // 圆心
                  acutPrintf(TEXT("\n圆心:(%.2f, %.2f, %.2f)"),
                       rb->resval.rpoint[X],
                       rb->resval.rpoint[Y],
                       rb->resval.rpoint[Z]);
                  break;
            case 40:    // 半径
                  acutPrintf(TEXT("\n半径:%.4f"), rb->resval.rreal);
                  break;
            case 210:   // 圆所在平面的法向矢量
                  acutPrintf(TEXT("\n平面的法向矢量:(%.2f, %.2f, %.2f)"),
                       rb->resval.rpoint[X],
                       rb->resval.rpoint[Y],
                       rb->resval.rpoint[Z]);
                  break;
            default:
                  break;
            }     // switch
            
            rb = rb->rbnext;       // 切换到下一个节点
      }     // while
      
      if (rbEnt != NULL)
      {
            acutRelRb(rbEnt);
      }
}

————————————————

版权声明:本文为CSDN博主「A彡安静氵」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/phd17621680432/article/details/102607902

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

标签云