在CAD控件网页版中如何得到图上所有标注的标注文本?
MxDraw网页开发|冯美娟|2019-04-19 14:27
-
回答:
主要用到函数说明:
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 返回当前图上已经选择的实体
js中使用如下:
function GetAllComment() { var ss = mxOcx.NewSelectionSet(); var spFilte = mxOcx.NewResbuf(); // 把批注对象,当着过滤条件. spFilte.AddStringEx("MxComment,MxDrawXCustomEntity", 5020); // 得到图上,所有批注对象. ss.Select2(5,null,null,null,spFilte); // 遍历每个文字. var bFind = false; for (var i = 0; i < ss.Count; i++) { var ent = ss.Item(i); if (ent == null) continue; if (ent.ObjectName == "McDbComment") { // 得到批注对象。 mxOcx.Prompt(ent.Text); var mtxt = mxOcx.NewEntity("IMxDrawMText"); // 把多行文字,变成单行文字,去掉里面的控制符。 mtxt.Contents = ent.Text; // 打碎对像. var ret = mtxt.GetProp("ExplodeEx"); // 得到打碎后对像里面的文字。 var s; for(var j = 0; j < ret.Count;j++) { var obj = ret.AtObject(j); if(obj == null) continue; if(s == null){ // s = obj.TextString; } else{ var s = ''; s += obj.TextString; } } mxOcx.Prompt(s); // mxOcx.Prompt(ent.Position.x.toString()); mxOcx.Prompt(ent.Position.y.toString()); mxOcx.Prompt(ent.BasePoint.x.toString()); mxOcx.Prompt(ent.BasePoint.y.toString()); } else if (ent.ObjectName == "MxDrawXCustomEntity") { // 得到批注对象。 var stp = ent.GetPoint("First"); var ept = ent.GetPoint("BasePoint"); var txt = ent.GetString("Text"); mxOcx.Prompt(txt); // mxOcx.Prompt(stp.x.toString()); mxOcx.Prompt(stp.y.toString()); mxOcx.Prompt(ept.x.toString()); mxOcx.Prompt(ept.y.toString()); } } }