LL_Zz 发表于 2019-12-21 00:11:00

求助

我在模型空间里选择了一些实体,然后在组成块参照,为什么我的块参照里什么都没有,只有名字,不见图形,在cad上操做的时候可以选择它并插入,不过插入到模型空间什么都没有。我确定实体不是空的,块表也打开正常,record和块表也都关闭了的
AcDbBlockTable *pBlkTable;
    if (acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlkTable, AcDb::OpenMode::kForWrite) != ErrorStatus::eOk)
      return;
    AcDbBlockTableRecord *record1 = new AcDbBlockTableRecord();
    AcDbObjectId recId;
    record1->setName(L"sssL");
    pBlkTable->add(recId, record1);
    AcDbObjectIdArray idArr;
    AcDbObjectIdArray mirIdArr;
    if (CSelectUtil:romptSelectEnts(L"\n请选择要镜像的实体集\n", NULL, idArr)) {
      for (int i = 0; i clone());
          if (record1->appendAcDbEntity(pCopyEnt) == ErrorStatus::eOk) {
            AfxMessageBox(TEXT("InsertOK!"));
          }
          else {
            AfxMessageBox(TEXT("InsertFail!"));
          }
          pEnt->close();
      }
      }
      record1->close();
      pBlkTable->close();
    }
复制代码

LL_Zz 发表于 2019-12-24 17:29:00

我也不知道问题是怎么回事,但是我把 pBlkTable->add(recId, record1);这句放在record1->close();这句之前就解决了。

luowy 发表于 2020-1-13 18:53:00

objectarx中,要特别注意托管对象的关闭问题,这个是要按照过程次序限定原则的,要做到用完就关闭。
原帖子代码里面,最好也要按照伪代码的次序执行
获取选定的对象,将对象克隆(或者删除,利用程序开关)复制到内存空间,新建BTR,将克隆对象存入BTR,打开BT,将BTR存入BT,关闭BT,关闭BTR。
还有就是,一楼帖子中,要注意代码的静默性,就算是临时性的,也不能过多的来一个对话框,要用es来引导用户,或者开发者。

LL_Zz 发表于 2020-1-13 20:14:00


谢谢提醒,以后的开发中,我会注意的。
页: [1]
查看完整版本: 求助