土木在线论坛 \ 建筑设计 \ CAD下载及教程 \ 梦想CAD控件COM接口光栅图处理

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

发布于:2019-05-15 11:22:15 来自:建筑设计/CAD下载及教程 [复制转发]



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






全部回复(0 )

只看楼主 我来说两句抢沙发

CAD下载及教程

返回版块

52.08 万条内容 · 682 人订阅

猜你喜欢

阅读下一篇

梦想CAD控件关于曲线问题

IMxDrawCurve 接口 控件中的曲线接口,实现了曲线的相关操作,如求曲线的长度,最近点,面积,曲线上任一点在曲线上的长度 切向方向,曲线交点,坐标变换,打断,偏移,离散等功能。 一、返回曲线组成的闭合区域面积 IMxDrawCurve::GetArea 返回曲线组成的闭合区域面积,具体详细如下:

回帖成功

经验值 +10