前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于PipelineTool 1.0.2.0 beta版的有关说明

关于PipelineTool 1.0.2.0 beta版的有关说明

作者头像
天堂向左
发布2022-12-01 15:49:20
2460
发布2022-12-01 15:49:20
举报
文章被收录于专栏:天堂向左程序员向右

1

新功能介绍

Introduction to new functions

1.0.2.0版本主要有以下修改内容,本篇主要针对ATTA自动调序功能的实现方法和bug问题修复进行介绍。

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

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

视频演示

2

代码讲解

Code

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。

代码语言:javascript
复制
//命令行显示
string commandStr = "REORDER " + itce + " AFTER " + itnext;
Command comm1 = Command.CreateCommand(commandStr);
bool rel = comm1.Run();

3.3 原判断中的bug

原来的算法中(有兴趣的话可以参看文章六、七),缺少了判断管子流向与base向量是否方向一致的判断(默认管子流向和base一致,但是其实并不是每种场景都一致,参见最后的手稿),因为校验向量V方向就是管子的流向方向,所以直接判断V和base是否方向一致就可以了。

代码语言:javascript
复制
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的判断

代码片段:

代码语言:javascript
复制
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 = "正确";
}

研究bug时的手稿

3

最新版下载地址

Download

点击阅读原文去博客获取下载地址。

4

什么是Naki.Pipeline

What is Naki.Pipeline

Pipeline 是一个PDMS插件,实现了些简单的批处理功能,目前主要包括:出材料、DOTD设置、目录树顺序检查、焊口自动创建4个子模块功能。该项目的诞生是一个偶然,我做PDMS二次开发的初衷是为了做Naki.CI编码工具,但是因为之前没有接触过PDMS开发,所以打算先做一个helloworld练练手,这个helloworld后来一步一步演化成了今天的Pipeline。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 天堂向左程序员向右 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档