www.mxdraw.com
|
控件中的块引用类型 扩展数据 createAttribute,调用Set函数,来用为新插入的块引用,创建块属性。
[ object, uuid(75B12CA2-2BC5-4645-A810-89621FA9EC18), dual, nonextensible, helpstring("IMxDrawBlockReference interface"), pointer_default(unique) ] interface IMxDrawBlockReference : IMxDrawEntity;
MxDrawBlockReference.idl
例如:C#代码:插入一个注释,注册内容是一个块引用和一段文字
private void InsertNote() { // 创建一个新图层 CreateLayer(); // 注释文本内容 String sNoteText = "这是一个注释"; // 注释图块名 String sNote = "NoteBlockName"; // 让用点取一个注释插入点。 MxDrawUtility mxUtility = new MxDrawUtility(); MxDrawPoint point = (MxDrawPoint)(mxUtility.GetPoint(null, "点取插入点 :")); if (point == null) { MessageBox.Show("用户取消.."); return; } // 得到当前应用对象 MxDrawApplication app = new MxDrawApplication(); // 得到当前数据库 MxDrawDatabase curDatabase = app.WorkingDatabase(); // 得到块表对象 MxDrawBlockTable blkTable = curDatabase.GetBlockTable(); // 得到当前空间 MxDrawBlockTableRecord curSpace = curDatabase.CurrentSpace(); // 当前块表中是否已经有名为sNote的块表记录,如有返回 MxDrawBlockTableRecord blkRec = blkTable.GetAt(sNote,true); if(blkRec == null) { // 没有就新插入块表记录 // sBlkFilePath是块文字路径 String sBlkFilePath = axMxDrawX1.GetOcxAppPath() + "\Blk\attribblock.dwg"; // 把dwg文件导入到当前数据库。 axMxDrawX1.InsertBlock(sBlkFilePath, sNote); // 得到新插入的块表记录 blkRec = blkTable.GetAt(sNote,true); } if (blkRec != null) { // 在当前空间中插入一个块引用。 MxDrawBlockReference blkRef = curSpace.InsertBlock(point, sNote, 4.0, 0.0); // 创建属性块的属性。 MxDrawResbuf param = new MxDrawResbuf(); blkRef.SetProp("createAttribute", param); } // 插入注释文本。 point.y = point.y - 20.0; curSpace.AddText(point, sNoteText, 16, 0.0, MCAD_McHorizontalAlignment.mcHorizontalAlignmentCenter, MCAD_McVerticalAlignment.mcVerticalAlignmentTop); }
例如: JS 下面的代码,是遍历块引用的块表记录中的实体,并修改里面的文字内容.
var blkRec = ent.BlockTableRecord; // 创建一个用于遍历器 var iter = blkRec.NewIterator(); for (; !iter.Done(); iter.Step(true, false)) { var tmpEnt = iter.GetEntity(); if (tmpEnt.ObjectName == "McDbText") { // 修改文字内容 var sTxt = tmpEnt.TextString; tmpEnt.TextString = sTxt.replace(sTxt, sTxt + "-1<被修改>"); //修改内容 } ent.AssertWriteEnabled();
例如: 打碎外部引用代码.
// 打碎外部引用代码 MxDrawUtility mxUtility = new MxDrawUtility(); MxDrawPoint getPt; MxDrawEntity ent = mxUtility.GetEntity(out getPt, "选择实体"); if (ent == null) return; if (ent is MxDrawBlockReference) { // 得到外部参照的文件名. MxDrawBlockReference blkRef = (MxDrawBlockReference)ent; MxDrawResbuf ret = blkRef.BlockTableRecord.GetProp("pathName"); if (ret != null && ret.Count > 0) { //MessageBox.Show(ret.AtString(0)); String sRefDwgPath = ret.AtString(0); // 该块是个外部引用 if (sRefDwgPath.Length != 0) { // 把外部引用的文件,当着块插入。 if (axMxDrawX1.InsertBlock(sRefDwgPath, "NewBlkName") != 0) { // 得到新插入的块引用和id; Int64 id = axMxDrawX1.DrawBlockReference(blkRef.Position.x, blkRef.Position.y, "NewBlkName", blkRef.ScaleFactors.sx, blkRef.Rotation); MxDrawBlockReference newBlkRef = (MxDrawBlockReference)axMxDrawX1.ObjectIdToObject(id); if (newBlkRef != null) { // 打碎块引用。 newBlkRef.Explode(); // 删除以前的块引用。 blkRef.Erase(); newBlkRef.Erase(); } } } } }
例如:图块的剪切边界。
MxDrawBlockReference blkRef = (MxDrawBlockReference)ent; MxDrawResbuf ret = blkRef.GetProp("getClipPoints"); if(ret.Count != 0) { ret.PrintData(); for (int i = 0; i < ret.Count; i++) { MxDrawPoint pt = ret.AtPoint(i); if (i == 0) { axMxDrawX1.PathMoveTo(pt.x, pt.y); } else { axMxDrawX1.PathLineTo(pt.x, pt.y); } } axMxDrawX1.DrawPathToPolyline(); }