没有找到删除参数约束的接口。目前可以获取到ParametricConstraintEdit的Element,但是delete后需要进行廊道计算,同时也没有找到廊道计算(Process Corridor)的接口。
是的,目前该功能并没有开放接口。
廊道计算的接口也没开放吗?有没有其他刷新廊道的途径,等效于廊道计算。让element删除后,在廊道上remove参数约束成功;
首先,ORD公开接口只提供了两种方式:一种是创建,一种是获取,并没有提供编辑,更没有刷新等功能,您获取的ParametricConstraintEdit的Element,肯定不是通过公开接口获取的,我这边给您一个建议,如果想删除的话,可以通过命令的方式删除,您先试试这种方式是否可行:
SelectionSetManager.EmptyAll(); SelectionSetManager.AddElement(drop.Element, geomModel.DgnModel); Bentley.MstnPlatformNET.Session.Instance.Keyin("delete element");
不可行,执行delete element的keyin命令,会进入交互工具,并没有执行删除操作;
那就没有更好的办法了。
首先,问下您为什么有删除参数约束的需求,参数约束如果用程序生成的话,在生成时保证其正确的话,没有必要删除啊!
另外,如果删除的话,有以下建议:
1.通过Bentley.MstnPlatformNET.Session.Instance.Keyin("delete element");命令,向SelectionSetManager.AddElement传入ParametricConstraintEdit对象的Element的话,经测试是不行的,但是传入Corridor对象的话可以删除廊道,这时候可以把Corridor中的ParametricConstraint都删除掉,然后重新新建就可以。
2.ORD的Edit SDK现在只支持创建,还不支持修改,经查看源代码ParametricConstraint的删除过程很复杂,不光要删除ParametricConstraint对象还要删除参数约束和路廊之间的关系。并且这一块没有单独接口,所以删除的话建议用方法1。
3.廊道计算(Process Corridor)没有相关接口,下面的示例中的语句“con.PersistTransients();”,其实就是在做重新计算的功能了。
public static void TestCorridor (string unparsed)
{
ConsensusConnectionEdit con = ConsensusConnectionEdit.GetActive();
if (con == null)
return;
}
con.StartTransientMode();
GeometricModel gm = con.GetActiveGeometricModel();
if (gm == null)
foreach(Corridor cor in gm.Corridors)
SelectionSetManager.EmptyAll();
SelectionSetManager.AddElement(cor.Element, gm.DgnModel);
Bentley.MstnPlatformNET.Session.Instance.Keyin("delete element");
con.PersistTransients();
1、首先,问下您为什么有删除参数约束的需求,参数约束如果用程序生成的话,在生成时保证其正确的话,没有必要删除啊!
回答:由于没有修改的接口,批量修改的需求,只能批量删除,然后重新创建。
2、但是传入Corridor对象的话可以删除廊道,这时候可以把Corridor中的ParametricConstraint都删除掉,然后重新新建就可以。
回答:廊道里可能还有点控制等其他信息。如果删除廊道,重新创建廊道,过于繁琐。我寻找其他途径吧。