250 Commits

Author SHA1 Message Date
艾竹
940512589c 思维导图修改成回车新增子节点 2023-05-03 23:42:34 +08:00
艾竹
071490f5ee update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-05-03 14:14:53 +00:00
艾竹
5c21e97caa update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-05-03 14:14:07 +00:00
艾竹
ce69c85b6b update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-05-03 14:11:15 +00:00
艾竹
96f10c2cb0 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-05-03 14:08:55 +00:00
艾竹
6ab92947a2 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-05-03 14:01:21 +00:00
艾竹
88953fe4b6 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-05-03 13:56:38 +00:00
艾竹
28af997749 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-05-03 13:55:34 +00:00
艾竹
cc65902b02 Image 2023-05-03 21:54:36 +08:00
艾竹
40b935ed03 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-05-03 13:54:23 +00:00
艾竹
107c88ff0e update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-05-03 13:50:29 +00:00
艾竹
f2580bcdfa Merge branch 'master' of https://gitee.com/akwkevin/aistudio.-wpf.-diagram 2023-05-03 21:48:49 +08:00
艾竹
7e66a5a6a3 Images 2023-05-03 21:48:42 +08:00
艾竹
656722e04c update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-05-03 13:45:07 +00:00
艾竹
ea2e2f45dd ReadMe的Image移动到文件夹下 2023-05-03 21:44:20 +08:00
艾竹
9902ca2af2 新建 Images 2023-05-03 13:39:58 +00:00
艾竹
c877192b1d 重命名 editor.png.png 为 editor.png 2023-05-03 13:38:14 +00:00
艾竹
10679295c0 小调整 2023-05-03 20:29:12 +08:00
艾竹
07bf962aa4 PortlessLinks Demo调整 2023-05-03 19:02:37 +08:00
艾竹
b9210cb6d9 修复demo中彩色节点的bug 2023-05-03 18:35:01 +08:00
艾竹
c462d110ff 动画支持形状定义demo 2023-05-03 17:14:47 +08:00
艾竹
c135a7f144 删除废弃的两个item 2023-05-03 16:07:02 +08:00
艾竹
6b13f51814 部分连接线完成,另外待连接点红色区域显示。 2023-05-03 16:00:34 +08:00
艾竹
ed22b9daa3 可以把连线从节点上拖下来,并且依附上去。 2023-05-03 13:28:16 +08:00
艾竹
1536e5018d 部分连接线拖拽完成 2023-05-03 09:59:46 +08:00
艾竹
6de36f2473 连线优化1:开始和结束节点。 2023-05-02 17:28:16 +08:00
艾竹
06c3ddde7e 连接点显示 2023-05-02 14:28:51 +08:00
艾竹
f52895a8a8 Merge branch 'master' of https://gitee.com/akwkevin/aistudio.-wpf.-diagram 2023-05-02 08:31:17 +08:00
艾竹
a66e9239fe 更新一下dll 2023-05-02 08:31:01 +08:00
艾竹
f73dd637ee update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-05-01 16:04:01 +00:00
艾竹
36c5b956c3 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-05-01 16:00:33 +00:00
艾竹
6fa78893ee popup支持设置大小 2023-05-01 23:07:19 +08:00
艾竹
508de7a7d9 C# 脚本模块正式发布 2023-05-01 21:40:41 +08:00
艾竹
4a1fc12c52 动画完成 2023-05-01 13:17:26 +08:00
艾竹
48555edbc6 支持动画使用不同的形状 2023-05-01 00:10:55 +08:00
艾竹
4a3f278a97 线条动画支持大小切换 2023-04-29 18:36:50 +08:00
艾竹
f4268b9fc2 为线的动画做扩展准备 2023-04-29 15:29:22 +08:00
艾竹
7d8b19e4e0 Connector 错误处理 2023-04-26 22:53:44 +08:00
艾竹
48314acbd5 连接线 2023-04-25 23:07:25 +08:00
艾竹
aa8ab61e37 调整一下删除拷贝,我也不记得之前为啥这样写了。 2023-04-24 22:43:56 +08:00
艾竹
dea5a5341c !3 connect
Merge pull request !3 from 艾竹/dev
2023-04-24 13:49:47 +00:00
kwai
d38f11e758 connect 2023-04-24 20:10:17 +08:00
艾竹
e5d187d8c8 If 2023-04-23 22:44:15 +08:00
艾竹
1cef64c7c8 开发中的功能注释掉 2023-04-23 21:45:08 +08:00
艾竹
997ccde257 !2 自动合并
Merge pull request !2 from 艾竹/dev
2023-04-23 08:45:25 +00:00
艾竹
fe8ecdfc32 !1 C# retrieving the com class factory 80040154
Merge pull request !1 from 艾竹/master
2023-04-23 08:43:51 +00:00
艾竹
9a39d6caf8 Merge branch 'dev' of gitee.com:akwkevin/aistudio.-wpf.-diagram into master
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-04-23 08:43:34 +00:00
”Jabin章志朋“
af5ac77496 test zzpaaa 2023-04-23 16:39:37 +08:00
”Jabin章志朋“
ff012a1380 test txt 2023-04-23 16:33:53 +08:00
”Jabin章志朋“
f7f05a002f Merge branch 'master' of https://gitee.com/akwkevin/aistudio.-wpf.-diagram 2023-04-23 16:29:04 +08:00
”Jabin章志朋“
3605ce9223 AIStudio.Wpf.DiagramDesigner的UserControls文件夹下的DiagramControl的201行添加基础图形上下左右按钮控件 2023-04-23 16:25:01 +08:00
艾竹
bd1741b572 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-04-23 07:52:02 +00:00
”Jabin章志朋“
77932a4175 test git demo 2023-04-23 15:07:31 +08:00
艾竹
13cede06cf 1.1.4 2023-04-22 22:40:41 +08:00
艾竹
5963c2c29f 1.1.1 2023-04-22 21:08:01 +08:00
艾竹
21467e26f5 1.1.1 2023-04-22 21:06:52 +08:00
艾竹
dfc299689a Demos 2023-04-22 12:41:26 +08:00
艾竹
87f31fa79d Demos 2023-04-22 12:41:15 +08:00
艾竹
f8340b5885 添加逻辑节点支持字符串值 2023-04-19 22:26:04 +08:00
艾竹
451df2d5de 控件重名冲突 2023-04-18 22:38:20 +08:00
艾竹
033bebb6bc 支持到6.0 2023-04-16 23:32:55 +08:00
艾竹
81f91f3f35 项目结构调整 2023-04-16 20:11:40 +08:00
艾竹
cbfbf96033 Boundary画线算法,精度导致的问题修复 2023-04-16 14:56:53 +08:00
艾竹
4b8a03afb6 审批序列化 2023-04-16 12:21:51 +08:00
艾竹
5dee3a9907 修复一个sfc的bug 2023-04-16 10:10:12 +08:00
艾竹
f05654309b SFC报错修复 2023-04-15 23:42:36 +08:00
艾竹
488e23ea57 使用设计模式优化一下逻辑图 2023-04-15 23:32:29 +08:00
艾竹
c6bc57140f 查找与替换完成 2023-04-15 21:55:27 +08:00
艾竹
ce2e44fe49 PropertyChanged使用基类的,各个类不在自己定义 2023-04-10 23:08:14 +08:00
艾竹
429d7b1e24 截屏嵌入,查找待优化 2023-04-09 21:48:26 +08:00
艾竹
21009fc383 整理 2023-04-09 18:58:13 +08:00
艾竹
fae7826577 ReDo Undo Item ItemWidth 和 Angle 等工具栏设置完成 2023-04-09 12:38:57 +08:00
艾竹
2ef5b7a1ed 颜色,字体,支持redo undo 2023-04-08 23:38:01 +08:00
艾竹
8ad42aec49 分组,取消分组 ReDo UnDo 整理 2023-04-08 21:48:43 +08:00
艾竹
fa96573cbd 继续整理 2023-04-08 18:08:00 +08:00
艾竹
2edb4ffb14 动画bug修复 2023-04-08 17:28:38 +08:00
艾竹
5e7dd6c5e5 连接线,文本编辑 2023-04-08 14:37:07 +08:00
艾竹
a0485601c1 补充提交 2023-04-08 14:28:51 +08:00
艾竹
78da8f4852 最近精简代码,有些bug,修复 2023-04-08 14:22:12 +08:00
kwai
347488e8e9 xx 2023-04-07 19:21:27 +08:00
艾竹
afea559325 ReDo UnDo 继续 2023-04-06 23:01:18 +08:00
艾竹
e0a26a76d2 整理Redo和Undo命令 2023-04-05 23:40:22 +08:00
艾竹
c513bd0f64 Merge branch 'master' of https://gitee.com/akwkevin/aistudio.-wpf.-diagram 2023-04-05 20:36:23 +08:00
艾竹
5935a58541 mind多个根节点的时候,切换模式的修复 2023-04-05 20:35:10 +08:00
艾竹
eccf798818 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-04-05 03:21:59 +00:00
艾竹
f9b9b0fb2d update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-04-05 02:59:51 +00:00
艾竹
b3f99f5dfd update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-04-05 01:39:15 +00:00
艾竹
0fd8c217f4 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-04-05 01:34:15 +00:00
艾竹
3dc7b25d95 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-04-05 01:15:37 +00:00
艾竹
b04028c893 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-04-05 01:14:51 +00:00
艾竹
88ae871b64 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-04-05 01:12:22 +00:00
艾竹
fccac1da23 几个小bug 2023-04-05 08:57:31 +08:00
艾竹
4c54318b9a bug修复 2023-04-04 22:42:09 +08:00
艾竹
a3fbb2d8ad 序列化bug修复,近期主要修复bug为主 2023-04-02 22:59:22 +08:00
艾竹
7835b422ff 节点导入完成 2023-04-02 21:47:55 +08:00
艾竹
0701f25519 工具栏整理 2023-04-02 12:01:46 +08:00
艾竹
02ebd056b3 xx 2023-03-29 22:55:12 +08:00
艾竹
f80a67ff10 xx 2023-03-29 06:26:16 +08:00
艾竹
ca7abe6fd5 修复一个大bug 2023-03-29 06:26:00 +08:00
艾竹
b4d7f13111 offset修复一半 2023-03-28 23:16:56 +08:00
艾竹
72da084f15 xx 2023-03-28 22:09:24 +08:00
艾竹
43b5d82fae do redo 2023-03-26 23:23:34 +08:00
艾竹
90e94a7ec0 修改内部使用方法,不需要使用页面绑定的命令 2023-03-25 22:29:02 +08:00
艾竹
5e5da021ab mind的拷贝完成 2023-03-25 22:10:49 +08:00
艾竹
b36bd4b228 XX 2023-03-25 11:59:31 +08:00
艾竹
8a2c742ec4 xx 2023-03-24 22:32:42 +08:00
艾竹
5ff4376674 附加信息序列化 2023-03-21 23:08:12 +08:00
艾竹
3c8120aa15 mind集成到diagram app中 2023-03-20 23:01:38 +08:00
kwai
2c6b3cc285 主题还得完善下 2023-03-20 20:23:20 +08:00
艾竹
07ac28965e mind基本完成,准备写文档 2023-03-19 23:26:14 +08:00
艾竹
c2f4d3c706 mind 工具栏 2023-03-19 12:38:08 +08:00
艾竹
8d87f61c07 mind 2023-03-18 22:50:00 +08:00
艾竹
9b3c2633a7 mind 2023-03-18 21:44:58 +08:00
艾竹
d97938cc2b link 2023-03-15 23:05:41 +08:00
kwai
70dac7d41c xx 2023-03-15 19:35:53 +08:00
艾竹
035a725da3 priority 2023-03-13 22:27:00 +08:00
kwai
31872222bc 附加信息准备中 2023-03-13 19:44:30 +08:00
艾竹
414eb28867 工具栏调整下 2023-03-12 23:26:22 +08:00
艾竹
f22d6dd3f1 适应窗口大小完成 2023-03-12 22:47:45 +08:00
艾竹
e2753b0bff 右键拖动画布 2023-03-12 15:26:58 +08:00
艾竹
fb7858fe74 可以切换主题 2023-03-11 22:27:23 +08:00
艾竹
84f413320f 暂存一下 2023-03-11 12:40:44 +08:00
艾竹
5cfb32bb19 mind 工具栏 2023-03-11 10:19:21 +08:00
艾竹
b3c7e1efec mind 2023-03-10 12:09:13 +08:00
艾竹
e4f6335224 mind序列化完善中 2023-03-08 23:02:50 +08:00
kwai
c80923d19c mind 2023-03-08 19:45:07 +08:00
艾竹
f48838f54a Mind 2023-03-07 22:59:27 +08:00
kwai
f042f95ee0 xx 2023-03-07 19:25:19 +08:00
kwai
152c6a8c22 xx 2023-03-06 11:54:41 +08:00
艾竹
cd20abd7fe 可以切换MindType 2023-03-05 23:22:34 +08:00
艾竹
79f4896fbd Mind Editoe 2023-03-05 21:30:53 +08:00
kwai
9061146139 tool 2023-03-03 18:59:02 +08:00
kwai
9966656269 mind 2023-03-01 19:28:06 +08:00
艾竹
84d4035e6d 分离完成 AIStudio.Wpf.DiagramModels 用于对接三分软件的模型 2023-02-28 23:04:16 +08:00
艾竹
a015f9208b Mind准备序列化,准备分离出model库 2023-02-28 22:07:40 +08:00
kwai
511636ebd7 fishbone 2023-02-28 18:53:34 +08:00
艾竹
73176a00d9 这个线有点偏差 2023-02-27 23:18:31 +08:00
kwai
6464cad46e xx 2023-02-27 20:19:08 +08:00
kwai
f8c2115f03 xx 2023-02-27 20:18:58 +08:00
艾竹
298ec29dd9 写不动了,休息。 2023-02-22 23:01:22 +08:00
kwai
3a744ecaf7 xx 2023-02-22 19:50:00 +08:00
艾竹
6d1f2a83fa 调试中 2023-02-21 23:23:03 +08:00
kwai
c227076076 结构调整 2023-02-21 19:47:46 +08:00
艾竹
71ed33f881 mind继续 2023-02-20 23:01:26 +08:00
艾竹
58c18db12f 添加附加信息 2023-02-19 23:20:02 +08:00
艾竹
c053396fa0 mind 两个布局完成 2023-02-19 22:56:47 +08:00
艾竹
ca1ac13a1f mind 有点样子了 2023-02-19 21:38:28 +08:00
艾竹
08a4fddfdc 嗯,自动获取曲线方向 2023-02-16 23:02:43 +08:00
kwai
968adb0635 mind 进行中 2023-02-16 19:21:37 +08:00
艾竹
debd7e711d 内部基础ZoomBox 2023-02-14 22:54:55 +08:00
艾竹
3ef7434f5b ZoomBox 完成 2023-02-14 22:15:19 +08:00
艾竹
38cb0fae85 暂存一下 2023-02-14 21:55:42 +08:00
kwai
d6e84d40c0 临时提交 2023-02-14 18:58:26 +08:00
艾竹
dfe76438c2 ZoomBox待完成,还需要调整 2023-02-13 22:50:50 +08:00
艾竹
4d36eac218 Mind 出发 2023-02-12 21:30:16 +08:00
艾竹
934357c87c 发布1.0.7 2023-02-12 16:06:28 +08:00
艾竹
2f3b622c4c Merge branch 'master' of https://gitee.com/akwkevin/aistudio.-wpf.-diagram 2023-02-12 15:46:58 +08:00
艾竹
1c03c0f055 性能问题优化 2023-02-12 15:46:44 +08:00
艾竹
4d2c7a282a update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-02-12 07:26:25 +00:00
艾竹
bd6c8ad223 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-02-12 07:25:35 +00:00
艾竹
da2d8cd9b3 描述修改 2023-02-12 11:07:21 +08:00
艾竹
98392f377b 事件Demo完成 2023-02-12 11:02:20 +08:00
艾竹
8a50854868 继续 2023-02-12 09:26:27 +08:00
艾竹
f99fd93b3f 使用物理尺寸进行设置 2023-02-11 23:51:48 +08:00
艾竹
59bfed341d 实际尺寸之间转换 2023-02-11 22:20:24 +08:00
艾竹
86082cb788 修复旋转放大后 画线的问题 2023-02-11 10:03:06 +08:00
艾竹
a928ae1ddd Merge branch 'master' of https://gitee.com/akwkevin/aistudio.-wpf.-diagram 2023-02-11 09:08:41 +08:00
艾竹
9ea83dda6f 来一个旋转Group 2023-02-10 21:59:12 +08:00
kwai
cf1bfc7482 group 和 line 优化 2023-02-10 18:49:02 +08:00
艾竹
18b6bd7e71 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-02-09 04:06:25 +00:00
艾竹
2a3004a9c6 更新控件库 2023-02-05 22:50:09 +08:00
艾竹
09b3ec41de update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-02-05 14:49:04 +00:00
艾竹
d53cd2bd6a update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-02-05 13:39:16 +00:00
艾竹
f5bca4d87d update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-02-05 13:35:24 +00:00
艾竹
b40fb78c70 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-02-05 12:43:10 +00:00
艾竹
e2a65ff57f update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-02-05 12:40:59 +00:00
艾竹
c1d4c5c58f update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-02-05 12:28:10 +00:00
艾竹
24c392a8a4 update README.md.
Signed-off-by: 艾竹 <akwkevin@126.com>
2023-02-05 12:27:44 +00:00
艾竹
69c56c681b 引入一个查找元素的类 2023-02-05 18:54:39 +08:00
艾竹
9ccbfb7760 放大缩小 2023-02-05 10:36:13 +08:00
艾竹
7f5bea55a8 背景为渐变色的示例 2023-02-04 20:59:01 +08:00
艾竹
5b513370ff 快捷键支持 2023-02-04 20:21:18 +08:00
艾竹
285c015e83 快捷键实现 2023-02-04 16:51:22 +08:00
艾竹
e8f91abd68 内部连接点示例 2023-02-04 16:38:56 +08:00
艾竹
0d6debe87f 删除多余的 2023-02-04 12:19:08 +08:00
艾竹
bf5717cf25 箭头bug修复 2023-02-04 12:17:03 +08:00
艾竹
8bec9b446f 暂时存一版 2023-02-04 11:16:39 +08:00
艾竹
848121ffa2 修改逻辑图 动画时间可修改待处理 2023-02-03 23:07:57 +08:00
艾竹
da8cf08051 小优化 2023-02-03 22:36:08 +08:00
艾竹
bd90d55ca8 组合对象完成 2023-02-03 22:25:03 +08:00
kwai
2fde666182 支持多个node保存到工具栏,显示还有点问题。 2023-02-03 18:23:53 +08:00
艾竹
397ebcfac2 自定义group完成 2023-02-02 23:00:36 +08:00
艾竹
527dbd98e4 彩色连接点完成 2023-02-01 23:05:56 +08:00
艾竹
50eab5e091 分离逻辑与常规连接点 2023-01-31 22:45:50 +08:00
艾竹
5ee0c1ce26 可以自定义连接点 2023-01-29 22:54:06 +08:00
艾竹
ba9e3bdf58 自定义节点样式 2023-01-27 22:11:26 +08:00
艾竹
4feddf8392 覆盖默认定义 2023-01-27 21:29:42 +08:00
艾竹
6d1960a8df Portless序列化 2023-01-27 20:43:41 +08:00
艾竹
e8bd6faa21 IsPortless 画线 2023-01-27 20:10:17 +08:00
艾竹
72e3efb052 动画demo完成 2023-01-27 14:54:03 +08:00
艾竹
64ea56f01e 大部分完成,还有写要解决的问题 2023-01-26 22:25:48 +08:00
艾竹
04db0ef13b EnableSnapping完成 2023-01-26 20:05:21 +08:00
艾竹
b5867c148e marker.还有一点bug 2023-01-26 18:42:58 +08:00
艾竹
9bb6c6d321 箭头分离到独立的model中,方便自定义path 2023-01-26 18:27:17 +08:00
艾竹
f11a4170d8 demo提交 2023-01-25 23:55:30 +08:00
艾竹
b857151bdc zxing.net引用 更新 2023-01-25 17:04:56 +08:00
艾竹
b7af3534a2 整理整理 2023-01-25 15:58:05 +08:00
艾竹
4c5d535aad Demo整理 2023-01-25 15:21:20 +08:00
艾竹
40590bf98d 线条控件 2023-01-25 14:42:01 +08:00
艾竹
a01eb8825a 序列化继续改进 2023-01-25 11:11:27 +08:00
艾竹
a5005ac083 序列化调整中 2023-01-24 23:10:57 +08:00
艾竹
66d3a6685b 页边距修改 2023-01-24 20:51:39 +08:00
艾竹
1a291411e6 序列化继续整理 2023-01-24 17:53:04 +08:00
艾竹
8dbe05636d 整理序列化 2023-01-24 16:20:39 +08:00
艾竹
f39a57b3e5 把底层再分割一下 2023-01-24 09:02:40 +08:00
艾竹
2b4662ed37 虚线流动完成 2023-01-23 22:05:51 +08:00
艾竹
c4f8a40b5c 一个bug 2023-01-23 15:46:54 +08:00
艾竹
2c76aacc66 添加节点可删除 2023-01-23 15:43:44 +08:00
艾竹
bb2882c618 修改几个名字 2023-01-22 22:10:39 +08:00
艾竹
4c37fb9772 连接点可以添加文字 2023-01-22 21:46:59 +08:00
艾竹
ad227aee0c xx 2023-01-21 23:25:42 +08:00
艾竹
2e396d687b 支持添加中间节点 2023-01-21 22:01:10 +08:00
艾竹
c4ab1a6355 连线完成 2023-01-20 22:43:08 +08:00
艾竹
f8a0b29d5f 画线调整 2023-01-16 22:38:58 +08:00
艾竹
718d8c01e9 箭头位置,指向连接点的中心 2023-01-15 22:17:46 +08:00
艾竹
5bdf10445f 减少一层逻辑关系 2023-01-15 20:27:39 +08:00
艾竹
7d77864311 准备添加中间端点 2023-01-15 11:59:51 +08:00
艾竹
717cc43827 画线优化基本完成 2023-01-14 21:52:05 +08:00
艾竹
6a4c31106a 修改暂存一下 2023-01-12 23:02:53 +08:00
艾竹
5d7717cc2b 使用PointBase代替Point 2023-01-08 09:22:37 +08:00
艾竹
8fc69bc96d 简单表达式计算就用DataTable自带的好了 2023-01-07 12:08:28 +08:00
艾竹
93ca2859ba 整理,准备曲线算法 2023-01-07 11:32:01 +08:00
艾竹
4e2e68acdf 一个小bug 2022-12-13 19:42:58 +08:00
艾竹
4b798f75a0 1.01 2022-12-12 22:33:17 +08:00
艾竹
02f428d61a dev版本 2022-12-10 20:21:06 +08:00
艾竹
9f91fbcdd3 调整了一下各种命令的位置,便于其他应用调用 2022-12-08 20:54:45 +08:00
艾竹
9a8d4c95f0 线条文本可以保存了 2022-12-06 21:28:42 +08:00
艾竹
194eb9b104 继续调整 2022-12-05 22:48:00 +08:00
艾竹
0487857d7b Flowchart 2022-12-04 23:07:20 +08:00
艾竹
dc42f75610 FlowchartEditor完成 2022-12-02 23:06:31 +08:00
艾竹
1abeefcc66 修复一个多选框的bug 2022-12-02 08:44:40 +08:00
艾竹
503b92f40e 调整demo的combobox样式 2022-12-01 23:12:13 +08:00
艾竹
992a4bb83b 简单demo继续完善 2022-11-30 22:28:22 +08:00
艾竹
13f30f23d8 分离出一个小demo 2022-11-30 19:07:40 +08:00
艾竹
513937c1d6 整理一下项目文件 2022-10-28 22:45:39 +08:00
艾竹
334297b074 update README.md. 2022-06-22 12:12:33 +00:00
艾竹
c443603cfd 笔误啊 2022-05-29 16:02:25 +08:00
艾竹
179f8a45cc update LICENSE. 2021-11-02 03:15:17 +00:00
akwkevin
8bec38e040 连接线改成path绘制,方便绘制曲线 2021-08-06 18:12:05 +08:00
akwkevin
e9c043ae3a 连接线修改,为支持改变连接点做准备 2021-08-05 18:20:22 +08:00
3057 changed files with 57612 additions and 21353 deletions

135
.editorconfig Normal file
View File

@@ -0,0 +1,135 @@
# Rules in this file were initially inferred by Visual Studio IntelliCode from the F:\AIStudio.Wpf.Controls codebase based on best match to current usage at 2022/1/23
# You can modify the rules from these initially generated values to suit your own policies
# You can learn more about editorconfig here: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference
[*.cs]
#Core editorconfig formatting - indentation
#use soft tabs (spaces) for indentation
indent_style = space
#Formatting - indentation options
#indent switch case contents.
csharp_indent_case_contents = true
#csharp_indent_case_contents_when_block
csharp_indent_case_contents_when_block = true
#indent switch labels
csharp_indent_switch_labels = true
#Formatting - new line options
#place catch statements on a new line
csharp_new_line_before_catch = true
#place else statements on a new line
csharp_new_line_before_else = true
#require finally statements to be on a new line after the closing brace
csharp_new_line_before_finally = true
#require members of object intializers to be on separate lines
csharp_new_line_before_members_in_object_initializers = true
#require braces to be on a new line for types, control_blocks, methods, properties, object_collection_array_initializers, and accessors (also known as "Allman" style)
csharp_new_line_before_open_brace = types, control_blocks, methods, properties, object_collection_array_initializers, accessors
#Formatting - organize using options
#sort System.* using directives alphabetically, and place them before other usings
dotnet_sort_system_directives_first = true
#Formatting - spacing options
#require NO space between a cast and the value
csharp_space_after_cast = false
#require a space before the colon for bases or interfaces in a type declaration
csharp_space_after_colon_in_inheritance_clause = true
#require a space after a keyword in a control flow statement such as a for loop
csharp_space_after_keywords_in_control_flow_statements = true
#require a space before the colon for bases or interfaces in a type declaration
csharp_space_before_colon_in_inheritance_clause = true
#remove space within empty argument list parentheses
csharp_space_between_method_call_empty_parameter_list_parentheses = false
#remove space between method call name and opening parenthesis
csharp_space_between_method_call_name_and_opening_parenthesis = false
#do not place space characters after the opening parenthesis and before the closing parenthesis of a method call
csharp_space_between_method_call_parameter_list_parentheses = false
#remove space within empty parameter list parentheses for a method declaration
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
#place a space character after the opening parenthesis and before the closing parenthesis of a method declaration parameter list.
csharp_space_between_method_declaration_parameter_list_parentheses = false
#Formatting - wrapping options
#leave code block on separate lines
csharp_preserve_single_line_blocks = false
#leave statements and member declarations on the same line
csharp_preserve_single_line_statements = true
#Style - Code block preferences
#prefer curly braces even for one line of code
csharp_prefer_braces = true:suggestion
#Style - expression bodied member options
#prefer block bodies for accessors
csharp_style_expression_bodied_accessors = false:suggestion
#prefer block bodies for constructors
csharp_style_expression_bodied_constructors = false:suggestion
#prefer block bodies for methods
csharp_style_expression_bodied_methods = false:suggestion
#prefer block bodies for properties
csharp_style_expression_bodied_properties = false:suggestion
#Style - expression level options
#prefer out variables to be declared inline in the argument list of a method call when possible
csharp_style_inlined_variable_declaration = true:suggestion
#prefer the language keyword for member access expressions, instead of the type name, for types that have a keyword to represent them
dotnet_style_predefined_type_for_member_access = true:suggestion
#Style - Expression-level preferences
#prefer default(T) over default
csharp_prefer_simple_default_expression = false:suggestion
#prefer objects to be initialized using object initializers when possible
dotnet_style_object_initializer = true:suggestion
#Style - implicit and explicit types
#prefer explicit type over var in all cases, unless overridden by another code style rule
csharp_style_var_elsewhere = false:suggestion
#prefer explicit type over var to declare variables with built-in system types such as int
csharp_style_var_for_built_in_types = false:suggestion
#prefer explicit type over var when the type is already mentioned on the right-hand side of a declaration
csharp_style_var_when_type_is_apparent = false:suggestion
#Style - language keyword and framework type options
#prefer the language keyword for local variables, method parameters, and class members, instead of the type name, for types that have a keyword to represent them
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
#Style - modifier options
#prefer accessibility modifiers to be declared except for public interface members. This will currently not differ from always and will act as future proofing for if C# adds default interface methods.
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
#Style - Modifier preferences
#when this rule is set to a list of modifiers, prefer the specified ordering.
csharp_preferred_modifier_order = public,private,protected,internal,static,readonly,override,virtual,new,async:suggestion
#Style - Pattern matching
#prefer is expression with type casts instead of pattern matching
csharp_style_pattern_matching_over_as_with_null_check = false:suggestion
#Style - qualification options
#prefer events to be prefaced with this. in C# or Me. in Visual Basic
dotnet_style_qualification_for_event = true:suggestion
#prefer fields not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_field = false:suggestion
#prefer methods not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_method = false:suggestion
#prefer properties not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_property = false:suggestion

View File

@@ -1,18 +0,0 @@
<Application x:Class="AIStudio.Wpf.ADiagram.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:AIStudio.Wpf.ADiagram"
StartupUri="Views/MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Fluent;component/Themes/Generic.xaml" />
<ResourceDictionary Source="pack://application:,,,/Dragablz;component/Themes/Generic.xaml" />
<ResourceDictionary Source="/AIStudio.Wpf.ADiagram;component/Themes/Generic.xaml" />
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Flowchart;component/ViewModels/FlowNode.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Logical;component/ViewModels/LogicalGateItemViewModel.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.SFC;component/ViewModels/SFCNode.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>

View File

@@ -1,102 +0,0 @@
{
"Title": null,
"DiagramType": 0,
"DiagramItems": [
{
"Name": null,
"DiagramType": 0,
"DesignerItems": [
],
"PersistDesignerItems": [
],
"SettingsDesignerItems": [
],
"PathDesignerItems": [
{
"Left": 132.80000000000007,
"Top": 101.26000022888184,
"ScaleX": 1,
"ScaleY": 1,
"Margin": 0.0,
"ItemWidth": 65.0,
"ItemHeight": 65.0,
"Icon": "M 0,0 H 60 V 40 C 30,30 30,50 0,40 Z",
"ItemTypeName": "AIStudio.Wpf.BaseDiagram.Extensions.ViewModels.PathItemViewModel",
"Id": "da395032-ad9e-4dab-a035-f59bed5cb4c4",
"ZIndex": 0,
"IsGroup": false,
"ParentId": "00000000-0000-0000-0000-000000000000",
"Text": "欢迎来到AIStudio画板",
"ColorItem": {
"LineColor": {
"BrushType": 1,
"Color": "#FF808080",
"GradientStop": null,
"Offset": null,
"Image": null,
"SubType": 0,
"StartPoint": "0,0",
"EndPoint": "0,0",
"Opacity": 1.0,
"LinearOrientation": 0,
"RadialOrientation": 0,
"Angle": 0
},
"FillColor": {
"BrushType": 1,
"Color": "#FFFFA500",
"GradientStop": null,
"Offset": null,
"Image": null,
"SubType": 0,
"StartPoint": "0,0",
"EndPoint": "0,0",
"Opacity": 1.0,
"LinearOrientation": 0,
"RadialOrientation": 0,
"Angle": 0
},
"ShadowColor": "#00FFFFFF",
"LineWidth": 1.0,
"LeftArrowPathStyle": 0,
"RightArrowPathStyle": 1,
"LeftArrowSizeStyle": 10,
"RightArrowSizeStyle": 10
},
"FontItem": {
"FontWeight": "Normal",
"FontStyle": "Normal",
"FontStretch": "Normal",
"Underline": false,
"Strikethrough": false,
"OverLine": false,
"FontColor": "#FF000000",
"FontFamily": "Arial",
"FontSize": 11.0,
"FontObject": "Arial, 11pt",
"TextEffectColor": "#00FFFFFF",
"HighlightColor": "#00FFFFFF",
"FontCase": 0,
"HorizontalAlignment": 1,
"VerticalAlignment": 1,
"LineHeight": 0.0
}
}
],
"MediaDesignerItems": [
],
"ImageDesignerItems": [
],
"TextDesignerItems": [
],
"LogicalGateItems": [
],
"FlowNodeDesignerItems": [
],
"ConnectionIds": [
],
"Connections": [
]
}
]
}

View File

@@ -1,294 +0,0 @@
using Util.DiagramDesigner;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;
using AIStudio.Wpf.Flowchart;
using AIStudio.Wpf.BaseDiagram.Extensions.ViewModels;
using AIStudio.Wpf.BaseDiagram.Extensions.Models;
using Newtonsoft.Json;
using AIStudio.Wpf.Flowchart.Models;
using AIStudio.Wpf.Flowchart.ViewModels;
using AIStudio.Wpf.SFC.Models;
using AIStudio.Wpf.SFC.ViewModels;
using System.Windows;
using System.Windows.Media;
namespace AIStudio.Wpf.ADiagram.Models
{
[Serializable]
public class DiagramItem
{
public DiagramItem()
{
this.ConnectionIds = new List<Guid>();
this.Connections = new List<ConnectionItem>();
}
[XmlAttribute]
public string Name { get; set; }
[XmlAttribute]
public DiagramType DiagramType { get; set; }
[XmlAttribute]
public bool ShowGrid { get; set; }
[XmlIgnore]
public Size GridCellSize { get; set; }
[JsonIgnore]
[XmlAttribute("GridCellSize")]
public string XmlGridCellSize
{
get
{
return SerializeHelper.SerializeSize(GridCellSize);
}
set
{
GridCellSize = SerializeHelper.DeserializeSize(value);
}
}
[XmlAttribute]
public CellHorizontalAlignment CellHorizontalAlignment { get; set; }
[XmlAttribute]
public CellVerticalAlignment CellVerticalAlignment { get; set; }
[XmlAttribute]
public PageSizeOrientation PageSizeOrientation { get; set; }
[XmlIgnore]
public Size PageSize { get; set; }
[JsonIgnore]
[XmlAttribute("PageSize")]
public string XmlPageSize
{
get
{
return SerializeHelper.SerializeSize(PageSize);
}
set
{
PageSize = SerializeHelper.DeserializeSize(value);
}
}
[XmlAttribute]
public PageSizeType PageSizeType { get; set; }
[XmlAttribute]
public double GridMargin { get; set; }
[XmlIgnore]
public Color GridColor { get; set; }
[JsonIgnore]
[XmlAttribute("GridColor")]
public string XmlGridColor
{
get
{
return SerializeHelper.SerializeColor(GridColor);
}
set
{
GridColor = SerializeHelper.DeserializeColor(value);
}
}
[XmlArray]
public List<DesignerItemBase> DesignerItems { get; set; } = new List<DesignerItemBase>();
[XmlArray]
public List<PersistDesignerItem> PersistDesignerItems { get; set; } = new List<PersistDesignerItem>();
[XmlArray]
public List<SettingsDesignerItem> SettingsDesignerItems { get; set; } = new List<SettingsDesignerItem>();
[XmlArray]
public List<PathDesignerItem> PathDesignerItems { get; set; } = new List<PathDesignerItem>();
[XmlArray]
public List<MediaDesignerItem> MediaDesignerItems { get; set; } = new List<MediaDesignerItem>();
[XmlArray]
public List<ImageDesignerItem> ImageDesignerItems { get; set; } = new List<ImageDesignerItem>();
[XmlArray]
public List<TextDesignerItem> TextDesignerItems { get; set; } = new List<TextDesignerItem>();
[XmlArray]
public List<LogicalGateDesignerItemBase> LogicalGateItems { get; set; } = new List<LogicalGateDesignerItemBase>();
[XmlArray]
public List<FlowNodeDesignerItem> FlowNodeDesignerItems { get; set; } = new List<FlowNodeDesignerItem>();
[XmlArray]
public List<SFCNodeDesignerItem> SFCNodeDesignerItems { get; set; } = new List<SFCNodeDesignerItem>();
[JsonIgnore]
[XmlIgnore]
public List<DesignerItemBase> AllDesignerItems
{
get
{
return
DesignerItems.OfType<DesignerItemBase>()
.Union(TextDesignerItems.OfType<DesignerItemBase>())
.Union(LogicalGateItems.OfType<DesignerItemBase>())
.Union(MediaDesignerItems.OfType<DesignerItemBase>())
.Union(ImageDesignerItems.OfType<DesignerItemBase>())
.Union(PathDesignerItems.OfType<DesignerItemBase>())
.Union(PersistDesignerItems.OfType<DesignerItemBase>())
.Union(SettingsDesignerItems.OfType<DesignerItemBase>())
.Union(FlowNodeDesignerItems.OfType<DesignerItemBase>())
.Union(SFCNodeDesignerItems.OfType<DesignerItemBase>())
.ToList();
}
}
[XmlArray]
public List<Guid> ConnectionIds { get; set; }
[XmlArray]
public List<ConnectionItem> Connections { get; set; }
public void AddItems(IEnumerable<SelectableDesignerItemViewModelBase> selectedDesignerItems)
{
foreach (var item in selectedDesignerItems.OfType<DesignerItemViewModelBase>())
{
if (item is PersistDesignerItemViewModel)
{
PersistDesignerItems.Add(new PersistDesignerItem(item as PersistDesignerItemViewModel));
}
else if (item is SettingsDesignerItemViewModel)
{
SettingsDesignerItems.Add(new SettingsDesignerItem(item as SettingsDesignerItemViewModel));
}
else if (item is PathItemViewModel)
{
PathDesignerItems.Add(new PathDesignerItem(item));
}
else if (item is GifImageItemViewModel)
{
MediaDesignerItems.Add(new MediaDesignerItem(item as GifImageItemViewModel));
}
else if (item is MediaItemViewModel)
{
MediaDesignerItems.Add(new MediaDesignerItem(item as MediaItemViewModel));
}
else if (item is ImageItemViewModel)
{
ImageDesignerItems.Add(new ImageDesignerItem(item as ImageItemViewModel));
}
else if (item is TextDesignerItemViewModel)
{
TextDesignerItems.Add(new TextDesignerItem(item as TextDesignerItemViewModel));
}
else if (item is LogicalGateItemViewModelBase)
{
LogicalGateItems.Add(new LogicalGateDesignerItemBase(item as LogicalGateItemViewModelBase));
}
else if (item is FlowNode)
{
FlowNodeDesignerItems.Add(new FlowNodeDesignerItem(item as FlowNode));
}
else if (item is SFCNode)
{
SFCNodeDesignerItems.Add(new SFCNodeDesignerItem(item as SFCNode));
}
else if (item is BarcodeDesignerItemViewModel)
{
DesignerItems.Add(new DesignerItemBase(item, (item as BarcodeDesignerItemViewModel).Format.ToString()));
}
else
{
DesignerItems.Add(new DesignerItemBase(item));
}
}
}
public static DesignerItemBase ToXmlObject(SelectableDesignerItemViewModelBase item)
{
if (item is PersistDesignerItemViewModel)
{
return new PersistDesignerItem(item as PersistDesignerItemViewModel);
}
else if (item is SettingsDesignerItemViewModel)
{
return new SettingsDesignerItem(item as SettingsDesignerItemViewModel);
}
else if (item is PathItemViewModel)
{
return new PathDesignerItem(item as PathItemViewModel);
}
else if (item is GifImageItemViewModel)
{
return new MediaDesignerItem(item as GifImageItemViewModel);
}
else if (item is MediaItemViewModel)
{
return new MediaDesignerItem(item as MediaItemViewModel);
}
else if (item is ImageItemViewModel)
{
return new ImageDesignerItem(item as ImageItemViewModel);
}
else if (item is TextDesignerItemViewModel)
{
return new TextDesignerItem(item as TextDesignerItemViewModel);
}
else if (item is LogicalGateItemViewModelBase)
{
return new LogicalGateDesignerItemBase(item as LogicalGateItemViewModelBase);
}
else if (item is FlowNode)
{
return new FlowNodeDesignerItem(item as FlowNode);
}
else if (item is SFCNode)
{
return new SFCNodeDesignerItem(item as SFCNode);
}
else
{
return new DesignerItemBase(item as DesignerItemViewModelBase);
}
}
public static Type GetTypeOfDiagramItem(DesignerItemViewModelBase vmType)
{
if (vmType is PersistDesignerItemViewModel)
return typeof(PersistDesignerItem);
if (vmType is SettingsDesignerItemViewModel)
return typeof(SettingsDesignerItem);
if (vmType is PathItemViewModel)
return typeof(PathToolBoxData);
if (vmType is GifImageItemViewModel)
return typeof(MediaDesignerItem);
if (vmType is MediaItemViewModel)
return typeof(MediaDesignerItem);
if (vmType is ImageItemViewModel)
return typeof(ImageDesignerItem);
if (vmType is LogicalGateItemViewModelBase)
return typeof(LogicalGateDesignerItemBase);
if (vmType is FlowNode)
return typeof(FlowNodeDesignerItem);
if (vmType is SFCNode)
return typeof(SFCNodeDesignerItem);
throw new InvalidOperationException(string.Format("Unknown diagram type. Currently only {0} and {1} are supported",
typeof(PersistDesignerItem).AssemblyQualifiedName,
typeof(SettingsDesignerItemViewModel).AssemblyQualifiedName
));
}
}
}

View File

@@ -1,96 +0,0 @@
using AIStudio.Wpf.Flowchart;
using AIStudio.Wpf.SFC;
using System;
using System.Windows.Media;
using Util.DiagramDesigner;
using Util.DiagramDesigner.Helpers;
namespace AIStudio.Wpf.ADiagram.Models
{
public class PathToolBoxData : ToolBoxData
{
public PathToolBoxData(string icon, Type type, double width = 32, double height = 32) : base(null, icon, type, width, height)
{
ColorViewModel.FillColor.Color = Colors.Orange;
}
}
public class TextToolBoxData : ToolBoxData
{
public TextToolBoxData(string text, Type type, double width = 32, double height = 32) : base(text, null, type, width, height)
{
ColorViewModel.FillColor.Color = Colors.Orange;
}
}
public class EllipseTextToolBoxData : ToolBoxData
{
public EllipseTextToolBoxData(string text, Type type, double width = 32, double height = 32) : base(text, null, type, width, height)
{
ColorViewModel.FillColor.Color = Colors.Orange;
}
}
public class ImageToolBoxData : ToolBoxData
{
public ImageToolBoxData(string icon, Type type, double width = 32, double height = 32) : base(null, icon, type, width, height)
{
}
}
public class FlowchartToolBoxData : ToolBoxData
{
public NodeKinds Kind { get; set; }
public FlowchartToolBoxData(NodeKinds kind, Type type, double width = 32, double height = 32) : base(kind.GetDescription(), null, type, width, height)
{
Kind = kind;
ColorViewModel.LineColor.Color = Colors.Black;
}
}
public class SFCToolBoxData : ToolBoxData
{
public SFCNodeKinds Kind { get; set; }
public SFCToolBoxData(SFCNodeKinds kind, Type type, double width = 32, double height = 32) : base(null, null, type, width, height)
{
Kind = kind;
ColorViewModel.LineColor.Color = Colors.Black;
ColorViewModel.FillColor.Color = Colors.Blue;
}
}
public class DesignerItemToolBoxData : ToolBoxData
{
public string FileName { get; set; }
public DesignerItemViewModelBase DesignerItemViewModel { get; set; }
public DesignerItemToolBoxData(DesignerItemBase designerItemBase, string filename, Type type, double width = 32, double height = 32) : base(null, null, type, width, height)
{
Addition = designerItemBase;
DesignerItemViewModel = (DesignerItemViewModelBase)Activator.CreateInstance(type, null, designerItemBase);
FileName = filename;
}
}
public class SvgToolBoxData : ToolBoxData
{
public SvgToolBoxData(string filename, Type type, double width = 32, double height = 32) : base(null, filename, type, width, height)
{
ColorViewModel.FillColor.Color = Colors.Blue;
}
}
public class MediaToolBoxData : ToolBoxData
{
public MediaToolBoxData(string icon, Type type, double width = 32, double height = 32) : base(icon, null, type, width, height)
{
}
}
}

View File

@@ -1,28 +0,0 @@
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Util.DiagramDesigner;component/Resources/Styles/ScrollBar.xaml" />
<ResourceDictionary Source="pack://application:,,,/Util.DiagramDesigner;component/Resources/Styles/Expander.xaml" />
<ResourceDictionary Source="pack://application:,,,/Util.DiagramDesigner;component/Resources/Styles/GroupBox.xaml" />
<ResourceDictionary Source="pack://application:,,,/Util.DiagramDesigner;component/Resources/Styles/ToolTip.xaml" />
<ResourceDictionary Source="pack://application:,,,/Util.DiagramDesigner;component/Resources/Styles/ScrollViewer.xaml" />
<ResourceDictionary Source="pack://application:,,,/Util.DiagramDesigner;component/Resources/Styles/ZoomBox.xaml" />
<ResourceDictionary Source="pack://application:,,,/Util.DiagramDesigner;component/Resources/Styles/DesignerItems.xaml" />
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.ADiagram;component/Themes/Styles/Fluent.xaml" />
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.ADiagram;component/Themes/Styles/Expander.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.ADiagram;component/Themes/Styles/ListBox.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.ADiagram;component/Themes/Styles/Slider.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.ADiagram;component/Themes/Styles/TabControl.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.ADiagram;component/Themes/Styles/ToggleButton.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.BaseDiagram;component/Extensions/ViewModels/BarcodeDesignerItemViewModel.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.BaseDiagram;component/Extensions/ViewModels/OutLineTextDesignerItemViewModel.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.BaseDiagram;component/Extensions/ViewModels/PathItemViewModel.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.BaseDiagram;component/Extensions/ViewModels/PersistDesignerItemViewModel.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.BaseDiagram;component/Extensions/ViewModels/SettingsDesignerItemViewModel.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.BaseDiagram;component/Extensions/ViewModels/SvgDesignerItemViewModel.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

File diff suppressed because it is too large Load Diff

View File

@@ -1,118 +0,0 @@
using AIStudio.Wpf.ADiagram.Models;
using AIStudio.Wpf.ADiagram.ViewModels;
using AIStudio.Wpf.Flowchart.ViewModels;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using Util.DiagramDesigner;
namespace AIStudio.Wpf.Flowchart
{
public class FlowchartViewModel : DiagramsViewModel
{
public FlowchartViewModel(string title, string status, DiagramType diagramType) : base(title, status, diagramType)
{
}
public FlowchartViewModel(string filename, DiagramDocument diagramDocument) : base(filename, diagramDocument)
{
if (DiagramViewModel != null)
{
FlowchartService.InitData(DiagramViewModel.Items.OfType<FlowNode>().ToList(), DiagramViewModel.Items.OfType<ConnectorViewModel>().ToList(), DiagramViewModel);
}
}
protected override void InitDiagramViewModel()
{
base.InitDiagramViewModel();
DiagramViewModel.ShowGrid = true;
DiagramViewModel.GridCellSize = new Size(100, 100);
DiagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Center;
DiagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center;
}
protected override void Init()
{
base.Init();
DesignerItemViewModelBase start = new StartFlowNode() { Left = 100, Top = 0, Color = Colors.Yellow.ToString() };
DiagramViewModel.DirectAddItemCommand.Execute(start);
DesignerItemViewModelBase middle1 = new MiddleFlowNode() { Left = 100, Top = 100, Color = Colors.Yellow.ToString(), Text = "主管审批", UserIds= new List<string> { "操作员1", "操作员2" }, ActType = "or" };
DiagramViewModel.DirectAddItemCommand.Execute(middle1);
DesignerItemViewModelBase decide = new DecideFlowNode() { Left = 100, Top = 200, Color = Colors.Yellow.ToString(), Text = "5" };
DiagramViewModel.DirectAddItemCommand.Execute(decide);
DesignerItemViewModelBase middle2 = new MiddleFlowNode() { Left = 200, Top = 300, Color = Colors.Yellow.ToString(), Text = "分管领导", UserIds = new List<string> { "操作员1", "操作员2" }, ActType = "and" };
DiagramViewModel.DirectAddItemCommand.Execute(middle2);
DesignerItemViewModelBase cobegin = new COBeginFlowNode() { Left = 100, Top = 400, Color = Colors.Yellow.ToString() };
DiagramViewModel.DirectAddItemCommand.Execute(cobegin);
DesignerItemViewModelBase middle3 = new MiddleFlowNode() { Left = 100, Top = 500, Color = Colors.Yellow.ToString(), Text = "财务审批", UserIds = new List<string> { "Admin" }, ActType = "or" };
DiagramViewModel.DirectAddItemCommand.Execute(middle3);
DesignerItemViewModelBase middle4 = new MiddleFlowNode() { Left = 200, Top = 500, Color = Colors.Yellow.ToString(), Text = "人力审批", RoleIds = new List<string> { "操作员", "管理员" }, ActType = "or" };
DiagramViewModel.DirectAddItemCommand.Execute(middle4);
DesignerItemViewModelBase coend = new COEndFlowNode() { Left = 100, Top = 600, Color = Colors.Yellow.ToString() };
DiagramViewModel.DirectAddItemCommand.Execute(coend);
DesignerItemViewModelBase end = new EndFlowNode() { Left = 100, Top = 700, Color = Colors.Yellow.ToString() };
DiagramViewModel.DirectAddItemCommand.Execute(end);
ConnectorViewModel connector1 = new ConnectorViewModel(start.BottomConnector, middle1.TopConnector);
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectorViewModel connector2 = new ConnectorViewModel(middle1.BottomConnector, decide.TopConnector);
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
ConnectorViewModel connector3 = new ConnectorViewModel(decide.RightConnector, middle2.TopConnector);
DiagramViewModel.DirectAddItemCommand.Execute(connector3);
connector3.AddText(">=3");
ConnectorViewModel connector4 = new ConnectorViewModel(middle2.BottomConnector, cobegin.TopConnector);
DiagramViewModel.DirectAddItemCommand.Execute(connector4);
ConnectorViewModel connector5 = new ConnectorViewModel(decide.BottomConnector, cobegin.TopConnector);
DiagramViewModel.DirectAddItemCommand.Execute(connector5);
connector5.AddText("<3");
ConnectorViewModel connector6 = new ConnectorViewModel(cobegin.BottomConnector, middle3.TopConnector);
DiagramViewModel.DirectAddItemCommand.Execute(connector6);
ConnectorViewModel connector7 = new ConnectorViewModel(cobegin.BottomConnector, middle4.TopConnector);
DiagramViewModel.DirectAddItemCommand.Execute(connector7);
ConnectorViewModel connector8 = new ConnectorViewModel(middle3.BottomConnector, coend.TopConnector);
DiagramViewModel.DirectAddItemCommand.Execute(connector8);
ConnectorViewModel connector9 = new ConnectorViewModel(middle4.BottomConnector, coend.TopConnector);
DiagramViewModel.DirectAddItemCommand.Execute(connector9);
ConnectorViewModel connector10 = new ConnectorViewModel(coend.BottomConnector, end.TopConnector);
DiagramViewModel.DirectAddItemCommand.Execute(connector10);
DiagramViewModel.ClearSelectedItems();
FlowchartService.InitData(DiagramViewModel.Items.OfType<FlowNode>().ToList(), DiagramViewModel.Items.OfType<ConnectorViewModel>().ToList(), DiagramViewModel);
}
public override void Dispose()
{
base.Dispose();
foreach (var viewModel in DiagramViewModels)
{
FlowchartService.DisposeData(viewModel);
}
}
}
}

View File

