PDMS二次开发(二十)——关于1.0.2.0版本升级内容的说明

1.更新内容介绍

  1. 新增了ATTA材料表;
  2. 新增了ATTA自动调整目录树顺序功能;
  3. 修复了ATTA顺序算法的一处bug,该bug导致少数元件原本处于正确顺序位置却被计算为越过上游元件(例如图2中的TEST3);
  4. PDMS12.0.sp6增加了ATTA自动调整目录树顺序功能,版本升级到0.9.5.0。

目前ATTA自动调整目录树顺序功能,是beta版,征集有兴趣的同学一起来测试一下,发现什么问题可以反馈给我。

2.测试效果演示

专门导出ATTA材料清单
在这里插入图片描述
图1:增加了ATTA材料表功能

调整ATTA目录树顺序功能可以自动将顺序检查有错误的ATTA元件的目录树位置通过reorder命令移动到正确顺序位置,注意这里移动的是目录树顺序,不是移动元件,进行元件模型处理的时候有一个原则是尽量少移动模型。

在这里插入图片描述
图2:增加了自动调整ATTA目录树顺序功能

ATTA 自动调整顺序功能演示

图3:演示效果视频

3.代码说明

3.1 算法(主方法F)

//步骤:
//1.写一个方法F,判断错误列表,找出所有顺序不正确的ATTA所在的BRANCH
//2.遍历这个BRANCH将所有ATTA放进列表A
//3.将有问题的ATTA放进列表B
//4.根据B的错误类型,决定是将A中的哪两个ATTA执行一次reorder命令
//5.执行完reorder后,再执行一次check,得到新的A和B
//6.将A和B继续放进迭代的方法F里计算,直到B列表为空

3.2 Reorder命令在.Net开发方式中的用法

组装reorder命令并执行,itce是当前ATTA元件sequ,itnext是下一个ATTA元件的sequ。

//命令行显示
string commandStr = "REORDER " + itce + " AFTER " + itnext;
Command comm1 = Command.CreateCommand(commandStr);
bool rel = comm1.Run();

3.3 原判断中的bug

原来的算法中(有兴趣的话可以参看文章六、七),缺少了判断管子流向与base向量是否方向一致的判断(默认管子流向和base一致,但是其实并不是每种场景都一致,参见最后的手稿),因为校验向量V方向就是管子的流向方向,所以直接判断V和base是否方向一致就可以了。
PDMS二次开发(六)——ATTA目录树顺序检查功能实现讲解
PDMS二次开发(七)——ATTA目录树顺序检查功能BUG修复

bool dirParallelSCwithVerify = D3SlopeSCOntoBase.Parallel(D3SlopeVerify);      //SC投影向量与校验向量的平行判断
bool dirParallelSCwithBase = D3SlopeSCOntoBase.Parallel(D3SlopeBase);          //SC投影向量与Base向量的平行判断

//以上是之前的代码
/*要增加:D3SlopeBase这个向量要判断是否与membersInLineSegment所在的branch这一段流向一致 Naki 2022.6.23
判断方法是判断D3SlopeBase和D3SlopeVerify方向是否一致 */
bool dirParallelVerifywithBase = D3SlopeVerify.Parallel(D3SlopeBase);  

在判断orderFlag标志时,增加对dirParallelVerifywithBase的判断
在这里插入图片描述

代码片段:

if (dirParallelSCwithBase == true && 
    dirParallelSCwithVerify == true) //SC、Base、Verify三个向量方向一致
{
    if (LengthSCOntoBase <= LengthBase)
    {
        orderFlag = "正确";
    }
    else if (LengthSCOntoBase > LengthBase)  //当前元件与下一个元件空间有交集
    {
        //计算下一个元件的LPOS值作为下一个邻接点坐标
        //Position next_lpos = db.Next().GetPosition(DbAttributeInstance.LPOS);
        TBrItemPoint nextLPoint = new TBrItemPoint(next_lpos.X, next_lpos.Y, next_lpos.Z);
        //计算下一个元件的APOS和当前ATTA的apos距离绝对值
        double curr_SpanDistance = DistanceOfTwoPoints(nextPoint, currPoint);
        //计算下一个元件的APOS和LPOS距离绝对值
        double next_SpanDistance = DistanceOfTwoPoints(nextPoint, nextLPoint);
        double DeltaDistance = curr_SpanDistance - next_SpanDistance;

        if (DeltaDistance > 0)
        {
            orderFlag = "错误:越过下游元件";
        }
        if (DeltaDistance <= 0)
        { orderFlag = "警告:侵入下游元件"; }
    }
}
else if (dirParallelSCwithBase == false &&
         dirParallelVerifywithBase == false) //当前元件确实在下游
{
    orderFlag = "正确";
}

手稿
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiangcns

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值