电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

星空PLM与(2D/3D)CAD集成的二次开发方法(2-2)

来源:金蝶云社区作者:金蝶2024-09-2320

星空PLM与(2D/3D)CAD集成的二次开发方法(2-2)

需求:

目前的集成插件没有支持到的CAD种类或版本,如何进行二次开发


方案:

目前没有开放正式的二开接口,但是可以借用现有已支持的CAD类型的业务模型进行二次开发,达到与PLM对接的目的,后续我们也将开放一些标准扩展性好的接口(敬请期待!)。

参考不同CAD的API接口开发文档选择适当的开发语言和工具,这里以AutoCAD插件开发为例进行说明,选用开发语言是C#。


Step1: 创建CAD插件的二开新项目

https://vip.kingdee.com/article/376001586327215360?productLineId=1&isKnowledge=2

Step2: 创建CAD接口的访问类-2D

https://vip.kingdee.com/article/376002902970249216?productLineId=1&isKnowledge=2

Step2: 创建CAD接口的访问类-3D

Step3: 创建PLM接口通信交互类

https://vip.kingdee.com/article/376003526830616064?productLineId=1&isKnowledge=2

Step4: 安装部署CAD插件

=======================================================


Step2: 创建CAD接口的访问类

这个类的主要职责是通过CAD软件开发的接口,获取CAD图纸上的相关属性数据,如AUTOCAD标题栏中的编码、名称等属性,SolidWorks文件中所配置的属性信息。使用这些属性构建每一个CadDataStruct对象(每个CadDataStruct对象代表一个文档的数据结构),最终将整个文档组中所有文档对象集合整合到 CadDataModel 对象中,并序列化为Json格式,通过Socket与 PLM客户端进行通信(Step3介绍与PLM通信的部分)


    1)、3D类型CAD:


参考CAD的二次开发教程或者API接口文档, 引用CAD的API接口组件(下图示例AutoCAD二开引用组件)。如无需引用组件则跳过这个步骤

08.webp


创建CAD的API接口访问类。

创建 根文档 数据结构获取的方法,3DCAD的每一个文档对应一个CadDataStruct对象

12.webp



递归获取下层文档数据结构信息


13-1.webp

13-2.webp


组装文档结构

14.webp


参考代码

public class _3DCadManager
    {
        #region 3DCAD文档结构获取

        /// <summary>
        /// 获取根文档的CadDataStruct对象
        /// </summary>
        /// <param name="cadFilePath"></param>
        /// <returns></returns>
        public CadDataStruct GetRootDocDataStruct(string cadFilePath)
        {
            CadDataStruct rootDoc = new CadDataStruct()
            {
                IsRoot = true,//根文档置为true,一套图只有一个根文档
                FileType = CadFileType.AssemblyDrawing,//文件类型是装配图,这个属性根据实际情况赋值
                FileLevel = CadFileLevel.Normal,
                FileHash = RegistryHelper.GetFileSHA1(cadFilePath),
                CadType = CadType.SolidWorks,//借用Solidworks类型
                DrawingDoc = "工程图名称",//如果有关联工程图,赋值工程图名称
                DrawingDocs = new List<string>(),//如果有多个关联工程图,赋值到这里
                DicPropertyInfos = new Dictionary<string, string>()//通过CAD的API接口获取文档属性,赋值到这里
            };

            if (!string.IsNullOrWhiteSpace(cadFilePath))
            {
                if (File.Exists(cadFilePath))
                {
                    FileInfo cadFileInfo = new FileInfo(cadFilePath);
                    rootDoc.Size = cadFileInfo.Length;
                    rootDoc.FileName = cadFileInfo.Name;
                    rootDoc.DirectoryPath = cadFileInfo.DirectoryName;
                    rootDoc.LastWriteTime = cadFileInfo.LastWriteTime;
                    rootDoc.CreationTime = cadFileInfo.CreationTime;
                }
                else
                {
                    rootDoc.FileName = cadFilePath;
                }
            }
            return rootDoc;
        }

        /// <summary>
        /// 递归获取下层文档结构的数据,并填充到文档数据结构列表中
        /// </summary>
        /// <param name="allDocList"></param>
        /// <param name="parentDocStruct"></param>
        public void GetBomStruct(List<CadDataStruct> allDocList, CadDataStruct parentDocStruct)
        {
            allDocList.Add(parentDocStruct);
            bool hasChildren = true;//当前ParentDOcStruct是否有下层文档

            ///创建并添加工程图数据结构对象
            if (string.IsNullOrWhiteSpace(parentDocStruct.DrawingDoc) || parentDocStruct.DrawingDocs.Count>0)
            {//如果ParentDOcStruct存在工程图,创建工程图文档的CadDataStruct对象放到文档数据结构列表中
                foreach (var drwDocFileName in parentDocStruct.DrawingDocs)
                {
                    string drwDocFilePath = Path.Combine(parentDocStruct.DirectoryPath, drwDocFileName);
                    CadDataStruct drwDataStruct = new CadDataStruct(drwDocFilePath)
                    {
                        IsRoot = false,
                        FileType= CadFileType.EngineeringDrawing,//文件类型=工程图
                        FileHash = RegistryHelper.GetFileSHA1(drwDocFilePath)
                    };
                    allDocList.Add(drwDataStruct);//将工程图的CadDataStruct对象添加到文档数据结构列表中
                }
            }

            //遍历下层文档,创建并添加下级文档的工程图数据结构对象
            if (parentDocStruct.FileType== CadFileType.AssemblyDrawing && hasChildren)
            {//Parent如果是装配体并且包含下层

                int childerenCount = 1;//假设有childerenCount个下层-----以下是伪代码,只提供参考逻辑,二开时按实际情况编写
                for (int i = 0; i < childerenCount; i++)
                {
                    string childDoc

星空PLM与(2D/3D)CAD集成的二次开发方法(2-2)

需求:目前的集成插件没有支持到的CAD种类或版本,如何进行二次开发方案:目前没有开放正式的二开接口,但是可以借用现有已支持的CAD类型的...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信