Windchill 开发 判断图纸关联类型

本文使用 windchill 11.0 M030 开发环境。

在Windchill系统中,图纸和部件的关联类型,最常见的有 所有者、图像 等,例如:

每种关联类型之间有什么区别呢?先看PTC官方帮助文档的解释。

当前,Windchill 仍支持部件及其可交付结果之间的被动链接。现在,也可以将之称为“内容关联”。然而,根据关联执行以下一项操作还是多项操作,从前的活动链接现在被分为几种功能类型。
• 驱动部件使用关系链接 (结构链接) 的创建,它们用于创建部件的产品结构。
• 将属性传递给部件 (属性链接)。
• 提供结构中给定部件的 CAD 模型表示 (表示链接)。

上面只截取了重要的一部分,感兴趣的小伙伴可以通过帮助菜单查找本地帮助文档阅读全文。下面我根据自己的使用经验和理解,用大白话讲一遍,不一定全面,欢迎留言补充。
关联类型首先分为两大类:活动链接 和 被动链接。
活动链接包括 所有者、图像 等,当关联关系产生后,图纸和部件就要当一个整体看,升高图纸小版本,会自动升高部件小版本。其中用到最多的就是所有者关联,可以通过三维图之间的结构来驱动部件生成BOM,可以传递属性,通常是 solidworks、creo 等三维设计软件出的三维图,才使用所有者关联。
被动链接也就是内容关联,逻辑相对简单,通过内容关联的图纸,就相当于一个说明文档,升高图纸小版本不影响部件,部件自动关联图纸当前的最新小版本。


那么问题来了:部件与EPM对象首次产生关联时,默认使用所有者关联,这符合PTC推荐的设计规范;但是对于我们研发体系不怎么规范的公司而言,这不太符合业务场景。部件首次关联的图纸大部分是 dwg图,存在大量所有者关联将被 dwg图占用,可能影响后面模型驱动设计。且 dwg图变更频繁,会导致部件版本过快升高。

能否通过修改配置,使编辑关联时“关联类型”下拉框的默认值改成“内容”?
这个问题还在探索中。

基于上述业务场景,提出如下开发需求:在适当位置触发校验,判断图纸关联类型,如果dwg图纸占用了所有者关联,则警告用户。

为了实现这个目的,我先研究了部件和EPM对象之间的Link对象及数据库结构。发现:活动链接使用 EPMBuildRule 和 EPMBuildHistory 表存储;被动链接使用 EPMDescribeLink 表存储。

开发思路就是,获得 WTPart 和 EPMDocument 对象后,去查询 EPMDescribeLink 表,如果存在Link对象,就可以确定他们是内容关联。

顺着这个思路,只需要在代码中用高级查询,去读取数据库就可以。实现过程中,我又发现 PTC提供了一个工具类,可以很方便的查询 Link 关系两端的对象。这样实现起来就更简洁了。

有更好的判方式,或PTC提供了接口来判断,欢迎留言讨论。

工具使用如下:

import org.apache.log4j.Logger;
import wt.epm.EPMDocument;
import wt.epm.structure.EPMDescribeLink;
import wt.fc.PersistenceHelper;
import wt.fc.QueryResult;
import wt.part.WTPart;
import wt.util.WTException;
/*** @author 彭秉浪 PengBingLang@dingtalk.com*/
public class TestUtil {public static final Logger logger = Logger.getLogger(TestUtil.class.getName());/*** 校验:部件与dwg图纸只能使用“内容”关联* @return 校验是否通过*/private static boolean checkEPMLinkType(WTPart part, EPMDocument epm) {if (!epm.getNumber().toUpperCase().endsWith(".DWG")) {return true;}try {// 查询epm对象通过“内容”类型关联的所有部件QueryResult qr = PersistenceHelper.manager.navigate(epm, EPMDescribeLink.DESCRIBES_ROLE, EPMDescribeLink.class, true);// 参数含义:roleA, roleB角色, link.class, true返回roleB对象/false返回link对象if (qr == null || qr.size() == 0) {return true;}while (qr.hasMoreElements()) {WTPart part1 = (WTPart) qr.nextElement();logger.debug(part1.getNumber());if (part1.getNumber().equals(part.getNumber())) {return true;}}} catch (WTException e) {e.printStackTrace();}return false;}
}

Windchill 开发 判断图纸关联类型相关推荐

  1. C#进行Visio二次开发之判断图纸是否有设备

