.NET
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

cursor pick object event

7 REPLIES 7
SOLVED
Reply
Message 1 of 8
wang890
3765 Views, 7 Replies

cursor pick object event

i am trying to make a custom palette to display some custom infomation pulled out from selected objects.

 

i can deal with the palette part.

 

i want some code for when you click an object in model space then the property palette updates. i am gonna keep it simple so this custom palette only refresh to the last selected object. but i don't know how to make an event when mouse click the autocad object and then do my things. any codes in c# or vb.net would be nice.

 

so use commandmethod load in a command and there will be a palette there stay open, when user click on an object then it will get populated. what event do i use for the clicking?

 

thank you.

Stantec
Dell Precision 5530, Prism M320PU, C3D 14/17/19
7 REPLIES 7
Message 2 of 8
VB_Autocad_guy
in reply to: wang890

I'm gonna take a guess here: 

 

I think it's a Doc Event

I used MdgDgbd.dll Tool to tinker with events that are fired when I click and object. 

 

Document.ImpliedSelectionChanged Event

 

This notification is triggered when the pickfirst selection set has been modified; that is, for all events that add objects to or remove objects from the set. Events that change the geometry or properties of the objects within the selection set (stretching, moving, and so on) do not trigger this callback.

Links
Message 3 of 8
VB_Autocad_guy
in reply to: wang890

Did you ever figure it out? I'd be curious to know how you did it? 

Do you mind posting some code? 

Message 4 of 8
Jeff_M
in reply to: wang890

Hi Bob,

Some initial testing shows that this can work, for the most part. Ran out of time to track down why the AddedObjects ObjectId collection is still populated when the user hits ESC.


///Sample code to trap adding an object to the PickFirstSelectionset.
///Works across multiple drawings. Not sure, yet, how to handle when the user clears
///the PickFirstSS by hitting ESC. Did not test for manual removal by SHIFT+Pick.
///Jeff Mishler, Feb 2012

using System.Linq;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;

namespace PaletteTest
{
    public class PaletteTest : IExtensionApplication
    {
        static PaletteTestPalette palette;
        static Document doc_palettetest;
        static Editor ed_palettetest;

        public void Initialize()
        {
            palette = new PaletteTestPalette();
            if (palette.Visible)
                palette.ToggleVisibility();
            doc_palettetest = Application.DocumentManager.MdiActiveDocument;
            ed_palettetest = doc_palettetest.Editor;
            ed_palettetest.SelectionAdded += new SelectionAddedEventHandler(ed_SelectionAdded);
        }

        static void DocumentManager_DocumentToBeDeactivated(object sender, DocumentCollectionEventArgs e)
        {
            ed_palettetest.SelectionAdded -= new SelectionAddedEventHandler(ed_SelectionAdded);
        }

        static void DocumentManager_DocumentActivated(object sender, DocumentCollectionEventArgs e)
        {
            doc_palettetest = Application.DocumentManager.MdiActiveDocument;
            ed_palettetest = doc_palettetest.Editor;
            ed_palettetest.SelectionAdded += new SelectionAddedEventHandler(ed_SelectionAdded);
        }

        public void Terminate()
        {
        }

        static void ed_SelectionAdded(object sender, SelectionAddedEventArgs e)
        {
            if (palette.Visible && e.Flags == SelectionFlags.PickfirstSet)
            {
                
                ObjectId id = e.AddedObjects.GetObjectIds().Last();
                using (Transaction tr = doc_palettetest.Database.TransactionManager.StartTransaction())
                {
                    Entity ent = (Entity)tr.GetObject(id, OpenMode.ForRead);
                    palette.thiscontrol.TextValue = "You selected a: " + id.ObjectClass.DxfName;
                    tr.Commit();
                }
            }
        }
        [CommandMethod("PaletteTest", CommandFlags.Session)]
        public static void palettetestcommand()
        {
            Application.DocumentManager.DocumentActivated += new DocumentCollectionEventHandler(DocumentManager_DocumentActivated);
            Application.DocumentManager.DocumentToBeDeactivated += new DocumentCollectionEventHandler(DocumentManager_DocumentToBeDeactivated);
            palette.ToggleVisibility();
        }
    }
}

 

 

Jeff_M, also a frequent Swamper
EESignature
Message 5 of 8
wang890
in reply to: Jeff_M

thanks jeff

 

i got it working now after finding out this pdf:

 

CP205-2_Mike_Tuersley.pdf

 

pretty good.

 

keeping your code as a future reference.

Stantec
Dell Precision 5530, Prism M320PU, C3D 14/17/19
Message 6 of 8
svs.teja2009
in reply to: wang890

If possible can you share the code present inside 

PaletteTestPalette..
Message 7 of 8
wang890
in reply to: wang890

Hey
It's been a while. I don't think I ever created this program, got busy just doing work. I don't even remember posting this lol. Not so much programming for me now just using some of the programs I made for work all the time. This particular one I never really figure it out. Maybe someone else can post a full working sample.
Stantec
Dell Precision 5530, Prism M320PU, C3D 14/17/19
Message 8 of 8
Jeff_M
in reply to: svs.teja2009

@svs.teja2009, welcome to the forums!

 

Here is some sample code that was used for that. Note that it calls for a user control, all it is is a control with a Text box.

 

using Autodesk.AutoCAD.Windows;

namespace PaletteTest
{
    public class PaletteTestPalette
    {
        static PaletteSet m_testpalette;
        public PaletteTestControl m_palettetestcontrol;
               
        public PaletteTestPalette()
        {
            m_palettetestcontrol = new PaletteTestControl();
        }

        public void Show()
        {
            if (m_testpalette == null)
            {
                m_testpalette = new PaletteSet("PaletteTest", new System.Guid("A6FAB3F0-BC82-4909-8CC7-686BE1110AF6"));
                m_testpalette.Style =
                  PaletteSetStyles.ShowAutoHideButton;
                m_testpalette.Add("Palette Test 1", m_palettetestcontrol);
                m_testpalette.Name = "PaletteTest";
                m_testpalette.StateChanged += new PaletteSetStateEventHandler(m_testpalette_StateChanged);
            }
            m_testpalette.Visible = true;            
        }

        void m_testpalette_StateChanged(object sender, PaletteSetStateEventArgs e)
        {
            m_testpalette.DockEnabled = DockSides.None;
            m_testpalette.Dock = DockSides.None;
            m_testpalette.MinimumSize = new System.Drawing.Size(500, 440);
            m_testpalette.Size = new System.Drawing.Size(560, 500);
            m_testpalette.Location = new System.Drawing.Point(500, 240);
            m_testpalette.Size = new System.Drawing.Size(500, 440);
            m_testpalette.StateChanged -= new PaletteSetStateEventHandler(m_testpalette_StateChanged);
        }

        public bool Visible
        {
            get { return (m_testpalette == null) ? false : m_testpalette.Visible; }
        }

        public void ToggleVisibility()
        {
            if (Visible)
                m_testpalette.Visible = false;
            else
                Show();
        }
        public void Close()
        {
            m_testpalette.Visible = false;
            m_testpalette.Dispose();
            m_testpalette = null;
        }
    }
}
Jeff_M, also a frequent Swamper
EESignature

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk DevCon in Munich May 28-29th


Autodesk Design & Make Report

”Boost