admin 发表于 2024-3-14 20:08:34

[每日一码] 把选择的实体写到外部DWG文件

static void WblockIds() {
      resbuf *rb = acutNewRb(RTSTR);
      if (acedGetFileD(L"Export file", nullptr, L"dwg", 32, rb) != RTNORM)
                return;
      AcString filename = rb->resval.rstring;   acutRelRb(rb);
      ads采用name ss;
      if (acedSSGet(nullptr, nullptr, nullptr, nullptr, ss) != RTNORM)
                return;
      Adesk::Int32 nSel = 0;
      acedSSLength(ss, &nSel);
      if (nSel == 0) {acedSSFree(ss); return; }
      AcDbObjectIdArray ids; ids.setPhysicalLength(nSel);
      for (int i = 0; i < nSel; i++) {
                ads采用name en; acedSSName(ss, i, en);
                AcDbObjectId id;
                if (acdbGetObjectId(id, en) == Acad::eOk) ids.append(id);
      }
      acedSSFree(ss);
      Acad::ErrorStatus es;
      AcDbDatabase *pOutputDb = new AcDbDatabase(false);
      es = pOutputDb->readDwgFile(filename, AcDbDatabase::OpenMode::kTryForReadShare);
      AcDbObjectId idModelSpace =
                AcDbSymbolUtilities::servicesPtr()->blockModelSpaceId(pOutputDb);
      AcDbIdMapping idMap;
      es = acdbCurDwg()->wblockCloneObjects(ids, idModelSpace, idMap, AcDb::DuplicateRecordCloning::kDrcReplace);
      pOutputDb->closeInput(true);
      es = pOutputDb->saveAs(filename);
      delete pOutputDb;
}
页: [1]
查看完整版本: [每日一码] 把选择的实体写到外部DWG文件