We have a program to update our titleblocks, the following code has worked without problems in Inventor 2010.
But in Inventor 2012, it doesn't work every time. When I insert the titleblock for the first time I can fill the attributes,
but when I want to update the titleblock, I see no change, although it has changed the values, which I can see if I manually do an edit attributes (see screenshot).
Public Shared Function SaveAutocadAttributes(ByVal intDocID As Integer, ByRef invApp As Inventor.Application) As Boolean Dim ht As Hashtable = AcadAttributesMapping(intDocID, invApp) Dim i As Integer Dim invDoc As DrawingDocument Dim acadDoc As AcadDatabase Dim objBlock As AcadBlock = Nothing Dim objAcadEntity As AcadEntity = Nothing Dim objAcadBlockReference As AcadBlockReference = Nothing Dim obj() As Object = Nothing Dim objAcadObject As AcadObject = Nothing invDoc = invApp.ActiveDocument acadDoc = invDoc.ContainingDWGDocument For Each objBlock In acadDoc.Blocks For Each objAcadEntity In objBlock If objAcadEntity.ObjectName.ToLower = "AcDbBlockReference".ToLower Then objAcadBlockReference = CType(objAcadEntity, AcadBlockReference) If objAcadBlockReference.HasAttributes Then Select Case objAcadBlockReference.Name Case "A0", "A1", "A2", "A3", "A3D", "A4", "P0", "P1", "P2", "P3", "P4" obj = DirectCast(objAcadBlockReference.GetAttributes, Object()) For i = LBound(obj) To UBound(obj) If ht.ContainsKey(obj(i).TagString) = True Then obj(i).TextString = ht.Item(obj(i).TagString) End If Next i End Select End If End If Next Next invDoc.Update() End Function
Solved! Go to Solution.
The following code code works for me.
Public Shared Sub SaveAttributes(ByVal strFieldVaule() As String, ByVal strFieldName() As String, ByRef invApp As Inventor.Application)
Dim myBlockRef As AcadBlockReference
Dim i As Short
Dim h As Short
Dim myAttributes As Object
Dim invDoc As DrawingDocument
Dim acadDoc As AcadDatabase
invDoc = invApp.ActiveDocument
acadDoc = invDoc.ContainingDWGDocument
For Each Entity In acadDoc.PaperSpace
If TypeOf Entity Is AcadBlockReference Then
myBlockRef = Entity
Select Case myBlockRef.Name
Case "A0", "A1", "A2", "A3", "A4", "P0", "P1", "P2", "P3", "P4"
myAttributes = Entity.GetAttributes
For i = LBound(myAttributes) To UBound(myAttributes)
For h = LBound(strFieldName) To UBound(strFieldName)
If strFieldName(h) = myAttributes(i).TagString Then
myAttributes(i).TextString = strFieldVaule(h)
AcadAttributesMapping was just a function that i made to put attribute values to a Hashtable.
I am trying to generate some code to read an Autocad created titleblock with attributes that is in a Inventor 2013 .dwg using Visual Studio Express 2010. However, I have three references "not defined" when starting with the code above.
I have referenced the Inventor's interop library, am I missing another reference? Please see attached screenshot..
AcadBlockReference, DrawingDocument, AcadDatabase are the ones missing.
Thank you for replying Michael but oddly enough the reference is not defined after adding in autodesk.AutoCAD.Interop and Autodesk.AutoCAD.Interop.Common. Screen shot below.
Using Visual Studio 2010 express.
Log into access your profile, ask and answer questions, share ideas and more. Haven't signed up yet? Register
Start with some of our most frequented solutions to get help installing your software.