乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 112|回复: 7

Wblock问题

[复制链接]

8

主题

22

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
54
发表于 2014-8-8 10:52:00 | 显示全部楼层 |阅读模式
用选择集选择了一些对象,并获得了id集,使用database.wblock(idcollection,basepiont)方法创建一个database,如何让选择对象在新的database里的插入点是坐标原点,假定已经知道了选择对象的范围的minpoint。
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2014-8-8 11:46:00 | 显示全部楼层
第二个参数应该就是吧
回复

使用道具 举报

8

主题

22

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
54
发表于 2014-8-8 12:08:00 | 显示全部楼层
试过了,改变参数没反应!
回复

使用道具 举报

8

主题

34

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2014-10-3 02:23:00 | 显示全部楼层
我也有个问题,database.wblock 能否将图形添加到已存在的图形中?
回复

使用道具 举报

8

主题

34

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2014-10-4 00:54:00 | 显示全部楼层
basepiont 我设置为 new point3d(100,100,0)与设置为db.Ucsorg效果一样。
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2014-10-4 07:04:00 | 显示全部楼层
可以用事件处理吧 写块在 db有对应的事件
回复

使用道具 举报

8

主题

34

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2014-10-4 23:50:00 | 显示全部楼层
能稍微具体点吗?
回复

使用道具 举报

11

主题

92

帖子

10

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2021-4-28 19:41:00 | 显示全部楼层
  1. [CommandMethod("MyWBlock", CommandFlags.Modal)]
  2.         public static void ExecuteViewSetting()
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Database db = doc.Database;
  6.             Editor ed = doc.Editor;
  7.             PromptSelectionResult prRes = ed.GetSelection();
  8.             if (prRes.Status != PromptStatus.OK) return;
  9.             ObjectIdCollection objIds = new ObjectIdCollection();
  10.             ObjectId[] objIdArray = prRes.Value.GetObjectIds();
  11.             double dMinX = 0, dMinY = 0, dMaxX = 0, dMaxY = 0;
  12.             /// Copy objectIds to objectIdCollection
  13.             foreach (ObjectId id in objIdArray)
  14.             {
  15.                 using (Transaction txn = id.Database.TransactionManager.StartTransaction())
  16.                 {
  17.                     Entity acEnt = txn.GetObject(id, OpenMode.ForRead) as Entity;
  18.                     if (null != acEnt)
  19.                     {
  20.                         try
  21.                         {
  22.                             if ((dMinX == 0) && (dMinY == 0) && (dMaxX == 0) && (dMaxY == 0))
  23.                             {
  24.                                 dMinX = acEnt.GeometricExtents.MinPoint.X;
  25.                                 dMinY = acEnt.GeometricExtents.MinPoint.Y;
  26.                                 dMaxX = acEnt.GeometricExtents.MaxPoint.X;
  27.                                 dMaxY = acEnt.GeometricExtents.MaxPoint.Y;
  28.                             }
  29.                             else
  30.                             {
  31.                                 if (dMinX > acEnt.GeometricExtents.MinPoint.X) dMinX = acEnt.GeometricExtents.MinPoint.X;
  32.                                 if (dMinY > acEnt.GeometricExtents.MinPoint.Y) dMinY = acEnt.GeometricExtents.MinPoint.Y;
  33.                                 if (dMaxX < acEnt.GeometricExtents.MaxPoint.X) dMaxX = acEnt.GeometricExtents.MaxPoint.X;
  34.                                 if (dMaxY < acEnt.GeometricExtents.MaxPoint.Y) dMaxY = acEnt.GeometricExtents.MaxPoint.Y;
  35.                             }
  36.                         }
  37.                         catch { }
  38.                     }
  39.                     txn.Commit();
  40.                 }
  41.                 objIds.Add(id);
  42.             }
  43.             using (Database acDatabase = new Database(true, false))
  44.             {
  45.                 db.Wblock(acDatabase, objIds, Point3d.Origin, DuplicateRecordCloning.Ignore);
  46.                 ///translate to (0,0,0)
  47.                 using (Transaction txn = acDatabase.TransactionManager.StartTransaction())
  48.                 {
  49.                     Matrix3d mat = Matrix3d.Displacement(new Point3d((dMinX + dMaxX) * 0.5, (dMinY + dMaxY) * 0.5, 0).GetVectorTo(Point3d.Origin));
  50.                     BlockTable acBlkTbl = (BlockTable)txn.GetObject(acDatabase.BlockTableId, OpenMode.ForRead);
  51.                     BlockTableRecord acBlkTblRcd = (BlockTableRecord)txn.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  52.                     foreach (ObjectId objId in acBlkTblRcd)
  53.                     {
  54.                         Entity acEnt = txn.GetObject(objId, OpenMode.ForWrite) as Entity;
  55.                         if (null != acEnt)
  56.                         {
  57.                             acEnt.TransformBy(mat);
  58.                         }
  59.                     }
  60.                     ed.ZoomExtens();
  61.                     txn.Commit();
  62.                 }
  63.                 ///up to here
  64.                 string FileName = "C:\\temp\\wblock.dwg";
  65.                 acDatabase.SaveAs(FileName, DwgVersion.Current);
  66.             }
  67.         }
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 00:56 , Processed in 0.149422 second(s), 68 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表