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

相关文章

使用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的性质有:数据自动进行排序且数据唯一,是一种集合元素,允许进行数学上的集合相

C# 如何同时Ping多个IP地址

在C#中,如果需要同时ping多个IP地址,可以采用多线程或异步编程的方式来实现,以便可以同时进行多个ping操作。以下是两种常用的方法: 方法一:使用多线程(Task 或 Thread) 使用Task是更现代和推荐的方式,因为它内置了更好的线程管理和异常处理机制。以下是一个使用Task的示例,展示如何同时ping多个IP地址: using System; using System.Co

关联规则(一)Apriori算法

此篇文章转自 http://blog.sina.com.cn/s/blog_6a17628d0100v83b.html 个人觉得比课本上讲的更通俗易懂! 1.  挖掘关联规则 1.1   什么是关联规则 一言蔽之,关联规则是形如X→Y的蕴涵式,表示通过X可以推导“得到”Y,其中X和Y分别称为关联规则的先导(antecedent或left-hand-side, LHS)和后

多个vue项目部署到nginx服务器

文章目录 需求一、项目打包1.vue.config.js2.request.js文件3.打包 二、nginx配置 需求 同一个域名安装多个vue项目。 比如:域名为 https://domain.com + 后缀。那么通过不同的后缀就能去访问不同的项目地址。 https://domain.com,不加任何后缀,访问官网。 https://domain.com/admin

在幼儿园管理系统中,会议管理申请会议修改模块:多个与会人员的回显和修改(编辑)!

在幼儿园管理系统中,会议管理>申请会议>修改模块:多个与会人员的回显(复选框)和修改(编辑)!在处理与会人员的回显(复选框)和修改(编辑)出点问题。无法正确的回显(复选框)出来与会人员和修改(编辑)。 最后终于解决:修改(编辑)的思路是:先把原来的该会议记录下的所有与会人员删除,在添加,即可实现修改(编辑)功能。回显(复选框)的思路是:设置一个flag,判断一下是否要选中(复选框),即可实现

CAD 多个页面在一个任务栏图标设置

命令行输入快捷键op或: 下图打对号,确定即可。

Jasperreports+jaspersoft studio 实现单个或多个jrxml(jasper)文件生成一个pdf文件,并利用Servlet发送该pdf文件到浏览器中展示

Jasperreports+jaspersoft studio 实现单个或多个jrxml(jasper)文件生成一个pdf文件,并利用Servlet发送该pdf文件到浏览器中展示; 代码如下: Demo07.jrxml <?xml version="1.0" encoding="UTF-8"?><!-- Created with Jaspersoft Studio version 6.6.