在AutoCAD的.NET API中,PaletteSet
对象(例如上述代码中的ps
)还可以进行停靠操作。调用与Dock
相关的方法通常会将调色板集停靠到应用程序主窗口的特定区域或边缘。
cs
Autodesk.AutoCAD.Windows.PaletteSet ps = new PaletteSet("宗地属性面板");
ps.Dock(Autodesk.AutoCAD.Windows.DockSides.Left); // 将调色板集停靠在主窗口的左侧
DockSides
枚举提供了几个选项来指定停靠的位置,包括Left、Right、Top和Bottom等。
ps.DockEnabled
属性
cs
ps.DockEnabled = true; // 允许调色板集进行停靠
cs
ps.DockEnabled = false; // 禁止调色板集进行停靠
cs
public static void DoIt()
{
if (ps==null)
{
//use constructor with Guid so that we can save/load user data
ps = new Autodesk.AutoCAD.Windows.PaletteSet("Test Palette Set",new Guid("63B8DB5B-10E4-4924-B8A2-A9CF9158E4F6"));
ps.Load+=new Autodesk.AutoCAD.Windows.PalettePersistEventHandler(ps_Load);
ps.Save+=new Autodesk.AutoCAD.Windows.PalettePersistEventHandler(ps_Save);
ps.Style = Autodesk.AutoCAD.Windows.PaletteSetStyles.NameEditable |
Autodesk.AutoCAD.Windows.PaletteSetStyles.ShowPropertiesMenu |
Autodesk.AutoCAD.Windows.PaletteSetStyles.ShowAutoHideButton |
Autodesk.AutoCAD.Windows.PaletteSetStyles.ShowCloseButton;
ps.MinimumSize = new System.Drawing.Size(300,300);
ps.Add("Test Palette 1", new TestControl());
}
bool b = ps.Visible;
ps.Visible = true;
Autodesk.AutoCAD.EditorInput.Editor e = AcadApp.DocumentManager.MdiActiveDocument.Editor;
Autodesk.AutoCAD.EditorInput.PromptResult res = e.GetKeywords("Select a palette set option:","Opacity","TitleBarLocation","Docking");
if (res.Status == Autodesk.AutoCAD.EditorInput.PromptStatus.OK)
{
switch (res.StringResult)
{
case "Opacity":
Autodesk.AutoCAD.EditorInput.PromptIntegerResult resInt;
do
{
resInt = e.GetInteger("Enter opacity:");
if (resInt.Status != Autodesk.AutoCAD.EditorInput.PromptStatus.OK)
break;
if (resInt.Value>=0 && resInt.Value<=100)
break;
e.WriteMessage("Opacity must be between 0 and 100\n");
}
while (true);
ps.Opacity = resInt.Value;
break;
case "TitleBarLocation":
res = e.GetKeywords("Select titlebar location:","Left","Right");
if (res.Status == Autodesk.AutoCAD.EditorInput.PromptStatus.OK)
switch (res.StringResult)
{
case "Left":
ps.TitleBarLocation = Autodesk.AutoCAD.Windows.PaletteSetTitleBarLocation.Left;
break;
case "Right":
ps.TitleBarLocation = Autodesk.AutoCAD.Windows.PaletteSetTitleBarLocation.Right;
break;
}
break;
case "Docking":
{
res = e.GetKeywords("Choose a docking option:","None","Left","Right","Top","Bottom");
if (res.Status == Autodesk.AutoCAD.EditorInput.PromptStatus.OK)
{
switch (res.StringResult)
{
case "None":
ps.Dock = Autodesk.AutoCAD.Windows.DockSides.None;
break;
case "Left":
ps.Dock = Autodesk.AutoCAD.Windows.DockSides.Left;
break;
case "Right":
ps.Dock = Autodesk.AutoCAD.Windows.DockSides.Right;
break;
case "Top":
ps.Dock = Autodesk.AutoCAD.Windows.DockSides.Top;
break;
case "Bottom":
ps.Dock = Autodesk.AutoCAD.Windows.DockSides.Bottom;
break;
}
}
break;
}
}
}
}
程序解读
这段C#代码定义了一个名为DoIt
的静态公共方法,其功能是在AutoCAD环境中创建、显示并根据用户交互调整一个调色板集(PaletteSet)的属性。以下是详细解读:
-
首先检查变量
ps
是否为null,如果是,则初始化一个新的Autodesk.AutoCAD.Windows.PaletteSet
对象,名称为"Test Palette Set",并关联一个Guid以保存和加载用户数据。 -
为调色板集注册两个事件处理器
ps_Load
和ps_Save
,分别用于在调色板集加载和保存时触发。 -
设置调色板集的样式,包括允许编辑名称、显示属性菜单、自动隐藏按钮和关闭按钮。
-
设置调色板集的最小尺寸为300x300像素,并向其中添加一个名为"Test Palette 1"的新控件(类型为
TestControl
)。 -
检查并确保调色板集可见(如果之前被隐藏,则将其设置为可见)。
-
获取当前活动文档的编辑器对象。
-
显示一个提示对话框,让用户选择调色板集的一个选项:"Opacity"、"TitleBarLocation"或"Docking"。
-
根据用户选择的选项执行以下操作:
- 如果选择"Opacity",则循环获取用户输入的整数作为不透明度值(介于0到100之间),并将该值应用于调色板集的不透明度属性。
- 如果选择"TitleBarLocation",再次提示用户从"Left"或"Right"中选择标题栏位置,并相应地设置调色板集的标题栏位置。
- 如果选择"Docking",则提示用户选择停靠位置,并根据用户的选择将调色板集停靠在主窗口的左侧、右侧、顶部、底部或无停靠。
总之,这个方法是一个完整的调色板集管理单元,负责创建、展示以及根据用户的实时反馈来修改调色板集的各种视觉和布局特性。