明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 739|回复: 1

CAD控件COM接口修改图块插入点到中心点

[复制链接]
发表于 2019-5-24 10:28:58 | 显示全部楼层 |阅读模式
主要用到函数说明:

IMxDrawEntity::GetBoundingBox

返回实体的最小矩形框外包。详细说明如下:
参数 说明
[out] IMxDrawPoint** minPoint 外包框的左下角点
[out] IMxDrawPoint** maxPoint 外包框的右上角
c#中实现代码说明:
  1. //返回控件的数据库对象
  2. MxDrawDatabase databae = (MxDrawDatabase)axMxDrawX1.GetDatabase();
  3. //返回数据库中的块表对象
  4. MxDrawBlockTable blkTab = databae.GetBlockTable();
  5. //创建一个遍历块表中所有记录的遍历器
  6. MxDrawBlockTableIterator mBlockTableiter = blkTab.NewIterator();
  7. //移动当前遍历器位置
  8. for (; !mBlockTableiter.Done(); mBlockTableiter.Step())

  9. {
  10.     //返回遍历器当前位置的记录
  11.     MxDrawBlockTableRecord blkRec = mBlockTableiter.GetRecord();
  12.     //创建一个遍历块表中所有记录的遍历器
  13.     MxDrawBlockTableRecordIterator mBlockTableReciter = blkRec.NewIterator();

  14.     MxDrawPoint mMaxPt = new MxDrawPoint();
  15.     MxDrawPoint mMinPt = new MxDrawPoint();

  16.     MxDrawPoint mMaxPtTemp = new MxDrawPoint();
  17.     MxDrawPoint mMinPtTemp = new MxDrawPoint();
  18.     //移动当前遍历器位置
  19.     for (; !mBlockTableReciter.Done(); mBlockTableReciter.Step(true, false))
  20.     {
  21.         //与用户交互在图面上选择一个实体
  22.         MxDrawEntity ent = mBlockTableReciter.GetEntity();
  23.         //返回实体的最小矩形框外包
  24.         ent.GetBoundingBox(out mMinPtTemp, out mMaxPtTemp);

  25.         if ((mMinPtTemp == null) || (mMaxPtTemp == null))
  26.             break;

  27.         mMaxPt.x = Math.Max(mMaxPt.x, mMaxPtTemp.x);
  28.         mMaxPt.y = Math.Max(mMaxPt.y, mMaxPtTemp.y);

  29.         mMinPt.x = Math.Min(mMinPt.x, mMinPtTemp.x);
  30.         mMinPt.y = Math.Min(mMinPt.y, mMinPtTemp.y);

  31.     }

  32.     if ((mMinPtTemp == null) || (mMaxPtTemp == null))
  33.         continue;

  34.     MxDrawPoint mNewBasePt = new MxDrawPoint();

  35.     mNewBasePt.x = mMinPt.x + (mMaxPt.x - mMinPt.x) / 2;
  36.     mNewBasePt.y = mMinPt.y + (mMaxPt.y - mMinPt.y) / 2;
  37.     //块表记录的插入原点属性
  38.     blkRec.Origin = mNewBasePt;
  39.     //重新生成图,重新生成所有显示数据
  40.     axMxDrawX1.Regen();
  41. }
复制代码


发表于 2019-5-25 09:35:43 | 显示全部楼层
什么语言啊,看不懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-18 11:24 , Processed in 0.155964 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表