老师,我在二次开发中生成廊道成功,但是给廊道添加控制点时,由curvevector生成align2作为plan element,发现增加控制点失败,请问什么原因?
检查发现两个问题:
1)调试时发现newPointControlEdit 的 PointControlType 为 none,之前明明设置了PointControlType.Alignment,这是怎么回事?
2)使用我生成的alignment 在软件中手动操作create point control,我编程生成的align2提示 element has no name,并且在exlporer里也没有该alignment。
代码如下:
ConsensusConnectionEdit con = ConsensusConnectionEdit.GetActive(); LinearElement lineEle1 = LinearElement.CreateFromCurveVector(curve1, false); AlignmentEdit align1 = AlignmentEdit.CreateByLinearElement(con, lineEle1, true); LinearElement lineEle2 = LinearElement.CreateFromCurveVector(curve2, false); AlignmentEdit align2 = AlignmentEdit.CreateByLinearElement(con, lineEle2, true); if (null == align1 || null == align2) return null;
con.StartTransientMode();
//创建纵面……
//创建走廊带 Bentley.CifNET.GeometryModel.SDK.Edit.CorridorEdit newCorridor = Bentley.CifNET.GeometryModel.SDK.Edit.CorridorEdit.CreateByAlignment(con, "Corridor", align1);
//生成控制点 Bentley.CifNET.GeometryModel.SDK.Edit.PointControlParameter parameters = new PointControlParameter(align2 , align2.ActiveProfile, 0, align1.Geometry.SumOfLengths(), PointControlMode.Horizontal, PointControlType.Alignment); parameters.Description = "Test Create PointControl"; parameters.PointName = "_L"; parameters.UseAsSecondaryAlignment = false; parameters.Priority = 2; PointControlEdit newPointControlEdit = newCorridor.AddPointControl(parameters); newPointControlEdit.ControlType = PointControlType.Alignment;
con.PersistTransients();
1.con.StartTransientMode();应该放在AlignmentEdit align1 = AlignmentEdit.CreateByLinearElement(con, lineEle1, true);前面;
2.关于控制点的问题,你试试将PointControlType.Alignment换成PointControlType.Alignment3D;
我试了,还是没有成功。con.StartTransientMode()放在前面,会在模型中多生成lineEle1,没有别的效果。
align2 在模型里有吗?
你要设置下FeatureDefinition,否则在任务管理器里头Alignment下面是没有的。
我测试了一遍,确实没法加到资源管理器中,但手动在界面上通过设置特征值给生成的元素加特征,资源管理器就有了,这可能是edit内部代码没设置成功的问题,我已经将这个问题反馈给ORD开发人员,我会继续跟进。