• Industries
  • Products
  • Buy
  • Services & Support
  • Communities
  • Discussion Groups

    .NET

    Reply
    Active Contributor
    BellwetherBill
    Posts: 33
    Registered: ‎01-14-2011
    Accepted Solution

    ObjectModified event

    876 Views, 16 Replies
    04-14-2011 12:49 PM

    I'm writing an event handler to trap a polyline being modified with the ObjectModified Event. Right now it works but when I grip edit the polyline I sometimes get only one event fired but sometimes I get multiple events fired. It seems like when I get multiple events fired I get one for every grip...or one for each vertex and each segment?

     

    Any suggestions on how I can trap just the last event? I only need the polyline for reading once it is completely updated. Or, I suppose if I could trap a vertex changing somehow then I could do something with that.

     

    Thanks.

    Please use plain text.
    Distinguished Contributor
    Posts: 112
    Registered: ‎04-22-2009

    Re: ObjectModified event

    04-18-2011 07:21 AM in reply to: BellwetherBill

    What you could do is to handle the modifyed event and add the objectid from the entity to a list. And check if the list has the objectid then don't add it.

     

    Then handle your code your code in the command ended event itterate true the list. And then clear the list..

     

    Hope this helps. This senario can be used when you need transactionhandling in autocad events.

     

    Kind regards,

     

    Irvin

    Please use plain text.
    Active Contributor
    BellwetherBill
    Posts: 33
    Registered: ‎01-14-2011

    Re: ObjectModified event

    04-19-2011 10:17 AM in reply to: Irvin

    Irvin,

     

    That worked out perfect. Thanks for your advise.

     

    Bill

    Please use plain text.
    Contributor
    Posts: 22
    Registered: ‎11-13-2008

    Re: ObjectModified event

    04-21-2011 10:58 AM in reply to: BellwetherBill

    I'm new to autocad custimizatin and I'm trying to capture the object modified event for attribute change. It sounds similiar to what your doing. Is there anyway you could give me a sample of your code to get me started. I'm using vb.net

     

    Thanks

    Dave

    Please use plain text.
    Active Contributor
    BellwetherBill
    Posts: 33
    Registered: ‎01-14-2011

    Re: ObjectModified event

    04-21-2011 11:45 AM in reply to: BellwetherBill

    Dave,

    Here is some code. I tried to strip out all the custom classes and dependencies specific to my usage. What's left I beleive may be helpful to you. I used ideas and code snipits from reading other posts on events. Another specific contributor that is notable is arcticad and his reply on "Document Change Event".

     

    Good luck.

     

    {code}

    Imports Autodesk.AutoCAD.Runtime
    Imports Autodesk.AutoCAD.ApplicationServices
    Imports Autodesk.AutoCAD.DatabaseServices
    Imports Autodesk.AutoCAD.EditorInput

     

    Public Class AppEventsClass

        Implements Autodesk.AutoCAD.Runtime.IExtensionApplication

        Private mIdCol As List(Of ObjectId)        'a collection of ObjectId's for use in the command ended event handler
        Private DocMan As DocumentCollection
        Private db As Database
        Private doc As Document

     

        Public Sub Initialize() Implements Autodesk.AutoCAD.Runtime.IExtensionApplication.Initialize

            mIdCol = New List(Of ObjectId)

            DocMan = Application.DocumentManager

            AddHandler DocMan.DocumentCreated, AddressOf callback_documentCreated

            initEvents()

        End Sub

     

        Public Sub Terminate() Implements Autodesk.AutoCAD.Runtime.IExtensionApplication.Terminate

            RemoveHandler DocMan.DocumentCreated, AddressOf callback_documentCreated

            RemoveHandler doc.CommandEnded, AddressOf callback_CommandEnded
            RemoveHandler db.ObjectModified, AddressOf callback_ObjectModified

     

            mIdCol.Clear()

        End Sub

     

        Private Sub initEvents()

            For Each doc In DocMan
                db = doc.Database

                AddHandler doc.CommandEnded, AddressOf callback_CommandEnded
                AddHandler db.ObjectModified, AddressOf callback_ObjectModified

            Next

        End Sub

     

        Private Sub callback_documentCreated(ByVal sender As Object, ByVal e As DocumentCollectionEventArgs)
            initEvents()
        End Sub

     

        Private Sub callback_CommandEnded(ByVal sender As Object, ByVal e As CommandEventArgs)

            If mSIdCol.Count > 0 Then

                Dim ObjID As ObjectId

                For Each ObjID In mIdCol
                    Dim Struct As New cStructure(ObjID)
                    Struct.Rebuild()

                    Struct = Nothing
                Next

                mIdCol.Clear()
            End If

        End Sub

     

        Private Sub callback_ObjectModified(ByVal sender As Object, ByVal e As ObjectEventArgs)
            If Not mIdCol.Contains(e.DBObject.Id) Then

             mIdCol.Add(e.DBObject.Id)

            End If

        End Sub

     

    End Class

    {code)

    Please use plain text.
    Contributor
    Posts: 22
    Registered: ‎11-13-2008

    Re: ObjectModified event

    04-21-2011 01:35 PM in reply to: BellwetherBill

    Hi

     

    Thanks for the help. I've gotten as far as getting the objectmodified event to fire, but I'm not sure how to filter for which command was used or how to tell if an attribute has been updated. Do you know of any books or sites that might be helpful on this subject? I got vb.net programming level 1 by Jerry Winters, but there's not much in it on event handlers

     

    thanks again for your help

     

    Dave

    Please use plain text.
    Active Contributor
    BellwetherBill
    Posts: 33
    Registered: ‎01-14-2011

    Re: ObjectModified event

    04-21-2011 02:45 PM in reply to: daverode

    You can check for an attribute in the ObjectModified even handler. Test e.DBObject.Id.ClassName. If it matches what you're looking for you can add to the collection.

     

    I don't have access to my documentation but there is a Property or method in the CommandArgs for the command name.

     

    If you download the ObjectArx documentation you can find lots of information.

    Please use plain text.
    Active Contributor
    BellwetherBill
    Posts: 33
    Registered: ‎01-14-2011

    Re: ObjectModified event

    04-21-2011 03:42 PM in reply to: daverode

    Sorry, Should have been e.DBObject.Id.ObjectClass.Name.

     

    My code reads

     

    If e.DBObject.Id.ObjectClass.Name. = "AcDbPolyline" then

       ''do some stuff to polylines

    End If

     

    I downloaded the ObjectArx 2012 documentation and it has some new stuff in the Managed Class Reference.

    Please use plain text.
    Contributor
    Posts: 22
    Registered: ‎11-13-2008

    Re: ObjectModified event

    04-27-2011 04:30 PM in reply to: BellwetherBill

    Still having trouble with this. I've gotten the object modified event to fire but it fires about 15 times every time an object is modified. Any clue as to why this is happening?

    Please use plain text.
    Active Contributor
    BellwetherBill
    Posts: 33
    Registered: ‎01-14-2011

    Re: ObjectModified event

    04-27-2011 04:43 PM in reply to: BellwetherBill

    Can you post your code to look at?

     

    The ObjectModified will fire a lot. There are many things that will cause this to fire on the same object. Not to mention that it fires no matter which object is modified. That's why I added the collection to hold the ObjectId of the entity I wanted to trap. Then I handle it once in the command ended event.

    Please use plain text.