External References, can you change the overlay property?
I need a quick way to look up all the xrefs in a drawing and then change them to all overlay. I have not found where that control might be. Can someone point me in the right direction? Also how do I get VBA to make a collection of Xref names?Thanks,
Alex With lisp or VBA, you might have to detach and re-attach the xref. Not sure about with .NET languages like C# or VB.NET. Probably no need. You can't change the attachment type, you have to detach and reattach. With everything I've been reading lately, I would like to do it in VBA. Would I have to make a collection of the file name, file path and insertion point. (We do all xrefs at 1 to 1 scale and don't do rotations.) Then detach all xrefs using the file name. Then attach again as an overlay, using the file name, and path and insertion point. Is that the basic idea? Do a filtered selection set, then a for each loop on the set.Get the path/name of the xref and the insertion point, detach, then attach the new one.
Can you go from here or do you need some help? I actually wrote something in VBA to do this a few years ago but probably don't have it anymore.I'll check though. I couldn't find it so I did it again really quickly.This is less elegant than it could be because I did some quick cribbing and patching from other things.It will also only work on modelspace xrefs.If it hits a pspace xref it will detach it and reattach in mspace.I've been told before that I shouldn't post any code unless it's fully tested and bulletproof because I'm wasting the persons time if they have to actually put any effort into it themselves, but this is not tested.It should work.If it doesn't, it will with minor tweaking.
Public Sub Layover()
Dim objSelSets As AcadSelectionSets
Dim objSelSet As AcadSelectionSet
Dim objOverlay As AcadExternalReference
Dim intType(0) As Integer
Dim varData(0) As Variant
Dim strPath As String
Dim strName As String
Dim dblInsPnt(0 To 2) As Double
Dim objXref As AcadExternalReference
Dim objEnt As AcadEntity
Dim objBlk As AcadBlock
Dim objBlks As AcadBlocks
Set objBlks = ThisDrawing.Blocks
Set objSelSets = ThisDrawing.SelectionSets
For Each objSelSet In objSelSets
If objSelSet.Name = "GetXrefs" Then
objSelSets.Item("GetXrefs").Delete
Exit For
End If
Next
Set objSelSet = objSelSets.Add("GetXrefs")
intType(0) = 0
varData(0) = "INSERT"
objSelSet.Select 5, filtertype:=intType, filterdata:=varData
For Each objEnt In objSelSet
Set objBlk = objBlks(objEnt.Name)
If objBlk.IsXRef Then
Set objXref = objEnt
strName = obxref.Name
strPath = objXref.Path
dblInsPt = objXref.InsertionPoint
objBlk.Detach
Set objOverlay = ModelSpace.AttachExternalReference(strPath, strName, dblInsPnt, 1, 1, 1, 1, True)
End If
Next objEnt
End Sub Oh, no error control, use at your own risk or ignore at will, blahgitty, blahgitty, blah. Nice code Boob.
Now could you change it to do something entirely different.I don't have time to tell you exactly what I need, so please make sure it works.
Thanks in advance.
PS.I'm only trying to help others learn by asking you to do my job.
Somebody needs a nap.
页:
[1]
2