LOGO
帮助文档
旧版文档
简介设置背景图片插入图片替换图片旋转图片保存为各种格式设置水印制作动画绘制光栅图形指定区域绘制一个jpg文件textOffsetPosition置为最顶层Transparent设置图片透明度修改属性块文字查找块属性文字制作简单动画
简介

在CAD操作过程中,我们在设计绘图时,光栅图像也就是我们常说的图片,应用非常广泛,在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 );
}


效果展示:


在兼容模式下打开网页(谷歌支持4.5前的版本,火狐最新版本不支持),运行控件。效果如下:


img1.png


通过点击插入背景图片按钮,触发BackGroundImage()事件,将在js中设置好的图片插入到CAD控件视区中,背景图片可见不可操作。如下图所示:


img2.png

插入图片

在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, "", false);
}


效果展示:


用户可以通过点击插入图片按钮,将在js代码中设置的图片插入到CAD控件视区的任何位置。如下图所示:


img3.png

替换图片

主要用到函数说明:


IMxDrawImageMark::ImageFile


图片文件路径。


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


效果展示:


用户可以通过点击替换图片按钮,将在js代码中设置的图片替换为之前的图片。如下图所示:


img4.png


用户在替换时,应选取图片进行替换,如果不是选取的图片,则会弹出选择对象不是图像提示。如下图所示:


img5.png

旋转图片

主要用到函数说明:


_DMxDrawX::ZoomAll


把当前图形中的所有实体都放到视区中。


_DMxDrawX::NewPoint


新创建IMxDrawPoint对象。


IMxDrawEntity::Rotate


旋转一个对象。详细说明如下:


参数 说明

[in] IMxDrawPoint* basePoint

旋转基点

[in] DOUBLE dRotationAngle

旋转角度


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

}


效果展示:


用户可以通过点击旋转图片按钮,选取需要旋转的图片对象,将触发RotateImage()事件,选取的图片对象将旋转在js中设置好的角度。如下图所示:


img6.png

保存为各种格式

主要用到函数说明:


_DMxDrawX::SaveDwgFile


保存当前图。详细说明如下:


参数说明

BSTR pFileName

保存的DWG文件绝对路径,如果扩展名为DXF文件,则保存为DXF文件. 扩展名为DWF文件,则保存为DWF文件, 扩展名为PDF文件,则保存为PDF文件,默认宽高210,297 扩展名为JPG文件,则保存为JPG文件,默认宽高1000,1000 扩展名为BMP文件,则保存为BMP文件,默认宽高1000,1000


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


控件视区的背景颜色。


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


效果展示:


用户可以通过点击设置水印按钮设置水印到CAD控件视区中(用户可以选取所需水印图片,此教程示例选取本公司水印)。如下图所示:


img7.png

制作动画

主要用到函数说明:


_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表示不限闪烁次数


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


效果展示:


用户可以通过点击制作动画按钮,触发DrawGif()事件,将在js代码设置的图片制作成动画显示到控件视区中。如下图所示:


img8.png

绘制光栅图形

在设计绘图时,绘制光栅图形,可以设置其的缩放比例、旋转角度等属性。


主要用到函数说明:


_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控件视区的任何位置,也可以调整其缩放比例。如下图所示:


img9.png

指定区域绘制一个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,取黑色为背景色


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文件按钮,选取用户需要的范围保存图片,成功后会弹出成功保存提示框。如下图所示:


img10.png

textOffsetPosition置为最顶层

js中实现代码说明:


function TextOffsetPosition(){


    var sImageFile1 = mxOcx.GetOcxAppPath() + "\\mxcad.jpg";
    var lId = mxOcx.DrawImageMark(0, 0, 1, 0, sImageFile1, "", true);
    //mxOcx.TwinkeEnt(lId);
    // 给一个很大的数据,可以代表把它放到最上面去。
    mxOcx.SetEntityDrawOrder(lId,999999);
    var imageMark = mxOcx.ObjectIdToObject(lId);

    var textOffset = mxOcx.NewPoint();
    textOffset.x = 0.0;
    textOffset.y = -70;

    var param = mxOcx.NewResbuf();


    param.AddPoint(textOffset);
    imageMark.SetProp("textOffsetPosition",param);

    imageMark.Text = "合格";
}
Transparent设置图片透明度

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

}
修改属性块文字

js中实现代码说明:


function ModifyBlockAttrib() {
    var ent = mxOcx.GetEntity("选择图面的属性块:");
    if(ent == null)
     {
         return;
     }
     if (ent.ObjectName != "McDbBlockReference") {
        alert("选择的对象不是块引用");
     }

     var blkref = ent;

     if(blkref.AttributeCount == 0)
        alert("图块没有属性");

     //遍历所有属性,修改属性值
     var i = 0;
     for (; i < blkref.AttributeCount; i++) {
        var attrib = blkref.AttributeItem(i);
        attrib.TextString += "<被修改>"
    }
     // 通知块引,它的属性被修改,用于更新显示.
     blkref.AssertWriteEnabled();
}
查找块属性文字

js中实现代码说明:


function FindBlockAttrib()
{
    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 ss = mxOcx.NewSelectionSet();
    var spFilte = mxOcx.NewResbuf();

    // 把块对象,当着过滤条件.
    spFilte.AddStringEx("INSERT", 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;
        if (ent.ObjectName == "McDbBlockReference") {
            var blkref = ent;
            var j = 0;
            for (; j < blkref.AttributeCount; j++) {
                var attrib = blkref.AttributeItem(j);
                if (attrib.TextString == txt) {
                    // 找到块属性。
                    mxOcx.PutEntityInView(ent.ObjectID, 300);

                    var dLen = mxOcx.ViewLongToDocCoord(80);

                    // 绘制一个标记圆.
                    mxOcx.DrawVectorCircle(ent.Position.x,
                ent.Position.y,
                 dLen, 65280);
                    return;
                }
            }
        }
        ent = null;
    }


    alert("没有找到块属性文字");



    // 在这里必须显示释放控件的COM对象指针.
    ss = null;
    spFilte = null;
    CollectGarbage();
}
制作简单动画

主要用到函数说明:


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


效果展示:


JFVZQ}89C_7}Z37X[_0H@{L.png