控件提供了很多简单易用的绘图函数,用于参数化绘图。在此演示中,我们绘制了直线、多段线、点、样条线、圆、圆弧、椭圆、椭圆弧等实体。点击此处在线演示。
绘图函数详细参数说明,参考MxDraw5.2Help.chm,如下图:

在调用绘图函数之前,可以设置如下属性:
DrawCADColor:设置绘图颜色,CAD的颜色
DrawCADColorIndex: 设置绘图颜色,CAD的颜色索引
DrawColor: 设置绘图颜色,OLE颜色
LayerName: 绘图函数使用图层名
LineType: 绘图函数使用的线型
LineWidth: 绘图函数使用的线宽
PatternDefinition: 绘图函数使用的图案定义
TextStyle: 绘图函数使用的文字样式
视频如下:
用户可以在CAD控件视区任意位置绘制直线。
主要用到函数说明:
_DMxDrawX::DrawLine
绘制一个直线。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dX1 | 直线的开始点x坐标 |
DOUBLE dY1 | 直线的开始点y坐标 |
DOUBLE dX2 | 直线的结束点x坐标 |
DOUBLE dY2 | 直线的结束点y坐标 |
js中实现代码说明:
function DrawLine() {
//清空当前显示内容
mxOcx.NewFile();
//把颜色改回黑白色
mxOcx.DrawCADColorIndex = 0;
//把线型改成实线
mxOcx.LineType = "";
//设置线宽 4
mxOcx.LineWidth = 0;
//创建一个图层,名为"LineLayer"
mxOcx.AddLayer("LineLayer");
//设置当前图层为"LineLayer"
mxOcx.LayerName = "LineLayer";
// 直接绘制一个实线
// 参数一直线的开始点x坐标,参数二直线的开始点y坐标,参数三直线的结束点x坐标,参数四直线的结束点y坐标
mxOcx.DrawLine(0, 0, 100, 0);
// 绘制一个实斜线
mxOcx.DrawLine(200, 0, 300, 100);
//----------------------------------------------------------------------------------------------------------
//绘制一个虚线
//定义虚线数据据,"MyLineType"是线型名,"6,-8"是虚线的一个单位定义,6是实线长,-8是空格长。
mxOcx.AddLinetype("MyLineType", "6,-10");
//设计当前线型为"MyLineType"
mxOcx.LineType = "MyLineType";
// 绘制一个虚线
mxOcx.DrawLine(0, 30, 100, 30);
// 绘制一个斜虚线
mxOcx.DrawLine(200, 30, 300, 130);
//---------------------------------------------------------------------------------------------------------
// 修改绘线的颜色为 16711680(蓝色), 16711680转成16进制是0xFF 00 00,其中,FF是蓝色,00是绿色,第个二00是红色。
mxOcx.DrawCADColor = 16711680;
// 绘制一个蓝色的虚线
mxOcx.DrawLine(0, 60, 100, 60);
// 绘制一个蓝色的斜虚线
mxOcx.DrawLine(200, 60, 300, 160);
//---------------------------------------------------------------------------------------------------------
//把颜色改回黑白色
mxOcx.DrawCADColorIndex = 0;
//把线型改成实线
mxOcx.LineType = "";
//设置线宽 4
mxOcx.LineWidth = 4;
//绘制一个带宽度的直线。
mxOcx.DrawLine(0, 90, 100, 90);
// 绘制一个带宽度的斜线
mxOcx.DrawLine(200, 90, 300, 190);
//---------------------------------------------------------------------------------------------------------
//绘制一个点划线虚线
mxOcx.AddLinetype("MyLineType2", "10,-2,3,-2");
//把线型改点划线
mxOcx.LineType = "MyLineType2";
// 修改绘线的颜色为 255(红色), 255转成16进制是0x00 00 FF,其中,00是蓝色,第个二00是绿色,FF是红色。
mxOcx.DrawCADColor = 255;
//绘制一个带宽度的红色点划线。
mxOcx.DrawLine(0, 120, 100, 120);
// 绘制一个带宽度红色点划斜线
mxOcx.DrawLine(200, 120, 300, 220);
//---------------------------------------------------------------------------------------------------------
//增加一个带有形的线型
mxOcx.AddTextStyle1("MyLineTypeTextStyle", "txt.shx", "hztxt.shx", 1);
mxOcx.AddLinetypeEx("MyLineType3", "(12.7,(\"T=MxDraw\",\"S=2.54\",\"L=-5.08\",\"R=0.0\",\"X=-2.54\",\"Y=-1.27\"),-10.08)", "MyLineTypeTextStyle");
mxOcx.LineType = "MyLineType3";
mxOcx.LineWidth = 0;
//绘制一个带宽度的红色点划线。
mxOcx.DrawLine(350, 120, 600, 120);
//---------------------------------------------------------------------------------------------------------
//增加一个带有形的线型
//把颜色改回黑白色
mxOcx.DrawCADColorIndex = 0;
mxOcx.LineType = "FENCELINE1";
mxOcx.LineWidth = 0;
//绘制一个带宽度的红色点划线。
mxOcx.DrawLine(350, 220, 600, 220);
//把所有的实体都放到当前显示视区
mxOcx.ZoomAll();
//更新视区显示
mxOcx.UpdateDisplay();
}效果展示:
通过点击绘制直线按钮,触发DrawLine()事件,CAD控件视区将显示在js中设置好的直线。如下图所示:

多段线又被称为多义线,表示一起画的都是连在一起的一个复合对象,可以是直线也可以是圆弧并且它们还可以加不同的宽度。
主要用到函数说明:
_DMxDrawX::PathLineTo
把路径下一个点移到指定位置。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dX | 点的X坐标 |
DOUBLE dY | 点的Y坐标 |
_DMxDrawX::DrawPathToPolyline
把路径变成一个Polyline。
js中实现代码说明:
function DrawPolyline() {
//Polyline 又称多义线,就是可以绘制多条首尾相连的线,也可以是圆弧相连,同是可以指定线的开始和结束宽。
//把颜色改回黑白色
mxOcx.DrawCADColorIndex = 0;
//把线型改成实线
mxOcx.LineType = "";
//设置线宽 4
mxOcx.LineWidth = 0;
//创建一个图层,名为"PolylineLayer"
mxOcx.AddLayer("PolylineLayer"); ;
//设置当前图层为"PolylineLayer"
mxOcx.LayerName = "PolylineLayer";
//《---------------------------------------》
//用Plyline显示绘制矩形框
//定义一个路径的开始点
mxOcx.PathMoveTo(0, 300);
//路径的一下个点
mxOcx.PathLineTo(100, 300);
//路径的一下个点
mxOcx.PathLineTo(100, 400);
//路径的一下个点
mxOcx.PathLineTo(0, 400);
//把路径设置成闭合
mxOcx.PathMakeClosed();
//把路径闭合,生成一个矩形框
mxOcx.DrawPathToPolyline();
//《---------------------------------------》
//绘制一个有宽度,带线型的矩形框
//定义一个路径的开始点
mxOcx.PathMoveTo(200, 300);
//路径的一下个点
mxOcx.PathLineTo(300, 300);
//路径的一下个点
mxOcx.PathLineTo(300, 400);
//路径的一下个点
mxOcx.PathLineTo(200, 400);
//把路径设置成闭合
mxOcx.PathMakeClosed();
mxOcx.AddLinetype("MyLineType3", "30,-10");
mxOcx.LineType = "MyLineType3";
mxOcx.DrawCADColorIndex = 255;
mxOcx.LineWidth = 5;
mxOcx.DrawPathToPolyline();
//《---------------------------------------》
//绘制一个有宽度的矩形框
//定义一个路径的开始点
mxOcx.PathMoveTo(400, 300);
//路径的一下个点
mxOcx.PathLineTo(500, 300);
//路径的一下个点
mxOcx.PathLineTo(500, 400);
//路径的一下个点
mxOcx.PathLineTo(400, 400);
//把路径设置成闭合
mxOcx.PathMakeClosed();
mxOcx.LineType = ("");
mxOcx.DrawCADColor = 65280;
mxOcx.LineWidth = 10;
mxOcx.DrawPathToPolyline();
//《---------------------------------------》
//绘制一个有宽度的矩形框
//定义一个路径的开始点
mxOcx.PathMoveTo(400, 300);
//路径的一下个点
mxOcx.PathLineTo(500, 300);
//路径的一下个点
mxOcx.PathLineTo(500, 400);
//路径的一下个点
mxOcx.PathLineTo(400, 400);
//把路径设置成闭合
mxOcx.PathMakeClosed();
mxOcx.LineType = "";
mxOcx.DrawCADColor = 65280;
mxOcx.LineWidth = 10;
mxOcx.DrawPathToPolyline();
//《---------------------------------------》
//绘制一个有宽度的,不闭合的矩形框
//定义一个路径的开始点
mxOcx.PathMoveTo(600, 300);
//路径的一下个点
mxOcx.PathLineTo(700, 300);
//路径的一下个点
mxOcx.PathLineTo(700, 400);
//路径的一下个点
mxOcx.PathLineTo(600, 400);
//把路径设置成闭合
mxOcx.LineType = "";
mxOcx.DrawCADColor = 65280;
mxOcx.LineWidth = 10;
mxOcx.DrawPathToPolyline();
//《---------------------------------------》
//绘制一个有宽度的,三角形
//定义一个路径的开始点
mxOcx.PathMoveTo(800, 300);
//路径的一下个点
mxOcx.PathLineTo(900, 300);
//路径的一下个点
mxOcx.PathLineTo(900, 400);
mxOcx.PathMakeClosed();
//把路径设置成闭合
mxOcx.LineType = "";
mxOcx.DrawCADColor = 65280;
mxOcx.LineWidth = 10;
mxOcx.DrawPathToPolyline();
//《---------------------------------------》
//绘制一个箭头
mxOcx.PathMoveToEx(1000, 300, 10, 10, 0);
mxOcx.PathLineToEx(1000, 500, 30, 0, 0);
mxOcx.PathLineTo(1000, 580);
mxOcx.DrawPathToPolyline();
//《---------------------------------------》
//绘制一个虚线箭头
mxOcx.PathMoveToEx(1200, 300, 10, 10, 0);
mxOcx.PathLineToEx(1200, 500, 30, 0, 0);
mxOcx.PathLineTo(1200, 580);
mxOcx.DrawCADColor = 65535;
mxOcx.LineType = ("MyLineType3");
mxOcx.DrawPathToPolyline();
//《---------------------------------------》
//绘制一个圆弧箭头,-0.34是圆弧的凸度.
//axMxDrawX1.PathMoveToEx 1400, 300, 10, 10, -0.34);
mxOcx.PathMoveToEx(1400, 300, 10, 10, -0.34);
mxOcx.PathLineToEx(1400, 500, 30, 0, 0.34);
mxOcx.PathLineTo(1400, 600);
mxOcx.DrawCADColor = 16776960;
mxOcx.LineType = "MyLineType3";
mxOcx.DrawPathToPolyline();
//《---------------------------------------》
//把所有的实体都放到当前显示视区
mxOcx.ZoomAll();
//更新视区显示
mxOcx.UpdateDisplay();
}效果展示:
通过点击绘制多段线按钮,触发DrawPolyline()事件,则用户可以在CAD控件视区绘制所需的多段线。如下图所示:

