找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1041|回复: 1

[分享] Osnap Palette

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-6-7 03:09:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
    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();
            }
        }
    }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

 楼主| 发表于 2014-6-7 03:10:11 | 显示全部楼层
    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);
                }
            }
        }
    }

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-22 23:16 , Processed in 0.164219 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表