SolidWorks二次开发教程:深入解析文档操作与设置技巧

2024-12-16 0 314

在现代开发活动中,项目仓库的访问及其相关操作构成了各项工作的基础。这其中包含了不少需要特别注意的地方,这些问题是大家普遍关注的焦点。

项目仓库访问初体验

PM> Install-Package Du.SolidWorks -Version 0.1.1

启动项目仓库访问可能遇到困难。比如,不同仓库可能有各自的权限配置。某公司项目就设置了多层权限,一般员工只能查阅部分资料。因此,我们得事先弄清楚权限规定。另外,网络状况也会影响访问。在信号不佳的地方,比如偏远山区的临时办公地点,访问可能会变得缓慢,甚至完全无法进行。

为了顺畅地进入项目仓库,掌握其具体位置和登录方法等基本信息是必须的。每个项目仓库都有各自独特的网址,而且登录时可能需要通过账号密码或数字证书进行身份验证。

在线文档查看有讲究

首先,我们要关注在线文档查阅时出现的版本差异问题。比如,文中提到的2016年版帮助文档,其中包含了一些已经过时的API。若完全依照旧版文档的指导,可能会遇到无法执行的情况。在具体的项目实施中,团队成员可能同时使用新旧两个版本的文档,这很容易导致混淆。

        /// 
        /// 静默模式打开隐藏文件
        /// 
        /// 
        /// 文件路径
        /// 是否隐藏 默认隐藏
        /// 
        public static ModelDoc2 OpenInvisibleDocClient(this SldWorks app, string filePath, bool Hidden = true)
        {
            int Errors = -1, Warning = -1;
            var type = app.FileType(filePath);
            try
            {
                if (Hidden) app.DocumentVisible(false, (int)type);
                ModelDoc2 doc = app.OpenDoc6(filePath, type.SWToInt(), swOpenDocOptions_e.swOpenDocOptions_Silent.SWToInt(),
                    "", ref Errors, ref Warning) as ModelDoc2;
                if (doc == null)
                {
                    throw new Exception(string.Format("errors:{0},warings{1}",
                        Errors.CastObj().ToString(),
                        Warning.CastObj().ToString()));
                }
                return doc;
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                app.DocumentVisible(true, (int)type);
            }
        }

查阅网络文档时,搜索工具同样关键。尤其在进行规模庞大的项目时,文档资料量极大。以一个大型软件开发项目为例,里面的文档资料多达数万行。若搜索不够方便,寻找所需信息就像在茫茫大海中寻找一根针。

        /// 
        /// 判断文件类型
        /// 
        /// 
        /// 文件全路径
        /// 
        public static swDocumentTypes_e FileType(this SldWorks app, string filePath)
        {
            string extension = Path.GetExtension(filePath).ToLower();
            swDocumentTypes_e type = swDocumentTypes_e.swDocPART;
            switch (extension)
            {
                case ".sldprt":
                    type = swDocumentTypes_e.swDocPART;
                    break;
                case ".sldasm":
                    type = swDocumentTypes_e.swDocASSEMBLY;
                    break;
                case ".slddrw":
                    type = swDocumentTypes_e.swDocDRAWING;
                    break;
                default:
                    throw new FileFormatException("不支持的文件类型:" + extension);
            }
            return type;
        }

Nuget与打开文档

打开文档用Nuget时,不同的打开方式适用于不同的情况。比如,在api接口里,有些方法专用于打开特定类型的文件。有个设计师在处理图形文件时,用常规方法一直没成功,后来才意识到得用那个特定的api方法来打开这种图形文件格式。

        /// 
        /// 以不可见模式打开文档  Open a document invisibly. It will not be shown to the user but you will be
        /// able to interact with it through the API as if it is loaded.
        /// 
        /// 
        /// 
        /// 是否对用户可见
        ///  SolidWorks 文件类型 ,默认为零件
        /// 
        public static ModelDoc2 OpenInvisibleReadOnly(this ISldWorks sldWorks, string toolFile, bool visible = false, swDocumentTypes_e type = swDocumentTypes_e.swDocPART)
        {
            try
            {
                if (!visible)
                    sldWorks.DocumentVisible(false, (int)type);
                var spec = (IDocumentSpecification)sldWorks.GetOpenDocSpec(toolFile);
                if (!visible)
                {
                    spec.Silent = true;
                    spec.ReadOnly = true;
                }
                var doc = sldWorks.OpenDoc7(spec);
                doc.Visible = visible;
                return doc;
            }
            finally
            {
                if (!visible)
                    sldWorks.DocumentVisible
                        (true,
                            (int)
                                type);
            }
        }

