mieasy 发表于 2002-8-26 16:37:00

关于自定义实体

紧急求助,对于自定义实体,定义其coordinate system需要重载哪个函数。先谢谢了。

leeyeafu 发表于 2002-8-27 08:36:00

好的提问往往是解决问题的关键

对于自定义实体,我理解为从AcDbEntity派生的新类。而你要定义的坐标系是指实体坐标系,还是观察坐标系,或者是视口.......
ACAD可以将三种可能的坐标变换应用于自定义实体,这三种变换是:实体的块变换、视口的视图变换、透视变换,每类变换都将产生一个新的坐标系类型:
模型坐标->通过实体块变换->世界坐标->视口变换->观察坐标->透视变换->显示坐标
请问:你要定义什么样的coordinary system?
也许我误解了你的意图,望谅。请复。

mieasy 发表于 2002-8-27 16:34:00

请求帮助

你好,我是一只菜鸟,对坐标系部分很不熟悉。我想要达到的目的是:在AUTOCAD中,用户可以通过选择实体建立用户坐标系(UCS)。但是自定义实体(从AcDbEntity派生的新类)必须定义坐标系,才能支持系统的此项功能。现在我就是想知在自定义实体时,需要重载哪个函数,才能定义坐标系。
多谢您的帮助。盼复

leeyeafu 发表于 2002-8-28 09:59:00

我知道你的意思了

本帖最后由 作者 于 2002-8-28 9:59:01 编辑

首先可以肯定,virtual void AcDbEntity::getEcs(AcGeMatrix3d&) const函数要重载,该函数用于获取实体坐标系(Entity Coordinary System)。在ACAD中,只有尺寸标注、文字、圆、弧、多义线、块、实体(solid)、形、属性等调用getEsc()函数时返回非单位矩阵(单位矩阵表示世界坐标系)。
我不知道你的派生类中是否使用了GS标记或子实体,若使用了,可能你还要重载下面的函数,以获取与指定GS标记相关的子实体路径。
virtual Acad::ErrorStatus AcDbEntity::getSubentPathsAtGsMarker(AcDb::SubentType,int,const AcGePoint3d&,const AcGeMatrix3d&,int&,AcDbFullSubentPath*& );
最后,根据需要,可能要重载用于在观察坐标系下显示实体的函数
virtual void AcDbEntity::viewportDraw(AcGiViewportDraw*)

mieasy 发表于 2002-8-28 10:12:00

多谢

我明白了,非常非常感谢。有问题时能碰到一个热心高手,真是幸运,再次感谢。

cag 发表于 2003-3-5 20:46:00

能否为VBA写一个arx来支持自动化

[此贴子已经被作者于2003-3-5 20:46:21编辑过]
页: [1]
查看完整版本: 关于自定义实体