1、在制图过程中,我们往往需要得到dwg图纸上图片的路径,下面以MxCAD控件为例,讲解如何得到dwg图纸上的图片路径。

2、实现思路:首先创建一个过滤链表,将过滤对象添加到链表中,然后利用Select2选择集选择出复合条件的实体对象,再利用ObjectIdToObject由实体id返回实体对象,最后由SourceFileName属性得到图片的文件路径。

3、主要用到函数说明:

(1)IMxDrawSelectionSet::Select2

构造选择集。详细说明如下:

参数

说明

[in] MCAD_McSelect Mode

构造选择集方式

[in] VARIANT point1

构造择择集时需要使用到的点对象

[in] VARIANT point2

构造择择集时需要使用到的点对象

[in,optional] VARIANT filterType

构造选择集的过滤数据的类型

[in,optional] VARIANT filterData

构造选择集的过滤数据

可以取如下值

mcSelectionSetWindow = 0, mcSelectionSetCrossing = 1, mcSelectionSetFence = 2, mcSelectionSetPrevious = 3, mcSelectionSetLast = 4, mcSelectionSetAll = 5, 选择图面上的所有实体 mcSelectionSetWindowPolygon = 6, mcSelectionSetCrossingPolygon = 7, mcSelectionSetUserSelect = 8 mcSelectionImpliedSelectSelect = 9,_I 返回当前图上已经选择的实体

(2)IMxDrawRasterImageDef::SourceFileName

得到光栅文件名称。

(3)IMxDrawDatabase::ObjectIdToObject

实体id返回实体对象,具体详细如下:

参数

说明

[in] LONGLONG lId

实体id

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;


var imagedef = mxOcx.ObjectIdToObject(ent.ImageDefId);
alert(imagedef.SourceFileName);
}