ProCon说明 快速入门 运动控制 EtherCAT 实时程序 API函数 控件库 硬件说明 问题排查 示例代码 |
为了方便用户使用及扩展CAD功能,CAD控件定义了一套完整的属性定义 、API 使用,以及事件的订阅。
DrawPanel为画布控件,提供绘制属性设置及操作函数。用户需派生此控件实现可视化。
修饰符 | 属性名称 | 含义 | 说明 |
public | ActiveColor | 激活时的颜色 | 绘图元素被选中时的颜色 |
public | backColor | 背景色 | 图纸背景色 |
public | ControlColor | 控制点颜色 | 如:圆心,圆弧上的点,线段上的端点等 |
public | CoordinateColor | 卡尺颜色 | 卡尺颜色 |
public | CoordinateBackground | 坐标尺背景色 | 坐标尺背景色 |
public | MotionPoistionGraphical | 机械位置图形参数 | 机械位置图形参数设置(颜色、宽、高) |
public | MotionPositionDigital | 机械位置数字显示文本参数 | 机械位置数字显示文本(字体、颜色) |
public | MotionPositionGraphicalValue | 机械位置当前值(图形位置) | 机械位置当前值(图形位置) |
public | MotionPositionDigitalValue | 机械位置当前值(数字显示) | 机械位置当前值(数字显示) |
public | MousePositionDigital | 鼠标位置显示(参数设置) | 鼠标位置显示(字体、颜色) |
public | CoordinateFore | 卡尺字体颜色 | 卡尺上显示文字的颜色 |
public | ResetMat | 默认绘图矩阵 | 默认绘图矩阵 |
public | DrawMat | 绘图矩阵 | 元素绘制转换矩阵 |
public | MatchHot | 热点匹配 | 坐标系交点、对象控制点拾取 |
public | CurElementType | 当前选中的绘图工具箱元素 | 当前选中的绘图工具箱元素(连续添加绘图工具时使用) |
public | DisableZoom | 禁用缩放 | 禁用后将不能放大缩小CAD |
public | DisPlayDirArrow | 是否显示方向箭头 | 是否显示方向箭头 |
public | DisPlayCoordinateDirection | 显示坐标方向 | 显示坐标方向 |
public | MoveTogether | 重合点联动 | 重合点联动 |
public | drawCoord | 坐标系绘制 | 是否需要绘制坐标系 |
public | IsDrawing | 正在绘图 | true-正在绘图 |
public | ShowCoordinateX | 显示X轴卡尺 | 是否显示X轴卡尺 |
public | ShowCoordinateY | 显示Y轴卡尺 | 是否显示Y轴卡尺 |
public | TempColor | 临时对象颜色 | 临时对象颜色 |
public | CoorPos | 坐标原点位置 | 坐标原点位置取值范围:TopLeft,BottomLeft,TopRight,BottomRight |
protected | DATA_RATE | 数据倍率 | 数据倍率 坐标显示的是mm单位 |
protected | heightCoordinate | X 坐标高度 | |
protected | widthCoordinate | Y 坐标宽度 |
函数名称 | 参数 | 返回值 | 函数说明 |
public static DateTime GetDateTime(double val) |
val:秒数 | 格式化时间 | 根据当前秒数转换成对应时间 |
public static double GetTotalSeconds(DateTime dt) | dt:给定的时间 | 秒数 | 根据给定时间返回其基准时间的总秒数 |
public void AddDrawItem(YKDraw item) | item:元素 | 无 | 添加元素 |
public void CenterAllDrawItems() | 无 | 无 | 元素集居中可见 |
public void ClearDrawItems() | 无 | 无 | 清空元素集 |
public void Data2Pixel(YKDraw yds) | yds:元素 | w无 | 元素绘制到画布 |
public void DispSpan() | 无 | 无 | 区间显示 |
public virtual void DrawAfter(Graphics gb) | gb:画布GDI实例 | 无 | 元素绘制完成后执行 |
public virtual void DrawPre(Graphics gb) | gb:画布GDI实例 | 无 | 元素绘制前执行 |
public Vex2D GetData(Vex2D pixel) | pixel:像素坐标 | 机械坐标 | 获取像素坐标对应机械坐标 |
public ListHelper |
无 | 元素集合 | 获取绘制元素集合 |
public Pen GetDrawPen() | 无 | 无 | 获取绘图画笔 |
public double GetMajorPixelX() | 无 | 无 | 获取X主刻度对应的像素大小 |
public double GetMajorPixelY() | 无 | 无 | 获取Y主刻度对应的像素大小 |
public Vex2D GetPixel(Vex2D val) | val:机械坐标 | 像素坐标 | 获取机械坐标对应像素坐标 |
public Matrix GetResetMatrix() | 无 | 无 | 获取默认绘图矩阵 |
public void InitXYUnit(CoordinateInfo coordinateX, CoordinateInfo coordinateY = null, bool isMonitor = true, bool is_xy_equal = true) | coordinateX:X轴信息 coordinateY:Y轴信息 isMonitor:是否为监控模式 is_xy_equal:XY等比例缩放(true-等比例,false-不同比例) |
无 | 初始化轴刻度单位 |
public void MoveOffsetX(double offset, bool skipMark, bool checkActive) | offset:偏移量 skipMark:是否跳过MARK checkActive:是否检查选中状态 |
无 | 元素X方向偏移 |
public void MoveOffsetY(double offset, bool skipMark, bool checkActive) | offset:偏移量 skipMark:是否跳过MARK checkActive:是否检查选中状态 |
无 | 元素Y方向偏移 |
public void MoveOffsetZ(double offset, bool skipMark, bool checkActive) | offset:偏移量 skipMark:是否跳过MARK checkActive:是否检查选中状态 |
无 | 元素Z方向偏移 |
public void RefreshView() | 无 | 无 | 刷新画布 |
public void RemoveDrawItem(YKDraw item) | item:要移除的元素 | 无 | 移除指定元素 |
public void SelectItem(YKDraw item, bool unSelect) | item:要激活的元素 unSelect:是否取消其他对象激活状态 |
无 | 激活指定元素 |
public void SelectYKDraw(YKDraw draw) | draw:要选中的元素 | 无 | 选中指定元素 |
public void UnselectYKDraw(YKDraw draw) | draw:指定元素 | 无 | 取消指定元素选中状态 |
public void UpdateReferPoint(Vex2D offset) | offset:参考点 | 无 | 更新参考点 |
protected override void Dispose(bool disposing) | disposing:是否清理使用的资源 | 无 | 清理所有正在使用的资源 |
pprotected virtual void OnItemsChanged(EnumYKDrawOpt opt, List |
opt:操作类型 items:状态变化的元素集合 |
无 | 元素状态变化后触发 |
修饰符 | 委托名称 | 参数 | 说明 |
public | CoordinateRangeChangedHandler(CoordinateInfo coordinate, EnumTimeSpanUnit unit) | coordinate:轴信息 unit:单位 |
坐标轴范围发生变化后触发 |
public | ItemsChangedHandler(EnumYKDrawOpt opt, List |
opt:操作类型 items:状态变化的元素集合 |
元素状态变化后触发 |
在CAD功能中,我们预定义了一些绘图元素。包括直线、点、3点式圆弧、圆、椭圆、矩形、文字、Mark点、扫描式圆弧、封闭多边形、线段、跑道形状、圆角矩形、样条曲线等。所有这些绘图元素都继承了YKDraw绘图基类。
修饰符 | 属性名称 | 含义 | 说明 |
public | StringFormat | 浮点字符串格式 | 浮点数据字符串显示格式 |
public | ToStringSplitter | 字符串显示分隔符 | 字符串显示分隔符 |
public | Active | 选中状态 | 元素选中状态 |
protected | DotNum | 元素点数量 | 元素点数量 |
public | DrawType | 类型 | 元素类型 |
public |
drawWidth | 宽度 | 元素绘制宽度 |
public |
drawWidth | 宽度 | 元素绘制宽度 |
public |
direction | 绘制方向 | true-正方向 false-取反 |
public |
Tag | 扩展Tag属性 | 扩展属性 |
public |
drawColor | 颜色 | 元素绘制颜色 |
public |
EnableAuxPoint | 启用辅助点控制 | 启用辅助点控制 |
函数名称 | 参数 | 返回值 | 函数说明 |
public static YKDraw CreateObj(byte[] data, int offset, ref int length) | data:Byte流 offset:起始索引 length:元素占用流长度 |
生成的元素 | Byte流生成对象 |
public virtual void AddPoints(List |
points:点集合 | 无 | 添加点集 |
public virtual void ClearPonits() | 无 | 无 | 清空点集 |
public object Clone() | 无 | 元素副本 | 深度拷贝元素副本 |
public virtual Vex2D GetArcPoint() | 无 | 控制点坐标 | 获取圆/圆弧的控制点 |
public virtual Vex2D GetCenterPoint() | 无 | 圆心坐标 | 获取圆心,圆/圆弧有效 |
public virtual ListHelper<ControlPoint> GetControlPoints() | 无 | 控制点集合 | 获取控制点集和 |
public void GetData(MemoryStream ms) | ms:写入流对象 | 无 | 元素对象转数据流 |
public int GetDotNum() | 无 | 点数量 | 获取点数量 |
public virtual Vex2D GetEndPoint() | 无 | 终点坐标 | 获取终点 |
public virtual ListHelper<Vex2D> GetExtRect() | 对角点集合(左上、右下) | 无 | 获取外接矩形 |
public virtual ListHelper<string> GetGCode() | 无 | G代码 | 获取G代码 |
public virtual ListHelper<string> GetGCodeAux(bool first) | 无 | G代码 | 获取G代码,带辅助点模式 |
public virtual List |
无 | 无 | 获取元素点集合 |
public virtual double GetRadius() | 无 | 无 | 获取半径,圆/圆弧有效 |
public virtual Vex2D GetStartPoint() | 无 | 起点坐标 | 获取起点 |
public virtual string GetText() | 无 | 无 | 获得对象名 |
public void ModifyAdjacent(LineType srcType, Vex2D oldVal, Vex2D newVal) | srcType:元素类型 oldVal:原始点坐标 newVal:变更点坐标 |
无 | 同步修改其他重合的点, 由外部关联 |
public void MoveInc(double x, double y) | x:X方向移动量 y:Y方向移动量 |
无 | 相对移动 |
public virtual void RemovePoint(Vex2D point) | point:要移除点 | 无 | 移除指定点 |
public virtual void RemovePoints(List<Vex2D> points) | points:要移除点集合 | 无 | 批量移除点 |
public string RemoveSpace(string str) | str:源字符串 | 移除空格后的字符串 | 移除字符串中所有空格符 |
public virtual int SetItemData(byte[] data, int offset) | data:数据流 offset:流起始索引 |
流偏移当前元素数据后的索引 | 数据流转元素对象 |
public override string ToString() | 无 | 无 | 元素数据转字符串 |
public virtual bool ToValue(string str) | str:字符串 | true-成功 flase-失败 |
字符串转元素数据 |
public virtual bool UpdateDotPoint(int index, Vex2D point) | index:目标点索引 point:目标坐标值 |
true-成功 flase-失败 |
更新点坐标 |
public virtual bool UpdateDotPoints(List |
points:目标点集 | true-成功 flase-失败 |
批量更新点坐标,顺序覆盖,点数量要与目标类型所需数量相等 |
绘图元素名称 | 类名 | 初始化方式1 | 初始化方式2 | 说明 |
直线 |
YKline | YKLine(PointF start, PointF end) 或 YKLine(Vex2D start, Vex2D end) 参数: start: 起点 end: 终点 |
1、调用默认构造函数: YKLine line = new YKLine(); 2、添加点: AddPoints(List<PointF> points) 或者AddPoints(List<Vex2D> points) |
其初始化需要提供两个端点坐标 |
点 | YKDot | YKDot(PointF pt, int width) 或 YKDot(Vex2D pt, int width) 参数: pt: 点坐标 width: 绘制宽度 |
1、调用默认构造函数: YKDot dot = new YKDot(); 2、添加点: AddPoints(List<PointF> points) 或者AddPoints(List<Vex2D> points) 3、赋值drawWidth |
单点,初始化需要提供:点及半径大小 |
3点式圆弧 | YKArc3 | YKArc3(PointF pt1, PointF pt2, PointF pt3) 或 YKArc3(Vex2D pt1, Vex2D pt2, Vex2D pt3) 参数: pt1: 点1 pt2: 点2 pt3: 点3 |
同YKline,不同的是YKline换成YKArc3(下同) | 由指定圆上3个点来绘制圆弧,初化需要提供:3个点 |
椭圆 | YKEllipse | YKEllipse(PointF pt1, PointF pt2) 或 YKEllipse(Vex2D pt1, Vex2D pt2) 参数: pt1: 控制点1 pt2: 控制点2 |
同YKline | 需要提供椭圆上的2个控制点 |
矩形 | YKRect | YKRect(PointF left_up, PointF right_down,[Color fillColor = null]) 或 YKRect(Vex2D left_up, Vex2D right_down,[Color fillColor = null]) 参数: left_up: 左上角 right_down: 右下角 fillColor: 矩形填充颜色 |
无 | 需要提供:左上角坐标、右下角坐标、矩形填充的颜色 |
文字 | YKText | YKText(PointF pt, string text) 参数: pt: 放置位置 text: 文本 |
无 | 显示位置及文本内容 |
Mark点 | YYKMark | YKMark(PointF pt, int width) 或 YKMark(Vex2D pt, int width) pt: 中心点位置 width: 绘制长度 |
无 | Mark点,十字交叉。初始化需提供: 中心点位置及绘制长度 |
扫描式圆弧 | YKScan | YKScan(PointF center, PointF pt1, PointF pt2)或 YKScan(Vex2D center, Vex2D pt1, Vex2D pt2) 参数: center: 圆心 pt1: 圆上的点 pt2: 终止点 |
同YKLine | 需提供圆心、圆上1点以及终止点 |
封闭多边形 | YKPoly | YKPoly(List<PointF> 或 YKPoly(List<Vex2D> pts) 参数: pts: 点集合 |
同YKLine | 需提供点集,须注意点集的先后顺序 |
多线段 | YKLines | YKLines(List<PointF> pts)或 YKLines(List<Vex2D> pts) 参数: pts: 点集合 |
同YKLine | 需提供点集,须注意点集的先后顺序 |
跑道形状 | YKRectCircle | YKRectCircle(PointF pt1, PointF pt2) 或 YKRectCircle(Vex2D pt1, Vex2D pt2) 参数: pt1: 控制点1 pt2: 控制点2 |
同YKLine | 需提供2个控制点 |
圆角矩形 | YKRectCorner | YKRectCorner(PointF pt1, PointF pt2, PointF pt3) 或 YKRectCorner(Vex2D pt1, Vex2D pt2, Vex2D pt3) 参数: pt1: 控制点1 pt2: 控制点2 pt3: 控制点3 |
同YKLine | 需要提供3个控制点 |
样条曲线 | YKNurbs | YKNurbs(List<System.Drawing.PointF> pts)或YKNurbs(List<YKCon.Maths.Vex2D> pts) 参数: pts: 点集合 |
同YKLine | 需提供点集,须注意点集的先后顺序 |
CAD控件需要二次开发才可使用,用户需新建用户控件,并继承DrawPanel类,即可实现用户自己的CAD控件。
使用CAD控件 需要把ProCon\lib目录下的YKMem2.dll , 拷贝到程序目录。
选择浏览,添加本地YKCad.dll的引用。
经过以上步骤,用户即可实现自定义CAD控件,并可派生用户逻辑。
DxfParse.GetDxfDatas为dxf文件解析函数,可调用此接口,返回绘制对象基类YKDraw的数据集。
3.5.1绘制直线
PointF point1 = new PointF(0, 0);
PointF point2 = new PointF(5, 5);
YKCon.CAM.YKLine line = new YKCon.CAM.YKLine(point1, point2);
ykCad1.AddDrawItem(line);
ykCad1.RefreshView();
ykCad1为DrawPanel派生实例
调用元素对象的UpdateDotPoint更新点数据,后执行控件刷新
line.UpdateDotPoint(0, new PointF(10, 10));
ykCad1.RefreshView();
先清空点集ClearPonits,再AddPoints,后执行控件刷新
line.ClearPonits();
line.AddPoints(new List<PointF>() { point1, point2 });
ykCad1.RefreshView();
该部分主要服务于CAD绘图元素参数发生变化或者选中状态发生变化时,能通知订阅方,让其做出相应的动作。事件包含:
public event ItemsChangedHandler ItemsChanged
其中,ItemsChangedHandler定义为:
public delegate void ItemsChangedHandler(EnumYKDrawOpt opt, List<YKDraw> items);
参数:
1. opt:绘图元素操作类型,对于枚举EnumYKDrawOpt的定义;
(1). CREATE:创建(添加)绘图元素时触发;
(2). UPDATE:更新元素参数时触发,包括但不限于:加工方向、移动位置等;
(3).DELETE:删除元素时触发;
(4). SELECTED:选中元素时触发;
(5). UNSELECTED:元素取消选中的时触发。
2. items:发生变化的项。
附:EnumYKDrawOpt定义
/// <summary>
/// 绘图元素操作类型
/// </summary>
public enum EnumYKDrawOpt
{
/// <summary>
/// 创建(添加)
/// </summary>
CREATE,
/// <summary>
/// 更新
/// </summary>
UPDATE,
/// <summary>
/// 删除
/// </summary>
DELETE,
/// <summary>
/// 选中
/// </summary>
SELECTED,
/// <summary>
/// 取消选中
/// </summary>
UNSELECTED
}
Copyright © 2015 深圳市优易控软件有限公司 www.proutech.com |