您可以处理包含多个图纸的 .nwd、.nwc 和 .nwf 文件。使用图纸类似于处理多个彼此不相关的文件,但所有更改都保存在一个位置。本节解释了使用图纸的基础知识。
要获取文件中现有图纸的信息,请读取 .nwd、.nwc 或 .nwf 文件数据库:
OdString szSource;//path to file
OdNwDatabasePtr pDb = svcs.readFile(szSource);
打开文件后,数据库会有一个当前活动图纸,该图纸是文件中保存为活动的图纸。如果文件只包含一个图纸,则打开文件后该图纸即为活动图纸。要获取当前活动图纸,请使用方法 OdNwObjectId getActiveSheetId() const:
OdNwObjectId activeSheetId = pDb->getActiveSheetId();
OdNwSheetInfoPtr pActiveSheet = activeSheetId.openObject();
要获取文件中存在的图纸列表,请使用方法 OdResult OdNwDatabase::getSheets(OdNwObjectIdArray& aSheets) const:
OdNwObjectIdArray aSheets;
pDb->getSheets(aSheets);
aSheets 数组的每个元素都是图纸对象的 OdNwObjectId 元素。例如,要获取索引为 1 的图纸的数据:
//Required index must be in the range of the array, otherwise an exception is thrown.
OdNwSheetInfoPtr pSheet = aSheets[1].openObject();
//Get the type of the sheet: 2D or 3D
NwSheetType::Enum sheetType = pSheet->getSheetType();
//Get the ID of the selected sheet info object
OdString newSheetId = pSheet->getSheetId();
要在数据库中激活选定的图纸,请使用方法 OdResult OdNwDatabase::setActiveSheet(const OdString& sheetId),并指定图纸 ID:
pDb->setActiveSheet(newSheetId);
一旦图纸设置为活动状态,数据库将指向该当前图纸。使用以下方法从当前图纸获取数据:
- OdNwObjectId OdNwDatabase::getCurrentViewId() const;
- OdNwObjectId OdNwDatabase::getCurrrentViewClippingPlanesId() const;
- OdResult OdNwDatabase::getSavedViewsElements(OdNwObjectIdArray& aSavedViewsElementIds) const;
- OdNwObjectId OdNwDatabase::getBackgroundElementId() const;
- OdNwObjectId OdNwDatabase::getClashElementId() const;
- OdResult OdNwDatabase::getModels(OdNwObjectIdArray& arrModels) const;
- OdNwObjectId OdNwDatabase::getModelItemRootId() const;
- OdGeMatrix3d OdNwDatabase::getModelTransform() const;
- NwModelUnits::Enum OdNwDatabase::getUnits() const;
- OdResult OdNwDatabase::getLightElements(OdNwObjectIdArray& arrLights) const;
- OdNwGridSystemElementPtr OdNwDatabase::getGridSystemElement() const;
- OdNwObjectId OdNwDatabase::getSelectionSetsElementId() const;
- OdNwObjectId OdNwDatabase::getSavedAnimationElementId() const;