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