在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); } |
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 ); } |
二、插入图片
在设计绘图时,需要插入外部图片,可以设置图片的缩放比例、旋转角度、图片显示文件名等属性。
主要用到函数说明:
_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中实现代码说明:
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() + "\\mxca.jpg" ; alert(sImageFile); // 绘图制一个图象标记对象 //参数一为绘制位置,是图片的中心点X ;参数二为绘制位置,是图片的中心点Y;参数三为缩放比例;参数四为旋转角度; //参数五为图片显示文件名;参数六为闪烁文件设置;参数七为图片数据是否随图保存 mxOcx.DrawImageMark(frstPt.x, frstPt.y, -100.0, 0.0, sImageFile, "" , false ); } |
三、替换图片
主要用到函数说明:
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; } |
js中实现代码说明:
function ModifyImage() { // 新建一个COM组件对象 var selEnt = mxOcx.NewComObject( "IMxDrawUiPrEntity" ); selEnt.message = "选择图像对象" ; if (selEnt.go() != 1) return ; var image = selEnt.Entity(); if (image == null ) return ; if (image.ObjectName != "McDbMxImageMark" ) { alert( "选择对象不是图像" ) return ; } // 控件程序在磁盘的文件路径 var sImageFile = mxOcx.GetOcxAppPath() + "\\mxdraw.png" ; //替换目标文件 image.ImageFile = sImageFile; } |
四、旋转图片
主要用到函数说明:
_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(); } |
js中实现代码说明:
function RotateImage() { // 新建一个COM组件对象 var selEnt = mxOcx.NewComObject( "IMxDrawUiPrEntity" ); selEnt.message = "选择图像对象" ; if (selEnt.go() != 1) return ; var image = selEnt.Entity(); if (image == null ) return ; if (image.ObjectName != "McDbMxImageMark" ) { alert( "选择对象不是图像" ) return ; } //新创建IMxDrawPoint对象 var point = mxOcx.NewPoint(); point.x = 10; point.y = 10; //旋转一个对象,参数一为旋转基点,参数二为旋转角度 image.Rotate(point, 45 * 3.14159265 / 180.0); mxOcx.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" ); } |
js中实现代码说明:
function SaveJpg() { //参数一为名称;参数二为宽度;参数三为高度;参数四为颜色 mxOcx.SaveJpgFile( "c:\\tmp2.jpg" ,300,300,0); alert( "略缩图已经保存到C:\\tmp2.jpg" ); } function savedxf() { mxOcx.SaveDwgFile( "c:\\tmp.dxf" ); alert( "dxf文件已经保存到C:\\tmp.dxf" ); } function savepdf() { mxOcx.SaveDwgFile( "c:\\tmp.pdf" ); alert( "pdf文件已经保存到C:\\tmp.pdf" ); } function savedwf() { mxOcx.SaveDwgFile( "c:\\tmp.dwf" ); alert( "dwf文件已经保存到C:\\tmp.dwf" ); } //保存为加密文件 function saveEncryptionDWG() { //保存为加密文件,文件路径与文件名有用户设置 var ret = mxOcx.Call( "MxET_SaveEncryptionDWG" , "c:\\TmpEncryption.dwg" ); if (ret.AtString(0) == "Ok" ) { alert( "加密文件已经成功保存到C:\\TmpEncryption.dwg" ); } else { alert( "保存失败" ); } ret = null ; CollectGarbage(); } //打开加密文件 function openEncryptionDWG() { //打开加密文件,文件路径与文件名有用户设置 var ret =mxOcx.Call( "MxET_OpenEncryptionDWG" , "c:\\TmpEncryption.dwg" ); if (ret.AtString(0) == "Ok" ) { alert( "加密文件已经成功打开" ); } else { alert( "打开失败" ); } ret = null ; CollectGarbage(); } |
六、设置水印
主要用到函数说明:
_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); } } |
js中实现代码说明:
//设置水印 //首先定义iShowWatermark为false var iShowWatermark = false ; function ShowWatermark() { //若是有水印,点击按钮水印不显示,反之,则反 iShowWatermark = !iShowWatermark; if (iShowWatermark) { //设置控件水印图片显示,字符串用逗号隔开,分为: “文件名,透明度,x方向距离, // y方向距离,是否居中”, 是否居中0代表在上角定位,1表示自动居中.默认为居中,透明度为50. // GetOcxAppPath为控件程序在磁盘的文件路径 mxOcx.Watermark = mxOcx.GetOcxAppPath() + "\\Watermark.png" + ",20,5,5,1" ; // 背景色改成白色(用户可以根据需要改变背景色) mxOcx.ViewColor = 16777215; } else { mxOcx.Watermark = "" ; // 背景色改成白色(用户可以根据需要改变背景色) mxOcx.ViewColor = 0; } } |
七、制作动画
主要用到函数说明:
_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); } |
js中实现代码说明:
function DrawGif() { //新建一个COM组件对象 参数为COM组件类名 var getPt = mxOcx.NewComObject( "IMxDrawUiPrPoint" ); getPt.message = "点取图片的插入中点" ; if (getPt.go() != 1) { return ; } var frstPt = getPt.value(); if (frstPt == null ) { return ; } //控件程序在磁盘的文件路径 var sImageFile1 = mxOcx.GetOcxAppPath() + "\\1.png" ; var sImageFile2 = mxOcx.GetOcxAppPath() + "\\2.png" ; var sImageFile3 = mxOcx.GetOcxAppPath() + "\\3.png" ; // 绘图制一个图象标记对象 //参数一为绘制位置,是图片的中心点X ;参数二为绘制位置,是图片的中心点Y;参数三为缩放比例;参数四为旋转角度; //参数五为图片显示文件名;参数六为闪烁文件设置;参数七为图片数据是否随图保存 var lId = mxOcx.DrawImageMark(frstPt.x, frstPt.y, -20, 0, sImageFile1, sImageFile1 + "," + sImageFile2 + "," + sImageFile3, true ); //闪烁实体 //参数一为被闪烁的实体对象id;参数二为闪烁次数,默认为-1表示不限闪烁次数,成功返回true mxOcx.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(); } |
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(); } |
九、指定区域绘制一个jpg文件
主要用到函数说明:
_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( "图片已经保存" ); } |
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( "图片已经保存" ); } |
十、制作简单动画
主要用到函数说明:
IMxDrawEntity::Rotate
旋转一个对象。详细说明如下:
参数 | 说明 |
---|---|
[in] IMxDrawPoint* basePoint | 旋转基点 |
[in] DOUBLE dRotationAngle | 旋转角度 |
IMxDrawAnimation::GetAnimationEntity2
得到动画临时对象.如果对象没有被初始成动画状态,返回为 NULL。详细说明如下:
参数 | 说明 |
---|---|
[in] BSTR pszHandle | 动画对象句柄 |
js中实现代码说明:
function InitDraw() { draw = document.getElementById( "MxDrawXCtrl" ); draw.ImplementCommandEventFun = function DoCommandEventFunc(iCmd) { if (iCmd == 1) { // 启动时打开文件 draw.OpenDwgFile(draw.GetOcxAppPath() + "\\Blk\\animation.dwg" ); var animation = draw.NewComObject( "IMxDrawAnimation" ); //把对象初始化成动画状态 animation.InitAnimationEntity2( "211" ); animation.InitAnimationEntity2( "212" ); animation.InitAnimationEntity2( "213" ); // 启动一个控件时钟事件,用于实现动画。 draw.CallLongParam1( "Mx_StartUserTimer" , 30); } }; draw.ImplementCustomEvent = function CustomEvent(sEventName) { if (sEventName == "Mx_UserTimer" ) { var animation = draw.NewComObject( "IMxDrawAnimation" ); //开始一个动画绘制过程 animation.StartDraw(); // 211 212 213是需要旋转实体的句柄. RotateEnt( "211" , animation); RotateEnt( "212" , animation); RotateEnt( "213" , animation); //结束动画绘制过程 animation.EndDraw(); // 注意需要显示释放递代器.,不然会引起错误 animation = null ; CollectGarbage(); } }; } |
function RotateEnt( handls, animation) { //得到动画临时对象.如果对象没有被初始成动画状态,返回为 NULL var ent = animation.GetAnimationEntity2(handls); if (ent != null && (ent.ObjectName == "McDbBlockReference" )) { var blkRef = ent; //旋转一个对象,参数一为旋转基点,参数二为旋转角度 blkRef.Rotate(blkRef.Position, -30 * 3.14159265 / 180.0); //绘制动画对象.该函数只能在StartDraw,EndDraw之前调用 animation.Draw2(handls); } } |
效果展示:
十一、删除所有图片
c#代码实现说明:
MxDrawSelectionSet ss = new MxDrawSelectionSet(); // 创建过滤对象. MxDrawResbuf spFilte = new MxDrawResbuf(); // 把文字对象,当着过滤条件. spFilte.AddStringEx( "IMAGE" , 5020); // 得到图上,所有图片对象. ss.Select2(MCAD_McSelect.mcSelectionSetAll, null , null , null , spFilte); bool bFind = false ; for (int i = 0; i < ss.Count; i++) { MxDrawEntity ent = ss.Item(i); if (ent == null ) continue ; ent.Erase(); } |
js代码实现说明:
var ss = mxOcx.NewSelectionSet(); // 创建过滤对象. var spFilte = mxOcx.NewResbuf(); // 把图片对象,当着过滤条件. spFilte.AddStringEx( "IMAGE" , 5020); // 得到图上,所有图片对象. ss.Select2(5, null , null , null , spFilte); for ( var i = 0; i < ss.Count; i++) { var ent = ss.Item(i); if (ent == null ) continue ; ent.Erase(); } |
十二、设置图片透明度
c#代码实现说明:
Int64 lId = axMxDrawX1.DrawImageMark(0, 0, -100, 15 * 3.14159265 / 180.0, "G:\1.jpg" , "" , true ); MxDrawImageMark imageMark = (MxDrawImageMark)axMxDrawX1.ObjectIdToObject(lId); // 设置图片的透明度 MxDrawResbuf param = new MxDrawResbuf(); param.AddLong(50); imageMark.SetProp( "setTransparent" , param); axMxDrawX1.ZoomAll(); axMxDrawX1.UpdateDisplay(); |
js代码实现说明:
function Transparent() { var sImageFile1 = mxOcx.GetOcxAppPath() + "\\mxcad.jpg" ; var lId = mxOcx.DrawImageMark(0, 0, 1, 0, sImageFile1, "" , true ); // 设置图片的透明度 var imageMark=mxOcx.ObjectIdToObject(lId); var param = mxOcx.NewResbuf(); param.AddLong(50); imageMark.SetProp( "setTransparent" ,param); mxOcx.ZoomAll(); mxOcx.UpdateDisplay(); } |
十三、向记录中增加一个光栅图形
主要用到函数说明:
IMxDrawBlockTableRecord::AddImage2
向记录中增加一个光栅图形,详细说明如下:
参数 | 说明 |
---|---|
[in] DOUBLE dScale | 光栅图的缩放比例 |
[in] LONGLONG imageDefId | 光栅图形定义对象ID |
origin | 光栅图的左下角位置 |
c#代码实现说明:
// 插入一个图片。 String sFileName = "H:\11.png" ; // 得到图片定义字体典. MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase(); // ACAD_IMAGE_DICT 是autocad约定的,图片定义字典名称,必须是ACAD_IMAGE_DICT // McDbDictionary 是字典的类名 // AddObject函数,会向字典中,加入一个记录,如果已经有该记录,它什么不都做,直接返回该记录. MxDrawDictionary imageDict = (MxDrawDictionary)database.GetNamedObjectsDictionary().AddObject( "ACAD_IMAGE_DICT" , "McDbDictionary" ); if (imageDict == null ) return ; // 向图片字典中,增加个图像定义对象., sFileName是对象的Key, McDbRasterImageDef是图片定义对象类名. MxDrawRasterImageDef imageDef = (MxDrawRasterImageDef)imageDict.AddObject(sFileName, "McDbRasterImageDef" ); if (imageDef == null ) return ; imageDef.SourceFileName = sFileName; // 下面是,向当前控件,增加绘制图片。 MxDrawBlockTableRecord curspace = (MxDrawBlockTableRecord)database.CurrentSpace(); curspace.AddImage2(0, 0, 1.0, imageDef.ObjectID); |