-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathHatchTools.cs
More file actions
163 lines (159 loc) · 6.42 KB
/
Copy pathHatchTools.cs
File metadata and controls
163 lines (159 loc) · 6.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
using System;
using System.Runtime.InteropServices;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Colors;
using Autodesk.AutoCAD.DatabaseServices;
using System.Security;
namespace DotNetARX
{
/// <summary>
/// 渐变色填充的图案名称
/// </summary>
public enum HatchGradientName
{
/// <summary>
/// 线状渐变
/// </summary>
Linear,
/// <summary>
/// 圆柱状渐变
/// </summary>
Cylinder,
/// <summary>
/// 反圆柱状渐变
/// </summary>
Invcylinder,
/// <summary>
/// 球状渐变
/// </summary>
Spherical,
/// <summary>
/// 反球状渐变
/// </summary>
Invspherical,
/// <summary>
/// 半球状渐变
/// </summary>
Hemisperical,
/// <summary>
/// 反半球状渐变
/// </summary>
InvHemisperical,
/// <summary>
/// 抛物面状渐变
/// </summary>
Curved,
/// <summary>
/// 反抛物面状渐变
/// </summary>
Incurved
}
/// <summary>
/// 填充图案选项板类
/// </summary>
public class HatchPalletteDialog
{
[SuppressUnmanagedCodeSecurity]
[DllImport("acad.exe", EntryPoint = "?acedHatchPalletteDialog@@YA_NPB_W_NAAPA_W@Z", CharSet = CharSet.Auto)]
static extern bool acedHatchPalletteDialog(string currentPattern, bool showCustom, out IntPtr newPattern);
private string pattern;//用于存储用户选择的填充图案名称
/// <summary>
/// 是否显示自定义标签
/// </summary>
public bool ShowCustom { get; set; }
/// <summary>
/// 获取用户选择的填充图案名称
/// </summary>
/// <returns>返回填充图案名称</returns>
public string GetPattern()
{
return pattern;
}
/// <summary>
/// 构造函数,在填充图案选项板中显示自定义标签
/// </summary>
public HatchPalletteDialog()
{
ShowCustom = true;//显示自定义标签
}
/// <summary>
/// 显示填充图案选项板
/// </summary>
/// <returns>如果用户选择了填充图案,则返回true,否则返回false</returns>
public bool ShowDialog()
{
IntPtr ptr;//用户选择的
//显示填充图案选项板
bool isOK=acedHatchPalletteDialog(HatchTools.CurrentPattern, ShowCustom, out ptr);
if (!isOK) return false;//如果用户未选择填充图案,返回false
//用户选择了填充图案,通过指针获得图案名称并将其置为当前名称
pattern = HatchTools.CurrentPattern = Marshal.PtrToStringAuto(ptr);
return true;
}
}
/// <summary>
/// 填充操作类
/// </summary>
public static class HatchTools
{
/// <summary>
/// 设置或读取默认填充图案,其名称最多可包含 34 个字符,其中不能有空格。
/// </summary>
public static string CurrentPattern
{
//获取HPNAME系统变量值,它表示默认的填充图案名
get { return Application.GetSystemVariable("HPNAME").ToString(); }
set
{
//如果要设置的值符合填充图案名,则设置HPNAME系统变量值
if (value.Length <= 34 && !value.Contains(" ") && !value.IsNullOrWhiteSpace() && value != CurrentPattern)
Application.SetSystemVariable("HPNAME", value);
}
}
/// <summary>
/// 创建图案填充
/// </summary>
/// <param name="hatch">填充对象</param>
/// <param name="patternType">填充图案类型</param>
/// <param name="patternName">填充图案名</param>
/// <param name="associative">填充是否与边界关联</param>
public static void CreateHatch(this Hatch hatch, HatchPatternType patternType, string patternName, bool associative)
{
Database db=HostApplicationServices.WorkingDatabase;
hatch.SetDatabaseDefaults();//设置填充的默认值
//设置填充的类型和填充图案名
hatch.SetHatchPattern(patternType, patternName);
db.AddToModelSpace(hatch);//将填充添加到模型空间
//设置填充与边界是否关联
hatch.Associative = associative ? true : false;
}
/// <summary>
/// 创建渐变色填充
/// </summary>
/// <param name="hatch">填充对象</param>
/// <param name="gradientName">渐变色填充的图案名称</param>
/// <param name="color1">渐变色填充的起始颜色</param>
/// <param name="color2">渐变色填充的结束颜色</param>
/// <param name="associative">填充是否与边界关联</param>
public static void CreateGradientHatch(this Hatch hatch, HatchGradientName gradientName, Color color1, Color color2, bool associative)
{
//设置渐变色填充的类型所代表的字符串,用于将HatchGradientName枚举转换为对应的字符串
string[] gradientNames=new string[] { "Linear","Cylinder","Invcylinder","Spherical",
"Invspherical","Hemisperical","InvHemisperical","Curved","Incurved"};
Database db=HostApplicationServices.WorkingDatabase;
hatch.SetDatabaseDefaults();//设置填充的默认值
//设置填充的类型为渐变色填充
hatch.HatchObjectType = HatchObjectType.GradientObject;
//设置渐变色填充的类型和图案名称
hatch.SetGradient(GradientPatternType.PreDefinedGradient, gradientNames[(int)gradientName]);
//新建两个Color类对象,分别表示渐变色填充的起始和结束颜色
GradientColor gColor1=new GradientColor(color1, 0);
GradientColor gColor2=new GradientColor(color2, 1);
//设置渐变色填充的起始和结束颜色
hatch.SetGradientColors(new GradientColor[] { gColor1, gColor2 });
db.AddToModelSpace(hatch);//将填充添加到模型空间
//设置填充与边界是否关联
hatch.Associative = associative ? true : false;
}
}
}