梦想CAD控件COM接口光栅图处理

在CAD操作过程中,我们在设计绘图时,光栅图像也就是我们常说的图片,应用非常广泛,在CAD中可以直接插入光栅图像,并且可以对光栅图像进行裁剪、透明度调整等一些操作,在网页可以快速实现我们所需功能。


一、设置背景图片


把图片作为背景图片可见但是不能编辑操作。


主要用到函数说明:


_DMxDrawX::DrawImageToBackground


绘光栅图到背景。详细说明如下:

扫描二维码关注公众号,回复: 6245825 查看本文章


参数 说明

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);

猜你喜欢

转载自www.cnblogs.com/yzy0224/p/10867955.html
今日推荐