Autodesk Inventor Customization
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic to the Top
- Bookmark
- Subscribe
- Printer Friendly Page
Edit AutoCAD attributes
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
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).
Any ideas?
Thanks,
Michael
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.
Re: Edit AutoCAD attributes
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hey Michael,
Did you ever get this to work?
What namespace does AcadAttributesMapping belong to?
Thank you
Re: Edit AutoCAD attributes
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
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)
End If
Next
Next i
End Select
End If
Next
invDoc.Update()
End Sub
AcadAttributesMapping was just a function that i made to put attribute values to a Hashtable.
Re: Edit AutoCAD attributes
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
What a legend! Thank you!
Re: Edit AutoCAD attributes
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
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.
Thanks,
Dave
Re: Edit AutoCAD attributes
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
You have to reference
Autodesk.AutoCAD.Interop
and
Autodesk.AutoCAD.Interop.Common
Re: Edit AutoCAD attributes
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
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.
Dave
Re: Edit AutoCAD attributes
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
You need to put the imports namespace names in the code as well.
Imports Autodesk.AutoCAD.Interop.Common
Re: Edit AutoCAD attributes
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
