中国汽车工程师之家--聚集了汽车行业80%专业人士 

论坛口号:知无不言,言无不尽!QQ:542334618 

本站手机访问:直接在浏览器中输入本站域名即可 

  • 1175查看
  • 1回复

选中CATIA树节点提取数据

[复制链接]

  • TA的每日心情
    奋斗
    20-7-2015 20:39
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 8-3-2020 18:40:04 | 显示全部楼层 |阅读模式

    汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


            本论坛咋没有插件开发专区呢,我只能在这里找个机会和大家分享快乐了【偷笑】
            快乐都是建立在痛苦之上的,我为什么痛苦呢?因为我一个改款车就改几十个件,但是很多都不在一个焊接层级,理所当然不在一个文件夹下,但是我需要将数据发给他人,我不会发个整车给别人呢,别人找也很费劲呢,再说得尽量保密呢;
            痛苦就是——N多次的,经过无数个文件夹找数据【难受】
            于是IDEA来了,我是否可以通过选择CATIA上面的零部件【直观啊】,点击个按钮,然后这些数据就给我打包好了。——答案是Soeasy!
            下面操作:

    Sub CATMain()
        Rem 获取CATIA件号名称
        Dim Doc1 As Object
        Set Doc1 = CATIA.ActiveDocument
        Dim Selection1
        Set Selection1 = Doc1.Selection
        Dim PartNB()
        Dim m1
        m1 = 0
        If Selection1.Count > 0 And TypeName(Doc1) = "ProductDocument" Then
            For i = 1 To Selection1.Count
            Set product1 = Selection1.Item(i).Value
            If product1.PartNumber <> "" Then
                
                Dim RePart As Boolean
                RePart = False
                If m1 <> 0 Then
                For k = 0 To m1 - 1
                    If PartNB(k) = product1.PartNumber Then
                        RePart = True
                    End If
                Next
                End If
                Rem 如果不是重复文档才复制
                If RePart = False Then
                    ReDim Preserve PartNB(m1)
                    PartNB(m1) = product1.PartNumber
                    m1 = m1 + 1
                End If
            End If
            Next
            For Each Doc In CATIA.Documents
                If TypeName(Doc) = "ProductDocument" Or TypeName(Doc) = "PartDocument" Then
                    For j = 0 To m1 - 1
                    If Doc.Product.PartNumber = PartNB(j) Then
                        Rem 拷贝这个Doc
                        Copy1 Doc
                    End If
                    Next
                End If
            Next
        ElseIf TypeName(Doc1) = "PartDocument" Then
            ReDim Preserve PartNB(0)
            PartNB(0) = Doc1.Product.PartNumber
            Rem 拷贝单件过去
            Copy1 Doc1
        End If
        MsgBox "执行完毕!"
    End Sub
    Sub Copy1(Doc)
        Dim WshShell As Object, a As String
        Set WshShell = CreateObject("WScript.Shell")
        FileCopy Doc.Path & "\" & Doc.Name, WshShell.SpecialFolders("Desktop") & "\temp\" & Doc.Name
    End Sub

    以上代码思路如下:(代码是啥就不解释了吧,CATIA宏脚本代码)
    1、获取当前打开的CATIA文档,如果是产品product或者零件part就干吧,其余的就结束战斗;
    2、选中你要发送的文件,仅限于以上两种格式哦~~;
    3、选中的树节点一定要加载了的,选中后复制一下,百分之大多数的都加载了,没加载的,出了错就错了吧;但是本人严重广告一下,本人有解决CATIA_V5掉链接和装配错误的程序,你点一下就行,私聊;
    4、你的桌面得有一个temp文件夹,其实他是啥随你的定,不要纠结,不喜欢的话代码也需要做相应修改,爱啥啥~~~
    5、单件窗口仅发送该单件Part
    注意:代码执行时现将选中的partnumber全部记下形成数组,然后将CATIA所有打开的文档遍历一遍,每一个都匹配下这个数组,匹配上了就复制该文件到temp文件夹下,所以为了速度,你能少开点数据会快些;
    Certainly,代码非最优,如果感兴趣可以优化优化跟帖与下方。比如,找到数组一个就从数组剔除一个,数组元素找完就结束战斗,高手再给加点料——万分感谢,哪个大神把这个编成C++的DLL更好,希望源码留下。
    第二个SUB里面   WshShell.SpecialFolders("Desktop")  这个可是个神兵器,它等效于   "C:\Users\  任意用户 \Desktop
    干货,拿去吧~~~(阿门、阿弥陀佛)

    快速发帖

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

    GMT+8, 23-12-2024 06:09 , Processed in 0.265923 second(s), 27 queries .

    Powered by Discuz! X3.5

    © 2001-2013 Comsenz Inc.