乐筑天下

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

[编程交流] 不同位置上的参考块

[复制链接]

0

主题

101

帖子

103

银币

限制会员

铜币
-2
发表于 2022-7-6 23:43:36 | 显示全部楼层
 
你可以把BlockTableRecord想象成一个容器。(“ModelSpace”“PaperSpace”)也是BlockTableRecords。
blocktableRecord中拥有或包含的实体具有层属性
因此,一个插座块(典型的双工符号)BlockTableRecord将包含一个圆(实体)和两条线(实体),这将具有层属性。(通常在图层0上绘制)
您看到的可见实体是BlockReference,它是blocktablerecord内实体的实例,将具有层属性(Insert命令)
 
如果有帮助的话
回复

使用道具 举报

0

主题

101

帖子

103

银币

限制会员

铜币
-2
发表于 2022-7-6 23:48:38 | 显示全部楼层
在BlockTableRecord的不同层上可以有实体,但要冻结“块”,必须冻结BlockReference所在的层
因此,如果使用Autocad UI创建一个块,在不同的图层上有3条不同颜色的线。
然后将其插入一个层,您必须冻结该层。
 
从您的代码和帖子中,我猜您正在将实体添加到ModelSpace BlockTableRecord中。
因此,块引用只是添加到ModelSpace blocktablerecord实体集合中的另一个实体。
(ModelSpace BlockTableRecord具有其他功能、属性等……布局、视口等)
 
如果你想让我张贴代码,可能有助于显示或解释,我很乐意。
我想你更喜欢看你的帖子
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 23:56:28 | 显示全部楼层
 
 
谢谢杰夫!你是对的。
我创建了不同的实体(例如cirlce、point),并将每个实体分配到一个单独的层,以便可以分别冻结和解冻它们。然后,我向BlockTable添加了一个blockreference,它引用了包含实体的blocktablerecord,并将blockreference分配给了一个新层。因此,当我冻结新层时,所有实体都被隐藏。
此代码适用于我:
 
  1.                // Open the Block table for read
  2.                BlockTable acBlkTbl;
  3.                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  4.                                             OpenMode.ForRead) as BlockTable;
  5.                // Create our new block table record...
  6.                BlockTableRecord btr = new BlockTableRecord();
  7.                
  8.                // Open the Block table for read
  9.                BlockTable acBlkTbl;
  10.                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  11.                                             OpenMode.ForRead) as BlockTable;
  12.                // Create our new block table record...
  13.                BlockTableRecord btr = new BlockTableRecord();
  14.                // Create a point at (x, y, z) in Model space
  15.                DBPoint acPoint = new DBPoint(new Point3d(x, y, 0));
  16.                acPoint.SetDatabaseDefaults();
  17.                
  18.                acPoint.Layer = strLayerName[0];
  19.                // Add the new object to the block table record and the transaction
  20.                btr.AppendEntity(acPoint);
  21.                acTrans.AddNewlyCreatedDBObject(acPoint, true);
  22.                // Create a circle with a radius
  23.                Circle r = new Circle();
  24.                r.SetDatabaseDefaults();
  25.                r.Center = new Point3d(x, y, 0);
  26.                r.Radius = fltRadius;               
  27.                
  28.                r.Layer = strLayerName[1];
  29.                // Add the new object to the block table record and the transaction
  30.                btr.AppendEntity(r);
  31.                acTrans.AddNewlyCreatedDBObject(r, true);
  32.                // Open the Block table record Model space for write
  33.                BlockTableRecord acBlkTblRec;
  34.                acBlkTblRec = acTrans.GetObject(acBlkTbl[blockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;
  35.                
  36.                BlockReference br = new BlockReference(Point3d.Origin, btrId);
  37.                br.Layer = strLayerName[0];
  38.                acBlkTblRec.AppendEntity(br);
  39.                acTrans.AddNewlyCreatedDBObject(br, true);
  40.                // Commit the transaction to save the new object to the database
  41.                acTrans.Commit();

 
希望这对其他人也有帮助。
 
干杯,Max。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 08:33 , Processed in 0.363201 second(s), 56 queries .

© 2020-2025 乐筑天下

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