Message 1 of 8
Make XRef path relative
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I can't seem to figure out how to make the xref file path relative.
Public Sub ProjectCloseOut(Directory_DrawingName As String, ByVal FileType As String)
Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
Dim db As Database = New Database(False, True)
Dim XrGraph As XrefGraph = db.GetHostDwgXrefGraph(False)
XrGraph = db.GetHostDwgXrefGraph(True)
Dim root As GraphNode = XrGraph.RootNode
Dim r As New List(Of String)
Using db
Try 'FileOpenMode.OpenForReadAndAllShare
db.ReadDwgFile(Directory_DrawingName, FileOpenMode.OpenForReadAndAllShare, False, Nothing)
Catch __unusedException1__ As System.Exception
ed.WriteMessage(vbLf & "Unable To read drawing file.")
End Try
Using tran = db.TransactionManager.StartTransaction
For o As Integer = 0 To root.NumOut - 1
Dim child As XrefGraphNode = TryCast(root.Out(o), XrefGraphNode)
Select Case child.XrefStatus
Case XrefStatus.Resolved
' Make all of the xrefs relitive paths
Dim XrefFullFileName = child.Database.Filename
Dim XrefFilePath = IO.Path.GetDirectoryName(AecFullFileName)
Dim XrefFileName = IO.Path.GetFileNameWithoutExtension(AecFullFileName)
dtProjectCloseOutFiles.Rows.Add(XrefFullFileName, XrefFilePath, XrefFileName, FileType)
Case XrefStatus.FileNotFound Or XrefStatus.Unloaded Or XrefStatus.Unreferenced
' xrefs for all model files in 3D Model folder and detach them
Dim XrefFullFileName = child.Database.Filename
Dim XrefFilePath = IO.Path.GetDirectoryName(AecFullFileName)
Dim XrefFileName = IO.Path.GetFileNameWithoutExtension(AecFullFileName)
Dim acXrefId As ObjectId = db.AttachXref(XrefFullFileName, XrefFileName)
db.DetachXref(acXrefId)
End Select
Next
End Using
End Using
End Sub
Same code in C#
public void ProjectCloseOut(string Directory_DrawingName, string FileType)
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
Database db = new Database(false, true);
XrefGraph XrGraph = db.GetHostDwgXrefGraph(false);
XrGraph = db.GetHostDwgXrefGraph(true);
GraphNode root = XrGraph.RootNode;
List<string> r = new List<string>();
using (db)
{
try // FileOpenMode.OpenForReadAndAllShare
{
db.ReadDwgFile(Directory_DrawingName, FileOpenMode.OpenForReadAndAllShare, false, null/* TODO Change to default(_) if this is not a reference type */);
}
catch (Exception __unusedException1__)
{
ed.WriteMessage(Constants.vbLf + "Unable To read drawing file.");
}
using (var tran = db.TransactionManager.StartTransaction)
{
for (int o = 0; o <= root.NumOut - 1; o++)
{
XrefGraphNode child = root.Out(o) as XrefGraphNode;
switch (child.XrefStatus)
{
case object _ when XrefStatus.Resolved:
{
// Make all of the xrefs relitive paths
var XrefFullFileName = child.Database.Filename;
var XrefFilePath = System.IO.Path.GetDirectoryName(AecFullFileName);
var XrefFileName = System.IO.Path.GetFileNameWithoutExtension(AecFullFileName);
dtProjectCloseOutFiles.Rows.Add(XrefFullFileName, XrefFilePath, XrefFileName, FileType);
break;
}
case object _ when XrefStatus.FileNotFound | XrefStatus.Unloaded | XrefStatus.Unreferenced:
{
// xrefs for all model files in 3D Model folder and detach them
var XrefFullFileName = child.Database.Filename;
var XrefFilePath = System.IO.Path.GetDirectoryName(AecFullFileName);
var XrefFileName = System.IO.Path.GetFileNameWithoutExtension(AecFullFileName);
ObjectId acXrefId = db.AttachXref(XrefFullFileName, XrefFileName);
db.DetachXref(acXrefId);
break;
}
}
}
}
}
}