ITFApplication appInst = new TFApplicationList(); ITFLoadableProject proj; ITFLoadableProjectList projList; //dgnModelRef 为参考的轴网文件对应模型 //appInst.ModelReferenceLoadProject(dgnModelRef, 0, out projList)返回0 //但projList为null //直接通过appInst.GetProject(0, out projList)读取的project返回的轴网数据不对 if (appInst.ModelReferenceLoadProject(dgnModelRef, 0, out projList) == 0 && projList != null) { proj = projList.AsTFLoadableProject; }
代码如上,请问该怎么在当前文件中读取参考轴网文件内的轴网数据
我们已经告知了OBD专家,请耐心等待答复。
轴网信息是保存在项目的dgnlib文件中,是不能直接读取的。可以使用对应的API来读取。
你在某个文件的model中看到的轴网,不是真正的轴网,是将轴网信息转化为几何元素的结果。这些几何元素是项目的轴网信息的具体化,只能通过轴网对话框进行更新。读取这些元素是没有意义的。因为这些元素可能和项目的轴网信息不同步了。
CE版本之后,可以设置在项目的dgn文件中显示轴网,这些显示的轴网,是临时对象(这个和上面说的,某个model中的几何元素不同)。可以看作是轴网信息的具体化形式,但是他们不是任何model中的元素。拾取可以参考例子:
examples\pickgridline
这个例子在SDK的目录中(update 6 SDK)
感谢解答。尝试了下,还是不行。
pickgridline需要拾取轴网,和需求不符。
我现在用的代码是参考OBDSDK\examples\Gridline里的,看了下,与pickgridline用的API基本是一样的。
目前遇到的问题,和您说的一样,读取到的轴网信息不同步,返回的信息是最后一次使用轴网工具更新的数据。
pickgridline中
TFGridSystemList* pThis = mdlTFGridSystemList_getFromElement(currDescr, const_cast<TFGridSystemList*>(pSystems));
这一行无法实现,我的轴网dng里只有grid,没有其它东西,而且是参考进来的,无法创建currDescr。
所以我想按照Gridline里的方式,通过ITFLoadableProject获取ITFDrawingGrid。
通过ITFApplication.ModelReferenceLoadProject()获取参考文件中的ITFLoadableProject失败。
所以,是否可以不通过交互拾取的方式,读取到参考文件中的轴网?
mdlTFGridSystemList_getFromElement 这个函数能成功,是因为临时对象这种轴网具体化的形式,附加了轴网的链接信息。在dgn文件的某个model中的轴网具体化形式,是没有这个链接的。所以,交互拾取的方式,是取不到参考文件中的轴网的。拾取到的是一个普通的元素,是轴网的具体化。但是没有轴网API所能提供的信息。
经过测试,pickgridline代码返回的数据也不同步啊,只有mdlTFGridCurve_getLabel这个返回的结果是正确的,其它的均为上次使用轴网工具的数据。
如上图,拾取01轴,TFGridCurve* pCurve = mdlTFGridCurve_getFromElement (currDescr, pCurveList);
pCurve返回null,因为轴网工具里没有这个轴。
拾取4轴,模型中,4轴的Distance为15000,但是通过mdlTFGridCurve_getValue(pCurve ); 返回的数值为18000,还是轴网工具中的数据。