c# aveva marine 批量导出图纸到dxf格式

获取图纸数据库

查看代码

public static Dictionary<string,List<DbElement>> GetDbElements(DbType dbtype)
        {
            Dictionary<string, List<DbElement>> rtn = new Dictionary<string, List<DbElement>>();
            Aveva.Pdms.Database.MDB mdb = Aveva.Pdms.Database.MDB.CurrentMDB;
            var dbs = mdb.GetDBArray(dbtype);
            foreach (var item in dbs)
            {
                rtn[item.Name] = item.WorldMembers().ToList();
            }
            return rtn;
        }
查看代码
 public List<DbElement> GetDrawingsDB()
        {
            var designs = DbExtension.GetDbElements(Aveva.Pdms.Database.DbType.Draft);
            return designs.Values.First().Where(c => c.GetActualType() == DbElementTypeInstance.DEPT).ToList();
        }

获取某一数据库的图纸

 

查看代码
  public List<DbElement> GetDrawings(string dbName)
        {
            var dwgs = new List<DbElement>();
            var db = DbElement.GetElement(dbName.StartsWith("/")?dbName: "/"+dbName);
            var regis = db.Members().Where(c => c.GetActualType() == DbElementTypeInstance.REGISTRY);
            foreach (var item in regis)
            {
                if (item.FirstMember() != null)
                {
                    var curRegDwgs = item.Members().Where(d => d.GetActualType() == DbElementTypeInstance.DRWG);
                    if (curRegDwgs.Any())
                        dwgs.AddRange(curRegDwgs.ToList());
                }

            }
            return dwgs.Where(d=>!d.IsNull).ToList();
        }

主函数

查看代码
 AMHullEnv AmEnv = new AMHullEnv();
            try
            {
                var dwgTypes = AmEnv.GetDrawingsDB().Select(c => c.GetAsString(DbAttributeInstance.NAMN)).ToList();
                //dwgTypes.ToCSVFile($@"C:\{dwgTypes.First().GetType().FullName}.csv");
                MarStringlist strs = new MarStringlist();
                dwgTypes.ForEach(c => strs.AddString(c));
                var ints = AmEnv.Ui.StringSelect("选择数据库", "select DataBank to save drawing", "", strs);
                if (ints[0] == AmEnv.MarUtil.Ok())
                {
                    var dwgType = dwgTypes.First(c => c == strs[ints[1] - 1]);
                    var dwgs = AmEnv.GetDrawings(dwgType);
                    if (dwgs != null)
                    {
                        wm.StatusBar.Text = dwgType.ToString();
                        foreach (var item in dwgs)
                        {
                            try
                            {
                                var dwgName = item.GetAsString(DbAttributeInstance.NAMN).Replace("/" + item.GetAsString(DbAttributeInstance.TYPE), "");
                                //var curDwgName = AmEnv.DraftApp.DwgNameGet();
                                if (AmEnv.DraftApp.DwgCurrent()) AmEnv.DraftApp.DwgClose();
                                AmEnv.DraftApp.DwgOpen(dwgName);
                                var dxfName = $@"C:\{dwgType}_{item.GetAsString(DbAttributeInstance.OWNER).Replace("/", "")}_{dwgName}.dxf";
                                AmEnv.DraftApp.DwgDxfExport(dxfName);
                                //AmEnv.DraftApp.DwgWmfExport(Path.ChangeExtension(dxfName, ".wmf"));
                                AmEnv.DraftApp.DwgClose();
                            }
                            catch (Exception ex)
                            {
                                AmEnv.Ui.MessageNoConfirm(ex.StackTrace);
                                continue;    
                            }
                        }
                    }
                    else
                        AmEnv.Ui.MessageNoConfirm(dwgType + "数据库下无任何图纸!");
                }
                else
                    AmEnv.Ui.MessageNoConfirm("未选择到数据库!");
            }
            catch (Exception ex)
            {
                wm.StatusBar.Text = ex.StackTrace;
            }

效果见视频

https://www.bilibili.com/video/BV1a14y1L749/?spm_id_from=333.999.0.0&vd_source=0b221dbd75584a13ab6cd4551f3a0ec2

 

posted @ 2022-10-30 15:37  南胜NanSheng  阅读(526)  评论(0编辑  收藏  举报