NShape(矢量图形编辑器) 入门(一)
NShape是基于.Net平台下的一款开源的winforms图表设计框架,使用C#编写。NShape允许用户查看、注释,修改和创建流程图、接线图或项目图等图表。Nshape有一个双重许可证,允许它在开源项目中免费使用,在商业项目中则需要支付许可证费用。
软件获取
- CodePlex网站
- GitHub
安装
1.解压文件后,进入安装目录下
Source
文件夹,打开
NShape.sln
工程文件,编译工程文件。
2.新建一个文件夹,将编译文件后获得的dll文件存放于此。
3.启动Visual Studio,将
Dataweb.NShape.dll
,
Dataweb.NShape.WinFormsUI.dll
添加到工具箱,添加dll控件教程见:Visual Studio 添加dll控件。
创建一个NShape桌面应用程序
1.新建一个Visual C# Window 窗体应用程序,命名为
BaseNShapeApplication
。
! NShape项目要求使用完整的 .Net Framework 版本,如果项目是使用 .Net Framework Client 版本,请切换成完整版。
2.添加如下引用:
Dataweb.NShape.dll
,
Dataweb.NShape.WinFormsUI.dll
,
Dataweb.NShape.GeneralShapes
。
3.在winForm窗口内添加
MenuStrip
控件,于控件内添加文件打开子集。
4.继续往窗体内添加以下控件:
Display
,
Project
,
DiagramSetController
,
CachedRepository
,
XmlStore
控件,设置
Display
控件
Dock
属性为为
Fill
,随后按照以下顺序对控件进行关联绑定操作:
5.双击窗体标题栏进入
Form1_Load
方法,添加代码:
private void Form1_Load(object sender, EventArgs e)
{
project1.LibrarySearchPaths.Add(Application.StartupPath);
project1.AutoLoadLibraries = true;
/* NShape保存格式文件".nspj"会存储GeneralShapes控件标识,版本信息.
* 因此如果不进行注册的话,会无法打开不同版本时期创建的文件。
* 其中NShape Demo文件大部分均为1.0.0.0 - 2.0.0.0时期文件,因此建议提前注册。*/
project1.AddLibrary(typeof(Ellipse).Assembly, false);
project1.AutoGenerateTemplates = true;
//在新建project1对象时,必须为其添加名称,默认project对象不会生成名称,但却需要名称。
project1.Name = "New Templet";
project1.Create();
display1.CreateDiagram("Diagram 1");
}
完成后运行程序会得到以下界面:
6.双击菜单栏下
打开
选项,进入
打开ToolStripMenuItem_Click
方法,添加代码:
private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog openfileDialog = new OpenFileDialog();
openfileDialog.Filter = "*.nspj|*.nspj";
if (openfileDialog.ShowDialog() == DialogResult.OK)
{
//在打开新文件前需要先关闭原先打开的对象
if(project1.IsOpen)
{
project1.Close();
}
FileInfo fileInfo = new FileInfo(openfileDialog.FileName);
xmlStore1.DirectoryName = fileInfo.DirectoryName;
xmlStore1.FileExtension = fileInfo.Extension.TrimStart('.');
project1.Name = fileInfo.Name.Replace(fileInfo.Extension, "");
project1.Open();
//NShape程序允许存在多个Diagrams对象,但只能显示其中一个。本Demo默认显示第一个对象。
var diagrams = project1.Repository.GetDiagrams();
foreach (var item in diagrams)
{
display1.Diagram = item;
break;
}
}
}
完成后运行程序可以得到以下界面: