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

相关文章

Python自动化办公之合并多个Excel

《Python自动化办公之合并多个Excel》在日常的办公自动化工作中,尤其是处理大量数据时,合并多个Excel表格是一个常见且繁琐的任务,下面小编就来为大家介绍一下如何使用Python轻松实现合... 目录为什么选择 python 自动化目标使用 Python 合并多个 Excel 文件安装所需库示例代码

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

MYSQL关联关系查询方式

《MYSQL关联关系查询方式》文章详细介绍了MySQL中如何使用内连接和左外连接进行表的关联查询,并展示了如何选择列和使用别名,文章还提供了一些关于查询优化的建议,并鼓励读者参考和支持脚本之家... 目录mysql关联关系查询关联关系查询这个查询做了以下几件事MySQL自关联查询总结MYSQL关联关系查询

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

struts2中的json返回指定的多个参数

要返回指定的多个参数,就必须在struts.xml中的配置如下: <action name="goodsType_*" class="goodsTypeAction" method="{1}"> <!-- 查询商品类别信息==分页 --> <result type="json" name="goodsType_findPgae"> <!--在这一行进行指定,其中lis是一个List集合,但

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬

C++ STL关联容器Set与集合论入门

1. 简介 Set(集合)属于关联式容器,也是STL中最实用的容器,关联式容器依据特定的排序准则,自动为其元素排序。Set集合的底层使用一颗红黑树,其属于一种非线性的数据结构,每一次插入数据都会自动进行排序,注意,不是需要排序时再排序,而是每一次插入数据的时候其都会自动进行排序。因此,Set中的元素总是顺序的。 Set的性质有:数据自动进行排序且数据唯一,是一种集合元素,允许进行数学上的集合相