@@ -1,422 +0,0 @@
using AIStudio.Wpf.ADiagram.Models;
using AIStudio.Wpf.ADiagram.ViewModels;
using AIStudio.Wpf.Logical.ViewModels;
using System;
using System.Linq;
using System.Windows;
using System.Windows.Media;
using Util.DiagramDesigner;
namespace AIStudio.Wpf.Logical
{
public class LogicalViewModel : DiagramsViewModel
{
public LogicalViewModel(string title, string status, DiagramType diagramType) : base(title, status, diagramType)
{
}
public LogicalViewModel(string filename, DiagramDocument diagramDocument) : base(filename, diagramDocument)
{
}
protected override void InitDiagramViewModel()
{
base.InitDiagramViewModel();
DiagramViewModel.ShowGrid = true;
DiagramViewModel.GridCellSize = new Size(150, 100);
DiagramViewModel.PageSizeOrientation = PageSizeOrientation.Horizontal;
DiagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Left;
DiagramViewModel.CellVerticalAlignment = CellVerticalAlignment.None;
DiagramViewModel.Items.CollectionChanged += Items_CollectionChanged;
}
protected override void Init()
{
base.Init();
TimerDesignerItemViewModel timer = new TimerDesignerItemViewModel() { Left = 0, Top = 10 };
timer.Value = 0.5;
DiagramViewModel.DirectAddItemCommand.Execute(timer);
InputItemViewModel in1 = new InputItemViewModel() { Left = 0, Top = 50 };
in1.LinkPoint = LogicalService.LinkPoint[0];
DiagramViewModel.DirectAddItemCommand.Execute(in1);
InputItemViewModel in2 = new InputItemViewModel() { Left = 0, Top = 80 };
in2.LinkPoint = LogicalService.LinkPoint[1];
DiagramViewModel.DirectAddItemCommand.Execute(in2);
AddGateItemViewModel item1 = new AddGateItemViewModel() { Left = 150, Top = 50 };
DiagramViewModel.DirectAddItemCommand.Execute(item1);
ConstantDesignerItemViewModel constant = new ConstantDesignerItemViewModel() { Left = 150, Top = 118 };
DiagramViewModel.DirectAddItemCommand.Execute(constant);
GTGateItemViewModel gTGate = new GTGateItemViewModel() { Left = 300, Top = 50 };
DiagramViewModel.DirectAddItemCommand.Execute(gTGate);
InputItemViewModel in3 = new InputItemViewModel() { Left = 300, Top = 118 };
in3.LinkPoint = LogicalService.LinkPoint[2];
DiagramViewModel.DirectAddItemCommand.Execute(in3);
InputItemViewModel in4 = new InputItemViewModel() { Left = 300, Top = 148 };
in4.LinkPoint = LogicalService.LinkPoint[3];
DiagramViewModel.DirectAddItemCommand.Execute(in4);
SELGateItemViewModel sELGate = new SELGateItemViewModel() { Left = 450, Top = 50 };
DiagramViewModel.DirectAddItemCommand.Execute(sELGate);
OutputItemViewModel out1 = new OutputItemViewModel() { Left = 600, Top = 50 };
out1.LinkPoint = LogicalService.LinkPoint[4];
DiagramViewModel.DirectAddItemCommand.Execute(out1);
ConnectorViewModel connector1 = new ConnectorViewModel(in1.Output[0], item1.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectorViewModel connector2 = new ConnectorViewModel(in2.Output[0], item1.Input[1]);
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
ConnectorViewModel connector3 = new ConnectorViewModel(item1.Output[0], gTGate.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector3);
ConnectorViewModel connector4 = new ConnectorViewModel(constant.Output[0], gTGate.Input[1]);
DiagramViewModel.DirectAddItemCommand.Execute(connector4);
ConnectorViewModel connector5 = new ConnectorViewModel(gTGate.Output[0], sELGate.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector5);
ConnectorViewModel connector6 = new ConnectorViewModel(in3.Output[0], sELGate.Input[1]);
DiagramViewModel.DirectAddItemCommand.Execute(connector6);
ConnectorViewModel connector7 = new ConnectorViewModel(in4.Output[0], sELGate.Input[2]);
DiagramViewModel.DirectAddItemCommand.Execute(connector7);
ConnectorViewModel connector8 = new ConnectorViewModel(sELGate.Output[0], out1.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector8);
}
private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.OldItems != null)
{
foreach (var item in e.OldItems.OfType<TimerDesignerItemViewModel>())
{
item.Do -= Do;
}
}
if (e.NewItems != null)
{
foreach (var item in e.NewItems.OfType<TimerDesignerItemViewModel>())
{
item.Do += Do;
}
}
RaisePropertyChanged("Items");
}
protected override bool AddVerify(SelectableDesignerItemViewModelBase arg)
{
if (base.AddVerify(arg) == false)
return false;
if (arg is ConnectorViewModel connector)
{
if (connector.SinkConnectorInfo is FullyCreatedConnectorInfo fully)
{
if (DiagramViewModel.Items.OfType<ConnectorViewModel>().Any(p => p.SinkConnectorInfo == fully))
{
return false;
}
}
}
if (arg is TimerDesignerItemViewModel)
{
if (DiagramViewModel.Items.OfType<LogicalGateItemViewModelBase>().Any(p => p.LogicalType == LogicalType.Time))
{
return false;
}
}
return true;
}
private void Do()
{
foreach (var item in DiagramViewModel.Items.OfType<ConstantDesignerItemViewModel>())
{
foreach (var output in item.Output)
{
output.Value.ConnectorValue = item.Value;
output.Value.ColorViewModel.FillColor.Color = Colors.Green;
}
}
foreach (var item in DiagramViewModel.Items.OfType<InputItemViewModel>())
{
if (item.LinkPoint != null)
{
foreach (var output in item.Output)
{
output.Value.ConnectorValue = item.LinkPoint.Value;
output.Value.ColorViewModel.FillColor.Color = Colors.Green;
}
}
}
foreach (var item in DiagramViewModel.Items.OfType<LogicalGateItemViewModelBase>().OrderBy(p => p.OrderNumber))
{
if (item.LogicalType != LogicalType.None)
{
foreach (var input in item.Input)
{
var connector = GetSourceItem(input.Value);
if (connector == null)
{
continue;
}
if (connector.SourceConnectorInfo.DataItem is LogicalGateItemViewModelBase)
{
input.Value.ConnectorValue = connector.SourceConnectorInfo.ConnectorValue;
input.Value.ColorViewModel.FillColor.Color = connector.SourceConnectorInfo.ColorViewModel.FillColor.Color;
connector.ColorViewModel.LineColor.Color = connector.SourceConnectorInfo.ColorViewModel.FillColor.Color;
if (item.LogicalType == LogicalType.Output)
{
input.Value.ValueTypePoint = connector.SourceConnectorInfo.ValueTypePoint;
}
else if (item.LogicalType == LogicalType.NOT)
{
input.Value.ValueTypePoint = (connector.SourceConnectorInfo.ValueTypePoint == ValueTypePoint.Bool) ? ValueTypePoint.Bool : ValueTypePoint.Int;
}
}
}
foreach (var output in item.Output)
{
if (item.LogicalType == LogicalType.Output)
{
var first = item.Input.Values.FirstOrDefault();
output.Value.ConnectorValue = first.ConnectorValue;
output.Value.ValueTypePoint = first.ValueTypePoint;
(item as OutputItemViewModel).Value = first.ConnectorValue;
(item as OutputItemViewModel).LinkPoint.Value = first.ConnectorValue;
}
else if (item.LogicalType == LogicalType.ADD)
{
output.Value.ConnectorValue = item.Input.Values.Select(p => p.ConnectorValue).Sum();
}
else if (item.LogicalType == LogicalType.SUB)
{
var first = item.Input.Values.Select(p => p.ConnectorValue).FirstOrDefault();
var second = item.Input.Values.Where((value, index) => index != 0).Select(p => p.ConnectorValue).Sum();
output.Value.ConnectorValue = first - second;
}
else if (item.LogicalType == LogicalType.MUL)
{
double result = 0;
foreach (var input in item.Input.Values)
{
if (result == 0)
{
result = 1;
}
result *= input.ConnectorValue;
}
output.Value.ConnectorValue = result;
}
else if (item.LogicalType == LogicalType.DIV)
{
double result = item.Input.Values.Select(p => p.ConnectorValue).FirstOrDefault();
foreach (var input in item.Input.Values.Where((value, index) => index != 0))
{
result /= input.ConnectorValue;
}
output.Value.ConnectorValue = result;
}
else if (item.LogicalType == LogicalType.AVE)
{
output.Value.ConnectorValue = item.Input.Values.Select(p => p.ConnectorValue).Average();
}
else if (item.LogicalType == LogicalType.MOD)
{
output.Value.ConnectorValue = item.Input[0].ConnectorValue % item.Input[1].ConnectorValue;
}
else if (item.LogicalType == LogicalType.AND)
{
output.Value.ConnectorValue = Convert.ToInt32(item.Input[0].ConnectorValue) & Convert.ToInt32(item.Input[1].ConnectorValue);
}
else if (item.LogicalType == LogicalType.OR)
{
output.Value.ConnectorValue = Convert.ToInt32(item.Input[0].ConnectorValue) | Convert.ToInt32(item.Input[1].ConnectorValue);
}
else if (item.LogicalType == LogicalType.XOR)
{
output.Value.ConnectorValue = Convert.ToInt32(Convert.ToInt32(item.Input[0].ConnectorValue) ^ Convert.ToInt32(item.Input[1].ConnectorValue));
}
else if (item.LogicalType == LogicalType.NOT)
{
if (item.Input[0].ValueTypePoint == ValueTypePoint.Bool)
{
output.Value.ConnectorValue = Convert.ToInt32(!Convert.ToBoolean(item.Input[0].ConnectorValue));
output.Value.ValueTypePoint = ValueTypePoint.Bool;
}
else
{
output.Value.ConnectorValue = ~Convert.ToInt32(item.Input[0].ConnectorValue);
output.Value.ValueTypePoint = ValueTypePoint.Int;
}
}
else if (item.LogicalType == LogicalType.SHL)
{
output.Value.ConnectorValue = Convert.ToInt32(item.Input[0].ConnectorValue) << Convert.ToInt32(item.Input[1].ConnectorValue);
}
else if (item.LogicalType == LogicalType.SHR)
{
output.Value.ConnectorValue = Convert.ToInt32(item.Input[0].ConnectorValue) >> Convert.ToInt32(item.Input[1].ConnectorValue);
}
else if (item.LogicalType == LogicalType.ROL)
{
output.Value.ConnectorValue = (Convert.ToInt32(item.Input[0].ConnectorValue) << Convert.ToInt32(item.Input[1].ConnectorValue)) | (Convert.ToInt32(item.Input[0].ConnectorValue) >> 32 - Convert.ToInt32(item.Input[1].ConnectorValue));
}
else if (item.LogicalType == LogicalType.ROR)
{
output.Value.ConnectorValue = (Convert.ToInt32(item.Input[0].ConnectorValue) >> Convert.ToInt32(item.Input[1].ConnectorValue)) | (Convert.ToInt32(item.Input[0].ConnectorValue) << 32 - Convert.ToInt32(item.Input[1].ConnectorValue));
}
else if (item.LogicalType == LogicalType.SEL)
{
output.Value.ConnectorValue = (item.Input[0].ConnectorValue == output.Key) ? item.Input[1].ConnectorValue : item.Input[2].ConnectorValue;
}
else if (item.LogicalType == LogicalType.MAX)
{
output.Value.ConnectorValue = item.Input.Values.Select(p => p.ConnectorValue).Max();
}
else if (item.LogicalType == LogicalType.MIN)
{
output.Value.ConnectorValue = item.Input.Values.Select(p => p.ConnectorValue).Min();
}
else if (item.LogicalType == LogicalType.LIMIT)
{
output.Value.ConnectorValue = (item.Input[0].ConnectorValue > item.Input[1].ConnectorValue) ? item.Input[1].ConnectorValue : item.Input[0].ConnectorValue;
}
else if (item.LogicalType == LogicalType.GT)
{
output.Value.ConnectorValue = (item.Input[0].ConnectorValue > item.Input[1].ConnectorValue) ? 1 : 0;
}
else if (item.LogicalType == LogicalType.LT)
{
output.Value.ConnectorValue = (item.Input[0].ConnectorValue < item.Input[1].ConnectorValue) ? 1 : 0;
}
else if (item.LogicalType == LogicalType.GE)
{
output.Value.ConnectorValue = (item.Input[0].ConnectorValue >= item.Input[1].ConnectorValue) ? 1 : 0;
}
else if (item.LogicalType == LogicalType.LE)
{
output.Value.ConnectorValue = (item.Input[0].ConnectorValue <= item.Input[1].ConnectorValue) ? 1 : 0;
}
else if (item.LogicalType == LogicalType.EQ)
{
output.Value.ConnectorValue = (item.Input[0].ConnectorValue == item.Input[1].ConnectorValue) ? 1 : 0;
}
else if (item.LogicalType == LogicalType.NE)
{
output.Value.ConnectorValue = (item.Input[0].ConnectorValue != item.Input[1].ConnectorValue) ? 1 : 0;
}
else if (item.LogicalType == LogicalType.ABS)
{
output.Value.ConnectorValue = Math.Abs(item.Input[0].ConnectorValue);
}
else if (item.LogicalType == LogicalType.SQRT)
{
output.Value.ConnectorValue = Math.Sqrt(item.Input[0].ConnectorValue);
}
else if (item.LogicalType == LogicalType.LN)
{
output.Value.ConnectorValue = Math.Log10(item.Input[0].ConnectorValue);
}
else if (item.LogicalType == LogicalType.LOG)
{
output.Value.ConnectorValue = Math.Log(item.Input[0].ConnectorValue);
}
else if (item.LogicalType == LogicalType.EXP)
{
output.Value.ConnectorValue = Math.Exp(item.Input[0].ConnectorValue);
}
else if (item.LogicalType == LogicalType.SIN)
{
output.Value.ConnectorValue = Math.Sin(item.Input[0].ConnectorValue);
}
else if (item.LogicalType == LogicalType.COS)
{
output.Value.ConnectorValue = Math.Cos(item.Input[0].ConnectorValue);
}
else if (item.LogicalType == LogicalType.TAN)
{
output.Value.ConnectorValue = Math.Tan(item.Input[0].ConnectorValue);
}
else if (item.LogicalType == LogicalType.ASIN)
{
output.Value.ConnectorValue = Math.Asin(item.Input[0].ConnectorValue);
}
else if (item.LogicalType == LogicalType.ACOS)
{
output.Value.ConnectorValue = Math.Acos(item.Input[0].ConnectorValue);
}
else if (item.LogicalType == LogicalType.ATAN)
{
output.Value.ConnectorValue = Math.Atan(item.Input[0].ConnectorValue);
}
else if (item.LogicalType == LogicalType.EXPT)
{
output.Value.ConnectorValue = Math.Exp(item.Input[0].ConnectorValue);
}
if (output.Value.ValueTypePoint == ValueTypePoint.Bool)
{
if (output.Value.ConnectorValue == 0)
{
output.Value.ColorViewModel.FillColor.Color = Colors.Red;
if (item.LogicalType == LogicalType.Output)
{
item.ColorViewModel.FillColor.Color = Colors.Red;
}
}
else
{
output.Value.ColorViewModel.FillColor.Color = Colors.Green;
if (item.LogicalType == LogicalType.Output)
{
item.ColorViewModel.FillColor.Color = Colors.Green;
}
}
}
else
{
output.Value.ColorViewModel.FillColor.Color = Colors.Green;
}
}
}
}
}
private ConnectorViewModel GetSourceItem(FullyCreatedConnectorInfo sinkConnector)
{
foreach (var connector in DiagramViewModel.Items.OfType<ConnectorViewModel>())
{
if (connector.SinkConnectorInfo == sinkConnector)
{
return connector;
}
}
return null;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,303 +0,0 @@
using AIStudio.Wpf.ADiagram.Models;
using AIStudio.Wpf.ADiagram.ViewModels;
using AIStudio.Wpf.Flowchart.ViewModels;
using AIStudio.Wpf.SFC;
using AIStudio.Wpf.SFC.ViewModels;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows;
using System.Windows.Media;
using Util.DiagramDesigner;
namespace AIStudio.Wpf.Flowchart
{
public class SFCViewModel : DiagramsViewModel
{
public SFCViewModel(string title, string status, DiagramType diagramType) : base(title, status, diagramType)
{
}
public SFCViewModel(string filename, DiagramDocument diagramDocument) : base(filename, diagramDocument)
{
if (DiagramViewModel != null)
{
SFCService.InitData(DiagramViewModel.Items.OfType<SFCNode>().ToList(), DiagramViewModel.Items.OfType<ConnectorViewModel>().ToList(), DiagramViewModel);
}
readDataTimer.Elapsed += timeCycle;
readDataTimer.Interval = 1000;
readDataTimer.AutoReset = false;
readDataTimer.Start();
}
protected override void InitDiagramViewModel()
{
base.InitDiagramViewModel();
DiagramViewModel.ShowGrid = true;
DiagramViewModel.GridCellSize = new Size(100, 60);
DiagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Center;
DiagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center;
}
private System.Timers.Timer readDataTimer = new System.Timers.Timer();
protected override void Init()
{
base.Init();
SFCStartNode start = new SFCStartNode() { Left = 0, Top = 60, Text = "S0" };
DiagramViewModel.DirectAddItemCommand.Execute(start);
SFCConditionNode condition1_1 = new SFCConditionNode() { Left = 0, Top = 120, Text = "X01", Expression = "p0==1&p1<20", LinkPoint = new ObservableCollection<LinkPoint> { SFCService.LinkPoint.FirstOrDefault(p => p.Name == "S0"), SFCService.LinkPoint.FirstOrDefault(p => p.Name == "T2") } };
DiagramViewModel.DirectAddItemCommand.Execute(condition1_1);
SFCConditionNode condition1_2 = new SFCConditionNode() { Left = 100, Top = 120, Text = "X02", Expression = "p0==1&p1<30", LinkPoint = new ObservableCollection<LinkPoint> { SFCService.LinkPoint.FirstOrDefault(p => p.Name == "S0"), SFCService.LinkPoint.FirstOrDefault(p => p.Name == "T2") } };
DiagramViewModel.DirectAddItemCommand.Execute(condition1_2);
SFCNodeNode step1 = new SFCNodeNode() { Left = 0, Top = 180, Text = "S1" };
DiagramViewModel.DirectAddItemCommand.Execute(step1);
SFCActionNode action11 = new SFCActionNode() { Left = 100, Top = 180, Text = "SET_V1", Expression = "1", LinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K1_DI") };
DiagramViewModel.DirectAddItemCommand.Execute(action11);
SFCActionNode action12 = new SFCActionNode() { Left = 200, Top = 180, Text = "SET_V2", Expression = "1", LinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K2_DI") };
DiagramViewModel.DirectAddItemCommand.Execute(action12);
SFCActionNode action13 = new SFCActionNode() { Left = 300, Top = 180, Text = "SET_V3", Expression = "1", LinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K3_DI") };
DiagramViewModel.DirectAddItemCommand.Execute(action13);
SFCActionNode action14 = new SFCActionNode() { Left = 400, Top = 180, Text = "RES_V4", Expression = "0", LinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K4_DI") };
DiagramViewModel.DirectAddItemCommand.Execute(action14);
SFCConditionNode condition2 = new SFCConditionNode() { Left = 0, Top = 240, Text = "X1", Expression = "p0>50", LinkPoint = new ObservableCollection<LinkPoint> { SFCService.LinkPoint.FirstOrDefault(p => p.Name == "T2") } };
DiagramViewModel.DirectAddItemCommand.Execute(condition2);
SFCNodeNode step2 = new SFCNodeNode() { Left = 0, Top = 300, Text = "S2" };
DiagramViewModel.DirectAddItemCommand.Execute(step2);
SFCActionNode action2 = new SFCActionNode() { Left = 100, Top = 300, Text = "SET_V4", Expression = "1", LinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K4_DI") };
DiagramViewModel.DirectAddItemCommand.Execute(action2);
SFCConditionNode condition3 = new SFCConditionNode() { Left = 0, Top = 360, Text = "X2", Expression = "p0>70", LinkPoint = new ObservableCollection<LinkPoint> { SFCService.LinkPoint.FirstOrDefault(p => p.Name == "T2") } };
DiagramViewModel.DirectAddItemCommand.Execute(condition3);
SFCNodeNode step3 = new SFCNodeNode() { Left = 0, Top = 420, Text = "S3" };
DiagramViewModel.DirectAddItemCommand.Execute(step3);
SFCActionNode action3 = new SFCActionNode() { Left = 100, Top = 420, Text = "RES_V1", Expression = "0", LinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K1_DI") };
DiagramViewModel.DirectAddItemCommand.Execute(action3);
SFCConditionNode condition4 = new SFCConditionNode() { Left = 0, Top = 480, Text = "X3", Expression = "p0>80", LinkPoint = new ObservableCollection<LinkPoint> { SFCService.LinkPoint.FirstOrDefault(p => p.Name == "T2") } };
DiagramViewModel.DirectAddItemCommand.Execute(condition4);
SFCCOBeginNode cobegin = new SFCCOBeginNode() { Left = 38, Top = 540, Text = "" };
DiagramViewModel.DirectAddItemCommand.Execute(cobegin);
SFCNodeNode step4 = new SFCNodeNode() { Left = 0, Top = 600, Text = "S4" };
DiagramViewModel.DirectAddItemCommand.Execute(step4);
SFCActionNode action4 = new SFCActionNode() { Left = 100, Top = 600, Text = "RES_V2", Expression = "0", LinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K2_DI") };
DiagramViewModel.DirectAddItemCommand.Execute(action4);
SFCConditionNode condition5 = new SFCConditionNode() { Left = 0, Top = 660, Text = "X4", Expression = "p0==0", LinkPoint = new ObservableCollection<LinkPoint> { SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K2_DO") } };
DiagramViewModel.DirectAddItemCommand.Execute(condition5);
SFCNodeNode step5 = new SFCNodeNode() { Left = 200, Top = 600, Text = "S5" };
DiagramViewModel.DirectAddItemCommand.Execute(step5);
SFCActionNode action5 = new SFCActionNode() { Left = 300, Top = 600, Text = "RES_V3", Expression = "0", LinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K3_DI") };
DiagramViewModel.DirectAddItemCommand.Execute(action5);
SFCConditionNode condition6 = new SFCConditionNode() { Left = 200, Top = 660, Text = "X5", Expression = "p0==0", LinkPoint = new ObservableCollection<LinkPoint> { SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K3_DO") } };
DiagramViewModel.DirectAddItemCommand.Execute(condition6);
SFCCOEndNode coend = new SFCCOEndNode() { Left = 38, Top = 720, Text = "" };
DiagramViewModel.DirectAddItemCommand.Execute(coend);
ConnectorViewModel connector1_1 = new ConnectorViewModel(start.Output[0], condition1_1.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector1_1);
ConnectorViewModel connector2_1 = new ConnectorViewModel(condition1_1.Output[0], step1.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector2_1);
ConnectorViewModel connector1_2 = new ConnectorViewModel(start.Output[0], condition1_2.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector1_2);
ConnectorViewModel connector2_2 = new ConnectorViewModel(condition1_2.Output[0], step1.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector2_2);
ConnectorViewModel connector31 = new ConnectorViewModel(step1.Action[0], action11.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector31);
ConnectorViewModel connector32 = new ConnectorViewModel(step1.Action[0], action12.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector32);
ConnectorViewModel connector33 = new ConnectorViewModel(step1.Action[0], action13.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector33);
ConnectorViewModel connector34 = new ConnectorViewModel(step1.Action[0], action14.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector34);
ConnectorViewModel connector4 = new ConnectorViewModel(step1.Output[0], condition2.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector4);
ConnectorViewModel connector5 = new ConnectorViewModel(condition2.Output[0], step2.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector5);
ConnectorViewModel connector6 = new ConnectorViewModel(step2.Action[0], action2.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector6);
ConnectorViewModel connector7 = new ConnectorViewModel(step2.Output[0], condition3.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector7);
ConnectorViewModel connector8 = new ConnectorViewModel(condition3.Output[0], step3.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector8);
ConnectorViewModel connector9 = new ConnectorViewModel(step3.Action[0], action3.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector9);
ConnectorViewModel connector10 = new ConnectorViewModel(step3.Output[0], condition4.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector10);
ConnectorViewModel connector11 = new ConnectorViewModel(condition4.Output[0], cobegin.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector11);
ConnectorViewModel connector12 = new ConnectorViewModel(cobegin.Output[0], step4.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector12);
ConnectorViewModel connector13 = new ConnectorViewModel(step4.Action[0], action4.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector13);
ConnectorViewModel connector14 = new ConnectorViewModel(step4.Output[0], condition5.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector14);
ConnectorViewModel connector15 = new ConnectorViewModel(cobegin.Output[1], step5.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector15);
ConnectorViewModel connector16 = new ConnectorViewModel(step5.Action[0], action5.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector16);
ConnectorViewModel connector17 = new ConnectorViewModel(step5.Output[0], condition6.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector17);
ConnectorViewModel connector18 = new ConnectorViewModel(condition5.Output[0], coend.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector18);
ConnectorViewModel connector19 = new ConnectorViewModel(condition6.Output[0], coend.Input[1]);
DiagramViewModel.DirectAddItemCommand.Execute(connector19);
ConnectorViewModel connector20 = new ConnectorViewModel(coend.Output[0], start.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(connector20);
#region
TextDesignerItemViewModel despcription = new TextDesignerItemViewModel()
{
Left = 230,
Top = 270,
ItemWidth = 300,
ItemHeight = 120,
Text = @"模拟一个容器的高低液位控制方法
1.按下启动按钮, 程序启动
2.当液位低于20%的时候, V1,V2,V3打开, V4关闭
3.当液位高于50%的时候, V4打开
4.当液位高于70%的时侯, V1关闭
5.当液位高于80%的时候, V2,V3并行关闭"
};
despcription.FontViewModel.HorizontalAlignment = HorizontalAlignment.Left;
despcription.FontViewModel.VerticalAlignment = VerticalAlignment.Top;
DiagramViewModel.DirectAddItemCommand.Execute(despcription);
Simulate_ListViewModel list = new Simulate_ListViewModel()
{
Left = 410,
Top = 390,
};
DiagramViewModel.DirectAddItemCommand.Execute(list);
Simulate_StartViewModel btnstart = new Simulate_StartViewModel() { Left = 0, Top = 0, LinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "S0"), };
DiagramViewModel.DirectAddItemCommand.Execute(btnstart);
Simulate_TankViewModel tank1 = new Simulate_TankViewModel() { Left = 100, Top = 43, ItemWidth = 48, ItemHeight = 60, Text = "T1", LinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "T1") };
DiagramViewModel.DirectAddItemCommand.Execute(tank1);
Simulate_SolenoidViewModel k1 = new Simulate_SolenoidViewModel() { Left = 200, Top = 0, Text = "K1", DILinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K1_DI"), DOLinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K1_DO") };
DiagramViewModel.DirectAddItemCommand.Execute(k1);
Simulate_SolenoidViewModel k2 = new Simulate_SolenoidViewModel() { Left = 200, Top = 60, Text = "K2", DILinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K2_DI"), DOLinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K2_DO") };
DiagramViewModel.DirectAddItemCommand.Execute(k2);
Simulate_SolenoidViewModel k3 = new Simulate_SolenoidViewModel() { Left = 200, Top = 120, Text = "K3", DILinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K3_DI"), DOLinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K3_DO") };
DiagramViewModel.DirectAddItemCommand.Execute(k3);
Simulate_TankViewModel tank2 = new Simulate_TankViewModel() { Left = 300, Top = 28, Text = "T2", LinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "T2") };
DiagramViewModel.DirectAddItemCommand.Execute(tank2);
Simulate_SolenoidViewModel k4 = new Simulate_SolenoidViewModel() { Left = 400, Top = 60, Text = "K4", DILinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K4_DI"), DOLinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "K4_DO") };
DiagramViewModel.DirectAddItemCommand.Execute(k4);
Simulate_TankViewModel tank3 = new Simulate_TankViewModel() { Left = 500, Top = 103, ItemWidth = 48, ItemHeight = 60, Text = "T3", LinkPoint = SFCService.LinkPoint.FirstOrDefault(p => p.Name == "T3") };
DiagramViewModel.DirectAddItemCommand.Execute(tank3);
ConnectorViewModel conn1 = new ConnectorViewModel(tank1.Output[0], k1.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(conn1);
ConnectorViewModel conn2 = new ConnectorViewModel(tank1.Output[0], k2.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(conn2);
ConnectorViewModel conn3 = new ConnectorViewModel(tank1.Output[0], k3.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(conn3);
ConnectorViewModel conn4 = new ConnectorViewModel(k1.Output[0], tank2.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(conn4);
ConnectorViewModel conn5 = new ConnectorViewModel(k2.Output[0], tank2.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(conn5);
ConnectorViewModel conn6 = new ConnectorViewModel(k3.Output[0], tank2.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(conn6);
ConnectorViewModel conn7 = new ConnectorViewModel(tank2.Output[1], k4.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(conn7);
ConnectorViewModel conn8 = new ConnectorViewModel(k4.Output[0], tank3.Input[0]);
DiagramViewModel.DirectAddItemCommand.Execute(conn8);
#endregion
DiagramViewModel.ClearSelectedItems();
SFCService.InitData(DiagramViewModel.Items.OfType<SFCNode>().ToList(), DiagramViewModel.Items.OfType<ConnectorViewModel>().ToList(), DiagramViewModel);
readDataTimer.Elapsed += timeCycle;
readDataTimer.Interval = 1000;
readDataTimer.AutoReset = false;
readDataTimer.Start();
}
private void timeCycle(object sender, ElapsedEventArgs e)
{
if (DiagramViewModel != null)
{
SFCService.Execute(DiagramViewModel);
}
readDataTimer.Start();
}
public override void Dispose()
{
base.Dispose();
readDataTimer.Stop();
readDataTimer.Dispose();
foreach (var viewModel in DiagramViewModels)
{
SFCService.DisposeData(viewModel);
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,71 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Fluent.Ribbon" Version="8.0.3" />
<PackageReference Include="MahApps.Metro.IconPacks" Version="4.8.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="Util.Svg2XamlTestExtension" Version="1.2.5" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Util.DiagramDesigner\Util.DiagramDesigner.csproj" />
</ItemGroup>
<ItemGroup>
<Page Update="Controls\Barcode.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
</Page>
<Page Update="Controls\GradientStopControl.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
</Page>
<Page Update="Controls\MultiSelectComboBox.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
<SubType>Designer</SubType>
</Page>
<Page Update="Controls\PopupWindow.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
</Page>
<Page Update="Controls\PropertiesView.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
</Page>
<Page Update="Controls\SliderRotation.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
<SubType>Designer</SubType>
</Page>
<Page Update="Extensions\ViewModels\BarcodeDesignerItemViewModel.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
<SubType>Designer</SubType>
</Page>
<Page Update="Extensions\ViewModels\OutLineTextDesignerItemViewModel.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
<SubType>Designer</SubType>
</Page>
<Page Update="Extensions\ViewModels\PathItemViewModel.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
</Page>
<Page Update="Extensions\ViewModels\PersistDesignerItemViewModel.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
<SubType>Designer</SubType>
</Page>
<Page Update="Extensions\ViewModels\SettingsDesignerItemViewModel.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
<SubType>Designer</SubType>
</Page>
<Page Update="Extensions\ViewModels\SvgDesignerItemViewModel.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
<SubType>Designer</SubType>
</Page>
</ItemGroup>
<ItemGroup>
<Reference Include="zxing.core">
<HintPath>..\AIStudio.Wpf.ADiagram\zxing.core.dll</HintPath>
</Reference>
</ItemGroup>
</Project>

View File

@@ -1,228 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.Reflection;
namespace AIStudio.Wpf.BaseDiagram.Controls
{
/// <summary>
/// Interaction logic for PropertiesView.xaml
/// </summary>
public partial class PropertiesView : UserControl
{
#region SelectedObject
public static readonly DependencyProperty SelectedObjectProperty = DependencyProperty.Register("SelectedObject", typeof(object), typeof(PropertiesView), new UIPropertyMetadata(null, OnSelectedObjectChanged));
public object SelectedObject
{
get
{
return (object)GetValue(SelectedObjectProperty);
}
set
{
SetValue(SelectedObjectProperty, value);
}
}
private static void OnSelectedObjectChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
PropertiesView propertyInspector = o as PropertiesView;
if (propertyInspector != null)
propertyInspector.OnSelectedObjectChanged((object)e.OldValue, (object)e.NewValue);
}
protected virtual void OnSelectedObjectChanged(object oldValue, object newValue)
{
// We do not want to process the change now if the grid is initializing (ie. BeginInit/EndInit).
var obj = oldValue as INotifyPropertyChanged;
if (obj != null)
obj.PropertyChanged -= PropertyChanged;
DisplayProperties();
obj = newValue as INotifyPropertyChanged;
if (obj != null)
obj.PropertyChanged += PropertyChanged;
}
#endregion //SelectedObject
public static readonly DependencyProperty NeedBrowsableProperty = DependencyProperty.Register("NeedBrowsable", typeof(bool), typeof(PropertiesView), new UIPropertyMetadata(true));
public bool NeedBrowsable
{
get
{
return (bool)GetValue(NeedBrowsableProperty);
}
set
{
SetValue(NeedBrowsableProperty, value);
}
}
public PropertiesView()
{
InitializeComponent();
this.Loaded += PropertiesView_Loaded;
}
private void PropertiesView_Loaded(object sender, RoutedEventArgs e)
{
DisplayProperties();
}
void PropertyChanged(object sender, PropertyChangedEventArgs e)
{
DisplayProperties();
}
private void DisplayProperties()
{
_panel.Children.Clear();
ClearGrid();
if (SelectedObject != null)
{
int row = 0;
foreach (var prop in SelectedObject.GetType().GetProperties())
{
var attr = prop.GetCustomAttributes(typeof(BrowsableAttribute), true);
if (NeedBrowsable == false && (attr.Length == 0 || (attr[0] as BrowsableAttribute).Browsable))
{
DisplayProperty(prop, row);
row++;
}
else if(NeedBrowsable == true && (attr.Length > 0 && (attr[0] as BrowsableAttribute).Browsable))
{
DisplayProperty(prop, row);
row++;
}
}
_panel.Children.Add(_gridContainer);
}
else
{
_panel.Children.Add(_label);
}
}
private void ClearGrid()
{
_grid.RowDefinitions.Clear();
for (int i = _grid.Children.Count - 1; i >= 0; i--)
{
if (_grid.Children[i] != _vLine && _grid.Children[i] != _splitter)
_grid.Children.RemoveAt(i);
}
}
private void DisplayProperty(PropertyInfo prop, int row)
{
var rowDef = new RowDefinition();
rowDef.Height = new GridLength(Math.Max(20, this.FontSize * 2));
_grid.RowDefinitions.Add(rowDef);
var tb = new TextBlock() { Text = prop.Name };
var displayAttr = prop.GetCustomAttributes(typeof(DisplayNameAttribute), true);
if (displayAttr.Length > 0 )
{
tb.Text = (displayAttr[0] as DisplayNameAttribute).DisplayName;
}
tb.Margin = new Thickness(4);
tb.VerticalAlignment = VerticalAlignment.Center;
Grid.SetColumn(tb, 0);
Grid.SetRow(tb, _grid.RowDefinitions.Count - 1);
_grid.Children.Add(tb);
var line = new Line();
line.Style = (Style)border.Resources["gridHorizontalLineStyle"];
Grid.SetRow(line, row);
_grid.Children.Add(line);
Style style = null;
var styleNameAttr = prop.GetCustomAttributes(typeof(StyleNameAttribute), true);
if (styleNameAttr.Length > 0)
{
style = this.FindResource((styleNameAttr[0] as StyleNameAttribute).Name) as Style;
if (style != null)
{
ContentControl content = new ContentControl();
content.Style = style;
content.DataContext = SelectedObject;
Grid.SetColumn(content, 1);
Grid.SetRow(content, _grid.RowDefinitions.Count - 1);
_grid.Children.Add(content);
}
}
if (style == null)
{
var ed = new TextBox();
ed.PreviewKeyDown += new KeyEventHandler(ed_KeyDown);
ed.Margin = new Thickness(0);
ed.VerticalAlignment = VerticalAlignment.Center;
ed.BorderThickness = new Thickness(0);
Grid.SetColumn(ed, 1);
Grid.SetRow(ed, _grid.RowDefinitions.Count - 1);
var binding = new Binding(prop.Name);
binding.Source = SelectedObject;
binding.ValidatesOnExceptions = true;
binding.Mode = BindingMode.OneWay;
if (prop.CanWrite)
{
var mi = prop.GetSetMethod();
if (mi != null && mi.IsPublic)
binding.Mode = BindingMode.TwoWay;
}
ed.SetBinding(TextBox.TextProperty, binding);
var template = (ControlTemplate)border.Resources["validationErrorTemplate"];
Validation.SetErrorTemplate(ed, template);
_grid.Children.Add(ed);
}
}
void ed_KeyDown(object sender, KeyEventArgs e)
{
var ed = sender as TextBox;
if (ed != null)
{
if (e.Key == Key.Enter)
{
ed.GetBindingExpression(TextBox.TextProperty).UpdateSource();
e.Handled = true;
}
else if (e.Key == Key.Escape)
ed.GetBindingExpression(TextBox.TextProperty).UpdateTarget();
}
}
}
[AttributeUsage(AttributeTargets.Property)]
public class StyleNameAttribute : Attribute
{
private string _name;
public StyleNameAttribute(string name)
{
_name = name;
}
public string Name
{
get { return _name; }
}
}
}

View File

@@ -1,45 +0,0 @@
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
using AIStudio.Wpf.BaseDiagram.Controls;
using Util.DiagramDesigner;
namespace AIStudio.Wpf.BaseDiagram.Converters
{
public class CountShiftConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values != null && values.Length > 2)
{
var diagram = values[0] as Util.DiagramDesigner.DiagramControl;
var zoomValue = (double)values[1];
var pageunit = (PageUnit)values[2];
var unit = Unit.Cm;
if (pageunit > PageUnit.km)
{
unit = Unit.Inch;
}
Vector vector = System.Windows.Media.VisualTreeHelper.GetOffset(diagram);
if (parameter?.ToString() == "Y")
{
var value = 0 - (unit == Unit.Cm? DipHelper.DipToCm(vector.Y - 20) : DipHelper.DipToInch(vector.Y - 20))/ zoomValue;
return value;
}
else
{
var value = 0 - (unit == Unit.Cm ? DipHelper.DipToCm(vector.X - 20) : DipHelper.DipToInch(vector.X - 20)) / zoomValue;
return value;
}
}
return 0;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@@ -1,90 +0,0 @@
using AIStudio.Wpf.BaseDiagram.Services;
using System;
using Util.DiagramDesigner;
using ZXing;
namespace AIStudio.Wpf.BaseDiagram.Extensions.ViewModels
{
public class BarcodeDesignerItemViewModel : DesignerItemViewModelBase
{
private IUIVisualizerService visualiserService;
public BarcodeDesignerItemViewModel() : base()
{
}
public BarcodeDesignerItemViewModel(IDiagramViewModel parent, DesignerItemBase designer) : base(parent, designer)
{
}
protected override void Init()
{
base.Init();
visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService;
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel parent, SelectableDesignerItemBase designerbase)
{
base.LoadDesignerItemViewModel(parent, designerbase);
Format = (BarcodeFormat)Enum.Parse(typeof(BarcodeFormat), (designerbase as DesignerItemBase).Reserve.ToString());
}
public void AutoSize()
{
ItemWidth = 140;
ItemHeight = 140;
}
protected override void ExecuteEditCommand(object parameter)
{
EditData();
}
public override bool InitData()
{
if (string.IsNullOrEmpty(Icon))
return EditData();
return true;
}
public BarcodeFormat Format { get; set; } = BarcodeFormat.QR_CODE;
private bool _showText;
public override bool ShowText
{
get
{
return false;
}
set
{
SetProperty(ref _showText, value);
}
}
public override bool EditData()
{
if (IsReadOnly == true) return false;
BarcodeDesignerItemData data = new BarcodeDesignerItemData(this);
if (visualiserService.ShowDialog(data) == true)
{
bool needauto = Text == null;
Text = data.Text;
Icon = data.Icon;
Margin = data.Margin;
if (needauto)
{
AutoSize();
}
return true;
}
return false;
}
}
}

View File

@@ -1,24 +0,0 @@
using Util.DiagramDesigner;
namespace AIStudio.Wpf.BaseDiagram.Extensions.ViewModels
{
public class PathItemViewModel : DesignerItemViewModelBase
{
public PathItemViewModel() : base()
{
}
public PathItemViewModel(IDiagramViewModel parent, DesignerItemBase designer) : base(parent, designer)
{
}
protected override void Init()
{
base.Init();
this.ShowConnectors = false;
}
}
}

View File

@@ -1,52 +0,0 @@
using AIStudio.Wpf.BaseDiagram.Services;
using Util.DiagramDesigner;
using AIStudio.Wpf.BaseDiagram.Extensions.Models;
namespace AIStudio.Wpf.BaseDiagram.Extensions.ViewModels
{
public class PersistDesignerItemViewModel : DesignerItemViewModelBase
{
private IUIVisualizerService visualiserService;
public PersistDesignerItemViewModel(IDiagramViewModel parent, PersistDesignerItem designer) : base(parent, designer)
{
}
public PersistDesignerItemViewModel() : base()
{
}
protected override void Init()
{
base.Init();
visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService;
this.ShowConnectors = false;
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel parent, SelectableDesignerItemBase designerbase)
{
base.LoadDesignerItemViewModel(parent, designerbase);
PersistDesignerItem designer = designerbase as PersistDesignerItem;
this.HostUrl = designer.HostUrl;
}
public string HostUrl { get; set; }
protected override void ExecuteEditCommand(object parameter)
{
PersistDesignerItemData data = new PersistDesignerItemData(HostUrl);
if (visualiserService.ShowDialog(data) == true)
{
this.HostUrl = data.HostUrl;
}
}
}
}

View File

@@ -1,51 +0,0 @@
using AIStudio.Wpf.BaseDiagram.Services;
using System;
using Util.DiagramDesigner;
using AIStudio.Wpf.BaseDiagram.Extensions.Models;
namespace AIStudio.Wpf.BaseDiagram.Extensions.ViewModels
{
public class SettingsDesignerItemViewModel : DesignerItemViewModelBase
{
private IUIVisualizerService visualiserService;
public SettingsDesignerItemViewModel(IDiagramViewModel parent, SettingsDesignerItem designer) : base(parent, designer)
{
}
public SettingsDesignerItemViewModel() : base()
{
}
protected override void Init()
{
base.Init();
visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService;
this.ShowConnectors = false;
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel parent, SelectableDesignerItemBase designerbase)
{
base.LoadDesignerItemViewModel(parent, designerbase);
SettingsDesignerItem designer = designerbase as SettingsDesignerItem;
this.Setting = designer.Setting;
}
public String Setting{ get; set; }
protected override void ExecuteEditCommand(object parameter)
{
SettingsDesignerItemData data = new SettingsDesignerItemData(Setting);
if (visualiserService.ShowDialog(data) == true)
{
this.Setting = data.Setting1;
}
}
}
}

View File

@@ -1,18 +0,0 @@
using Util.DiagramDesigner;
namespace AIStudio.Wpf.BaseDiagram.Extensions.ViewModels
{
public class SvgDesignerItemViewModel: MediaItemViewModel
{
protected override string Filter { get; set; } = "Svg|*.svg";
public SvgDesignerItemViewModel() : base()
{
}
public SvgDesignerItemViewModel(IDiagramViewModel parent, MediaDesignerItem designer) : base(parent, designer)
{
}
}
}

View File

@@ -1,21 +1,39 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29509.3
# Visual Studio Version 17
VisualStudioVersion = 17.4.33205.214
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Util.DiagramDesigner", "Util.DiagramDesigner\Util.DiagramDesigner.csproj", "{3FC9F09D-83EA-4914-8980-A6B4C3352836}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.Flowchart", "Extensions\AIStudio.Wpf.Flowchart\AIStudio.Wpf.Flowchart.csproj", "{86ED5B40-D185-4AFA-B5BD-BC8E78DB8758}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.ADiagram", "AIStudio.Wpf.ADiagram\AIStudio.Wpf.ADiagram.csproj", "{9D2DCA7D-9E0C-4E6E-ACD9-2CD18C75FE34}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.BaseDiagram", "AIStudio.Wpf.BaseDiagram\AIStudio.Wpf.BaseDiagram.csproj", "{FC7CFBB7-29AE-4660-A94B-B80CF317D3C3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.Flowchart", "AIStudio.Wpf.Flowchart\AIStudio.Wpf.Flowchart.csproj", "{86ED5B40-D185-4AFA-B5BD-BC8E78DB8758}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.Logical", "AIStudio.Wpf.Logical\AIStudio.Wpf.Logical.csproj", "{CC68D39D-7935-4079-9CEB-FC2FD498D511}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.Logical", "Extensions\AIStudio.Wpf.Logical\AIStudio.Wpf.Logical.csproj", "{CC68D39D-7935-4079-9CEB-FC2FD498D511}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{4959F170-02FB-4B7F-8F53-93DAF22713F9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AIStudio.Wpf.SFC", "AIStudio.Wpf.SFC\AIStudio.Wpf.SFC.csproj", "{2AB69067-277E-4EE0-9949-8326A145EEE4}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.SFC", "Extensions\AIStudio.Wpf.SFC\AIStudio.Wpf.SFC.csproj", "{2AB69067-277E-4EE0-9949-8326A145EEE4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.DiagramApp", "AIStudio.Wpf.DiagramApp\AIStudio.Wpf.DiagramApp.csproj", "{4408F718-9C14-4404-A63B-9B785F9D4F35}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.DiagramDesigner", "AIStudio.Wpf.DiagramDesigner\AIStudio.Wpf.DiagramDesigner.csproj", "{EA1D893D-2F50-47AA-80A6-EA297F651CCC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "解决方案项", "解决方案项", "{425E7DBD-25B9-4019-9C84-C37273A7F5C3}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
Directory.Build.Props = Directory.Build.Props
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2BE1891E-16C9-4191-998A-45AEEEEA1F0D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.DiagramDesigner.Additionals", "AIStudio.Wpf.DiagramDesigner.Additionals\AIStudio.Wpf.DiagramDesigner.Additionals.csproj", "{186F34AC-4BC5-40E1-911B-DD3E96AECE6E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.Mind", "Extensions\AIStudio.Wpf.Mind\AIStudio.Wpf.Mind.csproj", "{85C437B9-16D2-4076-ABCD-52029AC232FC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.DiagramDesigner.Serializable", "AIStudio.Wpf.DiagramDesigner.Serializable\AIStudio.Wpf.DiagramDesigner.Serializable.csproj", "{439D0631-D9C2-4D36-BFCE-80DFCCABE9E7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Demos", "Demos", "{62DC8608-D98F-47BB-9F19-ABB0C60B72FF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.DiagramDesigner.Demo", "Demos\AIStudio.Wpf.DiagramDesigner.Demo\AIStudio.Wpf.DiagramDesigner.Demo.csproj", "{FCFC5ABF-8459-4B45-ABA0-9B820C7ED5C6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.Script", "Extensions\AIStudio.Wpf.Script\AIStudio.Wpf.Script.csproj", "{27A4C86D-3792-4D14-BAEE-3B103A709872}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -23,18 +41,6 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{3FC9F09D-83EA-4914-8980-A6B4C3352836}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3FC9F09D-83EA-4914-8980-A6B4C3352836}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3FC9F09D-83EA-4914-8980-A6B4C3352836}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3FC9F09D-83EA-4914-8980-A6B4C3352836}.Release|Any CPU.Build.0 = Release|Any CPU
{9D2DCA7D-9E0C-4E6E-ACD9-2CD18C75FE34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9D2DCA7D-9E0C-4E6E-ACD9-2CD18C75FE34}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9D2DCA7D-9E0C-4E6E-ACD9-2CD18C75FE34}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9D2DCA7D-9E0C-4E6E-ACD9-2CD18C75FE34}.Release|Any CPU.Build.0 = Release|Any CPU
{FC7CFBB7-29AE-4660-A94B-B80CF317D3C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FC7CFBB7-29AE-4660-A94B-B80CF317D3C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FC7CFBB7-29AE-4660-A94B-B80CF317D3C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FC7CFBB7-29AE-4660-A94B-B80CF317D3C3}.Release|Any CPU.Build.0 = Release|Any CPU
{86ED5B40-D185-4AFA-B5BD-BC8E78DB8758}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{86ED5B40-D185-4AFA-B5BD-BC8E78DB8758}.Debug|Any CPU.Build.0 = Debug|Any CPU
{86ED5B40-D185-4AFA-B5BD-BC8E78DB8758}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -47,6 +53,34 @@ Global
{2AB69067-277E-4EE0-9949-8326A145EEE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2AB69067-277E-4EE0-9949-8326A145EEE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2AB69067-277E-4EE0-9949-8326A145EEE4}.Release|Any CPU.Build.0 = Release|Any CPU
{4408F718-9C14-4404-A63B-9B785F9D4F35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4408F718-9C14-4404-A63B-9B785F9D4F35}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4408F718-9C14-4404-A63B-9B785F9D4F35}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4408F718-9C14-4404-A63B-9B785F9D4F35}.Release|Any CPU.Build.0 = Release|Any CPU
{EA1D893D-2F50-47AA-80A6-EA297F651CCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EA1D893D-2F50-47AA-80A6-EA297F651CCC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EA1D893D-2F50-47AA-80A6-EA297F651CCC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EA1D893D-2F50-47AA-80A6-EA297F651CCC}.Release|Any CPU.Build.0 = Release|Any CPU
{186F34AC-4BC5-40E1-911B-DD3E96AECE6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{186F34AC-4BC5-40E1-911B-DD3E96AECE6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{186F34AC-4BC5-40E1-911B-DD3E96AECE6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{186F34AC-4BC5-40E1-911B-DD3E96AECE6E}.Release|Any CPU.Build.0 = Release|Any CPU
{85C437B9-16D2-4076-ABCD-52029AC232FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{85C437B9-16D2-4076-ABCD-52029AC232FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{85C437B9-16D2-4076-ABCD-52029AC232FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{85C437B9-16D2-4076-ABCD-52029AC232FC}.Release|Any CPU.Build.0 = Release|Any CPU
{439D0631-D9C2-4D36-BFCE-80DFCCABE9E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{439D0631-D9C2-4D36-BFCE-80DFCCABE9E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{439D0631-D9C2-4D36-BFCE-80DFCCABE9E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{439D0631-D9C2-4D36-BFCE-80DFCCABE9E7}.Release|Any CPU.Build.0 = Release|Any CPU
{FCFC5ABF-8459-4B45-ABA0-9B820C7ED5C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FCFC5ABF-8459-4B45-ABA0-9B820C7ED5C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FCFC5ABF-8459-4B45-ABA0-9B820C7ED5C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FCFC5ABF-8459-4B45-ABA0-9B820C7ED5C6}.Release|Any CPU.Build.0 = Release|Any CPU
{27A4C86D-3792-4D14-BAEE-3B103A709872}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{27A4C86D-3792-4D14-BAEE-3B103A709872}.Debug|Any CPU.Build.0 = Debug|Any CPU
{27A4C86D-3792-4D14-BAEE-3B103A709872}.Release|Any CPU.ActiveCfg = Release|Any CPU
{27A4C86D-3792-4D14-BAEE-3B103A709872}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -55,6 +89,9 @@ Global
{86ED5B40-D185-4AFA-B5BD-BC8E78DB8758} = {4959F170-02FB-4B7F-8F53-93DAF22713F9}
{CC68D39D-7935-4079-9CEB-FC2FD498D511} = {4959F170-02FB-4B7F-8F53-93DAF22713F9}
{2AB69067-277E-4EE0-9949-8326A145EEE4} = {4959F170-02FB-4B7F-8F53-93DAF22713F9}
{85C437B9-16D2-4076-ABCD-52029AC232FC} = {4959F170-02FB-4B7F-8F53-93DAF22713F9}
{FCFC5ABF-8459-4B45-ABA0-9B820C7ED5C6} = {62DC8608-D98F-47BB-9F19-ABB0C60B72FF}
{27A4C86D-3792-4D14-BAEE-3B103A709872} = {4959F170-02FB-4B7F-8F53-93DAF22713F9}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D30FC641-F06C-4E35-AEA5-48A9B6E59CE0}

View File

@@ -2,10 +2,10 @@
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFrameworks>netcoreapp3.1</TargetFrameworks>
<UseWPF>true</UseWPF>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
<ItemGroup>
<Compile Remove="DesignItems\Custom\**" />
<EmbeddedResource Remove="DesignItems\Custom\**" />
@@ -109,6 +109,11 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="AIStudio.Wpf.ComeCapture" Version="1.1.0" />
<PackageReference Include="Costura.Fody" Version="5.7.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Dragablz" Version="0.0.3.223" />
<PackageReference Include="Fluent.Ribbon" Version="8.0.3" />
<PackageReference Include="gong-wpf-dragdrop" Version="2.3.2" />
@@ -120,16 +125,37 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AIStudio.Wpf.BaseDiagram\AIStudio.Wpf.BaseDiagram.csproj" />
<ProjectReference Include="..\AIStudio.Wpf.Flowchart\AIStudio.Wpf.Flowchart.csproj" />
<ProjectReference Include="..\AIStudio.Wpf.Logical\AIStudio.Wpf.Logical.csproj" />
<ProjectReference Include="..\AIStudio.Wpf.SFC\AIStudio.Wpf.SFC.csproj" />
<ProjectReference Include="..\Util.DiagramDesigner\Util.DiagramDesigner.csproj" />
<ProjectReference Include="..\AIStudio.Wpf.DiagramDesigner.Additionals\AIStudio.Wpf.DiagramDesigner.Additionals.csproj" />
<ProjectReference Include="..\AIStudio.Wpf.DiagramDesigner.Serializable\AIStudio.Wpf.DiagramDesigner.Serializable.csproj" />
<ProjectReference Include="..\AIStudio.Wpf.DiagramDesigner\AIStudio.Wpf.DiagramDesigner.csproj" />
<ProjectReference Include="..\Extensions\AIStudio.Wpf.Flowchart\AIStudio.Wpf.Flowchart.csproj" />
<ProjectReference Include="..\Extensions\AIStudio.Wpf.Logical\AIStudio.Wpf.Logical.csproj" />
<ProjectReference Include="..\Extensions\AIStudio.Wpf.Mind\AIStudio.Wpf.Mind.csproj" />
<ProjectReference Include="..\Extensions\AIStudio.Wpf.Script\AIStudio.Wpf.Script.csproj" />
<ProjectReference Include="..\Extensions\AIStudio.Wpf.SFC\AIStudio.Wpf.SFC.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="zxing.core">
<HintPath>zxing.core.dll</HintPath>
<ItemGroup Condition="'$(TargetFramework)' == 'net5.0-windows'">
<Reference Include="AIStudio.Wpf.Script.Core">
<HintPath>..\Extensions\AIStudio.Wpf.Script\Dlls\net5.0-windows\AIStudio.Wpf.Script.Core.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0-windows'">
<Reference Include="AIStudio.Wpf.Script.Core">
<HintPath>..\Extensions\AIStudio.Wpf.Script\Dlls\net6.0-windows\AIStudio.Wpf.Script.Core.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
<Reference Include="AIStudio.Wpf.Script.Core">
<HintPath>..\Extensions\AIStudio.Wpf.Script\Dlls\netcoreapp3.1\AIStudio.Wpf.Script.Core.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net461'">
<Reference Include="AIStudio.Wpf.Script.Core">
<HintPath>..\Extensions\AIStudio.Wpf.Script\Dlls\net461\AIStudio.Wpf.Script.Core.dll</HintPath>
</Reference>
</ItemGroup>
@@ -237,9 +263,6 @@
</ItemGroup>
<ItemGroup>
<None Update="DesignItems\Customs\1.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Images\Svgs\account-book.svg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>

View File

@@ -0,0 +1,23 @@
<Application x:Class="AIStudio.Wpf.DiagramApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:AIStudio.Wpf.DiagramApp"
StartupUri="Views/MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Fluent;component/Themes/Generic.xaml" />
<ResourceDictionary Source="pack://application:,,,/Dragablz;component/Themes/Generic.xaml" />
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.DiagramApp;component/Themes/Generic.xaml" />
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Flowchart;component/Themes/FlowNode.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Logical;component/Themes/LogicalGateItemViewModel.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.SFC;component/Themes/SFCNode.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Mind;component/Themes/MindNode.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Mind;component/Themes/Generic.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Script.Core;component/Themes/RoslynScriptViewModel.xaml" />
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Script;component/Themes/ColorBoxFactoryScriptViewModel.xaml" />
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Script;component/Themes/ColorBoxCollectorScriptViewModel.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>

View File

@@ -10,7 +10,7 @@ using System.Windows;
//如果是WinForm假定程序为MyDemo.exe则需要一个MyDemo.exe.config文件
//如果是WebForm则从web.config中读取相关信息
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace AIStudio.Wpf.ADiagram
namespace AIStudio.Wpf.DiagramApp
{
/// <summary>
/// Interaction logic for App.xaml

View File

@@ -0,0 +1 @@
{"Title":null,"DiagramType":0,"DiagramItems":[{"Name":null,"DiagramType":0,"ShowGrid":false,"PhysicalGridCellSize":"0,0","CellHorizontalAlignment":0,"CellVerticalAlignment":0,"PageSizeOrientation":0,"PhysicalPageSize":"0,0","PageSizeType":0,"PhysicalGridMarginSize":"0,0","GridColor":"#00000000","DesignerItems":[{"ModelType":null,"ModelTypeName":"AIStudio.Wpf.DiagramDesigner.DefaultDesignerItemViewModel","SerializableType":null,"SerializableTypeName":"AIStudio.Wpf.DiagramDesigner.DesignerItemBase","SerializableString":"{\"PhysicalLeft\":55.071354166666666,\"PhysicalTop\":10.13635421792666,\"Angle\":0.0,\"ScaleX\":1.0,\"ScaleY\":1.0,\"Margin\":0.0,\"ItemWidth\":14.557291666666666,\"ItemHeight\":14.557291666666666,\"Icon\":null,\"Reserve\":null,\"ItemTypeName\":\"AIStudio.Wpf.DiagramDesigner.DefaultDesignerItemViewModel\",\"ParentId\":\"00000000-0000-0000-0000-000000000000\",\"Id\":\"e400c493-a6e9-4ac6-88b0-387bb35a83bc\",\"ZIndex\":0,\"IsGroup\":false,\"Text\":\"AIStudio\",\"ColorItem\":{\"LineColor\":{\"BrushType\":1,\"Color\":\"#FF808080\",\"GradientStop\":null,\"Offset\":null,\"Image\":null,\"SubType\":0,\"StartPoint\":\"0,0\",\"EndPoint\":\"0,0\",\"Opacity\":1.0,\"LinearOrientation\":0,\"RadialOrientation\":0,\"Angle\":0},\"FillColor\":{\"BrushType\":1,\"Color\":\"#FFFFA500\",\"GradientStop\":null,\"Offset\":null,\"Image\":null,\"SubType\":0,\"StartPoint\":\"0,0\",\"EndPoint\":\"0,0\",\"Opacity\":1.0,\"LinearOrientation\":0,\"RadialOrientation\":0,\"Angle\":0},\"ShadowColor\":\"#00FFFFFF\",\"LineWidth\":1.0,\"LineDashStyle\":0,\"LineAnimation\":0,\"LineAnimationDuration\":1.0},\"FontItem\":{\"FontWeight\":\"Normal\",\"FontStyle\":\"Normal\",\"FontStretch\":\"Normal\",\"Underline\":false,\"Strikethrough\":false,\"OverLine\":false,\"FontColor\":\"#FF000000\",\"FontFamily\":\"Arial\",\"FontSize\":12.0,\"FontObject\":\"Arial, 12pt\",\"TextEffectColor\":\"#00FFFFFF\",\"HighlightColor\":\"#00FFFFFF\",\"FontCase\":0,\"HorizontalAlignment\":1,\"VerticalAlignment\":1,\"LineHeight\":0.0},\"SharpItem\":{\"SourceMarker\":{\"Path\":\"\",\"Width\":10.0,\"Height\":10.0,\"PathStyle\":0,\"SizeStyle\":10},\"SinkMarker\":{\"Path\":\"M 0 -5 10 0 0 5 z\",\"Width\":10.0,\"Height\":10.0,\"PathStyle\":1,\"SizeStyle\":10}}}"}],"Connections":[]}]}

View File

@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<Costura />
</Weavers>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="Costura" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:all>
<xs:element minOccurs="0" maxOccurs="1" name="ExcludeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="IncludeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="ExcludeRuntimeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="IncludeRuntimeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged32Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged64Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="PreloadOrder" type="xs:string">
<xs:annotation>
<xs:documentation>The order of preloaded assemblies, delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:all>
<xs:attribute name="CreateTemporaryAssemblies" type="xs:boolean">
<xs:annotation>
<xs:documentation>This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IncludeDebugSymbols" type="xs:boolean">
<xs:annotation>
<xs:documentation>Controls if .pdbs for reference assemblies are also embedded.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IncludeRuntimeReferences" type="xs:boolean">
<xs:annotation>
<xs:documentation>Controls if runtime assemblies are also embedded.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="UseRuntimeReferencePaths" type="xs:boolean">
<xs:annotation>
<xs:documentation>Controls whether the runtime assemblies are embedded with their full path or only with their assembly name.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="DisableCompression" type="xs:boolean">
<xs:annotation>
<xs:documentation>Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="DisableCleanup" type="xs:boolean">
<xs:annotation>
<xs:documentation>As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="LoadAtModuleInit" type="xs:boolean">
<xs:annotation>
<xs:documentation>Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IgnoreSatelliteAssemblies" type="xs:boolean">
<xs:annotation>
<xs:documentation>Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ExcludeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with |</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IncludeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ExcludeRuntimeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with |</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IncludeRuntimeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Unmanaged32Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Unmanaged64Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="PreloadOrder" type="xs:string">
<xs:annotation>
<xs:documentation>The order of preloaded assemblies, delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 405 B

After

Width:  |  Height:  |  Size: 405 B

View File

Before

Width:  |  Height:  |  Size: 353 B

After

Width:  |  Height:  |  Size: 353 B

View File

Before

Width:  |  Height:  |  Size: 365 B

After

Width:  |  Height:  |  Size: 365 B

View File

Before

Width:  |  Height:  |  Size: 425 B

After

Width:  |  Height:  |  Size: 425 B

View File

Before

Width:  |  Height:  |  Size: 454 B

After

Width:  |  Height:  |  Size: 454 B

View File

Before

Width:  |  Height:  |  Size: 413 B

After

Width:  |  Height:  |  Size: 413 B

View File

Before

Width:  |  Height:  |  Size: 185 B

After

Width:  |  Height:  |  Size: 185 B

View File

Before

Width:  |  Height:  |  Size: 230 B

After

Width:  |  Height:  |  Size: 230 B

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

Before

Width:  |  Height:  |  Size: 556 B

After

Width:  |  Height:  |  Size: 556 B

View File

Before

Width:  |  Height:  |  Size: 689 B

After

Width:  |  Height:  |  Size: 689 B

View File

Before

Width:  |  Height:  |  Size: 185 B

After

Width:  |  Height:  |  Size: 185 B

View File

Before

Width:  |  Height:  |  Size: 230 B

After

Width:  |  Height:  |  Size: 230 B

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

Before

Width:  |  Height:  |  Size: 643 B

After

Width:  |  Height:  |  Size: 643 B

View File

Before

Width:  |  Height:  |  Size: 628 B

After

Width:  |  Height:  |  Size: 628 B

View File

Before

Width:  |  Height:  |  Size: 743 B

After

Width:  |  Height:  |  Size: 743 B

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 435 B

After

Width:  |  Height:  |  Size: 435 B

View File

Before

Width:  |  Height:  |  Size: 334 B

After

Width:  |  Height:  |  Size: 334 B

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1022 B

After

Width:  |  Height:  |  Size: 1022 B

View File

Before

Width:  |  Height:  |  Size: 185 B

After

Width:  |  Height:  |  Size: 185 B

View File

Before

Width:  |  Height:  |  Size: 228 B

After

Width:  |  Height:  |  Size: 228 B

View File

Before

Width:  |  Height:  |  Size: 185 B

After

Width:  |  Height:  |  Size: 185 B

View File

Before

Width:  |  Height:  |  Size: 229 B

After

Width:  |  Height:  |  Size: 229 B

View File

Before

Width:  |  Height:  |  Size: 654 B

After

Width:  |  Height:  |  Size: 654 B

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 743 B

After

Width:  |  Height:  |  Size: 743 B

View File

Before

Width:  |  Height:  |  Size: 185 B

After

Width:  |  Height:  |  Size: 185 B

View File

Before

Width:  |  Height:  |  Size: 231 B

After

Width:  |  Height:  |  Size: 231 B

View File

Before

Width:  |  Height:  |  Size: 730 B

After

Width:  |  Height:  |  Size: 730 B

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 185 B

After

Width:  |  Height:  |  Size: 185 B

View File

Before

Width:  |  Height:  |  Size: 225 B

After

Width:  |  Height:  |  Size: 225 B

View File

Before

Width:  |  Height:  |  Size: 766 B

After

Width:  |  Height:  |  Size: 766 B

View File

Before

Width:  |  Height:  |  Size: 185 B

After

Width:  |  Height:  |  Size: 185 B

View File

Before

Width:  |  Height:  |  Size: 229 B

After

Width:  |  Height:  |  Size: 229 B

View File

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

Before

Width:  |  Height:  |  Size: 595 B

After

Width:  |  Height:  |  Size: 595 B

View File

Before

Width:  |  Height:  |  Size: 559 B

After

Width:  |  Height:  |  Size: 559 B

View File

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 586 B

View File

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 823 B

After

Width:  |  Height:  |  Size: 823 B

View File

Before

Width:  |  Height:  |  Size: 698 B

After

Width:  |  Height:  |  Size: 698 B

View File

Before

Width:  |  Height:  |  Size: 764 B

After

Width:  |  Height:  |  Size: 764 B

View File

Before

Width:  |  Height:  |  Size: 759 B

After

Width:  |  Height:  |  Size: 759 B

View File

Before

Width:  |  Height:  |  Size: 926 B

After

Width:  |  Height:  |  Size: 926 B

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 899 B

After

Width:  |  Height:  |  Size: 899 B

View File

Before

Width:  |  Height:  |  Size: 616 B

After

Width:  |  Height:  |  Size: 616 B

Some files were not shown because too many files have changed in this diff Show More