在CAD设计绘图时,光栅图像也就是图片,应用非常广泛,在CAD中可以直接插入光栅图像,并且可以对光栅图像进行裁剪、透明度调整等一些操作。点击此处下载演示实例。
视频如下:
把图片作为背景图片可见但是不能编辑操作。
主要用到函数说明:
_DMxDrawX::DrawImageToBackground
绘光栅图到背景。详细说明如下:
| 参数 | 说明 |
|---|---|
|
BSTR sFileName |
光栅图文件.DWGBMPJPG文件路径 |
|
LONG lLeftUpX |
栅图显示的在控件视区显示的左上角位置X,视区窗口坐标 |
|
LONG lLeftUpY |
栅图显示的在控件视区显示的左上角位置Y,视区窗口坐标 |
c#中实现代码说明:
private void BackGroundImage()
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "jpg文件(*.jpg)|*.jpg";
if (ofd.ShowDialog() != DialogResult.OK)
return;
Image tmpImage = null;
try
{
tmpImage = Image.FromFile(ofd.FileName);
}
catch(Exception exp)
{
MessageBox.Show(exp.Message);
return;
}
MxDrawPoint point = (MxDrawPoint)(axMxDrawX1.GetPoint(false, 0, 0,"\n点取插入点..."));
if (point == null)
return;
axMxDrawX1.DrawImageToBackground(ofd.FileName, (int)point.x, (int)point.y);
}
效果展示:
在设计绘图时,需要插入外部图片,可以设置图片的缩放比例、旋转角度、图片显示文件名等属性。
主要用到函数说明:
_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 | 图片数据,是否随图保存 |
c#中实现代码说明:
private void InsertImage()
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "jpg文件(*.jpg)|*.jpg";
if (ofd.ShowDialog() != DialogResult.OK)
return;
Image tmpImage = null;
try
{
tmpImage = Image.FromFile(ofd.FileName);
}
catch(Exception exp)
{
MessageBox.Show(exp.Message);
return;
}
//点取插入点
MxDrawPoint point = (MxDrawPoint)(axMxDrawX1.GetPoint(false, 0, 0, "\n点取插入点..."));
if (point == null)
return;
// 绘图制一个图象标记对象
//参数一为绘制位置,是图片的中心点X ;参数二为绘制位置,是图片的中心点Y;参数三为缩放比例;参数四为旋转角度;
//参数五为图片显示文件名;参数六为闪烁文件设置;参数七为图片数据是否随图保存
axMxDrawX1.DrawImageMark(point.x, point.y, -100.0, 0.0, ofd.FileName, "", false);
MxDrawApplication app = new MxDrawApplication();
app.ZoomAll();
}效果展示:
用户可以通过点击插入图片按钮,将在js代码中设置的图片插入到CAD控件视区的任何位置。如下图所示:

主要用到函数说明:
IMxDrawImageMark::ImageFile
图片文件路径。
c#中实现代码说明:
private void ModifyImage()
{
MxDrawImageMark image = (MxDrawImageMark)axMxDrawX1.GetEntity("image");
if (image == null)
return;
if (image.ObjectName != "McDbMxImageMark")
return;
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "jpg文件(*.jpg)|*.jpg";
if (ofd.ShowDialog() != DialogResult.OK)
return;
image.ImageFile = ofd.FileName;
}
效果展示:
替换前:
替换后:
主要用到函数说明:
_DMxDrawX::ZoomAll
把当前图形中的所有实体都放到视区中。
_DMxDrawX::NewPoint
新创建IMxDrawPoint对象。
IMxDrawEntity::Rotate
旋转一个对象。详细说明如下:
| 参数 | 说明 |
|---|---|
[in] IMxDrawPoint* basePoint | 旋转基点 |
[in] DOUBLE dRotationAngle | 旋转角度 |
c#中实现代码说明:
private void RotateImage()
{
MxDrawImageMark image = (MxDrawImageMark)axMxDrawX1.GetEntity("image");
if (image == null)
return;
if (image.ObjectName != "McDbMxImageMark")
return;
//旋转基点
MxDrawPoint point = new MxDrawPoint();
point.x = 10;
point.y = 10;
//旋转一个对象,参数一为旋转基点,参数二为旋转角度
image.Rotate(point, 45 * 3.14159265 / 180.0);
axMxDrawX1.ZoomAll();
}效果展示:

主要用到函数说明:
_DMxDrawX::SaveDwgFile
保存当前图。详细说明如下:
| 参数 | 说明 |
|---|---|
|
BSTR pFileName |
保存的DWG文件绝对路径,如果扩展名为DXF文件,则保存为DXF文件. 扩展名为DWF文件,则保存为DWF文件, 扩展名为PDF文件,则保存为PDF文件,默认宽高210,297 扩展名为JPG文件,则保存为JPG文件,默认宽高1000,1000 扩展名为BMP文件,则保存为BMP文件,默认宽高1000,1000 |
c#中实现代码说明:
private void SaveJpg()
{
//参数一为名称;参数二为宽度;参数三为高度;参数四为颜色
axMxDrawX1.SaveJpgFile("D:\\tmp.jpg", 300, 300, 0);
MessageBox.Show("略缩图已经保存到D:\\tmp2.jpg");
}
private void savedxf()
{
//参数一为名称;参数二为宽度;参数三为高度;参数四为颜色
axMxDrawX1.SaveDwgFile("D:\\tmp.dxf");
MessageBox.Show("dxf文件已经保存到D:\\tmp.dxf");
}
private void savepdf()
{
//参数一为名称;参数二为宽度;参数三为高度;参数四为颜色
axMxDrawX1.SaveDwgFile("D:\\tmp.pdf");
MessageBox.Show("pdf文件已经保存到D:\\tmp.pdf");
}
private void savedwf()
{
//参数一为名称;参数二为宽度;参数三为高度;参数四为颜色
axMxDrawX1.SaveDwgFile("D:\\tmp.dwf");
MessageBox.Show("dwf文件已经保存到D:\\tmp.dwf");
}主要用到函数说明:
_DMxDrawX::Watermark
设置控件水印图片显示,字符串用逗号隔开,分为: “文件名,透明度,x方向距离,y方向距离,是否居中”, 是否居中0代表在上角定位,1表示自动居中.默认为居中,透明度为50。
_DMxDrawX::ViewColor
控件视区的背景颜色。
c#中实现代码说明:
//设置水印
//首先定义iShowWatermark为false
bool iShowWatermark = false;
private void ShowWatermark()
{
//若是有水印,点击按钮水印不显示,反之,则反
iShowWatermark = !iShowWatermark;
if (iShowWatermark)
{
//设置控件水印图片显示,字符串用逗号隔开,分为: “文件名,透明度,x方向距离,
// y方向距离,是否居中”, 是否居中0代表在上角定位,1表示自动居中.默认为居中,透明度为50.
// GetOcxAppPath为控件程序在磁盘的文件路径
axMxDrawX1.Watermark = axMxDrawX1.GetOcxAppPath() + "\\Watermark.png" + ",20,5,5,1";
// 背景色改成白色(用户可以根据需要改变背景色)
axMxDrawX1.ViewColor = Color.FromArgb(0, 255, 255, 255);
}
else
{
axMxDrawX1.Watermark = "";
// 背景色改成白色(用户可以根据需要改变背景色)
axMxDrawX1.ViewColor = Color.FromArgb(0, 255, 255, 255);
}
}效果展示:
用户可以通过点击设置水印按钮设置水印到CAD控件视区中(用户可以选取所需水印图片,此教程示例选取本公司水印)。如下图所示:

主要用到函数说明:
_DMxDrawX::DrawImageMark
绘图制一个图象标记对象。详细说明如下:
| 参数 | 说明 |
|---|---|
BSTR pszName | 图层名 |
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 | 图片数据,是否随图保存 |
MxDraw::TwinkeEnt
闪烁实体。详细说明如下:
| 参数 | 说明 |
|---|---|
McDbObjectId id | 被闪烁的实体对象id |
long lCount = -1 | 闪烁次数,默认为-1表示不限闪烁次数 |
c#中实现代码说明:
private void DrawGif()
{
MxDrawPoint point = (MxDrawPoint)axMxDrawX1.GetPoint(false, 0, 0, "点取图片的插入中点...");
if (point == null)
{
return;
}
//控件程序在磁盘的文件路径
var sImageFile1 = axMxDrawX1.GetOcxAppPath() + "\\1.png";
var sImageFile2 = axMxDrawX1.GetOcxAppPath() + "\\2.png";
var sImageFile3 = axMxDrawX1.GetOcxAppPath() + "\\3.png";
// 绘图制一个图象标记对象
//参数一为绘制位置,是图片的中心点X ;参数二为绘制位置,是图片的中心点Y;参数三为缩放比例;参数四为旋转角度;
//参数五为图片显示文件名;参数六为闪烁文件设置;参数七为图片数据是否随图保存
var lId = axMxDrawX1.DrawImageMark(point.x, point.y, -20, 0, sImageFile1,
sImageFile1 + "," + sImageFile2 + "," + sImageFile3, true);
//闪烁实体
//参数一为被闪烁的实体对象id;参数二为闪烁次数,默认为-1表示不限闪烁次数,成功返回true
axMxDrawX1.TwinkeEnt(lId);
}效果展示:

在设计绘图时,绘制光栅图形,可以设置其的缩放比例、旋转角度等属性。
主要用到函数说明:
_DMxDrawX::DrawImage
绘制光栅图形。详细说明如下:
| 参数 | 说明 |
|---|---|
DOUBLE dPosX | 插入点的X坐标 |
DOUBLE dPosY | 插入点的Y坐标 |
DOUBLE dScale | 光栅图形的缩放比例 |
DOUBLE dAng | 旋转角度 |
BSTR pszFilePath | 光栅图的文字路径,支持http://开头的网络路径 |
c#中实现代码说明:
private void DrawImage()
{
MxDrawPoint point = (MxDrawPoint)axMxDrawX1.GetPoint(false, 0, 0, "点取图片的插入中点...");
if (point == null)
{
return;
}
// 控件程序在磁盘的文件路径
var sImageFile = axMxDrawX1.GetOcxAppPath() + "\\mxcad.jpg";
// 绘图制一个图象标记对象
//参数一插入点的X坐标;参数二插入点的Y坐标;参数三为光栅图形的缩放比例;参数四为旋转角度;
//参数五为光栅图的文字路径,支持http://开头的网络路径;
axMxDrawX1.DrawImage(point.x, point.y, 0.0, 0.0, sImageFile);
axMxDrawX1.ZoomAll();
}效果展示:

主要用到函数说明:
_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,取黑色为背景色 |
c#中实现代码说明:
private void UserSaveJpg()
{
MxDrawUtility mxUtility = new MxDrawUtility();
//点取范围的第一点
MxDrawPoint point = (MxDrawPoint)(mxUtility.GetPoint(null, "点取范围的第一点"));
if (point == null)
{
return;
}
//与用户交互得一个矩形框 参数一矩形框一个对角点;参数二命令行提示
MxDrawPoint point1 = (MxDrawPoint)(mxUtility.GetPoint(null, "点取范围的第一点"));
if (point1 == null)
{
return;
}
axMxDrawX1.DrawToJpg("D:\\mxcad.jpg", point.x, point.y, point1.x, point1.y, 200, 200, 0);
MessageBox.Show("图片已经保存");
}c#中实现代码说明:
Int64 lId = axMxDrawX1.DrawImageMark(0, 0, -100, 0, "C:\\Users\\admin\\Desktop\\1234.jpg", "", true);
// 给一个很大的数据,可以代表把它放到最上面去。
axMxDrawX1.SetEntityDrawOrder(lId, 999999);
MxDrawImageMark imageMark = (MxDrawImageMark)axMxDrawX1.ObjectIdToObject(lId);
MxDrawPoint textOffset = new MxDrawPoint();
textOffset.x = 0.0;
textOffset.y = -70;
MxDrawResbuf param = new MxDrawResbuf();
param.AddPoint(textOffset);
imageMark.SetProp("textOffsetPosition", param);
imageMark.Text = "合格";效果展示:

c#中实现代码说明:
Int64 lId = axMxDrawX1.DrawImageMark(0, 0, -100, 15 * 3.14159265 / 180.0, "C:\\Users\\admin\\Desktop\\1234.jpg", "", true);
MxDrawImageMark imageMark = (MxDrawImageMark)axMxDrawX1.ObjectIdToObject(lId);
// 设置图片的透明度
MxDrawResbuf param = new MxDrawResbuf();
param.AddLong(50);
imageMark.SetProp("setTransparent", param);
axMxDrawX1.ZoomAll();
axMxDrawX1.UpdateDisplay();效果展示:
