ProCon说明   快速入门   运动控制   EtherCAT   实时程序   API函数   控件库   硬件说明   问题排查   示例代码  
  

CAD

为了方便用户使用及扩展CAD功能,CAD控件定义了一套完整的属性定义 、API 使用,以及事件的订阅。

1.绘制控件DrawPanel

DrawPanel为画布控件,提供绘制属性设置及操作函数。用户需派生此控件实现可视化。

1.1 属性

修饰符 属性名称 含义 说明
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 坐标宽度  

1.2 函数

函数名称 参数 返回值 函数说明
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 GetDrawItems() 元素集合 获取绘制元素集合
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 items) opt:操作类型
items:状态变化的元素集合
元素状态变化后触发

1.3 委托

修饰符 委托名称 参数 说明
public CoordinateRangeChangedHandler(CoordinateInfo coordinate, EnumTimeSpanUnit unit) coordinate:轴信息
unit:单位
坐标轴范围发生变化后触发
public ItemsChangedHandler(EnumYKDrawOpt opt, List items) opt:操作类型
items:状态变化的元素集合
元素状态变化后触发

2.元素基类YKDraw

在CAD功能中,我们预定义了一些绘图元素。包括直线、点、3点式圆弧、圆、椭圆、矩形、文字、Mark点、扫描式圆弧、封闭多边形、线段、跑道形状、圆角矩形、样条曲线等。所有这些绘图元素都继承了YKDraw绘图基类。

2.1 属性

修饰符 属性名称 含义 说明
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 启用辅助点控制 启用辅助点控制

2.2 函数

函数名称 参数 返回值 函数说明
public static YKDraw CreateObj(byte[] data, int offset, ref int length) data:Byte流
offset:起始索引
length:元素占用流长度
生成的元素 Byte流生成对象
public virtual void AddPoints(List points) 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 GetPoints() 获取元素点集合
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) points:目标点集 true-成功
flase-失败
批量更新点坐标,顺序覆盖,点数量要与目标类型所需数量相等

2.3 绘图元素(YKXXX)

绘图元素名称 类名 初始化方式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 需提供点集,须注意点集的先后顺序

3.编程

CAD控件需要二次开发才可使用,用户需新建用户控件,并继承DrawPanel类,即可实现用户自己的CAD控件。

使用CAD控件 需要把ProCon\lib目录下的YKMem2.dll , 拷贝到程序目录。

3.1 新建用户控件

3.2 添加YKCad.dll引用

选择浏览,添加本地YKCad.dll的引用。

3.3 修改用户控件基类

经过以上步骤,用户即可实现自定义CAD控件,并可派生用户逻辑。

3.4 dxf文件解析

DxfParse.GetDxfDatas为dxf文件解析函数,可调用此接口,返回绘制对象基类YKDraw的数据集。

3.5 元素绘制

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派生实例

3.5.2 仅刷新目标元素

调用元素对象的UpdateDotPoint更新点数据,后执行控件刷新

line.UpdateDotPoint(0, new PointF(10, 10));

ykCad1.RefreshView();

3.5.3 重新添加绘制点

先清空点集ClearPonits,再AddPoints,后执行控件刷新

line.ClearPonits();
line.AddPoints(new List<PointF>() { point1, point2 });
ykCad1.RefreshView();

3.5.4 事件

该部分主要服务于CAD绘图元素参数发生变化或者选中状态发生变化时,能通知订阅方,让其做出相应的动作。事件包含:

ItemsChanged

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