/// <summary> /// 对dwg中的实体进行坐标转换。注意:此方法会导致Database无法被再次Save(); /// </summary> /// <param name="TransFunc">坐标转换函数</param> /// <param name="OutputPath">转换后实体导出路径,为空则保留在原文件</param> /// <param name="ErrorPath">错误实体保存路径,为空则不导出错误实体</param> /// <returns></returns> public bool Transform(TransformHelper.TransformDelegate TransFunc, string OutputPath = "", string ErrorPath = "") { LayerMgr.SaveLayerStateSnapshot(); //保存图层状态 LayerMgr.ActivationLayer(); //激活所有图层 TransformHelper.BooleanStatis statis = TransformHelper.TransformDWG(this, TransFunc); LayerMgr.RecoveryLayerStateSnapshot(); //将图层恢复到激活前的状态 //保存转换后的实体 if (string.IsNullOrWhiteSpace(OutputPath)) { //Save(); } else { SaveAs(OutputPath, database.OriginalFileVersion); } //导出错误实体 if (!string.IsNullOrWhiteSpace(ErrorPath) && statis.FalseCount > 0) { DWGHelper successHelper = string.IsNullOrWhiteSpace(OutputPath)? this: new DWGHelper(OutputPath); File.Copy(string.IsNullOrWhiteSpace(OutputPath) ? this.dwgPath : OutputPath, ErrorPath, true);//复制文件 DWGHelper errorHelper = new DWGHelper(ErrorPath); successHelper.BlockMgr.ModelSpace.DeleteEntityByXData(TransformHelper.TransformStatus, "False"); successHelper.Save(); errorHelper.BlockMgr.ModelSpace.DeleteEntityByXData(TransformHelper.TransformStatus, "True"); errorHelper.Save(); } statis.Log(); return(statis.FalseCount == 0); }
/// <summary> /// 在指定路径创建一个dwg文件。并返回DWGHelper /// </summary> /// <param name="dwgPath"></param> /// <returns></returns> static public DWGHelper CreateDWGHelper(string dwgPath, Enum.DwgVersion ver = Enum.DwgVersion.AC1024) { DWGHelper helper = null; if (dwgPath.ToLower().EndsWith(".dwg")) { if (File.Exists(dwgPath)) { throw new System.Exception("文件已存在!"); } else { helper = new DWGHelper(dwgPath); helper.SaveAs(dwgPath, (DwgVersion)ver); } } else { throw new System.Exception("文件格式错误,只支持dwg格式的文件!"); } return(helper); }