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.
Solved! Go to Solution.
Solved by Jeff_M. Go to Solution.
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.
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.
Did you ever figure it out? I'd be curious to know how you did it?
Do you mind posting some code?
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(); } } }
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.
@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; } } }