如何选择实体做成块
C#开发|成都梦想凯德科技|2018-07-18 15:30
-
回答:
c#中使用如下:
MxDrawSelectionSet ss = new MxDrawSelectionSet(); ss.Select(MCAD_McSelect.mcSelectionSetUserSelect, null, null, null); List<Int64> aryId = new List<Int64>(); for (Int32 i = 0; i < ss.Count; i++) { MxDrawEntity ent = ss.Item(i); if (ent != null) { aryId.Add(ent.ObjectID); ent.Close(); } } MxDrawDatabase curDatabase = (MxDrawDatabase)(mxdraw.GetDatabase()); double dMinX = 0, dMinY = 0, dMaxX = 0, dMaxY = 0; bool isFirstEnt = true; for (int l = 0; l < aryId.Count; l++) { MxDrawMcDbObject pObj = curDatabase.ObjectIdToObject(aryId[l]); if (pObj == null) continue; MxDrawPoint pt1Ob, pt2Ob; MxDrawEntity pEnt = (MxDrawEntity)pObj; if (pEnt == null) continue; pEnt.GetBoundingBox(out pt1Ob, out pt2Ob); MxDrawPoint minPt = (MxDrawPoint)pt1Ob; MxDrawPoint maxPt = (MxDrawPoint)pt2Ob; 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 0; } MxDrawPoint pos = new MxDrawPoint(); pos.x = dMinX + (dMaxX - dMinX) / 2.0; pos.y = dMinY + (dMaxY - dMinY) / 2.0; // 检查新创建的块名,在当前数据库是否已经存在. MxDrawBlockTable blkTable = curDatabase.GetBlockTable(); MxDrawBlockTableRecord curSpace = curDatabase.CurrentSpace(); String sNewBlakName; MxDrawBlockTableRecord blkNewRec = blkTable.Add(""); sNewBlakName = blkNewRec.Name; blkNewRec.Origin = pos; for (int l = 0; l < aryId.Count; l++) { blkNewRec.AddCloneEntity(aryId[l]); // 把以前实体删除 。 MxDrawMcDbObject pObj = curDatabase.ObjectIdToObject(aryId[l]); if (pObj == null) continue; pObj.Erase(); } if (blkNewRec != null) { MxDrawBlockReference blkRef = curSpace.InsertBlock(pos.x,pos.y, sNewBlakName, 1.0, 0.0); MxDrawAttribute attrib = blkRef.AppendAttribute(); attrib.Position = pos; attrib.AlignmentPoint = pos; attrib.Oblique = 0.0; attrib.Rotation = 0.0; attrib.Height = 2.0; attrib.TrueColor.SetRGB(255,0,0); // attrib.TextString = "这是一个属性文字的测试"; attrib.Tag = "TestTag"; attrib.IsInvisible = false; blkRef.Position = blkRef.Position; return blkRef.ObjectID; } return 0;