CAD定义图块(网页版)
js将选中的实体做成块实现代码:
//实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。var ss = mxOcx.NewSelectionSet();//构造一个过滤链表var spFilte = mxOcx.NewResbuf();//用户选择对象 得到用户选取的实体ss.Select2(8, null, null, null, spFilte);var aryId = new Array();for (var i = 0; i < ss.Count; i++){ var ent = ss.Item(i); if (ent != null) { aryId.push(ent.ObjectID); ent.Close(); }}//返回控件的数据库对象var curDatabase =mxOcx.GetDatabase();var dMinX = 0, dMinY = 0, dMaxX = 0, dMaxY = 0;var isFirstEnt = true;for (var l = 0; l < aryId.length; l++){ var pObj = curDatabase.ObjectIdToObject(aryId[l]); if (pObj == null) continue; var pEnt = pObj; if (pEnt == null) continue; var points = pEnt.GetBoundingBox2(); var minPt = points.Item(0); var maxPt = points.Item(1); if (minPt != null && maxPt != null) { if(isFirstEnt) { dMinX = minPt.x; dMinY = minPt.y; dMaxX = maxPt.x; dMaxY = maxPt.y; isFirstEnt = false; } else { if (dMinX > minPt.x) dMinX = minPt.x; if (dMinY > minPt.y) dMinY = minPt.y; if (dMaxX < maxPt.x) dMaxX = maxPt.x; if (dMaxY < maxPt.y) dMaxY = maxPt.y; } }}if(isFirstEnt){ // 没有实体 return;}var pos = mxOcx.NewPoint();pos.x = dMinX + (dMaxX - dMinX) / 2.0;pos.y = dMinY + (dMaxY - dMinY) / 2.0;// 检查新创建的块名,在当前数据库是否已经存在.var blkTable = curDatabase.GetBlockTable();var curSpace = curDatabase.CurrentSpace();var sNewBlakName;var blkNewRec = blkTable.Add("");sNewBlakName = blkNewRec.Name;blkNewRec.Origin = pos;for (var l = 0; l < aryId.length; l++){ blkNewRec.AddCloneEntity(aryId[l]); // 把以前实体删除 。 var pObj = curDatabase.ObjectIdToObject(aryId[l]); if (pObj == null) continue; pObj.Erase();}if (blkNewRec != null){ var blkRef = curSpace.InsertBlock(pos.x,pos.y, sNewBlakName, 1.0, 0.0); var attrib = blkRef.AppendAttribute(); attrib.Position = pos; attrib.AlignmentPoint = pos; attrib.Oblique = 0.0; attrib.Rotation = 0.0; attrib.Height = 2.0; attrib.Tag = "TestTag"; attrib.IsInvisible = false; blkRef.Position = blkRef.Position;}return; |
浙公网安备 33010602011771号