www.mxdraw.com
内容索引主面
前一个向上下一个
IMxDrawBlockReference 接口

控件中的块引用类型 扩展数据 createAttribute,调用Set函数,来用为新插入的块引用,创建块属性。

IDL
[ 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();
     }
Copyright (c) 2010. All rights reserved.
你认为该帮助怎么样? 发送反馈信息!