/// <summary> /// Replace drawing references /// </summary> /// <param name="drawingDocument">Drawing with dirty references</param> public void replaceDrawingRef(DrawingDocument drawingDocument) { File drawingFile = drawingDocument.File; FileDescriptorsEnumerator fileDescriptors = drawingFile.ReferencedFileDescriptors; Dictionary <string, string> referencedFiles = new Dictionary <string, string>(); foreach (FileDescriptor f in fileDescriptors) { int idx = f.FullFileName.LastIndexOf('\\'); referencedFiles.Add(f.FullFileName.Substring(idx + 1), f.FullFileName.Substring(0, idx)); } #region "Replace Drawing References" fileDescriptors[referencedFiles["MESH BASKET.iam"] + "\\MESH BASKET.iam"].ReplaceReference(location + "\\" + partNumber + ".iam"); fileDescriptors[referencedFiles["FRAME.ipt"] + "\\FRAME.ipt"].ReplaceReference(location + "\\FRAME.ipt"); fileDescriptors[referencedFiles["BOTTOM T BAR.ipt"] + "\\BOTTOM T BAR.ipt"].ReplaceReference(location + "\\BOTTOM T BAR.ipt"); fileDescriptors[referencedFiles["HANDLE.ipt"] + "\\HANDLE.ipt"].ReplaceReference(location + "\\HANDLE.ipt"); fileDescriptors[referencedFiles["MESH.ipt"] + "\\MESH.ipt"].ReplaceReference(location + "\\MESH.ipt"); fileDescriptors[referencedFiles["SM CORNER.ipt"] + "\\SM CORNER.ipt"].ReplaceReference(location + "\\SM CORNER.ipt"); fileDescriptors[referencedFiles["SM LENGTH EDGE.ipt"] + "\\SM LENGTH EDGE.ipt"].ReplaceReference(location + "\\SM LENGTH EDGE.ipt"); fileDescriptors[referencedFiles["VERTICAL T BAR.ipt"] + "\\VERTICAL T BAR.ipt"].ReplaceReference(location + "\\VERTICAL T BAR.ipt"); fileDescriptors[referencedFiles["MESH DETAIL.ipt"] + "\\MESH DETAIL.ipt"].ReplaceReference(location + "\\MESH DETAIL.ipt"); #endregion }
/// <summary> /// Replace drawing references /// </summary> /// <param name="drawingDocument">Drawing with dirty references</param> public void replaceDrawingRef(DrawingDocument drawingDocument) { File drawingFile = drawingDocument.File; FileDescriptorsEnumerator fileDescriptors = drawingFile.ReferencedFileDescriptors; //using (System.IO.StreamWriter refList = System.IO.File.CreateText(@"\\msw-fp1\user$\wchan\Documents\References.txt")) //{ // foreach (FileDescriptor f in fileDescriptors) // { // refList.WriteLine(f.FullFileName); // } //} Dictionary <string, string> referencedFiles = new Dictionary <string, string>(); foreach (FileDescriptor f in fileDescriptors) { int idx = f.FullFileName.LastIndexOf('\\'); referencedFiles.Add(f.FullFileName.Substring(idx + 1), f.FullFileName.Substring(0, idx)); } #region "Replace Drawing References" fileDescriptors[referencedFiles["Crosswire Basket.iam"] + "\\Crosswire Basket.iam"].ReplaceReference(location + "\\" + partNumber + ".iam"); fileDescriptors[referencedFiles["Crosswire X.ipt"] + "\\Crosswire X.ipt"].ReplaceReference(location + "\\Crosswire X.ipt"); fileDescriptors[referencedFiles["Crosswire Z.ipt"] + "\\Crosswire Z.ipt"].ReplaceReference(location + "\\Crosswire Z.ipt"); fileDescriptors[referencedFiles["Mid Frame.ipt"] + "\\Mid Frame.ipt"].ReplaceReference(location + "\\Mid Frame.ipt"); fileDescriptors[referencedFiles["Top Frame.ipt"] + "\\Top Frame.ipt"].ReplaceReference(location + "\\Top Frame.ipt"); #endregion }
/// <summary> /// Recursive method that will replace all the references /// In the assembly document and all the child assembly documents /// </summary> /// <param name="refs"></param> /// <param name="referenceData"></param> /// <param name="skip"></param> private static void Recurse(FileDescriptorsEnumerator refs, List <ReferenceDto> referenceData, List <string> skip = null) { // Loop through the references in the document foreach (FileDescriptor r in refs) { // get the full path of the file var path = r.FullFileName; // If any of the files are in skip then continue if (skip != null && skip.Count > 0) { if (skip.Any(x => r.FullFileName.ToUpper().Contains(x.ToUpper()))) { continue; } } // Get the file name that matches the file ref var refPath = referenceData.FirstOrDefault(x => x.OriginalReference.ToUpper() == path.ToUpper()); // if not found then continue if (refPath == null) { continue; } // Replace the reference with item 2 r.ReplaceReference(refPath.NewReference); // If the document is an assembly document if (r.ReferencedFileType == FileTypeEnum.kAssemblyFileType) { // Get the reference file Inventor.File file = r.ReferencedFile; // Recurse through the sub assembly files Recurse(file.ReferencedFileDescriptors, referenceData, skip); } } }