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);
if (pObj == null)
continue;
var pEnt = pObj;
if (pEnt == null)
continue;
varpoints = 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);
// 把以前实体删除 。
var pObj = curDatabase.ObjectIdToObject(aryId);
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;
页:
[1]