开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 18

DebugMan/SharpSCADA

forked from 盘古软件/SharpSCADA
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (2)
master
develop
master
分支 (2)
master
develop
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (2)
master
develop
SharpSCADA
/
src
/
Program
/
LinkableControlDesignTime
/
ControlAdornerProvider.cs
SharpSCADA
/
src
/
Program
/
LinkableControlDesignTime
/
ControlAdornerProvider.cs
ControlAdornerProvider.cs 8.40 KB
一键复制 编辑 原始数据 按行查看 历史
panvsoft 提交于 2020年04月10日 22:26 +08:00 . 初始版本
using System.Collections.Generic;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using Microsoft.Windows.Design.Interaction;
using Microsoft.Windows.Design.Model;
namespace HMIControl.VisualStudio.Design
{
class ControlAdornerProvider : PrimarySelectionAdornerProvider
{
private AdornerPanel _panel = new AdornerPanel();
LinkableControl designObject;
ControlAdorner adorner;
Panel designCanvas;
LinkPin hitPin;
bool isdrag = false;
protected override void Activate(ModelItem item)
{
designObject = item.GetCurrentValue() as LinkableControl;//获得被点击的控件对象
if (designObject != null)
{
designCanvas = designObject.Parent as Panel;
DesignerView v = DesignerView.FromContext(Context);
adorner = new ControlAdorner(designObject);
adorner.RenderTransform = new ScaleTransform(v.ZoomLevel, v.ZoomLevel);
foreach (var pin in adorner.Children)
{
pin.MouseLeftButtonDown += new MouseButtonEventHandler(Pin_MouseLeftButtonDown);//按下左键选中hitPin,开始拖动
pin.MouseMove += new MouseEventHandler(Pin_MouseMove);//移动鼠标,开始找寻目标连接节点
}
AdornerPanel.SetAdornerHorizontalAlignment(adorner, AdornerHorizontalAlignment.Stretch);
AdornerPanel.SetAdornerVerticalAlignment(adorner, AdornerVerticalAlignment.Stretch);
_panel.Children.Add(adorner);
Adorners.Add(_panel);
v.ZoomLevelChanged += (s, e) => { adorner.RenderTransform = new ScaleTransform(v.ZoomLevel, v.ZoomLevel); };
}
base.Activate(item);
}
protected override void Deactivate()
{
base.Deactivate();
}
void Pin_MouseLeftButtonDown(object s, MouseButtonEventArgs e)
{
hitPin = s as LinkPin; isdrag = true; e.Handled = true;
}
void Pin_MouseMove(object s, MouseEventArgs e)
{
if (e.LeftButton != MouseButtonState.Pressed) isdrag = false;
if (isdrag && hitPin != null && designCanvas != null)
{
PinAdorner pinAdorner = new PinAdorner(designCanvas, hitPin);
pinAdorner.MouseUp += new MouseButtonEventHandler(pinAdorner_MouseUp);
DesignerView v = DesignerView.FromContext(Context);
double zoom = v.ZoomLevel;
pinAdorner.RenderTransform = new ScaleTransform(zoom, zoom);
_panel.Children.Add(pinAdorner);
e.Handled = true;
}
}
static readonly Dictionary<ConnectOrientation, string> omap = new Dictionary<ConnectOrientation, string>
{ { ConnectOrientation.Left, "LeftPin" }, { ConnectOrientation.Right, "RightPin" },
{ ConnectOrientation.Top, "TopPin" }, { ConnectOrientation.Bottom, "BottomPin" },{ ConnectOrientation.None, "" } };
void pinAdorner_MouseUp(object sender, MouseButtonEventArgs e)
{
var pinAdorner = sender as PinAdorner;
if (pinAdorner.HitPin != null)
{
LinkableControl targetObject = pinAdorner.HitLinkableControl;
LinkPin lp1 = pinAdorner.SourcePin;
LinkPin lp2 = pinAdorner.HitPin;
ConnectInfo info1 = lp1.GetInfo();
ConnectInfo info2 = lp2.GetInfo();
LinkLine line = new LinkLine(info1, info2);
//Panel.SetZIndex(line, designCanvas.Children.Count);
Binding bi1 = new Binding(omap[info1.Orient]);
bi1.ElementName = designObject.Name;
line.SetBinding(LinkLine.OriginInfoProperty, bi1);
Binding bi2 = new Binding(omap[info2.Orient]);
bi2.ElementName = targetObject.Name;
line.SetBinding(LinkLine.TargetInfoProperty, bi2);
var CanvasModelItem = AdornerProperties.GetModel(adorner).Parent;
ModelItemCollection myControls = CanvasModelItem.Properties["Children"].Collection;
ModelItem myLinkLine = myControls.Add(line);
}
if (pinAdorner.HitLinkableControl != null)
{
pinAdorner.HitLinkableControl.IsLinkDragOver = false;
}
hitPin = null;
if (adorner.IsMouseCaptured) adorner.ReleaseMouseCapture();
_panel.Children.Remove(pinAdorner);
}
}
class LinkLineAdornerProvider : PrimarySelectionAdornerProvider
{
LinkLine myLinkLine;
SolidColorBrush brush;
protected override void Activate(ModelItem item)
{
myLinkLine = item.GetCurrentValue() as LinkLine;
brush = myLinkLine.LineBrush;
Panel.SetZIndex(myLinkLine, 1000);
myLinkLine.LineBrush = Brushes.Yellow;
base.Activate(item);
}
protected override void Deactivate()
{
myLinkLine.LineBrush = brush;
Panel.SetZIndex(myLinkLine, 0);
base.Deactivate();
}
}
class TagComplexContextMenuProvider : PrimarySelectionContextMenuProvider
{
public TagComplexContextMenuProvider()
{
var lastFill = new MenuAction("Complex Editor");
lastFill.Checkable = true;
lastFill.Execute += (s, e) =>
{
ModelItem item = e.Selection.PrimarySelection;
var tagReader = item.GetCurrentValue() as ITagReader;
TagComplexEditor frm = new TagComplexEditor(tagReader);
frm.ShowDialog();
string txt = frm.TagText;
if (!string.IsNullOrEmpty(txt)) { item.Properties["TagReadText"].SetValue(txt); }
else if (txt == string.Empty) item.Properties["TagReadText"].ClearValue();
};
Items.Add(lastFill);
}
}
class TagWindowContextMenuProvider : PrimarySelectionContextMenuProvider
{
public TagWindowContextMenuProvider()
{
var lastFill = new MenuAction("Window Editor");
lastFill.Checkable = true;
lastFill.Execute += (s, e) =>
{
ModelItem item = e.Selection.PrimarySelection;
ITagWindow tagReader = item.GetCurrentValue() as ITagWindow;
TagWindowEditor frm = new TagWindowEditor(tagReader);
frm.ShowDialog();
string txt = frm.GetText();
if (!string.IsNullOrEmpty(txt)) { item.Properties["TagWindowText"].SetValue(txt); }
else if (txt == string.Empty) item.Properties["TagWindowText"].ClearValue();
if (frm.IsModel)
item.Properties["IsModel"].SetValue(true);
else
item.Properties["IsModel"].ClearValue();
if (frm.IsUnique)
item.Properties["IsUnique"].SetValue(true);
else
item.Properties["IsUnique"].ClearValue();
};
Items.Add(lastFill);
}
}
class TagWriterContextMenuProvider : PrimarySelectionContextMenuProvider
{
public TagWriterContextMenuProvider()
{
var lastFill = new MenuAction("Writer Editor");
lastFill.Checkable = true;
lastFill.Execute += (s, e) =>
{
ModelItem item = e.Selection.PrimarySelection;
var tagWriter = item.GetCurrentValue() as ITagWriter;
TagWriteEditor frm = new TagWriteEditor(tagWriter);
frm.ShowDialog();
if (frm.IsSaved)
{
string txt = frm.TagText;
if (string.IsNullOrEmpty(txt) == false) { item.Properties["TagWriteText"].SetValue(txt); }
else if (txt == string.Empty) item.Properties["TagWriteText"].ClearValue();
if (frm.IsPulse)
item.Properties["IsPulse"].SetValue(true);
else
item.Properties["IsPulse"].ClearValue();
}
};
Items.Add(lastFill);
}
}
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

一款工业级轻量级组态软件 1.轻量级工控网关: 支持当前几种主要的工业协议如西门子的Profinet、AB的EtherNetIPs、施耐德的Modbus和OPC。采用类OPC接口网关。 2.数据采集、归档、预警及配置工具 支持实时数据采集、历史数据归档、变量触发预警,并使用TagConfig工具简单的配置实现。 3.人机界面(设计时和运行时)。
暂无标签
GPL-3.0
使用 GPL-3.0 开源许可协议
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C#
1
https://gitee.com/Debugman/SharpSCADA.git
git@gitee.com:Debugman/SharpSCADA.git
Debugman
SharpSCADA
SharpSCADA
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /