[MDL] 保存视图时,视图中的参考模型没有被保存。

若保存视图的model中有参考文件,而最终结果没有把参考文件中的元素参考过来,应该是哪里出了问题?

如下是相关的代码:

void captureViewToModel(int viewIndex, const char* modelName, int viewType, int mapSize)
{
mdlView_updateSingle(viewIndex);

//加载workspace/system ed下的ModelSeed.dgn作为seed
DgnModelRefP seedModelRef = NULL;
char* seedDirectory = mdlSystem_getExpandedCfgVar("_USTN_SYSTEMROOT");
char  seedFilePath[MAXFILELENGTH];
sprintf_s(seedFilePath, "%sseed \\ModelSeed.dgn", seedDirectory);

//初始化打开seed文件的参数
int Format = DGNFILE_FORMAT_V8;
BoolInt ThreeD = FALSE;
MSWChar seedModelName[256];
mdlCnv_convertMultibyteToUnicode ("2D Design", -1, seedModelName, sizeof(seedModelName));

if(SUCCESS != mdlWorkDgn_openFile(&seedModelRef, &Format, &ThreeD, seedFilePath, seedModelName, FALSE)) 
seedModelRef = MASTERFILE;

//保存指定视图
int code = mdlView_saveNamed(L"ViewName", L"Descrp", L"viewNameSpace", viewIndex);

//新建模型并将保存的视图参考到新建模型文件中
MSWChar wModelName[256];
int modelType = (int)MODEL_TYPE_Sheet;
BoolInt is3D = FALSE;
mdlCnv_convertMultibyteToUnicode (modelName, -1, wModelName, sizeof(wModelName));
DgnModelRefP newModelRef = NULL, masterFile = MASTERFILE;

if(SUCCESS == mdlDgnFileObj_createModel(&newModelRef, mdlDgnFileObj_getMasterFile(), MASTERFILE, wModelName, wModelName, &modelType, &is3D))
{
//激活新建模型为MASTERFILE
mdlModelRef_activateAndDisplay(newModelRef);

//将当前dgn下的default模型指定视图参考到新建模型中
DgnModelRefP attachModel = NULL;
char fileName_attached[MAXFILELENGTH];
mdlModelRef_getFileName(MASTERFILE, fileName_attached, sizeof(fileName_attached));
DPoint3d center = {0};
mdlRefFile_attachByView(&attachModel, fileName_attached, NULL, NULL, L"ViewName", 1, &center, REF_FILE_LEVEL_DISPLAY_DEFAULT , TRUE, TRUE);

//根据指定的图纸型号对参考模型进行缩放,先扫描新建模型的范围(在四周留出一定空隙)
DPoint3d minPt = {0,0,0}, maxPt = {200*g_1mu,100*g_1mu,0};
mdlSystem_computeDesignRange(&minPt, &maxPt, NULL, -1, NULL, NULL);
double width = (maxPt.x - minPt.y) * 4/3;
double height = (maxPt.y - minPt.y) * 4/3;
//将新建模型的长宽与指定型号图纸长宽进行比较,得到缩放比例
double scale = 1.0;
double mapWidth[] = {1.189, 0.841, 0.594, 0.42, 0.297}, mapHeight[] = {0.841, 0.594, 0.42, 0.297, 0.21};
scale = (mapWidth[mapSize]*g_1mu/width) < (mapHeight[mapSize]*g_1mu/height) ? mapWidth[mapSize]*g_1mu/width: mapHeight[mapSize]*g_1mu/height;
mdlRefFile_scaleAttachment(attachModel, &center, scale);

//为新建模型套用图框
applyFrameToDgn(g_SpeValue.bMapEn == -1? true: false, mapSize);

//设置新建模型的图层显示
switch(viewType)
{
//ISO轴侧视图
case 0:
{
  mdlLevel_setDisplay(attachModel, g_levelID_ProArea, TRUE);
  mdlLevel_setDisplay(attachModel, g_levelID_ProBorder, FALSE);
  mdlLevel_setDisplay(attachModel, g_levelID_ProTag, TRUE);
//mdlLevelTable_rewrite(MASTERFILE);
}
break;
//TOP顶视图
case 1:
{
  mdlLevel_setDisplay(attachModel, g_levelID_ProArea, FALSE);
  mdlLevel_setDisplay(attachModel, g_levelID_ProBorder, TRUE);
  mdlLevel_setDisplay(attachModel, g_levelID_ProTag, TRUE);
//mdlLevelTable_rewrite(MASTERFILE);
}
break;
//CUSTOM自定义视图
case 2:
break;
default:
break;
}

//保存参考文件的图层设置和缩放设置
mdlView_fit(VIEWINDEX, NULL);
mdlLevelTable_rewrite(attachModel);
mdlRefFile_writeAttachment(attachModel);
//mdlSystem_saveDesignFile();

//重新将之前的MASTERFILE激活并释放新建模型的内存
mdlModelRef_activateAndDisplay(masterFile);
mdlModelRef_freeWorking(newModelRef);
newModelRef = NULL;
}

if(seedModelRef != MASTERFILE)
mdlWorkDgn_closeFile(seedModelRef);

if(seedDirectory != NULL)
mdlSystem_freeCfgVarBuffer(seedDirectory);

mdlView_deleteNamed(L"ViewName", L"viewNameSpace");
}
Parents Reply Children
No Data