找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1702|回复: 7

[分享] 第一个c#练习的程序,遍历块获取块内图元的外框

[复制链接]

已领礼包: 19个

财富等级: 恭喜发财

发表于 2020-2-18 10:00:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 455383153 于 2020-2-18 10:02 编辑
  1.          [CommandMethod("PickDemo")]
  2.          public void PickDemo()
  3.          {
  4.              Database db = HostApplicationServices.WorkingDatabase;
  5.              Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  6.              PromptEntityResult per = ed.GetEntity("选择块");
  7.              if (per.Status == PromptStatus.OK)
  8.              {
  9.                  using (Transaction trans = db.TransactionManager.StartTransaction())
  10.                  {
  11.                      ResultBuffer result = new ResultBuffer();
  12.                      BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
  13.                      BlockReference br = (BlockReference)per.ObjectId.GetObject(OpenMode.ForRead);
  14.                      string blkname = br.Name;
  15.                      ed.WriteMessage("\nBlock Name: (" + blkname + ").");
  16.                      ObjectId blockRecordId = bt[blkname];
  17.                      BlockTableRecord blockRecord = (BlockTableRecord)blockRecordId.GetObject(OpenMode.ForRead);
  18.                      Extents3d tmpExtents3D = new Extents3d();
  19.                      foreach (ObjectId entID in blockRecord)
  20.                      {
  21.                          Entity entity = (Entity)trans.GetObject(entID, OpenMode.ForRead);
  22.                          Extents3d tmp = entity.GeometricExtents;
  23.                          tmpExtents3D.AddExtents(tmp);
  24.                      
  25.                      
  26.                      }
  27.                      Point3d maxpt = tmpExtents3D.MaxPoint;
  28.                      Point3d minpt = tmpExtents3D.MinPoint;
  29.                      result.Add(new TypedValue((int)LispDataType.Point3d, minpt));
  30.                      result.Add(new TypedValue((int)LispDataType.Point3d, maxpt));
  31.                      trans.Commit();
  32.                     //return result;
  33.                  }
  34.              }
  35.          }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 5295个

财富等级: 富甲天下

发表于 2020-2-18 10:36:22 | 显示全部楼层
再用LISP写一个就更好了。

点评

lisp版本的 修改块内颜色 c#才看了一天书,不熟,还是lisp写方便,但看了看代码,遍历的方法是一样的。 (defun c:doit( / blkname activedocument obj e i) (setq activedocument (vla-get-activedocument (vla  详情 回复 发表于 2020-2-18 20:38
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

发表于 2020-2-18 10:53:21 | 显示全部楼层
看不懂,有点复杂!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2020-2-18 20:38:31 | 显示全部楼层
本帖最后由 455383153 于 2020-2-18 20:39 编辑
tzfcn 发表于 2020-2-18 10:36
再用LISP写一个就更好了。


lisp版本的  修改块内颜色   c#才看了一天书,不熟,lisp熟悉一点写着方便,但对比了代码,遍历的方法是一样的。
(defun c:doit( / blkname activedocument obj e i)
(setq activedocument (vla-get-activedocument (vlax-get-Acad-Object)))
(vla-StartUndoMark activedocument)
(setq blkname (Vlax-Get (Vlax-Ename->Vla-Object (car (entsel))) 'EffectiveName ))
(setq obj(vla-item (vla-get-blocks activedocument) blkname))
(setq i 0)
(vlax-for e obj
  (if (vlax-write-enabled-p e)
        (vl-catch-all-apply
        (function(lambda()
   (vla-put-color e 1)
  )
           )
       )
     )
   (setq i (+ 1 i))
   (acet-ui-status (strcat "共修改了块内" (rtos i 2 0) "个对象")  "修改状态")
    )
  (vla-regen activedocument acallviewports)
  (vla-EndUndoMark activedocument)
  (vlax-release-object activedocument)
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2020-2-25 11:30:09 | 显示全部楼层
看不懂,有点复杂!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 82个

财富等级: 招财进宝

发表于 2020-4-1 09:44:41 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2020-4-1 15:42:55 | 显示全部楼层
BlockRecord 的包围盒和 BlockReference的 包围盒不是一回事
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2021-11-3 09:29:56 | 显示全部楼层
进入了撞到
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 20:20 , Processed in 0.271884 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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