PC-DMIS 第三篇 使用 Python 二次开发(2023.2版)

最近更新于 2025-02-05 11:40

前言

2025.2.2
年后这几天老是在下雨,也没出去玩,闲来无事就在写 PC-DMIS 数据导出工具,截至今天晚上,已经有一个雏形了,目前简单测试了,没看出大问题,源码和初版可执行文件已发布到:https://github.com/IYATT-yx/pcdmis-export-data
初版是基于 PC-DMIS CAD++ 2019 R2 开发测试的,但是后面从某个版本开始读取形位公差的方法就变了,我大致翻了一下各版本的对象库文档,发现从 2022.2 开始,有一个新的对象出现了:ToleranceCommand,看了一下介绍,应该就是和形位公差操作有关的。
我上班的公司的三坐标用的 2018 和 2023 两个版本,要保证都能适用,还需要继续研究新版的怎么读取形位公差,明天白天就以 2023.2 版开始研究。


2025.2.3
一天过去了,现在快十点了,PC-DMIS 数据导出工具表面上刚才已经适配了 2023.2,我测试用的那个 PC-DMIS 测量程序读取出来是一致的了。明天就又要上班了,还要找时间多用一些测量程序验证,再更新到 GitHub 上。

软件版本

PC-DMIS Premium 2023.2

PC-DMIS 2023.2 对象库文档

https://docs.hexagonmi.com/pcdmis/2023.2/fr/helpcenter/mergedProjects/automationobjects/webframe.html#Introduction.html

导出常量

参考:https://blog.iyatt.com/?p=18363#%E4%BD%BF%E7%94%A8_COM_%E7%BB%84%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%B8%B8%E9%87%8F
导出后模块我会命名为 pcdlrnconst

读取形位公差

读取形位公差这块和 2019 R2 比起来变化很大,在 2019 R2 的时候没有封装对象,要自己用 GetText 或 GetFieldText 去读取字段,在 2023.2 里封装了 ToleranceCommand 对象,同时以前读取字段的方式失效了,但可以通过 ToleranceCommand 的属性和方法获取到值。

下面的例子是参考文档里的 BASIC 案例代码,用 Python 重写的

import win32com.client as wc

app = wc.Dispatch('PCDLRN.Application')
part = app.ActivePartProgram
cmds = part.Commands

precision = 4

for i in range(cmds.Count):
    cmd = cmds[i]
    if cmd.IsToleranceCommand:
        tolCmd = cmd.ToleranceCommand
        print(f'命令号:{i},命令名:{tolCmd.ID},特征数:{tolCmd.FeatureCount},类型:{tolCmd.gdtSymbol}, 尺寸组合计数:{tolCmd.sizeCountCombined},区段数:{tolCmd.SegmentCount},基准尺寸计数:{tolCmd.datumSizeCount}')

        # A、B、C 只是为了区分三种类型的数值
        for j in range(1, tolCmd.sizeCountCombined + 1):
            print(f'\tA\t序号:{j} 特征:{tolCmd.sizeText(j)} 轴:{tolCmd.SizeAxis(j)} 单位:{tolCmd.ReportUnits} 标称值:{tolCmd.sizeNominal(j)} 上公差:{tolCmd.sizePlusTol(j)} 下公差:{tolCmd.sizeMinusTol(j)} 测量值:{tolCmd.sizeMeasured(j)} 偏差值:{tolCmd.sizeDeviation(j)} 超差值:{tolCmd.sizeOutOfTol(j)}')

        for k in range(1, tolCmd.SegmentCount + 1):
            for j in range(1, tolCmd.datumSizeCount + 1):
                print(f'\tB\t序号:{j} 特征:{tolCmd.datumFosId(j)} 标称值:{tolCmd.datumFosNominal(j)} 上公差:{tolCmd.datumFosPluusTol(j)} 下公差:{tolCmd.datumFosMinusTol(j)} 测量值:{tolCmd.datumFosMeasured(j)} 偏差值:{tolCmd.datumFosDeviation(j)} 超差值:{tolCmd.datumFosOutTol}')

            for j in range(1, tolCmd.FeatureCount + 1):
                print(f'\tC\t序号:{j} 特征:{tolCmd.FeatureID(j)} 轴:{tolCmd.SegmentAxis(j)} 单位:{tolCmd.ReportUnits} 标称值:{tolCmd.segmentDimNominal(k, j)} 上公差:{tolCmd.segmentDimPlusTol(k, j)} 下公差:{tolCmd.segmentDimMinusTol(k, j)} 测量值:{tolCmd.segmentDimMeasured(k, j)} 偏差值:{tolCmd.segmentDimDeviation(k, j)} 超差值:{tolCmd.segmentDimOutTol(k, j)}')

file

PC-DMIS 第三篇 使用 Python 二次开发(2023.2版)
Scroll to top