Windchill:一个CATDrawing关联多个部件

2023-10-24 22:41

本文主要是介绍Windchill:一个CATDrawing关联多个部件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Windchill:一个CATDrawing关联多个部件,对每个部件关联PDF

原因:

在这里插入图片描述

​ 当一个CATDrawing关联多个部件,签名最后生产的PDF只能关联在计算属性得到的部件中;

image-20221020104753829

改进:

​ 1、在签名之后得到PDF文件之后,修改获取部件的方法,从而获取到CATDrawing下面关联的多个部件

**CATDrawing**中的/*** 通过epm获取部件, 构建 -> 绘图计算 ->* 首先获取计算关联之后在获取内容关联* 有多个部件存在的情况下可以返回多个部件** @param epm EPMDocument* @return WTPart* @throws WTException WTException*/
public static void getMorePartByEpm(EPMDocument epm, Set<WTPart> resultList) throws WTException {boolean enforce = SessionServerHelper.manager.setAccessEnforced(false);if (LOGGER.isDebugEnabled()) {LOGGER.trace("getPartByEpm -> epm is " + epm);}WTPart part;LatestConfigSpec latestConfigSpec = new LatestConfigSpec();try{//构建关联,直接获取CATDrawing中的关联部件,一般情况下会获取不到该部件part = AssociateUtilities.getActiveAssociatedPart(epm);if (LOGGER.isDebugEnabled()) {LOGGER.trace("getPartByEpm -> part post getActiveAssociatedPart: " + part);}if(part == null){// 计算关联 - 先获取参考模型,如存在参考模型,则再获取其构建部件// 通过CATDrawing来获得CATPRODUCT结尾的附件,该附件下计算关联的部件只有一个// 所以只会获一个部件EPMDocument model= DocumentHelper.queryReferenceModel(epm, latestConfigSpec);if(model!=null){part = AssociateUtilities.getActiveAssociatedPart(model);System.out.println("计算关联的为:"+part.getNumber());resultList.add(part);}// 内容关联// 有用户会在计算关联的情况下,再去关联内容关联的部件,这时得到所有内容关联的部件// 将所有部件全部加入到resultList中QueryResult queryResult = PersistenceHelper.manager.navigate(epm, EPMDescribeLink.DESCRIBES_ROLE,EPMDescribeLink.class, true);queryResult = latestConfigSpec.process(queryResult);while(queryResult.hasMoreElements()){WTPart iterated = (WTPart) queryResult.nextElement();if (iterated != null) {part = iterated;System.out.println("内容关联的为:"+part.getNumber());resultList.add(part);}}}else{resultList.add(part);}if (LOGGER.isDebugEnabled()) {LOGGER.trace("getPartByEpm -> part post calculated: " + part);}}catch (Exception e) {e.printStackTrace();throw new WTException(e.getStackTrace());} finally {SessionServerHelper.manager.setAccessEnforced(enforce);}}

2、在多个物料的情况下为多个物料关联PDF图纸,其中 filepath为系统自己定义的路径,其目的是临时存储相关部件名称的PDF图片。

 /*** 关联多个物料情况下* 给多个物料关联pdf图纸*/public static void updateMorePartContent(ContentHolder contentHolder, File file, ContentRoleType roleType) throws Exception {ApplicationData attachment = ApplicationData.newApplicationData(contentHolder);WTPart part = (WTPart) contentHolder;String name = part.getNumber().toUpperCase();name = "2D_" + name + "_已签名.pdf";//该name只限于在已签名图纸的情况下进行关联String filepath="/home/ptc/Windchill_11.0/Windchill/tmp/Tmpflod/";attachment.setFileName(name);
//        System.out.println("文件分别为:" + name);MethodContext.getContext().sendFeedback(new StatusFeedback("部件分别为:" + name));//        attachment.setFileName(file.getName());attachment.setUploadedFromPath(file.getCanonicalPath());//file.getCanonicalPath()和file.toPath()都是可以获取到文件的完整路径//        MethodContext.getContext().sendFeedback(new StatusFeedback("文件222路径为:" + file.toPath()));attachment.setRole(roleType);attachment.setFileSize(file.length());File newfile =null;MethodContext.getContext().sendFeedback(new StatusFeedback("文件名:" + file.getName()));if(name.equals(file.getName())){ContentServerHelper.service.updateContent(contentHolder, attachment, file.getCanonicalPath());PersistenceHelper.manager.refresh(contentHolder, true, true);}else{newfile = new File(filepath+name);MethodContext.getContext().sendFeedback(new StatusFeedback("文件路径为:" + newfile.getCanonicalPath()));if (!newfile.exists()) {try {newfile.createNewFile();} catch (IOException e) {e.printStackTrace();}System.out.println("文件已创建");} else {System.out.println("文件已存在");}//            Files.copy(file.toPath(),newfile.toPath());copyFileUsingStream(file,newfile);ContentServerHelper.service.updateContent(contentHolder, attachment, newfile.getCanonicalPath());PersistenceHelper.manager.refresh(contentHolder, true, true);}if (newfile != null) {CHZipUtils.deleteFile(newfile);}}/*** 关联多个物料情况下* 对pdf图纸进行复制更名和写入操作*/private static void copyFileUsingStream(File source, File dest) throws IOException {InputStream is = null;OutputStream os = null;try {is = new FileInputStream(source);os = new FileOutputStream(dest);byte[] buffer = new byte[1024];int length;while ((length = is.read(buffer)) > 0) {os.write(buffer, 0, length);}} finally {is.close();os.close();}}

这篇关于Windchill:一个CATDrawing关联多个部件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/278261

相关文章

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应