制造业参数化设计网

快捷导航
查看: 12947|回复: 12

[Inventor] 在Inventor中使用ILogic装配生成新文件名后再驱动规则的插件

[复制链接]

3

主题

24

帖子

155

积分

版主

Rank: 7Rank: 7Rank: 7

积分
155
发表于 2017-3-13 21:43:41 | 显示全部楼层 |阅读模式
本帖最后由 走马观花 于 2017-3-13 22:03 编辑

当装配图通过iLogic装配插入零部件时,插入的零部件都会被赋予一个后缀形成一个新的文件名,那么原始文件中的iLogic如果包含了文件名的话修改文件名后的新零件显然就不能继续使用的原来的ILogic了,这个插件的作用主要就是去除新的后缀还原成原来的文件名,那么这个时候就可以用iLogic了。
这个插件写的比较简单,没有考虑一些其他因素,容易出错,现在我把测试文件和代码有公布出来,供参考

原始文件

原始文件
图一为原始文件

装配后的结构树

装配后的结构树

图二为使用iLogic后的结构树


新生成的文件

新生成的文件

图三为新生成后的文件

使用插件生成后的效果

使用插件生成后的效果

图四是使用插件后的Inventor结构树
Inventor版本2015   ,软件编写用的VS2012  ,语言C#。
当然也还有另外一个思路,比如写ILogic不带文件名,全部使用结构树是ID来代替也是可行的,
插件.rar (5.52 KB, 下载次数: 24)

改ilogic名称插件源码.rar

59.31 KB, 下载次数: 34

源码

测试模型.rar

226.97 KB, 下载次数: 21

测试模型

回复

使用道具 举报

1345

主题

3155

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11215
发表于 2017-3-13 21:50:11 | 显示全部楼层
这个是新的改进版了
设计也需要变革了
回复 支持 反对

使用道具 举报

3

主题

24

帖子

155

积分

版主

Rank: 7Rank: 7Rank: 7

积分
155
 楼主| 发表于 2017-3-13 21:54:01 | 显示全部楼层
conion 发表于 2017-3-13 21:50
这个是新的改进版了

还是原来那个没有改变
回复 支持 反对

使用道具 举报

1345

主题

3155

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11215
发表于 2017-3-13 21:58:21 | 显示全部楼层
设计也需要变革了
回复 支持 反对

使用道具 举报

3

主题

24

帖子

155

积分

版主

Rank: 7Rank: 7Rank: 7

积分
155
 楼主| 发表于 2017-3-13 22:04:36 | 显示全部楼层
conion 发表于 2017-3-13 21:58
http://www.mpdwang.com/bbs/forum.php?mod=viewthread&tid=3372#lastpost这个帖子说使用出错了

附件上传错误,已经改好了。
回复 支持 反对

使用道具 举报

14

主题

77

帖子

479

积分

中级会员

Rank: 3Rank: 3

积分
479
发表于 2017-3-14 08:37:22 | 显示全部楼层
感谢!我用测试模型试了一下,是可用的。但我自己的模型会提示错误,无法使用。。
下载了源码,可是电脑中没有可识别的软件。能告诉我如何察看源码吗?是什么思路去掉了后缀?
回复 支持 反对

使用道具 举报

14

主题

77

帖子

479

积分

中级会员

Rank: 3Rank: 3

积分
479
发表于 2017-3-14 08:55:37 | 显示全部楼层
走马观花 发表于 2017-3-13 22:04
附件上传错误,已经改好了。

我用一些零部件测试了下,是可用的。谢谢!貌似规则就是后缀需要以·-两位以上数字·为开头是吧。

另外自己的模型不可用的原因也知道了,貌似是不能有被抑制的部件。
这样难道说你们的模型最终都没有抑制,还真是令我惊讶。因为我大量依靠iLogic的Component.IsActive("Part:1")来实现参数化。不知你们是如何控制部品的选择的。

感谢软件!
回复 支持 反对

使用道具 举报

1

主题

15

帖子

51

积分

版主

Rank: 7Rank: 7Rank: 7

积分
51
发表于 2017-3-14 19:54:03 | 显示全部楼层
谢谢分享,赞一个!
回复 支持 反对

使用道具 举报

3

主题

24

帖子

155

积分

版主

Rank: 7Rank: 7Rank: 7

积分
155
 楼主| 发表于 2017-3-15 16:02:55 | 显示全部楼层
yyxz007 发表于 2017-3-14 08:55
我用一些零部件测试了下,是可用的。谢谢!貌似规则就是后缀需要以·-两位以上数字·为开头是吧。

另外 ...

这个程序很简单没有做抑制检测判断,用Ilogic装配插入的零件会自动生成后缀“-01”,我做的工作就是检测文件名最后一个"-XX:X" 形式,然后删除"-xx" ,这样就还原成原来的形式了。你不能直接拿来用,看你的情况需要自己加判断是否抑制,还有如果一些文件名命名本身就是"-xx"的形式那么还需要做进一步判断的
回复 支持 反对

使用道具 举报

3

主题

24

帖子

155

积分

版主

Rank: 7Rank: 7Rank: 7

积分
155
 楼主| 发表于 2017-3-15 16:05:01 | 显示全部楼层
yyxz007 发表于 2017-3-14 08:37
感谢!我用测试模型试了一下,是可用的。但我自己的模型会提示错误,无法使用。。
下载了源码,可是电脑中 ...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Inventor;

namespace 改装配名称
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Inventor.Application Iapp = (Inventor.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application");
            _Document Actdoc = Iapp.ActiveEditObject;            
            AssemblyDocument assDoc = Actdoc as AssemblyDocument;
            if (assDoc == null) return;
            
            //TransactionManager tranM = Iapp.TransactionManager;
            //TransientGeometry oTG = Iapp.TransientGeometry;
            //IEnumerable<ComponentOccurrence> itqy= assDoc.ComponentDefinition.Occurrences.Cast<ComponentOccurrence>();        
            //var p=  from c in itqy where c.ReferencedDocumentDescriptor.FullDocumentName.Contains("零件2") select c;
            
            foreach (ComponentOccurrence q in assDoc.ComponentDefinition.Occurrences)
            {
                Document ddoc = q.Definition.Document;
                string sd=q.Name;
                int start = sd.LastIndexOf("-");
                if (start == -1) continue;
                try
                {
                    int integer = Convert.ToInt32(sd.Substring(start + 1, 2));
                }
                catch { continue; }
                int end = sd.LastIndexOf(":");
                if (end == -1)
                {
                    q.Name = sd.Substring(0, start);
                    continue;
                }
                q.Name = sd.Substring(0, start) + sd.Substring(end, sd.Length-end);               
            }
        }
    }
}
回复 支持 反对

使用道具 举报

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

本版积分规则

联系我们
Email:1691470123@qq.com
QQ群:Inventor(290911645)、Solidworks(324451806)、Creo/ProE(451821425)、NX/UG(471430551)、Catia(497740844)

MPD制造业参数化设计网是一个提升设计效率方法论的交流平台,是一个搭建可重用资源库的共享平台,我们期待您的加入。

Powered by 制造业参数化设计网 © 2001-2013 Comsenz Inc.

Archiver|手机版|小黑屋|制造业参数化设计网 ( 湘ICP备16011161号 )

GMT+8, 2021-9-23 06:56 , Processed in 0.115246 second(s), 28 queries .

快速回复 返回顶部 返回列表