Author Topic: Osnap Palette  (Read 1833 times)

0 Members and 1 Guest are viewing this topic.

Offline (gile)

  • C#
  • *
  • Posts: 87
  • Karma: +8/-0
  • Gender: Male
    • prefered language: F
    • Prog expertise: Good
    • View Profile
Osnap Palette
« on: November 21, 2010, 11:00:48 PM »
Hi,

The _osnap dialog box as a palette



The 'OsPalette' class where the OSPALETTE command (to show the palette) is defined.
Code: [Select]
    using System;
    using Autodesk.AutoCAD.Runtime;
    using Autodesk.AutoCAD.Windows;

    namespace OsnapPalette
    {
        public class OsPalette
        {
            static PaletteSet ps;
            internal static OsmodeControl osmCtrl;

            public OsPalette()
            {
                osmCtrl = new OsmodeControl();
            }

            public void Show()
            {
                if (ps == null)
                {
                    ps = new PaletteSet("OSPALETTE", new Guid("{379AD059-A26C-4a3b-A05C-313A799D48CA}"));
                    ps.Style =
                      PaletteSetStyles.ShowPropertiesMenu |
                      PaletteSetStyles.ShowAutoHideButton |
                      PaletteSetStyles.ShowCloseButton;
                    ps.Name = "Accrochages aux objets";
                    ps.MinimumSize = new System.Drawing.Size(300, 340);
                    ps.Add("Accrobj", osmCtrl);
                }
                ps.Visible = true;
            }

            [CommandMethod("OSPALETTE")]
            public void Accobj()
            {
                this.Show();
            }
        }
    }

The 'OsmodeControl' class
Code: [Select]
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using Autodesk.AutoCAD.ApplicationServices;
    using AcAp = Autodesk.AutoCAD.ApplicationServices.Application;
    using AcAs = Autodesk.AutoCAD.ApplicationServices;

    namespace OsnapPalette
    {
        public partial class OsmodeControl : UserControl
        {
            private Dictionary<int, CheckBox> modes = new Dictionary<int, CheckBox>();

            public OsmodeControl()
            {
                InitializeComponent();
                modes.Add(1, this.chkEnd);
                modes.Add(2, this.chkMid);
                modes.Add(4, this.chkCen);
                modes.Add(8, this.chkNod);
                modes.Add(16, this.chkQua);
                modes.Add(32, this.chkInt);
                modes.Add(64, this.chkIns);
                modes.Add(128, this.chkPer);
                modes.Add(256, this.chkTan);
                modes.Add(512, this.chkNea);
                modes.Add(2048, this.chkPrj);
                modes.Add(4096, this.chkExt);
                modes.Add(8192, this.chkPar);
                InitCheckBoxes();
                AcAp.SystemVariableChanged +=
                    new AcAs.SystemVariableChangedEventHandler(AcAp_SysvarChanged);
            }

            void AcAp_SysvarChanged(object sender, AcAs.SystemVariableChangedEventArgs e)
            {
                if (e.Name == "OSMODE" || e.Name == "AUTOSNAP")
                    InitCheckBoxes();
            }

            private void InitCheckBoxes()
            {
                short osmode = (short)AcAp.GetSystemVariable("OSMODE");
                foreach (KeyValuePair<int, CheckBox> pair in modes)
                {
                    pair.Value.Checked = (osmode & pair.Key) == pair.Key;
                }
                this.chkF3.Checked = (osmode & 16384) == 0;
                this.chkF11.Checked = (((short)AcAp.GetSystemVariable("AUTOSNAP")) & 16) == 16;
            }

            private void cmdAll_Click(object sender, EventArgs e)
            {
                foreach (KeyValuePair<int,CheckBox> pair in modes)
                {
                    pair.Value.Checked = true;
                }
            }

            private void cmdNone_Click(object sender, EventArgs e)
            {
                foreach (KeyValuePair<int, CheckBox> pair in modes)
                {
                    pair.Value.Checked = false;
                }
            }

            private void OsmodeControl_MouseLeave(object sender, EventArgs e)
            {
                Document doc = AcAp.DocumentManager.MdiActiveDocument;
                int autosnap = (short)AcAp.GetSystemVariable("AUTOSNAP");
                autosnap = chkF11.Checked ? autosnap | 16 : autosnap - (autosnap & 16);
                int osmode = 0;
                foreach (KeyValuePair<int,CheckBox> pair in modes)
                {
                    if (pair.Value.Checked)
                        osmode += pair.Key;
                }
                if (!chkF3.Checked)
                    osmode += 16384;
                using (DocumentLock docLock = doc.LockDocument())
                {
                    AcAp.SetSystemVariable("OSMODE", osmode);
                    AcAp.SetSystemVariable("AUTOSNAP", autosnap);
                }
            }
        }
    }

target audience:{intermediate}

Offline Patriiick

  • Administrator
  • *****
  • Posts: 130
  • Karma: +1/-0
  • Gender: Male
    • prefered language: VB
    • Prog expertise: Good
    • View Profile
  • Twitter: @Patriiick
Re: Osnap Palette
« Reply #1 on: November 22, 2010, 12:57:46 PM »
Talking about automatic conversion from C# to VB, here is the result for the OSPALETTE class using this tool:

Code: [Select]
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Windows

Namespace OsnapPalette
Public Class OsPalette
Shared ps As PaletteSet
Friend Shared osmCtrl As OsmodeControl

Public Sub New()
osmCtrl = New OsmodeControl()
End Sub

Public Sub Show()
If ps Is Nothing Then
ps = New PaletteSet("OSPALETTE", New Guid("{379AD059-A26C-4a3b-A05C-313A799D48CA}"))
ps.Style = PaletteSetStyles.ShowPropertiesMenu Or PaletteSetStyles.ShowAutoHideButton Or PaletteSetStyles.ShowCloseButton
ps.Name = "Accrochages aux objets"
ps.MinimumSize = New System.Drawing.Size(300, 340)
ps.Add("Accrobj", osmCtrl)
End If
ps.Visible = True
End Sub

<CommandMethod("OSPALETTE")> _
Public Sub Accobj()
Me.Show()
End Sub
End Class
End Namespace

Offline fixo

  • Full Member
  • ***
  • Posts: 135
  • Karma: +4/-0
  • Gender: Male
    • prefered language: C
    • Prog expertise: Good
    • View Profile
Re: Osnap Palette
« Reply #2 on: May 31, 2013, 10:44:10 AM »
Hi Gilles,
Check please if chkf11 and chkf3 was defined in your code
Regards,
Oleg