/// <summary> /// 设置贝塞尔曲线 /// </summary> /// <param name="OverPoint">贝塞尔曲线的结束的点</param> public void SetBezierLine(Point OverPoint, XAribute.XPositonStyle position) { #region MyRegion //if (StartPoint != null) //{ // if (OverPoint.X >= StartPoint.X && OverPoint.Y >= StartPoint.Y) // { // SetBezierOver(1, OverPoint); // } // else if (OverPoint.X <= StartPoint.X && OverPoint.Y >= StartPoint.Y) // { // SetBezierOver(2, OverPoint); // } // else if (OverPoint.X <= StartPoint.X && OverPoint.Y >= StartPoint.Y) // { // SetBezierOver(3, OverPoint); // } // else if (OverPoint.X >= StartPoint.X && OverPoint.Y <= StartPoint.Y) // { // SetBezierOver(4, OverPoint); // } //} #endregion SetBezierOver(position, OverPoint); }
/// <summary> /// 构造函数 /// </summary> /// <param name="Parameter_name"></param> /// <param name="MyCanLinkType"></param> /// <param name="MyXAttributeSpec"></param> /// <param name="MyXAttributeType"></param> /// <param name="MyXPositonStyle"></param> /// <param name="MyHittext"></param> public XAributeItem(string Parameter_name, XAribute.CanLinkType MyCanLinkType, XAribute.XAttributeSpec MyXAttributeSpec, XAribute.XAttributeType MyXAttributeType, XAribute.XPositonStyle MyXPositonStyle, string MyHittext, string MyLastExText) { this.Parameter_name = Parameter_name; this.MyCanLinkType = MyCanLinkType; this.MyXAttributeSpec = MyXAttributeSpec; this.MyXAttributeType = MyXAttributeType; this.MyXPositonStyle = MyXPositonStyle; this.MyHittext = MyHittext; this.MyLastExText = MyLastExText; }
/// <summary> /// 当父控件移动的时候调整贝塞尔曲线的位置(弃用的方法) /// </summary> /// <param name="position">点的坐标</param> /// <param name="dirtype">属性的方向类型</param> public void BezierPositionChange(Point position, XAribute.XPositonStyle dirtype) { AdjustBezierLine(); //if (dirtype == StartPoint.positionType) //{ // SetBezierStart(dirtype, position); //} //else //{ // SetBezierOver(dirtype, position); //} }
/// <summary> /// 读取XML中的属性内容 /// </summary> /// <param name="aribute">包含属性的XML节点</param> /// <param name="box">属性所在的CodeBox对象</param> /// <returns></returns> public static void ReadXAributeObject(XmlNode node, PicTabPage pic) { XmlElement aributeElement = (XmlElement)node; int Id = int.Parse(aributeElement.GetAttribute("ID")); string Title = aributeElement.GetAttribute("Title"); XAribute.XAttributeType SelectType = XAribute.XAttributeTypeMapping(aributeElement.GetAttribute("PointTypeitem")); XAribute.XAttributeSpec SelectSpc = XAribute.XAttributeSpecMapping(aributeElement.GetAttribute("ListTypeitem")); XAribute.XPositonStyle SelectPositionStyle = XAribute.XPositonStyleMapping(aributeElement.GetAttribute("PositionTypeitem")); XAribute.CanLinkType CanLinkNum = XAribute.CanLinkTypeMapping(aributeElement.GetAttribute("LinkTypeitem")); string Hint = aributeElement.GetAttribute("TipTypeitem"); string ExName = aributeElement.GetAttribute("LastExTexteitem"); XObject.OpenType opentype = XObject.OpenTypeMapping(aributeElement.GetAttribute("OpenType")); ///通过内置函数加载属性 XAribute bute = pic.LoadXAribute(SelectType, SelectSpc, SelectPositionStyle, Title, CanLinkNum, Hint, ExName, Id, opentype); }
/// <summary> /// 读取XML中的属性内容 /// </summary> /// <param name="aribute">包含属性的XML节点</param> /// <param name="box">属性所在的CodeBox对象</param> /// <returns></returns> public static void ReadXAributeObject(XmlNode node, CodeBox box) { XmlElement aributeElement = (XmlElement)node; int Id = int.Parse(aributeElement.GetAttribute("ID")); string Title = aributeElement.GetAttribute("Title"); XAribute.XAttributeType SelectType = XAribute.XAttributeTypeMapping(aributeElement.GetAttribute("PointTypeitem")); XAribute.XAttributeSpec SelectSpc = XAribute.XAttributeSpecMapping(aributeElement.GetAttribute("ListTypeitem")); XAribute.XPositonStyle SelectPositionStyle = XAribute.XPositonStyleMapping(aributeElement.GetAttribute("PositionTypeitem")); XAribute.CanLinkType CanLinkNum = XAribute.CanLinkTypeMapping(aributeElement.GetAttribute("LinkTypeitem")); string Hint = aributeElement.GetAttribute("TipTypeitem"); string ExName = aributeElement.GetAttribute("LastExTexteitem"); XObject.OpenType opentype = XObject.OpenTypeMapping(aributeElement.GetAttribute("OpenType")); ///通过内置函数加载属性 XAribute bute = box.LoadAttribute(SelectType, SelectSpc, SelectPositionStyle, Title, CanLinkNum, Hint, ExName, Id, opentype); if (bute != null && ISXAributeToSaveValue(bute)) { bute.SetValueTextBox(aributeElement.GetAttribute("Value")); } }
/// <summary> /// 构造函数 /// </summary> /// <param name="id">id</param> /// <param name="LineColor">线条的颜色</param> /// <param name="onePoint">坐标</param> /// <param name="position">位置信息</param> public BezierLine(int id, Color LineColor, Point onePoint, XAribute.XPositonStyle position) { ///赋予笔刷 connector.Stroke = new SolidColorBrush(LineColor); ///赋予笔触 connector.StrokeThickness = _strokeThickness; ///实例化 connectorGeometry = new PathGeometry(); connectorPoints = new PathFigure(); connectorCurve = new BezierSegment(); StartPoint.position = onePoint; StartPoint.positionType = position; EndPoint.position = onePoint; ///设置贝塞尔曲线的开始点 connectorPoints.StartPoint = StartPoint.position; SetBezierLine(EndPoint.position, position); connectorPoints.Segments.Add(connectorCurve); connectorGeometry.Figures.Add(connectorPoints); connector.Data = connectorGeometry; this.Id = id; }
/// <summary> /// 设置的是起始点(弃用的方法) /// </summary> /// <param name="position">位置类型</param> /// <param name="fistPoint">点的坐标</param> protected void SetBezierStart(XAribute.XPositonStyle position, Point fistPoint) { double cur = (fistPoint.Y - EndPoint.position.Y) / ToolHelp.DisPoint(fistPoint, EndPoint.position) / 7; double dis = cur > maxdis ? maxdis : cur; dis = dis < mindis ? mindis : dis; StartPoint.position = fistPoint; switch (position) { case XAribute.XPositonStyle.Left: connectorPoints.StartPoint = StartPoint.position; connectorCurve.Point1 = new Point(StartPoint.position.X - dis, StartPoint.position.Y); connectorCurve.Point2 = new Point(EndPoint.position.X + dis, EndPoint.position.Y); //connectorCurve.Point3 = OverPoint; break; case XAribute.XPositonStyle.right: connectorPoints.StartPoint = StartPoint.position; connectorCurve.Point1 = new Point(StartPoint.position.X + dis, StartPoint.position.Y); connectorCurve.Point2 = new Point(EndPoint.position.X - dis, EndPoint.position.Y); //connectorCurve.Point3 = OverPoint; break; } }
/// <summary> /// 从文件加载一个属性 /// </summary> /// <param name="xt">属性类型</param> /// <param name="xs">属性的集合类型</param> /// <param name="xp">复制匡的位置是在左边还是右边</param> /// <param name="paramterName">属性名称</param> /// <param name="clt">连接方式</param> /// <param name="tiptext">提示信息</param> /// <param name="LastExName">属性类型</param> /// <param name="id">属性框ID</param> /// <param name="opentype">公开类型</param> public XAribute LoadXAribute(XAribute.XAttributeType xt, XAribute.XAttributeSpec xs, XAribute.XPositonStyle xp, string paramterName, XAribute.CanLinkType clt, string tiptext, string LastExName, int id, OpenType opentype) { XAribute xb = new XAribute(id, paramterName, xt, xs, xp, this.ChileEventCallBack, clt, LastExName); xb.Hint = tiptext; xb.MyOpenType = opentype; ///绑定标题改变事件 xb.TitleChange += (e, o, v) => { ///修改Title return(ModifyPropertyTitle(o, v)); }; xb.ExNameChange += (s, o, v) => { ///修改ExName this.ModifyPropetyExName((s as XAribute).Title, v); }; ///检测是否存在 if (!ListXAributes.Contains(xb)) { ListXAributes.Add(xb); return(xb); } return(null); }
/// <summary> /// 构造函数 /// </summary> public BezierPoint() { positionType = XAribute.XPositonStyle.Left; }
/// <summary> /// 设置贝塞尔曲线的控制点 /// </summary> /// <param name="EndPoint">结束点</param> private void SetBezierOver(XAribute.XPositonStyle position, Point OverPoint) { EndPoint.position = OverPoint; EndPoint.positionType = position; AdjustBezierLine(); }