找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11882|回复: 5

[求助] 二次开发获取零件外形尺寸的问题

[复制链接]

3

主题

35

回帖

0

威望

实习生

积分
45
发表于 2020-12-30 17:52 | 显示全部楼层 |阅读模式
本帖最后由 daiq0023 于 2020-12-30 17:53 编辑

最近自己在研究Creo的二次开发,做一个计算零件外形尺寸的工具,遇到一个问题,求大神指导。

在用ProSolidOutlineCompute函数获取零件外形尺寸时,会把所有的曲面等一些不需要的内容也会计算进去,我想只计算实体的外形尺寸,有什么办法解决?

我使用了过滤器,但是好像只过滤掉了一些基准之类的特征。

我知道可以直接使用参数计算默认坐标系的长宽高,但是我想用二次开发做一个可以自定义坐标系的外形尺寸工具。

4

主题

69

回帖

3

威望

助工

积分
126
发表于 2021-1-3 16:54 | 显示全部楼层
组件没办法,零件可以实体边界投影
//获取Solid的轮廓尺寸,投影实体曲面
function EvalSolidOutline(solid){
        var item = Selector.SelOneModelItem("sldface,datum,csys");//选择一个实体曲面,平面或者坐标系的几何项目
        var transform;
        try {
      transform = item.CoordSys;//获取几何项目的转换矩阵
    } catch (error) {
          transform = solid.ListItems(ModelItemType.ITEM_COORD_SYS).Item(0).CoordSys;//未选择或者曲面不具有转换矩阵时则获取默认坐标系的转换矩阵
    }
        session.CurrentWindow.Repaint();
       
        //获取相应的坐标轴
        var vx = transform.GetXAxis();
        var vy = transform.GetYAxis();
        var vz = transform.GetZAxis();
        transform.Invert();//将矩阵转置
       
        //获取模型质心的转换坐标
        var xMax = transform.TransformPoint( solid.        GetMassProperty(null).GravityCenter).Item(0);
        var xMin = transform.TransformPoint( solid.        GetMassProperty(null).GravityCenter).Item(0);
        var yMax = transform.TransformPoint( solid.        GetMassProperty(null).GravityCenter).Item(1);
        var yMin = transform.TransformPoint( solid.        GetMassProperty(null).GravityCenter).Item(1);
        var zMax = transform.TransformPoint( solid.        GetMassProperty(null).GravityCenter).Item(2);
        var zMin = transform.TransformPoint( solid.        GetMassProperty(null).GravityCenter).Item(2);
       
        var surfaces = solid.ListItems(ModelItemType.ITEM_SURFACE);//列举模型中的所有实体曲面
        for (var i = 0; i < surfaces.Count; i++) {
                var surf = surfaces.Item(i);
               
                //曲面在x方向的投影极限点
                var max = transform.TransformPoint(surf.EvalMaximum(vx)).Item(0);
                var min = transform.TransformPoint(surf.EvalMinimum(vx)).Item(0);
                if (max > xMax) xMax = max;
                if (min < xMin) xMin = min;
               
                //曲面在y方向的投影极限点
                max = transform.TransformPoint(surf.EvalMaximum(vy)).Item(1);
                min = transform.TransformPoint(surf.EvalMinimum(vy)).Item(1);
                if (max > yMax) yMax = max;
                if (min < yMin) yMin = min;
               
                //曲面在y方向的投影极限点
                max = transform.TransformPoint(surf.EvalMaximum(vz)).Item(2);
                min = transform.TransformPoint(surf.EvalMinimum(vz)).Item(2);
                if (max > zMax) zMax = max;
                if (min < zMin) zMin = min;
        }
       
        //计算最大极限点并用arry数组排序
        var arry = new Array();
        arry.push(Math.abs((xMax - xMin).toFixed(2)));
    arry.push(Math.abs((yMax - yMin).toFixed(2)));
    arry.push(Math.abs((zMax - zMin).toFixed(2)));
    arry.sort();
       
        return arry[2] + "x" + arry[1] + "x" + arry[0];
}

评分

参与人数 1威望 +1 收起 理由
野火 + 1 热心助人

查看全部评分

回复

使用道具 举报

3

主题

35

回帖

0

威望

实习生

积分
45
 楼主| 发表于 2021-1-5 15:49 | 显示全部楼层
感悟心声 发表于 2021-1-3 16:54
组件没办法,零件可以实体边界投影
//获取Solid的轮廓尺寸,投影实体曲面
function EvalSolidOutline(soli ...

感谢,我再研究研究。
回复

使用道具 举报

2

主题

53

回帖

0

威望

助工

积分
63
发表于 2022-10-9 22:55 | 显示全部楼层
感悟心声 发表于 2021-1-3 16:54
组件没办法,零件可以实体边界投影
//获取Solid的轮廓尺寸,投影实体曲面
function EvalSolidOutline(soli ...

请问这组代码如何使用
回复

使用道具 举报

0

主题

2

回帖

0

威望

实习生

积分
2
发表于 2024-9-10 11:20 | 显示全部楼层
完整的代码方便共享一下吗
回复

使用道具 举报

4

主题

221

回帖

1

威望

工程师

积分
281
发表于 2024-10-10 18:07 | 显示全部楼层
这个方式,复杂模型,面多的时候太慢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站为非营利性站点,部分资源为网友搜集或发布,仅供学习和研究使用,如用于商业用途,请购买正版。站内所发布的资源,如有侵犯你的权益,请发邮件联系我们,本站将立即改正或删除。

手机版|小黑屋|野火论坛(©2007~2024) ( 苏ICP备11036728号-2 )苏公网安备 32039102000103号|站长QQ28016688

GMT+8, 2024-11-22 13:29 , Processed in 0.146743 second(s), 22 queries .

快速回复 返回顶部 返回列表