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

需求:
目前的集成插件没有支持到的CAD种类或版本,如何进行二次开发
方案:
目前没有开放正式的二开接口,但是可以借用现有已支持的CAD类型的业务模型进行二次开发,达到与PLM对接的目的,后续我们也将开放一些标准扩展性好的接口(敬请期待!)。
参考不同CAD的API接口开发文档选择适当的开发语言和工具,这里以AutoCAD插件开发为例进行说明,选用开发语言是C#。
https://vip.kingdee.com/article/376001586327215360?productLineId=1&isKnowledge=2
https://vip.kingdee.com/article/376002902970249216?productLineId=1&isKnowledge=2
Step2: 创建CAD接口的访问类-3D
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二开引用组件)。如无需引用组件则跳过这个步骤

创建CAD的API接口访问类。
创建 根文档 数据结构获取的方法,3DCAD的每一个文档对应一个CadDataStruct对象

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


组装文档结构

参考代码
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)
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