点在CAD中的作用除了可以分割对象外,还能测量对象,点不仅表示一个小的实体,而且通过点作为绘图的参考标记。
pdmode是一个控制point的形式的系统变量,当pdmode=0时是可见的一个点,当pdmode=1时是一个不可见的点,但仍存在。pdmode=2时是一个十字,pdmode=3时是一个叉子,将值指定为 32、64 或 96,除了绘制通过点的图形外,还可以选择在点的周围绘制形。PDSIZE是设置点对象的显示大小。正的PDSIZE值指定点图形的绝对尺寸。负值将解释为视口大小的百分比。重生成图形时将重新计算所有点的尺寸。
主要用到函数说明:
_DMxDrawX::DrawPoint
绘制一个点。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dX | 点的X坐标 |
DOUBLE dY | 点的Y坐标 |
js中实现代码说明:
function DrawPoint() {
//清空当前显示内容
mxOcx.NewFile();
//把颜色改回黑白色
mxOcx.DrawCADColorIndex = 0;
// 设置点样式,具体的值,可以看autocad帮助
//pdmode是一个控制point的形式的系统变量,当pdmode=0时是可见的一个点,
// 当pdmode=1时是一个不可见的点,但仍存在。pdmode=2时是一个十字,pdmode=3时是一个叉子
//将值指定为 32、64 或 96,除了绘制通过点的图形外,还可以选择在点的周围绘制形。
mxOcx.SetSysVarLong("PDMODE", 0);
// 设置点大小,0.0表示它随屏幕
mxOcx.SetSysVarDouble("PDSIZE", 15.0);
mxOcx.DrawPoint(0,50);
//-----------------------------------------------------------------------------------------------
mxOcx.SetSysVarLong("PDMODE", 67);
// 设置点大小,0.0表示它随屏幕
mxOcx.SetSysVarDouble("PDSIZE", 15.0);
mxOcx.DrawPoint(50,50);
//-----------------------------------------------------------------------------------------------
mxOcx.SetSysVarLong("PDMODE", 3);
// 设置点大小,0.0表示它随屏幕
mxOcx.SetSysVarDouble("PDSIZE", 15.0);
mxOcx.DrawPoint(100,50);
//-----------------------------------------------------------------------------------------------
mxOcx.SetSysVarLong("PDMODE", 2);
// 设置点大小,0.0表示它随屏幕
mxOcx.SetSysVarDouble("PDSIZE", 15.0);
mxOcx.DrawPoint(150,50);
mxOcx.ZoomAll();
mxOcx.UpdateDisplay();
}效果展示:
通过点击绘制点按钮,触发DrawPoint()事件,CAD控件视区将显示在js中设置好的点。如下图所示:

在CAD设计时,需要绘制样条线,用户可以设置样条线线重及颜色等属性。
主要用到函数说明:
_DMxDrawX::PathLineTo
把路径下一个点移到指定位置。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dX | 点的X坐标 |
DOUBLE dY | 点的Y坐标 |
_DMxDrawX::DrawPathToSpline
把路径变成一个样条线。
js中实现代码说明:
function DrawSpline() {
//把颜色改回黑白色
mxOcx.DrawCADColorIndex = 0;
//把线型改成实线
mxOcx.LineType = "";
//设置线宽 4
mxOcx.LineWidth = 0;
//创建一个图层,名为"SplinelineLayer"
mxOcx.AddLayer("SplinelineLayer");
//设置当前图层为"SplinelineLayer"
mxOcx.LayerName = "SplinelineLayer";
//《---------------------------------------》
//用绘制一个实线的样条线
//定义一个路径的开始点
mxOcx.PathMoveTo(0, 1700);
//路径的一下个点
mxOcx.PathLineTo(100, 1700);
//路径的一下个点
mxOcx.PathLineTo(100, 1800);
//路径的一下个点
mxOcx.PathLineTo(0, 1800);
//把路径拟合成一个样线
mxOcx.DrawPathToSpline();
//《---------------------------------------》
//用绘制一个虚线的样条线
mxOcx.AddLinetype("MySplineType", "30,-10");
mxOcx.LineType = ("MySplineType");
mxOcx.DrawCADColor = 255;
mxOcx.LineWidth = 5;
//定义一个路径的开始点
mxOcx.PathMoveTo(200, 1700);
//路径的一下个点
mxOcx.PathLineTo(300, 1700);
//路径的一下个点
mxOcx.PathLineTo(300, 1800);
//路径的一下个点
mxOcx.PathLineTo(400, 1800);
mxOcx.DrawPathToSpline();
mxOcx.ZoomAll();
mxOcx.UpdateDisplay();
}效果展示:
用户可以通过点击绘制样条线按钮,可以在CAD控件视区显示js中设置好的样条线。如下图所示:

CAD绘制图像的过程中,画圆的情况是非常常见的,用户可以设置圆的圆心位置及半径属性。
主要用到函数说明:
_DMxDrawX::DrawCircle
绘制一个圆。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dCenterX | 圆的中心X值 |
DOUBLE dCenterY | 圆的中心Y值 |
DOUBLE dRadius | 圆的半径 |
js中实现代码说明:
function DrawCircle() {
//清空当前显示内容
mxOcx.NewFile();
//把颜色改回黑白色
mxOcx.DrawCADColorIndex = 0;
//把线型改成实线
mxOcx.LineType = "";
//设置线宽 4
mxOcx.LineWidth = 0;
//创建一个图层,名为"CircleLayer"
mxOcx.AddLayer("CircleLayer");
//设置当前图层为"CircleLayer"
mxOcx.LayerName = "CircleLayer";
//《---------------------------------------》
//绘制一个实线黑色的圆
mxOcx.DrawCircle(0, 800, 70);
//《---------------------------------------》
//绘制一个带颜色的圆
mxOcx.AddLinetype("CircleLineType", "");
//设计当前线型为"CircleLineType"
mxOcx.LineType = ("CircleLineType");
mxOcx.DrawColor = 255;
mxOcx.DrawCircle(200, 800, 70);
//《---------------------------------------》
//绘制一个虚线线的圆
mxOcx.AddLinetype("CircleLineType", "30,-5,7,-7");
//设计当前线型为"CircleLineType"
mxOcx.LineType = ("CircleLineType");
mxOcx.DrawColor = 255;
mxOcx.DrawCircle(400, 800, 70);
//《---------------------------------------》
//绘制一个带有宽度的圆
mxOcx.AddLinetype("CircleLineType", "30,-5,7,-7");
//设计当前线型为"CircleLineType"
mxOcx.LineType = ("CircleLineType");
mxOcx.LineWidth = 40;
mxOcx.DrawColor = 255;
mxOcx.DrawCircle(600, 800, 70);
//把所有的实体都放到当前显示视区
mxOcx.ZoomAll();
//更新视区显示
mxOcx.UpdateDisplay();
}效果展示:
通过点击绘制圆按钮,触发DrawCircle()事件,CAD控件视区将显示在js中设置好的圆。如下图所示:

在CAD设计时,需要绘制圆弧,用户可以在图面点圆弧起点,圆弧上的一点和圆弧的终点,这样就绘制出圆弧。
主要用到函数说明:
_DMxDrawX::DrawArc2
由圆弧上的三点绘制一个圆弧。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dStartPointX | 开始点X坐标 |
DOUBLE dStartPointY | 开始点Y坐标 |
DOUBLE dMidPointX | 圆弧上的一点X坐标 |
DOUBLE dMidPointY | 圆弧上的一点Y坐标 |
DOUBLE dEndPointX | 结束点X坐标 |
DOUBLE dEndPointY | 结束点Y坐标 |
js中实现代码说明:
function DrawArc() {
//清空当前显示内容
mxOcx.NewFile();
//把颜色改回黑白色
mxOcx.DrawCADColorIndex = 0;
//把线型改成实线
mxOcx.LineType = "";
//设置线宽 4
mxOcx.LineWidth = 0;
//创建一个图层,名为"ArcLayer"
mxOcx.AddLayer("ArcLayer");
//设置当前图层为"ArcLayer"
mxOcx.LayerName = ("ArcLayer");
//------------------------------------------------------------------------------------------------------------
//绘制一个实线黑色的圆弧
mxOcx.DrawArc1(0, 1000, 100, 30, 200);
//--------------------------------------------------------------------------------------------------------------
//绘制一个虚线线的圆弧
mxOcx.AddLinetype("ArcLineType", "30,-5,7,-7");
//设计当前线型为"ArcLineType"
mxOcx.LineType = "ArcLineType";
mxOcx.DrawCADColor = 435322;
mxOcx.DrawArc1(300, 1000, 100, 30, 200);
//---------------------------------------------------------------------------------------------------------------
//绘制一个有宽度的虚线线的圆弧
mxOcx.LineWidth = 15;
mxOcx.DrawCADColor = 6335;
mxOcx.DrawArc1(600, 1000, 100, 30, 200);
//-----------------------------------------------------------------------------------------------------------------
//由圆弧上三个点绘制圆弧
mxOcx.DrawArc2(800, 1000, 900, 1200, 1000, 900);
//---------------------------------------------------------------------------------------------------------------
//由圆弧上的开始点,结束度和凸度会圆弧
mxOcx.LineType = "";
mxOcx.LineWidth = 40;
mxOcx.DrawCADColor = 65280;
mxOcx.DrawArc3(1200, 1000, 1400, 1000, 0.6);
//把所有的实体都放到当前显示视区
mxOcx.ZoomAll();
//更新视区显示
mxOcx.UpdateDisplay();
}效果展示:
用户可以通过点击绘制圆弧按钮,在CAD控件视区绘制圆弧。如下图所示:

在CAD设计时,需要绘制椭圆,用户可以设置椭圆的基本属性。
主要用到函数说明:
_DMxDrawX::DrawEllipse
绘制椭圆。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dCenterX | 椭圆的中心点X坐标 |
DOUBLE dCenterY | 椭圆的中心点Y坐标 |
DOUBLE dMajorAxisX | 椭圆的主轴向量X值 |
DOUBLE dMajorAxisY | 椭圆的主轴向量Y值 |
DOUBLE dRadiusRatio | 椭圆的副轴长度与主轴长度的比值 |
js中实现代码说明:
function DrawEllipse()
{
//清空当前显示内容
mxOcx.NewFile();
//把颜色改回黑白色
mxOcx.DrawCADColorIndex = 0;
//把线型改成实线
mxOcx.LineType = "";
//设置线宽 4
mxOcx.LineWidth = 0;
//创建一个图层,名为"LineLayer"
mxOcx.AddLayer("LineLayer");
//设置当前图层为"LineLayer"
mxOcx.LayerName = "LineLayer";
// 直接绘制一个椭圆
mxOcx.DrawEllipse(0, 1400, 100, 0, 0.7);
//------------------------------------------------------------------------------------------------------------
//绘制一个倾斜的椭圆
mxOcx.AddLinetype("MyEllipseType", "6,-10");
//设计当前线型为"MyEllipseType"
mxOcx.LineType = ("MyEllipseType");
mxOcx.DrawCADColor = 16711680;
mxOcx.DrawEllipse(200, 1400, 80, 30, 0.5);
//把所有的实体都放到当前显示视区
mxOcx.ZoomAll();
//更新视区显示
mxOcx.UpdateDisplay();
}效果展示:
用户可以通过点击绘制椭圆按钮,用户可以在CAD控件视区绘制椭圆。如下图所示:

在CAD设计时,需要绘制椭圆弧,用户可以设置椭圆弧基本属性。
主要用到函数说明:
_DMxDrawX::DrawEllipseArc
绘制椭圆弧。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dCenterX | 椭圆的中心点X坐标 |
DOUBLE dCenterY | 椭圆的中心点Y坐标 |
DOUBLE dMajorAxisX | 椭圆的主轴向量X值 |
DOUBLE dMajorAxisY | 椭圆的主轴向量Y值 |
DOUBLE dRadiusRatio | 椭圆的副轴长度与主轴长度的比值 |
DOUBLE dStartAng | 椭圆弧的开始角度 |
DOUBLE dEndAng | 椭圆弧的结束角度 |
js中实现代码说明:
function DrawEllipseArc() {
//清空当前显示内容
mxOcx.NewFile();
//把颜色改回黑白色
mxOcx.DrawCADColorIndex = 0;
//把线型改成实线
mxOcx.LineType = "";
//设置线宽 4
mxOcx.LineWidth = 0;
//创建一个图层,名为"EllipseArcLayer"
mxOcx.AddLayer("EllipseArcLayer");
//设置当前图层为"EllipseArcLayer"
mxOcx.LayerName = "EllipseArcLayer";
//绘制椭圆弧
//参数一为椭圆的中心点X坐标,参数二为椭圆的中心点Y坐标
//参数三为椭圆的主轴向量X值,参数四为椭圆的主轴向量Y值
//参数五为椭圆的副轴长度与主轴长度的比值
//参数六为椭圆弧的开始角度,参数七为椭圆弧的结束角度
mxOcx.DrawEllipseArc(0, 1600, 80, 30, 0.4, 30, 200);
//----------------------------------------------------------------------------------------------------------
mxOcx.AddLinetype("MyEllipseArcType", "6,-10");
//设计当前线型为"MyEllipseArcType"
mxOcx.LineType = ("MyEllipseArcType");
mxOcx.DrawCADColor = 16711680;
mxOcx.DrawEllipseArc(200, 1600, -80, 30, 0.5, 60, 300);
//把所有的实体都放到当前显示视区
mxOcx.ZoomAll();
//更新视区显示
mxOcx.UpdateDisplay();
}效果展示:
用户可以通过点击绘制椭圆弧按钮,在CAD控件视区的任何位置绘制椭圆弧。如下图所示:

在CAD设计时,需要绘制文字,用户可以设置设置绘制文字的高度等属性。
主要用到函数说明:
_DMxDrawX::DrawText
绘制一个单行文字。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dPosX | 文字的位置的X坐标 |
DOUBLE dPosY | 文字的位置的Y坐标 |
BSTR pszText | 文字内容字符串 |
DOUBLE dHeight | 文字高度 |
DOUBLE dRotation | 文字的旋转角度 |
SHORT horizontalMode | 文字的水平对齐方式,0=kTextLeft,1=kTextCenter,2=kTextRight |
SHORT verticalMode | 文字的竖直对齐方式,1=kTextBottom,2=kTextVertMid,3=kTextTop |
_DMxDrawX::AddTextStyle1
向数据库中增加一个文字样式。详细说明如下:
| 参数 | 说明 |
|---|---|
BSTR pszName | 文字样式名称 |
BSTR pszFileName | shx文件名 |
BSTR pszBigFontFileName | big shx文件名 |
DOUBLE dXScale | 文字宽度缩放比例 |
js中实现代码说明:
function DrawText()
{
//清空当前显示内容
mxOcx.NewFile();
//把颜色改回黑白色
mxOcx.DrawColor = 0;
//创建一个图层,名为"TextLayer"
mxOcx.AddLayer("TextLayer");
//设置当前图层为"TextLayer"
mxOcx.LayerName = "TextLayer";
//绘制一个单行文字
//参数一为文字的位置的X坐标 ;参数二为文字的位置的Y坐标 ;参数三为文字内容字符串
//参数四为文字高度;参数五为文字的旋转角度
//参数六为文字的水平对齐方式,0=kTextLeft,1=kTextCenter,2=kTextRight
//参数七文字的竖直对齐方式,1=kTextBottom,2=kTextVertMid,3=kTextTop
//-------------------------------------------------------------------------------------------------
//写一个文字,0,1是左对齐.
mxOcx.DrawColor = 65280;
mxOcx.DrawText(0, 1900, "梦想绘图控件3.0 www.mxdraw.com", 100, 0, 0, 1);
//---------------------------------------------------------------------------------------------------
//写一个文字,2,1是右下对齐.
mxOcx.DrawColor = 4556677;
mxOcx.DrawText(3000, 2100, "梦想绘图控件3.0 www.mxdraw.com", 100, -20, 2, 1);
//--------------------------------------------------------------------------------------------------
//按指定样式绘制文字
mxOcx.AddTextStyle1("MyTextStyle", "italicc.shx", "gbcbig.shx", 0.7);
mxOcx.TextStyle = "MyTextStyle";
mxOcx.DrawColor = 255;
mxOcx.DrawText(0, 3000, "梦想绘图控件3.0 www.mxdraw.com", 100, 0, 0, 1);
//--------------------------------------------------------------------------------------------------
//写一个TureType字体
mxOcx.AddTextStyle2("MyTrueTypeStyle", "黑体", 0.7);
mxOcx.TextStyle = "MyTrueTypeStyle";
mxOcx.DrawText(0, 3150, "梦想绘图控件3.0 www.mxdraw.com", 100, 0, 0, 1);
mxOcx.ZoomAll();
mxOcx.UpdateDisplay();
}效果展示:
用户可以通过点击绘制文字按钮,CAD控件视区将显示在js中设置好的文字。如下图所示:

在CAD设计时,需要绘制多行文字,用户可以设置设置绘制文字的高度等属性。
主要用到函数说明:
_DMxDrawX::DrawMText
绘制一个多行文字。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dPosX | 多行文字位置的X坐标 |
DOUBLE dPosY | 多行文字位置的Y坐标 |
BSTR pszContents | 多行文字的内容 |
DOUBLE dHeight | 多行文字的高度 |
DOUBLE dWidth | 多行文字的显示宽度 |
DOUBLE dRotation | 多行文字的旋转角度 |
SHORT iAttachment | 多行文字的对齐方式 |
可以取值 | enum AttachmentPoint { kTopLeft = 1, kTopCenter = 2, kTopRight = 3, kMiddleLeft = 4, kMiddleCenter = 5, kMiddleRight = 6, kBottomLeft = 7, kBottomCenter = 8, kBottomRight = 9, |
_DMxDrawX::AddTextStyle2
向数据库中增加一个TrueType文字样式。详细说明如下:
| 参数 | 说明 |
|---|---|
BSTR pszName | 文字样式名称 |
BSTR pszTrueTypeFontName | TrueType字体名 |
DOUBLE dXScale | 文字宽度缩放比例 |
js中实现代码说明:
function DrawMText()
{
//清空当前显示内容
mxOcx.NewFile();
//把颜色改回黑白色
mxOcx.DrawColor = 0;
//绘制多行文字
//参数一为多行文字位置的X坐标 ;参数二为多行文字位置的Y坐标 ;参数三为多行文字的内容
//参数四为多行文字的高度 ;参数五为多行文字的显示宽度
//参数六为多行文字的旋转角度
//参数七为多行文字的对齐方式
mxOcx.DrawColor = 255;
mxOcx.DrawMText( 100, 100,"cad绘图\\P梦想软件",15,500,0.0,7);
mxOcx.DrawColor = 16711680;
mxOcx.DrawMText(0,0,"\\A2;平方方法 :m{\\H0.3x;\\S 2^;}",15,100,0.0,7);
//按指定样式绘制文字
mxOcx.AddTextStyle1("MyTextStyle", "italicc.shx", "gbcbig.shx", 0.7);
mxOcx.TextStyle = "MyTextStyle";
mxOcx.DrawColor = 65280;
mxOcx.DrawMText(0, 50,"\\A2;平方方法 :m{\\H0.3x;\\S 2^;}",15,100,0.0,7);
//--------------------------------------------------------------------------------------------------
//写一个TureType字体
mxOcx.AddTextStyle2("MyTrueTypeStyle", "黑体", 0.7);
mxOcx.TextStyle = "MyTrueTypeStyle";
mxOcx.DrawColor = 4556677;
mxOcx.DrawMText(0,100,"\\A2;平方方法 :m{\\H0.3x;\\S 2^;}",15,100,0.0,7);
mxOcx.ZoomAll();
mxOcx.UpdateDisplay();
}效果展示:
用户可以通过点击绘制多行文字按钮,将在js中设置好的多行文本插入到CAD控件视区。如下图所示:

把图片作为背景图片可见但是不能编辑操作。
主要用到函数说明:
_DMxDrawX::DrawImageToBackground
绘光栅图到背景。详细说明如下:
| 参数 | 说明 |
|---|---|
BSTR sFileName | 光栅图文件.DWGBMPJPG文件路径 |
LONG lLeftUpX | 栅图显示的在控件视区显示的左上角位置X,视区窗口坐标 |
LONG lLeftUpY | 栅图显示的在控件视区显示的左上角位置Y,视区窗口坐标 |
js中实现代码说明:
function BackGroundImage() {
// 新建一个COM组件对象
var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
getPt.message = "点取图片的插入中点";
if (getPt.go() != 1) {
return;
}
var frstPt = getPt.value();
if (frstPt == null) {
return;
}
// 控件程序在磁盘的文件路径
var sImageFile = mxOcx.GetOcxAppPath() + "\\mxcad.jpg";
alert(sImageFile);
// 绘图制一个图象标记对象
//参数一为光栅图文件.DWGBMPJPG文件路径;参数二为栅图显示的在控件视区显示的左上角位置X,视区窗口坐标 ;
// 参数三为栅图显示的在控件视区显示的左上角位置Y,视区窗口坐标 ;
mxOcx.DrawImageToBackground(sImageFile,frstPt.x, frstPt.y );
}效果展示:
通过点击插入背景图片按钮,触发BackGroundImage()事件,将在js中设置好的图片插入到CAD控件视区中,背景图片可见不可操作。如下图所示:

在CAD设计绘图时,需要插入外部图片,可以设置图片的缩放比例、旋转角度、图片显示文件名等属性。
主要用到函数说明:
_DMxDrawX::DrawImageMark
绘图制一个图象标记对象。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dPosX | 绘制位置,是图片的中心点X |
DOUBLE dPosY | 绘制位置,是图片的中心点y |
DOUBLE dScale | 缩放比例,如果输入负数时,表示图片随视区大小缩放,负数的决对值表示图片的高度,图片宽度自动计算 |
DOUBLE dAng | 图片旋转角度 |
BSTR pszFileName | 图片显示文件名 |
BSTR pszTwinkeImageFiles | 闪烁时使用的ImageFile.,设置该文件后,调用MxDraw::TwinkeEnt后将交替闪烁显示。 可以同时设置多个闪烁文件,文件间用逗号隔开,比如: 1.jgp,2.jpg,3.jpg |
VARIANT_BOOL isSaveData | 图片数据,是否随图保存 |
js中实现代码说明:
function InsertImage() {
// 新建一个COM组件对象
var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
getPt.message = "点取图片的插入中点";
if (getPt.go() != 1) {
return;
}
var frstPt = getPt.value();
if (frstPt == null) {
return;
}
// 控件程序在磁盘的文件路径
var sImageFile = mxOcx.GetOcxAppPath() + "\\mxcad.jpg";
alert(sImageFile);
// 绘图制一个图象标记对象
//参数一为绘制位置,是图片的中心点X ;参数二为绘制位置,是图片的中心点Y;参数三为缩放比例;参数四为旋转角度;
//参数五为图片显示文件名;参数六为闪烁文件设置;参数七为图片数据是否随图保存
mxOcx.DrawImageMark(frstPt.x, frstPt.y, -100.0, 0.0, sImageFile, "", true);
}效果展示:
用户可以通过点击插入图片按钮,将在js代码中设置的图片插入到CAD控件视区得任何位置。如下图所示:

在CAD设计绘图时,绘制光栅图形,可以设置其的缩放比例、旋转角度等属性。
主要用到函数说明:
_DMxDrawX::DrawImage
绘制光栅图形。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dPosX | 插入点的X坐标 |
DOUBLE dPosY | 插入点的Y坐标 |
DOUBLE dScale | 光栅图形的缩放比例 |
DOUBLE dAng | 旋转角度 |
BSTR pszFilePath | 光栅图的文字路径,支持http://开头的网络路径 |
js中实现代码说明:
function DrawImage() {
// 新建一个COM组件对象
var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
getPt.message = "点取图片的插入中点";
if (getPt.go() != 1) {
return;
}
var frstPt = getPt.value();
if (frstPt == null) {
return;
}
// 控件程序在磁盘的文件路径
var sImageFile = mxOcx.GetOcxAppPath() + "\\mxcad.jpg";
// 绘图制一个图象标记对象
//参数一插入点的X坐标;参数二插入点的Y坐标;参数三为光栅图形的缩放比例;参数四为旋转角度;
//参数五为光栅图的文字路径,支持http://开头的网络路径;
mxOcx.DrawImage(frstPt.x, frstPt.y, 0.0, 0.0, sImageFile);
mxOcx.ZoomAll();
}效果展示:
用户可以通过点击绘制光栅图形按钮,将在js代码中设置的光栅图形插入到CAD控件视区得任何位置,也可以调整其缩放比例。如下图所示:

主要用到函数说明:
_DMxDrawX::DrawToJpg
把指定区域的内容绘制一个jpg文件中。详细说明如下:
| 参数 | 说明 |
|---|---|
BSTR sJpgFilePath | Jpg文件名 |
DOUBLE dLbx | 输出范围的左下角坐标X,文档坐标系统 |
DOUBLE dLby | 输出范围的左下角坐标Y,文档坐标系统 |
DOUBLE dRtx | 输出范围的右上角坐标X,文档坐标系统 |
DOUBLE dRty | 输出范围的右上角坐标Y,文档坐标系统 |
iWidth | 位图宽度方向的像素,是-1并iHeight不是-1,由高度和文档高宽算出,否则取系统默认值:1000 |
iHeight | 位图高度方向的像素,是-1并iWidth不是-1, 由高度和文档高宽算出,否则取系统默认值:1000 |
pBkColor | 位图的背影色,如果为NULL,取黑色为背景色 |
js中实现代码说明:
function UserSaveJpg() {
var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
getPt.message = "点取范围第一点";
if (getPt.go() != 1) {
return;
}
var frstPt = getPt.value();
if (frstPt == null)
return;
//新创建IMxDrawUtility对象
var utl = mxOcx.NewUtility();
//与用户交互得一个矩形框 参数一矩形框一个对角点;参数二命令行提示
var secondPt = utl.GetCorner(frstPt, "点取范围第二点");
if (secondPt == null)
return;
mxOcx.DrawToJpg("c:\\mxcad.jpg", frstPt.x , frstPt.y, secondPt.x, secondPt.y, 200, 200, 0);
alert("图片已经保存");
}效果展示:
用户可以通过点击指定区域绘制一个jpg文件按钮,选取用户需要的范围保存图片,成功后会弹出成功保存提示框。如下图所示:

视频(二)如下:
超链接(Hyperlink)可以看做是一个“热点”,它可以从当前Web页定义的位置跳转到其他位置。
设置对象动态提示事件回调函数。
document.getElementById("MxDrawXCtrl").ImpInputPointToolTipFun = DoInputPointToolTipFun;//设置对象动态提示事件回调函数
function DoInputPointToolTipFun(ent) {
var mxOcx = document.getElementById("MxDrawXCtrl");
var sHyperlinks = ent.Hyperlinks;
if(sHyperlinks.length != 0)
{
var sClassName = ent.ObjectName;
var tip = "<b><ct=0x0000FF><al_c>"+sClassName+
"</b><br><ct=0x00AA00><hr=100%></ct><br><a=\"link\">" + sHyperlinks + "</a>";
//设置用户自定义事件的结果返回值
mxOcx.SetEventRetString(tip);
}
ent = null;
CollectGarbage();
}设置超链接实体被点击事件回调函数。
document.getElementById("MxDrawXCtrl").ImpHyperlinkClickFun = DoHyperlinkClickFun;function DoHyperlinkClickFun(ent, dX, dY) {
var mxOcx = document.getElementById("MxDrawXCtrl");
//打开一个网址连接
mxOcx.GotoURL(ent.Hyperlinks);
//设置自定义事件的返回值
mxOcx.SetEventRet(1);
}给选中实体设置超链接。
//新建一个COM组件对象
var selEnt = mxOcx.NewComObject("IMxDrawUiPrEntity");
selEnt.message = "选择要设置的对象";
if (selEnt.go() != 1)
return;
//返回用户选择的实体
var ent = selEnt.Entity();
if (ent == null)
return;
//设置超链接(用户可以设置所需链接)
ent.Hyperlinks = "www.cdtong.net";
//设置动态提示弹出时间,默认为1000.0毫秒
mxOcx.DynToolTipTime = 100;效果展示:
用户可以通过点击设置超链接按钮,将在js代码中设置的网页链接设置到用户需要链接的实体上,当用户点击被设置超链接的实体时,网页将跳转到js中设置的网页去。如下图所示:

主要用到函数说明:
_DMxDrawX::DrawBlockReference
绘制块引用对象。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dPosX | 插入点的X坐标 |
DOUBLE dPosY | 插入点的Y坐标 |
BSTR pszBlkName | 图块名 |
DOUBLE dScale | 图块缩放比例 |
DOUBLE dAng | 图块的旋转角度 |
js中实现代码说明:
function DynInsert() {
mxOcx.DrawColor = 0;
//创建一个图层,名为"BlockLayer"
mxOcx.AddLayer ("BlockLayer");
//设置当前图层为"BlockLayer"
mxOcx.LayerName = "BlockLayer";
var sBlkName = "Tree";
//用户需要出入图块的路径 控件程序在磁盘的文件路径
var sBlkFile = mxOcx.GetOcxAppPath() + "\\Blk\\树.dwg";
//向控件数据库中插入一个图块,不用它插入匿名块
mxOcx.InsertBlock(sBlkFile, "Tree");
//绘制块引用对象
//参数一为插入点的X坐标;参数二为插入点的Y坐标;
//参数三为图块名;参数四为图块缩放比例;参数五为图块的旋转角度
mxOcx.DrawBlockReference(0, 3600, "Tree", 1, 0) ;
mxOcx.ZoomAll();
mxOcx.UpdateDisplay();
}效果展示:
用户可以通过点击绘制块引用对象按钮,将在js代码中设置的图块插入到CAD控件视区。如下图所示:

主要用到函数说明:
_DMxDrawX::DrawSolid
绘McDbSolid对象。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dX1 | 第一个点X |
DOUBLE dY1 | 第一个点Y |
DOUBLE dX2 | 第二个点X |
DOUBLE dY2 | 第二个点Y |
DOUBLE dX3 | 第三个点X |
DOUBLE dY3 | 第三个点Y |
DOUBLE dX4 | 第四个点X |
DOUBLE dY4 | 第四个点Y |
js中实现代码说明:
function DrawSolid () {
//绘McDbSolid对象
mxOcx.AddLinetype( "MLineType1", "");
mxOcx.LineType = "MLineType1";
mxOcx.DrawColor = 255;
mxOcx.DrawSolid(0, 50,30, 50,30, 40,0, 40);
mxOcx.AddLinetype( "MLineType2", "");
mxOcx.LineType = "MLineType2";
mxOcx.DrawColor = 65280;
mxOcx.DrawSolid(50, 60,30, 60,30, 80,50, 80);
mxOcx.AddLinetype( "MLineType3", "");
mxOcx.LineType = "MLineType3";
mxOcx.DrawColor = 65535;
mxOcx.DrawSolid(90, 20,35, 20,35, 40,90, 40);
mxOcx.AddLinetype( "MLineType4", "");
mxOcx.LineType = "MLineType4";
mxOcx.DrawColor = 16711680;
mxOcx.DrawSolid(150, 90,100, 90,100, 40,150, 40);
}效果展示:
用户可以通过点击绘mcdbsolid对象按钮,在CAD控件视区显示在js中设置好的mcdbsolid对象。如下图所示:

填充是CAD图纸中不可或缺的对象,在机械设计行业,常常需要将零部件剖开,以表现其内部的细节,而这些被剖开的截面会用填充来表示;在工程设计行业,一些特殊的材料或地形,也会用填充来表示。
js中实现代码说明:
function DrawPathToHatch () {
mxOcx.PathMoveTo (0, 30);
//路径的一下个点
mxOcx.PathLineTo (100, 50);
//路径的一下个点
mxOcx.PathLineTo (100, 30);
//路径的一下个点
mxOcx.PathLineTo(0, 30) ;
mxOcx.AddLinetype( "MLineType1", "");
mxOcx.LineType = "MLineType1";
mxOcx.DrawColor = 255;
mxOcx.DrawPathToHatch(1);
//-----------------------------------------------------------------------------------------------
mxOcx.PathMoveTo (30, 70);
//路径的一下个点
mxOcx.PathLineTo (200, 70);
//路径的一下个点
mxOcx.PathLineTo (200, 120);
//路径的一下个点
mxOcx.PathLineTo(30, 70) ;
mxOcx.AddLinetype( "MLineType2", "");
mxOcx.LineType = "MLineType2";
mxOcx.DrawColor = 65280;
mxOcx.DrawPathToHatch(1);
//-----------------------------------------------------------------------------------------------
mxOcx.PathMoveTo (110, 30);
//路径的一下个点
mxOcx.PathLineTo (150, 60);
//路径的一下个点
mxOcx.PathLineTo (150, 30);
//路径的一下个点
mxOcx.PathLineTo(110, 30) ;
mxOcx.AddLinetype( "MLineType3", "");
mxOcx.LineType = "MLineType3";
mxOcx.DrawColor = 65535;
mxOcx.DrawPathToHatch(1);
//-----------------------------------------------------------------------------------------------
mxOcx.PathMoveTo (200, 30);
//路径的一下个点
mxOcx.PathLineTo (300, 30);
//路径的一下个点
mxOcx.PathLineTo (300, 60);
//路径的一下个点
mxOcx.PathLineTo(200, 30) ;
mxOcx.AddLinetype( "MLineType4", "");
mxOcx.LineType = "MLineType4";
//设置颜色
mxOcx.DrawColor = 16711680;
// 把路径闭合
mxOcx.DrawPathToHatch(1);
}效果展示:
用户可以通过点击绘制填充按钮,在CAD控件视区显示在js设置好的填充图像。如下图所示:

js中实现代码说明:
function DrawPathToHatch1() {
//把路径的开始位置移动指定的点
//参数一为点的X坐标 ,参数二为点的Y坐标,参数三为该点处开始宽度,对Polyline线的绘制有效
//参数四为该点处结束宽度,对Polyline线的绘制有效
//参数五为该点处的凸度,对Polyline线的绘制有效
mxOcx.PathMoveToEx(0, 30, 0.3, 0.3, 0.3) ;
//路径的一下个点
mxOcx.PathLineTo( 100, 30);
//路径的一下个点
mxOcx.PathLineTo(100, 90);
//路径的一下个点
mxOcx.PathLineTo(0, 30);
//设置颜色
mxOcx.AddLinetype( "MLineType1", "");
mxOcx.LineType = "MLineType1";
mxOcx.DrawColor = 255;
// 把路径闭合
mxOcx.DrawPathToHatch(1);
//-----------------------------------------------------------------------------------------------
mxOcx.PathMoveToEx(50, 120, 0.3, 0.3, 0.3) ;
//路径的一下个点
mxOcx.PathLineTo( 150, 120);
//路径的一下个点
mxOcx.PathLineTo(150, 180);
//路径的一下个点
mxOcx.PathLineTo(50, 120);
//设置颜色
mxOcx.AddLinetype( "MLineType2", "");
mxOcx.LineType = "MLineType2";
mxOcx.DrawColor = 65280;
// 把路径闭合
mxOcx.DrawPathToHatch(1);
//-----------------------------------------------------------------------------------------------
mxOcx.PathMoveToEx(110, 50, 0.3, 0.3, 0.3) ;
//路径的一下个点
mxOcx.PathLineTo( 200, 30);
//路径的一下个点
mxOcx.PathLineTo(200, 90);
//路径的一下个点
mxOcx.PathLineTo(110,50);
//设置颜色
mxOcx.AddLinetype( "MLineType3", "");
mxOcx.LineType = "MLineType3";
mxOcx.DrawColor = 65535;
// 把路径闭合
mxOcx.DrawPathToHatch(1);
//-----------------------------------------------------------------------------------------------
mxOcx.PathMoveToEx(250, 30, 0.3, 0.3, 0.3) ;
//路径的一下个点
mxOcx.PathLineTo( 300, 30);
//路径的一下个点
mxOcx.PathLineTo(300, 90);
//路径的一下个点
mxOcx.PathLineTo(250, 30);
//设置颜色
mxOcx.AddLinetype( "MLineType4", "");
mxOcx.LineType = "MLineType4";
mxOcx.DrawColor = 16711680;
// 把路径闭合
mxOcx.DrawPathToHatch(1);
}效果展示:
用户可以通过点击绘制实心圆弧填充按钮,在CAD控件视区显示在js设置好的填充图像。如下图所示:

绘制工程图,常常需要将某种图案填充到某一区域,例如剖面线的绘制。MxCAD提供了丰富的填充图案,可以利用这些图案进行快速填充。
js中实现代码说明:
function DrawPathToHatch2() {
//绘制一个有图案的填充
//angle, x-origin,y-origin, delta-x,delta-y,dash-1,dash-2, …
//45 = angle 是图案线角度.
//0 = x-origin 是第一个填充线经过的点位置X坐标
//0 = y-origin 是第一个填充线经过的点位置Y坐标
//0 = delta-x 是下一个填充线相对前一个线的X方向偏移
//0.125 = delta-y 是下一个填充线相对前一个线的Y方向偏移
mxOcx.AddPatternDefinition("MyHatchPattern1", "((45, 0,0, 0,0.125))");
//把路径变成一个填充对象
mxOcx.PatternDefinition = "MyHatchPattern1";
//把路径的开始位置移动指定的点
//参数一为点的X坐标 ,参数二为点的Y坐标,参数三为该点处开始宽度,对Polyline线的绘制有效
//参数四为该点处结束宽度,对Polyline线的绘制有效
//参数五为该点处的凸度,对Polyline线的绘制有效
mxOcx.PathMoveToEx(0, 30, 0.3, 0.3, 0.3) ;
//路径的一下个点
mxOcx.PathLineTo( 100, 30);
//路径的一下个点
mxOcx.PathLineTo(100, 60);
//路径的一下个点
mxOcx.PathLineTo(0, 30);
//把路径变成一个填充,80,是填充图案的缩放比例.
mxOcx.DrawPathToHatch(100);
//----------------------------------------------------------------
//绘制图案填充2
mxOcx.AddPatternDefinition("MyHatchPattern2", "((0,0,0,0,8)(90,0,0,8,8,8,-8))");
//把路径变成一个填充对象
mxOcx.PatternDefinition = "MyHatchPattern2";
//把路径的开始位置移动指定的点
//参数一为点的X坐标 ,参数二为点的Y坐标,参数三为该点处开始宽度,对Polyline线的绘制有效
//参数四为该点处结束宽度,对Polyline线的绘制有效
//参数五为该点处的凸度,对Polyline线的绘制有效
mxOcx.PathMoveToEx(100, 30, 0, 0, 0.3) ;
//路径的一下个点
mxOcx.PathLineTo( 200, 30);
//路径的一下个点
mxOcx.PathLineTo(200, 60);
//路径的一下个点
mxOcx.PathLineTo(100, 30);
//把路径变成一个填充,80,是填充图案的缩放比例.
mxOcx.DrawPathToHatch(1);
mxOcx.UpdateDisplay();
}效果展示:
用户可以通过点击绘制图案填充按钮,在CAD控件视区将显示在js中设置的图案填充。如下图所示:

js中实现代码说明:
自定义实体绘制函数
document.getElementById("MxDrawXCtrl").ImpExplodeFun = ExplodeFun;function ExplodeFun(pCustomEntity, pWorldDraw) {
var mxOcx = document.all.item("MxDrawXCtrl");
var sGuid = pCustomEntity.Guid;
if (sGuid == "TestMxCustomEntity2") {
if (!pCustomEntity.IsHave("First"))
return;
var stp = pCustomEntity.GetPoint("First");
var ept = pCustomEntity.GetPoint("BasePoint");
var dimpt = pCustomEntity.GetPoint("DimPoint");
var txt = pCustomEntity.GetString("Text");
var textH = pCustomEntity.GetDouble("TextHeight");
var edgeNum = pCustomEntity.GetLong("EdgeNumber");
var shapRadius = pCustomEntity.GetDouble("ShapRadius");
var isCircle = pCustomEntity.GetLong("isCircle");
// 创建一个批注对象.
var comment = mxOcx.NewEntity("IMxDrawComment");
//标注文字
comment.Text = txt;
//标注文字高度
comment.TextHeight = textH;
//标注位置提示多边形的边数. 小于2不绘制,=2绘制圆,大于2绘制多边形
comment.EdgeNumber = edgeNum;
//标注位置提示多边形的半径
comment.ShapRadius = shapRadius;
//标注基点
comment.basePoint = ept;
//标注位置点
comment.Position = dimpt;
// 设置文字样式
pWorldDraw.TextStyle = "MyCommentFont";
// 动态绘制.
pWorldDraw.DrawEntity(comment);
if (isCircle) {
var dR = stp.DistanceTo(ept) * 0.5;
var vec = stp.SumVector(ept);
vec.Mult(0.5);
ept.Add(vec);
//绘制一个圆
//参数一为圆的中心X值 ,参数二为圆的中心Y值,
//参数三为半径
pWorldDraw.DrawCircle(ept.x, ept.y, dR);
}
// 绘制矩形框.
else {
//绘制一个直线
//参数一直线的开始点x坐标,参数二直线的开始点y坐标,参数三直线的结束点x坐标,参数四直线的结束点y坐标
pWorldDraw.DrawLine(stp.x, stp.y, stp.x, ept.y);
pWorldDraw.DrawLine(stp.x, ept.y, ept.x, ept.y);
pWorldDraw.DrawLine(ept.x, ept.y, ept.x, stp.y);
pWorldDraw.DrawLine(ept.x, stp.y, stp.x, stp.y);
}
mxOcx.SetEventRet(1);
}
}返回自定义实体夹点
function GetGripPointsFun(pCustomEntity) {
var sGuid = pCustomEntity.Guid;
if (sGuid == "TestMxCustomEntity") {
if (!pCustomEntity.IsHave("First"))
return;
var stp = pCustomEntity.GetPoint("First");
var ept = pCustomEntity.GetPoint("BasePoint");
var dimpt = pCustomEntity.GetPoint("DimPoint");
var ret = mxOcx.NewResbuf();
ret.AddPoint(stp);
ret.AddPoint(ept);
ret.AddPoint(dimpt);
mxOcx.SetEventRetEx(ret);
}
}移动自定义实体夹点
function MoveGripPointsFun(pCustomEntity, lGridIndex, dOffsetX, dOffsetY) {
var sGuid = pCustomEntity.Guid;
if (sGuid == "TestMxCustomEntity") {
if (!pCustomEntity.IsHave("First"))
return;
var stp = pCustomEntity.GetPoint("First");
var ept = pCustomEntity.GetPoint("BasePoint");
var dimpt = pCustomEntity.GetPoint("DimPoint");
if (lGridIndex == 0) {
stp.x = stp.x + dOffsetX;
stp.y = stp.y + dOffsetY;
pCustomEntity.SetPoint("First", stp);
}
else if (lGridIndex == 1)
{
ept.x = ept.x + dOffsetX;
ept.y = ept.y + dOffsetY;
pCustomEntity.SetPoint("BasePoint", ept);
}
else
{
dimpt.x = dimpt.x + dOffsetX;
dimpt.y = dimpt.y + dOffsetY;
pCustomEntity.SetPoint("DimPoint", dimpt);
}
mxOcx.SetEventRet(1);
}
}固定参数绘批注
function DoCommentFix() {
var comment = mxOcx.NewEntity("IMxDrawComment");
comment.Text = "固定参数绘批注";
comment.TextHeight = 10;
var basepos = mxOcx.NewPoint();
basepos.x = 0;
basepos.y = 10;
var pos = mxOcx.NewPoint();
pos.x = 20;
pos.y = 30;
//基点
comment.BasePoint = basepos;
//位置
comment.Position = pos;
var comobj = mxOcx.ObjectIdToObject( mxOcx.DrawEntity(comment) );
comobj.TextStyle = "MyCommentFont";
mxOcx.ZoomAll();
}效果展示:
通过点击固定参数绘批注按钮,触发DoCommentFix()事件,CAD控件视区将显示在js中设置好的固定参数批注。如下图所示:

js中实现代码说明:
function DoFixRectComment()
{
mxOcx.NewFile();
var ent = mxOcx.DrawCustomEntity("TestMxCustomEntity2", "");
var basept = mxOcx.NewPoint();
basept.x = 100;
basept.y = 100;
ent.SetPoint("BasePoint", basept);
ent.SetString("Text", "固定矩形标注");
ent.SetDouble("TextHeight", 100);
ent.SetLong("EdgeNumber", 2);
ent.SetDouble("ShapRadius", 1);
var dimpt = mxOcx.NewPoint();
dimpt.x = 200;
dimpt.y = 200;
ent.SetPoint("DimPoint", dimpt);
var frstPt = mxOcx.NewPoint();
frstPt.x = 0;
frstPt.y = 0;
ent.SetPoint("First", frstPt);
ent.TextStyle = "MyCommentFont";
}效果展示:
通过点击绘制矩形标注按钮,触发DoFixRectComment()事件,CAD控件视区将显示在js中设置好的矩形标注。如下图所示:

js中实现代码说明:
function DoFixCircleComment()
{
//清空当前显示内容
mxOcx.NewFile();
var ent = mxOcx.DrawCustomEntity("TestMxCustomEntity2", "");
var basept = mxOcx.NewPoint();
basept.x = 100;
basept.y = 100;
ent.SetPoint("BasePoint", basept);
ent.SetString("Text", "固定参数绘制圆形标注");
ent.SetDouble("TextHeight", 100);
//标注位置提示多边形的边数. 小于2不绘制,=2绘制圆,大于2绘制多边形
ent.SetLong("EdgeNumber", 2);
ent.SetDouble("ShapRadius", 1);
var dimpt = mxOcx.NewPoint();
dimpt.x = 200;
dimpt.y = 200;
ent.SetPoint("DimPoint", dimpt);
var frstPt = mxOcx.NewPoint();
frstPt.x = 0;
frstPt.y = 0;
ent.SetPoint("First", frstPt);
ent.TextStyle = "MyCommentFont";
ent.SetLong("isCircle", 1);
}效果展示:
通过点击绘制圆形标注按钮,触发DoFixCircleComment()事件,CAD控件视区将显示在js中设置好的圆形标注。如下图所示:

js中实现代码说明:
function DoCloudCircleCommentFix() {
var comment = mxOcx.NewEntity("IMxDrawComment");
comment.Text = "固定参数绘圆形云线标注";
comment.TextHeight = 50;
var frstPt = mxOcx.NewPoint();
frstPt.x = -200;
frstPt.y = -200;
var basepos = mxOcx.NewPoint();
basepos.x = 0;
basepos.y = 10;
var pos = mxOcx.NewPoint();
pos.x = 200;
pos.y = 300;
//基点
comment.BasePoint = basepos;
//位置
comment.Position = pos;
//标注位置提示多边形的半径
comment.ShapRadius = 50;
//标注框类型
comment.BoundingBoxType = 5;
//标注箭头类型
comment.ArrowType = 2;
var points = mxOcx.NewComObject("IMxDrawPoints");
points.Add2(frstPt);
points.Add2(basepos);
//标注框坐标数据
comment.Bounding = points;
var comobj = mxOcx.ObjectIdToObject(mxOcx.DrawEntity(comment));
comobj.TextStyle = "MyCommentFont";
mxOcx.ZoomAll();
}效果展示:
通过点击绘制圆形云线标注按钮,触发DoCloudCircleCommentFix()事件,CAD控件视区将显示在js中设置好的圆形云线标注。如下图所示:

主要用到函数说明:
_DMxDrawX::DrawDimRotated
绘制一个线型标注。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dExtLine1PointX | 输入第一条界线的起始点X值 |
DOUBLE dExtLine1PointY | 输入第一条界线的起始点Y值 |
DOUBLE dExtLine2PointX | 输入第二条界线的起始点X值 |
DOUBLE dExtLine2PointY | 输入第二条界线的起始点Y值 |
DOUBLE dDimLineLocationX | 输入标注线自身上的点X值 |
DOUBLE dDimLineLocationY | 输入标注线自身上的点Y值 |
DOUBLE dRotationAngle | 输入标注的旋转角 |
js中实现代码说明:
function DrawDimRotated (){
mxOcx.AddDimStyle("MyDimStyle", "41,0.18,141,0.09,40,200", "77,1,271,3", "", "");
mxOcx.DimStyle = "MyDimStyle";
//把颜色改回黑白色
mxOcx.DrawColor = 0;
//把线型改成实线
mxOcx.LineType = "";
//设置线宽 4
mxOcx.LineWidth = 0;
//绘制一个线型标注,参数一为输入第一条界线的起始点X值,参数二为输入第一条界线的起始点Y值
// 参数三为输入第二条界线的起始点X值,参数四为输入第二条界线的起始点Y值
// 参数五为输入标注线自身上的点X值,参数六为输入标注线自身上的点Y值
// 参数七为输入标注的旋转角
mxOcx.DrawDimRotated(0, 70, 50, 70, 25, 71, 0);
mxOcx.DrawDimRotated(0, 72, 0, 74, 15, 73, 0.771);
//把所有的实体都放到当前显示视区
mxOcx.ZoomAll();
//更新视区显示
mxOcx.UpdateDisplay();
}效果展示:
通过点击绘制线型标注按钮,触发DrawDimRotated()事件,CAD控件视区将显示在js中设置好的线型标注。如下图所示:

主要用到函数说明:
_DMxDrawX::DrawDimRadial
绘制一个半径标注。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dCenterX | 被标注的曲线的中点X值 |
DOUBLE dCenterY | 被标注的曲线的中点Y值 |
DOUBLE dChordPointX | 被标注的曲线上的点X值 |
DOUBLE dChordPointY | 被标注的曲线上的点Y值 |
DOUBLE dLeaderLength | 输入箭头长度 |
js中实现代码说明:
function DrawDimRadial(){
mxOcx.AddDimStyle("MyDimStyle", "41,0.18,141,0.09,40,200", "77,1,271,3", "", "");
mxOcx.DimStyle = "MyDimStyle";
//把颜色改回黑白色
mxOcx.DrawColor = 0;
//把线型改成实线
mxOcx.LineType = "";
//设置线宽 4
mxOcx.LineWidth = 0;
//绘制一个半径标注
//参数一为被标注的曲线的中点X值 ,参数二为被标注的曲线的中点Y值
//参数三为被标注的曲线上的点X值,参数四为被标注的曲线上的点Y值
//参数五为输入箭头长度
mxOcx.DrawDimRadial (50, 660, 50, 650, 0);
//把所有的实体都放到当前显示视区
mxOcx.ZoomAll();
//更新视区显示
mxOcx.UpdateDisplay();
}效果展示:
通过点击绘制半径标注按钮,触发DrawDimRadial()事件,CAD控件视区将显示在js中设置好的半径标注。如下图所示:

主要用到函数说明:
_DMxDrawX::DrawDimDiametric
绘制一个直径标注。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dChordPointX | 在被标注的曲线上的第一个点X值 |
DOUBLE dChordPointY | 在被标注的曲线上的第一个点Y值 |
DOUBLE dFarChordPointX | 在被标注的曲线上的第二个点X值,这个点与chordPoint直径相对 |
DOUBLE dFarChordPointY | 在被标注的曲线上的第二个点Y值,这个点与chordPoint直径相对 |
DOUBLE dLeaderLength | 输入箭头长度 |
js中实现代码说明:
function DrawDimDiametric(){
mxOcx.AddDimStyle("MyDimStyle", "41,0.18,141,0.09,40,200", "77,1,271,3", "", "");
mxOcx.DimStyle = "MyDimStyle";
//把颜色改回黑白色
mxOcx.DrawColor = 0;
//把线型改成实线
mxOcx.LineType = "";
//设置线宽 4
mxOcx.LineWidth = 0;
//绘制一个直径标注
//参数一为在被标注的曲线上的第一个点X值 ,参数二为在被标注的曲线上的第一个点Y值
//参数三为在被标注的曲线上的第二个点X值,这个点与chordPoint直径相对
//参数四为在被标注的曲线上的第二个点Y值,这个点与chordPoint直径相对
//参数五为输入箭头长度
mxOcx.DrawDimDiametric (50, 570, 60, 600, 100);
//把所有的实体都放到当前显示视区
mxOcx.ZoomAll();
//更新视区显示
mxOcx.UpdateDisplay();
}效果展示:
通过点击绘制直径标注按钮,触发DrawDimDiametric()事件,CAD控件视区将显示在js中设置好的直径标注。如下图所示:

主要用到函数说明:
_DMxDrawX::DrawDimAngular
绘制一个角度标注。详细说明如下:
| 参数 | 说明 |
|---|---|
|
DOUBLE dAngleVertexX |
角度标注的顶点的X值 |
|
DOUBLE dAngleVertexY |
角度标注的顶点的Y值 |
|
DOUBLE dFirstEndPointX |
角度标注第一个参考线上的点X值 |
|
DOUBLE dFirstEndPointY |
角度标注第一个参考线上的点Y值 |
|
DOUBLE dSecondEndPointX |
角度标注第二个参考线上的点X值 |
|
DOUBLE dSecondEndPointY |
角度标注第二个参考线上的点Y值 |
|
DOUBLE dTextPointX |
文字位置点X值 |
|
DOUBLE dTextPointY |
文字位置点Y值 |
js中实现代码说明:
function DrawDimAngular(){
mxOcx.AddDimStyle("MyDimStyle", "41,0.18,141,0.09,40,200", "77,1,271,3", "", "");
mxOcx.DimStyle = "MyDimStyle";
//把颜色改回黑白色
mxOcx.DrawColor = 0;
//把线型改成实线
mxOcx.LineType = "";
//设置线宽 4
mxOcx.LineWidth = 0;
//绘制一个角度标注
//参数一为角度标注的顶点的X值,参数二为角度标注的顶点的Y值
//参数三为角度标注第一个参考线上的点X值,参数四为角度标注第一个参考线上的点Y值
//参数五为角度标注第二个参考线上的点X值
//参数六为角度标注第二个参考线上的点Y值
//参数七为文字位置点X值,参数八为文字位置点Y值
mxOcx.DrawDimAngular(500, 5000, 0, 5500, 1000, 5500, 500, 5500);
//把所有的实体都放到当前显示视区
mxOcx.ZoomAll();
//更新视区显示
mxOcx.UpdateDisplay();
}
效果展示:
通过点击绘制角度标注按钮,触发DrawDimAngular()事件,CAD控件视区将显示在js中设置好的角度标注。如下图所示:
主要用到函数说明:
_DMxDrawX::DrawDimAligned
绘制一个对齐标注。详细说明如下:
| 参数 | 说明 |
|---|---|
|
DOUBLE dExtLine1PointX |
第一条界线开始点X值 |
|
DOUBLE dExtLine1PointY |
第一条界线开始点Y值 |
|
DOUBLE dExtLine2PointX |
第二条界线开始点X值 |
|
DOUBLE dExtLine2PointY |
第二条界线开始点Y值 |
|
DOUBLE dTextPositionX |
标注使用的指定标注线位置的定义点X值 |
|
DOUBLE dTextPositionY |
标注使用的指定标注线位置的定义点Y值 |
js中实现代码说明:
function DrawDimAligned(){
mxOcx.AddDimStyle("MyDimStyle", "41,0.18,141,0.09,40,200", "77,1,271,3", "", "");
mxOcx.DimStyle = "MyDimStyle";
//把颜色改回黑白色
mxOcx.DrawColor = 0;
//把线型改成实线
mxOcx.LineType = "";
//设置线宽 4
mxOcx.LineWidth = 0;
//绘制一个对齐标注
//参数一为第一条界线开始点X值,参数二为 第一条界线开始点Y值
//参数三为第二条界线开始点X值
//参数四为第二条界线开始点Y值
//参数五为标注使用的指定标注线位置的定义点X值
//参数六为标注使用的指定标注线位置的定义点Y值
mxOcx.DrawDimAligned(0, 40, 3, 45, 15, 46);
//把所有的实体都放到当前显示视区
mxOcx.ZoomAll();
//更新视区显示
mxOcx.UpdateDisplay();
}
效果展示:
通过点击绘制对齐标注按钮,触发DrawDimAligned()事件,CAD控件视区将显示在js中设置好的对齐标注。如下图所示:
js中实现代码说明:
mxOcx.NewFile();
var winWidth = 440;
var winHeight = 140;
var winLeft = (screen.width - winWidth) / 2;
var winTop = (screen.height - winHeight) / 2 - 20;
var str = 'dialogHeight:' + winHeight + 'px;dialogWidth:' + winWidth + 'px;dialogTop:' + winTop + 'px;dialogLeft:' + winLeft + 'px;resizable:yes;center:yes;status:no;'
var rt = window.showModalDialog("Gettext.htm?tmp=" + Math.random(), "输入二维码文本", str);
var txt;
if (typeof (rt) == "undefined") {
return;
} else {
var arr = rt.split(",");
txt = arr[0];
}
var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
getPt.message = "点取插入点";
if (getPt.go() != 1) {
return;
}
var pos = getPt.value();
if (pos == null)
return;
var qrCode = mxOcx.NewEntity("IMxDrawQrCode");
qrCode.Text = txt;
qrCode.Center = pos;
mxOcx.DrawEntity(qrCode);效果展示:
用户可以通过点击绘制二维码按钮,获取需要绘制二维码文字输入框。如下图所示:

绘制结果如下图所示:

主要用到函数说明:
MxDraw::GetCursorPickRect
返回拾取矩形框的宽度,默认值为6。详细说明如下:
| 参数 | 说明 |
|---|---|
IN MXDRAWOCXHANDLE hOcx | 控件窗口句柄 |
OUT int& iWidth | 返回光标拾取框的大小,光标拾取框是个矩形框,宽度等于高度 |
_DMxDrawX::ViewLongToDocCoord
视区长度到文档长度变换。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dLong | 视区长度 |
_DMxDrawX::DrawVectorLine
绘制矢量线。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dX1 | 开始点X值 |
DOUBLE dY1 | 开始点Y值 |
DOUBLE dX2 | 结束点X值 |
DOUBLE dY2 | 结束点Y值 |
LONG lColor | 颜色 |
_DMxDrawX::DrawVectorCircle
绘制矢量圆。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dCenX | 失量圆中心点X,文档坐标 |
DOUBLE dCenY | 失量圆中心点Y,文档坐标 |
DOUBLE dR | 失量圆半径,,文档坐标 |
LONG lColor | 颜色 |
js中代码实现说明:
//循环
while(true)
{
//新建一个COM组件对象 参数为COM组件类名
var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
getPt.message = "点取绘制点";
if(getPt.go() != 1)
{
return;
}
var frstPt = getPt.value();
if(frstPt == null)
return;
//返回拾取矩形框的宽度,默认值为6
var dLen = mxOcx.GetCursorPickRect();
//视区长度到文档长度变换
dLen = mxOcx.ViewLongToDocCoord(dLen);
dLen *= 3.0;
//绘制失量线
//参数一为开始点X值;参数二为开始点Y值;参数三为结束点X值;参数四为结束点Y值;参数五为颜色
mxOcx.DrawVectorLine(frstPt.x - dLen,frstPt.y - dLen,
frstPt.x + dLen,frstPt.y + dLen,
255
);
mxOcx.DrawVectorLine(frstPt.x - dLen,frstPt.y + dLen,
frstPt.x + dLen,frstPt.y - dLen,
255
);
//绘制失量圆
//参数一为失量圆中心点X,文档坐标 ;参数二为失量圆中心点Y,文档坐标;参数三为失量圆半径,文档坐标;参数四为颜色
mxOcx.DrawVectorCircle(frstPt.x,frstPt.y,
dLen * 0.5, 65280);
//更新当前控件的显示
mxOcx.UpdateDisplay();
}效果展示:
用户可以通过点击绘制标记按钮,可以在CAD控件视区的任何位置绘制标记。如下图所示:
