ord里面怎么在3维视图里面获取alignment,或者在三维视图里面通过二维设置生成的三维元素获取alignment,
,
我看到资源管理器里面有alignment的列表,那个需要怎么获取
首先是概念,alignment相当于一个容器,它包含了路线的平面线形、纵断面线形、空间三维线(在三维Model中)以及其它如速度表、桩号、断链等信息。所以在二维、三维模型中都有alignment所包含的信息。
获取所有alignment列表的代码如下,这样在当前模型中,资源管理器中的所有alignment都会被获取到:
ConsensusConnection sdkCon = new ConsensusConnection(Bentley.MstnPlatformNET.Session.Instance.GetActiveDgnModelRef());
GeometricModel gm = sdkCon.GetActiveGeometricModel();
if (gm == null)
{
return false;
}
List<Alignment> algs = gm.Alignments.ToList();
第一个 我切到3d模型就遍历不到alignment,切到2d模型就能遍历到,用的是sdk例子提供的代码,跟你们说的方法是一样的。
您切换3D模型,然后用下面代码应该能获取:
Bentley.DgnPlatformNET.DgnFile dgnFile = Session.Instance.GetActiveDgnFile(); foreach (ModelIndex modelIndex in dgnFile.GetModelIndexCollection()) { StatusInt status3D; DgnModel dgnModel3d = dgnFile.LoadRootModelById(out status3D, modelIndex.Id); string name = dgnModel3d.ModelName; if (name == "Default") { Bentley.CifNET.SDK.ConsensusConnection m_con = new Bentley.CifNET.SDK.ConsensusConnection(dgnModel3d); Bentley.CifNET.GeometryModel.SDK.GeometricModel sdkGeomModel = m_con.GetActiveGeometricModel(); if (sdkGeomModel == null) { return false; } List<Alignment> algs = sdkGeomModel.Alignments.ToList(); } }
Answer Verified By: Zhong Ling 钟凌
如张工代码:m_con.GetActiveGeometricModel();语句中,一般情况GeometricMode是在2D Model中,与平面线形在同一个Model中。当然了,如果你平面线形直接设计在三维Model中(ORD不建议这么设计),那么通过此三维Model也是直接可以获取alignment的。所以Bentley.CifNET.SDK.ConsensusConnection()函数需要传入的Model,是你设计平面的那个Model。
成功了谢谢,DgnModelP pMode = pFile->LoadRootModelById(&err, pFile->GetDefaultModelId());可以直接获取默认模型省去了遍历
嗯 有一些元素是3维的 需要在三维模型里面布置。谢谢了。