判断文档是否开启这一步骤同样至关重要。比如,在处理大量文档时,同一个文档可能需要反复操作。若不先确认其是否已打开,可能会引发操作重复或资源滥用等问题。

新建零件与装配体操作

在应用默认模板生成零件或装配体时,需注意不同环境下的差异。比如,在中文使用场景中,模板文件的命名规则与英文环境有所区别。有一次在产品开发过程中,由于未充分考虑中文环境下的命名变化,结果新创建的零件命名变得杂乱无章。

        /// 
        /// 对内存中所有文档进行操作
        /// 
        /// 
        /// 
        public static void UsingOpenDoc(this SldWorks swApp, Action action)
        {
            var docs = (swApp.GetDocuments() as Object[]).Cast();
            if (docs == null)
            {
                return;
            }
            foreach (var item in docs)
            {
                action?.Invoke(item);
            }
        }

创建新文档时常用模板,然而,模板的出处和准确性至关重要。某些小型公司项目里,模板可能会被错误使用或版本不匹配。这时,开发人员需细致辨别。

修改设置需谨慎

        /// 
        /// 判断此文档是否打开
        /// 
        /// 
        /// 
        /// 
        public static bool HasDocOpened(this SldWorks app, string DocFilePathName)
        {
            bool exist = false;
            app.UsingOpenDoc(d =>
            {
                if (d.GetPathName() == DocFilePathName)
                {
                    exist = true;
                }
            }
            );
            return exist;
        }

获取设置选项时,需明确基本步骤。比如,在某个特定接口下,需遵循特定操作。若获取方法有误,后续步骤将受到影响。在自动化测试项目中,若设置选项获取不当,整个测试方案可能需从头开始搭建。

调整配置并恢复至初始状态,旨在保持用户的个性化设置不被干扰。这在众多以用户为中心的软件设计中尤为重要。比如,一款广受欢迎的办公软件,若因调整设置而改变用户既有的使用习惯,很可能会招致众多用户的不满。

        /// 
        /// 对活动文档进行操作
        /// 
        /// 
        /// 
        public static void UsingActiveDoc(this SldWorks swApp, Action action)
        {
            if (swApp.ActiveDoc != null)
            {
                action?.Invoke((IModelDoc2)swApp.ActiveDoc);
            }
        }

操作中的常见失误

操作过程中可能会出现一些失误。比如,参数的配置不当。举个例子,在一个机械零件的设计项目中,由于在静默模式下打开文档时参数设置错误,结果文档无法顺利打开。

可能存在接口操作失误。比如,在通过API接口处理活动文件时,若调用顺序有误或参数类型不当,便可能造成问题。

        /// 
        /// 以默认设置的模板创建文档
        /// 
        /// 
        /// 
        /// 
        public static IModelDoc2 CreateDocument(this ISldWorks sldWorks, swDocumentTypes_e type)
        {
            string templatePath = string.Empty;
            switch (type)
            {
                case swDocumentTypes_e.swDocPART:
                    templatePath = sldWorks.GetUserPreferenceStringValue((int)swUserPreferenceStringValue_e.swDefaultTemplatePart);
                    break;
                case swDocumentTypes_e.swDocASSEMBLY:
                    templatePath = sldWorks.GetUserPreferenceStringValue((int)swUserPreferenceStringValue_e.swDefaultTemplateAssembly);
                    break;
                case swDocumentTypes_e.swDocDRAWING:
                    templatePath = sldWorks.GetUserPreferenceStringValue((int)swUserPreferenceStringValue_e.swDefaultTemplateDrawing);
                    break;
                default:
                    break;
            }
            if (!File.Exists(templatePath))
            {
                templatePath =
                    Path.GetDirectoryName(templatePath) + "\" +
                    Path.GetFileName(templatePath).
                    Replace("零件", "gb_part").
                    Replace("装配体", "gb_assembly").Replace("工程图", "gb_a1");
            }
            if (!File.Exists(templatePath))
            {
                throw new FileNotFoundException("无法找到SolidWorks文件--" + templatePath);
            }
            return sldWorks.CreateDocument(templatePath);
        }

最后有个问题想请教大家,在你们执行项目的过程中,有没有遇到过特别让人难忘的失误经历?希望各位能点赞、转发,并在评论区分享你们的经验。

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

七爪网 行业资讯 SolidWorks二次开发教程:深入解析文档操作与设置技巧 https://www.7claw.com/2803232.html

七爪网源码交易平台

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务