    判断Visio图纸上是否图纸有设备(存在图元), 有两种方法,一种是通过Window对象的SelectAll方法,在判断选择的集合是否不为空即可,如下:         /// <summary ...

  2. NX二次开发-读取图纸表格注释与部件属性关联的名字

    NX二次开发-读取图纸表格注释与部件属性关联的名字 NX11+VS2013#include <uf.h> #include <uf_ui.h> #include <uf_ ...

  3. Windchill 开发 根据实例对象查询关联的ECN

    Windchill 开发 根据实例对象查询关联的ECN 开发环境:windchill 11.0 M030 在Windchill二次开发时,通过ptc官方提供的api,我们可以很容易的获取ECN对象的 ...

  4. c语言蜂窝编程问题,【iOS开发】判断蜂窝网络类型及系统bug

    判断蜂窝网络类型 最近项目需求要判断当前蜂窝网络类型,查了一些资料,进行一个总结. 首先导入框架 #import 主要使用currentRadioAccessTechnology属性进行判断 CTTe ...

  5. windchill开发笔记

    windchill开发中用到的各种API及知识点 1.关于树结构的节点展示问题: 在xml树结构的构建中,通常使用如下代码来进行树节点的展示 //节点展示级别(full,one,none),可以写St ...

  6. windchill开发之创建对象

    来源:原创 作者:云淡天晴 时间:2008-10-21  在windchill开发的过程中,整个操作围绕的都是增删改查,今天我们将介绍的是增加,此次以part的创建为例,对于删除,修改都一几乎一样的代 ...

  7. js判断客户浏览器类型,版本

    在JS中判断浏览器的 类型,估计是每个编辑过页面的开发人员都遇到过的问题.在众多的浏览器产品中,IE.Firefox.Opera.Safari........众多品牌 却标准不一,因此时常需要根据不同 ...

  8. .net中js判断浏览器的类型和版本

    你知道世界上有多少种浏览器吗?除了我们熟知的IE, Firefox, Opera, Safari四大浏览器之外,世界上还有近百种浏览器. 几天前,浏览器家族有刚诞生了一位小王子,就是Google推出的 ...

  9. 如何判断任意文件类型

    这里写目录标题 如何判断任意文件类型 1问题 2可用的方案 2.1 使用HEX编辑工具 EmEditor Ultraedit WinHex DiskGenius 010Editor notepad++ ...

最新文章

  1. Android通过ShareSDK实现新浪微博分享
  2. JavaScript中使用console调试程序的坑
  3. VS2005 VSTO 项目创建
  4. 利用BFS和DFS解决 LeetCode 130: Surrounded Regions
  5. 【设计模式】重载和重写
  6. tomcat应用服务器有哪些,2014年最流行的应用服务器排行榜 Tomcat第一
  7. hping3安装及使用
  8. 局域网计算机文件共享推理,行测技巧:类比推理的“第二规律”
  9. 二进制像素绘制程序 scratch编程三级
  10. 历史经验之QT在WIN32下编译环境配置步骤
  11. 在网页博客文章中输入上下角标(指次幂、下角标)、分数及特殊字符
  12. MSDOS(MBR)、GPT、BIOS、UEFI
  13. Java 开发实例(第3篇),绘制迷宫1 生成迷宫地图
  14. 计算机网络白龙飞,成电等你来 | 你的辅导员已上线,男神辅导员闪亮登场(一)...
  15. uva 437,巴比伦塔
  16. QML改变TextInput或者其它输入框光标颜色
  17. 从零开始做自媒体短视频,新手一样可以操作!每月稳定5000多
  18. 在 Kubernetes 上运行 GitHub Actions Self-hosted Runner
  19. 通过手机控制蓝牙模块的实例
  20. 程序员.恋曲.人生(3)

热门文章

  1. c# 控件多屏显示全屏功能
  2. v4跨界战显示服务器维护中,V4跨界战手游预约-V4跨界战游戏首发预约_第一手游网...
  3. 从股市狂跌谈集体无意识
  4. 从0开发游戏引擎之游戏引擎中2D序列帧动画控制器的实现
  5. 如何在 Word 2010 中给公式自动编号?
  6. Centos7镜像下载教程(2023年,4月)
  7. python bytearray拼接_python bytearray() 函数
  8. 淘宝/天猫电商API接口详情
  9. linux - vi / vim 编辑器
  10. CDR插件开发之Addon插件002 - 用1分钟编写一个可双击运行的EXE程序