代码摘自例程 C:\Program Files\Bentley\OpenRoadsDesignerCONNECTSDK\examples\ManagedSDKExample\Examples\SuperElevationCreator.cs 结尾为新增代码。模板已上传,劳烦老师们帮忙看一下,多谢!
Entity.Super_Property super_Property = Entity.Super_Property.GetPSPropertyObj(); ConsensusConnectionEdit con = ConsensusConnectionEdit.GetActive(); con.StartTransientMode(); //CreateSingleSuperElevationSection(string Name, double startDistance, double endDistance, Alignment alignment); //通过区间名称、起始位置、终止位置和平面线形,创建一个超高区间。 string sectionName = form.getSectionName(); double startDistance = form.getStartDistance(); double endDistance = form.getEndDistance(); string featureType = form.getFeatureType(); BCGSE.SuperElevationSectionEdit superEleSection = BCGSE.SuperElevationSectionEdit.CreateSingleSuperElevationSection(sectionName, startDistance, endDistance, alignment); if (superEleSection == null) return; //Set FeatureDefinition to the SuperElevation Section 将 FeatureDefinition 设置为 SuperElevation 部分 superEleSection.SetFeatureDefinition(featureType); //通过名称设置超高区间的特征定义。 //Create a SuperElevation Lane //创建超高车道 SuperElevationType superElevationType = form.getSuperElevationType(); Side superElevationSide = form.getSuperElevationSide(); string laneName = form.getLaneName(); double insideEdgeOffset = form.getInsideEdgeOffset(); double width = form.getWidth(); double slope = form.getSlope(); double laneStartDistance = form.getLaneStartDistance(); double laneEndDistance = form.getLaneEndDistance(); BCGSE.SuperElevationEdit superElevation = BCGSE.SuperElevationEdit.CreateSuperElevation(superElevationType, laneName, superElevationSide, insideEdgeOffset, width, slope, laneStartDistance, laneEndDistance, superEleSection); //Create four SuperElevation Transitions 创建超高过渡 double t1Distance = form.getT1Distance(); double t1Slope = form.getT1Slope(); PivotEdgeType t1PivotEdgeTyp = form.getT1PivotEdgeType(); SuperElevationTransitionType t1TransitionType = form.getT1TransitionType(); RDSuperPointType t1SuperPointType = form.getT1SuperPointType(); double t1NonLinearCurveLength = form.getT1NonLinearCurveLength(); BCGSE.SuperElevationTransitionEdit superElevationTransition1 = BCGSE.SuperElevationTransitionEdit.CreateSuperElevationTransition( t1Distance, t1Slope, t1PivotEdgeTyp, t1TransitionType, t1SuperPointType, t1NonLinearCurveLength, superElevation); double t2Distance = form.getT2Distance(); double t2Slope = form.getT2Slope(); PivotEdgeType t2PivotEdgeTyp = form.getT2PivotEdgeType(); SuperElevationTransitionType t2TransitionType = form.getT2TransitionType(); RDSuperPointType t2SuperPointType = form.getT2SuperPointType(); double t2NonLinearCurveLength = form.getT2NonLinearCurveLength(); BCGSE.SuperElevationTransitionEdit superElevationTransition2 = BCGSE.SuperElevationTransitionEdit.CreateSuperElevationTransition( t2Distance, t2Slope, t2PivotEdgeTyp, t2TransitionType, t2SuperPointType, t2NonLinearCurveLength, superElevation); double t3Distance = form.getT3Distance(); double t3Slope = form.getT3Slope(); PivotEdgeType t3PivotEdgeTyp = form.getT3PivotEdgeType(); SuperElevationTransitionType t3TransitionType = form.getT3TransitionType(); RDSuperPointType t3SuperPointType = form.getT3SuperPointType(); double t3NonLinearCurveLength = form.getT3NonLinearCurveLength(); BCGSE.SuperElevationTransitionEdit superElevationTransition3 = BCGSE.SuperElevationTransitionEdit.CreateSuperElevationTransition( t3Distance, t3Slope, t3PivotEdgeTyp, t3TransitionType, t3SuperPointType, t3NonLinearCurveLength, superElevation); //Set Constraint 设置约束 superElevationTransition2.SetSlopeConstraint(SuperElevationSlopeConstraintType.CrossSlope, superElevationTransition1, superElevationTransition3, superElevation); super_Property.superEdit = superElevation; GeometricModel gm = con.GetActiveGeometricModel(); GeometricModel geomModel = con.GetActiveGeometricModel(); if (gm == null) return; foreach (Corridor cor in gm.Corridors) { Alignment al = cor.CorridorAlignment; //获取廊道对应路线 CorridorEdit corridorEdit = cor as Bentley.CifNET.GeometryModel.SDK.Edit.CorridorEdit; if (al.LinearGeometry.Equals(alignment.LinearGeometry)) { superElevation.AddPointControl("YLJ-W-R", "ZFD-R", 0, form.getEndDistance(), 1, corridorEdit); break; } } con.PersistTransients();
我把您的问题转到二次开发版块。
这块待测试后,给您反馈,请耐心等待。
好的,多谢
请参考这个帖子试试:
https://communities.bentley.com/communities/other_communities/chinafirst/f/microstation-projectwise/188811/ord-c-curvevector-alignment/555688#555688
另外,可以参考下面的测试下,其中可以忽略CreateSuperElevation这个函数,直接用SDK例子的:
Bentley.CifNET.SDK.Edit.ConsensusConnectionEdit con = Bentley.CifNET.SDK.Edit.ConsensusConnectionEdit.GetFromRepositoryConnection(rc); Bentley.CifNET.GeometryModel.SDK.Corridor superElevationCorridor = null; foreach (Bentley.CifNET.GeometryModel.SDK.Corridor corridor in con.GetActiveGeometricModel().Corridors) { if (corridor != null) { superElevationCorridor = corridor as Bentley.CifNET.GeometryModel.SDK.Corridor; break; } } SuperElevation assignSuperElevation = null; con.StartTransientMode(); assignSuperElevation = CreateSuperElevation(con); double endDistance = superElevationCorridor.CorridorAlignment.LinearGeometry.EndPoint.DistanceAlong; Bentley.CifNET.GeometryModel.SDK.PointControl pointControl = assignSuperElevation.AddPointControl("EOP_L", "CL", 0, endDistance, 1, superElevationCorridor); con.PersistTransients();
张老师,我在测试的过程中用的就是SDK中的例子。并将问题提给了安老师。经他测试发现是SDK的bug
PointControl添加完后,并不能在动态截面中高亮显示出来,同时SDK创建的SuperElevation里alignment为null