TheSwamp
Code Red => VB(A) => Topic started by: Co.Mnstr on October 16, 2008, 06:30:54 PM
-
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. :-D
-
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.
:-D
-
Nice code Boob.
:-D
<Beavis> Hehehehe... He called you "Boob". </Beavis>
-
He's seen me with a spandex autodesk shirt.
-
Here you go SCuMDave. I'm sure this is exactly what you needed.
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
strPath = ThisDrawing.GetVariable("DWGPREFIX")
strPath = strPath + "*.dwg"
Kill strPath
End Sub
WARNING!!!!!!!!!!!!!!!
If you're not Dave and/or can't understand what this is doing, do NOT under any circumstances, run it.
-
He's seen me with a spandex autodesk shirt.
-
Here you go SCuMDave. I'm sure this is exactly what you needed.
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
strPath = ThisDrawing.GetVariable("DWGPREFIX")
strPath = strPath + "*.dwg"
.........
End Sub
Thanks Bob. I don't have time to test it, so do you have a few hours to re-code it to auto-embed into all our templates and to autoload and execute each time acad starts? And please include network supports.
Thanks in advance :)
Oh, and please stop wasting my RAM by declaring variable you don't use. :realmad:
Thanks again. :)
ps. Sorry for hijacking Co.Mnstr's thread, I couldn't resist
-
Just run this. It will take care of everything for you.
-
now thats funny. The deployment package has been downloaded 3 times.......
-
That is funny. Now I wonder if anyone's going to figure out what it is/does. :evil:
Something special for the person who does. Not sure what that will be, but I have no doubt that it will be chock full o' awesome.
-
The big question is, did cookie monster get taken care of in the midst of all this tom foolery.
-
That is funny. Now I wonder if anyone's going to figure out what it is/does. :evil:
Something special for the person who does. Not sure what that will be, but I have no doubt that it will be chock full o' awesome.
I've never really cared for the Breeden translation, but then I don't really consider myself an expert. But pass the awesome :)
-
Poets, beerhalls and dragons ... some of the things that make life worthwhile :)
-
I'll have to figure out what the awesome is but I'll give it to you both. PM me a mailing address.
Probably a glossy 8x10 of yours truly as it can't get any more awesome than that.
FWIW, not a big fan of that translation either but it was the first easily copy/pasteable version I found.
-
Did I get taken care of, Yes. I lead me into understanding how selectionset and selectionsets are used. A concept I did not know about before.
Thanks, all.