明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2677|回复: 4

[符号表] BlockTableRecord和BlockTable关系?

[复制链接]
发表于 2009-9-20 19:27 | 显示全部楼层 |阅读模式

看了很多代码,对BlockTableRecord和BlockTable的关系越来越糊涂了

BlockTable里面到底是些什么东西,好像是个数组,有一个是属于模型空间的,还有什么别的吗?

模型空间的圆,直线,块参照,椭圆,点这些图元都属于一个BlockTableRecord吗?

一个块定义是不是一个BlockTableRecord,属于BlockTable吗?

还有,BlockTableRecord好像都有一个name,块定义的BlockTableRecord名字就是那个块定义的名字,那么整个模型空间里的那个BlockTableRecord是什么名字?

com里面圆,直线,块参照,椭圆,点这些图元都属于模型空间

块定义属于一个blocks的数组,里面存放了好多个block块定义。

谢谢!

发表于 2009-9-20 19:56 | 显示全部楼层

BlockTable->块表,即块表记录集合,所有的块定义都在这里面,相当于VBA里的ThisDrawing.Blocks集合

模型空间和图纸空间是特殊的BlockTableRecord,即块表记录

模型空间的圆,直线,块参照,椭圆,点这些图元都属于一个BlockTableRecord

一个块定义是一个BlockTableRecord,属于BlockTable

你的理解正确

模型空间名:BlockTableRecord.ModelSpace

图纸空间名:BlockTableRecord.PaperSpace

 楼主| 发表于 2009-9-20 20:17 | 显示全部楼层

acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace]

看到这句话时候,acBlkTbl可以用方括号,那么他应该是一个数组,那我能查看它所有的数组成员吗,可以知道它的长度吗?

还有,查看对象浏览器的时候,发现BlockReference的构造函数public BlockReference(Autodesk.AutoCAD.Geometry.Point3d position, Autodesk.AutoCAD.DatabaseServices.ObjectId blockTableRecord) 这position就是插入点吧,blockTableRecord应该就是块定义吧?

三,对于模型空间的每一个Entity图形对象

Entity ent = trans.GetObject(id, OpenMode.ForWrite) as Entity;
                                Entity NewEnt = (Entity)ent.Clone();
                                string s;
                                s = NewEnt.BlockName;

想知道这个NewEnt是圆还是直线,运行到s = NewEnt.BlockName;出错了,查看对象浏览器,Entity.BlockName是string类型,还有别的方法可以知道图形对象的分类吗?

发表于 2009-9-20 20:33 | 显示全部楼层

BlockTable是集合

[]同样可以作为索引器

集合类的遍历只有用foreach

想知道这个NewEnt是圆还是直线

可以用is或as运算符

if(NewEnt is Line)

{}

或者反射

NewEnt.GetType().Name

 楼主| 发表于 2009-9-20 20:51 | 显示全部楼层
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 04:19 , Processed in 0.167227 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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